分布式事务、分布式锁与幂等设计

共 20 题
#

1. 两阶段提交(2PC)的协调者与参与者协议流程是什么,同步阻塞、协调者单点与脑裂问题如何产生?

A 2PC 天然避免脑裂
B 2PC 无阻塞问题
C 协调者故障不影响参与者
D 参与者 prepare 后阻塞等待协调者,协调者单点故障导致无法推进 ✓ 正确答案
#

2. 三阶段提交(3PC)相对 2PC 增加了哪些阶段与超时机制,为什么仍不能彻底解决网络分区问题?

A 增加 CanCommit 阶段与超时中止,但分区下仍可能决策冲突 ✓ 正确答案
B 3PC 彻底解决分区问题
C 3PC 无超时机制
D 3PC 与 2PC 完全相同
#

3. TCC(Try-Confirm-Cancel)的空回滚与悬挂问题是什么,它与 2PC 在资源锁定与最终一致性上有何本质区别?

A TCC 用数据库锁保证强一致
B 空回滚是 Cancel 先于 Try 到达,TCC 用业务预留 + 异步补偿追求最终一致 ✓ 正确答案
C TCC 无悬挂问题
D TCC 与 2PC 完全一致
#

4. SAGA 长事务如何用正向操作加补偿操作编排,补偿失败与幂等如何保证,与 TCC 的适用场景差异?

A SAGA 补偿操作不需要幂等
B SAGA 用正向+补偿操作,适合长流程最终一致;TCC 用 Try/Confirm/Cancel 预留资源 ✓ 正确答案
C SAGA 与 TCC 完全等价
D TCC 适合无预留场景
#

5. 本地消息表与事务消息如何保证"业务提交"与"消息发送"的原子性,最终一致性的延迟与失败重试如何设计?

A 事务消息无需回查
B 两者都无法保证原子性
C 本地消息表用同库事务、事务消息用半消息+回查,保证业务与消息原子 ✓ 正确答案
D 本地消息表与业务事务无关
#

6. 分布式锁应满足互斥、可重入、防死锁、防误删等哪些要求,加锁值携带唯一标识(token)为什么必要?

A token 用于提高并发
B 释放锁无需校验身份
C token 唯一标识持锁者,释放时校验 token 防止误删他人锁 ✓ 正确答案
D token 与防死锁无关
#

7. Redis SETNX 加过期时间实现分布式锁有哪些边界问题,Redlock 算法为何存在争议,什么场景不宜使用?

A Redlock 依赖时钟与故障假设,主从切换/时钟漂移时可能违背互斥,强互斥场景不宜用 ✓ 正确答案
B Redlock 保证严格互斥
C SETNX 锁无任何边界问题
D 强互斥场景可用 Redis 锁
#

8. 基于 etcd/ZooKeeper 的分布式锁(租约加 watch)与 Redis 锁在一致性、可用性与运维成本上的差异?

A Redis 锁保证严格互斥
B 两者一致性相同
C etcd/ZK 用共识+租约+watch 强一致,Redis 性能高但一致性弱 ✓ 正确答案
D etcd/ZK 锁吞吐更高
#

9. 幂等设计的三个层次(唯一键、去重表、状态机)如何工作,重复请求为什么必须返回与首次一致的结果?

A 状态机与幂等无关
B 重复请求可以返回不同结果
C 幂等只需唯一键即可
D 唯一键/去重表/状态机三个层次实现幂等,重复请求返回与首次一致结果 ✓ 正确答案
#

10. 2PC、TCC、SAGA、消息最终一致分别适合什么一致性要求与业务场景,选型时应权衡哪些因素?

A SAGA 提供强一致
B 所有方案都提供强一致
C 强一致选 2PC/TCC,长流程最终一致选 SAGA,异步解耦选消息最终一致 ✓ 正确答案
D 消息最终一致无需任何权衡
#

11. CAP 与 BASE 在分布式事务中的指导意义是什么,为什么强一致事务与高可用通常难以兼得?

A 分区时强一致与高可用可以同时满足
B 分区时强一致事务与高可用难以兼得,BASE 用最终一致换取可用性 ✓ 正确答案
C BASE 要求强一致
D CAP 定理与分区无关
#

12. 可靠消息最终一致中的最大努力通知、回调重试与人工对账如何兜底,消息积压时如何降级?

A 积压时不需降级
B 消息一次性保证送达
C 无需对账兜底
D 最大努力通知 + 回调重试 + 人工对账兜底,积压时降级处理 ✓ 正确答案
#

13. XA 协议与 Seata AT 模式的实现原理(全局锁、分支事务、undo log)及相对 2PC 的性能改进?

A Seata AT 需长期持数据库锁
B Seata AT 与 XA 完全相同
C XA 用数据库锁两阶段强一致,Seata AT 用全局锁+undo log 非阻塞最终一致 ✓ 正确答案
D XA 无阻塞问题
#

14. 分布式事务的监控与治理,全局事务状态、分支事务超时与悬挂事务的检测、人工干预与补偿重放流程如何设计?

A 事务无需监控
B 跟踪全局状态、检测超时/悬挂、人工干预与补偿重放保证可恢复 ✓ 正确答案
C 悬挂事务无需处理
D 补偿失败无需重放
#

15. 幂等去重窗口与并发安全,去重表在并发重复请求下的唯一索引冲突处理、去重记录的保留周期与清理策略,以及与状态机幂等的组合?

A 去重记录无需清理
B 并发重复请求会破坏幂等
C 唯一索引处理并发冲突,保留周期覆盖重试窗口,与状态机组合实现完整幂等 ✓ 正确答案
D 状态机与去重表互斥
#

16. SAGA 的编排实现,集中式编排(状态机)与事件驱动 choreography 的差异,补偿链断裂时的恢复与对账机制?

A choreography 有中心协调器
B 两种编排方式完全相同
C orchestration 集中状态机易追踪,choreography 事件驱动松耦合,补偿断裂需重试+对账恢复 ✓ 正确答案
D 补偿链不会断裂
#

17. 分布式锁的公平性与等待机制,锁等待队列、自旋 vs 阻塞、超时重试如何设计,避免惊群与饿死?

A 无需公平队列
B 锁释放时唤醒所有等待者
C 自旋与阻塞无区别
D 等待队列保证公平,受控唤醒避免惊群,随机退避避免饿死 ✓ 正确答案
#

18. 分布式锁的续期(看门狗)机制如何工作,主从切换导致的锁丢失问题有哪些缓解方案?

A 看门狗续期防止业务未完成锁过期,主从切换丢锁可用共识锁或 fencing token 缓解 ✓ 正确答案
B 看门狗让锁永不过期
C 主从切换不会丢锁
D 续期与锁安全无关
#

19. 分布式事务的性能优化,异步化、本地事务加消息、批量提交与读写分离如何降低同步开销?

A 异步化降低吞吐
B 性能优化都需保持强一致
C 批量提交增加 RPC 次数
D 异步化、本地事务加消息、批量提交与读写分离降低同步协调开销 ✓ 正确答案
#

20. 分布式事务与消息的衔接,事务消息的半消息回查失败、消息重复投递与最终一致性的兜底如何配合?

A 半消息回查保证业务与消息一致,重复投递幂等,兜底靠重试对账 ✓ 正确答案
B 半消息回查失败无需处理
C 消息重复投递无需幂等
D 三者互相独立