计算题是系统架构设计师综合知识里的”白给分专区“——每年加起来约 8~12 道(计算机系统 56 道、计算机网络 23 道、项目管理 23 道、软件度量/可靠性 12 道),全是套公式的题,会公式就是送分,不会就是一道都拿不到。这篇把五大类高频计算题的公式、解题步骤、典型例题打包在一起,外加一张考前速记公式卡。内容来自开源仓库 PeterGuy326/senior-software-architect-review。回到 软考导览页 看完整专题清单。

一、计算机系统计算(每年 5~6 道,重灾区)

1. Cache 命中率与平均访问时间

  • 平均访问时间 T = h · Tc + (1 − h) · Tm,其中 h = 命中率,Tc = Cache 访问时间,Tm = 主存访问时间。
  • 若题目说”未命中要先访问主存再装入 Cache”,则 T = h · Tc + (1 − h) · (Tm + Tc)(注意题干口径)。
  • 命中率 = 命中次数 / 总访问次数。
  • 映射方式:直接映射(块号 mod Cache 行数)/ 全相联 / 组相联(块号 mod 组数);替换算法:LRU / FIFO / OPT / 随机。

例:命中率 95%,Cache 周期 10ns,主存周期 100ns → T = 0.95×10 + 0.05×100 = 9.5 + 5 = 14.5 ns

2. 流水线(指令执行时间 / 吞吐率 / 加速比)

设流水线分 k 段、每段时间 Δt(取最长一段为节拍)、执行 n 条指令:

指标 公式
执行总时间 T = (k + n − 1) · Δt
吞吐率 TP = n / T = n / [(k + n − 1)·Δt],最大吞吐率 TP_max = 1/Δt
加速比 S = 顺序执行时间 / 流水线时间 = (n·k·Δt) / [(k + n − 1)·Δt] = nk / (k + n − 1)
效率 E = (n·k) / [k·(k + n − 1)] = S / k

注意:各段时间不等时,节拍 Δt 取最慢的那一段;如果题目给的是”取指 2ns、分析 2ns、执行 3ns”,则 Δt = 3ns,且严格说 T = 第一条完整走完(2+2+3) + (n−1)×3。考试中按 (k + n − 1)·Δt 套即可,Δt 用最大段时间。

3. 海明码(校验位数)

  • 设数据位 m 位、校验位 k 位,需满足 2^k ≥ m + k + 1,求最小的 k。
  • 海明码可检测多位错、纠正 1 位错;CRC 检多位错但不纠错;奇偶校验只能检 1 位错、不能纠错。

例:m = 8 → 试 k=4:2^4=16 ≥ 8+4+1=13 ✓;k=3:2^3=8 ≥ 8+3+1=12 ✗。所以最少需要 4 位校验位。

4. 数的表示范围(定点 / 浮点)

  • n 位补码整数范围:−2^(n−1) ~ 2^(n−1) − 1(如 8 位补码:−128 ~ +127)。
  • n 位原码 / 反码−(2^(n−1) − 1) ~ +(2^(n−1) − 1)(有 +0/−0)。
  • 浮点数:精度由尾数位数决定,表示范围由阶码位数决定;规格化是为了提高精度(尾数最高位为有效位)。

5. 磁盘存取时间

存取时间 = 寻道时间 + 旋转延迟 + 数据传输时间

  • 平均旋转延迟 = 旋转一周时间 / 2(如 7200 rpm → 一周 ≈ 8.33 ms → 平均延迟 ≈ 4.17 ms)。
  • 读取一个扇区/磁道的传输时间 = 数据量 / 传输速率,或 = 旋转一周时间 ×(扇区占整道的比例)。
  • 磁盘调度算法:FCFS / SSTF(最短寻道)/ SCAN(电梯)/ C-SCAN,比较平均寻道距离。

6. 可靠性计算(串联 / 并联 / N 取 K)

