软件设计师10个高分易丢分必考点冲刺总结

1.PV 操作与前趋图

【历年核心分值】合计 17 分,选择题固定 2-3 分,是操作系统模块分值最高的考点
P 操作:申请资源,信号量 S-1;若 S<0,进程阻塞排队
V 操作:释放资源,信号量 S+1;若 S≤0,唤醒阻塞队列的进程
前趋图做题规则:箭头起点放 V 操作,箭头终点放 P 操作,一条有向弧对应一对信号量
信号量取值范围:最小值=-(进程总数-初始资源数),最大值=初始资源数
【冲刺避坑提醒】
前趋图中,一个进程有多个前驱,就要写多个 P 操作;有多个后继,就要写多个 V 操作,顺序不能乱

信号量取值计算,不要搞反正负号,负数的绝对值就是阻塞排队的进程数


2.开发模型


【历年核心分值】合计 17 分,选择题每年必考 2-3 分,软件工程模块最高频考点
瀑布模型:需求明确、分阶段严格推进,文档驱动,返工成本高
增量模型:模块化分批开发交付,第一个增量是核心产品,降低开发
风险
螺旋模型:引入风险分析,四个循环阶段:制定计划→风险分析→实施工程→客户评估,适合大型高风险项目
原型化模型:快速构建可运行原型,解决需求不明确的问题,快速迭代
敏捷开发:以人为本、快速迭代、响应变化,核心是个体交互、可运行软件、客户协作、拥抱变化
【冲刺避坑提醒】
看到“风险分析”直接选螺旋模型;看到“需求不明确、快速原型”
直接选原型化模型;看到“分批次交付、核心功能优先”选增量模型
敏捷统一过程 AUP 是“大型上连续,小型上迭代”,不要和水晶法混淆(水晶法是不同项目用不同策略)


3.白盒测试(含 McCabe 环路复杂度)


【历年核心分值】合计 17 分(白盒 15 分+McCabe2 分),综合+案例题必考,是测试模块核心
语句覆盖:最弱覆盖,设计用例让程序中所有可执行语句至少执行一次
判定覆盖 (分支覆盖): 设计用例让程序中所有判定的取真、取假分支至少执行一次,仅关注分支整体结果,不保证分支内单个条件取到所有可能结果
条件覆盖:设计用例让判定中每个条件的所有可能结果至少执行一次
路径覆盖:最强覆盖,设计用例覆盖程序中所有可能的执行路径
McCabe 环路复杂度计算:
公式 1:V(G)=边数-结点数+2
公式 2:V(G)=判定节点数+1
公式 3:V(G)=闭环区域数+1
【冲刺避坑提醒】
覆盖强度排序:路径覆盖 > 条件组合覆盖 > 判定/条件覆盖 > 条件覆盖 > 判定覆盖 > 语句覆盖,不要记反环路复杂度计算,优先数闭环区域+1,最快最准,不要数错边和结点


4.内聚性与耦合性


【历年核心分值】合计 11 分(内聚 6 分+耦合 5 分),每年必考 2 分,模块设计核心考点
内聚性(模块内部):从高到低排序(最优到最差)
功能内聚>顺序内聚>通信内聚>过程内聚>时间内聚>逻辑内聚>偶然内聚
耦合性(模块之间):从低到高排序(最优到最差)
无直接耦合>数据耦合>标记耦合>控制耦合>外部耦合>公共耦合>内容耦合
核心设计原则:高内聚、低耦合
【冲刺避坑提醒】
看到“模块内所有元素在同一数据结构上操作”→通信内聚;看到“模块间通过简单数据参数交换信息”→数据耦合;看到“模块间共享全局变量”→公共耦合
排序不要记反,内聚越高越好,耦合越低越好


5.排序算法


【历年核心分值】合计 12 分,每年必考 2-3 分,算法基础最高频考点
稳定排序算法:冒泡排序、直接插入排序、归并排序、基数排序
不稳定排序算法:快速排序、简单选择排序、希尔排序、堆排序
时间复杂度核心结论:
最坏 O(n²):冒泡、直接插入、简单选择、快速排序
最坏 O(nlogn):堆排序、归并排序
最好 O(n):带有序标志位优化的冒泡排序、直接插入排序 (原序列已有序)
快速排序:基准值划分,越有序性能越差;堆排序:适合找 TopN 大/小值
【冲刺避坑提醒】
排序稳定性是高频考点,直接背稳定的 4 个,剩下的都是不稳定的,不要记混
快速排序的最坏情况是序列完全有序,时间复杂度 O (n²),不是最优


