知识全景图/ 软考全景图/ 技术科目备考指南

软考技术科目备考指南

软件设计师 (中级) + 系统架构设计师 (高级) — 计算机组成、操作系统、数据库、数据结构、UML、设计模式、架构风格

软件设计师 (中级) 系统架构设计师 (高级)
适用科目: 本页同时覆盖中级"软件设计师"和高级"系统架构设计师"的技术知识部分。
两者共享大量计算机基础考点 (组成原理、操作系统、数据库、数据结构等),区别在于: 架构设计师额外考架构风格、质量属性战术、分布式系统等高级内容,且下午考论文。
配合 软考全景图 使用。
一、考试内容与分值分布
1.1 软件设计师 (中级)
科目时间题型满分通过线
上午: 综合知识 150 分钟 75 道单选题 75 分 45 分
下午: 应用技术 150 分钟 5 道大题 (每题 15 分,前1题必答,后4题选2题) 75 分 45 分

上午综合知识考点分布 (75 题)

知识模块题量重要程度说明
数据结构与算法5-8 题必考重点排序、查找、树、图、算法设计
软件工程4-6 题必考重点开发模型、测试、UML、度量
数据库系统4-6 题必考重点SQL、范式、ER图、事务并发
操作系统3-5 题必考进程管理、存储管理、页面置换
计算机组成原理3-5 题必考流水线、Cache、浮点数
网络与安全2-4 题高频协议、子网划分、加密技术
设计模式2-4 题高频23 种设计模式识别与应用
面向对象3-5 题高频封装/继承/多态、面向对象分析
程序设计语言2-3 题中频编译原理、语法分析
数学与知识产权3-5 题中频排列组合、著作权法

下午案例分析题型分布 (5 道大题)

题号题型是否必答分值核心考点
题1数据流图必答15 分补充数据流图、数据字典
题2数据库设计选答15 分ER图转关系模式、SQL编写、范式判断
题3UML建模选答15 分类图/序列图/状态图补充填空
题4算法填空选答15 分C语言算法代码填空 (排序/查找/DP等)
题5面向对象设计选答15 分C++/Java 设计模式代码填空
1.2 系统架构设计师 (高级)
科目时间题型满分通过线
上午: 综合知识 150 分钟 75 道单选题 75 分 45 分
下午一: 案例分析 90 分钟 3 道必答主观题 75 分 45 分
下午二: 论文 120 分钟 1 篇论文 (2选1) 75 分 45 分

系统架构设计师考点分布

知识模块上午题量下午是否涉及重要程度
系统架构设计5-8 题下午核心最高
软件工程4-6 题下午一可能考
数据库系统4-6 题下午一可能考
数据结构与算法3-5 题较少中高
操作系统3-5 题较少中高
计算机组成原理3-5 题较少
网络与安全3-5 题下午一可能考中高
系统可靠性2-3 题下午一可能考
数学与知识产权2-3 题
二、计算机组成原理 (必考 3-5 题)
2.1 进制转换
转换方向方法示例
十进制 → 二进制 除2取余,逆序排列 (整数部分);乘2取整,顺序排列 (小数部分) 25.625D = 11001.101B
二进制 → 八进制 三位一组,不足补零,每组转为一个八进制数字 11001.101B = 011 001 . 101 = 31.5O
二进制 → 十六进制 四位一组,不足补零,每组转为一个十六进制数字 11001.101B = 0001 1001 . 1010 = 19.AH
八进制 → 二进制 每个八进制数字展开为三位二进制 31.5O = 011 001 . 101 = 11001.101B
十六进制 → 二进制 每个十六进制数字展开为四位二进制 19.AH = 0001 1001 . 1010 = 11001.101B
快速记忆: 八进制每位对应3位二进制,十六进制每位对应4位二进制。
考试中常用中间转换: R进制 → 二进制 → 目标进制 (以二进制为桥梁)。
十六进制数字对照: A=10, B=11, C=12, D=13, E=14, F=15
2.2 浮点数表示 (IEEE 754)

浮点数结构

浮点数 = 符号位(S) + 阶码(E) + 尾数(M)
数值 = (-1)S × 1.M × 2E-偏移量

类型总位数符号位阶码尾数偏移量范围
单精度 (float) 32 位 1 位 8 位 23 位 127 约 ±3.4×1038
双精度 (double) 64 位 1 位 11 位 52 位 1023 约 ±1.7×10308
考试要点:
- 阶码决定浮点数的表示范围,尾数决定浮点数的精度
- 规格化: 尾数最高有效位为1 (IEEE 754中隐含的"1."不存储)
- 阶码全0且尾数全0 → 正零/负零;阶码全1且尾数全0 → 正无穷/负无穷
- 阶码全1且尾数非全0 → NaN (Not a Number)
2.3 CPU 组成

CPU = 运算器 + 控制器

部件组成功能
运算器 ALU (算术逻辑单元) 执行算术运算和逻辑运算
ACC (累加器) 存放运算结果或源操作数
MQ (乘商寄存器) 乘除运算时辅助存放操作数
PSW (程序状态字) 存放状态标志 (溢出OF/进位CF/零ZF/符号SF)
控制器 PC (程序计数器) 存放下一条指令的地址,自动+1
IR (指令寄存器) 存放当前正在执行的指令
MAR (地址寄存器) 存放要访问的主存单元地址
MDR (数据寄存器) 存放从主存读出/写入的数据
CU (控制单元) 分析指令并产生控制信号
指令执行过程 (必考):
取指: PC → MAR → 主存 → MDR → IR (PC自动+1)
执行: IR(操作码) → CU(译码) → 产生控制信号 → 执行运算
记忆: PC存地址,IR存指令 — PC指向"去哪取",IR保存"取到什么"
2.4 指令系统

CISC vs RISC

特征CISC (复杂指令集)RISC (精简指令集)
指令数量多 (>200条)少 (<100条)
指令长度变长定长
寻址方式多种少 (Load/Store结构)
时钟频率较低
流水线难以实现非常适合
代表x86 (Intel/AMD)ARM, MIPS, RISC-V

