☰
计算机考研复试408四门专业课问答页码索引与查漏清单
2026/11/4 2:49:03 网站建设 项目流程

简介:面向备考杭州电子科技大学计算机考研复试的考生,这份PDF围绕数据结构等七门专业课的常见面试问题整理问答,覆盖关键路径、栈与队列、BFS/DFS、最小生成树、排序复杂度、二叉排序树、最短路径及信息安全与生活应用等考点,可用于梳理答题框架、查漏补缺和模拟口述。包内共1个PDF文件,大小约1.01MB,便携易读,适合在复试前快速翻阅与自测。已有2750人学习,说明其在杭电计算机复试备考群体中有一定参考度。读者可借助其中的问题清单和简明答案,对照王道教材与杭电本科教材页码定位复习内容,针对图论、排序、存储结构等高频点建立可复述的知识脉络,并结合历年真题补充练习,提升面试表达的准确性与完整度。

1. 知识地图:七门课的问答分布与一条页码索引

计算机考研复试的专业课问答,乍看是零散题目,拆开看更接近一张按科目切片的索引表。这份资料的骨架很直接:数据结构、计算机组成原理、操作系统、计算机网络四门课,每道题后面带一个页码,指向 2021 王道四本复习指导书的具体某页;数据库、编译原理、软件工程三门的页码,指向本科教材。题目是明线,页码是暗线——它真正省掉的是“这题答案去哪本书第几页找”的翻书时间。

数据结构约 135 问、计组约 67 问、操作系统约 60 问、计网约 76 问,四门加起来四百上下,覆盖的正是复试最爱追问的那批老面孔:图论、排序复杂度、补码、流水线、进程线程、三次握手。适合两类人:一类是初试刚过、想把四门课重新串成体系的;一类是本科教材还留着、只缺一份“问题清单”来对着查的。

2. 数据结构:图与树的问答主线

数据结构在这份问答里占比最大,而图论又是其中的重心。把题目按“存储—遍历—生成树—最短路径—关键路径”这条链排一遍,会发现追问的落点几乎都卡在“复杂度”和“适用条件”上,而不是算法步骤本身。

2.1 图的三条主线:遍历、最小生成树、最短路径

存储方式决定了后面所有复杂度答案能不能自洽。邻接矩阵空间 O(n²),判断两点是否相邻 O(1),稠密图友好;邻接表空间 O(n+e),适合稀疏图,找某个点的全部邻居很快,但要判断两点是否直接相邻得扫链。十字链表对应有向图,邻接多重表对应无向图,这两句是标准的送分句,也最容易答成“十字链表对应无向图”这种翻车。

遍历部分的固定追问是 BFS 和 DFS 的时间、空间复杂度:

遍历辅助结构时间复杂度(邻接表)时间复杂度(邻接矩阵)空间复杂度
BFS队列 + visited[]O(n+e)O(n²)O(n)
DFS递归栈(或显式栈)O(n+e)O(n²)O(n)

注意空间复杂度写 O(n) 而不是 O(1)。visited[] 数组本身就是 n 个元素,队列或递归栈最坏也到 n。把这一条写成 O(1) 是典型的口误。

from collections import deque def bfs(graph, start): # graph: 邻接表,graph[u] 是 u 的所有邻居 visited = [False] * len(graph) # n 个标记位,空间 O(n) q = deque([start]) visited[start] = True # 入队时就标记,避免重复入队 order = [] while q: u = q.popleft() # 队首出队,保证按层扩展 order.append(u) for v in graph[u]: # 邻接表遍历,总代价 O(e) if not visited[v]: visited[v] = True q.append(v) return order

这段代码里两个参数要能说清:visited必须在入队时置真,如果在出队时才置真,同一个点会被多次压进队列,复杂度就不再是 O(n+e);deque换成list.pop()就退化成栈,遍历顺序会变成 DFS 式的深挖,但访问标记的处理逻辑仍然成立——这也是“用栈能不能代替队列”那道追问的答案:能,只是麻烦且顺序变了。

最小生成树的两问,答案基本固定成一张对比表:

