架构模式与系统设计方法论

共 86 题
#

1. ACID 与 BASE 的取舍

A BASE 强一致
B ACID 强一致但性能受限,BASE 高可用但允许最终一致,按业务要求选择 ✓ 正确答案
C ACID 允许不一致
D 二者无差异
#

2. Bulkhead 模式与 Resilience4j 线程池隔离在多租户 SaaS 平台的资源配额设计

A 用线程池隔离为租户分配独立资源,一个租户故障不影响其他租户 ✓ 正确答案
B 所有租户共享资源
C 隔离无法实现配额
D Bulkhead 只用于单租户
#

3. Bulkhead 模式在 Resilience4j 与 Spring Cloud Gateway 中的线程池隔离与信号量隔离选型

A 信号量隔离更彻底
B 线程池隔离彻底但开销大,信号量隔离轻量但隔离弱,按调用耗时选择 ✓ 正确答案
C 线程池隔离开销小
D 二者无差异
#

4. CAP 定理与 BASE 理论

A CAP 只适用于单机
B 分区时 C 与 A 可兼得
C BASE 是强一致
D 分区时在一致性 C 与可用性 A 间二选一,BASE 是一种最终一致策略 ✓ 正确答案
#

5. CQRS + Event Sourcing 在金融交易系统中的读写模型分离与最终一致性权衡

A 读写模型强一致
B 读写分离、事件可审计,最终一致需用幂等与补偿保证 ✓ 正确答案
C 事件溯源不可审计
D 无需处理最终一致
#

6. CQRS 分离读写模型后会引入多长的最终一致窗口,产品体验与监控应如何表达这种延迟

A 读写模型瞬间一致
B 读模型异步更新引入一致延迟,需产品提示与监控读模型滞后 ✓ 正确答案
C 无需监控一致延迟
D 产品无需提示
#

7. CQRS 架构中读模型与写模型的最终一致性在 Kafka 事件溯源下的延迟补偿策略

A 顺序无关紧要
B 事件丢失可接受
C 读模型无需追上
D 用消费组保证顺序、重试/死信补偿、读己之写缓解读模型滞后 ✓ 正确答案
#

8. CQRS 的读写模型分离边界

A 分离只看表结构
B 简单 CRUD 也需 CQRS
C 读写模型用同一模型
D 写模型管业务一致性,读模型按查询优化,读写模型分离 ✓ 正确答案
#

9. CQRS(命令查询职责分离)与 Event Sourcing

A CQRS 用事件溯源
B 二者必须绑定
C ES 是读写分离
D CQRS 分离读写,ES 用事件表达状态,组合实现可审计可扩展架构 ✓ 正确答案
#

10. Cell-based Architecture 如何限制故障爆炸半径,租户路由与跨 Cell 数据访问怎样设计

A Cell 无法隔离故障
B 所有租户共享一个 Cell
C 跨 Cell 访问是推荐做法
D 每个 Cell 自包含并隔离故障,租户路由到所属 Cell,避免跨 Cell 破坏隔离 ✓ 正确答案
#

11. EDA 事件驱动架构在 Outbox 模式、Change Data Capture 与消息中间件协同时的最终一致性工程要点

A 事件可丢失
B Outbox 保证业务与事件原子一致,CDC 捕获变更,消息中间件可靠投递 ✓ 正确答案
C Outbox 与事务无关
D CDC 无需消息中间件
#

12. Outbox Pattern 在 Spring Boot 中与 Debezium CDC 协同的事务一致性保障

A 双写天然一致
B Outbox 无法保证原子性
C Debezium 与事件无关
D Outbox 用本地事务保证业务与事件原子,Debezium 捕获并投递事件 ✓ 正确答案
#

13. SOA(面向服务架构)与微服务的差异

A 二者完全相同
B SOA 粒度大、依赖 ESB 与共享数据,微服务粒度小、独立部署与数据自治 ✓ 正确答案
C 微服务依赖 ESB
D SOA 独立部署
#

14. Saga 与 TCC 的适用边界如何划分,长事务、资源预留成本与补偿可行性如何影响选型

A Saga 适合长事务可补偿,TCC 适合短事务需资源预留 ✓ 正确答案
B 二者无差异
C TCC 适合长事务
D Saga 适合资源预留
#

