软考系统架构师 列表全部文章
软考系统架构师
软考系统架构师第 11 / 16 篇

综合知识精讲(上):架构基础与软件工程

系统架构设计师综合知识(上):架构风格对比、质量属性与 ATAM、4+1 视图、开发模型与敏捷、需求与测试、23 种设计模式速记、耦合内聚与 UML,附考点表、易错点与口诀,学长划重点版。

更多

先交代一下写法:这是我整理教材和公开备考资料后的复习笔记,不是"我考过了来传经"。我没有亲历这场考试,所以不会说"我考了多少分",只会告诉你"我整理后觉得哪些必须背、哪些容易踩坑"。知识点尽量准确,但考试以官方大纲、教材和公告为准,本文里凡是我没查实的地方都会明说。

0. 先看考情:这一篇为什么排在最前面

综合知识是 75 道单选、75 分、45 分及格(教材与多个培训机构资料口径一致:三科各 75 分,各 45 分合格,需一次通过)。综合知识和案例分析连考,合计 240 分钟,综合知识最长 150 分钟,论文另考 120 分钟。这几条我在多个来源里看到的是一致的,具体到你所在省份的报名和考试日期,请看官方公告。

关于 2026 年的日程,我查到的资料有分歧:广州市人社局发布的 2026 年度报考热点问答写的是上半年 5 月 23 日至 26 日、下半年 10 月 24 日至 27 日,且上半年高级科目含系统架构设计师;而某个人博客写的下半年是 11 月 7–8 日,与官方口径对不上。我以广州市人社局的口径为准,但还是那句话,请以中国计算机技术职业资格网和你所在省市考试院的公告为准。教材依据方面,我查到的公开资料显示,官方教材为《系统架构设计师教程(第 2 版)》(2022 年底出版),并配有考试大纲(第 2 版);网上也有"第 3 版"的说法,但我没有查到官方来源,因此不作断言。

再看分布。希赛网整理的综合知识分值分布大致是:软件架构设计约 19–28 题,软件工程约 9–21 题,两者加起来占了一半以上;系统安全性设计 3–7 题,项目管理 1–4 题,可靠性分析 0–3 题,专业英语 5 题左右。也有个人整理指出近年数据库题里 NoSQL 出现得比关系数据库多。这些都是"大致区间",不是官方承诺,你拿来定复习优先级就好,别当预测。

一句话备忘:综合知识 = 架构(风格、质量属性、评估、视图)+ 软件工程(模型、需求、测试、维护、设计模式)拿下半壁江山,剩下的数据库、网络安全、新技术放到下篇。

1. 本篇知识框架图

下面这张图是我给自己画的"上篇地图",六大块,各自对应后文的一节。看图记框架,看表背细节。

综合知识(上) 架构风格 质量属性与评估 4+1 视图与 ADL 软件工程 设计模式 23 种 数据流 调用/返回 独立构件 虚拟机 仓库/黑板 场景六要素 战术 敏感/权衡/风险点 ATAM 9 步 逻辑/进程 开发/物理 + 场景 DSSA 与产品线 开发模型/敏捷 需求工程 测试/维护 可靠性/CMMI 创建型 5 结构型 7 行为型 11 六大原则 系统设计:耦合(7 级)与内聚(7 级)、结构化设计、UML 2.x 十四种图 贯穿所有块:先看题干在问"哪类质量属性",再回头找对应的风格/战术/模式

2. 软件架构风格

2.1 什么是架构风格

架构风格描述的是一类系统的组织方式:有哪些构件、连接件、拓扑与约束。它比设计模式高一个层次,你可以理解为"系统级的模式"。教材把经典风格分为五大类:数据流风格、调用/返回风格、独立构件风格、虚拟机风格、仓库风格。考试里常直接问"某场景适合哪种风格",或者给你一段描述让你判断风格名称。

2.2 五大类速查

大类典型子风格核心特征典型场景优缺点
数据流批处理序列;管道-过滤器数据依次流经各处理单元,过滤器独立、只通过管道通信编译器、信号处理、ETL、Unix 命令易复用与并行;不适合交互,数据格式需统一,错误处理难
调用/返回主程序/子程序;面向对象;层次结构;客户端/服务器控制权按调用关系传递,上下层依赖明确传统 MIS、企业应用、操作系统内核层次清晰易替换;层多则性能下降,上层难感知底层变化
独立构件通信进程;事件系统(隐式调用)构件相互独立,通过消息或事件通信,发布者不知订阅者GUI、消息队列、事件总线、发布订阅松耦合、易扩展;执行顺序难预测,调试困难
虚拟机解释器;规则系统在真实机器上模拟一台"虚拟"机器脚本语言、JVM、专家系统可移植、灵活;解释执行效率低
仓库数据库系统;超文本系统;黑板系统以共享数据存储为中心,多个构件围绕它读写语音识别、信号解释、IDE、知识库数据集中共享;仓库成为瓶颈与单点

