如果你在准备后端面试,看到"死锁"只能说出"互相等对方释放资源",被追问银行家算法或者 MySQL 间隙锁死锁就接不上话;聊到 Redis 分布式锁,除了 SETNX 说不出 Redlock 的争议点;ZK 的 ZAB 协议和 Paxos 的区别含糊其辞——这份资料针对的就是这几处容易露怯的地方。它不是让你从零学分布式,而是给已经有项目经验、但在面试中卡在细节的人补几个具体的洞。
死锁部分:不止是操作系统课本那道题
大多数人对方死锁的认知停留在四个必要条件,但面试官真正想听的是排查过程。资料里整理了数据库层面死锁的触发场景:两个事务以相反顺序更新同一批行、间隙锁在 RR 隔离级别下如何扩大锁定范围、以及 insert ... select 引发的锁等待。你需要能说清楚拿到死锁日志后怎么看 LATEST DETECTED DEADLOCK 那段、怎么定位到具体 SQL 和索引。JVM 层面的死锁则涉及线程 dump 的读法,jstack 输出里 deadlock 关键字附近的信息怎么解读、synchronized 和 ReentrantLock 死锁表现有什么不同。这部分练习建议:找一段自己项目里的事务代码,手动构造一个交叉更新场景,用 SHOW ENGINE INNODB STATUS 实际看一次死锁日志,比背概念管用。
Redis 分布式锁:从 SETNX 到 Redlock 的取舍
这块是面试重灾区。很多人能说出用 SET key value NX EX 加锁、用 Lua 脚本保证删除的原子性,但一旦被问到"锁过期了业务还没执行完怎么办"、"主从切换时锁丢失如何解决"就会卡住。资料里拆解了几个层次的问题:为什么不能先 SETNX 再 EXPIRE(原子性缺失)、value 为什么要用唯一标识(避免误删他人的锁)、看门狗续期机制的实现思路、以及 Redlock 在时钟漂移和 GC 停顿下受到的质疑。你不需要站队 Redlock 到底靠不靠谱,但要能说出 Martin Kleppmann 和 antirez 争论的核心分歧点在哪里。看完这部分,至少能回答:什么场景下 Redis 锁够用,什么场景下应该换 ZK 或数据库唯一约束。
ZK 与分布式事务:把一致性话题串起来
ZK 的题目往往从"怎么用 ZK 实现分布式锁"切入,然后延伸到临时顺序节点的作用、会话超时与羊群效应。再深一层就是 ZAB 协议:它和 Paxos 在设计目标上有什么不同、崩溃恢复阶段如何选主、消息广播阶段的两阶段提交变体。分布式事务部分则覆盖 2PC/3PC 的阻塞问题、TCC 的补偿逻辑怎么写、本地消息表和事务消息的区别、Seata 的 AT 模式靠什么回滚。这些内容分散在多个面试题里,但底层追问逻辑是一致的:你能否说清楚每个方案在一致性、可用性、性能之间做了什么妥协。
看完应该能回答的问题
- MySQL 死锁日志里哪一行告诉你锁等待的持有者和等待者?
- Redis 锁的 value 用 UUID 和用线程 ID 有什么区别?
- ZK 临时节点做锁,会话超时时间设置太短或太长分别有什么后果?
- ZAB 的崩溃恢复和 Paxos 的活锁问题有什么关联?
- TCC 的 Cancel 阶段如果执行失败,补偿机制应该怎么设计?
这些问题如果你现在答不完整,说明缺的不是"再学一遍分布式",而是把几个具体机制的对错边界搞清楚。资料按专题整理,适合挑自己最虚的那块先看,不用从头顺序读。面试前过一遍死锁排查和锁续期这两个高频追问点,性价比最高。
关于死锁、Redis、分布式锁、ZK、分布式事务的面试题整理
面试题解析,深入理解分布式锁与事务
编辑点评
全面覆盖死锁、Redis、分布式锁、ZK等核心概念,助力面试官级理解。
⭐ 编辑推荐
精选2023面试必备题,深入解析死锁、Redis、分布式锁、ZK、分布式事务等关键技术。
课程亮点
课程目录
专题13:死锁面试题(卷王专供+ 史上最全 + 2023面试必备)-V2-from-Java面试红宝书-release_f.pdf [5.7 MB]
适合人群
- 后端开发工程师
- 面试求职者
- 技术爱好者
学习收获
祝您学习愉快!
学有所成,前程似锦!





![大疆维修,无人机维修教程[66.30GB]](/_next/image?url=https%3A%2F%2Fwww.itzhibei.com%2Fapi%2Fuploads%2Fb6a69810-862f-479c-a529-d66880073ebc.jpg&w=1920&q=75)