15. CQRS 架构中读写模型分离时,跨模型数据一致性、回填链路与查询性能折衷如何在 Spring/Quarkus 中落地

A 回填无需幂等
B 读写模型实时一致
C 事件驱动跨模型一致,回填需幂等,读模型按查询优化牺牲一致性 ✓ 正确答案
D 查询无需优化
#

16. Saga 模式与分布式事务

A Saga 强一致
B Saga 用全局锁
C Saga 用本地事务 + 补偿实现分布式事务的最终一致,替代 2PC ✓ 正确答案
D Saga 是 2PC 的变体
#

17. Saga 的编排式与协同式实现如何权衡可见性和耦合,补偿失败由谁持续推进

A 协同式可见性好
B 编排式耦合高
C 编排式集中可见性但协调器单点,协同式解耦但难追踪,补偿失败靠协调器或事件重试 ✓ 正确答案
D 补偿失败无人推进
#

18. Saga 编排式与协调式在 Spring Cloud Alibaba Seata 中的事务回滚与补偿机制实现

A Seata 无补偿机制
B Seata 用状态机编排 Saga,失败时执行补偿动作实现回滚 ✓ 正确答案
C Saga 用全局锁
D Seata 只支持 AT 模式
#

19. Seata AT 模式如何基于本地事务与 undo log 实现自动补偿,与 TCC 模式在侵入性、隔离性与性能上的实现差异

A AT 用 undo log 自动补偿侵入低,TCC 手写 Try/Confirm/Cancel 侵入高 ✓ 正确答案
B 二者侵入性相同
C AT 无需 undo log
D TCC 自动补偿
#

20. Service Mesh 在 Spring Cloud 微服务中与传统 SDK(OpenFeign + Hystrix)

A 二者完全相同
B Mesh 侵入应用
C SDK 无侵入
D Mesh 用 Sidecar 代理下沉网络治理、无侵入,SDK 嵌入应用、侵入且语言绑定 ✓ 正确答案
#

21. Strangler Fig 模式在 Spring Boot 单体应用逐步拆分微服务时的数据双写与切换策略

A 一次性替换全部
B 渐进替换功能,数据双写保一致,流量灰度切换并支持回退 ✓ 正确答案
C 无需数据双写
D 切换不可回退
#

22. TCC 模式的 Try/Confirm/Cancel 如何保证业务最终一致,空回滚、幂等与悬挂问题分别如何产生与防范

A 悬挂无害
B Confirm 可重复执行
C 空回滚无需处理
D 用事务 ID 去重保证幂等,判断 Try 状态防空回滚,状态机防悬挂 ✓ 正确答案
#

23. 三阶段提交(3PC)引入 CanCommit 阶段与超时机制如何缓解 2PC 的阻塞问题,为何仍无法在分区下保证一致性

A 3PC 分区下可保证一致
B 3PC 完全解决阻塞
C 3PC 用 CanCommit 与超时缓解阻塞,但分区下仍无法保证原子一致 ✓ 正确答案
D 3PC 与 2PC 相同
#

24. 业务驱动的架构(DDD)与技术架构的协同

A 二者无协同
B 技术架构决定业务
C 领域层依赖基础设施
D DDD 定义业务边界,技术架构实现领域,领域层依赖抽象 ✓ 正确答案
#

25. 两阶段提交(2PC)的准备与提交阶段如何工作,协调者单点、同步阻塞与数据不一致缺陷为何难以根除

A 协调者故障不影响
B 2PC 无缺陷
C 协调者单点、参与者阻塞、分区下数据不一致,CAP 限制下难以根除 ✓ 正确答案
D 2PC 不阻塞
#

26. 事件溯源(Event Sourcing)架构下,事件 schema 演进与老事件重放之间的兼容策略有哪些工程范式

A 用只增不改、版本化、事件升级器保证老事件可被新代码重放 ✓ 正确答案
B 老事件无法重放
C 删改字段即可
D 无需版本化
#

27. 事件溯源(Event Sourcing)的存储策略

A 重建总是全量重放
B 状态覆盖存储
C 事件追加存储,快照加速重建,读模型从事件投影构建 ✓ 正确答案
D 无需快照
#