关于黑板系统我多说一句:它有三部分——知识源(各自解决问题的一小块)、黑板(共享数据结构)、控制(选择激活哪个知识源)。经典例子是语音识别、图像理解这类"没有确定算法、靠多个专家协作逐步逼近"的问题。看到"多个专家、共享数据、没有固定解题顺序",就别犹豫了。

2.3 层次、C/S、B/S 与 MVC

  • 分层架构:表示层、业务逻辑层、数据访问层、数据层是最常见的四层。每层只依赖下一层(严格分层)或所有下层(松散分层)。好处是隔离变化、职责清晰;代价是性能损耗、级联修改。
  • 两层 C/S:胖客户端,客户端承担业务,升级和维护要装客户端;三层 C/S:表示层、功能层、数据层分离,可伸缩性好;B/S:浏览器作为通用客户端,可以看作三层 C/S 的特例,部署维护方便。
  • MVC:模型-视图-控制器,控制器接收输入、调度模型,视图负责展示,模型封装数据与业务。MVP 中视图与模型完全隔离,Presenter 居中;MVVM 引入数据绑定,视图和视图模型双向同步。

2.4 C2、事件驱动、微服务、管道与黑板对比

题目里最爱考的是"给你 5 种风格,你选哪个"。我把几种现代和经典风格放在一个表里做对比:

风格一眼认出的关键词耦合方式适合不适合
分层上层依赖下层、每层职责单一层间接口业务系统、网络协议栈对性能极端敏感的场景
管道-过滤器数据流、过滤器、管道数据格式批量转换、编译器强交互 GUI
事件驱动(发布订阅)事件、隐式调用、总线、订阅事件契约异步解耦、实时响应需要严格顺序与强一致
黑板知识源、共享黑板、无确定算法共享数据语音/图像识别有确定算法的问题
C2构件与连接件、顶部底部端口、请求向上通知向下消息通信GUI 软件、可动态替换构件的系统需要构件间直接调用的系统
微服务独立部署、按业务拆分、去中心化数据、轻量通信HTTP/RPC/消息大型、多团队、快速迭代小团队小系统、强事务一致场景
SOA/ESB服务契约、企业服务总线、编排服务契约与总线异构系统集成追求极简、总线成为瓶颈
解释器/规则系统虚拟机、解释执行、规则库指令/规则脚本、DSL、专家系统追求最高运行效率

C2 风格要记三点:构件与连接件的层次化组织;构件只能通过顶部和底部两个端口交互;向上发请求,向下发通知,上层构件可以感知下层但下层不知道上层。这个顺序如果反过来就错,考过。

微服务考点我重点提醒:微服务不是分布式单体。如果你拆完之后所有服务共享一个库、必须一起发布,那就是分布式单体,比单体更糟。真正的微服务强调每个服务拥有自己的数据、独立部署,并伴随服务发现、API 网关、熔断限流、链路追踪、配置中心等一整套治理。

2.5 高频考点与易错点

考点高频问法易错点
风格判断给场景选风格把事件驱动和发布订阅当成两回事;实际上发布订阅是事件系统的典型形式
管道-过滤器过滤器之间能否共享状态标准定义里过滤器不共享状态、彼此不知对方存在
黑板三个组成部分把"控制"写成"用户接口"
C/S 与 B/S三层比两层好在哪忘了"可伸缩、安全、易复用"这三点
C2请求/通知的方向写反方向

一句话备忘:数据流看"流",调用返回看"层",独立构件看"事件",虚拟机看"解释",仓库看"共享数据"。口诀:流层事解仓。

3. 质量属性与架构评估

3.1 质量属性分类

教材把质量属性按"什么时候能观察到"分成两类:运行期可以观察到的(性能、安全性、可用性、功能性、易用性),和开发期才能观察到的(可修改性、可变性、可扩展性、互操作性、可集成性、可移植性、可测试性等)。这两类里,考试最爱问的是性能、可用性、安全性、可修改性、可测试性、易用性这六个的战术。

3.2 质量属性场景的六要素

质量属性场景是把模糊的"要快""要稳"变成可度量描述的模板,一共六要素:

  1. 刺激源:谁产生了刺激(用户、其他系统、定时器、攻击者……);
  2. 刺激:到达系统的事件(一个请求、一次故障、一个变更需求);
  3. 环境:刺激到来时系统处于什么状态(正常、过载、降级、开发期);
  4. 制品:被刺激的对象(整个系统、某个模块、数据库);
  5. 响应:系统做了什么;
  6. 响应度量:怎么衡量响应是否达标(时延、吞吐、恢复时间、修改工作量)。

举个例子:用户(刺激源)在正常负载下(环境)提交下单请求(刺激),订单服务(制品)处理并返回结果(响应),95% 的请求在 500ms 内完成(响应度量)。题目常给你一段话让你填空,或者问"以下哪一项不是六要素"。记口诀:源、激、环、制、响、度。