结构 系统可靠性 R
串联(任一失效则系统失效) R = R₁ · R₂ · … · Rn(越串越低)
并联(冗余备份) R = 1 − (1−R₁)(1−R₂)…(1−Rn)(越并越高)
混联 先算并联子系统,再当作串联的一环
N 取 K 表决 R = Σ_{i=K}^{N} C(N,i) · R^i · (1−R)^(N−i)

例:3 个可靠度均为 0.9 的部件并联 → R = 1 − (1−0.9)^3 = 1 − 0.001 = 0.999;若串联 → R = 0.9^3 = 0.729

7. 性能指标 & Amdahl 定律

  • MIPS = 每秒百万条指令 = 指令数 /(执行时间 ×10⁶)= 主频 / CPI ×10⁻⁶;MFLOPS = 每秒百万次浮点运算。
  • 响应时间(从请求到收到首字节)、吞吐量(单位时间完成的事务数)。
  • Amdahl 定律(系统某部分加速对整体的影响):总加速比 S = 1 / [(1 − f) + f / k],f = 可优化部分占比,k = 该部分的加速倍数。当 k→∞,S_max = 1 / (1 − f)

例:某程序 60% 的部分可并行、加速 4 倍 → S = 1 / [0.4 + 0.6/4] = 1 / 0.55 ≈ 1.82 倍

二、计算机网络计算(每年 2~3 道)

1. 子网划分(IPv4)

  • 主机位 n 位 → 每个子网可用主机数 = 2ⁿ − 2(去掉网络号和广播地址)。
  • m 位主机位做子网 → 可划分 2ᵐ 个子网;新掩码 = 原掩码 + m 位。
  • CIDR 聚合:把多个连续网段合并,取它们二进制的公共前缀长度。

例:192.168.1.0/24 要划 4 个子网 → 借 2 位 → /26(255.255.255.192)→ 子网 .0~.63.64~.127.128~.191.192~.255,每个子网可用主机 = 2⁶ − 2 = 62 个。

2. 数据传输时间 / 带宽

  • 传输时间 ≈ 数据量 / 带宽 + 传播时延(远距离/卫星链路要算传播时延,近距离常可忽略)。
  • 注意单位换算:1 Byte = 8 bit;带宽常以 bps(bit/s)给出,文件大小常以 Byte 给出。
  • 停止-等待协议信道利用率 U = T_发送 / (T_发送 + 2×T_传播 + T_处理);连续 ARQ 用窗口提高利用率。

例:传 10 MB(= 10 × 8 = 80 Mbit)文件,带宽 100 Mbps,传播时延忽略 → 时间 ≈ 80 / 100 = 0.8 秒

3. 香农 / 奈奎斯特(偶尔考)

  • 奈奎斯特(无噪声):极限速率 = 2 × W × log₂N(W 带宽,N 码元状态数)。
  • 香农(有噪声):极限速率 = W × log₂(1 + S/N)(S/N 为信噪比,注意 dB 与功率比的换算:(S/N)dB = 10·log₁₀(S/N))。

三、项目管理计算(每年 2~3 道,必拿)

1. 关键路径法(CPM)

参数 含义 / 公式
ES(最早开始) = max(所有前置活动的 EF);起点活动 ES = 0
EF(最早完成) = ES + 工期
LF(最晚完成) = min(所有后续活动的 LS);终点活动 LF = 项目工期
LS(最晚开始) = LF − 工期
总时差 TF = LS − ES = LF − EF(活动可拖延而不影响总工期的时间)
自由时差 FF = (后继活动的最早 ES) − 本活动 EF
  • 关键路径 = 从开始到结束耗时最长的路径,也就是总时差 = 0 的活动串成的路径;可能不止一条
  • 关键路径上任一活动延误,项目工期就延误(除非用赶工/快速跟进)。

