中级软考(软件工程师)——软件设计师高频核心考点大补充(架构设计、硬核计算与OS篇)
中级软考软件工程师——软件设计师高频核心考点大补充架构设计、硬核计算与OS篇 导语补齐短板拿下核心重镇 一、 23种设计模式GoF避坑指南 考点 1装饰器模式 (Decorator) vs 代理模式 (Proxy) 深度解析 考点 2策略模式 (Strategy) vs 状态模式 (State) 深度解析 考点 3创建型模式三剑客工厂方法 vs 抽象工厂 vs 建造者 深度解析 二、 UML 类图关系万年必考符号题 考点 4六大关系的强弱对比 深度解析️ 三、 数据库规范化理论范式推导 考点 5彻底分清 1NF、2NF、3NF 深度解析 考点 6无损联接与保持函数依赖 深度解析️ 四、 数据流图 (DFD) 找错技巧 考点 7DFD 常见三大逻辑错误 深度解析 考点 8父子图平衡找遗漏数据流的终极必杀技 深度解析⏱️ 五、 CPU 流水线计算常考必杀技 考点 9流水线周期 (Δ t \Delta tΔt) 考点 10流水线执行时间计算双公式防坑️ 六、 McCabe 环路复杂度计算 考点 11三大秒杀公式 七、 操作系统进程同步PV 操作 考点 12彻底理解 P 与 V 考点 13前趋图填空的“出 V 入 P”口诀️ 八、 页面淘汰算法 (LRU vs FIFO) 考点 14三大淘汰算法对比 总结语 导语补齐短板拿下核心重镇在前几篇的“错题集”中我们扫清了许多选择题中的盲区。但如果你想在软考中级软件设计师中稳操胜券有几个**“骨灰级”的经典知识模块**是你绝对绕不开的上午选择题常客的数据库范式与UML 类图关系下午大题必考的设计模式和数据流图 (DFD)以及理科生最爱拿分的流水线计算、McCabe 复杂度、PV 操作和页面淘汰算法。这一篇我们就来彻底打通这些常考常错的经典考点拒绝死记硬背硬核解析教你一秒破题 一、 23种设计模式GoF避坑指南设计模式不仅是上午选择题的常客更是下午第6题Java/C代码填空的绝对核心。死背定义很容易混淆我们要抓的是**“场景关键字”**。 考点 1装饰器模式 (Decorator) vs 代理模式 (Proxy)⚠️避坑吐槽这两个模式的代码结构极其相似都是包装一个对象考场上极容易选错 深度解析装饰器模式 (Decorator)核心目的动态地给对象增加新的功能。关键字动态附加职责、不改变原类、扩展功能、继承的替代方案。经典场景给一杯原味奶茶原对象加珍珠、加椰果动态添加职责。代理模式 (Proxy)核心目的控制对原对象的访问。关键字控制访问、安全代理、延迟加载虚拟代理。经典场景你想买海外的东西找个代购代理。代购不是为了改变商品而是为你提供获取商品的“访问通道”。 考点 2策略模式 (Strategy) vs 状态模式 (State) 深度解析策略模式 (Strategy)核心目的封装不同的算法让它们可以互相替换。经典场景商场的打折活动满减、打折、原价。算法由客户端用户主动决定用哪一个。状态模式 (State)核心目的当一个对象的状态改变时它的行为也跟着改变。经典场景自动售货机缺货状态、正常状态、电梯开门状态、运行状态。状态的切换是系统内部自动完成的客户端不参与。 考点 3创建型模式三剑客工厂方法 vs 抽象工厂 vs 建造者 深度解析工厂方法 (Factory Method)生产单一产品。比如鼠标工厂只生产鼠标。抽象工厂 (Abstract Factory)生产产品族一系列相关的产品。比如某工厂不仅生产鼠标还生产配套的键盘同一个品牌族。看到“系列对象”、“产品族”必选抽象工厂。建造者模式 (Builder)一步一步创建一个复杂的对象。强调的是组装过程。比如组装一台电脑先装 CPU再装主板再装内存。 二、 UML 类图关系万年必考符号题UML 类图是下午大题的基础搞不清箭头和菱形代码填空直接抓瞎。 考点 4六大关系的强弱对比⚠️避坑吐槽聚合和组合的菱形是空心还是实心箭头到底指向谁千万别搞反 深度解析关系的强弱顺序依赖 关联 聚合 组合 泛化/实现依赖关系 (Dependency)最弱。A 的方法里用到了 B 作为参数。符号虚线 箭头指向被依赖者。关联关系 (Association)平等的知道。A 里面有一个 B 的全局变量。符号实线 箭头或无箭头双向关联。聚合关系 (Aggregation)整体与部分“部分可以离开整体单独存在”。比如电脑和U盘、部门和员工。符号空心菱形 实线菱形靠近整体。组合关系 (Composition)同生共死的整体与部分“部分离开整体没有意义”。比如人和大脑、鸟和翅膀。符号实心菱形 实线菱形靠近整体。泛化关系 (Generalization)即面向对象中的继承 (extends)。符号实线 空心大三角指向父类。实现关系 (Realization)类实现了接口 (implements)。符号虚线 空心大三角指向接口。️ 三、 数据库规范化理论范式推导软考数据库必考题给你一个关系模式问你是第几范式1NF/2NF/3NF/BCNF。不要怕记住以下三步走。 考点 5彻底分清 1NF、2NF、3NF 深度解析首先找准主键可能由多个属性联合组成。第一范式 (1NF)属性不可再分。解释这是关系数据库最基本的要求。只要是个正常的二维表都满足 1NF。第二范式 (2NF)在 1NF 的基础上消除非主属性对主键的“部分依赖”。鉴定口诀“是不是只能由完整的联合主键推导出来”举例主键是学号课程号。如果表里有个属性是“姓名”因为仅靠“学号”就能推出“姓名”不需要“课程号”这就是部分依赖。消除它就达到了 2NF。注意如果主键只有一个字段那肯定没有部分依赖直接满足 2NF第三范式 (3NF)在 2NF 的基础上消除非主属性对主键的“传递依赖”。鉴定口诀“非主属性之间有没有互相推导的关系”举例主键是学号。属性有系名系主任。因为学号 - 系名而系名 - 系主任导致学号间接传递推导出了系主任。把系名和系主任单独拆一张表就达到了 3NF。 考点 6无损联接与保持函数依赖⚠️避坑吐槽拆表不是随便拆的拆坏了拼不回来叫“有损” 深度解析无损联接拆分后的两张表通过自然连接JOIN拼起来和原表一模一样没多出脏数据没少数据。3NF 和 BCNF 都能做到无损联接保持函数依赖拆分后原来的依赖关系没有被破坏。3NF 可以做到保持函数依赖但 BCNF 不一定能做到。️ 四、 数据流图 (DFD) 找错技巧下午题的第一道大题15分绝对是画数据流图。找错题是有固定套路的。 考点 7DFD 常见三大逻辑错误 深度解析找图里缺了什么线检查以下三种典型的低级错误黑洞 (Black Hole)一个加工圆圈只有输入数据流没有输出数据流。数据进去了出不来像黑洞一样。奇迹 (Miracle)一个加工只有输出数据流没有输入数据流。凭空产生数据这是奇迹。灰洞 (Gray Hole)加工的输入数据不足以产生输出数据。比如输入“学号”输出“总成绩”中间明显缺了“成绩单”的输入。 考点 8父子图平衡找遗漏数据流的终极必杀技⚠️避坑吐槽下午大题让你填缺失的数据流不要光盯着图看逻辑要上下对比 深度解析原则父图如顶层图中某个加工的输入/输出数据流必须在对应的子图0层图、1层图中一模一样地体现出来。解题步骤看父图里进入该加工的箭头有几个叫什么名字。看子图中整个框的外部输入箭头有几个。一一对应消除父图里有但子图里没有的就是你要填的缺失数据流特例只允许一种不平衡就是子图中出现了**内部的“数据存储”数据库**读写这在父图里是可以被隐藏的。⏱️ 五、 CPU 流水线计算常考必杀技流水线技术是 CPU 提升效率的核心考题通常让你算“执行n nn条指令需要多长时间”。这里有两个公式出题人特别喜欢在这上面做文章 考点 9流水线周期 (Δ t \Delta tΔt)定义执行时间最长的那一段操作的时间。举例一条指令分取指 (2 ns 2\text{ns}2ns)、分析 (3 ns 3\text{ns}3ns)、执行 (5 ns 5\text{ns}5ns)。那么流水线周期Δ t \Delta tΔt就是5 ns 5\text{ns}5ns。因为水管最细的地方决定了整体的水流速度木桶效应。 考点 10流水线执行时间计算双公式防坑⚠️避坑吐槽算出来一个答案发现选项里没有别慌换另一个公式算软考这块的答案极其薛定谔。假设一条指令分k kk段每段时间分别为t 1 , t 2 , … , t k t_1, t_2, \dots, t_kt1,t2,…,tk流水线周期为Δ t \Delta tΔt要执行n nn条指令理论公式优先使用T 第一条指令的完整时间 剩下 ( n − 1 ) 条指令的重叠时间 T \text{第一条指令的完整时间} \text{剩下 }(n-1)\text{ 条指令的重叠时间}T第一条指令的完整时间剩下(n−1)条指令的重叠时间T ( t 1 t 2 ⋯ t k ) ( n − 1 ) × Δ t T (t_1 t_2 \dots t_k) (n - 1) \times \Delta tT(t1t2⋯tk)(n−1)×Δt实践公式备胎使用如果用理论公式算出来的答案选项里没有说明出题人按“各段相等”的偷懒做法算了T k × Δ t ( n − 1 ) × Δ t T k \times \Delta t (n - 1) \times \Delta tTk×Δt(n−1)×Δt️ 六、 McCabe 环路复杂度计算在白盒测试中McCabe 复杂度用于衡量代码的逻辑复杂程度。下午大题如果考到软件工程大概率会让你算这个值。 考点 11三大秒杀公式⚠️避坑吐槽很多同学喜欢在图里数“闭合区域”一旦图画得复杂点眼睛就看花了。直接数“判定节点”才是王道面对一张程序流程图控制流图你可以用以下三种方法计算复杂度V ( G ) V(G)V(G)结果绝对一样公式法最稳妥V ( G ) E − N 2 V(G) E - N 2V(G)E−N2E EE是图中边的数量箭头数。N NN是图中节点的数量圆圈数。区域法最直观V ( G ) 闭合区域数 1 V(G) \text{闭合区域数} 1V(G)闭合区域数1图里有几个被完全封闭的“圈”再加上图外部的那1 11个大区域。判定节点法最神速强烈推荐V ( G ) P 1 V(G) P 1V(G)P1P PP是判定节点的数量。判定节点就是流程图里会产生分支的地方比如if、while、switch-case。实战技巧直接数图里有几个节点长出了2 条或以上的向外箭头有几个这样的节点加 1 就是答案 七、 操作系统进程同步PV 操作PV 操作简直是很多同学的梦魇尤其是下午大题填空经常搞不清哪里该 P 哪里该 V。 考点 12彻底理解 P 与 VP 操作 (Wait)申请资源/消耗资源。操作底层信号量S S − 1 S S - 1SS−1。如果S 0 S 0S0说明没资源了进程阻塞挂起。V 操作 (Signal)释放资源/生产资源。操作底层信号量S S 1 S S 1SS1。如果S ≤ 0 S \le 0S≤0说明有其他进程在等唤醒一个等待的进程。 考点 13前趋图填空的“出 V 入 P”口诀⚠️避坑吐槽下午大题给个流程图让你填空千万别自己脑补复杂的逻辑直接看箭头在进程同步的前趋图比如 A 必须执行完才能执行 B中箭头的起点流出 V 操作。说明 A 干完活了通知下一位。箭头的终点流入 P 操作。说明 B 开始干活前得先等 A 的通知。口诀出 V 入 P一个节点如果有 2 个向外指的箭头那它的代码末尾一定有 2 个 V 操作。一个节点如果有 3 个指向它的箭头那它的代码开头一定有 3 个 P 操作。️ 八、 页面淘汰算法 (LRU vs FIFO)操作系统的虚拟内存管理中如果内存满了要把哪个页面踢出去这经常伴随着缺页中断的计算。 考点 14三大淘汰算法对比OPT最佳置换算法机制淘汰未来最长时间内不再被访问的页面。特点只有上帝才知道未来这是一种理论上的理想算法现实中无法实现通常用来作为性能天花板对比。FIFO先进先出算法机制谁最早进来谁先被踢出去排队机制。特点极其简单但不符合局部性原理。特有考点Belady 异常注意这题常考选择题。正常情况下给进程分配的物理块越多缺页率应该越低。但 FIFO 算法可能会出现分配的物理块数增加缺页次数反而增加的反常现象这就是著名的 Belady 异常。LRU最近最少使用算法机制淘汰最长时间没有被访问过的页面。特点符合局部性原理性能好没有 Belady 异常。实战技巧考试时如果让你手动模拟 LRU就看内存里那几个页面在历史访问序列中谁躲在最前面离当前位置最远谁就被踢 总结语从【硬件底层的流水线计算】到【设计模式的暗坑】从【UML 类的羁绊】到【操作系统的 PV 大法】你现在已经掌握了软考及格线以上最精华的武器库。考试的时候遇到不会的题不要慌张用排除法结合我们讲过的“关键字”、“秒杀法则”很多答案都会跃然纸上。如果这系列干货文章对你有所帮助欢迎大家点赞、收藏、转发给一起备考的战友最后预祝大家在考场上会做的全对蒙的全中一把过线顺利拿证