算法做法时间复杂度适用
Prim在顶点集 U 与 V−U 之间找权值最小的边,把顶点并入 UO(V²)边稠密的图
Kruskal全部边按权排序,依次取最小边,不成环就加入O(ElogE)边稀疏、顶点较多的图

最短路径同理:Dijkstra 求单源,Floyd 求各顶点之间,前者是贪心策略,后者是三重循环的动态规划。被问到“为什么 Dijkstra 不能处理负权边”,要答的是贪心前提被破坏——一旦有负权,已确定的最短路径可能被后续路径反超。

2.2 关键路径:为什么要先判断有向无环

关键路径是这份问答里少见的“概念 + 计算”双考题型。定义很好背:从源点到汇点的所有路径中,路径长度最大的那条叫关键路径,其上的活动叫关键活动。真正容易被追问的是前置条件——不是所有图都能求关键路径,必须是有向图且没有回路。AOE 网本质是一个有向无环图,一旦有环,事件的最早发生时间递推就会陷入循环依赖,算不出来。

四个时间量的求法可以压缩成下表,背表比背定义快:

量求法方向
事件最早发生时间 ve取所有前驱ve + 边权的最大值从源点正推
事件最迟发生时间 vl取所有后继vl − 边权的最小值从汇点逆推
活动最早开始时间 e等于该活动起点事件的 ve由 ve 得到
活动最迟开始时间 l等于该活动终点事件的 vl 减去活动持续时间由 vl 得到

活动的时间余量 d = l − e,d 等于 0 的活动就是关键活动,串起来就是关键路径。这里有两个口头追问的坑:一是关键路径可能不唯一;二是缩短某个关键活动之后,它可能不再是关键的,因为别的路径顶了上来——项目工期的压缩从来不是线性的。

判断一个有向图有没有环,标准答法是拓扑排序:反复选入度为 0 的顶点输出并删除其出边,如果循环结束时还有顶点没输出,说明存在回路。另一条路是 DFS 看有没有回边,答出来算加分。

2.3 树、森林与二叉树的边界

“度为 2 的树和二叉树有什么区别”这道题出现频率极高,答案要分两层。结构上,二叉树的左右子树严格区分,交换位置就是另一棵树;度为 2 的树没有左右之分,交换孩子还是同一棵树。度上,二叉树可以是 0、1、2,甚至可以是空树;度为 2 的树每个结点的度必须是 2,而且至少有一个结点带两棵子树。

树和图的边界也要清楚:树可以是空树,图不能是空图;树是连通且无环的,图可以不连通、可以有环;树是一对多,图是多对多。一句话概括——树是特殊的图。

树的存储三种表示法各有取舍:

表示法结构优点缺点
双亲表示法数组存结点 + 每个结点记父结点下标找父结点 O(1)找孩子要遍历整表
孩子表示法每个结点挂一个孩子链表找孩子方便找父结点麻烦
孩子兄弟表示法左指针指第一个孩子,右指针指下一个兄弟可无损转成二叉树逻辑上已经不是原来的结构

线索二叉树解决的是另一类问题:二叉链表里大量指针是空的,把空的左指针指向前驱、空的右指针指向后继,配上 ltag、rtag 两个标志位区分“指针”还是“线索”,查找前驱后继就不用再中序遍历一遍了。被追问“线索二叉树有什么用”,答“加快查找结点前驱和后继的速度”就够,别展开成遍历算法。

二叉树的性质属于必背项:n0 = n2 + 1;第 i 层最多 2^(i−1) 个结点;深度为 h 的二叉树最多 2^h − 1 个结点;n 个结点的完全二叉树深度为 ⌈log2(n+1)⌉。这几条在填空式追问里出现得极频繁,写错一个下标就全错。

2.4 被追问最多的一句话:BFS 为什么要用队列

“为什么要用 BFS”“那用栈可以吗”是连招。BFS 的价值在于按距离分层扩展,先访问离起点近的结点,队列的先进先出刚好保证了这个顺序;换成栈就会先深挖一条路,退化成 DFS 的访问顺序。用两个栈模拟队列当然可行,但工程上没有意义,答“可以但更麻烦”是标准收尾。