3.3 战术速查

战术就是"为了达成某种质量属性而采取的设计决策"。下表按属性列出教材里的主要战术:

质量属性战术分类具体战术
性能资源需求提高计算效率、减少计算开销、管理事件率、控制采样频率、限制执行时间、限制队列大小
资源管理引入并发、维持数据或计算的多个副本、增加可用资源
资源仲裁先进先出、固定优先级、动态优先级、静态调度
可用性错误检测命令/响应(ping/echo)、心跳、异常
错误恢复表决、主动冗余(热重启)、被动冗余(暖重启)、备件、影子操作、状态再同步、检查点/回滚
错误预防服务器下线、事务、进程监视器
安全性抵抗攻击身份认证、授权、数据加密、限制暴露、限制访问、维护数据机密性与完整性
检测攻击入侵检测系统
从攻击中恢复恢复(复用可用性战术)、审计追踪、不可否认
可修改性局部化修改维持语义一致性、预期期望的变更、泛化模块、限制可选择项
防止连锁反应信息隐藏、维持现有接口、限制通信路径、仲裁者的使用
推迟绑定时间运行时注册、配置文件、多态、组件替换、遵守已定义的协议
可测试性输入/输出记录/回放、分离接口与实现、专用测试接口
内部监控内置监视器
易用性运行时撤销、取消、聚合命令、显示系统状态
设计时把用户界面与系统其他部分分离(如 MVC)

补充一个我觉得最容易混的点:可用性和可靠性不同。可靠性看"在规定条件和时间内无故障运行的概率",可用性看"任意时刻系统能正常工作的概率",公式是 MTTF / (MTTF + MTTR),一个偏"不出事",一个偏"出事了能多快好"。表决、冗余这些都是为了提升可用性。

3.4 敏感点、权衡点、风险点、非风险点

  • 敏感点:为了实现某个质量属性,一个或多个构件所具有的特性。比如"数据库的副本数量"对可用性敏感。
  • 权衡点:影响多个质量属性的特性,是多个敏感点的交集。比如加密强度既影响安全性,又影响性能。
  • 风险点:不好的架构决策,可能带来隐患。
  • 非风险点:好的架构决策,通常是隐含的。

判断技巧:题干里出现"提高 A 会降低 B"的,选权衡点;单方面依赖某参数的,选敏感点。

3.5 ATAM 是什么

ATAM(Architecture Tradeoff Analysis Method,架构权衡分析方法)由 SEI 提出,是基于场景的评估方法:它不仅评估架构是否满足质量属性目标,还分析质量属性之间的权衡。它分四个阶段共九个步骤,我用图画一下:

阶段 1 陈述 1 介绍 ATAM 2 介绍商业动机 3 介绍架构 阶段 2 调查分析 4 识别架构方法 5 生成效用树 6 分析架构方法 阶段 3 测试 7 头脑风暴与 场景优先级排序 8 再次分析方法 阶段 4 报告 9 表述结果 效用树:根是"质量",向下分质量属性 → 属性细化 → 具体场景(附重要性/实现难度) 产出:敏感点、权衡点、风险点、非风险点

这里的阶段命名不同资料略有差异(有的把前两步合成"展示",把 4–6 叫"调查与分析"),但九个步骤的顺序是一致的:介绍 ATAM、介绍商业动机、介绍架构、识别架构方法、生成质量属性效用树、分析架构方法、头脑风暴并对场景排序、再次分析架构方法、表述结果。考试常让你把某一步放到对的位置,或者问"效用树是第几步"(第 5 步)。

3.6 评估方法家族

类型代表特点
基于调查问卷或检查表问卷/检查表灵活、通用,依赖评审者经验,主观性较强
基于场景SAAM、ATAM、SAEMSAAM 侧重可修改性与功能,ATAM 关注多质量属性与权衡;场景是核心
基于度量耦合度、内聚度、复杂度等指标客观定量,但指标与质量属性的对应需验证

3.7 高频考点与易错点

考点常见问法易错点
六要素给一句话,问某成分是哪个要素把"响应"与"响应度量"混淆;度量必须是可测的
战术归类心跳、ping/echo 属于哪类属于错误检测,不是恢复
安全性战术入侵检测归哪类属于"检测攻击",不是"抵抗攻击"
可修改性"信息隐藏"属于哪类属于防止连锁反应
ATAM效用树在第几步;权衡点定义把 ATAM 当成"基于度量"的方法

一句话备忘:性能三件套:需求、管理、仲裁;可用性三件套:检测、恢复、预防;安全性三件套:抵抗、检测、恢复;可修改性三件套:局部化、防连锁、推迟绑定。ATAM 记"效用树第五,结果第九"。

4. 软件架构的描述:4+1 视图、ADL 与 DSSA

