2024上半年系统分析师综合知识真题考点与易错点梳理
简介:面向备考系统分析师软考中高级考生的历年真题资料,聚焦2024年上半年综合知识科目,提供24道选择题的答案与逐题解析,可用于考前自测、考点梳理和薄弱环节定位。内容覆盖企业信息化战略、RISC指令集、数据通路、总线类型、SATA接口、进程状态、页面置换、死锁、信道容量、IPSec、RAID、关系数据库、事务属性等核心知识,同时涉及编译目标程序地址、局域网拓扑、FTP协议、数据分片、元组演算、管道输油能力、密钥管理、Web3.0与服务建模、模块内聚等考点。解析中标注正确选项并说明判断依据,便于对照错题回溯教材,也能帮助按知识域整理高频结论。资源包共1个docx文档,约46KB,轻量易检索,适合打印或导入笔记软件复习。当前已有676人学习下载,可作为临考冲刺阶段集中查漏补缺的练习材料。
1. 知识地图:系统分析师综合知识到底考哪几块
2024 上半年这套系统分析师综合知识真题,七十多道选择题摊开看是五块拼图:计算机硬件与体系结构、操作系统、网络与信息安全、数据库与系统工程,再加一点企业信息化与系统设计方法论。每一块都只涉及一个方面——RISC 的指令特征、总线按功能怎么分、FIFO 页面置换缺几次页、香农公式里 30dB 先换成 1000 倍、RAID5 的校验盘独立不独立、元组演算怎么做德摩根变形,最后还涉及一道最大流和一道抽屉原理的计数。
最反直觉的地方在于:真正拉开差距的往往不是那道最大流,而是一堆“看着眼熟、答起来含糊”的半熟点。指令长度固定不固定、寄存器间接寻址的操作数到底在哪里、数据分片的原则里有没有“相交性”,这些点背过一遍就以为掌握了,考场上却常在两个选项间出错。这份笔记按模块把考点摆开,给已经过了一遍教材、现在要做体系梳理的人:先看地图,再逐块补细节,最后用易错点和复习清单检查是否还有遗漏。
2. 硬件与体系结构:RISC、总线、数据通路与 RAID 的密集考点
这一块是整张卷子里“名词密度最高、单题分值最低”的区域,二十道题里能占掉六七道。它的特点是很适合用表格来记忆:把对比维度列成列,把 RISC 和 CISC、SATA 和 IDE、RAID3 和 RAID5 分别填进去,考场上无论从哪个维度出题,都能顺着表格反推。复习时如果只是把“RISC 指令少、寻址方式少、指令简单”当口诀背,遇到反向表述(“以下说法不正确的是”)就会犹豫,所以下面每个点都尽量给出“为什么”和“对比项”。
2.1 RISC 与 CISC:一条“指令长度不固定”就能决定答案
真题里那道 RISC 题的四个选项——指令数量少、寻址方式少、指令简单、指令长度不固定——前三个是 RISC 的标准特征,第四个恰好说反了。RISC 的全称就是精简指令集,它用定长指令换取流水线的整齐:每条指令长度一致,取指单元不用先解析长度就能一次取多条进流水线,译码阶段也不用等边界对齐。CISC 则相反,指令长度可变,硬件解码复杂度高,通常靠微程序控制器来实现。
把两者的差别整理成一张对照表,比背四条口诀更可靠:
| 对比维度 | RISC | CISC |
|---|---|---|
| 指令数量 | 少,通常几十到一百多条 | 多,可达数百条 |
| 指令长度 | 固定 | 可变 |
| 寻址方式 | 少而简单 | 多而复杂 |
| 访存指令 | 只有 LOAD / STORE 访存 | 多数指令可直接访存 |
| 通用寄存器数量 | 多 | 相对少 |
| 控制器实现 | 硬布线为主 | 微程序为主 |
| 流水线 | 容易实现,指令周期整齐 | 较难,需处理变长与复杂依赖 |
| 对编译器的依赖 | 高,靠编译器调度指令 | 低,硬件承担更多工作 |
表格里最容易忽略的是最后一行。“RISC 把复杂度推给编译器”这句话在案例分析里经常被拿来当论据:同样的高级语言程序,在 RISC 机器上编译出来的指令条数更多,但每条更简单、更规整。也因此,RISC 机器的性能对编译优化质量非常敏感,这一点常被出成“以下关于 RISC 的说法正确的是”的干扰项。
2.2 数据通路、控制器与寻址方式:三个概念不要混成一团
数据通路(datapath)的功能,是实现 CPU 内部运算器与寄存器之间、以及寄存器与寄存器之间的数据交换。它是一条“搬数据的路”,由内部总线、多路选择器、暂存器和 ALU 的输入输出端口组成;控制器则是“发号施令的人”,负责取指令、分析指令、产生控制信号。题干把这两个概念放在一起考,就是看你能不能分清“搬数据”和“发信号”。
取指令这条链路值得完整记一遍:程序计数器 PC 把地址送到地址寄存器 MAR,经地址总线到主存;主存把指令送到数据总线、进数据寄存器 MDR,再送入指令寄存器 IR;同时 PC 自增,指向下一条指令。控制器拿到 IR 里的操作码后译码,产生后续的控制信号。这也是“控制器负责将程序指令从主存取到 CPU 执行”这句答案的由来——取指动作由控制器发起和协调,不是运算器也不是高速缓存。
寻址方式这一块,最容易出错的是“操作数到底在哪”。整理成下表:
| 寻址方式 | 操作数存放位置 | 典型形式 |
|---|---|---|
| 立即寻址 | 指令本身(操作数就是立即数) | MOV R1, #5 |
| 寄存器直接寻址 | 通用寄存器中 | MOV R1, R2 |
| 寄存器间接寻址 | 主存单元中(地址在寄存器里) | MOV R1, (R2) |
| 直接寻址 | 主存单元中(地址在指令里) | MOV R1, [1000] |
| 间接寻址 | 主存单元中(地址在内存单元里) | MOV R1, @1000 |
| 变址寻址 | 主存单元中(变址寄存器 + 偏移量) | MOV R1, [R2+4] |
真题考的是寄存器间接寻址,答案是“主存单元”。这里的易混点是:寄存器里存的是地址,不是操作数本身;如果你把“寄存器”三个字当成答案,就会选错。判断方法很固定——看括号或方括号外面那一层:寄存器外面套了括号、表示取内容,操作数就在主存;没有括号,操作数就在寄存器。
2.3 总线按功能分类,以及 SATA 站在哪个位置
总线的定义是“能为多个部件分时共享的公共信息传送线路”,按功能划分只有三类:数据总线、地址总线、控制总线。真题里那个“服务总线”是干扰项,它属于企业应用集成里的 ESB 概念,跟计算机硬件的总线分类不在一个语境。这类跨语境的干扰词在综合知识里反复出现,判断的标准是“这个名词解释的是不是部件之间传输信息的线路”,不是的话直接排除。
按其他维度还能再切:按传输方向分单工、半双工、全双工;按传输方式分串行和并行;按层次分片内总线、系统总线、通信总线。SATA 属于通信/存储接口这一类,它的定义里有两个关键词必须记住:基于行业标准的串行硬件驱动器接口,需要硬件芯片支持。优势是支持热插拔、传输速度快、执行效率高。
| 接口 | 传输方式 | 关键特征 | 典型场景 |
|---|---|---|---|
| SATA | 串行 | 点对点、支持热插拔、线缆细、速率逐代翻倍 | 桌面与服务器硬盘、光驱 |
| IDE / ATA | 并行 | 40 或 80 线排线,主从设备共享通道,早期不支持热插拔 | 老式硬盘 |
| RS-232 | 串行 | 低速、点对点、传输距离有限,用于设备通信 | 串口设备、工控 |
| SCSI / SAS | 并行转串行 | 面向服务器,支持多设备、可靠性高 | 企业级存储 |
“需要硬件芯片支持”这个描述放在 SATA 上成立,放在 RS-232 这种纯电气接口上就不成立;题干里如果出现“需要专用控制器芯片”“支持热插拔”这类词,基本可以往 SATA 或 SAS 上考虑。
2.4 RAID 分级:RAID5 为什么“适合频繁 I/O、不适合高传输率”
真题对 RAID5 的描述是“无独立校验盘的奇偶校验码磁盘阵列,非常适合于 I/O 需求频繁的应用,不太适合要求高数据传输率的应用”。这句描述一正一反,很多人只觉得别扭,其实两半都对。
RAID3 用一块专用盘存奇偶校验,数据按位或字节交叉分布在其余盘上,一次读写要动所有数据盘,所以适合大块连续传输(高数据传输率场景),不适合大量小 I/O——每次小写都要碰全部磁盘。RAID5 把校验信息均匀分布到所有成员盘上,没有独立校验盘;读操作可以并行到多块盘,小 I/O 的并发能力强,所以适合事务型、I/O 频繁的应用。但每次写要经历“读旧数据、读旧校验、写新数据、写新校验”四次 I/O(写惩罚),大块顺序写时校验计算和磁头调度都成为瓶颈,所以“不太适合高数据传输率”。
| 级别 | 最少盘数 | 校验方式 | 空间利用率 | 特点 |
|---|---|---|---|---|
| RAID0 | 2 | 无校验,纯条带 | 100% | 速度最快,无冗余 |
| RAID1 | 2 | 镜像 | 50% | 读性能好,成本高 |
| RAID3 | 3 | 专用校验盘,位/字节交叉 | (n-1)/n | 适合大块传输 |
| RAID5 | 3 | 分布式奇偶校验,条带级 | (n-1)/n | 适合小 I/O 并发,写有惩罚 |
| RAID10 | 4 | 先镜像再条带 | 50% | 性能与可靠性兼顾,成本最高 |
把“独立校验盘”这四个字当作区分 RAID3 和 RAID5 的关键标记,考场上就不容易被“无独立校验盘”这种否定表述绕进去。
3. 操作系统:线程模型、地址空间、页面置换与死锁
操作系统这部分的分值不算最高,但它是“手算题最容易失分”的地方。页面置换要一步一步列表,进程状态要分清转换条件,死锁四个必要条件经常被“共享条件”这种伪选项干扰。这一章的复习策略是:概念题用对照表记,计算题用表格加代码复现一遍,确保考场上不是凭印象。
3.1 内核线程、用户线程与轻权进程
真题的表述是“依赖于操作系统内核,由内核的内部需求进行创建和撤销”,答案是内核线程。三种线程模型的差别,落在“谁创建、谁调度、阻塞了会怎样”这三个问题上:
| 类型 | 创建与撤销者 | 调度者 | 一个线程阻塞的影响 | 切换开销 |
|---|---|---|---|---|
| 用户线程 | 用户空间的线程库 | 用户库自行调度,内核不感知 | 整个进程被阻塞 | 小,不需进内核 |
| 内核线程 | 操作系统内核 | 内核调度器 | 只阻塞该线程 | 大,需内核态切换 |
| 轻权进程 LWP | 内核支持,介于两者之间 | 内核调度 LWP,用户库把线程绑到 LWP 上 | 取决于绑定方式 | 中等 |
用户线程的优点是切换不用陷入内核,缺点是一个线程发起阻塞式系统调用,内核只看到“一个进程”,整个进程都会被挂起;内核线程则可以被独立调度到多个处理器上并行执行,代价是创建、切换都要进内核。轻权进程常被当作用户线程与内核线程之间的桥:多个用户线程复用若干个 LWP,既能并行,又不必一个线程一个内核实体。
3.2 单处理机的三态转换:某时刻只有一个在运行
进程的三种基本状态是运行、就绪、阻塞。单处理机系统里,任何时刻最多只有一个进程处于运行状态,这是由“只有一个 CPU”这个物理事实决定的;就绪队列里可以排很多个,阻塞队列里也可以挂很多个。真题就考这一句,答案是“运行状态”。
四种转换要背清楚,因为案例分析里常问“某进程从阻塞变为就绪的触发条件是什么”:
- 就绪 → 运行:进程调度程序选中它,分配 CPU。
- 运行 → 就绪:时间片用完,或被更高优先级的进程抢占。
- 运行 → 阻塞:进程主动请求 I/O 或等待某个事件,自愿让出 CPU。
- 阻塞 → 就绪:等待的事件发生(I/O 完成、信号到达),但它不会直接变成运行态。
最容易错的是最后一条:阻塞态被唤醒后进入就绪队列,而不是直接上 CPU。如果题目问“某时刻处于运行态的进程最多有几个”,单处理机答 1,多处理机答“不超过处理器个数”。
3.3 逻辑地址、物理地址与多级树形目录
编译后的目标程序在内存中的地址,卷面给出的答案是物理地址,也叫绝对地址;相对的概念是逻辑地址,指程序里使用的、相对于某个基准的地址,也称虚拟地址。严格来说,编译产出的是逻辑地址空间里的相对地址,要经过装入时的重定位才变成物理地址,但软考的选择题按“目标程序已经在内存中”这个口径走,遇到“在内存中的地址”就往物理地址上选。
文件目录结构方面,Windows 和 UNIX 都采用多级树形目录。它的好处是把文件名冲突限制在同一目录内、便于按项目或用户划分子树、支持路径名访问。对比一下其他结构:一级目录全系统一张表,重名冲突严重;二级目录按用户分,用户内仍是一级;多级树形则允许任意深度的层次。绝对路径从根开始写,相对路径从当前工作目录开始写,这两个概念常在“给出路径判断文件位置”的题里出现。
3.4 FIFO 页面置换:把过程画成表,比背答案可靠
真题的访问序列是 0、0、1、1、3、1、2,两个页帧,按先进先出算法统计缺页次数。手算过程如下:
| 序号 | 访问页 | 帧 1 | 帧 2 | 是否缺页 | 说明 |
|---|---|---|---|---|---|
| 1 | 0 | 0 | - | 缺页 | 空闲帧,装入 |
| 2 | 0 | 0 | - | 命中 | 已在内存,顺序不变 |
| 3 | 1 | 0 | 1 | 缺页 | 空闲帧,装入 |
| 4 | 1 | 0 | 1 | 命中 | 顺序不变 |
| 5 | 3 | 3 | 1 | 缺页 | 淘汰最早进入的 0 |
| 6 | 1 | 3 | 1 | 命中 | 顺序不变 |
| 7 | 2 | 3 | 2 | 缺页 | 淘汰最早进入的 1 |
合计 4 次缺页,选 A。关键在于第 2、4、6 步:FIFO 命中时不调整队列顺序,队头永远是最早装入的那一页,这正是它和 LRU 的分水岭。
用代码复现一遍,能把这个“命中不调整”的细节固定下来:
def fifo_faults(pages, frames): mem = [] # 按装入顺序保存页号,下标 0 是最早进入的页 faults = 0 for p in pages: if p not in mem: faults += 1 if len(mem) == frames: mem.pop(0) # FIFO:淘汰队头,即最早进入的页 mem.append(p) # 命中时什么都不做,这正是 FIFO 与 LRU 的关键差别 return faults print(fifo_faults([0, 0, 1, 1, 3, 1, 2], 2)) # 输出 4参数说明:pages是访问序列,frames是可用页帧数,返回值是缺页次数。把frames改成 3 再跑一遍,会发现缺页次数不一定下降——这就是 FIFO 特有的 Belady 异常,页帧变多反而可能缺页更多。这个现象只在 FIFO 上出现,LRU 和 OPT 不会,考“哪种算法可能出现 Belady 异常”时直接锁定 FIFO。
3.5 死锁的四个必要条件:少一个都不成立
产生死锁的必要条件是互斥、请求与保持(占有并等待)、不可剥夺、环路等待这四条。真题的干扰项是“共享条件”,答案是它不属于。逻辑上也好理解:死锁的前提是资源被独占,如果资源真能随意共享,进程之间根本不用抢,也就谈不上死锁。
四条条件必须同时成立才会死锁,破坏任意一条即可预防:破坏互斥(把资源改造成可共享,如打印机假脱机)、破坏请求与保持(一次性申请全部资源)、破坏不可剥夺(申请不到就释放已占有的)、破坏环路等待(给资源编号,按序申请)。避免死锁则用银行家算法,在分配前判断系统是否处于安全状态;检测与解除则是允许死锁发生,事后用资源分配图找环、剥夺资源或回滚进程。
4. 网络、数据库与系统工程:跨模块的送分题与送命题
这一章把网络、数据库和系统工程三块合在一起,因为它们在综合知识里呈现方式很像:公式一道、协议一道、关系代数一道、方法论一道,单题都不难,但跨度过大导致复习时容易漏。香农公式要会算 dB,IPSec 和 FTP 要分得清层次,元组演算要做等价变形,事务要背 ACID,分片要记住三条原则,服务建模要记住三个阶段,最后还有最大流和抽屉原理两道计算题。
4.1 香农公式:先把 dB 换算成倍数,再套公式
信道容量的公式是 C = W × log₂(1 + S/N),其中 W 是带宽(Hz),S/N 是信噪比(线性倍数,不是 dB)。题目给带宽 2MHz、信噪比 30dB,第一步必须做单位换算:dB 与倍数的关系是 10 × log₁₀(S/N) = 30,所以 S/N = 10³ = 1000。
代入计算:C = 2×10⁶ × log₂(1001) ≈ 2×10⁶ × 9.97 ≈ 19.9 Mbps,取整约 20Mbps,选 C。
| 信噪比(dB) | 线性倍数 S/N | log₂(1+S/N) 近似 |
|---|---|---|
| 10 | 10 | 3.46 |
| 20 | 100 | 6.66 |
| 30 | 1000 | 9.97 |
| 40 | 10000 | 13.29 |
三个常见错误:忘记换算是把 30 直接代进 log₂(31) 算出 5 左右的结果;把 20dB 的十倍关系记成两倍;把香农公式和奈奎斯特公式混用。奈奎斯特公式 C = 2W × log₂V 描述的是无噪声条件下的极限速率,V 是码元的离散电平数,题目里出现“无噪声”“电平数”就往奈奎斯特上靠,出现“信噪比”“dB”就是香农。
4.2 局域网拓扑与协议分层:IPSec 在 IP 层,FTP 在 TCP 之上
局域网常见的拓扑是星型、总线型、环型、树型,以及由此演化的网状结构。真题说“不属于局域网拓扑结构”的是点对点结构——点对点是链路层面的连接方式,不是描述网络整体形状的拓扑。星型靠中心节点转发,故障隔离好但中心是单点;总线型共享一条信道,冲突需要 CSMA/CD 解决;环型逐站转发,令牌环是典型实现。
协议分层的题目要抓住“这个协议解决什么问题、封装在哪一层”:
| 协议 | 所属层次 | 承载协议 | 默认端口 | 关键特征 |
|---|---|---|---|---|
| FTP | 应用层 | TCP | 控制 21 / 数据 20 | 双连接,控制与数据分离 |
| HTTP | 应用层 | TCP | 80 / 443 | 请求响应模型 |
| IPSec | 网络层 | IP | 无端口概念 | AH 与 ESP,支持 IPv4 与 IPv6 |
| TCP / UDP | 传输层 | IP | 无 | 面向连接 / 无连接 |
IPSec 那道题的干扰项是“仅针对 IPv4”。IPSec 设计之初就考虑了与 IP 版本无关的安全服务,IPv6 把 IPsec 作为标准组成部分,IPv4 通过扩展支持,所以它同时覆盖两个版本。另外三个说法都对:在 IP 层提供安全服务、基于端到端的模式、是工业标准网络安全协议。IPSec 有两个核心协议,AH 提供完整性与身份认证但不加密,ESP 提供加密以及完整性保护;工作模式分传输模式(保护上层载荷)和隧道模式(整个 IP 包再封装一层)。
FTP 跑在 TCP 之上,这一点常被“文件传输”四个字带偏去选 UDP——文件传输要求可靠、有序,必然是 TCP。它的双连接结构也值得记:控制连接用 21 端口保持整个会话,数据连接用 20 端口(主动模式)在每次传输时建立和关闭。
4.3 密钥管理 KMI、PKI 与 IDEA 的参数
密钥管理处理的是密钥从产生到销毁的全过程。真题里“适用于封闭网、以传统的密钥管理中心为代表”的机制是 KMI(密钥管理基础设施),它面向对称密钥体系,靠一个可信的密钥管理中心完成密钥的分发与托管。与之对应的是 PKI(公钥基础设施),面向开放网络,靠 CA 签发数字证书把公钥和身份绑定。
| 机制 | 适用环境 | 核心组件 | 密钥类型 |
|---|---|---|---|
| KMI | 封闭网 | 密钥管理中心 | 以对称密钥为主 |
| PKI | 开放网 | CA、注册机构、证书库 | 公钥 / 私钥对 |
| LPK / CPK | 特定场景 | 本地密钥、组合公钥 | 视方案而定 |
对称加密算法的参数是高频考点,整理成表:
| 算法 | 分组长度 | 密钥长度 | 备注 |
|---|---|---|---|
| DES | 64 位 | 56 位(含校验位共 64 位) | 已不安全 |
| 3DES | 64 位 | 112 位(双密钥)或 168 位(三密钥) | 兼容 DES,性能较低 |
| IDEA | 64 位 | 128 位 | 明文密文均 64 位,8 轮迭代 |
| AES | 128 位 | 128 / 192 / 256 位 | 现行主流 |
| RSA | 可变 | 1024 位以上 | 非对称,用于密钥交换与签名 |
真题考的是 IDEA:明文和密文都是 64 位、密钥长度 128 位。容易记混的是 3DES 的密钥长度——它是把 DES 做三次,但双密钥方案只有 112 位有效强度,别和 IDEA 的 128 位搞混。
4.4 关系代数与元组演算:选择是选行,投影是选列
关系代数里最基本的两个运算是选择和投影。选择(σ)从关系中抽出满足给定条件的元组,也就是筛行;投影(π)从关系中取出指定的属性列,并去掉重复元组,也就是筛列。真题里“从关系 R 中抽取出满足给定限制条件记录的操作”答案是选择,判断方法就一句:带条件的是选择,带列名的是投影。
用 SQL 对照更容易记牢:
-- 选择:按条件筛行,对应关系代数 σ(条件)(R) SELECT * FROM R WHERE 年龄 > 30; -- 投影:只保留指定列并去重,对应关系代数 π(列名)(R) SELECT DISTINCT 部门 FROM R;元组演算的等价变形考的是德摩根律:P1 ∨ P2 等价于 ¬(¬P1 ∧ ¬P2)。四个选项里,¬(¬P1 ∨ ¬P2) 等于 P1 ∧ P2,¬P1 ∨ ¬P2 是原式取反的或,¬P1 ∧ ¬P2 是原式取反的与,只有第三个是正确答案。这类题不用推理,直接代两个真值进去验算最快:令 P1 真、P2 假,原式为真,四个选项里只有 ¬(¬P1 ∧ ¬P2) 也为真。
4.5 事务 ACID 与数据分片的三条原则
事务的四个特性是原子性、一致性、隔离性、持久性。真题描述的是“一个事务的执行不能被其他事务干扰,多个事务并行执行看上去像串行”,这是隔离性。四者的实现手段也要能对上:原子性靠 undo 日志回滚,持久性靠 redo 日志与检查点,隔离性靠锁或时间戳等并发控制机制,一致性是事务执行前后数据库都处于合法状态,是最终目的。
| 特性 | 含义 | 典型实现 |
|---|---|---|
| 原子性 | 事务内的操作要么全做要么全不做 | undo 日志 |
| 一致性 | 事务前后数据库完整性约束不被破坏 | 约束、触发器、应用逻辑 |
| 隔离性 | 并发事务互不干扰,效果等价于串行 | 两段锁、MVCC、时间戳 |
| 持久性 | 提交后的修改永久生效 | redo 日志、检查点 |
隔离性往下延展还有隔离级别:读未提交会脏读,读已提交会不可重复读,可重复读可能幻读,串行化最严但并发度最低。这一串是案例分析里问“如何避免某类并发问题”的标准答案来源。
数据分片的原则是三条:完整性(全局关系的所有数据都被分到某个片段里,不丢数据)、不相交性(任意两个片段没有重复元组)、可重构性(能通过连接或并运算从片段恢复出全局关系)。真题的干扰项是“相交性”,它正好和不相交性相反,是典型的反向设置。分片方式分水平分片(按行切,条件筛选)、垂直分片(按列切,投影)、混合分片(先水平再垂直),分片之后还要做分布设计,决定片段放在哪个站点。
4.6 服务建模的三个阶段与内聚层级
服务建模分服务发现、服务规约、服务实现三个阶段。服务发现阶段要做的是把业务拆成候选服务,路径有三条:自上而下是从业务着手做领域分解、流程分解和变化分析;自下而上是从已有资产分析入手,看哪些系统能力可以暴露成服务;中间对齐则是把业务目标和现有 IT 资产对上。真题问“从业务着手进行分析,将业务进行领域分解、流程分解和变化分析”属于哪一种,答案是自上而下的方式,因为起点是业务而不是资产。
服务规约阶段把候选服务细化成契约,包括功能描述、输入输出、质量约束;服务实现阶段才落到技术选型、编排和部署。三个阶段是“找得到、说得清、做得出”的递进关系,出题时常用“在某阶段应该做什么”来考顺序。
内聚度量模块内部元素结合的紧密程度,从高到低依次是:功能内聚、顺序内聚、通信内聚、过程内聚、时间内聚、逻辑内聚、偶然内聚。真题给了功能、通信、时间、逻辑四个选项,最高的显然是功能内聚——模块内所有元素共同完成一个且仅一个功能。顺带记一下耦合,从低到高是:非直接耦合、数据耦合、标记耦合、控制耦合、外部耦合、公共耦合、内容耦合,设计时的目标是高内聚低耦合。
4.7 最大流与抽屉原理:两道计算题的固定套路
输油管道那道题问从 S 到 T 的总输油能力,本质是求网络最大流,答案 19 万吨/天。手算的套路是“找增广路、加残量、直到找不到”,或者更省事地用最大流最小割定理:把顶点分成含 S 的集合和含 T 的集合,跨割的边容量之和的最小值就是最大流。考试时如果图不大,直接枚举几个割集取最小值,比一次次推增广路快得多。
要复现验证,可以用一段 Edmonds-Karp 实现:
from collections import deque def max_flow(cap, s, t): # cap 是邻接矩阵,cap[u][v] 表示边 u->v 的剩余容量,无边填 0 n = len(cap) total = 0 while True: parent = [-1] * n parent[s] = s q = deque([s]) while q and parent[t] == -1: u = q.popleft() for v in range(n): # 只在残量网络里还有容量的边上扩展 if parent[v] == -1 and cap[u][v] > 0: parent[v] = u q.append(v) if parent[t] == -1: # 找不到增广路,当前流即最大流 break aug = float('inf') # 回溯求这条路径的瓶颈容量 v = t while v != s: aug = min(aug, cap[parent[v]][v]) v = parent[v] v = t # 正向减容量,反向加容量 while v != s: u = parent[v] cap[u][v] -= aug cap[v][u] += aug v = u total += aug return total参数说明:cap用二维列表存容量矩阵,节点用整数编号,s和t是源点与汇点;函数会就地修改cap,所以同一张图要跑两次得先复制。把题目里每条管道两端的编号和容量填进去,跑出来的total就是答案,可以用来验证手算的 19。
投票那道题更像逻辑推理,用方程最快。三位专家每人 5 票,总票数 15;10 幅画每幅都有得票,所以设 A 等 x 幅、B 等 y 幅、C 等 z 幅,有:
- 票数方程:3x + 2y + z = 15
- 幅数方程:x + y + z = 10
两式相减得 2x + y = 5,于是 y = 5 − 2x,代回幅数方程得 z = 5 + x,所以 z − x = 5 恒成立,B 选项“A 等比 C 等少 5 幅”永远正确。再验证其他选项:x 只能取 0、1、2,A 等最多 2 幅,A 选项说最多 5 幅错;B 等与 C 等共 y + z = 10 幅,C 选项错;A 等与 B 等共 x + y = 5 − x,随 x 变化不恒为 6,D 选项错。这道题的关键是把“每幅画都有得票”翻译成 x + y + z = 10,漏掉这个条件就无从下手。
5. 易错点清单:这套卷子里最容易出错的五处
综合知识的失分很少集中在难题上,大多集中在“背过、但背得不精确”的点。下面五条是我复盘这套真题时标出来的高频易错处,每一条都按“容易漏在哪、为什么会漏、怎么补”写清楚。
5.1 易错点一:RISC 的“指令长度固定”被反向表述带偏
容易漏在哪:
本文还有配套的精品资源,点击获取