流水线计算 (必考计算题)

流水线周期: Δt = max(取指时间, 分析时间, 执行时间)

N 条指令执行时间:
T = 1 条指令时间 + (N-1) × 流水线周期
= (t1 + t2 + t3) + (N-1) × Δt

吞吐率: TP = N / T (单位时间完成指令数)

加速比: S = 不用流水线时间 / 用流水线时间 = N × (t1+t2+t3) / T

效率: E = N 个任务占用的时空区面积 / k 个段的总时空区面积
【练习】取指2ns, 分析3ns, 执行1ns, 执行10条指令
流水线周期 = max(2,3,1) = 3ns
T = (2+3+1) + (10-1) × 3 = 6 + 27 = 33ns
不用流水线 = 10 × 6 = 60ns
加速比 S = 60 / 33 ≈ 1.82
吞吐率 TP = 10 / 33 ≈ 0.303 条/ns
2.5 存储体系

层次结构 (速度由快到慢、容量由小到大、价格由高到低)

层次速度容量说明
寄存器最快最小CPU内部,与CPU同速
Cache (高速缓存)很快KB~MB级SRAM,解决CPU-主存速度差异
主存 (内存)中等GB级DRAM,存放正在运行的程序
辅存 (硬盘/SSD)较慢TB级永久存储,虚拟存储器的后援
Cache 命中率计算 (必考):
命中率 h = 命中次数 / (命中次数 + 未命中次数)
平均访问时间 = h × tcache + (1-h) × t主存

例: Cache访问时间10ns,主存访问时间100ns,命中率95%
平均访问时间 = 0.95 × 10 + 0.05 × 100 = 9.5 + 5 = 14.5ns

Cache 映射方式 (必考)

映射方式原理优点缺点
直接映射 主存块只能映射到固定的Cache块
Cache块号 = 主存块号 mod Cache块数
地址变换简单、速度快 冲突率高、空间利用率低
全相联映射 主存块可以映射到任意Cache块 冲突率低、利用率高 查找慢、硬件复杂
组相联映射 先按组直接映射,组内全相联
Cache组号 = 主存块号 mod Cache组数
折中方案 兼顾速度和利用率
2.6 总线与 I/O
总线分类
  • 数据总线: 传输数据,宽度决定一次传输的数据量
  • 地址总线: 传输地址,宽度决定寻址空间大小
    n根地址线 → 2n 寻址空间
  • 控制总线: 传输控制信号 (读/写/中断等)
I/O 控制方式
  • 程序查询: CPU轮询,效率最低
  • 中断方式: I/O完成后通知CPU,适合低速设备
  • DMA (直接存储器存取): 不经过CPU直接在内存和I/O间传输,适合高速设备
  • 通道方式: 专用I/O处理器,独立于CPU执行I/O操作
三、操作系统 (必考 3-5 题)
3.1 进程管理

进程三态与五态

状态说明转换条件
就绪 (Ready)已获得除CPU外的所有资源等待被调度程序选中
运行 (Running)正在CPU上执行获得CPU → 运行
阻塞 (Blocked/Waiting)等待某事件完成 (I/O等)等待资源/事件
五态模型: 新建 (New) → 就绪 → 运行 → 阻塞 → 终止 (Terminated)
关键转换 (必考):
- 运行 → 就绪: 时间片到 (被抢占)
- 运行 → 阻塞: 请求资源 (如I/O请求) (主动行为)
- 阻塞 → 就绪: I/O完成/资源可用 (被动行为,不能直接到运行)
- 就绪 → 运行: 被调度程序选中

信号量与 PV 操作 (必考)

信号量 S: 整型变量,表示可用资源数

P 操作 (wait): S = S - 1; if S < 0 then 阻塞当前进程
申请资源,资源不够就等待

V 操作 (signal): S = S + 1; if S <= 0 then 唤醒一个等待进程
释放资源,有等待者就唤醒

互斥信号量: 初值 = 1 (同一时刻只允许一个进程访问)
同步信号量: 初值 = 0 或资源数量

死锁

死锁四个必要条件说明破坏方法
互斥资源一次只能被一个进程使用通常无法破坏
占有并等待持有资源同时等待其他资源一次性申请所有资源
不可抢占已分配的资源不能被强行回收允许抢占资源
循环等待进程间形成环形等待链对资源编号,按序申请
死锁相关计算:
系统有 m 个同类资源,n 个进程,每个进程最多需要 k 个资源
不会死锁的条件: m >= n × (k-1) + 1
即: m >= n(k-1) + 1 → 安全

例: 3个进程共享9个同类资源,每个进程最多需要几个?
9 >= 3 × (k-1) + 1 → 8 >= 3(k-1) → k-1 <= 2 → k <= 3

银行家算法

银行家算法核心思想: 在分配资源前先检查分配后系统是否仍处于安全状态。
安全状态: 存在一个进程序列 P1, P2, ..., Pn,使得每个进程都能获得所需资源并完成。

做题步骤:
1. 计算各进程的 Need矩阵 = Max - Allocation
2. 找一个 Need <= Available 的进程,分配给它,完成后回收资源
3. 重复步骤2直到所有进程完成 (安全) 或找不到可满足的进程 (不安全)
3.2 存储管理
管理方式特点优点缺点
分页将内存分为固定大小的页,逻辑地址 = 页号 + 页内偏移无外部碎片有内部碎片
分段按逻辑段划分 (代码段/数据段/栈段),逻辑地址 = 段号 + 段内偏移反映逻辑结构有外部碎片
段页式先分段再分页,逻辑地址 = 段号 + 页号 + 页内偏移兼具两者优点地址变换复杂
分页地址变换:
逻辑地址 = 页号 P + 页内偏移 W
物理地址 = 页表[P] × 页面大小 + W

页表项: 页号 → 物理块号 (帧号)
快表 (TLB): 页表的高速缓存,命中率极高
访问内存有效时间 = 命中率 × (TLB访问+内存访问) + (1-命中率) × (TLB访问+两次内存访问)

页面置换算法 (必考)

