一、Java笔试题基础
1. Java中的异常有哪几类?分别怎么使用?
检出异常,非检出异常。检出异常需要try…catch才能编译通过。非检出异常不用try…catch也能编译通过。
RuntimeException是非检出异常,不需要try…catch也能编译通过。
IoException,SQLException等等其他所有异常都是检出异常,必须要try…catach才能编译通过。
2. 常用的集合类有哪些?比如List如何排序?
分两种,一种实现Set接口,一种是实现List接口的。
Set:TreeSet,HashSet.
List:ArrayList,LinkedList,Vector(线程安全)。
JDK7以前用collections.sort(list,Comparator).
JDK8直接用List.sort(Comparator).
4. ArrayList和LinkedList内部的实现大致是怎样的?他们之间的区别和各自适应的场景是什么?
ArrayList,是数组结构:少用与中间的增删。多用于查询,修改。每次增删元素顺序都会操作每个元素。
LinkedList,是链表结构:多用于中间,开头增删。少用查询,修改。查询时会遍历大量元素。
5. 内存溢出是怎么回事?
对象有被指向的引用,但是再也用不到它就是内存溢出了。
GC机制:复制回收,标记清除,引用计数(如果有循环引用后,会影响垃圾回收,所以JVM虚拟机没有采用此方法进行垃圾回收)。
6. ClassLoader有什么用?
类加载器:所有类都需要Classloader来加载。
BoostrapClassLoader,加载系统(java包下)的类,SystemClassLoader,加载系统扩展类(少用),AppClassloader应用类加载器,还有针对每个项目的类加载器。
7. ==和equals的区别?
==判断对象物理地址。
equals判断对象Value是否相等。
8. hashCode方法的作用?
在hashMap中使用,把一个对象变成一个整型。hashCode规范,如果两个对象的equals返回true,那他们的hashCode必须相等,但是hashCode相等,不一定equals不一定相等。
9. Object类中有哪些方法?列举3个以上。
构造方法,toString(),equals,hashCode,getClass,finalize,clone,三个wait(),notify,notifyAll.
10. NIO是什么?适用于何种场景?
NIO是newIO,接口都是异步的,非阻塞的。
12. HashMap数据结构、扩展策略,Hash冲突攻击如何防范,如何实现线程安全的HashMap?
JDK7以前:数组里面存linkedList,hash冲突,升级到JDK8。
JDK8,数组里面加集合,如果对象hashCode相同,不可比较时就是linkedList,可比较就会用TreeSet进行排序处理(红黑树先访问小的)。hash冲突不用防