最新Java校招面试题及答案
例如 :假设存在两个线程(线程 1、线程 2),线程 1 通过 Iterator 在遍历集合 A 中的元素,在某个时候线程 2 修改了集合 A 的结构(是结构上面的修改,而不是简单的修改集合元素的内容),那么这个时候程序就会抛出 ConcurrentModificationException 异常,从而产生 fail-fast 机制。 原因: 迭代器在遍历时直接访问集合中的内容,并且在遍历过程中使用一个 modCount 变量。集合在被遍历期间如果内容发生变化,就会改变 modCount 的值。 每当迭代器使用 hashNext()/next() 遍历下一个元素之前,都会检测 modCount 变量是否为 expectedmodCount 值,是的话就返回遍历;否则抛出异常,终止遍历。 解决办法:
小结:本小节是 Java 中关于集合的考察,是 Java 岗位面试中必考的知识点,除了应该掌握以上的问题,包括各个集合的底层实现也建议各位同学阅读,加深理解。 (三)高并发编程-JUC 包在 Java 5.0 提供了 java.util.concurrent(简称 JUC )包,在此包中增加了在并发编程中很常用的实用工具类,用于定义类似于线程的自定义子系统,包括线程池、异步 IO 和轻量级任务框架。 1)多线程和单线程的区别和联系: 答:
结论:即采用多线程不会提高程序的执行速度,反而会降低速度,但是对于用户来说,可以减少用户的响应时间。 2)如何指定多个线程的执行顺序? 解析:面试官会给你举个例子,如何让 10 个线程按照顺序打印 0123456789?(写代码实现) 答:
3)线程和进程的区别:(必考) 答:
4)多线程产生死锁的 4 个必要条件? 答:
面试官:如何避免死锁?(经常接着问这个问题哦~) 答:指定获取锁的顺序,举例如下:
5)sleep( ) 和 wait( n)、wait( ) 的区别: 答:
6)synchronized 关键字: 答:底层实现:
含义:(monitor 机制) Synchronized 是在加锁,加对象锁。对象锁是一种重量锁(monitor),synchronized 的锁机制会根据线程竞争情况在运行时会有偏向锁(单一线程)、轻量锁(多个线程访问 synchronized 区域)、对象锁(重量锁,多个线程存在竞争的情况)、自旋锁等。 该关键字是一个几种锁的封装。 7)volatile 关键字 答:该关键字可以保证可见性不保证原子性。 功能:
解析:关于指令重排序的问题,可以查阅 DCL 双检锁失效相关资料。 8)ThreadLocal(线程局部变量)关键字: 答:当使用 ThreadLocal 维护变量时,其为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立的改变自己的副本,而不会影响其他线程对应的副本。 ThreadLocal 内部实现机制:
<img src="https://www.52php.cn/res/2019/03-16/23/74713424e22bedbc89ac3d253baa6b00.jpg" alt=""> 9)Atomic 关键字: 答:可以使基本数据类型以原子的方式实现自增自减等操作。参考我的博客:concurrent.atomic 包下的类 AtomicInteger 的使用。 10)线程池有了解吗?(必考) (编辑:武汉站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |