更新时间:2025-03-13 18:04:16
封面
版权信息
版权
内容提要
前言
第1章 并发原理和线程安全
1.1 面试官:谈谈你对线程和线程安全的理解
1.1.1 Java创建和启动线程的方式有哪些?它们之间有什么区别?
1.1.2 Java线程都有哪些状态?其状态是如何切换的?
1.1.3 Java线程使用到了哪些调度策略?
1.1.4 为什么使用并发编程?需注意哪些问题?
1.1.5 并发编程和并行编程有什么区别?
1.1.6 什么是线程同步和阻塞?它们有什么关系?
1.1.7 什么是线程安全?如何确保线程安全?
1.2 面试官:介绍JMM与线程安全的关系
1.2.1 什么是JMM?它有哪些特征和作用?
1.2.2 JMM和Java内存结构有什么区别?
1.2.3 JMM内存是如何交互的?都有哪些操作?
1.2.4 什么是happens-before原则?它有什么作用?
1.2.5 什么是指令重排序和内存屏障?
1.2.6 如何保证程序的可见性、原子性和有序性?
1.3 面试官:谈谈多线程中的上下文切换
1.3.1 什么是上下文切换?上下文切换会带来哪些问题?
1.3.2 什么是进程上下文切换?引起进程上下文切换的原因有哪些?
1.3.3 什么是线程上下文切换?与进程上下文切换有何区别?
1.3.4 如何查看线程上下文切换信息?
1.3.5 如何减少线程上下文切换的次数?
1.4 面试官:谈谈你对AQS的理解
1.4.1 什么是AQS?它有什么作用?
1.4.2 AQS支持哪些资源共享方式?
1.4.3 AQS的底层数据结构和工作原理是什么?
1.4.4 什么是Condition?它有哪些使用场景?
1.4.5 AQS中的Condition是如何实现的?
1.5 面试官:讲讲CAS实现机制和原理
1.5.1 什么是CAS?它有什么作用?
1.5.2 Java中有哪些CAS工具?如何使用它们?
1.5.3 Unsafe类和CAS有什么关系?
1.5.4 使用CAS会产生什么问题?如何解决这些问题?
第2章 并发关键字原理
2.1 面试官:谈谈final关键字对并发编程的作用
2.1.1 final关键字的底层原理是什么?
2.1.2 final关键字对并发编程有什么作用?
2.1.3 为什么final引用不能从构造函数内“逸出”?
2.2 面试官:谈谈synchronized关键字的特性和原理
2.2.1 synchronized关键字的底层实现原理是什么?
2.2.2 synchronized关键字是怎么保证线程安全的?
2.2.3 synchronized是可重入锁吗?其底层如何实现?
2.2.4 Java对synchronized关键字做了哪些优化?
2.2.5 说说synchronized锁升级过程及实现原理
2.2.6 什么是synchronized锁消除和锁粗化?
2.3 面试官:说说volatile关键字的使用及原理
2.3.1 volatile关键字的使用场景有哪些?
2.3.2 volatile关键字如何做到内存可见性?
2.3.3 volatile关键字如何实现禁止指令重排序?
2.3.4 volatile变量的内存屏障插入策略是什么?
2.3.5 volatile关键字能保证操作的原子性吗?
2.3.6 双重检查锁为什么要使用volatile关键字?
2.3.7 volatile和synchronized关键字有什么区别?
第3章 并发锁和死锁
3.1 面试官:谈谈Java并发锁的使用和原理
3.1.1 Java都有哪些锁?它们有什么区别?
3.1.2 乐观锁和悲观锁的应用和原理有什么区别?
3.1.3 乐观锁如何解决ABA问题?
3.1.4 在Java中如何应用读锁和写锁?
3.1.5 Java独享锁和共享锁有何区别?
3.1.6 偏向锁、轻量级锁、重量级锁是什么?
3.1.7 什么是公平锁?什么是非公平锁?
3.1.8 分段锁的设计思想和目的是什么?
3.1.9 什么是可重入锁?其实现原理是什么?
3.1.10 什么是自旋锁?它有哪些实现方式?
3.1.11 常用的锁优化手段和方法有哪些?
3.2 面试官:如何预防和解决多线程死锁?
3.2.1 什么是线程死锁?其产生原因有哪些?
3.2.2 如何避免和解决线程死锁?
3.2.3 如何分析和定位死锁问题源头?
3.2.4 什么是饥饿和活锁?它们与死锁有什么区别?
3.2.5 什么是锁的分级?如何使用它预防死锁?
3.2.6 Java并发API有哪些高级特性可用于避免死锁?
第4章 并发容器和工具
4.1 面试官:谈谈你对JUC的理解
4.1.1 什么是JUC?它包含哪些内容?
4.1.2 什么是原子类?它有哪些作用和优点?
4.1.3 Lock框架有哪些常用的锁?它们有什么优缺点?
4.1.4 常用的并发容器有哪些?适用于哪些场景?
4.1.5 同步容器与并发容器有什么区别?
4.1.6 JUC包含哪些同步工具类?有什么作用?
4.2 面试官:谈谈JUC容器的实现原理
4.2.1 ConcurrentHashMap的底层存储结构是什么?
4.2.2 ConcurrentHashMap如何保证线程安全?
4.2.3 ConcurrentHashMap如何实现扩容?
4.2.4 在ConcurrentHashMap中什么情况下链表会转换为红黑树?
4.2.5 什么是Copy-on-Write?常见的CopyOnWrite容器有哪些?
4.2.6 CopyOnWriteArrayList是如何保证线程安全的?
4.3 面试官:谈谈你对并发队列的理解
4.3.1 BlockingQueue和BlockingDeque有什么区别?
4.3.2 BlockingQueue阻塞队列的实现原理是什么?
4.3.3 ArrayBlockingQueue和LinkedBlockingQueue有什么区别?
4.3.4 SynchronousQueue底层有几种数据结构?有什么区别?
4.3.5 ConcurrentLinkedQueue是如何保证线程安全的?
4.4 面试官:介绍JUC同步工具的使用及实现原理