# 1. Domain Event 的不可变性(immutability)中事件一旦发布即不可修改 A 事件发布后可以修改字段 B 事件是已发生事实,必须不可变,字段 final 且无 setter ✓ 正确答案 C 事件不可变会影响并发消费 D 事件可被多个消费者各自修改
# 2. Domain Event(领域事件)的发布时机中聚合状态变更后立即 vs 事务提交后 A 聚合变更后立即发布最安全 B 事务回滚也应发布事件 C 事件发布时机与事务无关 D 推荐事务提交后发布,配合 Outbox 保证事件与业务状态一致 ✓ 正确答案
# 3. Event Sourcing 中 Snapshot 策略(每 N 个事件、性能 vs 存储) A 快照越少越好 B 快照定期保存状态以加速重放,N 的大小权衡恢复速度与存储成本 ✓ 正确答案 C 快照会破坏事件溯源 D 快照频率越高存储越省
# 4. 领域事件的「幂等消费」中消息重投导致的事件重复处理如何用事件 ID 去重、版本号与状态机保证只生效一次? A 用事件 ID 去重、版本号与状态机保证重复事件只生效一次 ✓ 正确答案 B 重复处理事件没有副作用 C 幂等消费无需去重 D 消息中间件保证只投递一次
# 5. 事务性发件箱(Transactional Outbox)中事件与业务事务同库写入后由 relay 发布,如何保证不丢失、不重复且顺序可控? A 事件与业务同库同事务写入 outbox,由 relay 发布,配合幂等实现不丢不重 ✓ 正确答案 B 业务与事件分开两个事务 C Outbox 无法保证不丢失 D relay 直接发布即可无需确认
# 6. 领域事件的 Schema 治理中事件字段的兼容性规则与版本化,消费者升级顺序如何编排避免破坏性变更? A 新增字段带默认值保持向后兼容,破坏性变更需版本化,消费者先升级再发布 ✓ 正确答案 B 事件字段可随意删除 C 事件 schema 无需版本化 D 先发新事件再升级消费者
# 7. Event Sourcing 中 Upcasting(事件版本升级)的演化策略 A 历史事件直接改写为新版本 B 事件 schema 不能演进 C Upcasting 在读取时把旧版本事件升级到新 schema,无需重写历史 ✓ 正确答案 D Upcasting 会破坏事件溯源
# 8. Event-Carried State Transfer(事件携带状态)中消费者免回查 A 事件只携带事件 ID B 事件携带状态无需版本控制 C 消费者必须回查生产者 D 事件携带完整状态,消费者免回查,用版本号处理陈旧事件 ✓ 正确答案
# 9. Eventual Consistency(最终一致性)的 SLA 与传播延迟 A 最终一致无需监控 B 最终一致没有时间要求 C 所有场景延迟要求一致 D 需定义"多久内收敛"的 SLA,并监控传播延迟与积压来治理 ✓ 正确答案
# 10. CQRS 架构的边界中写模型与读模型分离的工程收益与代价 A CQRS 没有代价 B CQRS 适用于所有系统 C 读写分离带来独立优化与扩展,但引入最终一致与模型双份的复杂度 ✓ 正确答案 D 读写模型必须共享同一表
# 11. EDA(Event-Driven Architecture)的事件总线与发布/订阅模型 A 生产者直接调用消费者 B 生产者发布事件到总线,消费者订阅事件类型,互相解耦 ✓ 正确答案 C 事件驱动没有事件总线 D 生产者必须知道所有消费者
# 12. 事件总线 vs 消息中间件(Kafka/RabbitMQ)的选型中事务性发件箱、消息顺序保证、分区键设计在事件驱动架构中的工程取舍? A 跨服务可靠投递用 Kafka/RabbitMQ,相关事件用相同分区键保证顺序 ✓ 正确答案 B 分区键与顺序无关 C 消息中间件不保证持久化 D 进程内事件总线也适合跨服务
# 13. 领域事件与集成事件的边界中内部订阅用领域事件、对外发布用集成事件,事件翻译与契约独立如何设计? A 领域事件直接对外发布 B 领域事件用于内部订阅,跨上下文用集成事件,通过翻译层独立契约 ✓ 正确答案 C 两者完全等同 D 集成事件暴露内部模型
# 14. 事件消费失败的重试与死信中指数退避、重试上限、死信队列与人工介入流程如何设计? A 无限重试即可 B 失败事件直接丢弃 C 指数退避重试 + 重试上限,超限进死信队列并人工介入 ✓ 正确答案 D 重试无需幂等
# 15. Domain Event 的元数据(metadata)中发生时间、触发者、traceId A 事件只应有业务数据 B traceId 没有用处 C 元数据含发生时间、触发者、traceId 等,用于审计、追踪与幂等 ✓ 正确答案 D 元数据应混入业务字段
# 16. Domain Event 的命名(过去时动词中 OrderCreated、PaymentCompleted) A 事件用将来时动词 B 事件名应技术化 C 事件用过去时动词表达已发生事实,如 OrderCreated ✓ 正确答案 D 事件命名与命令相同
# 17. 事件驱动 vs 请求驱动中何时用事件? A 事件驱动保证强一致 B 所有操作都应用事件驱动 C 需要即时响应与强一致用请求驱动,可异步、多响应方、可最终一致用事件驱动 ✓ 正确答案 D 请求驱动只能用于查询
# 18. 事件溯源与 CQRS 中读写模型分离? A 两者必须同时使用 B 事件溯源不能配 CQRS C 事件溯源可作为写模型,CQRS 的读模型由事件投影生成,读写分离 ✓ 正确答案 D 读模型直接从事件流查询
# 19. 架构风格选型中分层、六边形与事件驱动? A 所有系统都用一种架构 B 六边形架构取消依赖方向 C 简单系统用分层,核心领域复杂用六边形,高并发解耦用事件驱动,可组合 ✓ 正确答案 D 事件驱动适合所有系统