Java面试题小集萃
Posted 郑州AAA软件教育
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java面试题小集萃相关的知识,希望对你有一定的参考价值。
1、线程同步的方法都有什么?
wait():使一个线程处于等待状态,并且释放所持有的对象的lock。
sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。
notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。
Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争
2、Java语言有什么特点?
Java包含了一种计算机编程语言和一个平台。
1.Java编程语言是一种高级语言。由Sun微系统公司(Sun Microsystem)发布,并作为一种开放的标准进行提供。
2.Java是一种简单的,面向对象的、分布式的、解释的、健壮的、安全的、结构的、中立的、可移植的、性能很优异的多线程的动态的语言。
3.Java平台包括了Java虚拟机(JVM)和Java应用程序接口(API)。
3、简述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 就必须为之提供外同步(如果是ArrayList:List lst = Collections.synchronizedList(new ArrayList());如果是HashMap:Map map = Collections.synchronizedMap(new HashMap());)。
Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。
4、说出ArrayList,Vector, LinkedList的存储性能和特性
ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢.
Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
5 abstract class(抽象类)和interface(接口)有什么区别?
声明方法的存在而不去实现它的类被叫做抽象类 (abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个 有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。 然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到 接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。
6、Java语言中的final, finally, finalize三者的区别
final用于声明属性、方法、类,表示属性不可变、方法不可覆盖、类不可继承;
finally是异常处理语句结构的一部分,表示总是执行;
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法。可以覆盖此方法提供垃圾收集时的其他资源的回收,如关闭文件。
7、什么时候使用断言?什么是垃圾回收?
断言不应该用于验证输入数据到一个public方法或命令行参数。IllegalArgumentException会是一个更好的选择。在public方法中,只用断言来检查它们根本不应该发生的情况。
垃圾回收是Java中自动内存管理的另一种叫法。垃圾回收的目的是为程序保持尽可能多的可用堆(heap)。 JVM会删除堆上不再需要从堆引用的对象。
8、请说明Java中static关键字与final关键字的用法
当声明一个事物是static时,就意味着这个域或方法不会与包含它的那个类的任何对象实例关联在一起。所以即使从没创建某个类的对象的任何对象,也可以调用其static方法或者访问其static域。
对于基本类型final使数值恒定不变,而对于对象引用,final使引用恒定不变,一旦引用被初始化指向一个对象,就无法再把它改为指向另一个对象。
名 称:郑州AAA教育软件学院
地 点:二七区政通路25号(工商局对面)
电 话:186-3877-9892
Q Q:491897620
官 网:http://www.aaa-edu.com/
赞是一种鼓励 | 分享传递友谊
小编:流光 审核:安文博
以上是关于Java面试题小集萃的主要内容,如果未能解决你的问题,请参考以下文章
Servlet中的doPost和doGet方法有什么区别?传递和获取参数上有什么区别?