4.1 Kruchten 4+1 视图

Philippe Kruchten 在 1995 年提出 4+1 视图模型,用五个视图从不同角度描述架构,其中"+1"是场景,用来把四个视图串起来。

视图关注的人关注的内容常用图
逻辑视图最终用户系统提供的功能,对象与类的抽象类图、状态图
进程视图系统集成人员并发、同步、性能、可伸缩性活动图、顺序图
开发视图(实现视图)程序员、软件管理人员模块、包、层次,软件在开发环境中的组织组件图、包图
物理视图(部署视图)系统工程师软件到硬件的映射,拓扑、通信部署图
场景(用例视图)所有涉众用例,验证与说明前四个视图用例图

记忆口诀:逻辑看用户,进程看集成,开发看程序员,物理看工程师,场景串起来。真题里的经典问法是"XX 视图面向的对象是谁",还有"进程视图关注什么"(并发、同步)。

4.2 架构描述语言与相关标准

  • ADL:用形式化方式描述架构的语言,包括构件、连接件、配置。常见有 Wright、Darwin、Rapide、ACME、C2 SADL、UniCon 等。考试通常问"ADL 的三个基本要素是什么"——构件、连接件、架构配置。
  • ISO/IEC/IEEE 42010(前身 IEEE 1471):规定架构描述的组成——涉众、关注点、视点、视图、模型、原理。视点是"如何构造视图的规约",视图是"从某视点看到的系统"。
  • UML:可以作为半形式化的架构描述手段,但缺少对连接件的一等支持。

4.3 DSSA 与软件产品线

DSSA(领域特定软件架构)是"在一个特定领域中,为一组应用提供组织结构参考的标准软件体系结构"。基本活动分三个阶段:领域分析、领域设计、领域实现;参与人员有领域专家、领域分析人员、领域设计人员、领域实现人员。软件产品线则是在共性管理、变化管理的基础上,基于核心资产系统化复用来生产一组相似产品,常见组织方式有:核心资产开发 + 产品开发两个基本活动,再加上技术与组织管理。

容易被忽略的对比:DSSA 强调"领域的参考架构与复用",产品线强调"一组产品的规模化生产",而架构复用是它们的共同基础。

4.4 高频考点与易错点

考点易错点
4+1 视图把开发视图与物理视图对象弄反;把"+1"说成第五个技术视图,其实是场景
ADLADL 三要素写成"构件、接口、约束"
DSSA三阶段写成"分析、设计、测试",应为分析、设计、实现

一句话备忘:4+1 视图五看:逻辑(用户)、进程(集成)、开发(程序员)、物理(工程师)、场景(串联)。

5. 软件工程

5.1 开发模型对比

模型关键词适用缺点
瀑布阶段严格顺序、文档驱动、每阶段评审需求明确稳定反馈晚、需求变化代价大
V 模型开发阶段与测试阶段一一对应(需求—验收、概要设计—集成、详细设计—单元)强调测试尽早介入仍是线性、变更困难
原型快速原型、抛弃型与演化型需求不明确易被误当成最终产品
增量分批交付功能,先核心后扩展需求相对清楚、要早期交付架构需一开始就稳
螺旋风险驱动,每圈:目标、风险分析、开发验证、评审计划大型高风险项目依赖风险评估能力,成本高
喷泉面向对象、迭代、无缝、阶段可重叠OO 开发管理难度大
RAD组件复用、并行开发、短周期(60–90 天)模块化好的信息系统要求团队与组件成熟
RUP用例驱动、以架构为中心、迭代增量;四阶段:初始、精化、构造、移交大型 OO 项目裁剪不当会重

判断技巧:看到"风险"选螺旋;看到"需求不明确、快速让用户看到"选原型;看到"测试贯穿、左右对应"选 V;看到"用例驱动、架构为中心、迭代"选 RUP。RUP 四阶段口诀:初精构移。

5.2 敏捷、XP、Scrum 与 DevOps

敏捷宣言的四个价值观:个体和互动高于流程和工具;可工作的软件高于详尽的文档;客户合作高于合同谈判;响应变化高于遵循计划。注意是"高于",不是"取代",题目喜欢让你判断"敏捷是否不要文档",答案当然是要,只是不以文档为核心。

  • XP:价值观是沟通、简单、反馈、勇气(后来加上尊重);实践包括结对编程、测试驱动开发、重构、持续集成、小型发布、现场客户、集体代码所有权、40 小时工作周等。
  • Scrum:三个角色(产品负责人、Scrum Master、开发团队);五个事件(Sprint、Sprint 计划会、每日站会、Sprint 评审会、Sprint 回顾会);三个工件(产品待办列表、Sprint 待办列表、增量)。Sprint 一般不超过一个月。
  • 其他敏捷方法:水晶方法(Crystal)、特征驱动开发(FDD)、自适应软件开发(ASD)、DSDM 等。
  • DevOps:打通开发与运维,强调持续集成、持续交付/部署、基础设施即代码、监控与反馈。它不是某个工具,而是文化加实践加工具链。