算法原理特点
OPT (最佳置换) 淘汰以后最长时间不再使用的页面 理论最优,无法实现,用于比较标准
FIFO (先进先出) 淘汰最早进入内存的页面 简单,但可能产生 Belady异常 (帧数增加缺页反而增多)
LRU (最近最少使用) 淘汰最近最长时间没被访问的页面 最常考,性能接近OPT,实现开销大
CLOCK (时钟算法) 循环扫描,使用位为0则淘汰,为1则置0继续扫描 LRU的近似,开销较小
【练习 LRU】页面引用串: 7,0,1,2,0,3,0,4,2,3,3个页帧
| 7 | 0 | 1 | 2 | 0 | 3 | 0 | 4 | 2 | 3 |
| 7 | 7 | 7 | 2 | 2 | 2 | 2 | 4 | 4 | 3 |
|   | 0 | 0 | 0 | 0 | 3 | 3 | 3 | 2 | 2 |
|   |   | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
缺页次数 = 6 次 (含初始3次调入)
3.3 设备管理

SPOOLing 技术 (假脱机技术)

SPOOLing (Simultaneous Peripheral Operations On-Line) 的核心思想: 用软件方式模拟脱机I/O
将独占设备改造为共享设备 — 作业的I/O数据先写入磁盘的"输入井/输出井",再由守护进程统一调度实际的I/O操作。

应用场景: 打印机共享 (多个用户提交打印任务,按队列依次打印)。

3.4 文件管理
物理结构
  • 连续分配: 文件占用连续的磁盘块,顺序读写快,但产生外部碎片
  • 链接分配: 每个块含指向下一块的指针,无外部碎片,但不支持随机访问
  • 索引分配: 索引块记录文件所有块的地址,支持随机访问
    - 一级索引: 直接块指针
    - 二级索引: 指向一级索引块的指针
    - 三级索引: 指向二级索引块的指针
    - Unix混合索引: 直接 + 一级 + 二级 + 三级
空闲空间管理
  • 位示图法: 每个磁盘块用1位表示,0=空闲,1=占用
    计算: (字号 × 字长 + 位号) = 块号
  • 空闲链表: 将空闲块用链表串起来
  • 空闲块成组链接: Unix采用,空闲块分组管理
  • FAT (文件分配表): 表项记录下一块号,链式结构
3.5 作业调度算法
算法原理特点适用场景
FCFS (先来先服务)按到达顺序调度公平,但短作业等待时间长简单场景
SJF (短作业优先)优先选择执行时间最短的作业平均等待时间最少,但长作业可能饥饿批处理
RR (时间片轮转)就绪队列中的进程轮流执行一个时间片公平响应,时间片大小影响性能分时系统
优先级调度按优先级高低调度灵活,低优先级可能饥饿实时系统
HRRN (高响应比优先)响应比 = (等待时间+要求服务时间)/要求服务时间兼顾长短作业通用
四、数据库系统 (必考 4-6 题)
4.1 关系代数
运算符号含义SQL对应
选择σ条件(R)行过滤 — 选取满足条件的元组WHERE
投影π属性(R)列过滤 — 选取指定的属性列SELECT
自然连接R ⋈ S在公共属性上等值连接并去重复列INNER JOIN ... ON
笛卡尔积R × S每行与每行的组合CROSS JOIN
R ÷ S选取R中包含S所有属性的元组子查询 + GROUP BY + HAVING
关系代数做题技巧:
- 选择 σ → 对应 WHERE (选行)
- 投影 π → 对应 SELECT (选列)
- 连接 ⋈ → 对应 JOIN
- 运算顺序: 先选择缩小范围 (减少中间结果),再投影/连接
4.2 SQL 核心

DDL / DML / DCL

类型关键字用途
DDL (数据定义)CREATE, ALTER, DROP定义/修改/删除表结构
DML (数据操纵)SELECT, INSERT, UPDATE, DELETE查询和修改数据
DCL (数据控制)GRANT, REVOKE权限授予和回收
SQL 查询执行顺序 (必背):
FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY

聚合函数: COUNT, SUM, AVG, MAX, MIN
- 聚合函数不出现在 WHERE 中 (用 HAVING 过滤分组)
- GROUP BY 后的列才能在 SELECT 中直接出现 (除聚合函数外)
- WHERE 过滤行,HAVING 过滤组

子查询分类

类型特点关键字
标量子查询返回单个值可用于 WHERE/SELECT 中
列子查询返回一列多行IN, NOT IN, ANY, ALL
行子查询返回一行多列=, <> 等比较运算符
表子查询返回多行多列用在 FROM 子句 (派生表)
EXISTS 子查询判断子查询是否返回行EXISTS / NOT EXISTS
4.3 范式理论 (必考)
范式定义消除的依赖分解方法
1NF 每个属性都是不可分的原子值 消除重复组和数组 将非原子属性拆分
2NF 在1NF基础上,消除非主属性对候选键的部分函数依赖 部分函数依赖 分解为多个关系模式,使非主属性完全依赖于候选键
3NF 在2NF基础上,消除非主属性对候选键的传递函数依赖 传递函数依赖 将传递依赖的属性分解出去
BCNF 在3NF基础上,每个决定因素都是候选键 主属性对候选键的部分/传递依赖 分解到所有函数依赖的左部都是候选键
【练习】判断范式级别
关系模式 R(A,B,C,D),函数依赖集 F = {A→B, B→C, A→D}

分析:
候选键: A (A可决定所有属性)
非主属性: B, C, D
A→D: 完全依赖 (OK)
A→B: 完全依赖 (OK),但 B→C 且 B 不决定 A → C 对 A 是传递依赖
结论: 满足2NF (无部分依赖),不满足3NF (存在传递依赖 A→B→C)
分解为3NF: R1(A,B,D), R2(B,C)
4.4 ER 图与数据库设计

ER 图基本元素

