# 1. 工作流版本演进中流程定义变更时进行中实例如何处理(迁移/终止/双版本并存)? A 迁移策略无需验证状态映射的兼容性 B 终止策略一定比迁移更安全 C 双版本并存让已有实例继续用旧版本,新实例用新版本,安全但长期并存成本高 ✓ 正确答案 D 流程变更时进行中实例只能强制终止
# 2. 工作流引擎 vs 手写状态机中长流程、人工审批、超时/重试场景下各自的取舍? A 手写状态机内置持久化与重放能力 B 工作流引擎内置超时、重试与人工审批等待机制,适合长流程 ✓ 正确答案 C 长流程也应使用手写状态机以保持轻量 D 工作流引擎无法处理人工审批等待
# 3. 工作流的超时层级中 schedule-to-start、start-to-close 与 activity 超时各自拦截哪类故障,重试策略的退避与终止条件 A schedule-to-start 拦截任务开始后执行过久的问题 B heartbeat 超时用于检测 activity 崩溃,重试常用指数退避+抖动并设终止条件 ✓ 正确答案 C start-to-close 拦截调度后迟迟未开始的问题 D 重试不应设置终止条件,应无限重试
# 4. signal 与人工审批中工作流如何在等待外部事件时不阻塞线程、重放时如何恢复等待状态 A 工作流等待 signal 时阻塞线程直到事件到达 B 重放时已到达的 signal 会从事件历史中读到并直接继续 ✓ 正确答案 C signal 无法支持人工审批场景 D 重放时会把等待状态重置为重新等待
# 5. Saga 编排式(Orchestration)与协同式(Choreography)的对比中集中控制器 vs 事件驱动的故障处理差异? A 协同式有集中控制器,故障处理集中 B 编排式通过事件链驱动,无单点 C 编排式集中控制补偿顺序与流程,但编排器可能成为单点 ✓ 正确答案 D 编排式无法决定补偿顺序
# 6. Temporal/Cadence 工作流确定性的要求中工作流代码不能直接调用随机数、时钟或外部 IO,activity 与 workflow 如何划分? A 工作流代码可直接调用随机数与时钟,不影响重放 B 重放时 activity 会重新执行,无论结果是否已记录 C activity 与 workflow 无需区分,均可直接做 IO D 外部 IO 应放进 activity,workflow 只做确定性编排 ✓ 正确答案
# 7. 工作流的失败恢复中活动失败后的重试、补偿与人工介入如何编排,如何保证工作流实例在进程崩溃后可恢复且幂等? A 活动失败后只能终止,不能重试或补偿 B 崩溃后工作流从内存恢复,无需持久化 C 补偿按 LIFO 顺序执行,且活动需用幂等键避免重复副作用 ✓ 正确答案 D 重放时 activity 会重新执行其副作用
# 8. 编排 vs 状态机中复杂长流程用 BPMN/DSL 表达 vs 代码状态机的取舍? A 业务流程频繁调整时更适合用代码状态机 B BPMN/DSL 表达能力强、调试比代码状态机更简单 C 代码状态机执行逻辑,灵活可测试,但业务人员难以直接阅读 ✓ 正确答案 D 两种方式无法结合使用
# 9. 编排式 Saga 的控制器设计中如何跟踪各步骤状态、决定补偿顺序与重试策略? A 补偿顺序可以任意,不影响一致性 B 所有失败都应无脑不断重试,不做补偿 C 控制器无需跟踪各步骤状态 D 补偿按已成功步骤的逆序(LIFO)执行 ✓ 正确答案
# 10. 工作流重放的幂等中每个 activity 都需要幂等键,重放时如何避免副作用重复执行? A activity 无需幂等键,重放天然不会重复副作用 B 幂等键让外部服务在重复请求时识别并返回已处理结果,避免副作用重复 ✓ 正确答案 C 幂等键只用于日志,不影响副作用 D 崩溃窗口不会导致 activity 被再次调度
# 11. 补偿事务的幂等与对冲中补偿操作失败时的最终一致性兜底(重试/人工/对账)? A 补偿失败时可通过重试、人工介入与对账实现最终一致 ✓ 正确答案 B 补偿操作不需要幂等,可重复执行无妨 C 对冲是让补偿操作加速失败 D 补偿失败后应立即放弃,不做任何兜底
# 12. 工作流引擎选型中 Temporal/Cadence、Airflow 与状态机库在长流程、调度与人工介入上的适用边界 A Airflow 擅长长流程人工审批与事件等待 B 所有长流程都应使用状态机库 C 状态机库自带持久化重放与人工介入 D Temporal/Cadence 适合高可靠长流程与人工介入,Airflow 适合定时批处理调度 ✓ 正确答案
# 13. 定时触发的错过处理中 cron 工作流错过执行窗口时如何补跑,触发如何保证幂等 A 错过窗口只能跳过,不能补跑 B 补跑无需考虑幂等,重复执行无妨 C 用唯一执行实例 ID 与锁可防止同窗口并发触发,保证幂等 ✓ 正确答案 D 触发无需记录上次成功执行时间
# 14. Saga 的补偿事务设计中如何保证补偿操作本身可重入、幂等,失败补偿的最终一致如何达成? A 补偿失败后无需记录状态 B 补偿只需执行一次,无需考虑重入 C 补偿操作必须幂等、可重入,失败时靠重试+人工+对账达成最终一致 ✓ 正确答案 D 补偿操作失败后只能终止,无法兜底
# 15. 工作流引擎(Temporal/Cadence)的持久化与重放中活动(Activity)与工作流(Workflow)的幂等边界? A 工作流层确定性重放保证流程不重复推进,活动层用幂等键避免副作用重复 ✓ 正确答案 B 工作流层也需要实现副作用幂等 C 活动结果在重放时总是重新执行 D 幂等只需在工作流层实现,活动无需关心
# 16. 分布式事务的替代中 Saga 与 TCC、本地消息表的对比,什么场景下 Saga 优于 2PC? A 2PC 可用性高、无单点,适合长流程 B Saga 通过补偿实现最终一致,适合长流程、高可用、可接受短暂不一致的场景 ✓ 正确答案 C TCC 无需业务方实现预留资源 D Saga 提供强一致,无隔离问题
# 17. 工作流执行的可观测性中如何记录每个步骤的输入输出、重试次数与耗时,支撑故障定位与回放? A 记录每步输入输出、重试次数与耗时,配合 traceId 可支撑故障定位与回放 ✓ 正确答案 B 只需记录成功与否,无需输入输出与耗时 C 可观测性只对短流程有意义 D 回放需要重新构造完整输入,无法用记录数据
# 18. 工作流与 Saga 的关系中编排器(Orchestrator)如何作为 Saga 的协调者管理补偿顺序? A 编排器不记录补偿动作,只需调用成功步骤 B 编排器作为 Saga 协调者,按 LIFO 顺序执行补偿并管理状态与重试 ✓ 正确答案 C Saga 与工作流无关,无法结合 D 补偿顺序可以任意,无需 LIFO
# 19. 工作流引擎(Temporal/Cadence)的持久化与重放中如何保证工作流确定性? A 工作流代码可直接调用随机数与时钟,不影响重放 B activity 的结果每次重放都重新执行 C 事件历史驱动重放,activity 结果复用而不重跑,保证确定性 ✓ 正确答案 D 重放与首次执行结果可以不同
# 20. 子工作流与取消传播中 child workflow 失败如何按策略影响父流程,取消信号如何向下传播 A 父工作流被取消时默认取消会级联传播给子工作流 ✓ 正确答案 B 子工作流失败必然导致父工作流终止,无法配置 C 取消信号只能向下传播一层,不会级联 D 子工作流无法被父工作流捕获失败