做为一个大三在校生,很快就要去实习了,但总感受本身连一个刚入门的菜鸟都不如,哎。发现本身连那个程序员的门槛都还没进,有点小伤心,不过伤心没用,努力向前才是咱们如今应该作的事情。java
下面是我以前在学校所从网上所摘抄的一些java面试题。只是做为平时复习,加深本身的知识水平,无其余用途。程序员
说出ArrayList,Vector, LinkedList的存储性能和特性
ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增长和插入元素,它们都容许直接按序号索引元素,可是插入元素要涉及数组元素移动等内存操做,因此索引数据快而插入数据慢,Vector因为使用了synchronized方法(线程安全),一般性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据须要进行前向或后向遍历,可是插入数据时只须要记录本项的先后项便可,因此插入速度较快。web
Java有没有goto?
java中的保留字,如今没有在java中使用。面试
启动一个线程是用run()仍是start()?
启动一个线程是调用start()方法,使线程所表明的虚拟处理机处于可运行状态,这意味着它能够由JVM调度并执行。这并不意味着线程就会当即运行。run()方法能够产生必须退出的标志来中止一个线程。数组
当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
不能,一个对象的一个synchronized方法只能由一个线程访问。安全
请说出你所知道的线程同步的方法。
wait():使一个线程处于等待状态,而且释放所持有的对象的lock。
sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。
notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM肯定唤醒哪一个线程,并且不是按优先级。
Allnotity():唤醒全部处入等待状态的线程,注意并非给全部唤醒线程一个对象的锁,而是让它们竞争。多线程
你所知道的集合类都有哪些?主要方法?
最经常使用的集合类是 List 和 Map。 List 的具体实现包括 ArrayList 和 Vector,它们是可变大小的列表,比较适合构建、存储和操做任何类型对象的元素列表。 List 适用于按数值索引访问元素的情形。
Map 提供了一个更通用的元素存储方法。 Map 集合类用于存储元素对(称做“键”和“值”),其中每一个键映射到一个值。函数
描述一下JVM加载class文件的原理机制?
JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader 是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。性能
char型变量中能不能存贮一个中文汉字?为何?
可以定义成为一个中文的,由于java中以unicode编码,一个char占16个字节,因此放一个中文是没问题的编码
多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?
多线程有两种实现方法,分别是继承Thread类与实现Runnable接口
同步的实现方面有两种,分别是synchronized,wait与notify
线程的基本概念、线程的基本状态以及状态之间的关系
线程指在程序执行过程当中,可以执行程序代码的一个执行单位,每一个程序至少都有一个线程,也就是程序自己。
Java中的线程有四种状态分别是:运行、就绪、挂起、结束。
servlet的生命周期
web容器加载servlet,生命周期开始。经过调用servlet的init()方法进行servlet的初始化。经过调用service()方法实现,根据请求的不一样调用不一样的do***()方法。结束服务,web容器调用servlet的destroy()方法。
Abstract与interface的区别
在Java语言中,abstract class和interface是支持抽象类定义的两种机制。
不能建立abstract类的实例,然而能够建立一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。
不能有抽象构造函数或抽象静态方法。
Abstract 类的子类为它们父类中的全部抽象方法提供实现,不然它们也是抽象类。
接口(interface)是抽象类的变体。
在接口中,全部方法都是抽象,公开的。多继承性可经过实现这样的接口而得到。
接口中的全部方法都没有一个有程序体。接口只能够定义staticfinal成员变量。
接口的实现与子类类似,除了该实现类不能从接口定义中继承行为。
当类实现特殊接口时,它定义(即将程序体给予)全部这种接口的方法。而后,它能够在实现了该接口的类的任何对象上调用接口的方法。
因为有抽象类,它容许使用接口名做为引用变量的类型。一般的动态联编将生效。
引用能够转换到接口类型或从接口类型转换,instanceof运算符能够用来决定某对象的类是否实现了接口。
接口能够继承接口。抽象类能够实现(implements)接口,抽象类是能够继承实体类,但前提是实体类必须有明确的构造函数。接口更关注“能实现什么功能”,而无论“怎么实现的”。
1.相同点
A. 二者都是抽象类,都不能实例化。
B. interface实现类及abstrctclass的子类都必需要实现已经声明的抽象方法。
2. 不一样点
A. interface须要实现,要用implements,而abstract class须要继承,要用extends。
B. 一个类能够实现多个interface,但一个类只能继承一个abstract class。
C. interface强调特定功能的实现,而abstractclass强调所属关系。
D. 尽管interface实现类及abstrct class的子类都必需要实现相应的抽象方法,但实现的形式不一样。interface中的每个方法都是抽象方法,都只是声明的(declaration,没有方法体),实现类必需要实现。而abstractclass的子类能够有选择地实现。
这个选择有两点含义:
一是Abastract class中并不是全部的方法都是抽象的,只有那些冠有abstract的方法才是抽象的,子类必须实现。那些没有abstract的方法,在Abstrct class中必须定义方法体。
二是abstract class的子类在继承它时,对非抽象方法既能够直接继承,也能够覆盖;而对抽象方法,能够选择实现,也能够经过再次声明其方法为抽象的方式,无需实现,留给其子类来实现,但此类必须也声明为抽象类。既是抽象类,固然也不能实例化。
E. abstract class是interface与Class的中介。
interface是彻底抽象的,只能声明方法,并且只能声明pulic的方法,不能声明private及protected的方法,不能定义方法体,也不能声明实例变量。然而,interface却能够声明常量变量,而且在JDK中不难找出这种例子。但将常量变量放在interface中违背了其做为接口的做用而存在的宗旨,也混淆了interface与类的不一样价值。若是的确须要,能够将其放在相应的abstractclass或Class中。
abstract class在interface及Class中起到了承上启下的做用。一方面,abstract class是抽象的,能够声明抽象方法,以规范子类必须实现的功能;另外一方面,它又能够定义缺省的方法体,供子类直接使用或覆盖。另外,它还能够定义本身的实例变量,以供子类经过继承来使用。
3. interface的应用场合
A. 类与类以前须要特定的接口进行协调,而不在意其如何实现。
B. 做为可以实现特定功能的标识存在,也能够是什么接口方法都没有的纯粹标识。
C. 须要将一组类视为单一的