简介:这份PDF资料面向备战杭州电子科技大学计算机考研复试的考生,系统梳理了数据结构、计算机组成原理、操作系统、计算机网络、数据库、编译原理和软件工程七门专业课的常见面试问题与参考答案。内容以问答形式展开,覆盖关键路径、栈与队列区别、BFS与DFS、度为2的树与二叉树差异、最小生成树算法、各类排序时间复杂度、二叉排序树、最短路径算法等高频考点,并延伸至数据结构在信息安全与日常生活中的实际应用。资源包共1个PDF文件,大小约1.01MB,轻量便携,适合碎片化时间反复翻阅。目前已有2750人学习下载,可作为复试冲刺阶段的查漏补缺清单,帮助考生快速定位薄弱知识点,结合教材与历年真题进行针对性复习。
1. 杭电计算机复试专业课:七门课一张卷,考点分布和拿分逻辑先摸清
杭电计算机考研复试的专业课问答,不是让你从头推导红黑树,也不是让你手写一个 CPU。它考的是七门课——数据结构、计算机组成原理、操作系统、计算机网络、数据库、编译原理、软件工程——里面那些本科教学书目录级的知识点。你翻开这份 PDF 会发现,数据结构部分有 135 个问题,计组 67 个,操作系统和计网各几十个,后面数据库、编译原理、软件工程同样按题号排下去。题量看着吓人,但每道题的答案往往就在王道考研书或本科教材的某一页上,PDF 里直接标了页码。这意味着什么?意味着复试面试官不是要你现场发明算法,而是要你在 30 秒内说清楚一个概念的定义、一个算法的步骤、一个机制的区别。拿分逻辑就三条:概念题答准关键词,对比题说清差异维度,算法题按步骤讲流程。适合谁?适合已经过了一轮初试、对四门核心课有印象,但面对面试官追问容易卡壳的人。这份题库的价值不在于题目本身有多难,而在于它把“面试官会从哪些角度问”给你摊开了。
2. 数据结构高频考点:从关键路径到排序算法,面试官最爱追问的六个方向
2.1 图论三件套:关键路径、最小生成树、最短路径
数据结构部分被标记▲的题目,基本就是面试官反复问的。图论里最常考的是关键路径。面试官问“关键路径用什么数据结构实现”,你答“图”只是及格线,他接着会问“是不是所有图都可以实现关键路径”。这里必须答清楚:只有有向无环图才能求关键路径,因为关键路径要求从源点到汇点存在最长路径,有环就意味着可以无限绕圈,路径长度没有上界。AOE 网里,事件的最早发生时间从源点正向递推,最迟发生时间从汇点反向递推,活动的时间余量为零就是关键活动。面试官如果让你举例,你就说“装修房子,水电改造没完成,刷墙就不能开始,这条依赖链就是关键路径”。
最小生成树考的是 Prim 和 Kruskal 的对比。Prim 从顶点出发,每次在已选顶点集和未选顶点集之间找最小权边,时间复杂度 O(|V|²),适合边稠密的图。Kruskal 从边出发,把所有边按权值排序,每次选最小边且不构成环,时间复杂度 O(|E|log|E|),适合边稀疏而顶点较多的图。面试官追问“为什么稠密图用 Prim”,你就答“稠密图边多,Kruskal 排序边的时间开销大,而 Prim 的 O(V²) 与边数无关”。
最短路径考 Dijkstra 和 Floyd 的适用场景。Dijkstra 求单源最短路径,基于贪心策略,dist[] 数组存源点到各顶点的当前最短距离,每次选未访问顶点中 dist 最小的加入已确定集合。Floyd 求各顶点之间最短路径,三重循环,适合顶点数不多的图。面试官常问“Dijkstra 能不能处理负权边”,答案是不能,因为贪心策略在负权边上会失效。
2.2 树与二叉树:度、遍历、线索、二叉排序树
“度为 2 的树和二叉树有什么区别”这道题几乎年年出现。核心差异有三条:二叉树可以为空,度为 2 的树至少有一个结点有两棵子树;二叉树的左右子树严格区分,交换位置就是另一棵树,度为 2 的树是无序树;度为 2 的树中每个结点的度要么是 0 要么是 2,二叉树可以是 0、1、2。面试官如果追问“那从度的方面看呢”,你就把第三条补上。
遍历的对比也是高频。树的先根遍历对应二叉树的先序遍历,树的后根遍历对应二叉树的中序遍历。图的遍历和树的遍历区别在于:图的 BFS 和 DFS 需要 visited[] 数组标记已访问结点,因为图可能有不连通的情况,而且可以从任意顶点开始遍历;树的遍历不需要 visited[],因为树是连通的且没有环,从根出发一定能走完。BFS 用队列,时间复杂度邻接表 O(n+e)、邻接矩阵 O(n²),空间复杂度 O(n);DFS 用递归或栈,复杂度相同。
线索二叉树考的是“为什么要有它”。二叉链表有大量空指针,n 个结点的二叉树有 n+1 个空链域,把这些空链域利用起来存放前驱和后继指针,就加快了查找结点前驱和后继的速度。标志域 ltag 和 rtag 为 0 表示指向孩子,为 1 表示指向前驱或后继。
二叉排序树的核心性质是左<根<右。插入就是递归比较,小于当前结点往左走,大于往右走,直到空位置插入。删除分三种情况:叶子直接删,只有一个孩子用孩子替代,有两个孩子用中序后继或中序前驱替代。面试官问“查找长度”,你就说“与树的高度有关,最好 O(log n),最坏 O(n)”。
2.3 排序算法:时间复杂度、稳定性、适用场景一张表说清
排序是数据结构面试的必考区。面试官不会只问“快排的时间复杂度”,他会连着问“最好、平均、最坏分别是什么”“空间复杂度多少”“稳不稳定”“什么场景用”。下面这张表按 PDF 里的考点整理,背下来就能应对大部分追问。
| 排序算法 | 最好 | 平均 | 最坏 | 空间 | 稳定性 | 适用场景 |
|---|---|---|---|---|---|---|
| 直接插入 | n | n² | n² | 1 | 稳定 | 基本有序 |
| 冒泡 | n | n² | n² | 1 | 稳定 | 基本有序 |
| 简单选择 | n² | n² | n² | 1 | 不稳定 | 元素少 |
| 希尔 | — | — | — | 1 | 不稳定 | 增量决定效率 |
| 快速 | nlog₂n | nlog₂n | n² | log₂n | 不稳定 | 无序、元素多 |
| 堆排序 | nlog₂n | nlog₂n | nlog₂n | 1 | 不稳定 | 最坏情况也要快 |
| 2 路归并 | nlog₂n | nlog₂n | nlog₂n | n | 稳定 | 对象排序 |
| 基数 | — | — | — | — | 稳定 | 位数多,不适用负数 |
面试官最爱追问的几类:最好和最坏一样的是简单选择、堆排序、归并排序、基数排序;最好和平均一样的是简单选择、快排、堆排序、归并、基数;比较次数与初态无关的是二路归并、简单选择、基数排序;排序趟数与初态有关的是冒泡和快排。还有一道经典题:“一趟结束后能选出一个元素在最终位置上的排序有哪些?”答案是简单选择、快速、冒泡、堆排序。
2.4 真题演练:五道高频题的标准答法
题一:栈和队列有什么区别?你在哪里用过?
答题思路:先给定义——都是操作受限的线性表。栈是后进先出,队列是先进先出。再说应用——栈用于递归、函数调用、迷宫求解;队列用于二叉树层次遍历、图的广度优先遍历。面试官如果追问“用两个栈怎么模拟队列”,你就说“一个栈负责入队,一个栈负责出队,出队时如果出队栈为空,就把入队栈全部倒入出队栈”。
题二:BFS 和 DFS 的区别是什么?
答题思路:BFS 用队列,按层遍历,适合找最短路径;DFS 用递归或栈,一条路走到黑,适合判断连通性。时间复杂度都是邻接表 O(n+e)、邻接矩阵 O(n²)。空间复杂度 BFS 是 O(n),DFS 最坏也是 O(n)。面试官追问“为什么 BFS 能找最短路径”,你就答“BFS 按距离逐层扩展,第一次访问到目标顶点时经过的边数最少”。
题三:Prim 和 Kruskal 的区别?
答题思路:Prim 从顶点出发,适合稠密图,O(V²);Kruskal 从边出发,适合稀疏图,O(ElogE)。Prim 维护一个顶点集合,每次找集合内外的最小边;Kruskal 维护一个森林,每次找不构成环的最小边。面试官追问“为什么 Kruskal 要判断环”,你就说“用并查集,边的两个端点如果已经在同一集合就会成环”。
题四:什么是线索二叉树?
答题思路:利用二叉链表中的空指针指向前驱和后继,加快查找速度。标志域为 0 表示孩子,为 1 表示线索。中序线索二叉树最常用,因为中序遍历能直接得到有序序列。
题五:贪心算法和动态规划的区别?
答题思路:贪心只考虑当前最优,不回退;动态规划考虑全局最优,保存子问题解。PDF 里明确写了“贪心算法只考虑当前最优,而不考虑整体”。面试官追问“Dijkstra 是贪心吗”,答案是是,它每次选当前 dist 最小的顶点。
3. 计组与操作系统:从补码到银行家算法,面试官怎么问你怎么答
3.1 计组核心:补码、总线、中断、DMA
计组部分被标记▲的题目集中在数据表示、存储系统、指令系统和 I/O。补码加减法为什么用补码?因为补码的 0 表示唯一,原码和反码有 +0 和 -0 之分,用补码可以把减法转成加法,运算器只需要加法器加简单变换就能实现减法。面试官追问“补码的数学原理”,你就说“模运算,减去一个数等于加上这个数的补数”。
串行和并行接口的区别是经典对比题。并行接口数据各位同时传送,速度快但线路复杂、成本高、干扰严重;串行接口一位一位顺序传送,线路简单、成本低、适合远距离,现在高速传输反而用串行,因为时钟频率提高后并行线间干扰无法控制。串行总线有 USB、SATA,并行总线有 ISA、EISA、PCI、AGP。系统总线有 ISA、EISA,局部总线有 PCI、AGP,设备总线有 USB、SATA。
中断过程考的是断点概念。断点就是程序计数器 PC 的内容,中断发生时保存断点,中断返回时恢复。中断隐指令不是真正的指令,是硬件自动完成的关中断、保存断点、引出中断服务程序。多重中断就是在中断服务程序中开中断,允许更高级别的中断打断当前中断。
DMA 方式的特点和传送过程也是高频。DMA 不需要 CPU 干预,直接在主存和外设之间传送数据,传送方式有停止 CPU 访问、周期挪用、交替访问。DMA 和中断的区别:中断是程序切换,DMA 是硬件直接控制;中断发生在指令执行完毕后,DMA 可以在指令执行过程中;中断需要保存现场,DMA 不需要。
3.2 操作系统核心:进程、调度、同步、死锁、内存
操作系统部分被标记▲的题目覆盖了进程管理、内存管理、文件管理和 I/O 管理。为什么会有进程?因为多道程序并发执行需要描述程序的执行状态和资源分配,进程是资源分配的基本单位,线程是调度的基本单位。进程的基本状态有就绪、运行、阻塞,创建和终止是辅助状态。
调度算法考多级反馈队列和高响应比。多级反馈队列设置多个优先级队列,新进程进最高优先级,时间片用完降级,低优先级队列时间片更长。高响应比优先的响应比 =(等待时间 + 要求服务时间)/ 要求服务时间,兼顾短作业和长作业。
同步与互斥的区别:同步是协作关系,互斥是竞争关系。P、V 操作中 P 是申请资源,V 是释放资源。用 P、V 实现互斥就是信号量初值为 1,进入临界区前 P,退出后 V。死锁的四个必要条件是互斥、占有并等待、不可抢占、循环等待。死锁预防就是破坏这四个条件之一。银行家算法是死锁避免,核心是安全性检查,找安全序列。
内存管理考分页、分段、段页式的对比。分页对用户透明,分段对用户可见;分页是一维地址空间,分段是二维;分页有内部碎片,分段有外部碎片。页面置换算法有 OPT、FIFO、LRU、CLOCK。虚拟内存的三个特征是多次性、对换性、虚拟性。
3.3 真题演练:四道操作系统高频题
题一:进程和线程的区别?
答题思路:进程是资源分配的基本单位,线程是调度的基本单位。进程有独立的地址空间,线程共享进程的地址空间。进程切换开销大,线程切换开销小。面试官追问“为什么线程切换开销小”,你就说“线程共享页表,不需要切换页目录”。
题二:死锁的四个必要条件是什么?怎么破坏?
答题思路:互斥、占有并等待、不可抢占、循环等待。破坏互斥就是让资源可共享;破坏占有并等待就是一次性申请所有资源;破坏不可抢占就是允许抢占;破坏循环等待就是按序申请资源。面试官追问“哪个条件最容易破坏”,你就说“循环等待,按编号顺序申请资源即可”。
题三:页面置换算法有哪些?
答题思路:OPT 最优但不可实现,FIFO 简单但有 Belady 异常,LRU 最近最久未使用,CLOCK 是 LRU 的近似。面试官追问“LRU 怎么实现”,你就说“用链表加哈希表,访问时把页面移到链表头,淘汰时取链表尾”。
题四:中断和异常的区别?
答题思路:中断是外部事件引起,异常是内部事件引起。中断是异步的,异常是同步的。中断可以屏蔽,异常不可屏蔽。面试官追问“缺页是中断还是异常”,答案是异常,因为它是指令执行过程中产生的。
4. 计网与数据库:从三次握手到范式,这些题面试官张口就来
4.1 计网核心:分层、TCP、IP、路由
计网部分被标记▲的题目集中在体系结构、TCP/IP、路由协议和局域网。OSI 七层是物理层、数据链路层、网络层、传输层、会话层、表示层、应用层;TCP/IP 四层是网络接口层、网际层、传输层、应用层。五层结构是物理层、数据链路层、网络层、传输层、应用层。面试官让你按顺序说,你就从下往上说,每层说一个协议和一个设备。
TCP 三次握手是必考。第一次客户端发 SYN,第二次服务端回 SYN+ACK,第三次客户端回 ACK。为什么不是两次?因为两次握手服务端无法确认客户端收到了自己的 SYN,可能造成历史连接占用资源。四次挥手是客户端发 FIN,服务端回 ACK,服务端发 FIN,客户端回 ACK。为什么有 TIME_WAIT?因为要确保最后一个 ACK 到达服务端,并让旧连接的数据包在网络中消失。
TCP 和 UDP 的区别:TCP 面向连接、可靠、有流量控制和拥塞控制、字节流;UDP 无连接、不可靠、无拥塞控制、数据报。TCP 更安全是因为有校验和、确认重传、序列号。面试官追问“TCP 怎么保证可靠传输”,你就说“校验和、序列号、确认应答、超时重传、流量控制、拥塞控制”。
路由协议考 RIP、OSPF、BGP。RIP 是距离矢量,跳数最多 15,慢收敛;OSPF 是链路状态,用 Dijkstra 算最短路径,收敛快;BGP 是外部网关协议,基于路径矢量。面试官追问“RIP 为什么慢收敛”,你就说“距离矢量协议靠邻居周期性广播,坏消息传得慢”。
4.2 数据库与编译原理:范式、索引、语法分析
数据库部分 PDF 里没有展开,但按杭电本科教学书的考点,面试官常问三范式、索引、事务。第一范式字段不可再分,第二范式非主属性完全依赖主键,第三范式非主属性不传递依赖主键。索引用 B+树,因为 B+树矮胖、磁盘 I/O 少、支持范围查询。事务的 ACID 是原子性、一致性、隔离性、持久性。
编译原理考的是编译过程:词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成。语法分析有自顶向下和自底向上,自顶向下有递归下降和 LL(1),自底向上有 LR(0)、SLR(1)、LALR(1)、LR(1)。面试官追问“LL(1) 和 LR(1) 的区别”,你就说“LL(1) 从左到右扫描、最左推导、向前看一个符号;LR(1) 从左到右扫描、最右推导的逆过程、向前看一个符号”。
4.3 真题演练:四道计网与数据库高频题
题一:在浏览器输入网址到页面显示发生了什么?
答题思路:DNS 解析域名到 IP,ARP 解析 IP 到 MAC,TCP 三次握手建立连接,发送 HTTP 请求,服务端返回响应,浏览器渲染页面,TCP 四次挥手断开连接。面试官追问“DNS 用 UDP 还是 TCP”,你就说“查询用 UDP,区域传送用 TCP”。
题二:MAC 和 IP 的区别?
答题思路:IP 是逻辑地址,32 位,网络层,基于拓扑分配,可更改;MAC 是物理地址,48 位,数据链路层,厂商烧录,一般不可改。IP 到 MAC 用 ARP,MAC 到 IP 用 RARP。
题三:什么是网络拥塞?怎么解决?
答题思路:拥塞是网络中对资源的需求超过可用资源。解决方法有拥塞控制,包括慢开始、拥塞避免、快重传、快恢复。面试官追问“流量控制和拥塞控制的区别”,你就说“流量控制是点对点,拥塞控制是全局”。
题四:数据库三范式是什么?
答题思路:1NF 字段不可再分,2NF 非主属性完全依赖主键,3NF 非主属性不传递依赖主键。面试官追问“范式越高越好吗”,你就说“不是,范式越高表越多,查询越需要连接,要根据业务权衡”。
5. 易错点与失分点:五道面试官最爱挖坑的题
第一坑:度为 2 的树和二叉树混为一谈。错在哪?把度为 2 的树当成二叉树,说“左右子树可以交换”。为什么错?度为 2 的树是无序树,二叉树是有序树。怎么答对?先答二叉树可以为空、左右严格区分,再答度为 2 的树至少有一个结点有两棵子树、无序。
第二坑:Dijkstra 能处理负权边。错在哪?以为 Dijkstra 和 Floyd 一样能处理负权。为什么错?Dijkstra 基于贪心,负权边会让已确定的最短路径不再最短。怎么答对?明确说 Dijkstra 不能处理负权边,Floyd 可以,但 Floyd 不能处理负权回路。
第三坑:TCP 三次握手说成两次。错在哪?觉得两次就够了。为什么错?两次握手服务端无法确认客户端收到了 SYN+ACK,可能建立历史连接。怎么答对?说清三次握手的每一步,并解释两次握手的缺陷。
第四坑:死锁和饥饿分不清。错在哪?把死锁说成饥饿。为什么错?死锁是循环等待,饥饿是长期得不到资源。怎么答对?死锁有四个必要条件,饥饿没有循环等待。
第五坑:Cache 和虚拟存储器混为一谈。错在哪?把 Cache 的映射方式套到虚拟存储器。为什么错?Cache 对程序员透明,虚拟存储器对程序员可见;Cache 用硬件实现,虚拟存储器用硬件加操作系统。怎么答对?从透明性、实现方式、替换算法三个维度对比。
6. 复试答题技巧:从背题到开口说的三步训练法
复试面试和笔试最大的区别是:笔试你可以想,面试你必须说。我见过太多人,题目背得滚瓜烂熟,一开口就卡壳。后来我总结了一个三步训练法,强制自己走一遍,效果比单纯背题好得多。
第一步:把答案压缩成三个关键词。比如“关键路径”,关键词就是“有向无环图、最长路径、时间余量为零”。面试官问的时候,你先说这三个词,再展开。这样即使紧张,也不会漏掉核心点。PDF 里每道题都有答案,但答案太长,面试官没耐心听你背课文。你要做的是把答案拆成关键词,用关键词串成一句话。
第二步:用“定义—区别—例子”的结构答题。面试官问“栈和队列的区别”,你先给定义“都是操作受限的线性表”,再说区别“栈后进先出,队列先进先出”,最后给例子“栈用于递归,队列用于层次遍历”。这个结构适用于 80% 的概念题。对比题就加一个维度表,比如 Prim 和 Kruskal 从“出发点、时间复杂度、适用图”三个维度说。
第三步:模拟追问。自己问自己“为什么”“还有呢”“举个例子”。比如背完“Dijkstra 不能处理负权边”,自己追问“为什么不能”,然后答“贪心策略在负权边上会失效,因为已确定的最短路径可能被后续负权边更新”。再追问“那负权图用什么”,答“Floyd 或 Bellman-Ford”。这一步是拉开差距的关键,面试官往往在追问里看你的深度。
下面这张表是我按 PDF 考点整理的答题模板,直接套用就行。
| 题型 | 答题结构 | 示例 |
|---|---|---|
| 定义题 | 定义+关键词+应用 | 线索二叉树:利用空指针存前驱后继,加快查找 |
| 对比题 | 维度1+维度2+维度3 | Prim vs Kruskal:出发点、复杂度、适用图 |
| 算法题 | 步骤+复杂度+场景 | 快排:分治、nlog₂n、无序大数据 |
| 场景题 | 选型+理由+替代方案 | 微信好友:有向图,顶点用户,边好友关系 |
最后说一个我自己的教训。第一次模拟面试,面试官问“最小生成树的两种方法”,我直接背了 Prim 和 Kruskal 的步骤,结果他追问“为什么稠密图用 Prim”,我卡住了。从那以后我每次背题都强制走一遍“为什么”和“还有呢”,把每个考点往下挖两层。希望帮到你。
本文还有配套的精品资源,点击获取