分布式事务方案

共 58 题
#

1. 2PC 的同步阻塞与协调者单点

A 必须等待协调者的最终提交/回滚决定 ✓ 正确答案
B 数据库性能差
C 网络带宽不足
D 事务日志太多
#

2. 3PC 的 doCommit/abort 边界

A 参与者超时后可自主决策,缓解阻塞等待 ✓ 正确答案
B 增加更多协调者
C 完全消除网络分区
D 减少事务日志
#

3. ByteTCC 的 TCC 实现中 Try/Confirm/Cancel 三阶段的资源预留与空回滚/悬挂如何处理

A Try 成功但 Cancel 失败
B 发生了 Cancel 但之前没有对应的 Try 成功 ✓ 正确答案
C Confirm 重复执行
D Try 重复执行
#

4. Hmily(TCC 框架)的异步确认与本地事务存储,与 Seata TCC 在实现上的差异

A Seata 无全局状态
B 两者都无事务日志
C Hmily 不支持异步
D Hmily 用本地事务存储与异步确认,Seata 用 TC 中心化协调 ✓ 正确答案
#

5. Kafka EOS 能原子处理 Kafka 输入和输出,但数据库写入为何仍需 outbox 或幂等方案

A 数据库与 Kafka 之间
B 任意两个系统
C 仅 Kafka 内部的消息读写 ✓ 正确答案
D 所有数据库
#

6. Saga 模式如何解决长事务的锁占用问题,补偿步骤的失败处理与幂等如何设计?

A 持有全局锁直到全部完成
B 每步用独立本地事务并快速提交,不持有全局锁 ✓ 正确答案
C 用数据库锁
D 用分布式锁替代
#

7. Saga 补偿不是数据库回滚意味着什么,补偿操作失败或再次执行时应满足哪些性质

A 数据库回滚
B 重新执行正向操作
C 忽略失败
D 执行反向业务操作来抵消已提交步骤的效果 ✓ 正确答案
#

8. Seata AT 模式在 ShardingSphere-JDBC 跨分片场景下的 undolog 与全局锁兼容性

A redo log
B binlog
C 全局事务表
D undolog(前后镜像) ✓ 正确答案
#

9. Seata AT 的全局锁与数据库本地锁顺序不当会形成什么竞争,热点行应如何降级处理

A 先全局锁后数据库本地锁 ✓ 正确答案
B 只加本地锁
C 先本地锁后全局锁
D 只加全局锁
#

10. Seata Saga 模式与 Apache Camel Saga 在 Spring Boot 4.0 编排式事务中的 DSL 与状态机差异

A 基于消息队列自动编排
B 基于 Java DSL 命令式编排
C 基于 JSON 状态机配置 ✓ 正确答案
D 基于数据库存储过程
#

11. Seata TCC 模式下 Cancel 阶段的幂等性与空回滚在 Spring Boot 4.0 异步补偿中的实现

A Try 阶段是否留下了对应的预留记录 ✓ 正确答案
B 时间戳大小
C 随机数
D 机器号
#

12. TCC 的空回滚、悬挂和重复 Confirm 或 Cancel 分别如何产生,业务屏障要记录哪些状态

A 随机数
B 机器号
C 时间戳
D 事务状态(记录 Try/Confirm/Cancel 执行情况) ✓ 正确答案
#

13. TCC(Try/Confirm/Cancel)的工程实现

A Try
B Cancel
C Confirm ✓ 正确答案
D Prepare
#

14. XA 协议与数据库分布式事务

A TCC
B 三阶段提交(3PC)
C Saga 补偿
D 两阶段提交(2PC) ✓ 正确答案
#

15. XA 协议在 Spring Boot 4.0 + MySQL 8.4 中通过 Atomikos 实现两阶段提交的工程取舍

A 数据不一致
B prepare 后的同步阻塞与性能开销 ✓ 正确答案
C 不支持多数据源
D 无法配置事务
#

16. 三阶段提交(3PC)的改进与边界

A 直接提交事务
B 先询问所有参与者能否提交,避免对不可提交事务做资源准备 ✓ 正确答案
C 回滚所有事务
D 记录操作日志
#

17. 两阶段提交(2PC)的流程与缺陷

A 任一参与者可提交
B 多数参与者可提交
C 所有参与者都返回"可以提交" ✓ 正确答案
D 无需参与者确认
#

18. 事件驱动架构与 Saga 的边界

A 共享数据库
B 单块架构
C 事件驱动架构 ✓ 正确答案
D 同步 RPC
#

19. 事务发件箱如何在同一本地事务中保存业务数据和事件,发布器崩溃后怎样避免丢失

A 事件先发布再写业务
B 事件存储在内存
C 业务数据与 outbox 事件在同一数据库本地事务中提交 ✓ 正确答案
D 使用消息队列回滚
#