元素图形说明
实体矩形现实世界中的对象 (学生、课程)
属性椭圆实体的特征 (学号、姓名)
主键属性加下划线
联系菱形实体间的关系 (选课)
标注联系类型: 1:1, 1:N, M:N
ER图转关系模式规则 (必考):
1. 每个实体 → 一个关系模式,属性即为列
2. 1:1 联系: 在任一端实体的关系模式中加入另一端的主键作为外键
3. 1:N 联系: 在N端实体的关系模式中加入1端的主键作为外键
4. M:N 联系: 联系本身转换为一个独立的关系模式,包含两端主键作为外键,组合为该关系模式的主键
4.5 事务与并发控制
ACID 特性含义实现机制
原子性 (Atomicity)事务是不可分割的最小单位,要么全部执行要么全部不执行日志 (undo log)
一致性 (Consistency)事务执行后数据库从一个一致状态转到另一个一致状态约束和规则
隔离性 (Isolation)并发事务之间互不干扰封锁机制
持久性 (Durability)事务提交后结果永久保存日志 (redo log)

并发问题与隔离级别

并发问题描述
脏读读到其他事务未提交的数据
不可重复读同一事务中两次读取同一数据结果不同 (其他事务修改了)
幻读同一查询返回不同的行集 (其他事务插入/删除了行)
隔离级别脏读不可重复读幻读
Read Uncommitted可能可能可能
Read Committed避免可能可能
Repeatable Read避免避免可能
Serializable避免避免避免

封锁协议

锁类型说明
S锁 (共享锁/读锁)允许多个事务同时读,阻止写。加S锁后其他事务可加S锁但不能加X锁
X锁 (排他锁/写锁)独占资源,阻止其他事务读写。加X锁后其他事务不能加任何锁
两阶段锁 (2PL)扩展阶段(只加锁不释放) → 收缩阶段(只释放不加锁),保证可串行化
4.6 数据库设计流程
需求分析
  • 明确用户的数据需求、处理需求、安全性和完整性需求
  • 产出: 数据字典、数据流图
概念结构设计
  • 将需求抽象为概念模型
  • 产出: ER图 (独立于任何DBMS)
逻辑结构设计
  • ER图 → 关系模式
  • 规范化处理 (范式分解)
  • 产出: 关系模式
物理结构设计
  • 确定存储结构、存取方法、索引设计
  • 考虑性能优化
五、数据结构与算法 (必考 5-8 题,下午大题重点)
5.1 线性表
操作顺序表链表
按值查找O(n) (无序) / O(log n) (有序可二分)O(n)
按下标访问O(1)O(n)
插入 (已知位置)O(n) (需移动元素)O(1)
删除 (已知位置)O(n) (需移动元素)O(1)
适用场景频繁查找、元素个数已知频繁插入删除、元素个数变化大
5.2 栈和队列
数据结构特性应用
栈 (Stack)LIFO (后进先出)括号匹配、表达式求值、递归调用、函数调用栈、浏览器前进后退
队列 (Queue)FIFO (先进先出)BFS、打印任务队列、进程调度
循环队列 (必考):
队空条件: front == rear
队满条件: (rear + 1) % MaxSize == front
元素个数: (rear - front + MaxSize) % MaxSize
入队: rear = (rear + 1) % MaxSize
出队: front = (front + 1) % MaxSize
注意: 牺牲一个存储单元来区分队空和队满
5.3 树

二叉树遍历 (必考)

遍历方式访问顺序记忆口诀
前序 (Pre-order)根 → 左 → 右根左右
中序 (In-order)左 → 根 → 右左根右
后序 (Post-order)左 → 右 → 根左右根
层序 (Level-order)逐层从左到右用队列实现
已知前序+中序 或 后序+中序 可以唯一确定一棵二叉树。
前序+后序不能唯一确定 (因为没有中序无法区分左右子树)。
做题方法: 前序/后序定根,中序分左右。

特殊二叉树

类型特点考试重点
哈夫曼树 带权路径长度WPL最小的二叉树 构造: 每次选权值最小的两个节点合并
哈夫曼编码: 左0右1 (或左1右0),是前缀编码
n个叶子节点的哈夫曼树有 2n-1 个节点 (无度为1的节点)
AVL树 (平衡二叉树) 任意节点的左右子树高度差 ≤ 1 平衡因子 = 左子树高度 - 右子树高度 ∈ {-1, 0, 1}
失衡时四种旋转: LL/RR/LR/RL
查找: O(log n)
B树 多路平衡查找树,节点可有多个关键字和子节点 m阶B树: 每个节点最多m个子节点
根节点至少2个子节点,其他节点至少 ⌈m/2⌉ 个子节点
所有叶子节点在同一层
B+树 B树的变体 所有数据都在叶子节点,非叶节点仅存索引
叶子节点用链表连接 → 支持范围查询
数据库索引常用B+树
5.4 图
算法类型时间复杂度适用场景核心思想
DFS (深度优先) 遍历 O(V+E) 拓扑排序、连通性判断 用栈 (递归),一条路走到底再回溯
BFS (广度优先) 遍历 O(V+E) 最短路径(无权图)、层序遍历 用队列,逐层扩展
Prim 最小生成树 O(V2) 稠密图 从一点出发,每次选最近的未加入点
Kruskal 最小生成树 O(E log E) 稀疏图 按边权排序,从小到大选不形成环的边
Dijkstra 单源最短路径 O(V2) 无负权边的图 贪心,每次选距离最小的未确定点
Floyd 所有点对最短路径 O(V3) 任意图 (可处理负权边) 动态规划,枚举中间节点
拓扑排序 有向无环图 O(V+E) 判断有无环、任务调度 入度为0的入队,删除后更新入度
关键路径 AOE网 O(V+E) 项目工期计算 最长路径 = 最短完成时间
关键路径公式:
事件最早发生时间 Ve(j) = 从源点到j的最长路径
事件最晚发生时间 Vl(j) = 从汇点倒推的最晚时间
活动最早开始时间 e(i) = Ve(弧尾事件)
活动最晚开始时间 l(i) = Vl(弧头事件) - 活动持续时间
关键活动: l(i) - e(i) = 0 (时间余量为0)
关键路径 = 所有关键活动组成的路径
5.5 排序算法对比 (必考)
算法平均时间最坏时间最好时间空间稳定性原理简述
直接插入 O(n2) O(n2) O(n) O(1) 稳定 将元素插入已排序序列的正确位置
希尔排序 O(n1.3) O(n2) O(n) O(1) 不稳定 分组插入排序,增量递减
冒泡排序 O(n2) O(n2) O(n) O(1) 稳定 相邻元素比较交换,大元素下沉
快速排序 O(n log n) O(n2) O(n log n) O(log n) 不稳定 选基准元素分区,递归排序子区
简单选择 O(n2) O(n2) O(n2) O(1) 不稳定 每次选最小元素放到前面
堆排序 O(n log n) O(n log n) O(n log n) O(1) 不稳定 建大/小顶堆,反复取堆顶
归并排序 O(n log n) O(n log n) O(n log n) O(n) 稳定 分治,递归拆分再合并有序序列
基数排序 O(d(n+r)) O(d(n+r)) O(d(n+r)) O(n+r) 稳定 按位分配收集 (LSD/MSD)
排序算法选择题快速判断:
- 问"稳定排序" → 冒泡、插入、归并、基数
- 问"最坏也是O(n log n)" → 归并、堆排序
- 问"平均最快" → 快速排序
- 问"空间O(1)" → 插入、冒泡、选择、希尔、堆排序
- 问"与初始序列无关" → 选择排序 (比较次数固定)、归并 (时间固定)
5.6 查找算法
查找方法时间复杂度适用条件说明
顺序查找O(n)无序表逐个比较
二分查找O(log n) 有序顺序表 每次比较中间元素,缩小一半范围
ASL成功 = (n+1)/n × log2(n+1) - 1
二叉排序树 (BST)平均 O(log n)
最坏 O(n)
动态查找 左子树 < 根 < 右子树
中序遍历得到有序序列
平衡二叉树 (AVL)O(log n)动态查找BST + 平衡因子 |BF| ≤ 1
哈希表平均 O(1)快速查找哈希函数 + 冲突处理