再补一个交叉点:树的遍历不需要 visited 数组,图的遍历需要。原因不玄学——树没有环且必连通,从根出发每条路只会走一次;图可以有环也可以不连通,不标记就会死循环,不外层套循环就会漏掉其他连通分量。图的遍历可以从任意顶点开始,树一般从根开始,这两句经常被合并成一道对比题。

至于“数据结构在现实里用在哪”,问答里给的两个例子很好用:微信的好友关系是有向图,顶点是用户,边是是否加了好友,查找好友靠索引;陌生城市坐公交的最少换乘、最少时间,本质是图上的最短路径。这类题不需要标准答案,需要的是一个能自圆其说的具体场景。

3. 数据结构:排序、查找与存储结构的对比矩阵

排序这一块,题目数量多但重复度高,本质就三张表加六道判定题。把这些背成矩阵,比逐条背算法步骤划算得多。

3.1 八种排序的三张对照表

第一张是复杂度与稳定性,这张表必须能默写:

算法最好平均最坏空间稳定性
直接插入nn²n²1稳定
冒泡nn²n²1稳定
简单选择n²n²n²1不稳定
希尔与增量有关与增量有关与增量有关1不稳定
快速排序nlog2nnlog2nn²log2n不稳定
堆排序nlog2nnlog2nnlog2n1不稳定
2 路归并nlog2nnlog2nnlog2nn稳定
基数排序d(n+r)d(n+r)d(n+r)n+r稳定

第二张是适用场景,问答里归纳得相当到位:直接插入、简单选择、冒泡都简单但慢,适合基本有序的小序列;希尔排序的效率很大程度取决于增量选择,而合适的增量要靠经验;堆排序在最坏情况下性能优越、辅助空间比归并少,缺点是不适合待排元素太少的情况,也不稳定,不适合对象排序;快排平均性能最优,适合无序且元素多的场景;归并排序辅存开销大但适合对象排序;基数排序适合位数很多的数据,不能处理负数。

第三张是“哪些算法在三种情况下复杂度一样”,这是最容易混的一组。最好、最坏、平均三者相同的只有四个:简单选择、堆排、归并、基数。只要求最好与平均相同,加上快排;只要求最坏与平均相同,加上直接插入和冒泡。记忆锚点是:快排在最坏情况掉到 n²,所以它进不了“三者相同”那组。

3.2 六个“与初态有关吗”的判定题

这类题看着像智力题,其实有固定判据,死记会比推理稳妥:

判定项与初态无关与初态有关
比较次数二路归并、简单选择、基数快排、直接插入、冒泡、堆排、希尔
排序趟数直接插入、折半插入、希尔、简单选择、归并、基数冒泡、快排
一趟结束确定最终位置简单选择、快排、冒泡、堆排—
只求前 k 小冒泡、堆排、简单选择—

判断逻辑其实能自己推:比较次数与初态无关,说明算法不管数据长什么样都要把所有元素比一遍,简单选择是典型的“无论顺序如何都扫 n 轮”;趟数与初态有关的,都是能提前收敛的算法,冒泡一趟没交换就可以停,快排的划分位置依赖数据分布。

“一趟结束后能选出元素放到最终位置”这一组也好理解:简单选择每趟选出最小值放好,冒泡每趟把最大值冒到末尾,快排每趟把枢轴归位,堆排序每趟把堆顶换到末尾——它们的共同点是每趟都在做“确定一个最终位置”的动作。

3.3 查找:折半、分块、B 树与散列

查找部分的骨架是“静态查找表”和“动态查找表”的分野。静态表只查不改,顺序查找、折半查找、分块查找都属于这一类;动态表要支持插入删除,二叉排序树、平衡树、B 树、散列表属于这一类。

