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

  • 事务有哪些特性?(ACID)

  • 怎么理解原子性?(同一个事务下 , 多个操作要么成功要么失败 , 不存在部分成功或者部分失败的情况)

  • 乐观锁和悲观锁的区别?(悲观锁假定会发生冲突 , 访问的时候都要先获得锁 , 保证同一个时刻只有线程获得锁 , 读读也会阻塞;乐观锁假设不会发生冲突 , 只有在提交操作的时候检查是否有冲突)这两种锁在Java和MySQL分别是怎么实现的?(Java乐观锁通过CAS实现 , 悲观锁通过synchronize实现 。 mysql乐观锁通过MVCC , 也就是版本实现 , 悲观锁可以通过select... for update加上排它锁)

  • HashMap为什么不是线程安全的?(多线程操作无并发控制 , 顺便说了在扩容的时候多线程访问时会造成死锁 , 会形成一个环 , 不过扩容时多线程操作形成环的问题再JDK1.8已经解决 , 但多线程下使用HashMap还会有一些其他问题比如数据丢失 , 所以多线程下不应该使用HashMap , 而应该使用ConcurrentHashMap)怎么让HashMap变得线程安全?(Collections的synchronize方法包装一个线程安全的Map , 或者直接用ConcurrentHashMap)两者的区别是什么?(前者直接在put和get方法加了synchronize同步 , 后者采用了分段锁以及CAS支持更高的并发)

    推荐阅读