-
说一下synchronized和ReentrantLock的区别?synchronized可以作用在哪些地方?锁的是什么?说一下synchronized的锁升级?可逆吗?
答案:
- 用法:synchronized 是关键字,自动释放锁,写法简单;ReentrantLock 是类,需手动 lock/unlock(try-finally 包裹),更灵活。
- 特性:ReentrantLock 支持公平锁、可中断、超时,synchronized 没有;性能上低并发差不多,高并发需灵活控制时选 ReentrantLock,普通场景 synchronized 够用。
synchronized 作用地方:非静态方法(锁 this)、静态方法(锁 Class 对象)、代码块(锁 this/Class/ 自定义对象)。
锁升级:无锁→偏向锁(单线程复用)→轻量级锁(多线程交替,CAS 自旋)→重量级锁(竞争激烈,线程阻塞)。可逆性:偏向锁可撤销,轻量级锁升级到重量级锁后不可逆。
-
说一下悲观锁和乐观锁的区别?在mysql中有哪些实现?在java中有哪些实现?什么是aba问题?怎么解决?
答案:
- 核心区别:悲观锁先加锁再操作(怕冲突),乐观锁先操作后校验(信无冲突)。 实现:
- MySQL:悲观锁用 select ... for update;乐观锁用版本号 / 时间戳(update 带 version 条件)。
- Java:悲观锁是 synchronized/ReentrantLock;乐观锁是 CAS(如 AtomicInteger)+ 版本号。 ABA 问题:值 A→B→A,CAS 误判未修改。解决:加版本号 / 时间戳(如 AtomicStampedReference,校验值 + 版本)。”
-
你觉得上家公司怎么样?
答案: “面试官您好~ 上家公司挺好的:团队氛围好,同事愿意分享技术,我 3 年里从基础 CRUD 到 uni-app 小程序和后端对接,积累了不少实战经验,技术提升很大。不过公司业务偏垂直,项目类型单一,我想接触更多元的场景(比如复杂高并发、丰富架构设计),拓宽技术广度,所以考虑换平台。非常感谢上家给我的成长机会