哈希冲突处理

方法原理特点
开放定址法 (线性探测)d, d+1, d+2, ... 逐个探测空位容易产生堆积 (聚集)
开放定址法 (二次探测)d, d+12, d-12, d+22, ...减少堆积
链地址法 (拉链法)每个桶维护一个链表不会堆积,删除方便,常用方法
再哈希法冲突时用另一个哈希函数冲突少但计算量大
5.7 算法设计方法 (下午大题)
方法核心思想适用条件经典问题
分治法 将大问题分解为相同结构的子问题,分别求解后合并 子问题独立,结构相同 归并排序、快排、二分查找、大整数乘法
动态规划 最优子结构 + 重叠子问题,自底向上求解,存储中间结果 最优子结构,重叠子问题 背包问题、最长公共子序列(LCS)、最短路径(Floyd)、矩阵连乘
贪心法 每步选当前最优,不回溯 贪心选择性质 + 最优子结构 Prim/Kruskal、Dijkstra、Huffman编码、活动选择
回溯法 深度优先搜索解空间,不满足约束则回溯 解空间可枚举 N皇后、0-1背包、图的着色
动态规划 vs 贪心 vs 分治:
- 动态规划: 考虑所有选择,保存中间结果,全局最优
- 贪心: 只选当前最优,不回头,局部最优不一定全局最优
- 分治: 子问题独立,不重叠 (重叠用DP)
六、软件工程 (必考 4-6 题)
6.1 软件开发模型
模型特点优点缺点适用场景
瀑布模型 线性顺序: 需求→设计→编码→测试→维护 文档驱动,管理简单 需求必须明确,后期变更代价大 需求明确、稳定的项目
增量模型 分批交付,每次交付一个可用的增量 尽早交付部分功能 需要良好的架构设计 大型项目分阶段交付
螺旋模型 风险驱动,每圈包含: 确定目标→风险评估→开发→计划 风险控制好 成本高,需要风险评估经验 大型复杂、高风险项目
喷泉模型 面向对象,迭代无间隙,各阶段可重叠 支持迭代和复用 管理困难 面向对象开发
V模型 开发与测试对应: 需求↔验收测试, 概要设计↔系统测试, 详细设计↔集成测试, 编码↔单元测试 强调测试贯穿开发 仍是线性模型 对质量要求高的项目
敏捷 (Scrum) 迭代增量,2-4周Sprint,每日站会,产品Backlog 快速响应变化 文档可能不足 需求变化频繁的项目
敏捷 (XP) 结对编程、测试驱动开发(TDD)、持续集成、小版本发布 代码质量高 对团队要求高 小团队快速开发
6.2 内聚与耦合 (必考)

内聚 (从高到低排列,越高越好)

等级类型说明
1 (最好)功能内聚模块内所有元素共同完成一个功能
2顺序内聚前一个功能的输出是后一个功能的输入
3通信内聚模块内元素操作同一数据集
4过程内聚模块内元素按特定过程顺序执行
5时间内聚模块内元素在同一时间段执行 (如初始化)
6逻辑内聚模块内元素逻辑上相关 (如所有输入操作)
7 (最差)偶然内聚模块内元素无任何关系

耦合 (从低到高排列,越低越好)

等级类型说明
1 (最好)非直接耦合模块间无直接关系,通过主模块调用
2数据耦合模块间只传递简单数据值
3标记耦合传递数据结构 (记录/对象)
4控制耦合传递控制信息 (开关/标志)
5外部耦合共享外部数据格式或设备
6公共耦合共享全局数据结构
7 (最差)内容耦合一个模块直接访问另一个模块的内部数据
6.3 软件测试
分类方法说明
黑盒测试
(不看代码)
等价类划分 将输入分为有效等价类和无效等价类,每类取代表值测试
边界值分析 重点测试边界值 (如 0, 1, -1, 最大值, 最小值)
因果图 分析输入条件的因果关系,转化为判定表
错误推测 凭经验推测可能出错的地方
白盒测试
(看代码)
语句覆盖 每条语句至少执行一次 (最弱覆盖)
判定覆盖 (分支覆盖) 每个判定的真/假分支至少执行一次
条件覆盖 每个条件的真/假至少取一次
路径覆盖 覆盖所有可能路径 (最强覆盖)
覆盖强度由弱到强: 语句覆盖 < 判定覆盖 < 条件覆盖 < 判定/条件覆盖 < 条件组合覆盖 < 路径覆盖