5.3 需求工程

需求分三个层次:业务需求(组织为什么要做)、用户需求(用户要完成什么任务)、系统需求(系统必须做什么,包括功能需求、非功能需求、设计约束)。需求工程的主要活动:需求获取、需求分析、需求规格说明、需求验证、需求管理。

活动常用方法与工具要点
获取访谈、问卷、观察、原型、联合应用开发(JAD)、用例、情景分析多渠道交叉验证,防止遗漏隐含需求
分析数据流图、实体联系图、状态转换图、用例冲突识别与协商,需求优先级
规格说明SRS 文档、模型无二义、完整、一致、可验证、可追踪
验证评审、原型验证、测试用例推导需求评审是成本最低的缺陷预防手段
管理变更控制、基线、需求跟踪矩阵变更走 CCB(变更控制委员会)

提醒:需求跟踪分正向跟踪(需求到设计、代码、测试)与逆向跟踪(反过来),用来防止"多做"和"漏做"。

5.4 软件测试

测试阶段

单元测试(针对模块,多用白盒)→ 集成测试(接口,方式包括大爆炸、自顶向下、自底向上、三明治)→ 系统测试(功能、性能、压力、安全、兼容、容量、恢复)→ 验收测试(用户参与,α 测试在开发方环境由用户在开发者指导下进行,β 测试在用户环境无开发者在场)。回归测试贯穿修改后各阶段,冒烟测试则是对构建版本的初步验证。

黑盒与白盒

类型方法说明
黑盒等价类划分、边界值分析、判定表、因果图、错误推测、场景法、正交试验只看输入输出,不看内部
白盒语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖、路径覆盖、基本路径测试基于内部逻辑结构

覆盖强弱排序(由弱到强):语句 < 判定 < 条件 < 判定/条件 < 条件组合 < 路径。条件组合覆盖能保证判定/条件覆盖,是很强的一种;路径覆盖最强但不一定可行。圈复杂度公式 V(G) = E − N + 2(边数减节点数加 2),也等于判定节点数加 1,等于独立路径条数,用于基本路径测试。

5.5 软件维护、演化与重构

维护类型有四种:改正性(修错)、适应性(适应环境变化)、完善性(增加功能、提高性能,比例通常最高)、预防性(为了未来更好维护而重构)。可维护性的评价维度:可理解性、可测试性、可修改性。相关技术:逆向工程(从代码恢复设计/需求)、重构(不改变外部行为地改善内部结构)、再工程(逆向 + 重构 + 正向)。老系统改造是近年案例题的热门方向,综合知识里则考"哪种维护"。

5.6 软件质量、可靠性与成熟度

  • 质量模型:ISO/IEC 25010 的产品质量模型(2011 版)有八个特性:功能适合性、性能效率、兼容性、易用性、可靠性、信息安全性、可维护性、可移植性。我隐约记得 2023 年有修订版本调整了特性名称与数量,但没有查到原文,考试仍以教材版本为准。
  • 可靠性指标:MTTF(平均无故障时间)、MTTR(平均修复时间)、MTBF = MTTF + MTTR,可用性 = MTTF / (MTTF + MTTR)。串联与并联系统的可靠度计算放在下篇"数学与运筹"里细讲。
  • CMMI:五级——初始级、已管理级、已定义级、量化管理级、优化级。口诀:初管定量优。
  • 配置管理:配置项、基线、版本控制、变更控制;软件评审:走查、审查、技术评审,正式程度依次上升。

5.7 高频考点与易错点

考点易错点
开发模型把螺旋当成"多次瀑布";螺旋的灵魂是风险分析
敏捷Scrum 角色写成"项目经理";Scrum 没有项目经理这个角色
测试覆盖混淆判定覆盖与条件覆盖强度;条件覆盖不一定满足判定覆盖
集成测试三明治是自顶向下与自底向上的结合
维护把"因用户需求增加功能"归成适应性;应是完善性
成熟度CMMI 二级叫"已管理级",别写成"可重复级"(那是 CMM)

一句话备忘:模型看关键词,敏捷看价值观,测试记覆盖强弱,维护记"改适完预",成熟度记"初管定量优"。

6. 设计模式

设计模式来自 GoF 的《设计模式》一书,共 23 种,分创建型(5)、结构型(7)、行为型(11)。考试要求:知道每种模式的意图,能根据场景选模式,能区分容易混淆的模式。

6.1 创建型(5 种)

模式一句话意图识别场景
工厂方法(Factory Method)定义创建对象的接口,让子类决定实例化哪个类创建逻辑延迟到子类
抽象工厂(Abstract Factory)创建一系列相关或相互依赖的对象,不指定具体类产品族、换整套主题/数据库
生成器(Builder)将复杂对象的构建与表示分离,同样的过程可创建不同表示分步骤构建复杂对象
原型(Prototype)通过复制现有实例来创建新对象创建成本高,需要克隆
单例(Singleton)保证一个类只有一个实例并提供全局访问点配置、线程池、日志器

