软考「系统架构设计师」的备考记录。原始资料是 9 篇分散的笔记,这里提炼成一篇:先讲复习方法,再挑案例分析和论文两个难点的要点,最后是各科知识的速查精选。
复习节奏
总共四周,按题型推进:
- 第一周:刷题,对整体有个认知,找出自己的薄弱点。
- 第二周:核心知识加强,同时给案例分析和论文写作打好理论基础。
- 第三周:集中解决案例分析。
- 第四周:集中解决论文。
教材用的是《系统架构设计师考试 32 小时通关》,重点是:第 7 小时(软件工程基础)、第 8 小时(数据库设计基础)、第 9/10 小时(架构设计基础、质量属性与架构评估)、第 11-13 小时(可靠性、架构演化维护、未来信息综合技术)、第四篇八大架构(15-22 小时)、第 26 小时(论文写作)。
刷题分两轮:第一轮把案例、论文会涉及的知识点重点看、掌握,抄写论文和案例题目;第二轮查漏补缺,提高选择题拿分率。
案例分析
题型:第一题必答 + 后面 4 选 2,共完成三道题。题目分四大类:系统工程类、系统架构基础知识类、八大架构类、数据库设计类。
系统分析建模(系统工程类常考)
结构化分析建模的特点:自顶向下、逐步分解、面向数据。三大模型:
- 功能模型:DFD 数据流图(基本元素:外部实体、加工、数据存储、数据流)
- 行为模型:STD 状态转换图
- 数据模型:E-R 实体联系图(实体间关系:一对一、一对多、多对多)
面向对象分析建模用 UML:静态图(类图、对象图)和动态图(用例图、顺序图、通信图、状态图、活动图)。顺序图强调消息交互的时间顺序;通信图(协作图)强调对象间的消息收发关系,即空间结构。
面向对象设计原则
单一职责、开放-封闭(对扩展开放、对修改封闭)、里氏替换(子类可替代父类)、依赖倒置(依赖抽象而非具体,对接口编程)、接口隔离(多个专门接口好过单一接口)、组合重用(优先组合而非继承)、迪米特原则(最少知识原则)。
23 种设计模式速记
- 创建型(5):工厂方法(实例化延迟到子类,方便扩展新类型);抽象工厂(生成一组相关对象的接口——工厂方法创建一个类,抽象工厂创建的是一组产品的组合,加一个"产品族"容易、加一个"产品"要动所有代码);单例(全局唯一实例);建造者(构建与表示分离,同样的构建过程创建不同表示);原型(初始化复杂的对象用 Clone 深拷贝,避免重复创建)。
- 结构型(7):适配器(让接口不兼容的类一起工作,是接口层面的适配);装饰器(动态给对象增加职责,如某项目里无人机按配置挂/卸 RTK 模块来获得精准定位能力);代理(控制访问,加额外逻辑);外观(简化接口);桥接(预先设计抽象层,实现和抽象分离——区别于适配器的事后适配);组合(整体-部分递归管理,复合对象和单个对象使用一致);享元(大量相似对象复用,省内存)。
- 行为型(11):策略、模板方法、观察者(一对多依赖)、迭代器、责任链(请求沿链传递,发送者和接收者解耦)、命令(请求封装为对象,支持队列、日志、撤销)、备忘录、状态、访问者、中介者(封装一系列对象的交互)、解释器。
架构风格与质量属性
架构风格五类:数据流风格;调用/返回风格(主程序/子程序、面向对象、层次结构、客户端/服务器);独立构件风格(进程通信、事件系统);虚拟机风格(解释器、基于规则的系统);仓库风格(数据库系统、超文本系统、黑板系统)。
质量属性评估常考:性能(响应能力,如"支持 1000 并发、响应小于 1s",战术上从资源需求、资源管理、资源仲裁入手)、可用性(正常运行时间比例)、安全性、可修改性(以较高性价比变更系统的能力)。注意区分敏感点和权衡点。
论文
论文本质:2500 字左右的文章,回答三个问题——背景、主体、理论联系实际。结构要有摘要、过渡、结尾。
字数框架:
- 摘要约 300 字(项目简介 200 字 + 扣主题 100 字)
- 背景 400-600 字,过渡 100-200 字
- 正文 1000-1500 字,总分结构:一段答理论,一段结合项目展开两到三个主题
- 收尾 300-500 字:运行效果、总结不足、提出解决思路
项目选择:中大型商业项目,金额 200 万以上、研发周期 8 个月以上为宜。背景段写清:项目启动原因、自己的岗位职责(系统架构设计师)、开发周期与规模、功能组成、技术方案。过渡段突出项目的独特性(比如保密要求导致资料不全、加大开发难度之类)。结尾别只写成功,要点出一个不足并说明如何纠偏。
备考时我准备了一份自己的项目模板(某省电网智能调度优化平台:历时 8 个月、团队 20 人,Lambda 架构 + 微服务,含实时监控、负荷预测、故障诊断、多源数据融合、可视化大屏五个模块),考前按这个骨架反复套不同主题练习。
知识点速查精选
软件工程
- 软件过程模型(= 生命周期模型 = 开发模型):瀑布、原型、螺旋、喷泉、增量、迭代、构件组装、V 模型、快速应用开发、敏捷、统一过程(UP)。
- 瀑布模型:结构化方法中最常用,六阶段(计划、需求分析、设计、编码、测试、运行维护);优点是阶段检查点清晰,缺点是文档量大、最后才看到成果、不适应需求变化、前期错误向后传递;适合需求明确的项目。
- 原型模型:适合需求不明确的场合,成败关键在于建模速度;分水平/垂直原型、抛弃型/演化型原型。
- 螺旋模型:快速原型 + 瀑布与演化模型结合,强调风险分析;步骤为目标设定、风险分析、开发与验证、评审。
- 喷泉模型:需求为动力、对象为驱动,自下而上,迭代无间隙。
- 增量模型:每个增量交付一个可用产品,第一个增量是核心产品。
- CMM 五级:初始级(杂乱无章)→ 可重复级(同类项目可成功)→ 已定义级(文档化标准化)→ 已管理级(量化度量)→ 优化级(持续改进)。CMMI 类似:初始、已管理、已定义、定量管理、优化。
- 需求工程五阶段:需求获取、需求分析、形成需求规格(SRS)、需求确认与验证、需求管理(变更控制、版本控制、需求跟踪;变更决策机构是 CCB 变更控制委员会;需求跟踪分正向/逆向,合称双向跟踪,都要维护需求跟踪矩阵)。
- 结构化设计遵循"高内聚、低耦合",概要设计用系统结构图(SC)。
- 基于构件的软件工程(CBSE):特征是可组装、可部署、文档化、独立、标准化;组装方式有顺序、层次、叠加三种;接口不兼容分参数不兼容、操作不兼容、操作不完备三种。
- 测试按阶段分:单元测试(程序员自测模块)、集成测试(验证模块集成)、系统测试(完整功能)、验收测试(确认满足用户需求)。
数据库
- 数据模型三要素:数据结构、数据操作、数据约束条件(实体完整性、参照完整性、用户定义完整性)。
- 三级模式两级映像:外模式(用户视图)、概念模式(全体数据逻辑结构)、内模式(物理存储)。概念模式/内模式映像保证物理独立性,外模式/概念模式映像保证逻辑独立性。
层次式架构
- 经典四层:表现层、中间层(业务层)、访问层(持久层)、数据层。分层的核心是关注点分离。
- 两个坑:一是污水池反模式(Architecture Sinkhole Anti-pattern)——请求简单穿过几层,每层几乎没业务逻辑;二是分层容易让应用变庞大。
- 表现层三模式:MVC(控制器接输入、模型管业务数据和逻辑、视图是界面);MVP(模型和视图完全分离,交互都在 Presenter,可脱离 UI 单测 Presenter);MVVM(View 和 Model 不直接通信,经 ViewModel)。
- 数据访问模式:在线访问、DAO、DTO、离线数据、ORM。
- 物联网层次架构:感知层、网络层、应用层。
SOA 与微服务
- SOA:组件模型,把功能单元(服务)通过中立定义的接口和契约联系起来,接口独立于硬件平台、操作系统和编程语言;特点是粗粒度、松耦合。
- 演进三阶段:单体架构 → SOA(ESB 企业服务总线)→ 微服务(服务网关)。SOA 的中心是 ESB;微服务去中心化、接口更通用化、倾向分布式部署。
- Web 服务三协议:UDDI(统一描述、发现和集成)、WSDL(描述 Web 服务做什么、如何访问、处于何处)、SOAP(基于 XML 的分布式信息交换协议)。微服务对外暴露 REST API:资源、表述、状态转移(应用状态在客户端、资源状态在服务端)、超链接。
- SOA 设计模式:服务注册表模式(服务注册、服务位置、服务绑定)、企业服务总线模式(整合遗留系统)、微服务模式。
- 实施注意:服务粒度控制、无状态服务设计、细致分析原有系统的集成需求。
大数据架构
- 传统数据库撑不住访问量的常用解法:异步处理队列、数据库水平分区、分片/重新分片、读写分离、分库分表。
- 大数据利用过程:采集、清洗、统计、挖掘。
- Lambda 架构三层:批处理层(存主数据集——原始、不可变、真实,周期性转储增量数据并批处理生成批视图);加速层(处理增量实时数据,生成实时视图);服务层(合并批视图和实时视图响应请求,可用 HBase/Cassandra + Hive 视图)。