测试阶段

阶段对象方法参与者
单元测试模块/函数白盒为主开发人员
集成测试模块间接口灰盒开发+测试
系统测试整个系统黑盒为主测试团队
验收测试系统功能黑盒用户/客户
6.4 UML 图 (必考)
UML图类型用途关键元素
类图 (Class Diagram) 结构图 描述类的结构和类间关系 类名、属性、方法;关系: 继承、组合、聚合、依赖、关联
用例图 (Use Case Diagram) 行为图 描述系统功能和参与者 参与者(小人)、用例(椭圆)、系统边界、include/extend关系
序列图 (Sequence Diagram) 行为图 描述对象间交互的时间顺序 生命线、消息箭头、激活条、注意时间从上到下
活动图 (Activity Diagram) 行为图 描述工作流程和并发行为 动作、分支(菱形)、分叉/汇合(粗线)、泳道
状态图 (State Diagram) 行为图 描述对象生命周期中的状态变化 状态(圆角矩形)、转换箭头、事件/动作、初始/终止状态
组件图 (Component Diagram) 结构图 描述系统的物理组件及依赖 组件、接口、依赖关系
部署图 (Deployment Diagram) 结构图 描述硬件拓扑和软件部署 节点、通信路径、制品
6.5 McCabe 环路复杂度
McCabe 环路复杂度 V(G) 计算方法 (三种等价):

方法一: V(G) = 判定节点数 + 1
(判定节点: if/while/for/switch 等,case 算 n-1 个判定)

方法二: V(G) = E - N + 2 (E=边数, N=节点数,对程序流程图)

方法三: V(G) = 封闭区域数 + 1 (画成平面图后数面)
七、设计模式 (必考 2-4 题)
7.1 创建型模式
模式核心思想适用场景与其他模式区别
单例 (Singleton) 确保一个类只有一个实例,提供全局访问点 数据库连接池、日志管理器、配置管理器 最简单的创建型模式
工厂方法 (Factory Method) 定义创建对象的接口,让子类决定实例化哪个类 需要根据条件创建不同对象时 vs 抽象工厂: 只创建一种产品
抽象工厂 (Abstract Factory) 创建一组相关/相互依赖的对象族,无需指定具体类 跨平台UI组件族、数据库适配器 vs 工厂方法: 创建一族产品
建造者 (Builder) 将复杂对象的构建与表示分离,逐步构建 构建复杂对象 (如StringBuilder、SQL查询构建器) vs 抽象工厂: 关注构建过程而非产品族
原型 (Prototype) 通过克隆已有对象来创建新对象 创建成本大的对象、需要保留历史版本 通过clone()而非new创建
7.2 结构型模式
模式核心思想适用场景与其他模式区别
适配器 (Adapter) 接口转换,使不兼容的接口能协同工作 集成已有类,接口不匹配时 事后补救,类适配器(继承)/对象适配器(组合)
桥接 (Bridge) 将抽象与实现分离,使两者可独立变化 多维度变化的系统 (如形状×颜色) vs 适配器: 事先设计而非事后补救
组合 (Composite) 将对象组合成树形结构,统一对待单个和组合对象 文件系统、组织架构、菜单树 树枝和叶子实现同一接口
装饰器 (Decorator) 动态添加功能,比继承更灵活 IO流 (Java的BufferedInputStream)、功能扩展 vs 代理: 装饰器增强功能,代理控制访问
外观 (Facade) 为子系统提供统一的高层接口 简化复杂子系统的使用 不封装子系统,只提供简化入口
享元 (Flyweight) 共享对象减少内存消耗 大量相似对象 (如字符串池、线程池) 区分内部状态(共享)和外部状态(不共享)
代理 (Proxy) 控制对对象的访问,不直接访问目标对象 远程代理、虚拟代理(延迟加载)、保护代理 vs 装饰器: 代理控制访问,装饰器增强功能
7.3 行为型模式
模式核心思想适用场景
责任链 (Chain of Responsibility) 请求沿链传递,直到有对象处理 审批流程、异常处理、日志处理
命令 (Command) 将请求封装为对象,支持撤销/重做/排队 菜单操作、宏命令、事务操作
解释器 (Interpreter) 定义语言的文法表示和解释器 SQL解析、正则表达式、表达式计算
迭代器 (Iterator) 顺序访问集合元素,不暴露内部结构 遍历容器、STL迭代器
中介者 (Mediator) 用一个中介对象封装对象间的交互 聊天室、GUI组件通信、机场调度
备忘录 (Memento) 保存和恢复对象状态 撤销操作、游戏存档
观察者 (Observer) 一对多依赖,状态变化自动通知 事件系统、MVC模型、消息订阅
状态 (State) 对象行为随状态改变而变化 订单状态机、TCP连接状态、自动售货机
策略 (Strategy) 封装算法族,可互换 支付方式选择、排序算法选择、折扣策略
模板方法 (Template Method) 定义算法骨架,子类实现具体步骤 框架设计、JUnit测试、Servlet的doGet/doPost
访问者 (Visitor) 在不改变类的前提下增加操作 编译器AST遍历、报表生成
设计模式做题技巧:
1. 下午题考设计模式通常给出场景和代码框架,要求识别模式并填空
2. 根据关键线索判断: "创建对象不指定类" → 工厂;"统一接口" → 外观/适配器;"一对多通知" → 观察者
3. 最常考: 策略、观察者、工厂方法、适配器、装饰器、单例
八、系统架构 (高级专属)
8.1 架构风格
架构风格子类型核心特点典型应用
数据流风格 管道-过滤器
批处理
数据在组件间流动,每个组件对数据进行变换 Unix管道 | 编译器 (词法→语法→语义→代码生成)
调用/返回风格 主程序-子程序
面向对象
层次结构
显式调用,请求-响应模式 传统过程式程序 | OOP系统 | TCP/IP协议栈、OSI七层
独立构件风格 进程通信
事件驱动
构件间不直接调用,通过事件/消息间接通信 GUI事件处理 | 观察者模式 | 消息队列
虚拟机风格 解释器
规则系统
通过自定义的解释引擎执行自定义语言/规则 JVM解释器 | 正则引擎 | 专家系统
仓库风格 数据库系统
黑板系统
中心数据存储,构件通过共享数据交互 数据库应用 | 语音识别黑板系统
8.2 质量属性与战术
质量属性含义关键战术
性能 系统响应速度 增加计算资源、减少计算开销 (缓存、并发)、控制资源调度
可用性 系统正常运行时间 冗余 (热备/冷备/温备)、心跳检测、选举、状态同步
安全性 抵抗攻击的能力 认证、授权、加密、审计、入侵检测
可修改性 修改的难易程度 信息隐藏、维持语义一致性、延迟绑定、抽象
易用性 用户使用系统的难易 支持用户主动操作 (撤销/回滚)、系统主动支持 (提示/向导)
可测试性 验证系统的难易 记录/回放、将接口与实现分离、内置监控
系统可靠性计算:
串联系统: R = R1 × R2 × ... × Rn (整体可靠性低于最差部件)
并联系统: R = 1 - (1-R1) × (1-R2) × ... × (1-Rn) (整体可靠性高于最佳部件)
8.3 分布式架构
C/S vs B/S
  • C/S (客户端/服务器): 需安装客户端,性能好,维护难
  • B/S (浏览器/服务器): 浏览器访问,零安装,易维护
  • 趋势: B/S 为主,C/S 用于高性能场景
