1.set、List和Map区别
2.NIO、BIO和AIO的区别?NIO有哪些实际应用?
3.HashMap底层实现原理?
4.JDK7和JDK8中HashMap的底层实现有什么不同?
5.== 和equals()区别?
6.HashMap扩容
7.wait()怎么唤醒?—使用notify或者notifyAll
8.HashMap和HashTable的区别?
9.Synchronized修饰方法和代码块?
10.JAVA异常?
11.死锁产生的条件?如何避免?
死锁产生的四个必要条件:
1)互斥条件:即任意时刻一个资源只能给一个进程使用,其他进程若申请一个资源,而该资源被另一进程占有时,则申请者等待直到资源被占有者释放。
2)不可剥夺条件:进程所获得的资源在未使用完毕之前,不被其他进程强行剥夺,而只能由获得该资源的进程资源释放。
3)请求和保持条件:进程每次申请它所需要的一部分资源,在申请新的资源的同时,继续占用已分配到的资源。
4)循环等待条件:前一个进程占有后一个进程所申请的资源。
死锁预防
我们可以通过破坏死锁产生的4个必要条件来 预防死锁,由于资源互斥是资源使用的固有特性是无法改变的。
1)破坏“不可剥夺”条件:一个进程不能获得所需要的全部资源时便处于等待状态,等待期间他占有的资源将被隐式的释放重新加入到 系统的资源列表中,可以被其他的进程使用,而等待的进程只有重新获得自己原有的资源以及新申请的资源才可以重新启动,执行。
2)破坏”请求与保持条件“:第一种方法静态分配即每个进程在开始执行时就申请他所需要的全部资源。第二种是动态分配即每个进程在申请所需要的资源时他本身不占用系统资源。
3)破坏“循环等待”条件:采用资源有序分配其基本思想是将系统中的所有资源顺序编号,将紧缺的,稀少的采用较大的编号,在申请资源时必须按照编号的顺序进行,一个进程只有获得较小编号的进程才能申请较大编号的进程。