1. 先从全局看:软件设计师考试到底在考什么
拿到“软件设计师知识点背诵版1”这个标题,我的第一反应是:这不是让你死记硬背的“背诵”,而是要把历年真题反复出现、知识点覆盖率最高、命题人最偏爱的那批核心考点做一个系统抽提。软考中级软件设计师的知识面横跨计算机组成原理、数据结构、操作系统、数据库、计算机网络、软件工程、面向对象设计等七八个大板块,如果你指望从教材第一页看到最后一页再上考场,时间基本不够用。背诵版的真正价值在于:把高频考点变成一套可以在最后冲刺阶段反复过脑子的“压缩包”,看到题干关键词,立刻能对应到正确选项或理论答案。
相比其他工程类认证,软件设计师考试有非常明显的特点:上午的选择题偏重概念识别和原理记忆,下午的案例分析偏重设计能力和应用能力。而在上午题中,很多考生丢分不是因为题目难,而是因为记忆点不清晰。比如原码、反码、补码的转换规则,进程的同步与互斥区别,数据库范式的判定条件,这些内容每一个单独拿出来都不难,但放在一套卷子里面连续出现的时候,人就容易混。背诵版的作用就是把容易混淆的知识点集中整理,用表格、口诀、对比清单的方式帮你建立稳定的记忆锚点。
这篇内容以“背诵版1”为起点,我按备考优先级把最值得先拿下的一块——计算机组成原理——以及其他几个必考核心板块串起来写。适合所有正在准备软件设计师考试、尤其是已经过完一遍教材准备进入刷题阶段的读者。如果你还没开始复习,这篇也可以作为第一份复习地图,先把高频考点圈定,再带着目标去翻课本,效率会高很多。
2. 计算机组成原理:最容易拿分也最容易丢分的板块
2.1 数据的表示与码制换算:原码、反码、补码、移码
计算机组成原理在上午题里占比不低,大概在10到12分左右,而数据表示几乎是年年必考的内容。数值在计算机中有不同的编码方式,很多人背了规则却在做题时卡壳,原因是只记了“正数不变、负数取反加一”,但没有真正理解这套规则设计的逻辑。
原码是最直观的编码方式,符号位用0表示正、1表示负,其余位表示数值本身。反码是对原码的数值位逐位取反,但仅针对负数;正数的反码和原码相同。补码则是在反码基础上末位加1,当然也只针对负数。为什么要有补码?因为它可以把减法转换成加法运算,让计算机只需要一套加法器电路就可以完成加减法。这是一个特别典型的“为什么”考点,命题人非常喜欢问“采用补码的主要目的是什么”,记住了这个本质,比死记转换规则更有用。
做题时常见的易错点有两个。第一,补码的数值范围比原码和反码多一个负数,因为补码中不存在“正0”和“负0”的区分。比如8位二进制补码可以表示-128,而原码和反码只能表示到-127。这个差异经常出现在取值范围题目里。第二,移码通常用于浮点数的阶码表示,它的规则很简单:在补码基础上将符号位取反,移码的全0和全1有特殊用途。这里可以记一句话:移码看的不是数值大小,而是比较大小方便,阶码用移码可以直接比较大小。
关于浮点数表示,还有个高频考点是规格化的判断。规格化尾数的要求是小数点后第一位必须为1,如果不对,就左移尾数并减少阶码,直至满足条件。比如0.0101乘2的3次方不是规格化形式,应写成0.101乘2的2次方。这个操作很多人容易把阶码方向搞反,记住口诀“尾数左移一位,阶码减一;尾数右移一位,阶码加一”就可以了。
提示:历年真题里“浮点数规格化”题目频繁出现,建议每次做题都把阶码和尾数分开画出来,先判断尾数是否满足规格化条件,再决定移位方向,比心算可靠得多。
2.2 存储系统层次结构与Cache
存储系统这一节几乎是上午题的固定嘉宾,考查重心是层次化存储体系、Cache的特点与地址映射、主存编址计算。
存储层次结构有一条经典的“金字塔”逻辑:寄存器在最顶层,往下依次是Cache、主存、辅存。从上往下,容量越来越大,速度越来越慢,单位成本越来越低。这里面有一个高频判断题:CPU可以直接访问的存储器有哪些?答案只有寄存器、Cache和主存,辅存(如硬盘)里的数据必须先调入主存,CPU才能访问。很多人会忽略寄存器也算CPU直接访问的存储,在选择题里丢分。
Cache的工作原理利用了程序访问的局部性原理,这个原理也经常直接作为选择题出现。局部性包含时间局部性和空间局部性:时间局部性指刚访问过的数据很快还会被再次访问,空间局部性指访问某个地址后,其邻近地址也很大概率会被访问。如果用生活场景类比,时间局部性就是你反复翻同一页笔记,空间局部性是你翻某一页时顺带扫了前后几页。
Cache和主存的地址映射方式有三种:直接映射、全相联映射和组相联映射。三种映射方式的对比要烂熟于心:
| 映射方式 | 基本思想 | 优缺点 |
|---|---|---|
| 直接映射 | 主存块只能映射到Cache中固定的一行 | 实现简单、查找快,但冲突率高,容易频繁替换 |
| 全相联映射 | 主存块可映射到Cache任意一行 | 冲突率最低,但硬件成本高、比较电路复杂 |
| 组相联映射 | 将Cache分组,块映射到固定组内任意一行 | 综合前两者优点,成本适中,实际应用最广 |
主存编址计算题几乎是必考,公式并不复杂:存储单元个数乘以每个单元位数等于总位数,再除以8换算成字节数。很多人在这一步出错,因为忽略了按字节编址和按字编址的区分。考试中遇到这类题目,先看题目说的是“按字节编址”还是“按字编址”,这决定最终答案是否需要除以8。
2.3 运算器与控制器的构成
计算机硬件组成中,运算器和控制器的部件分工是选择题常客。CPU由运算器、控制器、寄存器组和内部总线组成,但考试更常见的是让考生在某条指令的执行过程中判断是哪个部件在起作用。
运算器负责算术运算和逻辑运算,核心部件包括算术逻辑单元、累加寄存器、数据缓冲寄存器和状态条件寄存器。其中状态条件寄存器里的标志位,比如进位标志C、零标志Z、溢出标志V,经常被拿来出题。控制器负责指令的读取、翻译和执行调度,核心部件包括程序计数器、指令寄存器、指令译码器和时序部件。程序计数器PC存放的是下一条要执行指令的地址,而不是当前指令的地址,这个细节极容易掉坑。
可以用一个不恰当但好记的类比来区别:运算器是“干活的”,负责算数、比较、移位;控制器是“指挥的”,负责决定下一步干什么、从哪里取指令、指令什么意思。考试中出现“某指令执行过程中CPU完成取指令操作,该操作的控制器部件是”这类问题时,答案应该锁定在程序计数器和指令寄存器上。
实操心得:刷题的时候不必纠结每一个部件的全部细节,优先记住每个部件“唯一性功能”。比如地址寄存器MAR负责保存访问的地址,数据寄存器MDR负责暂存读写数据,这两个也非常容易混淆。记法是一句话:MAR管“位置”,MDR管“内容”。
3. 数据结构与算法:会画图比会背定义更重要
3.1 树与二叉树的遍历体系
数据结构在上午题中占比很高,通常能占到15分左右,其中树和图是命题核心。树的遍历顺序是背诵版必须拿下的硬知识点,尤其是二叉树的前序、中序、后序、层序遍历,近几年上午题几乎每年都有涉及,下午题偶尔也会在算法设计里用到。
遍历规则本身不难:前序是“根左右”,中序是“左根右”,后序是“左右根”。但考试很少直接问“写出某种遍历结果”,更多是给两种遍历结果,要求推出第三种,或者要求还原二叉树结构。这类题的关键是掌握推导技巧,而不是单纯记忆顺序。
给定前序和中序还原二叉树,基本思路是:前序第一个节点一定是根节点,在中序里找到这个根节点,中序左边的是左子树节点集合,右边的是右子树节点集合。然后递归地对左右子树重复此过程。给定后序和中序还原二叉树,思路类似,但根节点要从后序的最后一个节点找。注意:只给前序和后序是无法唯一确定二叉树的,除非题目额外说明是满二叉树或完全二叉树。这个考点在一些难题中会以“能否唯一确定”的判断形式出现。
树还有一个高频考点是二叉排序树和平衡二叉树。二叉排序树的中序遍历结果一定是递增序列,这是判断一棵树是否为二叉排序树的重要方法。平衡二叉树要求每个节点的左右子树高度差绝对值不超过1,插入节点后如果失衡,需要通过LL、RR、LR、RL四种旋转调整。很多考生掌握旋转的方法是背公式,但我建议画图理解:LL型就是左边太重,向右旋转;RR型就是右边太重,向左旋转;LR型和RL型则要先对内侧子树旋转一次,再反方向旋转一次。动手画几棵树,比记住文字定义更容易形成肌肉记忆。
3.2 排序算法的时间复杂度与稳定性速查
排序算法几乎是必考题,而且经常以“以下哪种排序算法是稳定的”“平均时间复杂度为O(nlog2n)的排序算法有哪些”这类方式出现。市面上教材对稳定性的定义是:相等元素的相对次序在排序前后保持不变。比如待排序序列中有两个相同的值,排序后它们的前后关系没有改变,就是稳定的。
常用排序算法的时间复杂度和稳定性,我整理成了背诵版最实用的一张表:
| 排序算法 | 平均时间复杂度 | 最坏时间复杂度 | 空间复杂度 | 稳定性 |
|---|---|---|---|---|
| 直接插入排序 | O(n^2) | O(n^2) | O(1) | 稳定 |
| 希尔排序 | O(n^1.3) | O(n^2) | O(1) | 不稳定 |
| 冒泡排序 | O(n^2) | O(n^2) | O(1) | 稳定 |
| 快速排序 | O(nlog2n) | O(n^2) | O(log2n) | 不稳定 |
| 简单选择排序 | O(n^2) | O(n^2) | O(1) | 不稳定 |
| 堆排序 | O(nlog2n) | O(nlog2n) | O(1) | 不稳定 |
| 归并排序 | O(nlog2n) | O(nlog2n) | O(n) | 稳定 |
| 基数排序 | O(d(n+r)) | O(d(n+r)) | O(r) | 稳定 |
这张表几乎覆盖了所有排序选择题的答案,建议把它当作冲刺阶段的每日一背。有几个易错点需要单独强调:快速排序虽然平均性能优,但最坏情况发生在序列基本有序时,此时退化为O(n^2);堆排序空间复杂度是O(1),归并排序空间复杂度是O(n),这个过程不要弄反;希尔排序是插入排序的改进版,但稳定性被破坏,它不是稳定排序。
3.3 图的核心概念与最小生成树
图的考点包括邻接矩阵和邻接表两种存储方式、图的遍历、最小生成树、最短路径和拓扑排序。
邻接矩阵用二维数组存储图,判断两个顶点之间是否有边的时间复杂度是O(1),但空间复杂度是O(n^2),适合稠密图。邻接表用链表存储每条边的信息,空间复杂度是O(n+e),适合稀疏图。这个“稠密用矩阵、稀疏用链表”的选择逻辑是高频判断题。
最小生成树有两个经典算法:Prim算法和Kruskal算法。Prim算法从某顶点出发,一步步扩展已访问顶点集合,每次选择连接集合内和集合外的最小权值边,适合稠密图。Kruskal算法把所有边按权值从小到大排列,依次选择不会形成环的边,直到连接所有顶点,适合稀疏图。两个算法的时间复杂度分别是O(n^2)和O(elog2e),这个区别经常作为选择题的干扰项。
拓扑排序考的往往不是算法实现,而是判断一个有向图能否进行拓扑排序,即是否存在环。如果图中存在环,说明这些任务之间存在循环依赖,无法排出先后顺序,拓扑排序就无法完成。
踩坑提醒:做图相关题目时,建议先在草稿纸上把图结构画出来,再动手数边和判断连通性。很多选择题的干扰项设置依赖“数一遍”的过程,凭空心算很容易漏掉某条边或某个顶点。
4. 操作系统:进程管理是重中之重
4.1 进程状态转换与同步互斥
操作系统在上午题中大概占8到10分,进程管理是其中最核心的章节。进程状态转换图几乎是每年必考,核心状态包括运行态、就绪态、阻塞态。三种状态之间的转换关系要记住几个关键规则:只有就绪态可以转换为运行态,运行态可以转换为就绪态或阻塞态,阻塞态只能转换为就绪态。运行态转换为阻塞态是因为进程等待某事件发生,比如等待I/O完成;阻塞态转换为就绪态是因为等待的事件已经完成。
特别容易出错的点有两个。第一,就绪态不能直接转换为阻塞态,因为就绪态进程还没获得CPU,谈不上因为等待某个资源而阻塞。第二,进程从运行态直接转换为就绪态的原因通常是时间片用完,或者被更高优先级的进程抢占,而不是进程主动让出CPU。
同步与互斥是另一个高频考点。互斥是指多个进程对临界资源的访问排他性,同一时刻只允许一个进程进入临界区。同步是指多个进程之间存在协作关系,比如一个进程必须等待另一个进程完成后才能继续执行。用生活中的场景区分:互斥是厕所只有一个坑位,谁进谁锁门;同步是上菜和吃菜的关系,菜不上来就没法吃。P操作和V操作是信号量机制的两种原子操作,P操作申请资源,V操作释放资源。题目中经常给出一个信号量的初始值,要求分析多个进程并发执行后的最终值,这类题目算一遍即可,关键是要画信号量增减表,不要心算。
4.2 死锁产生的必要条件与银行家算法
死锁考点通常围绕四个必要条件展开:互斥条件、请求与保持条件、不可剥夺条件、循环等待条件。这四条是死锁产生的充分必要条件,选择题中经常出现“以下哪项不是死锁产生的必要条件”“破坏死锁的哪个条件可以预防死锁”这类问法。
预防死锁的思路是破坏四个必要条件中的任意一个:破坏请求与保持条件可以采用资源一次性分配方式;破坏不可剥夺条件可以采用资源抢占方式;破坏循环等待条件可以采用资源有序分配法。注意互斥条件无法破坏,因为有些资源天然必须互斥访问,比如打印机。银行家算法是避免死锁的经典算法,核心思想是:系统在分配资源之前,先判断此次分配是否会导致系统进入不安全状态,如果会,则拒绝分配。考试中经常给一张安全序列题,要求判断某个时刻是否存在安全序列。
做银行家算法题目时,有一个经验非常实用:先计算每个进程还需要的资源量,再计算系统当前可用资源量,然后模拟分配顺序,从剩余需求量最小的进程开始尝试。每次成功分配并回收一个进程的资源后,系统可用资源会变多,再继续尝试下一个进程。如果所有进程都能执行完毕,则存在安全序列,否则就会进入死锁。
4.3 存储管理与页面置换算法
存储管理中的分页存储管理是必考内容,主要考查逻辑地址到物理地址的转换过程。分页存储管理中,逻辑地址由页号和页内偏移量组成,物理地址由块号和页内偏移量组成。转换过程是:根据页号查询页表,得到对应的物理块号,然后将物理块号和页内偏移量拼接起来,形成物理地址。
一个典型的计算公式是:逻辑地址除以页面大小得到的商是页号,余数是页内偏移量;物理块号乘以页面大小加上页内偏移量,得到物理地址。这类题目不难,但容易在进制转换上出错。做题时先统一单位,页内偏移量的位数等于页面大小的对数,页号的位数等于总地址位数减页内偏移量位数。很多考生直接在十进制里相除,忽略了二进制的位表示,导致偏移量算错。
页面置换算法中,重点记忆先进先出、最近最少使用和最佳置换。先进先出置换算法实现简单,但可能出现Belady异常,即分配的物理块数增加时缺页次数反而增加。最近最少使用算法利用局部性原理,每次淘汰最长时间没有被访问的页面,不会出现Belady异常。最佳置换算法理论上缺页率最低,但无法实现,因为它需要预知未来的页面访问序列。考试中常考查给定页面走向序列和物理块数,计算缺页次数,这类题只能老老实实画表格模拟。
实操心得:模拟页面置换时,画一个以“页面走向”为列、以“物理块状态”为行的表格,一步步更新,能最大限度避免遗漏。很多人喜欢心算,但页面置换过程一步出错后面全错,建议在草稿纸上完整画出过程。
5. 数据库系统:范式判断与E-R图转换
5.1 关系代数与SQL核心操作
数据库部分在上午题的占比大约是8到10分,下午题还有一道15分的大题,重要性不用多说。关系代数和SQL查询是基础中的基础。关系代数中的选择操作是从关系中选出满足条件的元组,相当于SQL中的WHERE条件;投影操作是选出指定属性列,相当于SQL中的SELECT指定列。这两种操作经常放在一起考,需要区分清楚:选择是对“行”的筛选,投影是对“列”的筛选。
连接操作中,自然连接是最常考的,它会自动去除重复的属性列,而等值连接不去除。这个差异在判断结果关系模式时非常关键。比如两个关系R和S都有属性A,自然连接的结果中A只出现一次,等值连接的结果中A会出现两次。答题时如果题目说“自然连接”,结果属性数量要少一个,这是典型的送分点也是典型坑点。
SQL方面,掌握基本的SELECT语句结构就够了,但两个容易混淆的子句要特别留意:GROUP BY和HAVING。GROUP BY按某列分组,HAVING对分组后的结果进行筛选,它和WHERE的区别是:WHERE在分组前过滤行,HAVING在分组后过滤分组。如果题目要求“查询每个部门的员工数超过5的部门”,必须先按部门分组,再用HAVING过滤。
5.2 函数依赖与范式判定方法
范式判定是下午题大题的常客,也是很多考生觉得最难的部分。别怕,掌握一套固定流程,范式题是可以按步骤得分的。
第一,判断候选键。候选键是能唯一标识元组且不包含多余属性的属性组。求候选键的方法在很多教材里有完整算法,但考试中最常用的方法是观察函数依赖集:如果一个属性或属性组没有出现在所有函数依赖的右部,它很可能就是候选键的一部分。更稳妥的做法是从左部出发,逐一求出属性闭包,看闭包是否包含全部属性。
第二,判断范式级别。满足1NF要求所有属性都是不可分的原子值;满足2NF要求非主属性完全依赖于候选键,即不存在部分函数依赖;满足3NF要求不存在传递函数依赖;满足BCNF要求每一个决定因素都包含候选键。这里给一个节奏感很强的背诵口诀:“1NF原子性是底线,2NF消灭部分依赖,3NF切断传递依赖,BCNF决定因素都含键”。
真题中常见的坑是关系模式里存在多个候选键,判断部分函数依赖时要看非主属性是否依赖于任何一个候选键的一部分。有时候一个非主属性对某个候选键完全依赖,对另一个候选键却部分依赖,此时该模式仍然不满足2NF。
5.3 E-R图向关系模式的转换规则
E-R图向关系模式转换是下午题固定题型的组成部分,规则很清晰:
- 实体转换为一个关系模式,实体的属性就是关系模式的属性,实体的键就是关系模式的键。
- 1对1联系可以与任意一端合并,在合并后的关系中添加对方的键作为外键。
- 1对N联系可以独立转换为一个关系模式,也可以与N端合并,在N端关系中添加1端实体的键作为外键。
- M对N联系必须独立转换为一个关系模式,该关系模式的键是两端实体的键的组合。
很多人在转换联系时犯错,是把联系的属性也丢了。比如“选课”联系有属性“成绩”,如果选择独立转换为关系模式,这个关系的属性应该包括学号、课程号和成绩。如果选择合并到N端,也要把“成绩”属性加到学生关系中。
一个小技巧:做题时先把E-R图中所有实体、联系、属性都列出来,再按转换规则逐条处理,最后数一数转换得到的关系模式数量是否符合预期。如果题目问“最少可以转换为几个关系模式”,1对1和1对N联系尽量合并,M对N联系必须独立,最后的关系模式数量一般为实体数加上多对多联系数。
6. 软件工程与面向对象:概念辨析与设计原则
6.1 软件生命周期模型选择
软件工程在上午题中占比大约是8到10分,下午题中也会有一道大题考查结构化分析与面向对象分析。软件生命周期模型是必考内容,重点考查不同模型的特点和适用场景。
瀑布模型是文档驱动型模型,阶段划分清晰,包括需求分析、设计、编码、测试、维护等阶段,适合需求明确、变更少的项目。但它的缺点也很明显:无法适应需求变化,风险到后期才暴露。快速原型模型强调先开发一个原型供用户确认需求,适合需求不明确的项目。增量模型把系统分解为多个增量构件,逐个交付,适合需求可以分批次交付的项目。螺旋模型结合了原型模型和瀑布模型的优点,引入了风险分析环节,适合大型复杂项目。喷泉模型主要针对面向对象开发,强调迭代和无缝过渡。
选择题经常给出项目情境,要求选择最合适的模型。读题时抓住关键词:需求不明确选原型、风险大选螺旋、大型复杂系统选螺旋、需求明确且稳定选瀑布、面向对象开发选喷泉。这个对应关系就是送分题。
6.2 内聚与耦合的强度排序
内聚和耦合是衡量模块独立性的两个标准,下午题中经常结合数据流图或模块设计一起考查。模块独立性越强越好,体现在两个方面:模块内部内聚程度越高越好,模块之间耦合程度越低越好。
内聚由弱到强排序:偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内聚、顺序内聚、功能内聚。偶然内聚是模块内各部分之间无任何关联,是最差的内聚;功能内聚是模块内所有元素共同完成一个功能,是最理想的内聚。耦合由弱到强排序:非直接耦合、数据耦合、标记耦合、控制耦合、外部耦合、公共耦合、内容耦合。非直接耦合是模块之间没有直接关系,最理想;内容耦合是一个模块直接访问另一个模块的内部数据,最糟糕。
记忆上有一个很实用的口诀:“内聚七级功能好,耦合七级内容糟”。考试中如果题目问“提高模块独立性的方法”,答“提高内聚、降低耦合”不会错。如果问某个模块划分属于哪种内聚或耦合,要结合题目描述具体分析。比如模块中各处理步骤都与同一数据有关,是通信内聚;一个模块通过参数传递数据给另一个模块,是数据耦合。
6.3 面向对象设计原则与设计模式
面向对象部分是近年考试的热度上升区,面向对象设计原则和设计模式分类是高频考点。
六个基本原则中常考的是开闭原则、里氏替换原则和依赖倒置原则。开闭原则指的是对扩展开放、对修改关闭,也就是新增功能时尽量通过扩展实现,而不是修改已有代码。里氏替换原则指子类必须能够替换其父类,并且不会影响程序正确性。依赖倒置原则指高层模块不应该依赖低层模块,两者都应该依赖抽象。设计原则经常结合设计模式考查,命题角度通常是“某个设计模式体现了什么原则”。
设计模式按目的分为创建型、结构型和行为型三类。创建型模式关注对象的创建过程,包括工厂方法、抽象工厂、建造者、原型和单例。结构型模式关注类与对象的组合方式,包括适配器、桥接、组合、装饰、外观、享元和代理。行为型模式关注对象之间的职责分配和通信方式,包括职责链、命令、解释器、迭代器、中介者、备忘录、观察者、状态、策略、模板方法和访问者。
一个简易记法可以概括为:创建型管“怎么造对象”,结构型管“怎么拼类和对象”,行为型管“怎么分配职责和交互”。考试中常见的给出场景选模式的题型,比如“提供一个创建一系列相关或相互依赖对象的接口,无需指定具体类”对应抽象工厂模式,“定义了一种一对多的依赖关系,让多个观察者对象同时监听某一主题对象”对应观察者模式。把每种模式的意图记熟,这部分基本不会失分。
7. 如何用这份背诵版赢下考前冲刺
7.1 三条最高效的复习节奏建议
如果你距离考试还有两个月以上,建议这份背诵版用来对照教材目录,优先搞清楚每个考点在教材中的位置,把不理解的概念先回课本补课。如果你只剩三周左右,背诵版的定位就是“反复循环”:每天早上花20分钟过一遍高频表格,比如排序算法速查表和范式判定口诀,中午刷对应章节的真题,晚上错题再回到背诵版里索引知识点。
我在实际备考中体会到,背诵版最有效的用法不是背完一遍就扔,而是当成“错题本目录”。每次刷题遇到记忆模糊的地方,就在背诵版对应的位置上做个标记,冲刺阶段只看有标记的位置。这样复习的量会越来越少,信心会越来越足。
7.2 常见问题速查:背诵版使用中的五个典型问法
| 问题 | 快速判断思路 |
|---|---|
| 补码和原码表示的数值范围为什么不同 | 补码中0的表示唯一,因此多出一个最小负数 |
| Cache直接映射和全相联映射谁冲突率高 | 直接映射冲突率高,但硬件实现简单 |
| 快速排序最坏情况是什么 | 基本有序时退化为O(n^2) |
| 死锁的四个必要条件缺一不可吗 | 是,四个条件同时成立才会死锁 |
| 3NF和BCNF谁更严格 | BCNF更严格,每个决定因素都必须包含候选键 |
7.3 考前一周的背诵节奏
考前一周不建议再啃新内容,这个阶段做两件事就够了:第一,每天过一份完整的背诵版内容,用出声朗读的方式把表格和口诀念出来,让大脑在听觉和视觉双重刺激下形成记忆回路;第二,每天做一套完整真题的选择题部分,控制在45分钟内完成,对答案后只看涉及背诵版知识点的错题,不看偏题怪题。
有个小技巧值得分享:把背诵版里的高频口诀做成手机备忘录的置顶笔记,利用通勤碎片时间一遍遍扫。很多知识点的记忆不是一次性建立起来的,而是多次重复后自然成形。我认识的一位做备考辅导多年的朋友常说,软件设计师上午题考的不是智商,而是谁更愿意在最枯燥的重复环节坚持下来。
最后再提醒一句:背诵版用于快速定位考点和强化记忆没问题,但它替代不了真题训练。下午题的数据流图补充、数据库设计、算法设计这些应用型题目,必须通过实际做题来培养,背诵解决不了手生的问题。我的个人体会是,上午题靠背诵版高效抢分,下午题靠真题反复操练,两条线同时推进,软件设计师这个证书基本就稳了。