SOA 与微服务
  • SOA (面向服务架构): 服务粗粒度,ESB总线,强调复用
  • 微服务: 服务细粒度,独立部署,去中心化
  • 微服务特点: 独立数据库、独立部署、技术栈可选、自动化运维
  • 微服务挑战: 分布式事务、服务发现、链路追踪
REST 与消息队列
  • REST: 基于HTTP的无状态架构风格,资源 + 动词 (GET/POST/PUT/DELETE)
  • 消息队列 (MQ): 异步解耦、削峰填谷
  • MQ模型: 点对点 (Queue) vs 发布/订阅 (Topic)
  • 常见MQ: RabbitMQ, Kafka, RocketMQ
九、网络与安全 (必考 2-4 题)
9.1 网络分层模型
OSI 七层TCP/IP 四层协议设备数据单位
应用层应用层HTTP, FTP, SMTP, DNS, Telnet, POP3网关报文
表示层加密/压缩/格式转换网关
会话层建立/管理/终止会话网关
传输层传输层TCP (可靠), UDP (快速)端口号段(Segment)
网络层网际层IP, ICMP, ARP, OSPF路由器包(Packet)
数据链路层网络接口层Ethernet, PPP, MAC交换机/网桥帧(Frame)
物理层比特流传输集线器/中继器比特(Bit)
9.2 IP 地址与子网划分
类别首字节范围默认子网掩码网络数每网络主机数
A类1-126255.0.0.0 (/8)126224-2 ≈ 1600万
B类128-191255.255.0.0 (/16)214216-2 = 65534
C类192-223255.255.255.0 (/24)22128-2 = 254
D类 (组播)224-239
E类 (保留)240-255
子网划分计算 (必考):
借n位做子网号 → 划分 2n 个子网
剩余m位做主机号 → 每个子网 2m - 2 台主机 (减去网络地址和广播地址)

CIDR (无类域间路由): IP/前缀长度
如 192.168.1.0/24 → 前24位为网络号,后8位为主机号
192.168.1.0/26 → 借2位 → 4个子网,每子网 62 台主机
IPv6 特点:
- 128位地址 (vs IPv4的32位),地址空间极大
- 简化头部格式,提高路由效率
- 内置IPSec安全支持
- 取消了广播,用组播和任播替代
- 自动配置 (无状态地址自动配置 SLAAC)
9.3 安全技术
加密类型代表算法特点密钥管理
对称加密 DES (56位), 3DES, AES 加密解密用同一密钥,速度快 密钥分发困难
非对称加密 RSA, ECC, DSA 公钥加密、私钥解密 (或反之) 公钥公开,私钥保密
混合加密 SSL/TLS 非对称加密传密钥 + 对称加密传数据 兼顾安全性和效率

数字签名与数字证书

数字签名: 用发送方私钥加密摘要 → 确认身份、保证完整性、不可抵赖
数字证书: 由CA (证书颁发机构) 签发,绑定公钥与身份
PKI (公钥基础设施): CA + 证书库 + 密钥备份恢复系统 + 证书撤销列表(CRL)

SSL/TLS 握手过程:
1. 客户端发送支持的加密算法列表
2. 服务器选择算法并发送证书
3. 客户端验证证书 (CA签名)
4. 客户端生成会话密钥,用服务器公钥加密后发送
5. 双方用会话密钥进行对称加密通信
9.4 网络安全设备
防火墙
  • 包过滤: 基于IP/端口/协议过滤,速度快但无法检测应用层攻击
  • 应用代理: 深度检测应用层内容,安全但速度慢
  • 状态检测: 跟踪连接状态,结合包过滤的效率和代理的安全
入侵检测 (IDS) 与 VPN
  • IDS: 监测和分析入侵行为,但不阻断 (入侵防御系统IPS可阻断)
  • 入侵检测方法: 异常检测 (基于行为模型) + 误用检测 (基于特征库)
  • VPN: 在公共网络上建立加密隧道,使用IPSec或SSL/TLS
