java面试题

问题:switch(exp)语句能作用的数据类型

参考答案:


问题:说出ArrayList,Vector, LinkedList的存储性能和特性

参考答案:ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。


问题:Collection 和 Collections的区别

参考答案:Collection是集合类的上级接口,继承于它的接口主要有Set 和List。Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。


问题:&和&&的区别

参考答案:&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。&&可以短路


问题:HashMap和Hashtable的区别

参考答案:HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。

  • HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。

  • HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。

  • Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。

  • 最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。

  • Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。


问题:sleep() 和 wait() 有什么区别

参考答案:sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。

  • wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。


问题:Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型

参考答案:方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。


问题:Static Nested Class 和 Inner Class的不同。

参考答案:Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。


问题:启动一个线程是用run()还是start()?

参考答案:启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。


问题:List, Set, Map是否继承自Collection接口?

参考答案:List,Set是,Map不是。详细可以查看 java常用集合类


问题:abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?

参考答案:都不能


问题:try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

参考答案:会执行,在return前执行。


问题:char型变量中能不能存贮一个中文汉字?为什么?

参考答案:能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节,所以放一个中文是没问题的


问题:简述synchronized和java.util.concurrent.locks.Lock的异同

参考答案:主要相同点:Lock能完成synchronized所实现的所有功能

  • 主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放。


问题:简述String对象的创建

参考答案:

  • 当使用任何方式来创建一个字符串对象s时,Java运行时(运行中JVM)会拿着这个X在String池中找是否存在内容相同的字符串对象,如果不存在,则在池中创建一个字符串s,否则,不在池中添加。

  • Java中,只要使用new关键字来创建对象,则一定会(在堆区或栈区)创建一个新的对象。

  • 使用直接指定或者使用纯字符串串联来创建String对象,则仅仅会检查维护String池中的字符串,池中没有就在池中创建一个,有则罢了!但绝不会在堆栈区再去创建该String对象。

  • 使用包含变量的表达式来创建String对象,则不仅会检查维护String池,而且还会在堆栈区创建一个String对象


原创文章,转载请注明:转载自Onstepr博客 | Onstepr Blog – Onstepr.com

评论 (0)
  1. 暂无评论

当前禁止评论