顺序查找的细节题在哨兵:把待查值放在表头当哨兵,循环里就不用每次判断下标越界,比较次数减少一半左右的判断开销,这是“用空间换判断”的经典手法。折半查找要求顺序存储且有序,时间复杂度 O(log2n),平均查找长度约 log2(n+1) − 1,判定树是一棵平衡二叉树。分块查找介于两者之间,索引表里存每块的最大关键字,块内可以无序,整表要求“块间有序、块内无序”,平均查找长度最优时块长取 √n。

B 树和 B+ 树的对比是必考项:

维度B 树B+ 树
分支与关键字n 个关键字对应 n+1 个分支n 个关键字对应 n 个分支
关键字分布每个结点都存关键字,只出现一次所有关键字都出现在叶结点,非叶结点只做索引
叶结点不带链表叶结点按大小顺序链接,支持顺序查找
查找随机查找,可能在非叶结点命中随机查找一定走到叶层,另支持从叶结点顺序查找

m 阶 B 树的硬性条件要背准确:根结点至少 2 个分支,非根非叶结点至少 ⌈m/2⌉ 个分支,所有叶结点在同一层。B 树的插入是“分裂”,删除是“借位或合并”,答到这两个词基本够用。

散列部分的核心是三个定义和三个因素。散列函数把关键字映射到地址,不同关键字映射到同一地址叫冲突,这些关键字互为同义词。查找效率取决于散列函数、冲突处理方法、装填因子三者,装填因子 α = 表中记录数 / 散列表长度,α 越大冲突越多。冲突处理分两大类:开放定址(线性探测、平方探测、再散列)和拉链法,前者容易产生堆积,后者把同义词串成链表。

# 计算装填因子并给出线性探测下的探测次数,用来估算 ASL def linear_probe_insert(table, key): m = len(table) # 散列表长度 h = key % m # 散列函数,除留余数法 probes = 1 while table[h] is not None: # 冲突则向后线性探测 h = (h + 1) % m probes += 1 if probes > m: # 表已满,插入失败 return None table[h] = key return probes # 返回该关键字的查找长度

这段代码把“探测次数”直接当成查找长度来用,是手算 ASL 的快捷方式。m取质数能减少冲突,这一点在参数设计题里常被问;probes > m的判断是防止表满后死循环,实际考试中装填因子小于 1 时不会触发,但代码里留着更稳。

3.4 外部排序:多路归并与最佳归并树

外部排序的题看着唬人,实际只有四个考点:归并趟数、增大归并路数、减少归并段个数、最佳归并树。

归并趟数约为 ⌈log_k m⌉,k 是归并路数,m 是初始归并段个数。减少外存读写次数就两条路:一是增大 k,靠多路归并减少趟数,但 k 变大会让内部比较次数上升,用败者树可以把每次选最小的比较代价压到 log2k;二是减少 m,用置换-选择排序生成长度不等的初始归并段,段数少了趟数自然少。

最佳归并树对应的是“如何组织长度不等的初始归并段使 I/O 最少”,本质是哈夫曼树:每次挑最短的 k 段合并,总读写代价最小。构造严格 k 叉哈夫曼树时要注意补虚段——如果 (m−1) mod (k−1) ≠ 0,说明最后一次合并凑不满 k 个,需要补 (k−1) − (m−1) mod (k−1) 个长度为 0 的虚段。8 个归并段构造成严格 3 叉最佳归并树,就是先算 (8−1) mod 2 = 1,补 1 个虚段变成 9 段,再每三个一组合并。这个补虚段的步骤漏掉,整棵树就错了。

4. 计组、操作系统与计网:机器层、资源层与协议层

三门课放在一起复习有个好处:它们的追问方式高度相似,都是“概念 + 结构 + 对比”,把对比表整理出来,效率比逐题背高得多。

4.1 计组:从补码到流水线的四层结构

计组的问答可以按“数据表示—存储层次—指令与 CPU—总线与 I/O”四层排。

数据表示层的第一个追问是“补码加减法为什么用补码”。标准答案有两条:补码表示法中 0 只有一种形式,而原码和反码有 +0 和 −0 之分,用它们运算还得修正结果;补码把减法转成加法,[x−y]补 = [x]补 + [−y]补,而 [−y]补 就是 y 的补码各位取反、末位加一。运算器只要一个加法器加简单变换就能做减法,这是硬件层面的直接收益。