十、数学与知识产权
10.1 数学基础
考点核心公式/概念典型题型
排列组合 排列 P(n,r) = n! / (n-r)!
组合 C(n,r) = n! / (r!(n-r)!)
排列"有序",组合"无序"
从10人中选3人排队 vs 从10人中选3人组队
概率 P(A∪B) = P(A) + P(B) - P(A∩B)
条件概率: P(A|B) = P(A∩B) / P(B)
贝叶斯公式: P(A|B) = P(B|A)×P(A) / P(B)
条件概率计算、全概率公式
矩阵 矩阵乘法、逆矩阵、行列式 线性方程组求解、状态转移矩阵
图论 最短路径、最小生成树、欧拉回路、哈密顿回路 与数据结构图算法结合考
10.2 知识产权
权利类型核心要点保护期限取得方式
著作权 (版权) 自动取得 (创作完成即享有,无需注册)
人身权: 发表权、署名权、修改权、保护作品完整权
财产权: 复制权、发行权、出租权、信息网络传播权等
个人: 作者终身+死后50年
单位: 发表后50年
署名权/修改权/保护完整权: 永久
自动取得
专利权 先申请原则 (不是先发明)
三种: 发明 (20年)、实用新型 (10年)、外观设计 (15年)
发明: 20年
实用新型: 10年
外观设计: 15年
申请+审查
商标权 注册原则 (注册后享有专用权)
注册有效期10年,可续展
10年 (可续展) 注册取得
商业秘密 不为公众知悉、有商业价值、采取保密措施 无期限 (只要保密) 自动取得
软件著作权常考要点:
- 软件著作权自开发完成之日起产生 (非发表日、非注册日)
- 委托开发的软件: 合同约定归属,无约定则归受托人 (开发者)
- 职务作品: 一般归单位享有,作者享有署名权
- 合作开发: 共同享有,不可分割则协商一致后行使
十一、下午案例分析备考策略
11.1 软件设计师下午题型
题型做题方法得分技巧
数据流图补充 1. 先读题目说明,理解系统功能
2. 看顶层DFD,理解外部实体和系统边界
3. 按"数据平衡原则"补充: 父图与子图的输入输出必须一致
4. 找缺失的数据流: 检查每个加工的输入输出是否完整
- 外部实体通常是"人"或"系统"
- 数据存储通常是"XX表""XX文件""XX库"
- 数据流必须有箭头方向
数据库设计 1. 先看ER图,识别实体和联系
2. 按规则转关系模式 (1:1/1:N/M:N)
3. 判断主键和外键
4. 分析是否满足范式要求
- M:N联系必须独立成表
- 外键通常在N端
- 注意: 主键不能为空,外键必须参照主键
UML建模 1. 识别图的类型 (类图/序列图/状态图)
2. 理解场景描述中的对象和交互
3. 按描述补充缺失的类/方法/消息/状态
- 类图: 注意多态和继承关系
- 序列图: 时间从上到下
- 状态图: 注意转换条件和动作
算法填空 1. 先读算法说明,理解算法目标
2. 通读代码结构,理解变量含义
3. 手动模拟执行过程,找出缺失语句
4. 注意边界条件 (i=0, i=n-1)
- 循环不变式是关键线索
- 注意变量初始化
- 时间复杂度分析要会写
面向对象设计 1. 识别设计模式 (从类名和结构猜)
2. 理解类之间的关系
3. 填空: 补充方法实现或类定义
- 常考: 策略、工厂、观察者、适配器
- 熟悉C++/Java语法
- 抽象类/接口的子类实现
11.2 系统架构设计师下午题型
题型做题方法得分技巧
架构设计 1. 分析系统需求和约束
2. 选择合适的架构风格并说明理由
3. 画出架构图并标注组件
4. 分析质量属性如何满足
- 架构风格选择要紧扣场景
- 质量属性战术要具体
- 对比方案时列出优缺点
数据库设计 1. 分析业务场景的数据需求
2. 设计ER模型和关系模式
3. 考虑分布式/高并发场景
4. 分析性能优化策略
- 分库分表策略
- 读写分离
- 缓存策略 (Redis)
系统分析 1. 需求分析与用例建模
2. 系统可行性分析
3. 方案对比与选型
- 给出多个方案时逐项对比
- 用表格形式呈现更清晰
11.3 通用答题策略
时间分配
  • 软件设计师 (150分钟):
    题1数据流图: 30min
    题2数据库: 30min
    题3 UML/算法: 30min
    检查: 10min
    剩余时间补第四题
  • 系统架构师 (90分钟):
    每题约25min,留15min检查
得分策略
  • 选择自己最擅长的题先做 (下午选答题)
  • 填空题: 宁可写简单答案也不留空白
  • 计算题: 写清公式和步骤,即使结果错也有步骤分
  • 问答题: 分条回答 (1. 2. 3.),不要写大段文字
  • 画图题: 元素命名清晰,关系标注明确
易错点汇总
  • 数据流图: 数据流的箭头方向画反 → 仔细审题
  • 数据库: 主键/外键判断错误 → 先找候选键
  • UML: 混淆组合(实心菱形)和聚合(空心菱形)
  • 算法: 边界条件 (i从0还是1开始, < 还是 <=)
  • 设计模式: 代码填空时多态方法的重写签名要一致
  • 架构: 架构风格的选用理由要紧扣质量属性需求
备考总结:

上午选择题策略: 计算机组成(3-5分) + 操作系统(3-5分) + 数据库(4-6分) + 数据结构(5-8分) + 软件工程(4-6分) = 约 19-30 分,占上午总分的 25%-40%。技术知识是上午题的绝对核心。

下午案例题策略: 数据流图(必答) + 选自己最擅长的2道。算法填空和面向对象设计是大多数考生的首选。

备考优先级:
1. 数据结构与算法 (上午+下午占比最大)
2. 数据库系统 (上午+下午都有)
3. 软件工程/UML (上午+下午都有)
4. 操作系统 (上午为主)
5. 计算机组成 (上午为主,计算题)
6. 设计模式 (结合面向对象一起学)
7. 网络与安全 (上午为主)
8. 数学与知识产权 (考前速记即可)

刷题建议: 近 5 年真题做 2 遍。第一遍按模块 (先攻克薄弱模块),第二遍按套卷模拟。错题归类到具体知识点,反复巩固。