口诀:抽象工厂原型建,单例创建五个全(抽象工厂、工厂方法、原型、生成器、单例)。

6.2 结构型(7 种)

模式一句话意图识别场景
适配器(Adapter)把一个类的接口转换成客户期望的另一个接口接口不兼容的老代码整合
桥接(Bridge)将抽象部分与实现部分分离,使两者独立变化两个维度独立扩展
组合(Composite)将对象组合成树形结构,使单个与组合对象一致对待文件夹/文件、菜单树
装饰器(Decorator)动态地给对象添加额外职责IO 流、功能叠加
外观(Facade)为子系统提供一致的高层接口简化复杂子系统的调用
享元(Flyweight)运用共享技术有效支持大量细粒度对象大量相似对象,节省内存
代理(Proxy)为其他对象提供代理以控制对它的访问远程/虚拟/保护/缓存代理

口诀:适桥组装外享代。

三对最容易混:适配器 vs 桥接(适配器事后补救,桥接事前设计);装饰器 vs 代理(装饰器增强功能,代理控制访问);外观 vs 适配器(外观简化接口,适配器转换接口)。

6.3 行为型(11 种)

模式一句话意图识别场景
责任链(Chain of Responsibility)让多个对象都有机会处理请求,沿链传递审批流、过滤链
命令(Command)将请求封装为对象,支持排队、撤销撤销/重做、任务队列
解释器(Interpreter)给定语言,定义其文法的表示与解释器简单 DSL、表达式
迭代器(Iterator)顺序访问聚合对象元素而不暴露内部遍历集合
中介者(Mediator)用中介对象封装一组对象的交互,减少相互引用聊天室、对话框控件联动
备忘录(Memento)不破坏封装的前提下捕获并外部保存对象状态快照、撤销
观察者(Observer)对象间一对多依赖,一个变化通知所有依赖者事件、订阅
状态(State)对象内部状态改变时改变其行为状态机、订单状态
策略(Strategy)定义一族算法,封装并可互换促销规则、排序算法切换
模板方法(Template Method)定义算法骨架,把某些步骤延迟到子类框架钩子、固定流程
访问者(Visitor)在不改变元素类的前提下定义作用于元素的新操作结构稳定、操作多变

口诀:责命解迭中,备观状策模访(责任链、命令、解释器、迭代器、中介者、备忘录、观察者、状态、策略、模板方法、访问者,一共 11 个)。

再补两个易混:状态 vs 策略(状态由内部转换触发,策略由客户端选择);观察者 vs 中介者(观察者是一对多的广播,中介者是多对多的协调)。

6.4 设计原则

  • 单一职责(SRP):一个类只有一个引起它变化的原因;
  • 开闭原则(OCP):对扩展开放,对修改关闭;
  • 里氏替换(LSP):子类可以替换父类而不改变程序正确性;
  • 依赖倒置(DIP):依赖抽象而不是具体;
  • 接口隔离(ISP):客户端不应依赖它不需要的接口;
  • 迪米特法则(最少知识):只与直接朋友通信;
  • 合成复用:优先组合而不是继承。

6.5 高频考点与易错点

考点易错点
模式分类把适配器写成创建型;把访问者写成结构型
场景选型"多个对象依赖一个对象变化" 选观察者,不是中介者
抽象工厂 vs 工厂方法产品族用抽象工厂;单一产品用工厂方法
单例多线程下需要考虑线程安全(双重检查、静态内部类、枚举)

一句话备忘:创建型 5、结构型 7、行为型 11,总数 23;创建看"怎么造",结构看"怎么拼",行为看"怎么协作"。

7. 系统设计:模块化、耦合内聚与 UML

7.1 耦合与内聚

好设计的标准是"高内聚、低耦合"。两个都有等级,顺序背熟就是白拿分:

类别由低(好)到高(差)或反之口诀
耦合(越低越好)非直接耦合 < 数据耦合 < 标记耦合 < 控制耦合 < 外部耦合 < 公共耦合 < 内容耦合无数标控外公内
内聚(越高越好)偶然 < 逻辑 < 时间 < 过程 < 通信 < 顺序 < 功能偶逻时过通顺功

解释几个易混的:数据耦合只传简单数据;标记耦合传数据结构;控制耦合传控制信号;公共耦合共享全局数据区;内容耦合直接访问对方内部,最坏。内聚里,时间内聚是"同一时间执行的操作放一起"(如初始化),过程内聚是"按特定顺序执行",通信内聚是"操作同一数据",顺序内聚是"前一个输出是后一个输入"。

7.2 结构化设计