溢出判断有三种方法,答全的很少:双符号位法(结果 00 或 11 正常,01 正溢,10 负溢)、单符号位法(最高位进位与次高位进位异或为 1 则溢出)、以及用数据位进位判断。三种答出两种就算过关,能说清“为什么双符号位能判断”更稳——它本质上是把符号位的进位保留下来参与判断。

存储层次是计组问答最密的一段。SRAM 用触发器存信息,速度快、不需要刷新、成本高,做 Cache;DRAM 用电容存信息,需要定期刷新,刷新方式有集中刷新、分散刷新、异步刷新三种,成本低,做主存。Cache 的三种映射(直接、全相联、组相联)、替换算法(LRU、FIFO、随机)、写策略(写回法配写分配、全写法配非写分配)构成一个完整的三段式追问链,任何一段答不上都会被打断。虚拟存储器和 Cache 的比较要从目的、位置、替换单位、缺失代价几个维度说,不能只说“都是缓存”。

// IEEE 754 单精度:1 位符号 + 8 位阶码(偏移 127)+ 23 位尾数 // 以 -12.5 为例,演示规格化过程 // 12.5 = 1100.1B = 1.1001B × 2^3 // 符号位 1,阶码 = 3 + 127 = 130 = 10000010B // 尾数去掉隐含的 1,得 1001000...00 // 结果:1 10000010 10010000000000000000000

浮点数这块的固定套路是“规格化 → 算阶码 → 取尾数”,浮点加减法则是“对阶(小阶向大阶看齐)→ 尾数求和 → 规格化 → 舍入 → 溢出判断”五步。阶码用移码、尾数用原码,这两句经常被连问。

指令与 CPU 层的对比项是硬布线和微程序:微程序控制器把微命令编成微指令存在控制存储器里,改起来只需要改微程序,所以容易变更;硬布线用组合逻辑直接产生控制信号,速度快但改不动。CISC 的代表是 x86,RISC 的代表是 ARM,这个对应关系必须张口就来。

流水线部分要背影响流水线的三类因素:结构冒险(资源冲突)、数据冒险(后一条指令依赖前一条的结果)、控制冒险(转移指令改变执行流)。性能指标是吞吐率、加速比、效率三个,超标量则是靠多条流水线并行来提升指令级并行度。

总线与 I/O 这一层的重点是四种 I/O 控制方式:程序查询、程序中断、DMA、通道。DMA 和中断的区别是高频追问,整理成表最省事:

维度程序中断方式DMA 方式
数据传送由 CPU 执行程序完成由 DMA 控制器硬件完成
传送单位字节或字数据块
响应时间每条指令执行结束后每个存取周期结束后
对 CPU 的干预每次传送都要中断 CPU只在传送开始和结束时干预
优先级低于 DMA高于中断

4.2 操作系统:进程、同步、内存、文件四条线

操作系统的四特征(并发、共享、虚拟、异步)里,最基本的是并发和共享,这两个互为存在条件。再往下,“为什么会有进程”要答到“为了描述程序的并发执行、实现资源的隔离与分配”,而不是笼统地说“为了多任务”。

进程与线程的比较可以做成一张固定表:

维度进程线程
资源资源分配的基本单位不拥有系统资源,共享所属进程的资源
调度传统上作为调度单位是 CPU 调度的基本单位
切换开销大,要切换页表、地址空间小,只切换少量寄存器
通信需要共享存储、消息传递、管道等方式直接读写共享内存,需同步保护

用户级线程和内核级线程的区别在于“谁在管理”:用户级线程由用户空间的线程库管理,切换不用进内核,但一个线程阻塞会导致整个进程阻塞;内核级线程由内核管理,能真正并行,但切换开销大。多线程模型就是把两者组合起来,多对一、一对一、多对多三种。

同步互斥这一段,必背的是临界区四原则:空闲让进、忙则等待、有限等待、让权等待。PV 操作要能写出生产者-消费者:

// 生产者-消费者:mutex 保护缓冲区,empty/full 控制数量 semaphore mutex = 1; // 互斥信号量,初值 1 semaphore empty = n; // 空闲缓冲区个数,初值 n semaphore full = 0; // 已放入产品数,初值 0 void producer() { P(empty); // 先申请空位,再抢锁,顺序反了会死锁 P(mutex); // 放入产品 V(mutex); V(full); // 通知消费者有新产品 } void consumer() { P(full); P(mutex); // 取出产品 V(mutex); V(empty); }

这里最容易翻车的是 P 操作的顺序:必须先 P(empty) 再 P(mutex)。如果反了,生产者拿到锁之后卡在等空位上,消费者永远拿不到锁,整条流水线锁死。管程则是把这套同步逻辑封装起来,保证同一时刻只有一个进程进入管程,特点是封装性、互斥性、可唤醒性。

死锁部分要背四条必要条件:互斥、不剥夺、请求并保持、循环等待。三种处理策略分别是预防(破坏四个条件之一)、避免(银行家算法,判断分配后是否处于安全状态)、检测与解除(资源分配图化简、终止进程或剥夺资源)。银行家算法的核心是“安全序列”,能找出一个安全序列就说明分配可行;不安全状态不等于死锁状态,这一点容易答错。

内存管理是操作系统里问答最多的一块。程序装入三种方式(绝对装入、可重定位装入、动态运行时装入)、链接三种方式(静态链接、装入时动态链接、运行时动态链接)、连续分配的四种动态分区算法(首次适应、最佳适应、最坏适应、邻近适应)要能一口气说完。分页要答出页表、逻辑地址到物理地址的转换、快表 TLB、多级页表;被问“有多少次访存”,基本分页是 2 次(查页表 + 访问数据),有快表命中是 1 次,二级页表是 3 次。

虚拟内存的三个特征是多次性、对换性、虚拟性;请求分页和基本分页的区别在于前者增加了请求调页、页面置换、缺页中断处理。页面置换算法要能说出 OPT、FIFO、LRU、CLOCK 四种,以及 FIFO 会出现 Belady 异常(分配的物理块变多,缺页率反而上升)。抖动现象的定义是“刚换出的页面马上又要换入”,根源是分配的物理块数小于工作集大小。

文件管理这边,“为什么要有索引节点”是个好问题:目录项里如果直接放文件名和全部属性,每次访问目录都要读盘;把属性抽出来存到索引节点,目录项只剩文件名和索引节点号,目录文件变小,检索快了。“文件分配方式”要覆盖连续分配、链接分配(隐式、显式 FAT)、索引分配(普通、链接、多层、混合)。硬链接是多个目录项指向同一个索引节点,删除一个不影响文件本体;软链接是一个存放路径的独立文件,原文件删了链接就悬空。

磁盘部分,调度算法(FCFS、SSTF、SCAN、LOOK、C-SCAN、C-LOOK)要能用带数字的例子算磁头移动距离。减少延迟的方法有三条:交替编号、错位命名、磁盘地址结构设计成分层(柱面号、盘面号、扇区号),按柱面优先可以少移动磁臂。

4.3 计网:五层模型上的设备、协议与地址

计网问答的组织方式最统一:先给分层,再往每层填设备、协议、地址。

层次典型设备数据单位地址代表协议
物理层中继器、集线器比特无—
数据链路层网桥、交换机帧MAC,48 位PPP、HDLC、CSMA/CD
网络层路由器分组IP,32 位(v4)IP、ICMP、ARP、RIP、OSPF
传输层—报文段端口,16 位TCP、UDP
应用层—报文域名HTTP、DNS、DHCP

OSI 七层与 TCP/IP 四层的差别,本质是“理论模型”和“工程模型”的差别:OSI 把会话层和表示层单列,TCP/IP 把它们并进应用层;OSI 先有模型后有协议,TCP/IP 先有协议后有模型。五层模型则是教学用的折中,把网络接口层拆成物理层和链路层。通信子网对应下三层,资源子网对应上三层。