20. 使用 Eventuate Tram Saga 在 Spring Boot 中实现 Saga 编排与 SAGA compensation 模式代码示例

A withCompensation() ✓ 正确答案
B withTimeout()
C withFallback()
D withRetry()
#

21. 使用 Spring Cloud Alibaba Seata 与 SkyWalking 集成实现分布式事务链路追踪的全链路方法

A 使用本地缓存
B 使用独立数据库
C 关闭 Seata 日志
D 把 Seata 的 XID 与 SkyWalking 的 TraceId 关联并透传 ✓ 正确答案
#

22. 使用 Spring Cloud Stream 配合 Kafka 事务(Transactional Producer)

A transaction-id-prefix ✓ 正确答案
B consumer-group
C partition-count
D auto-offset-reset
#

23. 分布式事务 TCC 模式下幂等表设计在 Spring Boot 4.0 + MySQL 中的最佳实践与索引策略

A 唯一索引(XID+分支+阶段)约束 ✓ 正确答案
B 时间戳
C 随机数
D 机器号
#

24. 分布式事务与 Event Sourcing 的协作

A 重放事件流 ✓ 正确答案
B 内存缓存
C 最新的数据库快照
D 外部 API
#

25. 哪些场景根本不需要引入分布式事务(单库 ACID、幂等重试、对账兜底)

A 本地数据库事务(ACID) ✓ 正确答案
B Saga 补偿
C 分布式事务框架
D 消息队列
#

26. 分布式事务与 Resilience4j 的边界

A 两者解决同一问题
B Resicity4j 可替代分布式事务
C Resilience4j 解决调用故障弹性,分布式事务解决数据一致性,二者互补 ✓ 正确答案
D 分布式事务可替代熔断
#

27. 分布式事务与 Saga Choreography/Orchestration

A Orchestration(编排) ✓ 正确答案
B 两阶段提交
C 本地事务
D Choreography(编舞)
#

28. 分布式事务中事务悬挂(Suspension)与空回滚在 Seata AT 模式下的预防策略与监控

A 随机数
B 全局事务状态机校验分支合法性 ✓ 正确答案
C 时间戳
D 机器号
#

29. 分布式事务在 Spring AI 2.0 多模型调用场景下的最终一致性与 token 计费回滚机制

A 直接回滚数据库
B 预扣-确认-取消(TCC 思想)加幂等与对账 ✓ 正确答案
C 忽略计费
D 使用 2PC
#

30. 分布式事务在 Spring Modulith 模块边界的边界

A 跨模块共享同一数据库事务
B 2PC
C 全局分布式锁
D 事件驱动 + 最终一致 ✓ 正确答案
#

31. 协同式 Saga 依赖事件自治时,怎样发现循环依赖、事件风暴和无人负责的补偿

A 随机测试
B 增加数据库连接
C 分析事件订阅依赖图与链路追踪 ✓ 正确答案
D 使用同步 RPC
#

32. 可靠消息最终一致性(RocketMQ/Kafka 事务消息)

A 定时重发
B 发送后立即删除
C 手动确认
D 半消息 + 提交/回滚 + 回查 ✓ 正确答案
#

33. 在 Spring Cloud Gateway 接入层实现基于 Saga 模式的跨服务编排与补偿的边界设计

A 网关承载所有业务编排逻辑
B 网关直接访问数据库
C 网关不参与任何路由
D 网关做轻量入口编排,复杂编排下沉到独立编排服务 ✓ 正确答案
#

34. 在 Spring Cloud 微服务中使用 Spring TX Synchronization 与消息可靠投递的本地消息表方案

A 业务写入前
B 事务回滚后
C 事务提交后(afterCommit) ✓ 正确答案
D 任意时刻
#

35. 在 Spring Modulith 模块边界事件总线中实现 Outbox Pattern 与事务最终一致性的协同

A 随机发布
B 共享数据库
C 直接同步调用
D outbox + 事务监听(事务提交后发布) ✓ 正确答案
#

36. 幂等记录保留时间短于消息最大重试周期会导致什么,过期边界应根据哪些事实确定

A 重复消费产生副作用 ✓ 正确答案
B 消息丢失
C 数据库性能提升
D 消息顺序错乱
#

37. 支付、短信等不可逆步骤在 Saga 中应怎样排序,何时需要人工确认而不是自动补偿

A 放在最前面
B 随机排序
C 尽量放在 Saga 最后,前面先做可逆步骤 ✓ 正确答案
D 与可逆步骤混合
#

38. 消息队列事务消息通常只保证本地事务与消息发送一致,消费者业务仍需承担哪些责任

A 提高发送速度
B 压缩消息
C 幂等处理,防止重复操作 ✓ 正确答案
D 使用重试发送
#