28. 事件驱动架构采用至少一次投递时,消费者幂等、事件顺序和模式演进应如何共同设计

A 消费者幂等去重、分区保证顺序、版本化兼容演进,共同保证正确性 ✓ 正确答案
B 重复投递无害
C 顺序无关紧要
D 无需版本兼容
#

29. 事件驱动架构(EDA)在 Kafka 4.x + Spring Cloud Stream 下的 Exactly-Once 语义保障

A Kafka 事务实现 EOS,但跨系统仍需业务幂等 ✓ 正确答案
B EOS 保证跨系统一致
C EOS 无需幂等
D EOS 无性能开销
#

30. 事务发件箱如何原子记录领域变化与待发事件,发布成功后的清理和重复投递怎样处理

A 发布后无需清理
B 领域变化与事件独立提交
C 本地事务原子记录领域变化与事件,发布后标记清理,消费者幂等处理重复 ✓ 正确答案
D 重复投递无需处理
#

31. 云原生时代的 12-Factor App 与 Spring Boot 4.0 默认配置的兼容性差异点

A Spring Boot 支持外部化配置与 stdout 日志,但需显式配置无状态化与健康检查 ✓ 正确答案
B Spring Boot 完全不符合 12-Factor
C 无需处理会话状态
D 12-Factor 与云原生无关
#

32. 从模块化单体拆微服务时,应依据数据所有权和独立变更率还是代码行数确定服务边界

A 变更率无关
B 代码行数决定边界
C 共享数据库利于拆分
D 依据数据所有权与独立变更率确定边界,而非代码行数 ✓ 正确答案
#

33. 六边形架构如何让领域核心只依赖端口,数据库适配器与消息适配器的事务边界应放在哪里

A 事务与适配器无关
B 领域核心管理事务
C 适配器不管理事务
D 领域只依赖端口,事务边界放在数据库/消息适配器层 ✓ 正确答案
#

34. 六边形架构(Ports & Adapters)在 Spring Boot 3.x 下的边界划分、依赖倒置与单元测试友好的具体实践

A 测试需真实数据库
B 领域依赖具体实现
C 领域依赖端口接口,适配器实现,测试用桩适配器不依赖基础设施 ✓ 正确答案
D 适配器在领域层
#

35. 分层架构(Layered)中表现层调用领域服务的边界在 Spring Boot 4.0 模块化下如何重构

A 模块化无边界
B 表现层直接访问领域内部
C 表现层通过应用服务调用领域,模块化后边界清晰、领域不暴露内部 ✓ 正确答案
D 领域暴露给表现层
#

36. 在 Spring Boot 4.0 中实现 Choreography Saga 时各模块通过 Kafka 事件解耦的版本兼容策略

A 事件无需版本
B 事件 schema 版本化、只增不改、契约管理,保证独立演进时协作正确 ✓ 正确答案
C 各服务必须同步发布
D 版本兼容无必要
#

37. 在 Spring Boot 4.0 中实现 Sidecar 模式与 K8s Native Sidecar 在跨语言服务协同中的取舍

A K8s Native Sidecar 语言无关、由 K8s 管理,适合跨语言通用能力 ✓ 正确答案
B K8s Native Sidecar 绑定语言
C 应用内 Sidecar 无侵入
D 跨语言协同需应用内实现
#

38. 干净架构(Clean Architecture)的同心圆分层在 Spring Boot 4.0 模块化中的依赖管理

A 内层依赖框架
B 内层依赖外层
C 依赖方向随意
D 依赖方向指向内层,用模块边界强制,内层不依赖框架 ✓ 正确答案
#

39. 微内核加载第三方插件时,如何隔离类加载器、权限、资源配额和插件版本依赖

A 插件无需权限限制
B 插件共享类加载器
C 用独立类加载器、权限沙箱、资源配额与版本管理隔离插件 ✓ 正确答案
D 版本冲突无害
#

40. 微内核架构(Microkernel)在 Spring Boot Plugin SPI 与 Java ServiceLoader 中的实现差异