“MAC 和 IP 的区别”几乎是必问题,四个维度答全:长度(32 位 vs 48 位)、所在层(网络层 vs 数据链路层)、分配依据(网络拓扑 vs 厂商烧录)、可变性(IP 可改,MAC 一般固定)。地址转换靠 ARP(IP 找 MAC)和 RARP(MAC 找 IP),IPv6 里 ARP 的功能被邻居发现协议取代。

传输层要把 TCP 和 UDP 摆在一起:

维度TCPUDP
连接面向连接,三次握手、四次挥手无连接
可靠性校验、序号、确认、重传、滑动窗口只有校验,不保证可靠
传输单位字节流数据报
适用文件传输、网页视频、语音、DNS

TCP 的可靠传输不是靠单一机制,而是一整套:校验和发现比特差错、序号解决乱序与重复、确认与超时重传解决丢失、滑动窗口做流量控制、拥塞控制用慢开始、拥塞避免、快重传、快恢复。被问“TCP 为什么更安全”,要纠正提问本身——TCP 保证的是可靠传输,不是安全性,安全性靠 TLS 之类的上层机制,这两件事经常被混为一谈。

网络层的高频细节是 IP 分片的三个字段:标识(同一数据报的分片共用)、标志(MF 表示后面还有分片,DF 表示不许分片)、片偏移(以 8 字节为单位)。单位是 8 字节这一点几乎每次都会考,答成 1 字节就废了。

import ipaddress # 给定地址和掩码,算出网络地址、广播地址、可用主机数 net = ipaddress.ip_network("192.168.10.37/27", strict=False) print(net.network_address) # 192.168.10.32,主机位清零 print(net.broadcast_address) # 192.168.10.63,主机位全 1 print(net.num_addresses - 2) # 30 个可用主机地址,减去网络地址和广播地址

/27表示前 27 位是网络位,剩 5 位主机位,2^5 = 32 个地址,去掉网络地址和广播地址剩 30 个可用。子网划分、CIDR、超网这三类计算题用这个思路都能推,比死记公式稳。

路由协议三件套的分工要清楚:RIP 是距离矢量,以跳数为度量,最大跳数 15,每 30 秒交换整张路由表,慢收敛是它的老毛病,承载在 UDP 上;OSPF 是链路状态,用 Dijkstra 算最短路径,只在链路变化时洪泛,收敛快,直接跑在 IP 上;BGP 是外部网关协议,走路径向量,跑在 TCP 上。

介质访问控制这一块,CSMA/CD 和 CSMA/CA 的区别要能说清:前者用于有线以太网,边发边听,冲突后停止并执行二进制指数退避,争用期 2τ,最小帧长 64 字节;后者用于无线,无法边发边听,所以改成先听后发、用 ACK 确认、可选 RTS/CTS 预约信道来避免冲突。

4.4 数据库、编译原理、软件工程:只有页码的空白区

这三门在这份资料里形态不同:题目列出来了,页码指向本科教材,没有现成答案,得自己翻书。梳理下来会发现,这不是缺陷反而是提示——它默认你手上有这三本书,缺的只是问题清单。

按最系统的补法,数据库的重点在关系模型(关系代数、范式判定到 3NF/BCNF)、SQL 语句(连接、分组、子查询)、事务与并发控制(ACID、隔离级别、封锁协议)、索引结构(B+ 树为什么适合做索引,正好和数据结构的 B+ 树接上)。编译原理的重点在编译五阶段(词法、语法、语义、中间代码、目标代码)、LL(1) 与 LR 分析、语法制导翻译、基本块与优化。软件工程的重点在生命周期模型(瀑布、增量、螺旋、敏捷)、需求分析与 UML 图、测试方法(黑盒、白盒、等价类划分、边界值)。这三门在复试里通常问得浅,但答不出来很掉分,因为它们是“你有完整本科基础”的信号。

5. 易漏点集中营:五个反复踩的坑

题目背完了不等于答得对。下面这五处是这份问答里最容易在考场上答偏、答漏、答反的地方,每一条都按“错在哪—为什么错—怎么补”拆开。

