# 1. Read Your Writes、Monotonic Reads、Read After Write、Causal Consistency 在客户端/代理/数据库协同实现? A 单调读允许读到更旧数据 B 因果一致不要求因果顺序 C Read Your Writes 保证读到自己写入,Monotonic Reads 防读到更旧,Causal Consistency 保证因果顺序可见,由客户端/代理/数据库协同实现 ✓ 正确答案 D 这些保证与代理无关
# 2. 为什么缓存常常是最终一致而非强一致?请从 CAP 与工程现实两端解释。 A 缓存应强一致,否则不可用 B 缓存强一致成本为零 C 缓存无需一致性 D 缓存与数据库跨系统强一致在 CAP 下不可兼得,且强一致削弱缓存性能收益,故用最终一致(TTL + 失效 + 补偿) ✓ 正确答案
# 3. Cache-Aside、Read-Through、Write-Through、Write-Behind、Refresh-Ahead 的失效、雪崩、击穿、穿透防护矩阵? A Cache-Aside 写时先写缓存再写 DB B 无需防护雪崩击穿穿透 C 所有策略都同步写 DB D Cache-Aside 读时查缓存未命中回填、写时失效缓存;雪崩靠过期抖动、击穿靠 singleflight/锁、穿透靠布隆/空值防护 ✓ 正确答案
# 4. Hinted Handoff 在节点短暂不可用、复制积压与恢复合并时的实现与限制? A 健康节点代写并记录 hint,目标恢复后重放追平,避免写丢失;但 hint 容量有限、重放有延迟,只保证最终一致 ✓ 正确答案 B 节点不可用时写操作直接丢弃 C hint 绝不会丢失 D 它保证强一致
# 5. Write-Behind 的异步刷写、丢失风险、批量合并、限速与重放对账的设计? A 写操作同步写 DB B Write-Behind 异步批量回写 DB 提升性能,需持久化缓冲避免丢失、批量合并、限速与重放对账保证最终一致 ✓ 正确答案 C 回写窗口内崩溃不会丢数据 D 无需对账
# 6. Cache-Aside 与 Write-Through 中云缓存一致性模式的选择? A Cache-Aside 写时先写缓存再写 DB B Cache-Aside 读时查缓存回填、写时失效缓存,灵活性能好;Write-Through 写路径一致,按读多写少/写一致性需求选择 ✓ 正确答案 C Write-Through 每次写都提高命中率 D 两者写路径完全一致
# 7. Anti-Corruption Layer(ACL)在跨系统语义翻译、防腐、契约版本与双向同步中的适用约束? A ACL 让外部模型直接进入领域模型 B ACL 在边界翻译语义、隔离外部变化、管理契约版本,保护领域模型不被污染;双向同步需处理冲突与一致性 ✓ 正确答案 C ACL 只用于前端 D ACL 无需版本管理
# 8. 缓存与数据库双写一致性中延迟双删(先删缓存→写数据库→延迟再删缓存)+ Canal binlog 订阅异步补偿的最终一致方案 A 延迟双删(先删缓存→写 DB→延迟再删)+ Canal binlog 订阅异步补偿,实现缓存与 DB 最终一致 ✓ 正确答案 B 先写 DB 再删缓存即可保证一致 C 双写必然是强一致 D 无需补偿
# 9. 缓存击穿(hot key)、缓存雪崩(同时过期)、缓存穿透(恶意/不存在 key)的典型治理与 Lua/Bloom/二级缓存? A 穿透用过期抖动治理 B 击穿与雪崩相同 C 穿透用 Bloom/空值拦截,击穿用 singleflight/永不过期,雪崩用过期抖动/多级缓存,Lua 保证原子、二级缓存扛热点 ✓ 正确答案 D 无需治理
# 10. 缓存预热、灰度切流、读写穿透、cache stampede 防抖、singleflight 模式的工程实现? A singleflight 让并发回源各自打 DB B cache stampede 无需治理 C 预热加载热点、灰度切流验证、读写穿透统一路径、singleflight 合并并发回源防惊群 ✓ 正确答案 D 预热只用于冷数据
# 11. Health Endpoint Monitoring 的健康探测、流量摘除、级联熔断与“假阳性剔除”如何避免? A 健康探测失败一次就摘除即可 B 健康端点探测 + 流量摘除 + 级联熔断,用连续失败阈值、重试、liveness/readiness 分离避免假阳性误摘 ✓ 正确答案 C 假阳性无影响 D 健康与就绪探针相同
# 12. Outbox + Inbox 模式如何用本地表与发布器实现可靠消息,避免双写不一致? A Outbox 写业务与写消息分属两个事务 B 无需发布器 C Inbox 用于发送端 D Outbox 在本地事务内写业务与待发消息、发布器投递,Inbox 本地去重表保证幂等消费,避免双写不一致 ✓ 正确答案
# 13. Outbox/Inbox 模式、Polling Publisher、Transaction Log Tailing 在可靠消息中的取舍? A Polling Publisher 轮询 Outbox 表简单可靠但延迟,Transaction Log Tailing 尾随 binlog 实时不侵入但复杂,按需取舍 ✓ 正确答案 B Polling Publisher 实时无延迟 C Transaction Log Tailing 需业务写 Outbox 表 D 三者完全相同
# 14. Sidecar 在多语言异构系统中的最大副作用是什么?请给出治理建议。 A Sidecar 无资源开销 B 最大副作用是资源开销与部署运维复杂度,治理是控制资源、统一管理、按需使用、评估 eBPF 替代 ✓ 正确答案 C Sidecar 不增加延迟 D 每个服务都应带多个 sidecar
# 15. “Effectively-Once”与“Exactly-Once Effect”通过幂等 + at-least-once + 去重实现的真实边界是什么? A 它保证消息投递恰好一次 B 跨系统恒能保证 C 无需去重 D Effectively-Once 通过幂等 + at-least-once + 去重实现"效果层面"恰好一次,依赖幂等键与原子去重,非传输层恰好一次 ✓ 正确答案
# 16. 为什么“端到端 Exactly-Once”并不存在?请从消息层、存储层、应用层给出反例。 A 消息层重复投递、存储层重复写入、应用层重复执行,任一环节都可能重复/丢失,端到端 Exactly-Once 不存在,只能追求效果层面幂等 ✓ 正确答案 B 端到端恰好一次可以实现 C 只需保证消息层恰好一次 D 应用层不会重复执行
# 17. Ambassador 模式如何作为进程外的代理对外代表应用 A Ambassador 作为进程外代理代表应用访问外部,统一处理连接/重试/限流/认证/观测,应用无外部耦合 ✓ 正确答案 B Ambassador 在应用内处理外部调用 C Ambassador 只处理内部调用 D Ambassador 与主应用同进程
# 18. 如何设计可重试且幂等的补偿链以避免悬挂事务 A 补偿可重复执行,无需幂等 B 补偿用唯一键幂等去重、状态机保证精确状态、可重试幂等、与正向事务协调,避免悬挂事务 ✓ 正确答案 C 悬挂事务无法避免 D 补偿无需状态机
# 19. Event Sourcing 的快照(snapshot)为何必要以减少重放 A 快照用于修改历史事件 B 快照与重放无关 C 快照保存状态与位置,重放从快照开始只算增量,减少重放量,避免事件多时重放全部成本高 ✓ 正确答案 D 事件流很短无需快照
# 20. Saga 执行中部分失败如何保证已提交步骤最终被补偿 A 部分失败时已提交步骤无需补偿 B 对已提交步骤逆序执行补偿链,补偿幂等 + 状态机 + 重试,保证最终被补偿,实现最终一致 ✓ 正确答案 C Saga 提供原子回滚 D 补偿失败就放弃
# 21. 事件溯源如何天然支持审计、回放与时空旅行调试 A 事件溯源只存当前状态 B 事件不可变且是事实源,天然支持审计(事件即记录)、回放(重放重建)、时空旅行调试(回到任意时点) ✓ 正确答案 C 事件可修改 D 无法追溯历史
# 22. 事件版本演进(schema evolution)如何在溯源中兼容 A 新增事件字段复用旧编号 B schema 变更即可破坏 C 演进不需要兼容 D 新增字段带默认值/新编号、删除保留编号、版本化 + 迁移器 + Schema Registry 校验,保证历史事件可重放兼容 ✓ 正确答案
# 23. 何时不该用 CQRS/ES,简单 CRUD 反而增加复杂度 A 简单 CRUD 用 CQRS/ES 更高效 B 简单 CRUD 用 CQRS/ES 增加读写模型、事件投影、最终一致等复杂度,属于过度设计;读写差异大、查询复杂、需审计回放时才用 ✓ 正确答案 C CQRS/ES 适用于所有场景 D 简单 CRUD 最适合 CQRS
# 24. 补偿操作必须满足幂等与可逆,否则如何保证最终一致 A 补偿可重复执行即可,无需可逆 B 不可逆操作可直接放 Saga C 补偿无需幂等 D 补偿须幂等(重试安全)与可逆(撤销正向),否则用预留/确认设计或人工/对账兜底保证最终一致 ✓ 正确答案
# 25. Exactly-Once 语义的实现路径中幂等消费者 + 去重表 vs 事务消息 vs 两阶段提交的取舍? A 2PC 不阻塞,适合长事务 B 只需幂等即可,无需去重 C 幂等消费者+去重表简单实现 Effectively-Once,事务消息保证发送原子,2PC 强一致但阻塞、不适合长事务,按需取舍 ✓ 正确答案 D 事务消息无开销
# 26. Compensating Transaction 与 Saga 中云原生环境下长事务的回滚设计? A Saga 用本地事务 + 幂等补偿 + 状态机实现长事务回滚,避免 2PC 锁资源阻塞,追求最终一致 ✓ 正确答案 B 云原生长事务用 2PC 回滚 C 长事务应持有全局锁 D 补偿无需幂等
# 27. Circuit Breaker 与 Bulkhead 中云服务的故障隔离与快速失败模式? A Circuit Breaker 做资源隔离,Bulkhead 做快速失败 B 无需隔离 C 两者功能相同 D Circuit Breaker 失败率触顶快速失败,Bulkhead 独立资源池隔离防耗尽,二者配合实现云服务故障隔离与快速失败 ✓ 正确答案
# 28. 多级缓存(本地 Caffeine + 分布式 Redis)一致性协同中本地缓存 TTL 短 + 消息广播失效,避免跨节点脏读 A 本地缓存 TTL 越长越好 B 本地缓存 TTL 短减少脏窗口,写后消息广播失效各节点本地缓存 + Redis 统一失效,避免跨节点脏读 ✓ 正确答案 C 本地缓存无需失效 D 跨节点脏读不可避免
# 29. Sidecar、Ambassador、Adapter 在服务网格中的部署模式与对延迟、CPU、可观测性的影响? A Sidecar 提供统一治理与可观测性,但增加延迟、CPU 与资源开销(多一跳代理),需权衡 ✓ 正确答案 B Sidecar 不消耗资源 C Sidecar 降低延迟 D Adapter 不增加任何开销
# 30. Strangler Fig 在单体→微服务迁移中如何与 API 网关、影子流量、契约测试、回滚开关协同? A 网关分流 + 影子流量验证 + 契约测试兼容 + 回滚开关回退,渐进安全迁移单体到微服务 ✓ 正确答案 B 一次性切全部流量 C 迁移无需回滚 D 影子流量直接切换
# 31. 为什么 ACL 与 BFF(Backend for Frontend)经常一起出现?它们的边界与协同如何设计? A ACL 面向前端,BFF 面向外部系统 B 二者互斥 C 两者功能完全相同 D ACL 管内部↔外部系统的防腐翻译,BFF 管前端↔内部服务的聚合适配,二者都在边界适配故常一起出现 ✓ 正确答案
# 32. 为什么“Exactly-Once Delivery”在分布式系统中是错误的认知?需要重新定义为哪些可达成目标? A 消息投递能保证恰好一次 B at-most-once 足够 C 投递与处理无关 D "恰好一次投递"在分布式中不可能(ACK 丢失/重试必然重复或丢失),可达成的是 Effectively-Once(at-least-once + 幂等 + 去重) ✓ 正确答案
# 33. Saga 如何用一系列本地事务+补偿(compensation)替代 2PC A Saga 用全局锁保证原子 B Saga 提供强原子 C Saga 拆成本地事务 + 补偿,无全局锁、失败逆序补偿,追求最终一致,替代 2PC 的全局锁与阻塞 ✓ 正确答案 D 2PC 适合长事务
# 34. 为何长事务不适合 2PC 而适合 Saga(锁资源太久) A 2PC 长事务不锁资源 B 长事务用 2PC 更佳 C Saga 也持全局锁 D 2PC 长事务锁资源太久、阻塞、协调器等待,Saga 本地事务独立提交不持长锁、用补偿回滚,更适合长事务 ✓ 正确答案
# 35. CQRS 为何把写模型(命令)与读模型(查询)分离 A 写模型保业务规则、读模型保查询性能,各自独立优化与扩展,避免单一模型同时满足两种差异巨大的关注点 ✓ 正确答案 B 读写应合一模型简化 C 读写模型必须完全一致 D 分离无收益
# 36. CQRS 引入的最终一致读延迟对业务交互的影响 A 最终一致读延迟让写后立即读可能读到旧数据,影响体验与一致性,用关键路径强一致读/同步投影/会话一致性缓解 ✓ 正确答案 B 读延迟无影响 C 读模型总是最新 D 无需缓解
# 37. CQRS 的读模型如何由事件异步投影(projection)更新 A 读模型同步更新,无延迟 B 投影器直接读写模型 C 写模型发事件,投影器异步消费事件更新读模型,最终一致、幂等、可重放 ✓ 正确答案 D 读模型与事件无关
# 38. Envoy 作为 Sidecar 如何实现流量管理与 mTLS A Envoy 只做负载均衡,不做 mTLS B Envoy 不处理入站流量 C mTLS 证书由应用手动管理 D Envoy 作为 Sidecar 用 xDS 配置实现流量管理(路由/熔断/重试),用 SDS 自动签发轮换证书实现 mTLS 双向认证加密 ✓ 正确答案
# 39. Event Sourcing 用"事件日志"替代"当前状态"的存储范式 A 事件溯源用不可变追加的事件日志作为事实源,状态由事件重放派生,可重建历史、可审计,替代当前状态覆盖存储 ✓ 正确答案 B 事件溯源直接存当前状态 C 事件可被覆盖 D 历史无法重建
# 40. Saga 的隔离性缺失(脏读/丢失更新)如何靠语义解决 A Saga 用数据库锁保证隔离 B Saga 无全局锁会脏读/丢失更新,用语义锁、状态机、乐观锁、幂等等业务语义解决,保证最终一致 ✓ 正确答案 C Saga 提供完整隔离 D 无需解决隔离
# 41. Sidecar 与 Ambassador 在"入站/出站"职责上的区别 A Sidecar 只处理出站 B Sidecar 是通用旁路代理,入站出站服务间流量都管;Ambassador 偏代表应用对外访问的外部/出站代理 ✓ 正确答案 C Ambassador 处理入站 D 两者职责完全相同
# 42. Sidecar 带来的资源开销与启动顺序(init container)问题 A Sidecar 无资源开销 B 主容器无需等待 Sidecar C Sidecar 增加资源开销与启动顺序问题(主容器依赖 Sidecar 就绪),用 init container 与启动顺序管理解决 ✓ 正确答案 D Sidecar 启动顺序无关
# 43. Sidecar 模式如何将横切关注(日志/监控/TLS)从主容器剥离 A 主容器应实现日志/TLS B Sidecar 只做日志 C Sidecar 把日志/监控/TLS/重试等横切关注从主容器剥离到旁路代理,主容器只关注业务,集中治理、语言无关、独立升级 ✓ 正确答案 D 横切关注应留在主容器
# 44. TCC(Try-Confirm-Cancel)与 Saga 的补偿思想异同 A TCC 与 Saga 都依赖全局锁 B 两者完全相同 C TCC 无预占阶段 D 两者都用补偿避免 2PC 阻塞,但 TCC 有显式 Try 预占 + Confirm/Cancel,Saga 是本地事务 + 逆序补偿 ✓ 正确答案
# 45. eBPF 方案为何被视为 Sidecar 的潜在替代 A eBPF 仍需每 Pod 一个 sidecar 进程 B eBPF 与内核无关 C eBPF 增加延迟 D eBPF 在内核透明处理流量,无用户态 sidecar 进程,降低资源开销、延迟与运维复杂度,是 Sidecar 潜在替代 ✓ 正确答案
# 46. 与 Library/SDK 方式相比,Sidecar 的解耦与升级优势 A SDK 语言无关、升级无需改应用 B SDK 升级更简单 C Sidecar 与 SDK 相同 D Sidecar 把横切逻辑从应用剥离、语言无关、独立升级(不动应用代码),相比 SDK 有解耦与升级优势 ✓ 正确答案
# 47. 如何向面试官说明 Sidecar 之于微服务可观测性的价值 A Sidecar 只能在单一语言中采集 B Sidecar 统一采集指标/追踪/日志、注入 traceId 跨链路追踪、语言无关、覆盖流量治理,是微服务可观测性的关键基础设施 ✓ 正确答案 C Sidecar 不采集可观测性 D 各服务需各自接观测 SDK