A ServiceLoader 依赖 Spring
B 二者完全相同
C ServiceLoader 轻量标准,Spring Boot SPI 集成 Spring 生态,按需选择 ✓ 正确答案
D Spring SPI 无 Spring 依赖
#

41. 微服务架构与模块化单体(Modular Monolith)

A 微服务部署简单
B 二者完全相同
C 模块化单体无模块边界
D 模块化单体保留模块边界但单部署,是微服务的前置形态,按规模权衡 ✓ 正确答案
#

42. 微服务架构(Microservices)的边界设计

A 边界与业务无关
B 按技术层切分
C 服务共享数据库
D 按业务能力与限界上下文划分,每个服务独立数据边界 ✓ 正确答案
#

43. 洋葱架构(Onion Architecture)的依赖方向

A 内层依赖外层
B 依赖指向内层,内层定义接口、外层实现,领域不依赖基础设施 ✓ 正确答案
C 依赖方向随意
D 领域依赖框架
#

44. 线程池、信号量与连接池的隔离粒度与故障域爆炸半径如何权衡

A 隔离粒度越细,故障爆炸半径越小但资源开销越大,按关键路径权衡 ✓ 正确答案
B 隔离粒度与故障无关
C 粗隔离更彻底
D 信号量隔离最彻底
#

45. ADR(架构决策记录)在企业架构治理中的版本化与审查流程

A ADR 与治理无关
B ADR 无需版本化
C 决策无需审查
D ADR 版本化记录决策演进,审查流程保证决策质量与可追溯 ✓ 正确答案
#

46. BFF 按客户端拆分接口可减少前端编排,但多个 BFF 复制业务规则时如何治理

A BFF 承载所有业务规则
B 业务规则下沉共享服务,BFF 只做编排裁剪,避免多 BFF 复制规则 ✓ 正确答案
C 各 BFF 独立复制规则
D 规则无需统一
#

47. Backend for Frontend(BFF)的边界

A BFF 只做前端适配与编排,业务规则下沉后端 ✓ 正确答案
B BFF 承载业务规则
C BFF 有状态
D BFF 与前端无关
#

48. Bulkhead 模式与故障隔离

A 故障会扩散到全部
B Bulkhead 按场景隔离资源,避免故障扩散,控制爆炸半径 ✓ 正确答案
C Bulkhead 无需隔离
D 隔离无意义
#

49. Circuit Breaker 模式与 Resilience4j

A 失败率无关
B 熔断器只打开不恢复
C 熔断器按失败率在关闭/打开/半开间转移,防止故障级联 ✓ 正确答案
D 熔断保护下游
#

50. EDA(事件驱动架构)与 EDA 2.0 的演进

A EDA 2.0 强调事件建模、契约管理与事件溯源,事件成为业务资产 ✓ 正确答案
B EDA 2.0 与 EDA 相同
C EDA 2.0 用于同步通信
D 事件只是传输载体
#

51. Microkernel 架构(插件化)的工程应用

A 插件不可扩展
B 无插件机制
C 核心不稳定
D 微内核由核心与可插拔插件组成,通过扩展点扩展功能 ✓ 正确答案
#

52. Monorepo 与 Polyrepo 的架构影响

A Monorepo 统一构建与依赖、利于协作,Polyrepo 独立版本与权限、跨项目难 ✓ 正确答案
B Monorepo 版本独立
C Polyrepo 统一构建
D 二者无差异
#

53. Pipeline 架构与责任链模式在订单处理链中的可观测性与超时传播设计

A 超时无需传播
B 无法观测链路
C trace 串联各阶段观测,阶段超时 + 总时限控制链并中止慢链 ✓ 正确答案
D 总时限无意义
#

54. Pipeline 架构与责任链的差异

A Pipeline 可短路
B 二者完全相同
C Pipeline 是数据加工流水线全阶段执行,责任链是拦截链可短路 ✓ 正确答案
D 责任链全阶段执行
#

55. Sidecar 把网络治理移出应用后会增加哪些延迟与资源开销,无代理服务网格又改变什么

A Sidecar 无开销
B Sidecar 增加跳数与资源开销,无代理减少开销但牺牲无侵入 ✓ 正确答案
C 无代理增加延迟
D 二者相同
#

56. Sidecar 模式与 Service Mesh