结构化设计的产物是系统结构图(模块层次),衡量指标有:深度、宽度、扇入(被调用的上级模块数,越大越好,说明复用)、扇出(调用的下级模块数,一般 3–4 较好,最好不超过 7)。设计方法有面向数据流(变换分析、事务分析)等。

7.3 UML 2.x 十四种图

类别图用途
结构图(7)类图类与关系,最核心
对象图某时刻实例快照
组件图组件及其接口依赖
部署图节点与制品的物理部署
包图包与依赖,组织模型
组合结构图类的内部结构与协作
轮廓图(Profile)扩展 UML 的构造型
行为图(7)用例图用户视角的功能
活动图流程与并发,类似流程图
状态机图对象状态迁移
顺序图对象间消息按时间排序
通信图对象间消息与连接关系(强调结构)
交互概览图活动图与顺序图的结合
时序图(Timing)状态随时间变化

类图的关系:依赖(虚线箭头,使用关系)、泛化(空心三角实线,继承)、实现(空心三角虚线)、关联(实线)、聚合(空心菱形,整体与部分可分离)、组合(实心菱形,整体与部分同生共死)。顺序图与通信图语义等价(强调点不同),常考"强调时间顺序选顺序图,强调结构选通信图"。

7.4 高频考点与易错点

考点易错点
耦合内聚排序把外部耦合与公共耦合的顺序搞反
聚合与组合菱形空实颠倒
UML 图归类把用例图放进结构图;把部署图放进行为图
顺序图与通信图强调重点混淆

一句话备忘:耦合"无数标控外公内",内聚"偶逻时过通顺功",UML 结构七行为七。

8. 一页速查:本篇必背清单

主题必背项
架构风格五大类:数据流、调用返回、独立构件、虚拟机、仓库;C2 请求向上、通知向下
质量属性场景六要素:刺激源、刺激、环境、制品、响应、响应度量
ATAM9 步,效用树第 5 步;敏感点、权衡点、风险点、非风险点
4+1 视图逻辑、进程、开发、物理 + 场景
开发模型瀑布、V、原型、增量、螺旋、喷泉、RAD、RUP
测试覆盖强弱;V(G)=E−N+2;集成测试四种方式
设计模式5 + 7 + 11 = 23
系统设计耦合 7 级、内聚 7 级、UML 14 图

学到这里,你已经吃下综合知识里分值最大的两块。建议复习节奏:先通读一遍教材相关章节,然后马上拿近几年真题按知识点分类刷,把错题对应到本文的表格里补记,第二遍只看易错点和口诀。下篇讲数据库、网络安全、嵌入式与新技术,以及考试里常出现的计算题。

9. 典型题型演练:把知识点变成"选项排除术"

下面几道是我按考试常见考法自拟的示例题(不是真题原文,也不声称考过),目的是演示怎么把上面的表格用起来。综合知识 75 题,150 分钟,平均一题不到两分钟,所以"看到关键词直接对应知识点"的能力比"慢慢推导"更重要。

9.1 架构风格题

题:某系统由若干独立的处理步骤组成,每个步骤从输入读数据、做转换、把结果写到输出,步骤之间只通过数据传递,彼此不知道对方的存在,且希望能灵活重组步骤顺序。适合采用哪种风格?

拆解:关键词是"步骤只通过数据传递""彼此不知道对方""灵活重组",对应数据流风格里的管道-过滤器。如果选项里同时有"批处理序列",要看题干有没有提"整批处理完再交给下一步";没有的话选管道-过滤器。如果选项有"事件驱动",注意事件驱动是靠事件触发而不是数据流动,排除。

拓展:如果题干改成"多个专家程序共同修改一份共享数据直到得出结论",就是黑板;改成"上层构件发请求,下层构件发通知,构件通过端口通信",就是 C2;改成"服务各自拥有数据、独立部署、通过轻量协议协作",就是微服务。

9.2 质量属性场景题

题:"在线支付系统在大促期间(环境),用户提交订单(刺激),订单服务(制品)应在 2 秒内响应(响应度量)。"请指出其中的刺激源与响应。

拆解:刺激源是"用户",刺激是"提交订单",环境是"大促期间",制品是"订单服务",响应是"处理订单并返回结果",响应度量是"2 秒内"。这道题的陷阱在于:原文没有明说的"响应"要你补上,"响应度量"必须是可测的数值。如果题目问"这属于哪类质量属性",答性能。再问"可以采取哪些战术",从表里挑:引入并发、增加资源、维持多个副本、限制队列长度、管理事件率。

9.3 战术归类题

题:下列哪项属于可用性战术中的"错误检测"?
A. 主动冗余 B. 心跳 C. 影子操作 D. 检查点/回滚

拆解:心跳(以及 ping/echo、异常)是错误检测;A、C、D 都是错误恢复。答案 B。这类题的通用技巧:先记分类名,再记成员,分类名 3 个就够了(检测、恢复、预防)。再顺手记一个反例:事务、进程监视器是错误预防。

