系统架构设计师 · 详细复习手册(强化版)
系统架构设计师 · 详细复习手册(强化版)
针对理论与计算短板,含大量例题解析 | 软考高级 | 2025-2026 备考
目录
- 第一部分:操作系统核心理论与计算
- 第二部分:计算机网络与通信
- 第三部分:数据库系统
- 第四部分:软件工程与开发模型
- 第五部分:软件架构风格详解
- 第六部分:设计模式精讲
- 第七部分:质量属性与架构评估
- 第八部分:分布式与微服务
- 第九部分:嵌入式与系统集成
- 第十部分:安全性与密码学
- 第十一部分:算术题专题(含详解)
- 第十二部分:案例分析样例题
- 第十三部分:论文写作指南
- 第十四部分:考前冲刺策略
第一部分:操作系统核心理论与计算
1.1 进程与线程
进程的三种基本状态(必考)
时间片用完/被抢占
就绪态 ←——————————————— 执行态
↓ ↑ ↓
↑ |调度器分配CPU |
↑ ←————————————— |等待I/O/资源
| ↓
←————I/O完成———————— 阻塞态
关键转换:
| 转换 | 触发原因 |
|---|---|
| 就绪→执行 | 调度器分配CPU |
| 执行→就绪 | 时间片用完、被高优先级抢占、主动让出CPU(yield) |
| 执行→阻塞 | 等待I/O、申请资源不满足、等待信号量 |
| 阻塞→就绪 | I/O完成、资源到达、信号量释放 |
注意: 阻塞态不能直接转执行态,必须先到就绪态。
进程 vs 线程
| 项 | 进程 | 线程 |
|---|---|---|
| 资源 | 拥有独立资源 | 共享进程资源 |
| 调度 | 调度开销大 | 调度开销小 |
| 通信 | IPC(管道/消息/共享内存) | 共享变量直接通信 |
| 健壮性 | 一个进程崩溃不影响其他 | 一个线程崩溃可能拖垮整个进程 |
1.2 死锁
死锁的四个必要条件
- 互斥条件:资源一次只能被一个进程占用
- 请求与保持:占有资源的同时请求新资源
- 不可抢占:已分配资源不能被强制夺取
- 循环等待:进程间形成等待环路
死锁处理策略
| 策略 | 方法 | 特点 |
|---|---|---|
| 预防 | 破坏4个必要条件之一(互斥不能破坏) | 简单但限制大 |
| 避免 | 银行家算法 | 运行时判断 |
| 检测+解除 | 资源分配图检测 | 允许死锁发生 |
| 忽略 | 鸵鸟策略 | 假装看不到 |
死锁避免最少资源数公式(必考)
公式: 最少资源数 = R × (N-1) + 1
- R = 进程数
- N = 每个进程需要的最大资源数
例题: 系统有5个进程,每个进程需要3个同类资源,至少需要多少个资源才能保证不发生死锁?
- 解:5×(3-1)+1 = 11个
- 原理:每个进程都拿到N-1个不会死锁,再多1个就够某个进程完成
1.3 存储管理
页式存储位示图计算(高频)
位示图(Bitmap):每页对应1位,0表示空闲,1表示已分配
计算步骤:
- 统一单位
- 总页数 = 内存大小 ÷ 页大小
- 位数 = 总页数(每页1位)
- 字节数 = 位数 ÷ 8
例题1: 内存16GB,页大小4KB,位示图占多少?
总页数 = 16GB ÷ 4KB
= (16×1024×1024 KB) ÷ 4 KB
= 4,194,304 页
位示图字节数 = 4,194,304 ÷ 8 = 524,288 B
= 524,288 ÷ 1024 = 512 KB
答案:512 KB
例题2: 内存4GB,页大小8KB,位示图占多少KB?
总页数 = 4×1024×1024 KB ÷ 8 KB = 524,288 页
字节数 = 524,288 ÷ 8 = 65,536 B = 64 KB
答案:64 KB
页面置换算法
| 算法 | 原理 | 优缺点 |
|---|---|---|
| OPT | 置换将来最长时间不用的 | 理想算法,无法实现 |
| FIFO | 先进先出 | 简单,可能Belady异常 |
| LRU | 最近最久未使用 | 性能好,开销大 |
| LFU | 最近最少使用 | 反映访问频率 |
| Clock | 时钟算法(LRU近似) | 折衷方案 |
虚拟内存命中率计算
有效访问时间 EAT = h×T_cache + (1-h)×T_main
- h = 命中率,T = 访问时间
例题: Cache命中率90%,Cache访问10ns,主存100ns,平均访问时间?
- EAT = 0.9×10 + 0.1×100 = 9 + 10 = 19 ns
1.4 嵌入式实时系统
实时系统分类
- 硬实时:必须在截止时间内完成(导弹控制)
- 软实时:偶尔超时可接受(视频播放)
实时调度算法
| 算法 | 全称 | 特点 |
|---|---|---|
| RM | Rate Monotonic | 周期短的优先级高,静态优先级 |
| EDF | Earliest Deadline First | 截止时间近的优先,动态优先级 |
| LLF | Least Laxity First | 松弛时间最小优先 |
嵌入式OS分类(考过多次)
- 实时:VxWorks、QNX、μC/OS-II、RT-Linux
- 非实时:Android、iOS、WinCE、嵌入式Linux
第二部分:计算机网络与通信
2.1 OSI七层模型 vs TCP/IP四层
| OSI七层 | TCP/IP四层 | 协议示例 | 数据单位 |
|---|---|---|---|
| 应用层 | 应用层 | HTTP/FTP/SMTP/DNS/Telnet | 报文 |
| 表示层 | (合并) | SSL/TLS | - |
| 会话层 | (合并) | RPC | - |
| 传输层 | 传输层 | TCP/UDP | 段(TCP)/数据报(UDP) |
| 网络层 | 网际层 | IP/ICMP/ARP/RARP | 包 |
| 数据链路层 | 网络接口层 | PPP/Ethernet | 帧 |
| 物理层 | (合并) | RS-232 | 比特 |
2.2 TCP vs UDP
| 项 | TCP | UDP |
|---|---|---|
| 连接 | 面向连接(三次握手) | 无连接 |
| 可靠性 | 可靠(确认重传) | 不可靠 |
| 顺序 | 保证顺序 | 不保证 |
| 速度 | 慢 | 快 |
| 头部 | 20字节 | 8字节 |
| 应用 | HTTP/FTP/SMTP/SSH | DNS/SNMP/视频/游戏 |
TCP三次握手
客户端 服务器
| --- SYN ---→ |
| ←-- SYN+ACK -|
| --- ACK ---→ |
TCP四次挥手
客户端 服务器
| --- FIN ---→ |
| ←-- ACK -----|
| ←-- FIN -----|
| --- ACK ---→ |
2.3 IP地址与子网划分(计算重点)
IP地址分类
| 类 | 范围 | 默认掩码 | 网络号位/主机号位 |
|---|---|---|---|
| A | 1-126 | 255.0.0.0 | 8/24 |
| B | 128-191 | 255.255.0.0 | 16/16 |
| C | 192-223 | 255.255.255.0 | 24/8 |
| D | 224-239 | - | 组播 |
| E | 240-255 | - | 保留 |
子网划分计算
关键公式:
- 借n位 → 划分为 2^n 个子网
- 主机数 = 2^(主机位) - 2(减去网络地址和广播地址)
例题: 192.168.1.0/24 划分为4个子网,每个子网最多多少主机?
- 借2位(2²=4个子网),主机位剩6位
- 主机数 = 2^6 - 2 = 62台
- 子网掩码 = /26 = 255.255.255.192
例题: 一个C类地址需要支持30台主机,子网掩码应该是?
- 主机数 ≥ 30,需要主机位 = 5(2^5-2=30)
- 主机位5,网络位32-5=27
- 掩码 = /27 = 255.255.255.224
2.4 信道容量计算(必考)
奈奎斯特定理(无噪声)
C = 2 × B × log₂N
- C = 信道容量(bps)
- B = 带宽(Hz)
- N = 信号状态数
例题1: 带宽3000Hz,32种信号状态,最大传输速率?
- C = 2×3000×log₂32 = 2×3000×5 = 30,000 bps = 30 kbps
香农定理(有噪声)
C = B × log₂(1 + S/N)
- S/N 是线性值,dB转线性:S/N = 10^(dB/10)
例题2: 带宽4000Hz,信噪比30dB,最大传输速率?
- S/N = 10^(30/10) = 10³ = 1000
- C = 4000 × log₂(1001) ≈ 4000×10 = 40 kbps
例题3: 带宽3000Hz,信噪比20dB,最大传输速率?
- S/N = 10^(20/10) = 100
- C = 3000 × log₂(101) ≈ 3000 × log₂128 = 3000×7 ≈ 20 kbps
2.5 编码与调制
- 基带传输:直接传数字信号
- 调制传输:调幅(AM)/调频(FM)/调相(PM)
- PCM脉冲编码:采样→量化→编码
奈奎斯特采样定理: 采样频率 ≥ 2倍最高频率
第三部分:数据库系统
3.1 数据库三级模式
外模式(用户视图) - 多个
↕ 外模式/模式映射
模式(概念模式) - 1个
↕ 模式/内模式映射
内模式(存储模式) - 1个
3.2 关系完整性
| 类型 | 含义 | 示例 |
|---|---|---|
| 实体完整性 | 主键非空唯一 | 学号不能为空 |
| 参照完整性 | 外键引用合法 | 选课表的学号必须在学生表存在 |
| 用户定义完整性 | 业务规则约束 | 性别只能"男"或"女" |
3.3 范式(重点)
| 范式 | 定义 | 解决的问题 |
|---|---|---|
| 1NF | 属性不可再分 | 原子性 |
| 2NF | 1NF + 非主属性完全依赖主键 | 部分函数依赖 |
| 3NF | 2NF + 非主属性不传递依赖主键 | 传递函数依赖 |
| BCNF | 3NF + 主属性也不传递依赖 | 主属性间传递依赖 |
| 4NF | BCNF + 无非平凡多值依赖 | 多值依赖 |
例题: 关系R(学号, 课程号, 成绩, 教师, 教师电话)
- 主键(学号, 课程号)
- 教师电话依赖于教师,教师依赖于课程号 → 传递依赖
- 当前是2NF,分解后达到3NF
3.4 关系代数运算
| 运算 | 符号 | 含义 |
|---|---|---|
| 选择 | σ | 选行(满足条件的元组) |
| 投影 | π | 选列(取属性子集) |
| 连接 | ⋈ | 两表组合 |
| 自然连接 | ⋈ | 同名属性自动连接 |
| 笛卡尔积 | × | 所有组合 |
| 并 | ∪ | 两表元组合并 |
| 交 | ∩ | 两表共同元组 |
| 差 | - | 第一表去掉第二表元组 |
| 除 | ÷ | 求满足所有条件的元组 |
3.5 SQL连接类型
- 内连接(INNER JOIN):两表都满足条件
- 左外连接(LEFT JOIN):左表全保留
- 右外连接(RIGHT JOIN):右表全保留
- 全外连接(FULL JOIN):两表全保留
3.6 索引类型
| 类型 | 特点 |
|---|---|
| B树/B+树索引 | 范围查询好,最常用 |
| Hash索引 | 等值查询快,不支持范围 |
| 位图索引 | 适合低基数列 |
| 聚簇索引 | 数据按索引顺序存储,每表一个 |
| 非聚簇索引 | 数据与索引分离,可多个 |
3.7 事务ACID
| 特性 | 含义 |
|---|---|
| Atomicity 原子性 | 事务全部完成或全部不做 |
| Consistency 一致性 | 数据库从一个一致状态到另一个 |
| Isolation 隔离性 | 并发事务相互隔离 |
| Durability 持久性 | 提交后永久保存 |
3.8 隔离级别与并发问题
| 隔离级别 | 脏读 | 不可重复读 | 幻读 |
|---|---|---|---|
| 读未提交 | 可能 | 可能 | 可能 |
| 读已提交 | 不会 | 可能 | 可能 |
| 可重复读 | 不会 | 不会 | 可能 |
| 串行化 | 不会 | 不会 | 不会 |
3.9 分布式数据库CAP定理
三选二原则:
- Consistency 一致性
- Availability 可用性
- Partition tolerance 分区容错性
典型选择:
- CP:HBase、MongoDB(保证一致性,分区时不可用)
- AP:Cassandra、CouchDB(高可用,最终一致)
- CA:单机数据库(不分布式)
3.10 BASE理论
- Basically Available 基本可用
- Soft state 软状态
- Eventually consistent 最终一致性
是CAP中AP的延伸,牺牲强一致性换取可用性。
3.11 数据仓库
- OLTP(联机事务处理):日常交易,强调ACID
- OLAP(联机分析处理):决策分析,强调多维查询
数据仓库特点:
- 面向主题、集成的、相对稳定的、反映历史变化
ETL流程: Extract抽取 → Transform转换 → Load加载
第四部分:软件工程与开发模型
4.1 软件生命周期
6个阶段: 计划 → 需求分析 → 设计 → 编码 → 测试 → 运行维护
4.2 开发模型对比
| 模型 | 特点 | 适用场景 |
|---|---|---|
| 瀑布模型 | 线性顺序、文档驱动 | 需求明确稳定 |
| 原型模型 | 快速构建原型迭代 | 需求不明确 |
| 增量模型 | 分批交付 | 核心功能优先 |
| 螺旋模型 | 风险驱动+迭代 | 大型复杂高风险项目 |
| 敏捷开发 | 拥抱变化、快速迭代 | 需求频繁变化 |
| RAD快速应用开发 | 短周期(60-90天) | 适合需求明确的中小项目 |
| RUP统一过程 | 用例驱动、迭代 | 大中型项目 |
| V模型 | 测试驱动 | 强调测试 |
| 喷泉模型 | 面向对象、迭代无缝 | 面向对象开发 |
4.3 RUP四阶段
| 阶段 | 任务 | 里程碑 |
|---|---|---|
| 初始 | 定义范围、愿景 | 生命周期目标 |
| 细化 | 设计架构、制定计划 | 生命周期架构 |
| 构造 | 编码实现 | 初始运行能力 |
| 移交 | 部署交付 | 产品发布 |
九大工作流: 业务建模、需求、分析与设计、实现、测试、部署、配置与变更管理、项目管理、环境
4.4 CMMI 5级成熟度
| 级别 | 名称 | 关键特征 |
|---|---|---|
| 1 | 初始级 | 混乱、无序、靠英雄主义 |
| 2 | 已管理级 | 项目级过程管理、可重复 |
| 3 | 已定义级 | 组织级标准过程 |
| 4 | 量化管理级 | 用数据量化管理质量 |
| 5 | 优化级 | 持续过程改进 |
4.5 软件测试
黑盒测试方法
- 等价类划分:把输入分成等价类
- 边界值分析:测试边界(最常出bug)
- 错误推测:经验推测错误位置
- 因果图:输入条件与输出结果关系
- 正交实验设计:减少测试用例
白盒测试覆盖(强度递增)
- 语句覆盖(弱)
- 判定覆盖
- 条件覆盖
- 判定/条件覆盖
- 条件组合覆盖
- 路径覆盖(强)
测试阶段
- 单元测试:测试单个模块(白盒为主)
- 集成测试:测试模块组合
- 系统测试:测试完整系统
- 验收测试:用户验收(α测试、β测试)
- 回归测试:修改后验证
4.6 内聚与耦合(必考)
内聚类型(高→低)
口诀:功顺通过时逻偶
| 等级 | 类型 | 说明 |
|---|---|---|
| 7 | 功能内聚 | 完成单一明确功能 |
| 6 | 顺序内聚 | 前一个输出是后一个输入 |
| 5 | 通信内聚 | 操作同一数据集 |
| 4 | 过程内聚 | 按特定次序执行 |
| 3 | 时间内聚 | 同时间段执行(初始化模块) |
| 2 | 逻辑内聚 | 逻辑相似的操作分组 |
| 1 | 偶然内聚 | 关系松散偶然组合 |
耦合类型(低→高)
口诀:非数标控外公内
| 等级 | 类型 | 说明 |
|---|---|---|
| 1 | 非直接耦合 | 没有直接联系 |
| 2 | 数据耦合 | 传递简单数据参数 |
| 3 | 标记耦合 | 传递数据结构 |
| 4 | 控制耦合 | 传递控制信号 |
| 5 | 外部耦合 | 共享外部数据格式 |
| 6 | 公共耦合 | 共享全局数据 |
| 7 | 内容耦合 | 直接访问内部数据(最差) |
4.7 净室软件工程
理论基础: 函数理论 + 抽样理论
核心思想: 避免缺陷而非修复缺陷
特点: 形式化方法、统计过程控制、增量开发
第五部分:软件架构风格详解
5.1 数据流风格
管道-过滤器
[输入] → [过滤器1] → 管道 → [过滤器2] → 管道 → [过滤器3] → [输出]
特点:
- 过滤器之间无状态
- 数据流单向流动
- 过滤器独立、可替换、可重用
优点:
- 松耦合
- 支持并行处理
- 易于添加新过滤器
缺点:
- 不适合交互式应用
- 数据格式转换可能影响效率
- 错误处理困难
典型应用: 编译器(词法→语法→语义→优化→代码生成)、Unix Shell管道、ETL
批处理
- 与管道-过滤器类似,但是数据完整传递(不是流式)
5.2 调用/返回风格
主程序-子程序
- 单线程控制
- 层次分解
面向对象
- 数据封装、继承、多态
- 对象间通过消息传递
分层架构
表示层 ← 用户接口
业务层 ← 业务逻辑
持久层 ← 数据访问
数据层 ← 数据库
优点:
- 关注点分离
- 易维护和扩展
- 标准化接口
缺点:
- 性能损耗(穿透多层)
- 不是所有系统都能完美分层
- 跨层依赖难处理
典型: OSI七层、TCP/IP四层、MVC、MVP、MVVM
5.3 独立构件风格
事件驱动(隐式调用)
- 构件不直接调用,而是发布事件
- 其他构件订阅感兴趣的事件
优点:
- 极度松耦合
- 易于添加新订阅者
缺点:
- 难以保证执行顺序
- 难调试
- 数据交换复杂
典型: GUI框架(按钮点击事件)、消息队列、发布订阅、Reactor模式
进程通信
- 独立进程通过消息传递通信
- 比事件驱动更显式
5.4 虚拟机风格
解释器
核心: 输入程序 → 解释器 → 输出结果
优点:
- 灵活性高
- 可动态改变行为
- 支持热部署
缺点:
- 性能较差
典型: Java JVM、Python解释器、正则表达式引擎、SQL引擎
基于规则的系统
- 规则库 + 推理引擎 + 工作内存
- 用于专家系统、AI
5.5 仓库风格
数据库系统
- 中央数据存储 + 独立的事务
- 数据一致性由数据库保证
黑板系统
知识源1 知识源2 知识源3
↓ ↓ ↓
┌─────────────────────┐
│ 黑板(共享数据) │
└─────────────────────┘
↑
控制器
特点:
- 知识源独立工作
- 通过黑板间接通信
- 控制器协调
典型应用: 语音识别、AI推理、协同设计
5.6 C/S 与 B/S 架构
| 项 | C/S | B/S |
|---|---|---|
| 部署 | 客户端需安装 | 浏览器即可 |
| 维护 | 升级要更新所有客户端 | 服务端升级即可 |
| 性能 | 高 | 受网络限制 |
| 安全 | 较好 | 较弱 |
| 跨平台 | 差 | 好 |
三层C/S架构
表示层(客户端) → 业务层(应用服务器) → 数据层(数据库服务器)
5.7 SOA面向服务架构
核心特征:
- 服务粒度粗
- 服务之间松耦合
- 通过ESB(企业服务总线)通信
- 标准化接口(WSDL/SOAP/REST)
关键技术:
- WSDL:服务描述
- SOAP:服务通信协议
- UDDI:服务注册发现
- ESB:服务总线
- BPEL:业务流程编排
5.8 微服务架构
与SOA对比:
| 项 | SOA | 微服务 |
|---|---|---|
| 服务粒度 | 粗 | 细 |
| 通信 | 重量级ESB | 轻量级HTTP/REST |
| 数据 | 共享数据库 | 每服务独立数据库 |
| 部署 | 集中 | 独立部署 |
详见第八部分。
第六部分:设计模式精讲
6.1 设计原则(SOLID)
| 原则 | 含义 |
|---|---|
| SRP 单一职责 | 一个类只负责一件事 |
| OCP 开闭原则 | 对扩展开放、对修改关闭 |
| LSP 里氏替换 | 子类可以替换父类 |
| ISP 接口隔离 | 多个专一接口比一个总接口好 |
| DIP 依赖倒置 | 依赖抽象而非具体实现 |
其他原则:
- 迪米特原则(最少知识):模块只与朋友通信
- 合成复用原则:优先使用组合而非继承
6.2 创建型模式(5个)
工厂方法
- 意图:定义创建对象接口,子类决定实例化哪个类
- 场景:根据条件创建不同对象
- 示例:日志工厂创建文件日志/数据库日志
抽象工厂
- 意图:创建一系列相关或相互依赖的对象
- 场景:UI主题(按钮+输入框+对话框成套出现)
- 关键词:产品族
单例
- 意图:保证一个类仅有一个实例
- 场景:配置管理、连接池、日志
- 实现:私有构造函数 + 静态实例 + getInstance方法
建造者
- 意图:分离复杂对象的构建与表示
- 场景:构建复杂对象(如StringBuilder、SQL查询构造器)
原型
- 意图:通过克隆已有对象创建新对象
- 场景:对象创建成本高、需要副本
6.3 结构型模式(7个)
适配器
- 意图:接口转换,让不兼容的接口能合作
- 场景:旧系统集成、第三方库适配
桥接
- 意图:将抽象与实现分离,独立变化
- 场景:跨平台开发(抽象=形状,实现=渲染方式)
组合
- 意图:表示部分-整体的层次结构
- 场景:树形结构(文件系统、组织架构)
装饰器
- 意图:动态添加职责
- 场景:Java IO流、给对象增加额外功能不修改原类
外观
- 意图:提供统一简化的接口
- 场景:复杂子系统的总入口(如电源开关控制整套设备)
享元
- 意图:共享细粒度对象
- 场景:String常量池、连接池、对象池
代理
- 意图:控制对对象的访问
- 场景:远程代理(RPC)、虚拟代理(懒加载)、保护代理(权限)
6.4 行为型模式(11个)
观察者★
- 意图:一对多依赖,对象状态变化通知所有依赖者
- 场景:事件驱动、MVC、发布订阅
策略★
- 意图:定义算法族,可互相替换
- 场景:支付方式选择、排序算法选择
模板方法★
- 意图:定义算法骨架,子类实现具体步骤
- 场景:流程固定但细节不同(如游戏AI的总流程)
状态★
- 意图:状态改变时行为改变
- 场景:订单状态机、TCP连接状态
命令★
- 意图:将请求封装为对象
- 场景:撤销/重做、菜单命令、事务
责任链★
- 意图:请求沿着链传递,直到被处理
- 场景:审批流程、日志级别处理、Servlet过滤器
迭代器
- 意图:顺序访问聚合对象元素
- 场景:集合的遍历
中介者
- 意图:用中介对象封装一系列对象的交互
- 场景:聊天室、机场塔台
备忘录
- 意图:保存对象状态以便恢复
- 场景:编辑器Undo、游戏存档
解释器
- 意图:定义语言文法,解释语句
- 场景:表达式解析、规则引擎
访问者
- 意图:在不修改对象结构的情况下定义新操作
- 场景:编译器AST处理、报表生成
6.5 设计模式选择速查
根据需求选择:
- 想灵活创建对象?→ 工厂/抽象工厂/建造者
- 想全局唯一?→ 单例
- 想兼容老接口?→ 适配器
- 想简化复杂调用?→ 外观
- 想懒加载/权限控制?→ 代理
- 想动态添加功能?→ 装饰器
- 想算法可替换?→ 策略
- 想状态机?→ 状态
- 想发布订阅?→ 观察者
- 想撤销重做?→ 命令/备忘录
- 想流程定制?→ 模板方法/责任链
第七部分:质量属性与架构评估
7.1 软件质量属性
六大核心质量属性
| 属性 | 含义 | 战术 |
|---|---|---|
| 可用性 | 系统正常运行时间比 | 故障检测、冗余、自动恢复 |
| 可修改性 | 变更成本和容易程度 | 抽象、信息隐藏、接口设计 |
| 性能 | 响应时间、吞吐量 | 缓存、并发、资源调度 |
| 安全性 | 抵御未授权访问 | 认证、授权、加密、审计 |
| 可测试性 | 缺陷发现的难易程度 | 接口隔离、依赖注入、可观测 |
| 易用性 | 用户使用的容易程度 | 学习曲线、操作效率、满意度 |
7.2 质量属性场景六要素(必考)
┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐
│刺激源│ → │ 刺激 │ → │ 环境 │ → │ 制品 │ → │ 响应 │ → │ 度量 │
└──────┘ └──────┘ └──────┘ └──────┘ └──────┘ └──────┘
| 要素 | 含义 |
|---|---|
| 刺激源 | 谁/什么产生刺激(用户、攻击者、系统) |
| 刺激 | 到达系统的事件(请求、攻击、故障) |
| 环境 | 刺激发生时系统的状态(正常、过载、降级) |
| 制品 | 被影响的部分(整个系统/某个组件/数据) |
| 响应 | 系统采取的行动(处理、拒绝、报警) |
| 响应度量 | 如何度量响应(时间、次数、百分比) |
各属性的响应度量
| 属性 | 度量方式 |
|---|---|
| 可用性 | 故障间隔时间、修复时间、可用时间百分比 |
| 性能 | 响应时间、吞吐量、延迟 |
| 安全性 | 抵御攻击的时间、检测攻击的时间 |
| 可修改性 | 修改成本、修改时间、影响范围 |
| 可测试性 | 测试覆盖率、发现缺陷的概率 |
| 易用性 | 学习时间、任务完成时间、满意度 |
7.3 可用性具体指标
| 可用性 | 年停机时间 | 月停机时间 |
|---|---|---|
| 99% (2个9) | 87.6小时 | 7.2小时 |
| 99.9% (3个9) | 8.76小时 | 43.2分钟 |
| 99.99% (4个9) | 52.6分钟 | 4.32分钟 |
| 99.999% (5个9) | 5.26分钟 | 26秒 |
7.4 ATAM架构权衡分析法(必考)
四个核心概念
| 概念 | 定义 |
|---|---|
| 敏感点 | 影响某一质量属性的架构决策 |
| 权衡点 | 影响多个质量属性的决策(一好一坏) |
| 风险点 | 可能导致问题的决策 |
| 非风险点 | 经分析确认安全的决策 |
ATAM九步流程
- 表述ATAM
- 表述商业动机
- 表述架构
- 识别架构方法
- 生成质量属性效用树
- 分析架构方法
- 集体讨论场景并确定优先级
- 分析架构方法(深入)
- 表述结果
质量属性效用树
效用
├─ 性能
│ ├─ 响应时间 < 2s(高,高)
│ └─ 吞吐量 > 1000 TPS(高,中)
├─ 可用性
│ ├─ 99.9%可用性(高,高)
│ └─ 故障恢复 < 5min(中,高)
└─ 安全性
└─ 防SQL注入(高,中)
括号内是(重要性,难度)
7.5 SAAM软件架构分析方法
主要评估:可修改性
步骤: 开发场景 → 描述架构 → 场景分类 → 单个场景评估 → 场景交互评估 → 总体评估
7.6 CBAM成本效益分析法
结合ATAM,加入成本和收益分析,进行ROI评估
第八部分:分布式与微服务
8.1 微服务核心特征
- 服务独立:每个服务可独立开发、部署、扩展
- 业务能力划分:按业务能力而非技术能力划分
- 去中心化治理:每个服务团队自治
- 基础设施自动化:CI/CD、容器化
- 失败容忍:熔断、降级、重试
8.2 服务拆分原则
- 单一职责原则(SRP):每个服务只做一件事
- 高内聚低耦合:服务内部紧密、服务间松散
- 数据自治:每个服务有自己的数据库
- API版本管理:兼容旧版本
8.3 微服务通信
同步通信
- REST:基于HTTP,简单通用
- gRPC:基于HTTP/2 + Protobuf,性能高
- GraphQL:灵活查询
异步通信
- 消息队列:RabbitMQ、Kafka、RocketMQ
- 事件驱动:发布订阅模式
8.4 服务治理(必考)
断路器模式(Circuit Breaker)
┌─────────┐ 失败次数达阈值 ┌─────────┐
│ 关闭 │ ───────────────→ │ 打开 │
│ Closed │ │ Open │
└─────────┘ └─────────┘
↑ │
│ 超时后 │
成功 ↓
│ ┌─────────┐
└──────────────────────── │ 半开 │
│Half-Open│
└─────────┘
│
失败 │
↓
重新打开
三种状态:
- 关闭(Closed):正常工作,记录失败次数
- 打开(Open):直接拒绝请求,等待超时
- 半开(Half-Open):允许少量请求测试,成功则关闭
熔断、降级、限流区别
| 概念 | 含义 | 触发条件 |
|---|---|---|
| 熔断 | 保护下游 | 下游故障 |
| 降级 | 保护核心 | 资源不足/异常 |
| 限流 | 保护自己 | 请求量过大 |
限流算法
| 算法 | 原理 | 特点 |
|---|---|---|
| 计数器 | 时间窗口内计数 | 简单,临界问题 |
| 滑动窗口 | 细分时间窗口 | 解决临界问题 |
| 漏桶 | 固定速率流出 | 平滑流量 |
| 令牌桶 | 固定速率添加令牌 | 允许突发流量 |
8.5 微服务关键组件
| 组件 | 作用 | 主流方案 |
|---|---|---|
| 服务注册发现 | 服务地址管理 | Eureka、Consul、Nacos、Zookeeper |
| 配置中心 | 集中配置管理 | Spring Cloud Config、Apollo、Nacos |
| 网关 | 统一入口 | Zuul、Spring Cloud Gateway、Kong |
| 负载均衡 | 请求分发 | Ribbon、Nginx、F5 |
| 熔断 | 故障隔离 | Hystrix、Sentinel、Resilience4j |
| 链路追踪 | 调用链跟踪 | Zipkin、Jaeger、SkyWalking |
| 日志聚合 | 集中日志 | ELK、EFK、Loki |
| 监控 | 系统监控 | Prometheus、Grafana |
8.6 分布式事务
2PC两阶段提交
- 准备阶段:协调者询问,参与者表态
- 提交阶段:根据投票结果统一提交或回滚
问题: 同步阻塞、单点故障、数据不一致
3PC三阶段提交
增加CanCommit阶段,超时机制
TCC(Try-Confirm-Cancel)
- Try:尝试预留资源
- Confirm:确认执行
- Cancel:取消并释放资源
Saga
长事务拆分成多个短事务,失败时执行补偿操作
最终一致性
通过消息队列+幂等性实现
8.7 一致性算法
| 算法 | 用途 | 特点 |
|---|---|---|
| Paxos | 分布式一致性 | 经典,难懂 |
| Raft | 分布式一致性 | 易理解,实用 |
| ZAB | Zookeeper协议 | 类Paxos |
| Gossip | 最终一致性 | 去中心化 |
8.8 容器与编排
| 技术 | 作用 |
|---|---|
| Docker | 容器化打包 |
| Kubernetes | 容器编排 |
| Istio | 服务网格 |
| Helm | K8s包管理 |
8.9 云计算服务模式
| 模式 | 全称 | 提供 | 例子 |
|---|---|---|---|
| IaaS | 基础设施即服务 | 虚拟机、存储、网络 | AWS EC2、阿里云ECS |
| PaaS | 平台即服务 | 运行环境、数据库 | Heroku、阿里云RDS |
| SaaS | 软件即服务 | 完整应用 | 钉钉、Office 365 |
| FaaS | 函数即服务 | 函数运行时 | AWS Lambda、阿里函数计算 |
第九部分:嵌入式与系统集成
9.1 嵌入式系统特点
- 专用性:为特定应用定制
- 可裁剪:根据需求选择组件
- 实时性:及时响应
- 可靠性:长时间稳定运行
- 低功耗:能耗优化
9.2 嵌入式硬件
- 嵌入式微处理器(MPU):高性能(ARM Cortex-A)
- 嵌入式微控制器(MCU):低功耗(51单片机、STM32)
- 嵌入式DSP:数字信号处理
- 嵌入式SoC:片上系统集成
9.3 嵌入式OS分类(考过)
- 实时:VxWorks、QNX、μC/OS、RT-Linux、FreeRTOS
- 非实时:Android、iOS、WinCE、嵌入式Linux
9.4 工作温度等级(考过)
| 等级 | 温度范围 |
|---|---|
| 民用级 | 0~70℃ |
| 工业级 | -40~85℃ |
| 军用级 | -55~150℃ |
9.5 系统集成
集成方式
| 方式 | 特点 |
|---|---|
| 表示集成 | UI层集成(门户) |
| 数据集成 | 共享数据库或数据交换 |
| 控制集成 | 通过API调用 |
| 业务流程集成 | BPM工作流 |
中间件分类
- 数据库中间件:JDBC、ODBC
- 远程过程调用:RPC、gRPC
- 面向消息:MQ、Kafka
- 对象请求代理:CORBA
- 事务处理:Tuxedo
第十部分:安全性与密码学
10.1 安全四大特性
| 特性 | 含义 | 防什么 |
|---|---|---|
| 机密性 | 不泄露给未授权 | 防窃听 |
| 完整性 | 不被篡改 | 防篡改 |
| 不可否认性 | 不能否认操作 | 防抵赖 |
| 可控性 | 控制信息传播 | 防扩散 |
10.2 加密体系
对称加密
| 算法 | 密钥长度 | 特点 |
|---|---|---|
| DES | 56位 | 已不安全 |
| 3DES | 168位 | DES加强 |
| AES | 128/192/256位 | 当前主流 |
| IDEA | 128位 | PGP使用 |
非对称加密
| 算法 | 特点 |
|---|---|
| RSA | 基于大数分解,最常用 |
| ECC | 椭圆曲线,密钥短 |
| DH | 密钥交换 |
| DSA | 数字签名 |
散列算法
| 算法 | 长度 | 安全性 |
|---|---|---|
| MD5 | 128位 | 已破解 |
| SHA-1 | 160位 | 已破解 |
| SHA-256 | 256位 | 安全 |
| SHA-3 | 可变 | 最新 |
10.3 数字签名
过程:
- 发送方用私钥加密消息摘要 → 数字签名
- 接收方用公钥解密签名 → 摘要
- 接收方计算消息摘要,对比验证
保证: 完整性 + 不可否认性
10.4 数字证书
- 由CA颁发,包含公钥和身份信息
- X.509标准
PKI公钥基础设施组件:
- CA:证书颁发机构
- RA:注册机构
- CRL:证书撤销列表
- OCSP:在线证书状态协议
10.5 安全协议层次
| 层次 | 协议 |
|---|---|
| 应用层 | PGP(邮件)、S/MIME、HTTPS |
| 传输层 | SSL/TLS |
| 网络层 | IPSec |
| 数据链路层 | PPTP、L2TP |
10.6 网络攻击类型
| 攻击 | 描述 | 防御 |
|---|---|---|
| SQL注入 | 在SQL中注入恶意代码 | 参数化查询 |
| XSS | 跨站脚本 | 输入过滤、CSP |
| CSRF | 跨站请求伪造 | Token、Referer校验 |
| DDoS | 分布式拒绝服务 | 流量清洗、CDN |
| 中间人 | 截获双方通信 | TLS加密 |
| 重放 | 重发已捕获的消息 | 时间戳、Nonce |
10.7 访问控制模型
| 模型 | 全称 | 特点 |
|---|---|---|
| DAC | 自主访问控制 | 资源所有者决定权限 |
| MAC | 强制访问控制 | 系统决定权限(军方) |
| RBAC | 基于角色 | 主流方案 |
| ABAC | 基于属性 | 灵活,复杂 |
10.8 安全等级
国家信息安全等级保护2.0:
- 一级:自主保护
- 二级:指导保护
- 三级:监督保护(一般业务系统)
- 四级:强制保护(重要系统)
- 五级:专控保护(涉密)
第十一部分:算术题专题(含详解)
11.1 操作系统计算
例题1:位示图
题: 系统采用页式存储管理,内存4GB,页面大小4KB,位示图占多少?
解:
1. 总页数 = 4GB ÷ 4KB = 4×1024×1024÷4 = 1,048,576 页
2. 位数 = 1,048,576 位
3. 字节数 = 1,048,576 ÷ 8 = 131,072 B = 128 KB
答:128KB
例题2:死锁避免
题: 系统中有6个进程,每个进程需要4个R类资源,最少多少个R资源能避免死锁?
解:R×(N-1)+1 = 6×(4-1)+1 = 19
答:19个
例题3:页面置换LRU
题: 内存3个页框,访问序列:1,2,3,4,1,2,5,1,2,3,4,5,使用LRU算法,缺页几次?
解:
访问1:[1] 缺页 ✓
访问2:[1,2] 缺页 ✓
访问3:[1,2,3] 缺页 ✓
访问4:[2,3,4] 缺页(淘汰1)✓
访问1:[3,4,1] 缺页(淘汰2)✓
访问2:[4,1,2] 缺页(淘汰3)✓
访问5:[1,2,5] 缺页(淘汰4)✓
访问1:[2,5,1] 命中
访问2:[5,1,2] 命中
访问3:[1,2,3] 缺页(淘汰5)✓
访问4:[2,3,4] 缺页(淘汰1)✓
访问5:[3,4,5] 缺页(淘汰2)✓
共10次缺页
答:10次
11.2 网络计算
例题4:奈奎斯特公式
题: 信道带宽4kHz,使用4种信号状态,最大数据传输速率?
解:C = 2B·log₂N = 2×4000×log₂4 = 2×4000×2 = 16,000 bps = 16 kbps
答:16 kbps
例题5:香农公式
题: 信道带宽3kHz,信噪比30dB,最大数据传输速率?
解:
S/N = 10^(30/10) = 1000
C = B·log₂(1+S/N) = 3000×log₂1001 ≈ 3000×9.97 ≈ 30,000 bps
答:约30 kbps
例题6:子网划分
题: 192.168.10.0/24需要划分为6个子网,子网掩码?每个子网最多主机数?
解:
1. 6个子网,需要借3位(2³=8>6)
2. 子网掩码 = /27 = 255.255.255.224
3. 主机位 = 32-27 = 5
4. 每子网最多主机 = 2⁵-2 = 30
答:掩码255.255.255.224,每子网30台主机
例题7:传输时延
题: 1MB文件通过100Mbps链路传输,时延多少?
解:
1MB = 8×1024×1024 = 8,388,608 bit
传输时间 = 数据量÷带宽 = 8,388,608÷(100×10⁶) ≈ 0.084秒
答:约84ms
11.3 可靠性计算
例题8:串联系统可靠性
题: 三个组件串联,可靠性分别0.9、0.8、0.95,系统可靠性?
解:R = 0.9×0.8×0.95 = 0.684
答:0.684
例题9:并联系统可靠性
题: 两个组件并联,可靠性都是0.8,系统可靠性?
解:R = 1-(1-0.8)(1-0.8) = 1-0.04 = 0.96
答:0.96
例题10:混合系统可靠性
题: A、B并联后再与C串联,A=B=0.9,C=0.95,系统可靠性?
解:
并联部分:R_AB = 1-(1-0.9)(1-0.9) = 0.99
总系统:R = R_AB × R_C = 0.99×0.95 = 0.9405
答:0.9405
例题11:MTTF与MTBF
题: 系统MTBF=1000小时,MTTR=2小时,可用性?
解:可用性 = MTBF/(MTBF+MTTR) = 1000/1002 = 0.998 = 99.8%
答:99.8%
11.4 关键路径计算
例题12:项目工期
题: 项目网络图如下,求关键路径和工期。
活动 | 前驱 | 工期
A | - | 3
B | - | 5
C | A | 4
D | B | 2
E | A,B | 3
F | C,D | 6
G | E | 4
解:
路径1:A→C→F = 3+4+6 = 13
路径2:B→D→F = 5+2+6 = 13
路径3:A→E→G = 3+3+4 = 10
路径4:B→E→G = 5+3+4 = 12
关键路径:A→C→F 或 B→D→F(都是13)
项目工期:13天
11.5 海明码计算
海明码冗余位公式
2^k ≥ n+k+1
- n = 数据位
- k = 冗余位
例题13:海明码
题: 8位数据需要多少位海明码冗余位?
解:2^k ≥ 8+k+1
k=3:2³=8 < 12 ✗
k=4:2⁴=16 ≥ 13 ✓
答:4位冗余位
11.6 哈夫曼编码
例题14:哈夫曼编码长度
题: 字符A、B、C、D出现频率分别为4、2、1、1,哈夫曼编码总长度?
解:
1. 构造哈夫曼树
合并最小的:C(1)+D(1)=CD(2)
再合并:B(2)+CD(2)=BCD(4)
最后:A(4)+BCD(4)=Root(8)
2. 编码:A=0, B=10, C=110, D=111
3. 总长度 = 4×1 + 2×2 + 1×3 + 1×3 = 14
平均码长 = 14/8 = 1.75
答:总长度14,平均1.75
11.7 项目管理EVM
例题15:挣值管理
题: 项目计划100万,预计10个月完成。第6个月时,已完成预期的40%,已花费50万。求各指标。
已知:BAC=100万,时间过半周期=60%
解:
PV = 100×60% = 60万(计划价值)
EV = 100×40% = 40万(挣值)
AC = 50万(实际成本)
CV = EV-AC = 40-50 = -10万(成本超支)
SV = EV-PV = 40-60 = -20万(进度滞后)
CPI = EV/AC = 40/50 = 0.8(成本绩效,<1差)
SPI = EV/PV = 40/60 = 0.67(进度绩效,<1差)
EAC = BAC/CPI = 100/0.8 = 125万(预计完工成本)
答:项目超支且滞后,预计要花125万
11.8 数据库计算
例题16:B+树高度
题: 一个数据块4KB,每条索引项16B,叶节点指针10B(每条记录),求100万记录的B+树高度。
解:
非叶节点扇出 = 4096/16 = 256
叶节点扇出 = 4096/10 ≈ 410
H=1:可存410条
H=2:可存256×410=104,960条
H=3:可存256²×410=26,869,760条 > 1,000,000
答:高度3
第十二部分:案例分析样例题
样例1:架构风格选择
题目: 某企业要开发一个新闻聚合系统,需要从多个数据源采集新闻、清洗去重、分类、推送给用户。请回答:
- 适合采用什么架构风格?
- 该架构风格的核心组件是什么?
- 优缺点分别是什么?
参考答案:
- 管道-过滤器风格
- 核心组件:
- 过滤器(Filter):执行数据处理(采集、清洗、去重、分类)
- 管道(Pipe):连接过滤器,传输数据
- 优缺点:
- 优点:松耦合,过滤器可独立开发替换;支持并行处理;新增数据源容易
- 缺点:批处理效率高但不适合实时交互;过滤器之间数据格式转换有开销
样例2:质量属性场景
题目: 描述以下需求的质量属性场景:
“系统在被攻击时,应能在30秒内检测到并采取措施”
参考答案:
| 要素 | 内容 |
|---|---|
| 刺激源 | 攻击者(恶意外部用户) |
| 刺激 | DDoS攻击/SQL注入等 |
| 环境 | 系统正常运行 |
| 制品 | 整个系统/特定服务 |
| 响应 | 检测攻击并触发防御措施(封IP、限流、报警) |
| 响应度量 | 30秒内检测,措施在60秒内生效 |
属于安全性质量属性。
样例3:ATAM架构评估
题目: 某系统采用主备数据库设计:
- 主库写,备库读
- 主备同步使用异步复制
请识别敏感点、权衡点、风险点。
参考答案:
- 敏感点: “主备同步使用异步复制”——影响一致性和性能
- 权衡点: 同上决策——异步复制提升性能(写不等待),但牺牲一致性(主备数据短暂不一致)
- 风险点: 主库宕机时未同步的数据丢失;读备库可能读到旧数据
- 缓解措施: 增加半同步复制;关键业务读主库
样例4:微服务设计
题目: 一个电商系统要做微服务改造,原有功能:用户管理、商品管理、订单管理、支付、物流、营销。请回答:
- 如何拆分微服务?
- 服务间通信怎么设计?
- 数据一致性如何保证?
参考答案:
-
服务拆分(按业务能力):
- 用户服务、商品服务、订单服务、支付服务、物流服务、营销服务
- 每个服务独立数据库
-
服务间通信:
- 同步:订单查商品库存(REST或gRPC)
- 异步:下单后发消息给物流和营销(Kafka/RabbitMQ)
- 网关:统一入口,路由、鉴权、限流
-
数据一致性:
- 订单+库存+支付涉及分布式事务
- 方案:Saga模式
- 创建订单 → 扣库存 → 支付 → 通知物流
- 失败时执行补偿(取消订单、还库存、退款)
- 最终一致性:通过MQ+幂等性保证
样例5:数据库设计
题目: 设计一个图书馆借阅系统,包含读者、图书、借阅记录。请:
- 设计E-R图(描述实体和关系)
- 转换为关系模式
- 说明达到第几范式
参考答案:
-
E-R图描述:
- 实体:读者(读者ID, 姓名, 联系方式)、图书(ISBN, 书名, 作者, 出版社)
- 关系:借阅(借阅日期, 归还日期),读者与图书是多对多
-
关系模式:
读者(读者ID, 姓名, 联系方式) PK=读者ID 图书(ISBN, 书名, 作者, 出版社) PK=ISBN 借阅(读者ID, ISBN, 借阅日期, 归还日期) PK=(读者ID, ISBN, 借阅日期), FK=读者ID, ISBN -
范式分析:
- 1NF:所有属性原子 ✓
- 2NF:非主属性完全依赖主键 ✓
- 3NF:非主属性不传递依赖主键 ✓
- 达到3NF
样例6:分布式事务
题目: 跨行转账(A行账户向B行账户转账100元),如何保证一致性?
参考答案:
方案1:TCC
- Try:A行预冻结100元,B行预登记100元
- Confirm:A行扣款,B行入账
- Cancel:A行解冻,B行取消
方案2:消息事务(最终一致)
- A行扣款 + 发送消息(同一本地事务)
- 消息中间件保证至少一次投递
- B行消费消息,幂等入账
方案3:Saga
- 步骤:扣A → 加B → 通知完成
- 失败补偿:还A → 减B → 通知失败
第十三部分:论文写作指南
13.1 论文结构详解
摘要(300-400字)
├─ 项目背景一句话
├─ 你的角色一句话
├─ 关键技术列举
└─ 取得效果量化
正文(2000-2500字)
├─ 一、项目概述(200-300字)
│ ├─ 项目名称、行业、规模
│ ├─ 时间、团队
│ └─ 你的角色和职责
├─ 二、需求与挑战(300-400字)
│ ├─ 业务需求
│ ├─ 质量属性需求
│ └─ 约束条件
├─ 三、技术方案(1200-1500字)★重点
│ ├─ 整体架构选择及理由
│ ├─ 关键技术决策(紧扣题目)
│ └─ 实现细节(用数据)
└─ 四、效果与反思(200-300字)
├─ 量化成果
└─ 不足与改进
13.2 论文样例摘要
题目:论软件架构风格在系统设计中的应用
摘要:
2024年初,本人作为架构师参与了某市政府"智慧城市数据中台"项目,
该项目需要整合12个委办局的业务数据,日处理数据量超过50TB。
针对该项目的特点,我们采用了"管道-过滤器+事件驱动"的混合架构风格:
数据采集层使用管道-过滤器进行流式ETL处理;业务调度层采用事件驱动
实现各模块间的解耦通信。同时引入Kafka作为消息中枢,使用Flink进行
实时计算,HDFS+ClickHouse作为存储。
项目历时8个月完成,系统支持每秒10万条消息的吞吐量,平均处理延迟
低于500毫秒,可用性达到99.95%。本文将详细介绍架构风格的选择依据、
具体实现方案和过程中遇到的问题及解决办法。
13.3 高频论文主题模板
主题1:论软件架构风格的应用
重点: 描述2-3种架构风格特点,结合项目说明为何选择某种风格
主题2:论微服务架构设计与实现
重点: 服务拆分原则、通信方式、治理方案、数据一致性
主题3:论软件架构评估
重点: ATAM/SAAM方法,识别敏感点/权衡点/风险点
主题4:论质量属性需求设计
重点: 选定一个质量属性(如可用性/性能/安全),用六要素场景描述需求,给出战术
主题5:论分布式数据库设计
重点: 分库分表、读写分离、CAP权衡、一致性保证
主题6:论云原生架构
重点: 容器化、K8s、服务网格、DevOps
主题7:论中间件技术应用
重点: 消息队列、缓存、RPC、ESB等中间件选型与应用
主题8:论AI大模型在系统中的应用(新热点)
重点: Transformer架构、API/微调/RAG、提示工程、安全合规
13.4 论文写作技巧
- 必须有真实项目背景(即使虚构也要细节丰富)
- 数据要量化(用户数、QPS、响应时间、成本节约等)
- 要有取舍(不能光说好处,要承认权衡)
- 紧扣题目关键词(不要跑题)
- 避免纯理论(每个理论都要结合项目说应用)
- 避免技术堆砌(说"为什么用"比"用了什么"更重要)
13.5 时间分配
- 审题:5分钟
- 列提纲:10分钟
- 写摘要:10分钟
- 写正文:80分钟
- 检查:10分钟
- 总计:120分钟
第十四部分:考前冲刺策略
14.1 每日复习计划(最后2周)
第1-3天:综合知识刷题
- 上午:刷历年真题选择题
- 下午:错题整理 + 知识点回顾
- 晚上:背速查卡
第4-7天:案例分析专项
- 每天精读1套案例分析真题
- 总结答题模板和套话
- 重点:架构风格对比、质量属性、ATAM、微服务
第8-12天:论文准备
- 准备3篇论文模板(覆盖架构、微服务、质量属性)
- 每篇手写1遍
- 准备2-3个项目背景素材
第13-14天:模拟考试 + 查漏补缺
- 完整模拟3科考试
- 总结薄弱点,针对性强化
14.2 考场技巧
综合知识
- 不会的题不要纠结,先选直觉答案
- 排除法:先排除明显错误的
- 常识题:政策法规、知识产权题靠常识
- 计算题:单位一定要统一
案例分析
- 必答题:仔细审题,按要求作答
- 选答题:先看哪题最熟悉
- 答题技巧:
- 先答关键词,再展开
- 用列表/表格清晰呈现
- 字迹工整很重要
论文
- 不要换题目:选定后就不要换
- 结构清晰:用一二三四标题
- 写满字数:不够2000字基本不及格
- 结合项目:每个理论都要落到项目
14.3 必背重点(考前一晚)
- 7种内聚(功顺通过时逻偶)
- 7种耦合(非数标控外公内)
- 23种设计模式分类
- 4+1视图模型
- ATAM四个概念(敏感点/权衡点/风险点/非风险点)
- 质量属性6要素(源激环制响度)
- CAP定理
- 微服务断路器三状态
- 死锁公式 R(N-1)+1
- 位示图计算 = 内存÷页÷8
- 奈奎斯特/香农公式
- 可靠性串并联公式
- CMMI 5级
- RUP 4阶段
- 安全四特性
14.4 心态调整
- 软考通过率不高(30%左右),不要给自己太大压力
- 每科45分及格,不需要追求满分
- 论文是关键,提前准备好模板能极大提升通过率
- 考试中断思路时,先做下一题,回头再补
附录:常用术语对照
| 中文 | 英文 | 缩写 |
|---|---|---|
| 软件架构 | Software Architecture | SA |
| 架构风格 | Architectural Style | - |
| 设计模式 | Design Pattern | DP |
| 质量属性 | Quality Attribute | QA |
| 架构权衡分析法 | Architecture Trade-off Analysis Method | ATAM |
| 软件架构分析方法 | Software Architecture Analysis Method | SAAM |
| 成本效益分析法 | Cost Benefit Analysis Method | CBAM |
| 面向服务架构 | Service-Oriented Architecture | SOA |
| 企业服务总线 | Enterprise Service Bus | ESB |
| 一致性可用性分区容错 | Consistency-Availability-Partition tolerance | CAP |
| 基本可用软状态最终一致 | Basically-Available Soft-state Eventually-consistent | BASE |
| 可用性 | Availability | A |
| 平均故障间隔时间 | Mean Time Between Failures | MTBF |
| 平均修复时间 | Mean Time To Repair | MTTR |
| 平均无故障时间 | Mean Time To Failure | MTTF |
祝你考试顺利!记住:理解原理 + 多刷真题 + 论文准备充分 = 通过!
补充篇(第二版增强)
以下为高频但容易遗漏的考点补充
补充一:UML建模(必考)
UML 14种图(UML 2.x)
结构图(7种)——描述静态结构
| 图 | 用途 |
|---|---|
| 类图(Class Diagram) | 类、属性、方法、关系 |
| 对象图(Object Diagram) | 类的实例快照 |
| 组件图(Component Diagram) | 软件组件及依赖 |
| 部署图(Deployment Diagram) | 软件到硬件的映射(4+1物理视图) |
| 包图(Package Diagram) | 包之间的依赖 |
| 组合结构图 | 类的内部结构 |
| 制品图 | 物理制品及关系 |
行为图(7种)——描述动态行为
| 图 | 用途 |
|---|---|
| 用例图(Use Case Diagram) | 系统功能与参与者 |
| 活动图(Activity Diagram) | 业务流程、并行活动 |
| 状态图(State Diagram) | 对象状态变化 |
| 序列图(Sequence Diagram) | 对象间消息时序 |
| 通信图(Communication Diagram) | 对象间消息交互 |
| 时序图(Timing Diagram) | 时间约束 |
| 交互概览图 | 交互的高层视图 |
类之间的关系(必考)
| 关系 | 符号 | 含义 | 强度 |
|---|---|---|---|
| 依赖(Dependency) | ┄┄┄→ | 临时使用 | 最弱 |
| 关联(Association) | ────→ | 长期持有 | 弱 |
| 聚合(Aggregation) | ────◇ | 整体-部分(可分离) | 中 |
| 组合(Composition) | ────◆ | 整体-部分(不可分离) | 强 |
| 泛化(Generalization) | ────▷ | 继承 | 强 |
| 实现(Realization) | ┄┄┄▷ | 实现接口 | 强 |
记忆口诀: 依赖最弱,组合最强;聚合可分,组合同生死
用例图核心元素
- 参与者(Actor):与系统交互的人/系统
- 用例(Use Case):系统提供的功能
- 关系:
- 包含(include):必须包含的子用例
- 扩展(extend):可选扩展的用例
- 泛化:用例继承
补充二:软件需求工程
需求层次
- 业务需求:组织的高层目标
- 用户需求:用户角度的任务和操作
- 系统需求:详细技术规格
- 功能需求:系统做什么
- 非功能需求(质量属性):系统做得多好
- 约束:必须遵守的限制
需求获取方法
- 用户访谈
- 问卷调查
- 现场观察
- 原型法
- JAD(联合应用开发)
- 头脑风暴
- 文档分析
需求分析建模工具
| 工具 | 用途 |
|---|---|
| 数据流图(DFD) | 描述数据流动和处理 |
| 数据字典(DD) | 描述数据元素的定义 |
| E-R图 | 描述数据实体和关系 |
| 状态转换图 | 描述系统状态变化 |
| 决策表/决策树 | 描述复杂业务规则 |
| 用例图 | 面向对象的需求建模 |
DFD四要素
- 加工(Process):处理数据的功能(圆/圆角矩形)
- 数据流(Data Flow):数据流动方向(带箭头线)
- 数据存储(Data Store):静态数据存放(双横线)
- 外部实体(External Entity):数据源/终点(矩形)
需求规格说明书(SRS)
IEEE 830标准内容:
- 引言、总体描述、具体需求、附录
需求验证
- 需求评审、原型法、模型验证、测试用例评审
补充三:软件复用与构件
软件复用层次(从低到高)
- 代码复用:复制粘贴
- 设计复用:复用设计方案
- 分析复用:复用需求分析模型
- 测试用例复用:复用测试方案
软件构件特征
- 独立部署单元
- 明确的接口
- 第三方组装
主流构件标准
| 标准 | 提出方 | 平台 |
|---|---|---|
| CORBA | OMG | 跨平台 |
| COM/DCOM/COM+ | Microsoft | Windows |
| EJB | Sun | Java |
| .NET | Microsoft | Windows |
基于构件的软件开发(CBSD)流程
构件分类 → 构件检索 → 构件理解 → 构件适配 → 构件组装 → 构件演化
构件分类方法
- 关键字分类:基于关键字层次
- 刻面分类:多维度描述(功能、平台、操作系统等)
- 超文本分类:基于超链接
补充四:DSSA(特定领域软件架构)
定义
针对特定问题域的、可复用的、特定的架构设计
DSSA开发过程
- 领域分析:识别公共特性
- 领域设计:DSSA设计
- 领域实现:构件库开发
DSSA三层模型
- 领域开发环境
- 领域专用应用开发环境
- 应用执行环境
DSSA基本活动
- 领域需求分析
- 领域设计
- 领域实现
补充五:软件产品线
产品线核心资产
- 核心资产基本库:可复用的核心资产
- 基本组成:构件、架构、需求、文档、测试用例
产品线建立方式
| 方式 | 说明 | 风险 |
|---|---|---|
| 演化方式 | 现有产品演化 | 低 |
| 革命方式 | 重新开发 | 高 |
| 项目集成 | 多个项目集成 | 中 |
| 全新开发 | 全新建设 | 高 |
产品线优势
- 大量复用、降低成本、缩短周期、提高质量
补充六:大数据架构
Lambda架构
┌─批处理层(Batch)────→ 批视图
数据源 ─→ 分流 ┤
└─实时层(Speed)─────→ 实时视图
↓
服务层(合并查询)
特点:
- 同时支持批处理和实时处理
- 数据不可变,重新计算保证正确性
- 缺点:维护两套代码
Kappa架构
数据源 ─→ 消息队列 ─→ 流处理引擎 ─→ 服务层
特点:
- 只用流处理(统一架构)
- 优点:代码简洁
- 缺点:流处理对历史数据重算昂贵
Lambda vs Kappa
| 项 | Lambda | Kappa |
|---|---|---|
| 处理方式 | 批+流 | 仅流 |
| 复杂度 | 高 | 低 |
| 维护成本 | 高 | 低 |
| 适用场景 | 历史与实时都重要 | 实时为主 |
大数据5V特征
- Volume:数据量大
- Velocity:速度快
- Variety:多样性
- Veracity:真实性
- Value:价值密度低
大数据技术栈
| 层 | 主流技术 |
|---|---|
| 采集 | Flume、Logstash、Kafka |
| 存储 | HDFS、HBase、Cassandra、ClickHouse |
| 批处理 | MapReduce、Spark |
| 流处理 | Storm、Spark Streaming、Flink |
| 查询 | Hive、Presto、Impala |
| 调度 | YARN、Mesos、K8s |
补充七:物联网架构
三层架构
| 层 | 功能 | 技术 |
|---|---|---|
| 感知层 | 数据采集 | RFID、传感器、二维码、摄像头 |
| 网络层 | 数据传输 | NB-IoT、LoRa、5G、ZigBee、WiFi |
| 应用层 | 数据处理与应用 | 云平台、大数据、AI |
七层架构(更细粒度)
感知层 → 接入层 → 网络层 → 平台层 → 应用层 → 业务层 → 安全管理
物联网通信协议
| 协议 | 特点 | 应用 |
|---|---|---|
| MQTT | 轻量级、发布订阅 | 物联网消息 |
| CoAP | 类HTTP,UDP | 受限设备 |
| AMQP | 企业级消息 | RabbitMQ |
| LwM2M | 设备管理 | 设备升级 |
补充八:区块链架构
区块链特点
- 去中心化:无中心节点
- 不可篡改:哈希链 + 共识
- 可追溯:完整历史
- 匿名性:地址不绑定身份
区块链分类
| 类型 | 特点 | 例子 |
|---|---|---|
| 公有链 | 完全去中心化 | 比特币、以太坊 |
| 联盟链 | 多机构共同维护 | Hyperledger Fabric |
| 私有链 | 单机构维护 | 企业内部 |
共识机制
| 机制 | 全称 | 特点 |
|---|---|---|
| PoW | 工作量证明 | 算力,耗能高 |
| PoS | 权益证明 | 持币量,节能 |
| DPoS | 委托权益证明 | 投票选代表 |
| PBFT | 实用拜占庭容错 | 联盟链常用 |
| Raft | - | 私有链 |
区块链核心技术
- 哈希函数(SHA-256)
- Merkle树
- 数字签名
- P2P网络
- 共识算法
- 智能合约
补充九:信息系统综合规划
战略规划方法
| 方法 | 全称 | 用途 |
|---|---|---|
| BSP | 业务系统规划法 | IBM提出,自上而下 |
| CSF | 关键成功因素法 | 识别关键因素 |
| SST | 战略目标集转化法 | 战略转换 |
| IE | 信息工程方法 | 数据驱动 |
| EAP | 企业架构规划 | TOGAF基础 |
企业架构(EA)
Zachman框架:6行(数据/功能/网络/人员/时间/动机)× 6列
TOGAF(开放组架构框架):
- 业务架构(BA)
- 数据架构(DA)
- 应用架构(AA)
- 技术架构(TA)
信息化建设阶段(诺兰模型)
- 初始阶段
- 传播阶段
- 控制阶段
- 集成阶段
- 数据管理阶段
- 成熟阶段
补充十:项目管理(PMBOK)
五大过程组
- 启动:项目章程
- 规划:项目管理计划
- 执行:交付成果
- 监控:变更控制
- 收尾:移交、总结
十大知识领域
- 整合管理
- 范围管理
- 进度管理
- 成本管理
- 质量管理
- 资源管理
- 沟通管理
- 风险管理
- 采购管理
- 干系人管理
COCOMO估算模型
基本COCOMO: PM = a × KLOC^b
- PM = 人月数
- KLOC = 千行代码
- a, b 根据项目类型调整:
- 组织型:2.4, 1.05
- 半独立型:3.0, 1.12
- 嵌入型:3.6, 1.20
COCOMO II
- 应用组装模型
- 早期设计模型
- 体系结构后阶段模型
风险管理过程
- 风险管理规划
- 风险识别
- 风险定性分析
- 风险定量分析
- 风险应对规划
- 风险监督
风险应对策略
| 策略 | 适用 |
|---|---|
| 规避 | 高威胁 |
| 转移 | 转给第三方(如保险) |
| 减轻 | 降低概率或影响 |
| 接受 | 低风险 |
进度网络图
- PERT图:考虑不确定性,三时估算(最乐观、最可能、最悲观)
- 甘特图:直观显示进度
- 关键路径法(CPM):找最长路径
PERT三时估算
期望工期 = (最乐观 + 4×最可能 + 最悲观) / 6
方差 = ((最悲观 - 最乐观) / 6)²
补充十一:软件配置管理
SCM基本概念
- 配置项(CI):受控对象
- 基线(Baseline):经过评审的版本
- 版本(Version):演化的快照
- 变更控制:变更评审与批准流程
配置管理工具
- 集中式:CVS、SVN
- 分布式:Git、Mercurial
变更控制流程
- 提出变更请求
- 评估变更影响
- CCB(变更控制委员会)审批
- 实施变更
- 验证
- 关闭变更
补充十二:软件维护
维护类型(必考)
| 类型 | 占比 | 含义 |
|---|---|---|
| 改正性维护 | ~25% | 修复bug |
| 适应性维护 | ~25% | 适应新环境(如新OS) |
| 完善性维护 | ~50%(最多) | 增加功能、优化性能 |
| 预防性维护 | 少 | 提前预防问题 |
软件可维护性度量
- 可分析性
- 可改变性
- 稳定性
- 可测试性
补充十三:软件可靠性
可靠性模型
- 种子法模型:植入已知错误,统计发现率推算总错误数
- 失效率模型:基于失效数据
- 曲线拟合模型:拟合错误发现曲线
- 可靠性增长模型:JM、Goel-Okumoto
可靠性指标
- MTTF:平均无故障时间(不可修系统)
- MTBF:平均故障间隔时间(可修系统)= MTTF + MTTR
- MTTR:平均修复时间
- 故障率λ = 1/MTTF
可靠性设计技术
- N版本程序设计:多版本独立开发,投票表决
- 恢复块设计:主块+备块+检测+恢复
- 防错程序设计:异常处理、断言
补充十四:业务流程建模(BPMN)
BPMN核心元素
| 元素 | 符号 | 含义 |
|---|---|---|
| 事件(Event) | ○ | 起点、中间、终点 |
| 活动(Activity) | □ | 任务、子流程 |
| 网关(Gateway) | ◇ | 决策、并行、合并 |
| 流(Flow) | → | 顺序流 |
| 池(Pool) | 大矩形 | 参与者 |
| 泳道(Lane) | 子矩形 | 角色 |
工作流引擎
- jBPM、Activiti、Flowable、Camunda
补充十五:典型案例分析答题模板
模板1:架构风格选择
题型: 给出场景,选择合适的架构风格
答题模板:
1. 项目特点分析(数据流?交互性?实时性?)
2. 选择架构风格(管道-过滤器/事件驱动/分层/微服务...)
3. 选择理由(贴合项目特点)
4. 实施方案(核心组件、关键技术)
5. 优缺点分析
6. 应对缺点的措施
模板2:质量属性优化
题型: 系统某个质量属性不满足,如何改进
答题模板:
1. 现状分析(当前指标)
2. 问题定位(瓶颈在哪)
3. 改进方案(具体战术)
- 性能:缓存、并发、异步、读写分离
- 可用性:冗余、心跳、限流、降级
- 可扩展性:水平扩展、解耦、消息队列
4. 改进后预期效果
5. 风险与权衡
模板3:技术选型对比
题型: A/B两种方案对比选择
答题模板:
| 维度 | 方案A | 方案B |
|---|---|---|
| 性能 | … | … |
| 成本 | … | … |
| 复杂度 | … | … |
| 可维护性 | … | … |
| 适用场景 | … | … |
结论:根据项目XXX特点,推荐方案X
模板4:补全表格/填空题
题型: 给出表格,填入指标或缺失内容
注意:
- 看清要求字数
- 用简练专业术语
- 不要写大段话
补充十六:高频遗漏知识点速记
Cache映射方式
- 直接映射:每个主存块映射到固定Cache行(冲突多)
- 全相联映射:可映射到任意Cache行(开销大)
- 组相联映射:折中方案(主流)
输入输出方式
| 方式 | 特点 | CPU开销 |
|---|---|---|
| 程序查询 | CPU不停查询 | 最高 |
| 程序中断 | 设备主动中断 | 中 |
| DMA | 设备直接访问内存 | 低 |
| 通道 | 专用I/O处理器 | 最低 |
总线分类
- 数据总线:传数据
- 地址总线:传地址
- 控制总线:传控制信号
流水线技术
加速比 = 串行时间 / 流水线时间
效率 = 各段忙时间总和 / (流水线时间 × 流水段数)
例题: 5段流水线,每段1ns,处理100条指令,时间?
- 流水线时间 = (5 + 100-1) × 1ns = 104 ns
- 串行时间 = 5×100 = 500 ns
- 加速比 = 500/104 ≈ 4.81
浮点数表示
IEEE 754:
- 单精度:1符号位 + 8指数位 + 23尾数位 = 32位
- 双精度:1符号位 + 11指数位 + 52尾数位 = 64位
校验码
- 奇偶校验:检1位错
- CRC循环冗余:检多位错
- 海明码:检+纠错
Web Service技术栈
| 技术 | 全称 | 作用 |
|---|---|---|
| SOAP | 简单对象访问协议 | 通信协议 |
| WSDL | Web服务描述语言 | 服务描述 |
| UDDI | 统一描述发现集成 | 服务发现 |
| REST | 表述性状态转移 | 轻量级API风格 |
| JSON | JavaScript对象表示 | 数据格式 |
设计模式与架构风格区别
- 架构风格:宏观,整体组织(如分层、微服务)
- 设计模式:微观,类与对象设计(如单例、观察者)
软件文档分类
- 管理文档:项目计划、报告
- 开发文档:需求、设计、测试
- 用户文档:用户手册、操作指南
补充十七:考点统计与重点排序
选择题高频考点(出现次数排名)
- 进程状态转换(每年必考)
- 信道容量计算(必考)
- 数据库范式(必考)
- 设计模式(必考)
- 内聚耦合(必考)
- CMMI/RUP(必考)
- 知识产权(必考)
- 加密算法(高频)
- 协议层次(高频)
- UML图(高频)
案例分析高频题型
- 软件架构风格选择 ★★★★★
- 质量属性场景描述 ★★★★★
- 数据库设计 ★★★★
- 微服务/SOA ★★★★
- ATAM架构评估 ★★★
- 数据流图DFD ★★★
- 嵌入式实时调度 ★★
论文高频题目(按近5年)
- 论软件架构风格 ★★★★★
- 论微服务架构设计 ★★★★★
- 论质量属性设计 ★★★★
- 论数据库设计/分布式 ★★★★
- 论中间件应用 ★★★
- 论云原生/容器化 ★★★
- 论AI/大模型应用 ★★★(新趋势)
最终复习建议
学习顺序
- 先看简要速查,建立框架
- 再看详细复习,理解原理
- 刷历年真题(重要性最高)
- 论文准备3篇模板
时间分配(按短板)
- 计算题:刷题30%时间
- 理论题:背诵30%时间
- 案例分析:练习20%时间
- 论文:准备20%时间
核心提分技巧
- 选择题:背口诀,刷真题(很多重复)
- 案例分析:背模板,结合关键词答题
- 论文:提前准备3个项目模板,临场套用
不要踩的坑
- 不要试图背完所有内容(重点突出)
- 不要忽视论文(很多人挂在论文)
- 不要忽视计算题(每年都有)
- 不要光看不练(必须刷真题)
至此,复习手册补充完毕。建议结合《系统架构设计师教程(第4版)》和历年真题学习。
祝你顺利通过软考高级!🎯
第三版:深度强化篇
针对计算与理论短板再深化,含大量真题例题
强化一:计算机组成与体系结构(深化)
计算机性能指标
- MIPS:每秒百万条指令
- MFLOPS:每秒百万次浮点运算
- CPI:每条指令的时钟周期数
- 公式: MIPS = 主频 / (CPI × 10⁶)
Flynn分类
| 分类 | 含义 | 示例 |
|---|---|---|
| SISD | 单指令单数据 | 传统单核CPU |
| SIMD | 单指令多数据 | 向量机、GPU |
| MISD | 多指令单数据 | 罕见 |
| MIMD | 多指令多数据 | 多核CPU、集群 |
Cache详解
Cache映射方式对比
| 方式 | 主存块映射 | 冲突 | 硬件开销 |
|---|---|---|---|
| 直接映射 | i = j mod m(m=Cache行数) | 多 | 小 |
| 全相联 | 任意位置 | 无 | 大 |
| 组相联 | 块映射到组,组内任意 | 折中 | 折中 |
Cache替换算法
- 随机算法:随机替换
- FIFO:先进先出
- LRU:最近最少使用(最常用)
- LFU:最不经常使用
Cache写策略
- 写直达(Write Through):同时写Cache和主存(慢、一致性好)
- 写回(Write Back):只写Cache,置脏位(快、一致性差)
例题:Cache性能
题: Cache命中率95%,Cache访问1ns,主存访问50ns,平均访问时间?
EAT = 0.95×1 + 0.05×50 = 0.95 + 2.5 = 3.45 ns
例题:Cache映射
题: 主存256KB,Cache 4KB,块大小64B,采用直接映射,主存地址多少位?
主存块数 = 256KB/64B = 4096块 → 主存块号需要12位
Cache行数 = 4KB/64B = 64行 → Cache行号需要6位
块内偏移 = log₂64 = 6位
主存地址位数 = log₂(256K) = 18位
组成:标记(12-6=6位) + 行号(6位) + 块内偏移(6位)
流水线技术(必考)
流水线公式
总时间 = (k + n - 1) × Δt
- k = 流水段数
- n = 指令数
- Δt = 一个段的时间(取最长段)
加速比 S = T_顺序 / T_流水线 = nk / (k+n-1)
效率 E = S/k = n/(k+n-1)
例题:流水线
题: 4段流水线,各段执行时间分别为3、2、4、3ns,处理100条指令耗时?
流水段时钟周期取最长 = 4ns
总时间 = (4 + 100-1) × 4 = 412 ns
顺序执行时间 = 100 × (3+2+4+3) = 1200 ns
加速比 = 1200/412 ≈ 2.91
流水线相关问题
- 结构相关:硬件资源冲突
- 数据相关:后续指令依赖前面结果(解决:转发、暂停)
- 控制相关:分支跳转(解决:分支预测、延迟槽)
浮点数表示(IEEE 754)
单精度浮点数(32位)
| 部分 | 位数 | 取值 |
|---|---|---|
| 符号位S | 1 | 0正/1负 |
| 指数E | 8 | 偏移127 |
| 尾数M | 23 | 隐含1 |
实际值 = (-1)^S × 1.M × 2^(E-127)
双精度浮点数(64位)
- 符号位1 + 指数11(偏移1023) + 尾数52
例题:浮点数转换
题: IEEE 754单精度数 0 10000010 10100000000000000000000 表示多少?
S=0(正数)
E=10000010 = 130,实际指数 = 130-127 = 3
M=1.101(隐含1)
值 = +1.101 × 2³ = 1101.0 = 13.0
总线类型与带宽
- 数据总线:传数据
- 地址总线:传地址(决定寻址范围)
- 控制总线:传控制信号
总线带宽 = 总线宽度 × 总线频率
例题:总线带宽
题: 总线宽度64位,总线频率100MHz,总线带宽?
带宽 = 64bit × 100MHz / 8 = 800 MB/s
I/O控制方式(CPU开销由高到低)
- 程序查询/轮询:CPU不停查询设备状态(低效)
- 程序中断:设备完成后中断CPU
- DMA:设备直接访问内存,仅开始/结束通知CPU
- 通道控制:专用I/O处理器,独立执行I/O程序
校验码详解
奇偶校验
- 添加1位使总1的个数为奇/偶
- 只能检测奇数位错误,不能纠错
CRC循环冗余校验
- 通过多项式模2除法生成校验位
- 检错能力强,不能纠错
- 用于网络通信、磁盘存储
海明码(必考)
冗余位公式: 2^k ≥ n + k + 1
- 海明码可检错+纠1位错
例题:海明码
题: 数据位为7位,需要多少位海明校验位?
2^k ≥ 7+k+1
k=3:2³=8 < 11 ✗
k=4:2⁴=16 ≥ 12 ✓
答:4位
强化二:操作系统进阶
银行家算法(避免死锁)
核心数据结构
- Available:可用资源向量
- Max:进程最大需求矩阵
- Allocation:已分配矩阵
- Need:还需要矩阵 = Max - Allocation
安全性算法步骤
- 找一个 Need ≤ Available 的进程
- 假设其完成,回收资源:Available += Allocation
- 重复直到所有进程完成(安全)或找不到(不安全)
例题:银行家算法
题: 系统有3类资源R1、R2、R3,数量为(10, 5, 7)。当前分配如下:
Allocation Max Need Available
P0 (0,1,0) (7,5,3) (7,4,3)
P1 (2,0,0) (3,2,2) (1,2,2) (3,3,2)
P2 (3,0,2) (9,0,2) (6,0,0)
P3 (2,1,1) (2,2,2) (0,1,1)
P4 (0,0,2) (4,3,3) (4,3,1)
求安全序列。
解:
1. 检查Available(3,3,2),找Need≤Available的进程
P1: Need(1,2,2) ≤ (3,3,2) ✓
分配后Available = (3+2, 3+0, 2+0) = (5,3,2)
2. 找下一个:
P3: Need(0,1,1) ≤ (5,3,2) ✓
Available = (5+2, 3+1, 2+1) = (7,4,3)
3. 找下一个:
P0: Need(7,4,3) ≤ (7,4,3) ✓
Available = (7+0, 4+1, 3+0) = (7,5,3)
4. P2: Need(6,0,0) ≤ (7,5,3) ✓
Available = (10,5,5)
5. P4: Need(4,3,1) ≤ (10,5,5) ✓
安全序列:P1 → P3 → P0 → P2 → P4
进程调度算法
| 算法 | 全称 | 特点 |
|---|---|---|
| FCFS | 先来先服务 | 公平但可能长等待 |
| SJF | 短作业优先 | 平均周转最短 |
| HRRN | 最高响应比 | 响应比=(等待+服务)/服务 |
| 优先级 | Priority | 抢占/非抢占 |
| RR | 时间片轮转 | 公平,时间片大小关键 |
| 多级反馈队列 | MLFQ | 综合多种 |
例题:调度算法
题: 三个进程A、B、C,到达时间0、1、2,运行时间10、4、2。SJF调度的平均周转时间?
解(非抢占式):
时刻0:仅A到达,运行A
时刻10:A完成,B、C都到了,选服务时间短的C
时刻12:C完成,运行B
时刻16:B完成
A周转 = 10-0 = 10
B周转 = 16-1 = 15
C周转 = 12-2 = 10
平均周转 = (10+15+10)/3 = 11.67
信号量与PV操作
概念
- 信号量S:表示资源数量
- P(S):申请资源 S = S - 1,若S<0进程阻塞
- V(S):释放资源 S = S + 1,若S≤0唤醒一个
经典问题:生产者-消费者
信号量:mutex=1(互斥), empty=N(空缓冲区), full=0(满缓冲区)
生产者: 消费者:
P(empty) P(full)
P(mutex) P(mutex)
放入产品 取出产品
V(mutex) V(mutex)
V(full) V(empty)
文件系统
文件组织
- 顺序文件
- 索引文件
- 索引顺序文件
- 直接文件(哈希)
索引节点(inode)
存储文件的元数据:权限、所有者、大小、时间戳、数据块指针
磁盘调度算法
- FCFS:先来先服务
- SSTF:最短寻道时间
- SCAN:扫描算法(电梯算法)
- C-SCAN:循环扫描
- LOOK/C-LOOK:改进版
例题:磁盘调度
题: 磁头当前在50道,请求队列:100、180、30、120、20、80。SSTF算法的服务顺序?
当前50:
- 距50最近的是80(差30),先服务80
- 当前80,距离100最近(差20),服务100
- 当前100,距离120最近(差20),服务120
- 当前120,距离180(差60)和30(差90),服务180
- 当前180,距离30(差150)和20(差160),服务30
- 当前30,服务20
顺序:80→100→120→180→30→20
总寻道:30+20+20+60+150+10 = 290道
强化三:网络深化
TCP/IP详解
TCP三次握手详细
状态变化:
客户端 CLOSED → SYN_SENT → ESTABLISHED
服务端 LISTEN → SYN_RCVD → ESTABLISHED
报文:
1. SYN, seq=x
2. SYN+ACK, seq=y, ack=x+1
3. ACK, seq=x+1, ack=y+1
TCP四次挥手详细
状态变化:
主动方:ESTABLISHED → FIN_WAIT_1 → FIN_WAIT_2 → TIME_WAIT → CLOSED
被动方:ESTABLISHED → CLOSE_WAIT → LAST_ACK → CLOSED
报文:
1. FIN, seq=u
2. ACK, ack=u+1(被动方等数据传完)
3. FIN, seq=v
4. ACK, ack=v+1(TIME_WAIT等2MSL后CLOSED)
为什么要等2MSL?
- 保证最后一个ACK到达
- 防止旧连接报文影响新连接
HTTP状态码
| 类别 | 含义 | 常见 |
|---|---|---|
| 1xx | 信息 | 100 Continue |
| 2xx | 成功 | 200 OK, 201 Created, 204 No Content |
| 3xx | 重定向 | 301永久, 302临时, 304 Not Modified |
| 4xx | 客户端错误 | 400, 401, 403, 404, 429 |
| 5xx | 服务端错误 | 500, 502, 503, 504 |
HTTPS工作流程
- 客户端发起请求,服务器返回证书
- 客户端验证证书
- 客户端用服务器公钥加密对称密钥发送
- 服务器用私钥解密得对称密钥
- 后续通信用对称密钥加密
DNS解析过程
- 浏览器缓存
- 操作系统缓存(hosts文件)
- 路由器缓存
- ISP DNS服务器
- 根DNS服务器 → 顶级DNS → 权威DNS
IPv6
- 128位地址(IPv4是32位)
- 8组16进制,每组4位
- 简化方式:0可省略,连续0用::代替
- 如:2001:0db8:85a3:0000:0000:8a2e:0370:7334
- 简化:2001:db8:85a3::8a2e:370:7334
网络存储
| 类型 | 全称 | 特点 |
|---|---|---|
| DAS | 直连存储 | 直接连服务器 |
| NAS | 网络附属存储 | 文件级共享(NFS) |
| SAN | 存储区域网络 | 块级共享 |
强化四:UML建模深化
类图详解
类的UML表示
┌─────────────┐
│ ClassName │ ← 类名
├─────────────┤
│ - attr1: int│ ← 属性(- 私有)
│ + attr2: str│ ← 属性(+ 公有)
├─────────────┤
│ + method1() │ ← 方法
│ # method2() │ ← 方法(# 受保护)
└─────────────┘
关系符号
依赖:A ┄┄┄→ B(虚线箭头)
关联:A ────→ B(实线箭头,可有多重性 1..*)
聚合:A ────◇ B(空心菱形)整体A聚合部分B
组合:A ────◆ B(实心菱形)整体A组合部分B
泛化:A ────▷ B(空心三角形)A继承B
实现:A ┄┄┄▷ B(虚线空心三角形)A实现接口B
序列图详解
元素
- 生命线:垂直虚线
- 激活条:矩形(对象正在活动)
- 消息:水平箭头
- 同步:实心箭头
- 异步:开放箭头
- 返回:虚线箭头
例:用户登录
User UI AuthService DB
│ │ │ │
│─登录─▶│ │ │
│ │─验证────▶│ │
│ │ │─查询────▶│
│ │ │◀─结果────│
│ │◀─Token───│ │
│◀─成功─│ │ │
状态图详解
- 状态:圆角矩形
- 初始状态:实心圆点
- 终止状态:双圈实心圆
- 转移:箭头 + 触发事件[条件]/动作
例:订单状态机
[●] → 已下单 → 已支付 → 已发货 → 已完成 → [◉]
↓
已取消 → [◉]
强化五:数据库进阶
关系运算补充
投影 π
π属性列表® —— 选列
选择 σ
σ条件® —— 选行
自然连接 ⋈
两个关系按同名属性自动等值连接
例题:关系代数
题: 关系R(A,B,C)和S(C,D,E),求结果元组数。R有3个元组,S有4个元组。
- 笛卡尔积R×S:3×4 = 12个元组
- 自然连接R⋈S:取决于C的匹配情况
SQL查询性能优化
索引使用规则
- WHERE条件中的列建索引
- 范围查询用B+树
- 等值查询可用Hash
- 经常排序的列建索引
- 避免在索引列做函数运算
索引失效场景
- LIKE以%开头:
LIKE '%abc' - 索引列函数运算:
WHERE UPPER(name)='ABC' - 类型隐式转换
- OR条件部分无索引
- 数据量小(全表扫描更快)
数据库并发控制
锁机制
- 共享锁(S):读锁,多事务可同时持有
- 排他锁(X):写锁,独占
- 更新锁(U):意图升级为X锁
两段锁协议(2PL)
- 阶段1:扩展(只加锁)
- 阶段2:收缩(只解锁)
- 严格2PL:所有锁直到事务结束才释放
死锁处理
- 死锁预防:限制加锁顺序
- 死锁检测:等待图(Wait-for Graph)
- 死锁恢复:选择代价最小的事务回滚
分布式数据库
数据分布策略
- 分片(Sharding):水平切分
- 复制(Replication):多副本
- 混合:分片+复制
分片策略
- 范围分片:按值范围
- 哈希分片:按哈希值
- 目录分片:查目录映射
一致性级别
- 强一致性:读写都看到最新
- 最终一致性:经过一段时间会一致
- 会话一致性:同一会话内一致
- 单调一致性:读取不会回退
NoSQL分类
| 类型 | 代表 | 适用 |
|---|---|---|
| 键值 | Redis、DynamoDB | 缓存、会话 |
| 文档 | MongoDB、CouchDB | 半结构化 |
| 列族 | HBase、Cassandra | 大数据分析 |
| 图 | Neo4j、JanusGraph | 关系网络 |
强化六:架构相关计算与分析
软件复杂度计算
圈复杂度(McCabe)
V(G) = E - N + 2
- E = 边数
- N = 节点数
- 也可数判定节点+1
圈复杂度判定:
- 1-10:简单,低风险
- 11-20:中等
- 21-50:高复杂
-
50:不可测试
例题:圈复杂度
题: 程序流程图有8个节点,10条边,圈复杂度?
V(G) = 10 - 8 + 2 = 4
软件质量度量
McCall质量模型
11个属性,3类视图:
- 产品操作:正确性、可靠性、效率、完整性、可使用性
- 产品修改:可维护性、可测试性、灵活性
- 产品转移:可移植性、可重用性、互操作性
ISO/IEC 9126质量模型
6特性27子特性:
- 功能性、可靠性、易用性、效率、可维护性、可移植性
ISO/IEC 25010(最新)
- 功能适合性、性能效率、兼容性、易用性、可靠性、安全性、可维护性、可移植性
强化七:综合案例分析(深度题)
案例A:电商秒杀系统设计
题目背景:
某电商平台要做秒杀活动,预计10万人同时参与,商品库存仅100件。请设计架构。
关键挑战:
- 高并发(瞬时10万QPS)
- 防止超卖
- 防止刷单
架构方案:
┌─────────────────────────────────────────────┐
│ CDN(静态资源缓存,分散流量) │
└─────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────┐
│ Nginx网关(限流、防刷、负载均衡) │
└─────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────┐
│ 应用服务器集群 │
│ - 验证码、令牌 │
│ - Redis扣减库存(预扣减) │
│ - 消息队列(异步下单) │
└─────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────┐
│ 数据库(最终扣减库存,幂等性保证) │
└─────────────────────────────────────────────┘
核心技术:
- CDN:商品详情页静态化,分散流量
- 限流:令牌桶/漏桶限制每秒进入用户数
- 防刷:用户队列,每用户1请求
- Redis预扣:原子操作(Lua脚本/DECR)保证不超卖
- 消息队列:削峰填谷,异步处理订单
- 数据库:用乐观锁/分布式锁,幂等性
- 降级:库存不足直接返回失败页面
质量属性映射:
- 性能:CDN+缓存,降低响应时间
- 可用性:集群+熔断,避免雪崩
- 一致性:Redis+DB双重校验,最终一致性
案例B:金融交易系统改造
题目背景:
某银行核心交易系统每日处理1亿笔交易,原架构单体应用,需要改造为微服务架构。
改造方案:
1. 服务拆分(按业务)
- 账户服务、交易服务、风控服务、清算服务、报表服务
2. 数据一致性方案
- 跨账户转账采用 TCC 模式
- 关键流程使用 Saga 模式
- 异步消息保证最终一致
3. 高可用设计
- 异地多活(同城双活+异地灾备)
- 数据库主备复制(半同步)
- 服务集群+自动容灾
4. 安全加固
- HTTPS全链路加密
- 敏感数据加密存储(AES-256)
- 数字签名防篡改
- 完整审计日志
5. 监控体系
- Prometheus+Grafana:指标监控
- ELK:日志分析
- SkyWalking:链路追踪
- 告警系统:故障通知
质量属性目标:
- 可用性:99.99%(年停机<53分钟)
- 性能:P99 < 100ms
- 一致性:强一致(资金类)+最终一致(统计类)
- 安全性:通过等保三级
案例C:物联网平台架构
题目背景:
某智慧城市项目,10万个传感器实时上报数据,要求支持设备管理、数据采集、实时分析、告警。
架构方案:
1. 设备接入层
- MQTT协议(轻量级,适合物联网)
- 设备身份认证(TLS+证书)
- 海量设备接入(千万级)
2. 数据传输层
- Kafka消息队列(高吞吐)
- 多副本保证数据不丢
3. 数据处理层
- Lambda架构:
- 批处理:Spark处理历史数据
- 流处理:Flink实时分析
- 规则引擎:Drools做实时告警
4. 数据存储层
- 时序数据:InfluxDB/TDengine
- 元数据:MySQL
- 实时数据:Redis
- 历史数据:HDFS+Parquet
5. 应用层
- 设备管理(生命周期)
- 实时大屏(WebSocket推送)
- 告警通知(短信+邮件+电话)
关键决策:
- 协议选MQTT:相比HTTP更省流量、长连接
- Lambda而非Kappa:历史数据分析需求强
- 时序数据库:关系数据库存不下
强化八:论文实战范文片段
论文样例:论微服务架构在系统中的应用
摘要范文
2024年6月,本人作为系统架构师参与了某大型互联网医疗平台的架构改造
项目。该平台日活用户超过200万,原系统采用单体架构,面临部署慢、
扩展难、迭代受阻等问题。
针对这些问题,我们采用微服务架构进行重构,将单体应用拆分为用户、
医生、问诊、处方、药品、订单、支付等15个微服务。技术栈采用Spring
Cloud Alibaba体系,使用Nacos作为注册中心和配置中心,Sentinel
作为熔断限流组件,SkyWalking做链路追踪,RocketMQ处理异步消息。
经过6个月的改造,系统部署时间从2小时缩短至10分钟,QPS从原来的
5000提升到30000,可用性达到99.95%。本文将详细介绍微服务的拆分
策略、服务治理方案和数据一致性保证措施。
正文片段:服务拆分策略
微服务的核心是合理的服务拆分。我们遵循以下原则:
1. 单一职责原则
每个服务只负责一个明确的业务能力。例如用户服务只处理用户的
注册、登录、信息管理,不涉及医生信息或订单处理。
2. 高内聚低耦合
服务内部的功能紧密相关,服务间通过接口通信。我们将原系统
中的"用户医生问诊"模块拆分时,发现医生信息独立性强,单独
抽出为医生服务,而问诊涉及用户和医生交互,单独成立问诊服务。
3. 数据自治原则
每个服务拥有自己的数据库,避免数据库层面的耦合。订单服务
不能直接查询用户表,必须通过用户服务API获取。
4. 团队规模匹配
根据"两个披萨"原则,每个服务由6-8人的小团队负责。
经过分析,我们最终将系统拆分为15个微服务,包括基础服务(用户、
医生、机构)、业务服务(问诊、处方、订单、支付)、支撑服务(消息、
日志、监控)等。
正文片段:分布式事务方案
拆分后面临的最大挑战是分布式事务。以下单流程为例,涉及订单服务、
库存服务、支付服务、积分服务,需要保证数据一致性。
我们采用了多种方案组合:
1. 关键流程用TCC模式
下单时,订单创建Try预占库存→Try冻结金额→Confirm确认。如果
任一步失败,执行Cancel回滚。这种方式一致性强,但实现复杂。
2. 非关键流程用消息最终一致
订单完成后,发送消息通知积分服务加积分、库存服务减实际库存。
通过消息表+定时任务保证消息至少投递一次,配合幂等性设计避免
重复消费。
3. 长流程用Saga模式
退款流程涉及多个步骤:退款审核→金额回退→库存回补→订单关闭。
每个步骤定义补偿操作,失败时反向执行补偿,保证最终一致。
实施效果:分布式事务相关问题数量从每天50+降低到每周1-2例,
显著提升了系统稳定性。
强化九:考前最后冲刺题(自测)
选择题(10题快速自测)
1. 进程从执行态变为就绪态的原因是?
- A. 等待I/O
- B. 时间片用完
- C. 资源不足
- D. 等待信号
答案:B
2. 5个进程各需3个资源,至少需要多少资源避免死锁?
- A. 10 B. 11 C. 15 D. 16
答案:B(5×(3-1)+1=11)
3. 信道带宽3000Hz,使用8种信号状态,无噪声最大传输速率?
- A. 9 kbps B. 18 kbps C. 24 kbps D. 36 kbps
答案:B(2×3000×log₂8=2×3000×3=18000bps)
4. 内聚度最高的是?
- A. 时间内聚 B. 逻辑内聚 C. 顺序内聚 D. 功能内聚
答案:D
5. ATAM中既影响多个质量属性又有正负权衡的决策点叫?
- A. 敏感点 B. 风险点 C. 权衡点 D. 非风险点
答案:C
6. 设计模式中"定义算法骨架,子类实现具体步骤"是?
- A. 策略 B. 模板方法 C. 状态 D. 观察者
答案:B
7. 微服务断路器的三种状态是?
- A. 开/关/暂停 B. 关闭/打开/半开 C. 启动/停止/重启 D. 正常/异常/恢复
答案:B
8. CAP定理中,传统关系数据库分布式版本通常是?
- A. CA B. CP C. AP D. CAP
答案:B
9. 哪个不属于4+1视图?
- A. 逻辑视图 B. 物理视图 C. 数据视图 D. 进程视图
答案:C
10. 软件维护中占比最高的是?
- A. 改正性维护 B. 适应性维护 C. 完善性维护 D. 预防性维护
答案:C(约50%)
案例题快速自测
题: 描述以下场景的质量属性场景六要素:
“系统在被1万次/秒的请求攻击时,应在30秒内识别并触发限流”
答:
- 刺激源:恶意攻击者
- 刺激:1万次/秒的高频请求
- 环境:系统正常运行
- 制品:API网关或受攻击的服务
- 响应:识别异常并启动限流策略
- 响应度量:30秒内识别,限流后请求量降至1000次/秒以内
属性: 安全性 + 性能(双重)
强化十:复习时间表(最后30天)
第1周(基础重建)
- Day 1-2:操作系统+网络基础
- Day 3-4:数据库+软件工程
- Day 5:刷选择题真题1套
- Day 6-7:架构风格+设计模式
第2周(深化)
- Day 8-9:UML+需求工程
- Day 10-11:质量属性+ATAM
- Day 12:刷选择题真题1套
- Day 13-14:微服务+分布式
第3周(专题强化)
- Day 15-16:算术题专项训练
- Day 17-18:案例分析专项
- Day 19:刷选择题真题1套
- Day 20-21:论文模板准备
第4周(冲刺)
- Day 22-24:3篇论文模板手写
- Day 25-26:模拟考试
- Day 27-28:错题回顾
- Day 29:速查卡过一遍
- Day 30:休息+心态调整
强化十一:考试当天Tips
早上(综合知识)
- 提前30分钟到考场
- 带身份证、准考证
- 选择题:先做有把握的,标记不确定的
- 不要太早交卷,回头检查
下午(案例分析+论文)
- 案例分析90分钟,论文120分钟
- 案例:5选3,先扫题选最熟悉的
- 论文:选定后不换题,先列提纲
论文写作技巧(重要!)
- 摘要要写好(300字必备)
- 正文要分段(清晰的标题+段落)
- 要有数据(XX用户/XX QPS/XX秒)
- 要有取舍(说出方案的优缺点)
- 字数2000-3000(不够字数严重扣分)
- 字迹要工整(潦草扣分)
最最后:知识体系总图
系统架构设计师知识体系
│
├─ 计算机基础
│ ├─ 计算机组成(流水线、Cache、I/O)
│ ├─ 操作系统(进程、内存、文件、设备)
│ ├─ 计算机网络(OSI/TCP-IP、协议、子网)
│ └─ 数据库(关系、ACID、分布式CAP)
│
├─ 软件工程
│ ├─ 开发模型(瀑布、敏捷、RUP)
│ ├─ 需求工程(DFD、用例、UML)
│ ├─ 设计原则(SOLID、内聚耦合)
│ ├─ 测试(黑白盒、阶段)
│ └─ 维护(4种类型)
│
├─ 软件架构(核心)
│ ├─ 架构风格(5大类)
│ ├─ 4+1视图模型
│ ├─ 设计模式(23种)
│ ├─ 质量属性(6大)
│ ├─ 架构评估(ATAM、SAAM)
│ ├─ DSSA与产品线
│ └─ 软件复用与构件
│
├─ 分布式与新技术
│ ├─ SOA与微服务
│ ├─ 云原生(容器、K8s)
│ ├─ 大数据(Lambda、Kappa)
│ ├─ 物联网(三层架构)
│ ├─ 区块链
│ └─ AI/大模型应用
│
├─ 安全
│ ├─ 安全四特性
│ ├─ 加密体系(对称/非对称/哈希)
│ ├─ 数字签名与PKI
│ └─ 网络攻击与防御
│
├─ 项目管理
│ ├─ PMBOK五大过程组
│ ├─ 十大知识领域
│ ├─ EVM挣值管理
│ ├─ 风险管理
│ └─ 配置管理
│
└─ 法律法规
├─ 知识产权
├─ 标准化
└─ 信息安全等级保护
🎓 学习是一场马拉松,坚持到底就是胜利!
📝 记住三个关键:理论扎实 + 多刷真题 + 论文准备
💪 加油,必过!
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)