A Sidecar 是架构
B 二者无关
C Service Mesh 无 Sidecar
D Service Mesh 用 Sidecar 代理下沉网络治理,Sidecar 是数据面载体 ✓ 正确答案
#

57. Strangler Fig Pattern 在遗留系统迁移到微服务时的渐进式重构路径与风险

A 一次性替换
B 渐进迁移,风险在数据双写一致、兼容与长尾,用灰度与回退控制 ✓ 正确答案
C 无需数据同步
D 无迁移风险
#

58. 事件驱动架构(Event-Driven)的事件契约版本管理与死信处理,如何避免事件风暴与隐式依赖

A 版本契约管理、死信处理、风暴控制与显式依赖避免事件失控 ✓ 正确答案
B 事件无需版本
C 死信无必要
D 事件风暴无害
#

59. 六边形架构(Hexagonal/Ports and Adapters)

A 核心依赖端口抽象,适配器接外部,核心技术无关、可测试 ✓ 正确答案
B 核心依赖具体技术
C 适配器在核心
D 端口与外部无关
#

60. 分层架构(Layered)的工程取舍

A 跨层调用无害
B 层数越多越好
C 分层清晰易测试,但需防穿透与过度分层,按需分层 ✓ 正确答案
D 分层不可避免
#

61. 在 Spring Cloud Gateway 中实现 Backend For Frontend(BFF)

A 用路由与过滤器实现聚合、裁剪与适配,网关保持薄 ✓ 正确答案
B 网关承载业务规则
C 网关无路由能力
D BFF 与网关无关
#

62. 如何把模块依赖、延迟预算和恢复目标转化为自动化架构适应度函数并纳入流水线

A 用 ArchUnit、压测、故障演练自动验证依赖/延迟/恢复约束,纳入流水线门禁 ✓ 正确答案
B 架构约束靠人工检查
C 适应度函数无法自动化
D 无需纳入流水线
#

63. 容量预估(QPS/带宽/存储)的工程方法

A 按业务指标估算 QPS/带宽/存储,加峰值系数与冗余,压测验证 ✓ 正确答案
B 容量无需预估
C 无需冗余
D 压测无关
#

64. 技术选型的多维度评估(性能/团队/成本/生态)

A 从性能、团队、成本、生态多维度评估,按需求定权重并用 PoC 验证 ✓ 正确答案
B 只看性能
C 单一维度即可
D 生态无关紧要
#

65. 整洁架构要求依赖指向内层,但 DTO、注解和框架异常跨层传播时如何防止实现细节泄漏

A 框架异常泄漏到内层
B 领域对象直接暴露
C 用 DTO 映射、注解隔离、异常转换,让内层不依赖框架细节 ✓ 正确答案
D 领域层用框架注解
#

66. 架构债务(Technical Debt)的治理

A 债务不可识别
B 债务无需偿还
C 治理是识别、记录、偿还、预防的闭环,债务可见且有计划 ✓ 正确答案
D 架构债务无害
#

67. 架构决策记录如何包含约束、替代方案和退出条件,何时应重新评估而不是永久沿用

A ADR 记录约束、替代方案与退出条件,假设变化时重新评估 ✓ 正确答案
B ADR 永久适用
C 退出条件无必要
D 决策不可复议
#

68. 架构决策记录(ADR)的工程实践

A ADR 不入库
B ADR 一次性记录
C ADR 无需评审
D ADR 用模板入库、评审、状态管理并回顾,让决策显性可追溯 ✓ 正确答案
#

69. 架构原则(Architecture Principles)如何转化为可执行的架构适应度函数并防止被空泛化

A 原则靠口号
B 原则无需度量
C 原则转化为可度量、可自动检查的适应度函数并设门禁,防空泛 ✓ 正确答案
D 适应度函数无法落地
#

70. 架构图(C4/4+1)的画法

A 架构图只给高管看
B 一张图画全部
C 无需分层
D C4 用四层视角,4+1 用多视角,按读者选层级并保持简洁 ✓ 正确答案
#

71. 架构演进的版本管理如何做(兼容策略/迁移路径/废弃周期),破坏性变更如何协调各方?

