Java校招面试题(二)

1.同步方法和同步代码块的区别是什么?

同步方法默认用this或者当前类class对象作为锁

同步代码块可以选择以什么来加锁,比同步方法要更细颗粒度,我们可以选择只同步会发生同步问题的部分代码,而不是整个方法

同步方法使用关键字synchronized修饰方法,而同步代码块主要是修饰需要进行同步的代码,用synchronized(object){代码内容}进行修饰

2.在监视器(Monitor)内部,是如何做线程同步的?程序应该做哪种级别的同步?

监视器和锁在Java虚拟机中是一块使用的,监视器监视一块同步代码块,确保一次只有一个线程执行同步代码块,每一个监视器都和一个对象引用相关联,线程在获取锁之前不允许执行同步代码

3.什么是死锁?

所谓死锁是指多个进程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。死锁产生的4个必要条件:

互斥条件:进程要求对所分配的资源(打印机)进行排他性控制,即在一段时间内某资源仅为一个进程所占有,此时若有其他进程请求该资源,则请求进程只能等待

不剥夺条件:进程所获得的资源在未使用完毕之前,不能被其它进程强行夺走,即只能由获得该资源的进程自己来释放(只能是主动释放)
请求和保持条件:进程已经保持了至少一个资源,但又提出了新的要求,而该资源已被其它进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放

循环等待条件:存在一种进程资源的循环等待链,链中每一个进程已获得的资源同时被链中下一个进程所请求

4.如何确保N个线程可以访问N个资源同时又不导致死锁?

使用多线程的时候,一种非常简单的避免死锁的方式就是:指定获取锁的顺序,并强制线程按照指定的顺序获取锁,因此,如果所有的线程都是以同样的顺序加锁和释放锁,就不会出现死锁了

5.Java集合类框架的基本接口有哪些?

集合类接口指定了一组叫做元素的对象,集合类接口的每一种具体的实现类都可以选择以它自己的方式对元素进行保存和排序,有的集合类允许重复的键,有些不允许

Java集合类提供了一套设计良好的支持对一组对象进行操作的接口和类,Java集合类里面最基本的接口有:

Collection:代表一组对象,每一个对象都是它的子元素

Set:不包含重复元素

List:有顺序的Collection,并且可以包含重复元素

Map:可以把键(key)映射到值(value)的对象,键不能重复

6.为什么集合类没有实现Cloneable和Serializable接口?

克隆(cloning)或者序列化(Serialization)的语义和含义是跟具体的实现相关的,因此,应该由集合类的具体实现来决定如何被克隆或者是序列化

7.什么是迭代器(Iterator)?

Iterator接口提供了很多对集合元素进行迭代的方法,每一个集合类都包含了可以返回迭代器实例的迭代方法

迭代器可以在迭代过程中删除底层集合的元素,但是不可以直接调用集合的remove(Object object)删除,可以通过迭代器的remove()方法删除

8.Iterator和ListIterator的区别是什么?

Iterator可用来遍历Set和List集合,但是ListIterator只能用来遍历List

Iterator对集合只能是前向遍历,ListIterator既可以前向也可以后向

ListIterator实现了Iterator接口,并包含其它的功能,比如:增加元素,替换元素,获取前一个和后一个元素的索引,等等

9.

发布了14 篇原创文章 · 获赞 0 · 访问量 157

猜你喜欢

转载自blog.csdn.net/qq_39837804/article/details/103691396