解题套路:① 正向算 ES/EF(取 max)→ ② 反向算 LF/LS(取 min)→ ③ TF = LS − ES,TF = 0 的就是关键活动 → ④ 关键路径长度 = 项目最短工期。

2. PERT 三点估算

  • 期望工期 TE = (O + 4M + P) / 6(O 乐观、M 最可能、P 悲观)。
  • 标准差 σ = (P − O) / 6方差 σ² = [(P − O) / 6]²
  • 项目总工期期望 = 各关键活动 TE 之和;总方差 = 各关键活动方差之和(标准差 = 总方差开方)。

例:O=4、M=6、P=8 → TE = (4 + 24 + 8)/6 = 6;σ = (8−4)/6 ≈ 0.67

3. 挣值管理(EVM)

三个基础值:PV(计划值,到当前应完成工作的预算)、EV(挣值,已完成工作的预算 = BAC × 实际完成百分比)、AC(实际成本)。

公式 含义(口诀:偏差用减、指数用除;EV 永远在前)
SV = EV − PV 进度偏差:> 0 进度超前,< 0 落后
CV = EV − AC 成本偏差:> 0 成本节约,< 0 超支
SPI = EV / PV 进度绩效指数:> 1 超前
CPI = EV / AC 成本绩效指数:> 1 节约
EAC = BAC / CPI 完工估算(按当前成本绩效推算总成本)
ETC = EAC − AC 完工尚需成本
VAC = BAC − EAC 完工偏差

例:BAC = 10 万;某检查点计划完成 50%(PV = 5 万),实际完成 40%(EV = 10×40% = 4 万),实际花了 5.5 万(AC = 5.5 万)→ SV = 4 − 5 = −1 万(落后);CV = 4 − 5.5 = −1.5 万(超支);SPI = 4/5 = 0.8;CPI = 4/5.5 ≈ 0.73;EAC = 10/0.73 ≈ 13.7 万;ETC ≈ 13.7 − 5.5 = 8.2 万

4. 成本估算方法(概念题,常和上面一起考)

类比估算(靠历史相似项目)/ 参数估算(靠规模 × 单位成本等公式)/ 自下而上估算(按 WBS 逐项汇总)/ 三点估算(PERT)。

四、软件度量计算(每年约 1~2 道)

1. 功能点(FP)

  • 识别 5 类成分并计数:内部逻辑文件 ILF、外部接口文件 EIF、外部输入 EI、外部输出 EO、外部查询 EQ
  • 未调整功能点 UFP = Σ(每类成分项数 × 该类权重)(权重按复杂度低/中/高查表)。
  • 调整功能点 AFP = UFP × (0.65 + 0.01 × ∑F),∑F 是 14 个一般系统特征的影响度之和(05 各,∑F 范围 070,所以调整因子 0.65~1.35)。

2. McCabe 圈复杂度 V(G)

三种等价算法(任选其一,结果相同):

  • V(G) = 边数 E − 节点数 N + 2
  • V(G) = 判定节点数 P + 1(二元判定)
  • V(G) = 控制流图中封闭区域数 + 1

判定:110 简单易测;1120 中等;21~50 复杂;> 50 不可测、必须重构。圈复杂度也等于独立路径数(基本路径测试用例下限)。

例:某模块控制流图有 11 条边、9 个节点 → V(G) = 11 − 9 + 2 = 4,即至少需要 4 条独立路径的测试用例。

3. 其他常考小公式

  • 缺陷密度 = 缺陷数 / KLOC(千行代码)。
  • COCOMO 基本模型 工作量 PM = a × (KLOC)^b(a、b 按项目类型:组织型/半嵌入型/嵌入型查表);进度 TDEV = c × PM^d
  • 测试覆盖强度由弱到强:语句覆盖 < 判定覆盖 < 条件覆盖 < 判定/条件覆盖 < 条件组合覆盖 < 路径覆盖。

五、典型例题(限时自测)

