简介:这份资料是武汉理工大学计算机专业考研复试的真题汇编,面向备考该校计算机研究生的考生,尤其适合需要系统梳理复试考点、把握命题风格的复习者。压缩包内共1个doc文档,约21KB,内容按年份整理了2004至2007年的复试题目,覆盖计算机原理、数据结构、编译原理、操作系统、计算机网络、数据库等核心课程。题目涉及中断机制、分组交换与电路交换、TDM/FDM/CDMA、IP地址与子网掩码、数据完整性、数据库设计步骤、进程状态转换、软件重用、同步与异步通信、查找算法评估、面向对象设计局限、8086寄存器、流水线调度、栈与队列溢出、死锁必要条件、Cache原理、TCP/IP三次握手等高频考点,并附有英语命题与翻译题型。已有1680人学习下载,可帮助考生熟悉复试题型分布、检验知识盲区,并针对薄弱环节进行专项突破。
1. 从一道“三维数组地址计算”说起:这场复试到底考什么
很多人第一次翻计算机考研复试真题,会被一道题直接打懵:三维数组A[10][10][10],按行优先存储,每个元素占三个存储单位,首地址 1000,求A[5][4][2]的地址。看起来是数据结构,其实是计算机原理里“地址计算”的底层逻辑。这场复试不跟你玩虚的,它把计算机原理、数据结构、编译原理、操作系统、计算机网络、数据库六门课揉在一张卷子上,考的是你能不能把知识串起来用。复试规模大约七八百人,分数普遍不低,意味着笔试拉不开差距时,面试和专业课深度就是分水岭。适合谁?适合那些初试过了、但不知道复试从哪下手的人。拿分逻辑很简单:基础题不丢分,综合题能写步骤,英文题能读懂专业材料。下面按考点模块拆开讲,每一块都配真题和答题思路。
2. 六大科目考点分布:从真题反推复习优先级
2.1 计算机原理:中断、DMA、流水线、Cache 是四大金刚
计算机原理在复试里从不缺席,而且喜欢考“对比型”和“过程型”题目。2004 年考了“什么是中断、中断源、中断处理程序”,2005 年考了“中断的过程是如何进行的”以及“中断方式和 DMA 方式的区别”,2006 年考了“ADD 指令执行的原地址和目标地址问题”,2004 年还考了“8086 的寄存器按功能分几组”和“流水线结构和非流水线结构有什么区别”。
这类题的答题套路是:先给定义,再讲过程,最后说区别或优点。比如中断处理程序,你不能只写“处理中断的程序”,要写出“CPU 暂停当前程序,保存现场,转去执行中断服务程序,执行完后恢复现场并返回”这个完整链条。DMA 和中断的区别,核心就一句话:DMA 不经过 CPU 直接在主存和外设之间传数据,中断需要 CPU 执行服务程序。答题时把“谁控制数据传输”“是否占用 CPU 周期”“适用场景”三个维度列出来,基本满分。
流水线那道题,面试官最想听的是“流水线提高吞吐量但不缩短单条指令执行时间”,以及“非流水线最优调度要处理数据依赖”。如果你能补一句“结构冒险、数据冒险、控制冒险”,说明你复习到位了。
提示:计算机原理的题,画图比纯文字得分高。中断流程画箭头,流水线画时空图,DMA 画总线连接,阅卷老师一眼就能看到你的思路。
2.2 数据结构:数组地址、堆排序、最小生成树、查找算法
数据结构是复试里分值最稳的一块。2005 年考了三维数组地址计算和大根堆排序过程,2006 年考了“画最优三路归并树”和“编程实现在无序数组 1-n 中找第 m 大的数”,2007 年考了“求叶子节点的个数”和“用 prim 算法求最小生成树”。2004 年还考了“如何衡量一个查找算法的好坏?顺序查找、二分查找的优缺点及使用场合”。
三维数组地址计算,公式是:地址 = 首地址 + (i * 第二维长度 * 第三维长度 + j * 第三维长度 + k) * 每个元素占用单位数。代入A[5][4][2],首地址 1000,每个元素 3 个单位,结果是1000 + (5*10*10 + 4*10 + 2)*3 = 1000 + 542*3 = 2626。这类题必须写公式再代入,只写答案没有过程分。
大根堆排序,先建堆再逐个交换堆顶和末尾元素。以28、35、13、98、5、87、21为例,建堆后堆顶是 98,和 21 交换,再调整,重复直到有序。答题时画出每一步的完全二叉树,比只写数字序列更清楚。
找第 m 大的数,朴素做法是排序后取,时间复杂度 O(n log n)。如果面试官追问优化,可以提快速选择算法,平均 O(n)。代码可以这样写:
def find_mth_largest(arr, m): # 先对数组排序,再取第 m 大的元素 arr_sorted = sorted(arr, reverse=True) return arr_sorted[m - 1] # 示例 nums = [3, 1, 4, 1, 5, 9, 2, 6] print(find_mth_largest(nums, 3)) # 输出 5这段代码先降序排序,再取索引m-1。参数arr是输入数组,m是目标排名。如果要求不能改变原数组,用sorted返回新列表。面试时如果被问“能不能不排序”,就答快速选择:选一个基准,把比它大的放左边,小的放右边,看基准位置和 m 的关系,递归处理一边。
2.3 操作系统:进程状态、线程、死锁、段页式、文件系统
操作系统在复试里考得又细又活。2004 年考了“进程的状态及如何转换”和“死锁产生的必要条件是什么?他们同时也是充分条件吗”,2005 年考了“简述进程的转化过程。进程调度的时机有哪些”和“什么是线程?线程和进程有什么区别?引进线程的好处是什么”,2005 年还考了“段式和页式管理的主要区别”和“为了保证文件系统的安全性,有哪些保护措施”。
进程状态转换,标准答案是三态模型:就绪、运行、阻塞。转换关系是:就绪→运行(被调度)、运行→就绪(时间片到)、运行→阻塞(等待资源)、阻塞→就绪(资源到位)。答题时画状态图,标注转换条件,比文字描述更直观。
死锁四个必要条件:互斥、占有并等待、不可剥夺、循环等待。它们只是必要条件,不是充分条件。也就是说,四个条件同时满足不一定死锁,但死锁一定四个都满足。防止死锁就是破坏其中一个条件,比如资源一次性分配破坏“占有并等待”,按序分配破坏“循环等待”。
线程和进程的区别,面试官想听的是:进程是资源分配单位,线程是调度单位;同一进程的线程共享地址空间,切换开销小;引进线程为了提高并发度和系统吞吐量。段式和页式的区别,核心是:页是物理单位,段是逻辑单位;页大小固定,段长度可变;页式对用户透明,段式对用户可见。
2.4 计算机网络:分组交换、TCP 三次握手、CSMA/CD、IP 地址
网络部分考得广但不深。2004 年考了“为什么网络使用分组交换而不是用电路交换”“TDM、FDM、CDMA 的含义及使用”“TCP/IP 为什么采用三次握手进行通讯”,2005 年考了“OSI 的体系结构与 TCP/IP 体系结构进行对比”“CSMA/CD 的工作原理”“IP 地址及其表示方法”“连续 ARQ 协议的工作原理”,2006 年考了“HUB 的意义及其应用。说说共享 HUB 与交换 HUB 之间的区别”。
分组交换 vs 电路交换,答题要点:分组交换按需共享带宽,电路交换独占通道;分组交换适合突发性数据,电路交换适合实时语音;分组交换有存储转发延迟,电路交换没有。三次握手,核心是防止已失效的连接请求突然到达服务器,造成资源浪费。答题时把“客户端发 SYN、服务器回 SYN+ACK、客户端再发 ACK”三步写清楚,再补一句“两次握手无法确认客户端接收能力”。
CSMA/CD 的工作原理,先听后发、边发边听、冲突停发、随机重发。连续 ARQ 协议,发送方连续发送多个帧,接收方累积确认,出错时回退重传。IP 地址表示方法,点分十进制,A/B/C/D/E 五类,子网掩码用来划分网络号和主机号。
2.5 数据库:ACID、设计步骤、完整性约束、SQL 与关系代数
数据库的题偏概念和设计。2004 年考了“数据库设计的步骤”和“数据完整的含义”,2005 年考了“事务的 ACID 代表什么意思?它与数据库完整性,数据库恢复有何关系”“数据库设计的步骤是什么?数据模型的三要素是”“什么是数据完整性约束?其主要包括哪几个方面”,2007 年考了“用 SQL 表示 R 并上 X”和“已知道一个 SQL 语句,求用关系式表示”。
ACID 是原子性、一致性、隔离性、持久性。和完整性的关系:一致性保证事务执行前后数据库满足完整性约束;和恢复的关系:持久性靠日志恢复,原子性靠回滚。数据库设计步骤:需求分析、概念设计、逻辑设计、物理设计、实施、运行维护。数据模型三要素:数据结构、数据操作、完整性约束。
SQL 并操作,SELECT * FROM R UNION SELECT * FROM X。关系代数并操作,R ∪ X。答题时注意 UNION 去重,UNION ALL 不去重。如果题目要求“用关系式表示”,就写π_{所有属性}(R) ∪ π_{所有属性}(X)。
2.6 编译原理:文法转换、语法树、短语与句柄、逆波兰式
编译原理的题有固定套路。2006 年考了“将文法 S->aB|bA;A->aS;B->bS 转化为正规文法”,2005 年考了“试述编译的各个阶段”“给出一些文法,然后要你找出短语、直接短语、句柄等”“写出一个语法树”,2005 年还考了“求表达式------的逆波兰式”。
文法转正规文法,关键是消除左递归、提取公因子,然后写成 A->aB 的形式。编译阶段:词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成。短语、直接短语、句柄,画语法树,找子树叶子节点组成的符号串。逆波兰式就是后缀表达式,用栈转换。
注意:编译原理的题,画语法树是得分关键。只写答案不画树,阅卷老师很难给满分。
3. 高频真题逐题拆解:从 2004 到 2007 的答题模板
3.1 中断与 DMA:过程型题目的三段式答法
2004 年真题:“什么是中断、中断源、中断处理程序?”2005 年真题:“中断的过程是如何进行的?在计算机系统是有哪些外设可以设置为虚拟的,请举例说说。”2005 年还有一道:“中断方式和 DMA 方式的区别是什么?”
这类题的答题模板是:定义 + 过程 + 对比。定义部分,中断是 CPU 暂停当前程序转去处理突发事件;中断源是触发中断的信号来源,比如键盘、定时器、I/O 完成;中断处理程序是处理特定中断的服务程序。过程部分,写“保存现场→转中断服务程序→执行→恢复现场→返回”。对比部分,DMA 不经过 CPU,直接在主存和外设间传数据,适合大批量数据;中断需要 CPU 介入,适合处理突发事件。
面试官最想听的是“中断向量”和“中断优先级”。如果你能补一句“中断向量表存放中断服务程序入口地址”,说明你不仅背了概念,还理解了机制。
3.2 三次握手与 CSMA/CD:协议型题目的分层答法
2004 年真题:“TCP/IP 为什么采用三次握手进行通讯?”2005 年真题:“CSMA/CD 的工作原理。”
三次握手,答题分三层:第一层,客户端发 SYN,服务器回 SYN+ACK,客户端再发 ACK;第二层,为什么不是两次?因为两次握手无法确认客户端的接收能力,旧连接请求可能突然到达;第三层,为什么不是四次?因为三次已经能确认双方收发能力,四次浪费。
CSMA/CD,答题分四步:先听后发、边发边听、冲突停发、随机重发。补一句“以太网使用 CSMA/CD,但全双工交换式以太网不需要”。
3.3 进程同步与互斥:编程型题目的伪代码答法
2006 年真题:“A、B、C 三个进程,A 是输入进程,B 是计算进程,C 是打印进程,问题 1:ABC 是否存在同步问题。2:有几种方法可以实现同步。3:同步和互斥的区别。”
这道题是典型的进程同步题。答题思路:先判断存在同步问题,因为 A 的输出是 B 的输入,B 的输出是 C 的输入。然后写伪代码,用信号量实现:
semaphore empty1 = 1, full1 = 0; // A 和 B 之间的缓冲区 semaphore empty2 = 1, full2 = 0; // B 和 C 之间的缓冲区 // 进程 A while (1) { P(empty1); // 输入数据到缓冲区1 V(full1); } // 进程 B while (1) { P(full1); // 从缓冲区1取数据计算 V(empty1); P(empty2); // 计算结果放入缓冲区2 V(full2); } // 进程 C while (1) { P(full2); // 从缓冲区2取数据打印 V(empty2); }这段代码用两个信号量对实现同步。P操作等待资源,V操作释放资源。参数empty表示缓冲区空位,full表示缓冲区数据。同步和互斥的区别:同步是协作关系,互斥是竞争关系;同步信号量初值通常为 0,互斥信号量初值为 1。
3.4 数据库设计与 SQL:设计型题目的步骤答法
2005 年真题:“数据库设计的步骤是什么?数据模型的三要素是?”2007 年真题:“用 SQL 表示 R 并上 X。”
数据库设计步骤,按顺序写:需求分析、概念设计、逻辑设计、物理设计、数据库实施、数据库运行和维护。数据模型三要素:数据结构、数据操作、完整性约束。SQL 并操作:SELECT * FROM R UNION SELECT * FROM X。如果要求关系代数,写R ∪ X。
面试官最想听的是“概念设计用 E-R 图,逻辑设计转关系模式”。如果你能补一句“E-R 图转关系模式时,1:n 联系把 1 方主键放到 n 方”,说明你做过实际设计。
3.5 编译原理与算法:计算型题目的步骤答法
2006 年真题:“将文法 S->aB|bA;A->aS;B->bS 转化为正规文法。”2007 年真题:“用已经学过的知识求 PI 并且给出推导过程,要求用 C 或者 C++实现其算法并给出误差分析。”
文法转正规文法,先看产生式,S 产生 aB 或 bA,A 产生 aS,B 产生 bS。这是右线性文法,已经是正规文法的一种。如果要求写成正规式,可以写成(a b)* a或类似形式。
求 PI 的题是开放题。用泰勒公式展开1/(1+x^2),积分从 0 到 1 得到π/4,所以π = 4 * (1 - 1/3 + 1/5 - 1/7 + ...)。代码:
#include <stdio.h> int main() { double pi = 0.0; int sign = 1; for (int i = 1; i < 1000000; i += 2) { pi += sign * 1.0 / i; // 累加每一项 sign = -sign; // 符号交替 } pi *= 4; // 乘以 4 得到 π printf("π ≈ %.10f\n", pi); return 0; }这段代码用莱布尼茨级数逼近 π。sign控制正负号,循环次数越多精度越高。误差分析:截断误差与项数成反比,项数 100 万时精度约 10^-6。面试时如果被问“有没有更快的方法”,可以答蒙特卡洛法或 Machin 公式。
4. 易错点与失分点:这些坑每年都有人踩
4.1 数组地址计算:维度顺序搞反
错在哪:三维数组A[10][10][10],按行优先存储,有人把A[5][4][2]算成5*10*10 + 2*10 + 4。为什么错:行优先是先排第一维,再排第二维,最后排第三维,所以第二维乘的是第三维长度,第三维不乘。怎么答对:公式写死i * 第二维长度 * 第三维长度 + j * 第三维长度 + k,代入前先确认存储顺序。
4.2 死锁四个条件:误以为是充分条件
错在哪:题目问“他们同时也是充分条件吗”,有人答“是”。为什么错:四个条件是必要条件,不是充分条件。同时满足不一定死锁,因为可能没有形成循环等待的实际资源分配。怎么答对:明确写“必要条件,不是充分条件”,再补一句“破坏任一条件可预防死锁”。
4.3 三次握手:答成“两次就够了”
错在哪:有人觉得两次握手就能建立连接。为什么错:两次握手无法确认客户端的接收能力,旧连接请求可能突然到达服务器,服务器回复确认后客户端不响应,服务器资源浪费。怎么答对:写“三次握手确认双方收发能力,防止失效连接请求”。
4.4 数据库设计步骤:顺序写反
错在哪:把“逻辑设计”写在“概念设计”前面。为什么错:概念设计是 E-R 图,逻辑设计是关系模式,必须先有概念模型才能转逻辑模型。怎么答对:背死顺序“需求分析→概念设计→逻辑设计→物理设计→实施→运行维护”。
4.5 编译原理短语与句柄:不画语法树直接写
错在哪:只写短语和句柄,不画语法树。为什么错:短语和句柄的定义依赖语法树,不画树无法验证。怎么答对:先画语法树,再找每个子树的叶子节点,最左直接短语是句柄。
5. 复试答题技巧:从时间分配到英文题应对
笔试时间通常两小时,25 道题,满分 100 分。平均每题 4.8 分钟,但有的题 9 分,有的题 15 分。时间分配原则:基础题 3 分钟,综合题 8 分钟,英文题 10 分钟。先扫一遍卷子,把送分题标出来,比如 2007 年的“磁盘访问时间计算”和“程序阅读转非递归”,这些题先做,稳住心态。
英文题是很多人的翻车点。2004 年最后一道是英语题,先选择再翻译,材料是计算机方面的。2005 年第 24、25 题用英语命题,要求用英语回答:“What is HTTP and FTP?”和“List six items that should be addressed by security policies。”2006 年第 8 题要求先翻译再写代码。应对策略:平时背计算机专业英语词汇,HTTP 是超文本传输协议,FTP 是文件传输协议,安全策略要写访问控制、身份认证、审计、加密、备份、物理安全。答题时先写中文翻译,再用英文回答,英文句子简单点没关系,关键词写对就行。
面试环节,面试官最想听的是你的思路,不是标准答案。遇到不会的题,先说“这个问题我从以下几个方面理解”,然后往你熟悉的知识点上靠。比如问“面向对象设计是万能的吗”,你可以答“不是,面向对象适合业务逻辑复杂的场景,但高性能计算场景可能用面向过程更合适”。
从那以后我每次拿到复试真题,都强制走一遍“先分类、再写步骤、最后补对比”的流程。希望帮到你。
本文还有配套的精品资源,点击获取