19年Java岗面试分享:升级打怪连跳三家公司 最终斩获心动offer(11)

  • CAS和synchronize有什么区别?都用synchronize不行么?(CAS是乐观锁 , 不需要阻塞 , 硬件级别实现的原子性;synchronize会阻塞 , JVM级别实现的原子性 。 使用场景不同 , 线程冲突严重时CAS会造成CPU压力过大 , 导致吞吐量下降 , synchronize的原理是先自旋然后阻塞 , 线程冲突严重仍然有较高的吞吐量 , 因为线程都被阻塞了 , 不会占用CPU )

  • 如果要保证线程安全怎么办?(ConcurrentHashMap)

  • ConcurrentHashMap怎么实现线程安全的?(分段锁)

  • get需要加锁么 , 为什么?(不用 , volatile关键字)

  • volatile的作用是什么?(保证内存可见性)

  • 底层怎么实现的?(说了主内存和工作内存 , 读写内存屏障 , happen-before , 并在纸上画了线程交互图)

  • 在多核CPU下 , 可见性怎么保证?(思考了一会 , 总线嗅探技术)

  • 推荐阅读