5.1 易漏点一:关键路径的前提条件被跳过

易漏点:直接开始算 ve、vl,不说明“该图必须是有向无环图”。

为什么漏:定义背得太熟,注意力全在四个时间量的递推上,前置条件被当成废话;再加上平时练的题都是 AOE 网,没见过反例。

怎么补:把“有向无环”和关键路径绑成一个整体记忆单元,答定义时顺口带出“只有在有向无环图上才能求关键路径,因为存在回路时事件的最早发生时间无法递推”;再补一句“判断有环可以用拓扑排序,输出顶点数少于总数即有环”,这条补充能把追问堵死。

5.2 易漏点二:遍历复杂度漏写矩阵和表的区别

易漏点:BFS/DFS 只答一个 O(n+e),不区分邻接表和邻接矩阵;空间复杂度答成 O(1)。

为什么漏:教材上给的模板答案就是 O(n+e),抄多了就以为只有这一个;空间那一项被忽略,因为“递归不占空间”的直觉是错的。

怎么补:把四种组合写成一行口诀——邻接表 O(n+e)、邻接矩阵 O(n²)、空间都是 O(n)。再加一句解释:visited 数组本身就要 n 个位置,队列或递归栈最坏也到 n,所以空间不可能比 O(n) 更低。

5.3 易漏点三:排序三问(最好/最坏/平均)混答

易漏点:被问“哪些排序最好和最坏时间复杂度一样”,把快排也算进去。

为什么漏:快排的平均是 nlog2n,平时说“快排最快”,语义上被记成了“快排什么都快”,忽略了它在有序输入下退化到 n²。

怎么补:记一个反例锚点——快排遇到已经有序的序列(取首元素为枢轴)就是最坏情况,这一条同时解释了“为什么快排要不随机化枢轴”。然后把四个“三者相同”的算法(简单选择、堆排、归并、基数)单独记成一组,其余全部默认有差异。

5.4 易漏点四:中断、异常、中断隐指令被揉成一团

易漏点:把中断和异常当成同一件事,或者把“中断隐指令”说成一条真实的指令。

为什么漏:三个概念名字相近,教材上分散在不同章节,复习时没有并排对比过。

怎么补:按来源切分——中断由外部硬件(I/O 完成、时钟)引起,异常由 CPU 执行指令内部引起(缺页、除零、陷入)。中断隐指令不是指令,是硬件在响应中断时自动完成的一串操作(关中断、保存断点和程序状态、引出中断服务程序),因为它没有对应的指令码,才叫“隐”。断点指的是程序计数器 PC 的内容,这个细节常被追问。

5.5 易漏点五:计网的“单位”和“承载协议”记混

易漏点:IP 分片的片偏移答成以 1 字节为单位;RIP 说成跑在 TCP 上;TCP 的“可靠”说成“安全”。

为什么漏:这些都是一句话的细节,平时理解对了,临场紧张就滑出去;而且它们不影响主干逻辑,自查时容易被跳过。

怎么补:把易混点做成一张“单位/承载”小卡:片偏移以 8 字节为单位、首部长度以 4 字节为单位、总长度以 1 字节为单位;RIP 走 UDP 520、BGP 走 TCP 179、OSPF 直接封装在 IP 里(协议号 89)。至于“安全”和“可靠”,答题时主动纠正一句“TCP 保证的是可靠传输,加密是上层的事”,反而显得清楚。

6. 查漏补缺:把四百道问答压成三轮可执行的清单

题目看到第三遍就会发现,真正需要动笔算的不到三成,剩下七成是“能不能一句话说准”。所以复习不该按题号顺序推,而该按“能不能复述”来筛。

第一轮做覆盖,目标是知道每道题的答案在哪。拿着页码索引,一题一题定位到王道对应页,只看答案不看推导,标记三类:一眼会的打勾、见过但说不全的画圈、完全没印象的打叉。这一轮不求记住,只求把“打叉区”圈出来。四百道题按每题 40 秒算,五六个小时能过完一遍,比从头看教材快得多。

第二轮做压缩,

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询