今晚参加了uc的实习生笔试,越发自己基础掌握还不牢固,看起来又免不了被刷了。暑假还是好好巩固基础吧,校招再战!
下面是一些还记得的题目,重做一遍,也当做是练习。
前面有8道java单选题,还有几道多选题,多选涉及到了快排、二叉树遍历等。
有五道简答题,题目不难,也是很常考的题目,有准备的应该都很熟悉。
1.final,finally和finalize的区别?
final是一个修饰符,可以用于修饰类和变量。当修饰类时,代表该类不可被继承;当修饰变量时,代表该变量不可以重新赋值,即为常量;
finally是用于异常处理的关键字之一。当代码执行到try语句块时,如果发生了异常,将会跳转到catch语句块执行,而无论是否有异常产生,在离开异常处理块之前,都会跳转到finally语句块中执行(特别地,当try语句块中有System.exit(0)代码段时,finally语句块将不会得到执行);
finalize是Object类中的一个方法,根据虚拟机规范,GC在回收一个对象之前,需要先调用该对象的finalize方法,当finalize方法执行后,对象仍符合回收条件时,GC才会真正回收此对象,因此可用此方法安全的关闭一些打开的资源,但并不推荐这样做,因此在对象的一次生命周期中,此方法只会被GC调用一次。
2.HashMap有什么特性,和HashTable的区别是什么?
HashMap是java对关联数组的一种实现,底层采用的是hash散列确定元素的数组下标,并利用链表法解决冲突问题。因为基于hash散列,该容器类对元素的基本操作的时间复杂度都为O(1)。HashMap还允许key为null的情况。HashMap还是线程不安全的,不过也因此比线程安全的HashTable在单线程下效率更高。
HashTable和HashMap基本实现是一致的,但HashTable的方法都是同步方法,因此它是线程安全的。另外它不允许key为null的情况。
3.String,StringBuffer,StringBuilder的区别?
String用于构造不可变的字符串对象。一经创建后,该对象代表的字符串将不可以修改。
StringBuffer用于构建一种可变的字符串对象,并且是线程安全的,StringBuffer主要用于字符串连接操作,相比不可以的String对象,StringBuffer在字符串连接上更加高效。
StringBuilder和StringBuffer类似,但它是线程不安全的,在无需考虑线程安全的情况下,使用StringBuilder要比StringBuffer更高效。
4.sleep()方法和wait()方法的区别?
sleep方法会是当前线程停止执行,但不会释放当前线程持有的锁;wait方法同样可以使当前当前线程停止执行,但会释放当前线程持有的锁;
下面是补充的答案:
1.sleep是Thread的一个静态方法,起作用的是当前调用线程,wait是Object类的一个方法;
2.wait必须在同步块内使用,sleep则可以在任意地方使用
3.sleep会抛出异常,必须捕获,wait则没有需要捕获的异常
5.列举常用集合类的实现原理和适用场景?
ArrayList:
LinkedList:
Vector:
HashMap:
HashSet:
TreeMap:
TreeSet:
ConcurrentHashMap:
uc笔试