A 破坏性变更直接切换
B 兼容优先、提供迁移路径、明确废弃周期,破坏性变更提前公告分阶段 ✓ 正确答案
C 无需迁移路径
D 废弃无需周期
#

72. 架构评审(Architecture Review)的工程实践

A 评审以问题为导向,覆盖依赖、性能、安全,用 ADR 记录并结合自动化 ✓ 正确答案
B 评审凭喜好
C 评审无需记录
D 架构评审一次即可
#

73. 模块化单体如何用 Spring Modulith 验证模块依赖、测试边界并观察跨模块事件

A 跨模块事件不可观察
B 模块边界无法验证
C 验证模块依赖无循环、测试模块边界、观察跨模块事件 ✓ 正确答案
D Modulith 与模块无关
#

74. 系统瓶颈快速定位的思路是什么,从指标-日志-追踪的排障顺序到压测验证如何闭环?

A 压测无必要
B 只看日志
C 指标定位层、日志定位因、追踪定位链路、压测验证,形成闭环 ✓ 正确答案
D 追踪最后看
#

75. 系统设计的"4S"方法(Scenario/Service/Storage/Scalability)

A 4S 按场景、服务、存储、扩展展开系统设计 ✓ 正确答案
B 4S 只关注存储
C 4S 无场景
D 4S 不考虑扩展
#

76. 系统设计的非功能性需求(NFR),包括性能/可用/扩展/安全

A NFR 无需量化
B NFR 涵盖性能、可用、扩展、安全,需量化并在架构中体现 ✓ 正确答案
C NFR 与架构无关
D 只关注功能
#

77. 设计文档(Design Doc)的模板

A 无需记录风险
B 模板只需方案
C 模板涵盖背景、目标、方案、替代方案、风险与演进 ✓ 正确答案
D 设计文档一次性
#

78. 跨地域主动主动架构如何处理写入归属、冲突解决和读己之写,哪些业务不适合多主

A 所有业务都适合多主
B 主动主动强一致
C 无需冲突解决
D 需处理写入归属、冲突解决与读己之写,强一致或写冲突多的业务不适合 ✓ 正确答案
#

79. 风险评估与 PoC(概念验证)

A PoC 是完整实现
B 风险评估定验证点,PoC 最小成本验证关键假设,降低决策不确定性 ✓ 正确答案
C 风险评估无需验证
D PoC 与决策无关
#

80. Pipeline / 编排型架构(如 Temporal / Camunda)

A 编排型只适合短流程
B 工作流无状态
C 无法重试
D 工作流引擎(Temporal/Camunda)编排流程,支持状态、重试与补偿 ✓ 正确答案
#

81. 事件溯源系统如何选择快照频率并验证重放确定性,事件模式升级后旧历史怎样兼容

A 重放无需确定
B 快照越多越好
C 快照频率权衡存储与重建,确定性验证重放,版本化兼容旧事件 ✓ 正确答案
D 旧事件无法兼容
#

82. 在 GraalVM Native Image 下使用 Spring Modulith 构建事件驱动架构的反射配置最小集

A 反射自动处理
B 需注册事件类、监听器与序列化的反射 hint ✓ 正确答案
C 事件无需反射
D Native Image 支持所有反射
#

83. 性能/可用性/扩展性的 SLI/SLO/SLA

A SLI 与 SLO 相同
B SLI 度量、SLO 目标、SLA 协议,性能/可用/扩展各有指标 ✓ 正确答案
C SLA 是内部指标
D 扩展性无 SLO
#

84. 故障演练(Chaos Engineering)的边界

A 无需回滚预案
B 可随意注入故障
C 故障注入需控制爆炸半径、可回滚、不破坏关键数据,验证韧性 ✓ 正确答案
D 聚焦制造破坏
#

85. 绞杀者模式迁移旧系统时,流量路由、数据双写和回退开关应按什么顺序演进

A 无需数据双写
B 先切流量再双写
C 无需回退开关
D 先数据双写,再小流量路由,后放大并保留回退开关 ✓ 正确答案
#

86. 架构的安全设计(Security by Design)

A 安全独立于架构
B 安全事后补丁即可
C 安全从设计期内置,做威胁建模、分层防御、最小权限与加密 ✓ 正确答案
D 无需威胁建模