字节Java后端高阶面试复盘
- 轮次
- 多轮技术面
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
synchronized和ReentrantLock的核心区别是什么?synchronized的锁升级条件是什么?volatile为什么不能保证原子性?i++在字节码层面发生了什么?- ThreadLocal 在线程池场景下如何发生内存泄漏?
- JVM 线上 Full GC 频繁时如何排查?
- MySQL 的 MVCC 和间隙锁如何配合防止幻读?
- 如何设计支持亿级流量的电商大促系统?
- TCC、SAGA 和消息最终一致性分别适用于什么场景?
- 如何设计全链路压测平台?
《参考解析》
- 锁选择:
synchronized由 JVM 自动管理,语法简单;ReentrantLock基于 AQS,支持超时、中断获取和多个 Condition。需要这些控制能力或显式锁生命周期时再选后者。 - ThreadLocal 泄漏:ThreadLocalMap 的 key 是弱引用,value 仍是强引用;在线程池长期存活线程中,key 被回收后 value 可能残留。在线程任务的
finally中调用remove()是基本防线。 - MVCC 与间隙锁:普通快照读通过 Read View 和 Undo Log 保证可重复读;
FOR UPDATE、UPDATE、DELETE 等当前读通过记录锁和间隙锁阻止范围内插入。锁范围受索引访问路径影响,不能笼统认为可重复读完全消除幻读。 - 全链路压测:用请求标记区分压测流量,沿调用链透传并路由到影子库、影子表和独立监控。系统还要隔离消息、缓存和外部副作用,确保压测不会污染真实业务。