并发编程高级面试专题解析
问题一: Synchronized 用过吗, 其原理是什么?
问题二: 你刚才提到获取对象的锁, 这个“ 锁” 到底是什么? 如何确定对象的锁?
问题三: JVM 对 Java 的原生所做了哪些优化?
问题四: 为什么说 Synchronized 是非公平锁?
问题五: 什么是锁消除和锁粗化?
问题六: 为什么说Synchronized是一个悲观锁? 乐观锁的实现原理又是什么? 什么是 CAS
问题七: 乐观锁一定就是好的吗?
问题八: 跟Synchronized相比, 可重入锁Reentrant Lock其实现原理有什么不同
问题九: 那么请谈谈 AQS 框架是怎么回事儿?
问题十: 请尽可能详尽地对比下Synchronized和Reentrant Lock的异同。
问题十一: Reentrant Lock 是如何实现可重复性的?
问题十二: 请谈谈 Read Write Lock 和 Stamped Lock。
问题十三: 如何让Java的线程彼此同步? 你了解过哪些同步器? 请分别介绍下。
问题十四: Cyclic Barrier和Count Down Latch看起来很相似, 请对比
问题十五: Java 中的线程池是如何实现的?
问题十六: 创建线程池的几个核心构造参数?
问题十七: 线程池中的线程是怎么创建的? 是一开始就随着线程池的启动创建好的吗?
问题十八: 既然提到可以通过配置不同参数创建出不同的线程池, 那么Java 中默认实现好的线程池又有哪
问题十九: 什么是Java的内存模型, Java中各个线程是怎么彼此看到对方的变量的?
问题二十: 请谈谈 volatile 有什么特点, 为什么它能保证变量对所有线程的可见性?
问题二十一: 既然 volatile 能够保证线程间的变量可见性, 是不是就意味着基于volatile
问题二十二: 请对比下 volatile 对比 Synchronized 的异同。
问题二十三: 请谈谈 Thread Local 是怎么解决并发安全的?
问题二十四: 很多人都说要慎用 Thread Local, 谈谈你的理解, 使用Thread Local
我相信大多数朋友们对于这几道面试题都是一脸懵圈,如果你平时只有CRUD的经验,也不了解并发编程,如果被面试官问道的话,基本上就是毫无还手之力了,那offer肯定就不是你的了!更不用提涨薪了!
那么在实际的业务项目中,并发编程该从何做起来的,一篇文章也很难讲清楚,我这边之前收集整理了一份并发编程系统学习文档。由于文章比较多,头条限制了字数,所以我整理了个目录贴(传送门),方便查阅。非常适合在学习并发的朋友观看!
这份文档主要分为4大PDF:
由于文档的内容太多,无法全部展示文字,在这做成了文档形式,有需要的朋友关注文末公众号即可获取
- 并发编程高级PDF
- 并发编程之原理
- 并发编程之模式
- 并发编程之应用
一起来看看目录:
第一份 并发编程高级PDF
- 进程与线程
- Java线程
- 共享模型之管程
- 共享模型之内存
- 共享模型之无锁
- 共享模型之不可变
- 共享模型之工具
进程与线程
Java线程
共享模型之管程
共享模型之内存
共享模型之无锁
共享模型之不可变
共享模型之工具
第二份 并发编程之原理篇
- 指令级并行原理
- CPU缓存结构原理
- volatile原理
- final原理
- Monitor原理
- synchronized原理
- synchronized原理进阶
- wait notify原理
- join原理
- park unpark原理
- AQS原理
- ReentrantLock原理
- 读写锁原理
- Semaphore原理
- ConcurrentHashMap原理
- LinkedBlockingQueue原理
- ConcurrentLinkedQueue原理
第三份 并发编程之模式篇
- 同步模式之保护性暂停
- 同步模式之Balking
- 同步模式之顺序控制
- 异步模式之生产者/消费者
- 异步模式之工作线程
- 终止模式之两阶段终止模式
- 线程安全单例
- 享元模式
第四份 并发编程之应用篇:
- 效率
- 限制
- 互斥
- 同步和异步
- 缓存
- 分治
- 统筹
并发编程思维导图:
由于文档的内容太多,无法全部展示文字,在这做成了文档形式,有需要的朋友请关注下方公众号获取