39. 消费者去重表与业务更新应放在同一事务中,唯一键冲突后如何判断是成功重放

A 处理状态(如已成功) ✓ 正确答案
B 消息内容
C 时间戳
D 消息大小
#

40. 编排式 Saga 的协调器如何持久化步骤和截止时间,主备切换后如何恢复定时动作

A 内存缓存
B 持久化的步骤状态与截止时间 ✓ 正确答案
C 随机数
D 网络延迟
#

41. 补偿事务(Compensating Transaction)的设计

A 数据库回滚
B 同步执行
C 幂等、可重试的反向业务操作 ✓ 正确答案
D 忽略失败
#

42. 跨服务事务追踪如何关联全局事务、分支、消息和补偿,敏感业务参数应如何脱敏

A 全局事务 ID(XID)与分支 ID 的透传 ✓ 正确答案
B 时间戳
C 机器号
D 随机数
#

43. 选择 XA、TCC、Saga 或最终一致消息时,应如何量化隔离要求、时长、侵入性和运维成本

A XA
B TCC
C 单一数据库事务
D 最终一致消息(或 Saga) ✓ 正确答案
#

44. AT 模式(Seata)的 SQL 解析与回滚

A redo log
B 全局事务表
C binlog
D 前镜像与后镜像生成的 undolog ✓ 正确答案
#

45. CDC 读取 outbox 时为何仍可能重复发布,事件 ID、消费者 inbox 和清理策略如何协作

A 用事件 ID 作唯一键的 inbox 去重 ✓ 正确答案
B 随机数
C 时间戳
D 机器号
#

46. EasyTransaction 框架的混合事务模型(TCC/可靠消息/最大努力通知)如何统一编排

A 每种模型独立运行
B 统一事务协调器 + 全局状态机驱动各参与者 ✓ 正确答案
C 只用 2PC
D 不用协调器
#

47. Seata 与 Spring Cloud 的集成

A @Transactional
B @Cacheable
C @Async
D @GlobalTransactional ✓ 正确答案
#

48. 分布式事务运行态的监控指标(分支数、全局锁等待、补偿失败率)与告警

A 事务分支数
B 网络带宽
C 补偿/回滚失败率 ✓ 正确答案
D CPU 使用率
#

49. 本地消息表、事务消息与 CDC Outbox 三种可靠消息方案的对比与选型

A 本地消息表
B 手动发送
C 事务消息(RocketMQ)
D CDC Outbox ✓ 正确答案
#

50. 两阶段提交在 prepare 后协调者不可用时为何阻塞资源,参与者恢复需要保存哪些日志

A 数据库锁释放
B 网络恢复
C 其他参与者
D 协调者的最终 commit/abort 决定 ✓ 正确答案
#

51. Seata 2.x 在 Spring Boot 4.0 中通过 Nacos 作为 TC Server 注册中心的 Server 端集群部署

A 固定连接第一个 TC
B 从 Nacos 发现 TC 列表并负载均衡 ✓ 正确答案
C 随机连接
D 不连接 TC
#

52. Seata AT 模式在 Spring Cloud 最新代际与 Spring Boot 4.0 集成时全局锁竞争的性能瓶颈分析

A 只读事务
B 无写操作
C 单个节点
D 热点行被多个分支并发写 ✓ 正确答案
#

53. XA 分支出现 heuristic commit 或 rollback 时表示什么,系统如何对账并消除不确定结果

A 协调者明确提交
B RM 在协调者未明确决定时自主提交了本地事务 ✓ 正确答案
C 数据库回滚
D 网络正常
#

54. 最大努力通知(Best Effort)的适用场景

A 支付结果必须可靠送达
B 非关键的通知(如短信、运营提醒),可接受失败与重复 ✓ 正确答案
C 跨库强一致写入
D 分布式锁
#

55. 本地消息表(异步确保)的工程实现

A 业务与消息记录在同一数据库事务中 ✓ 正确答案
B 先发消息再写业务
C 消息存内存
D 使用消息队列回滚
#

56. 网络分区演练中应如何验证协调者恢复、消息重放和人工介入,而不只检查最终成功率

A CPU 使用率
B 网络带宽
C 协调者恢复、消息重放与人工介入的正确性 ✓ 正确答案
D 磁盘空间
#

57. 自动补偿结束后为什么仍需要对账任务,怎样区分暂时延迟、永久差异和重复修复

A 立即强制修复
B 删除数据
C 忽略
D 标记为待观察,避免重复修复 ✓ 正确答案
#

58. Seata 2.x 在 GraalVM Native Image 下作为 TC Client 启动的反射配置与静态初始化

A 无需配置
B 只能放弃
C 通过 resource-config 与 proxy-config 声明保留 ✓ 正确答案
D 用运行时常量