6.二叉树特性与特殊二叉树


【历年核心分值】合计 17 分(二叉树特性 7 分+特殊二叉树 10 分),数据结构模块分值最高,每年必考 2-3 分
二叉树核心公式:
总节点数 n=n0+n1+n2(n0 度 0 叶子,n1 度 1,n2 度 2)
叶子节点数 n0=n2+1(必考,直接套)
第 k 层最多有 2^(k-1)个节点;深度为 k 的二叉树最多有 2^k-1 个节点
哈夫曼树(最优二叉树):
只有度 0 和度 2 的节点,没有度 1 的节点
权值越大的叶子节点,离根节点越近
带权路径长度 WPL=所有叶子节点的(权值×路径长度)之和
二叉树遍历:前序(根左右)、中序(左根右)、后序(左右根)
【冲刺避坑提醒】
n0=n2+1 是每年必考题,直接套公式,不用复杂推导
哈夫曼树的节点总数一定是奇数,权值相同的叶子节点,路径长度不一定相同


7.动态规划法


【历年核心分值】合计 12 分,算法基础核心,案例题必考算法题之一
核心适用场景:问题具有最优子结构、重叠子问题特性,求全局最优解
核心思想:将大问题拆分为子问题,记录子问题的解,避免重复计算,自底向上求解
常考题型:最长公共子序列、最大子段和、背包问题、矩阵链乘法
【冲刺避坑提醒】
和分治法区分:分治法的子问题是独立的,动态规划的子问题是重叠的
和贪心法区分:贪心法是当前局部最优,动态规划是全局最优,不能回退


8.存储系统计算(Cache/主存编址/页式存储)


【历年核心分值】合计 13 分,计算机组成+操作系统必考,每年 2-3分,全是计算题
主存编址计算:
存储单元数=结束地址-起始地址+1
总容量=单元数×每个单元字节数(按字节编址就是 1B)
芯片数=总容量/单芯片容量
页式存储地址转换:
页面大小=2^n,页内地址占 n 位,剩余高位是页号
物理地址=物理块号拼接页内地址(页内地址不变)
Cache 核心:解决 CPU 和主存速度不匹配问题,按内容寻址,基于局部性原理
【冲刺避坑提醒】
十六进制地址计算,先转成十进制算单元数,再转容量,不要直接减十六进制数出错
页式存储中,页内地址是完全不变的,只替换页号对应的物理块号


9.编译过程与有限自动机


【历年核心分值】合计 21 分(编译 13 分+有限自动机 8 分),程序设计语言模块必考,每年 2-3 分
编译过程 6 阶段:词法分析→语法分析→语义分析→中间代码生成→代码优化→目标代码生成
核心阶段作用:
词法分析:识别单词,过滤空格注释,用正规式、有限自动机实现
语法分析:判断语法结构是否正确,用文法、上下文无关文法 CFG 实现
语义分析:检查类型匹配、类型转换,核心是符号表(记录源程序符号信息)
有限自动机:终态节点能识别对应字符串,正规式和有限自动机可以等价转换
【冲刺避坑提醒】
解释器不生成独立的目标代码,边解释边执行;编译器先编译生成目标代码,再执行,运行效率高、可移植性差
中间代码生成、代码优化不是编译过程的必需环节,词法、语法、语义分析是必需的


10.贪心法


【历年核心分值】合计 9 分,算法基础高频考点,常和最短路径、哈夫曼树结合考
核心适用场景:问题具有最优子结构、贪心选择性质,每一步都选当前局部最优,最终得到全局最优
核心思想:自顶向下,一步一步做贪心选择,不回溯,不考虑整体全局
常 考 题 型 : 哈 夫 曼 编 码 、 Dijkstra 最 短 路 径 、 最 小 生 成 树(Prim/Kruskal)、活动选择问题
【冲刺避坑提醒】
贪心法不一定能得到全局最优解,只有满足贪心选择性质的问题才行
Dijkstra 算法是贪心算法,不能处理负权边;Floyd 算法是动态规划,能处理负权边

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值