例 1(流水线):某 5 段流水线,每段耗时 2ns,连续执行 100 条指令,求执行时间与加速比。

T =(5 + 100 − 1)×2 = 104×2 = 208 ns;顺序执行 = 100×5×2 = 1000 ns;加速比 S = 1000 / 208 ≈ 4.8

例 2(Cache):访问 1000 次内存,命中 970 次,Cache 周期 5ns、主存周期 60ns(未命中只算访问主存),求命中率和平均访问时间。

命中率 = 970/1000 = 97%;T = 0.97×5 + 0.03×60 = 4.85 + 1.8 = 6.65 ns

例 3(可靠性):系统由 A、B 两个子系统串联,A 是两个可靠度 0.9 的部件并联,B 可靠度 0.95,求系统可靠度。

R_A = 1 − (1−0.9)² = 0.99;R_系统 = R_A × R_B = 0.99 × 0.95 = 0.9405

例 4(关键路径):活动 A(3)→C(2),B(4)→C;C→D(5)。求项目最短工期。

路径 A-C-D = 3+2+5 = 10;路径 B-C-D = 4+2+5 = 11 → 关键路径 B-C-D,最短工期 11;A 的总时差 = 11−10 = 1。

例 5(挣值):BAC = 80 万,进度过半时 PV = 40 万、EV = 32 万、AC = 36 万。判断进度/成本状态并估算 EAC。

SV = 32 − 40 = −8 万(落后);CV = 32 − 36 = −4 万(超支);CPI = 32/36 ≈ 0.89;EAC = 80 / 0.89 ≈ 89.9 万(预计超支约 10 万)。

例 6(海明码):要校验 16 位数据,至少需要多少校验位?

2^5 = 32 ≥ 16 + 5 + 1 = 22 ✓;2^4 = 16 ≥ 16 + 4 + 1 = 21 ✗ → 最少 5 位

六、考前速记公式卡

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Cache:T = h·Tc + (1−h)·Tm                         命中率 = 命中/总
流水线:T=(k+n−1)Δt TP=n/T S=nk/(k+n−1) E=S/k Δt 取最慢段
海明码:2^k ≥ m+k+1(求最小 k) 海明纠1检多 / CRC检多不纠 / 奇偶检1
补码范围:−2^(n−1) ~ 2^(n−1)−1
磁盘:存取 = 寻道 + 旋转延迟(转一周/2) + 传输
可靠性:串联 ΠRi 并联 1−Π(1−Ri)
Amdahl:S = 1 / [(1−f) + f/k] S_max = 1/(1−f)
子网:每子网可用主机 = 2ⁿ−2 借 m 位 → 2ᵐ 个子网
传输时间 ≈ 数据量/带宽 + 传播时延(注意 Byte↔bit)
CPM:ES=max(前EF) EF=ES+t LF=min(后LS) LS=LF−t TF=LS−ES 关键路径 TF=0 且最长
PERT:TE=(O+4M+P)/6 σ=(P−O)/6 σ²=[(P−O)/6]²
EVM:SV=EV−PV CV=EV−AC SPI=EV/PV CPI=EV/AC EAC=BAC/CPI ETC=EAC−AC
功能点:UFP=Σ(项数×权重) AFP=UFP×(0.65+0.01·∑F)
圈复杂度:V(G)=E−N+2 = 判定数+1 = 区域数+1 = 独立路径数
COCOMO:PM = a·(KLOC)^b

配套速查表:cheatsheets/computer-systems-formulas.md · project-management-calculations.md · software-metrics.md · networking.md


软考专题系列第 7 篇。计算题是综合知识里最稳的一块——把上面那张公式卡背熟,这 8~12 分基本是囊中之物。同系列:架构评估 ATAM · 架构风格对比 · 微服务与云原生 · 数据库设计 · 消息中间件与缓存 · 法律法规与标准化。完整清单见 软考导览页。发现公式/例题错误欢迎到 仓库 开 issue。