9.4 ATAM 与风险点题

题:评审发现"数据库主库是唯一写入点,一旦宕机,订单无法提交"。这在 ATAM 里最可能被归为哪一种?

拆解:这是一个对可用性不利的架构决策,属于风险点。若评审者进一步指出"增加从库数量可以改善读性能,但会拉长主从同步延迟并影响一致性",则"副本数量"是权衡点(同时影响性能、一致性和可用性)。如果说"副本数量决定了可用性水平",则是敏感点。三个词的区分,我的记忆办法是:敏感——"对一个属性敏感";权衡——"两头拉扯";风险——"这里可能出事"。

9.5 开发模型选择题

题干特征选排除理由
需求不清,需要快速给用户看界面和交互原型瀑布要求需求确定
大型军工/金融,风险高,每阶段评估风险螺旋增量不强调风险
需求稳定,文档严谨,阶段评审瀑布敏捷不以文档为中心
分批交付,先上线核心功能增量原型是抛弃或演化,不强调批次交付
迭代周期短,客户全程参与,每日站会敏捷(Scrum/XP)RUP 更重

9.6 测试用例设计题

题:输入为年龄,合法范围 18–60 岁(含)。用边界值分析法,至少应选取哪些测试值?

拆解:典型的边界值取法是上点、下点及其内外相邻点:17、18、19、59、60、61。如果是"三值法",则取 17、18、60、61 及一个中间值。考试里若给出的选项是 6 个值的组合,直接选包含这六个的那一项。等价类方面,有效等价类是 18–60,无效等价类是小于 18 与大于 60,另加"非数字"这类类型错误。

圈复杂度小题:一段流程图有 11 条边、9 个节点,则 V(G) = 11 − 9 + 2 = 4,需要 4 条独立路径。如果告诉你有 3 个判定节点,则 V(G) = 3 + 1 = 4,两种算法应该一致,你可以用来互相验算。

9.7 设计模式选择题

场景模式排除项与理由
文字编辑器需要撤销与重做命令 或 备忘录命令封装操作,备忘录保存状态;按选项二选一,若强调"保存对象内部状态快照"选备忘录
订单状态变化触发不同行为状态策略是客户端选择算法,状态由对象内部转换触发
给咖啡加牛奶、糖、奶泡,可任意叠加装饰器继承会导致类爆炸
一个类只允许存在一个实例单例享元是共享多个细粒度对象
屏蔽复杂子系统的调用细节,提供统一入口外观适配器是接口转换
树形结构,叶子与容器被同等对待组合装饰器是叠加职责
请求依次经过多个处理者,谁能处理谁处理责任链命令是把请求变成对象

9.8 耦合内聚判断

题:模块 A 直接修改模块 B 内部的局部变量,属于哪种耦合?多个模块通过全局变量交换数据,又属于哪种?

拆解:前者内容耦合(最差),后者公共耦合。一个小窍门:涉及"跳转进对方内部""改对方代码或数据"就是内容耦合;涉及"共享全局区"就是公共耦合;涉及"传一个开关让对方走不同分支"就是控制耦合。

10. 我给自己排的复习顺序(不是亲历经验,是整理后的建议)

  1. 第一遍(约两周):只读教材对应章节,配合本文的表格建立框架,不追细节。此时画一张自己的思维导图,比抄十页笔记有用。
  2. 第二遍(约两周):按知识点分类刷近几年综合知识真题,错题按"风格/质量属性/工程/模式/系统设计"归类,记进错题本,并在错题旁写上"我当时为什么选错"。
  3. 第三遍(考前两周):只翻速查表、口诀和错题本;整套模拟按 150 分钟计时,训练"关键词—知识点"的反射速度。
  4. 与案例、论文联动:架构风格、质量属性、ATAM、设计模式这几块也是案例分析的主战场,所以背的时候要顺便想"我在项目里怎么用",一份学习产出多科受益。

再强调一次可信度问题:上述节奏是我根据公开备考文章的共性整理的,各家写的备考周期从两个月到半年不等,并没有统一标准;你的基础、工作强度、目标批次都会影响,请自行调整。

参考资料

— 感谢读到这里 —发现错误,或想补充?告诉我 →
TURN KNOWLEDGE INTO SOMETHING REAL

有想法,也想把它做出来?

从技术方案到上线交付,聊聊你的下一个项目。

聊聊需求

一起聊聊

搜索文章

输入关键词,按标题和摘要即时筛选。

浏览分类文章归档

阅读设置

字号
行宽
专注模式

专注模式会隐藏页头与侧栏,只留正文。设置保存在当前浏览器。

稍后阅读

保存在当前浏览器,留给下一次安静阅读。

总浏览 -- 次 · 总访客 -- 人 · 今日浏览 -- 次 · 今日访客 -- 人