Skip to content

简答题 20 道(国企/央企笔试 · 互联网技术面试导向) ​

本部分为简答题(非选择题),用于补足选择题难以覆盖的概念表述与原理阐述类考点——这恰是国企「计算机基础/硬件基础」与互联网技术面试的主要提问形式。 其中第 1、2、3、8、9、10 题对应文末「附录一」7 类国企高频缺口里的 5 类(1、2 两题同属「计算机系统组成」),第 16 题与选择题第 96 题共同覆盖「程序查询 I/O」类,剩下的 CRC 校验类由选择题第 88 题覆盖——与附录一「5 类简答 + 2 类选择题」的口径一致。 答题建议:按「定义 → 原理/步骤 → 易错点」三段式作答,再补一个具体数字或例子。


简答 1. 简述冯·诺依曼结构与哈佛结构的主要区别。 ​

参考答案:

  • 冯·诺依曼结构(普林斯顿结构):程序与数据存放在同一存储器中,共用一套地址空间与总线,CPU 通过同一条总线取指令和取数据。
    • 优点:结构简单、存储资源统一管理;缺点:指令与数据争用同一总线,形成"冯·诺依曼瓶颈",取指与取数不能同时进行。
  • 哈佛结构:程序存储器与数据存储器物理分离,各自有独立地址空间与总线,可同时取指与取数。
    • 优点:吞吐率高、适合流水线;缺点:硬件复杂、成本高。
  • 典型例子:x86 / ARM 通用 CPU 属冯·诺依曼结构(但在 Cache 层面采用哈佛结构,即指令 Cache 与数据 Cache 分离);多数 DSP、单片机(如 8051)采用哈佛结构。

📌 考察知识点: 计算机系统组成——冯·诺依曼 vs 哈佛(国网大纲「计算机系统的组成与功能」)。


简答 2. 计算机硬件由哪五大部件组成?简述各部分的功能与联系。 ​

参考答案: 运算器、控制器、存储器、输入设备、输出设备。

  • 运算器:完成算术与逻辑运算,核心是 ALU 与通用寄存器组。
  • 控制器:指挥全机协调工作、产生控制信号,核心是 PC、IR、时序电路、微操作信号发生器。
  • 存储器:存放程序与数据,分为主存(内存)与辅存(外存)。
  • 输入设备:把外部信息转换为机器可识别的形式(键盘、鼠标、扫描仪)。
  • 输出设备:把处理结果转换为人类可识别的形式(显示器、打印机)。

联系: 运算器 + 控制器 = CPU;CPU + 主存 = 主机;输入/输出设备 + 辅存 = 外设。三者通过总线(数据总线、地址总线、控制总线)连接,指令与数据在控制器统一指挥下流动。 注意: 冯·诺依曼最初提出的结构以运算器为中心,现代计算机已演变为以存储器为中心。

📌 考察知识点: 计算机系统组成(国网大纲专业知识第一条)。


简答 3. 进制转换:把十进制 45.25 转为二进制与十六进制;把二进制 1101.101 转为十进制。 ​

参考答案:

  • 45.25 → 二进制
    • 整数部分:45 = 32 + 8 + 4 + 1 = 101101B
    • 小数部分:0.25 × 2 = 0.5 取整 0;0.5 × 2 = 1.0 取整 1 → .01B
    • ⇒ 101101.01B
  • 45.25 → 十六进制:按 4 位一组补零,101101.01 = 0010 1101 . 0100 = 2D.4H
  • 1101.101B → 十进制:1×2³ + 1×2² + 0×2¹ + 1×2⁰ + 1×2⁻¹ + 0×2⁻² + 1×2⁻³ = 8 + 4 + 0 + 1 + 0.5 + 0 + 0.125 = 13.625

方法要点:

  • 十进制整数 → 其他进制:除基取余,逆序排列;
  • 十进制小数 → 其他进制:乘基取整,顺序排列;
  • 二进制 ↔ 十六进制:4 位一组(不足补 0);二进制 ↔ 八进制:3 位一组。

📌 考察知识点: 进制转换(中国移动明确列为高频考点,本套选择题未覆盖)。


简答 4. 简述原码、反码、补码、移码的表示规则与表示范围(以 8 位为例)。 ​

参考答案: 设字长 n = 8,最高位为符号位(0 正 1 负)。

编码正数负数8 位范围0 的表示
原码符号位 0 + 绝对值符号位 1 + 绝对值−127 ~ +127+0、−0 两种
反码同原码符号位不变,数值位逐位取反−127 ~ +127两种
补码同原码反码末位加 1−128 ~ +127唯一
移码补码符号位取反补码符号位取反−128 ~ +127唯一
  • 补码比原码/反码多表示一个负数(−2^(n−1)),原因是 −0 的编码被"让给"了 −128。
  • 通用公式(n 位补码):范围 [ −2^(n−1), 2^(n−1) − 1 ]。
  • 移码常用于浮点数的阶码,因为它保持了数值大小的自然顺序,便于比较阶码大小。

📌 考察知识点: 定点数的编码表示(408 近十五年约 26 次,组成原理最高频考点)。


简答 5. 为什么补码可以把减法统一为加法? ​

参考答案:

  • 核心是模运算思想。n 位机器数的模为 2ⁿ,超出 2ⁿ 的部分自动丢弃(等价于取模)。
  • 对负数 −x,其补码 [−x]补 = 2ⁿ − |x|。于是 x − y = x + (−y) 在模 2ⁿ 意义下等于 x + (2ⁿ − |y|),结果正确。
  • 因此加法器无需单独的减法电路,只需一个加法器加求补逻辑,硬件大幅简化。
  • 附带好处:0 的表示唯一,且符号位可与数值位一起参与运算,无需单独处理符号。

📌 考察知识点: 补码运算原理。


简答 6. 如何判断补码加减运算是否溢出?给出至少两种方法。 ​

参考答案: 溢出指结果超出机器数能表示的范围(n 位补码即超出 [−2^(n−1), 2^(n−1)−1])。判断方法:

  1. 双符号位法(变形补码):用两位符号位表示,运算后若为 01 表示正溢出,10 表示负溢出,00 / 11 表示无溢出。两位符号位不同即溢出。
  2. 进位异或法:设 C_s 为符号位产生的进位、C₁ 为最高数值位产生的进位,则 C_s ⊕ C₁ = 1 时溢出。
  3. 同号判断法:只有同号数相加才可能溢出——若结果符号与加数符号相反则溢出;异号相加永不溢出。

易错点: "进位"与"溢出"不是一回事。例:0xFF + 0x01 = 0x00(即 −1 + 1 = 0),最高位有进位但不溢出。判断依据是符号位是否被破坏,而不是有没有进位。

📌 考察知识点: 补码运算与溢出判断。


简答 7. IEEE 754 单精度浮点数由哪几部分组成?各占多少位?写出 −12.5 的单精度表示(十六进制)。 ​

参考答案:

  • 单精度(float,32 位)= 1 位符号位 S + 8 位阶码 E(偏移量 127)+ 23 位尾数 M(隐含最高位 1)。
  • 规格化数真值公式:V = (−1)^S × 1.M × 2^(E − 127)。
  • 阶码全 0 / 全 1 是特殊情况:全 0 表示非规格化数与 0;全 1 表示无穷大(尾数为 0)或 NaN(尾数非 0)。

−12.5 的表示:

  1. 12.5 = 1100.1B = 1.1001 × 2³
  2. 符号位 S = 1(负数)
  3. 阶码 E = 3 + 127 = 130 = 10000010B
  4. 尾数 M = 1001 后补 0 至 23 位 = 10010000000000000000000
  5. 拼接:1 10000010 10010000000000000000000
  6. 按 4 位一组转十六进制:1100 0001 0100 1000 0000 0000 0000 0000 ⇒ 0xC1480000

📌 考察知识点: IEEE 754 浮点数(互联网面试高频)。


简答 8. 简述浮点数加减运算的四个步骤,并说明"对阶"的原则。 ​

参考答案:

  1. 对阶:使两个数的阶码相等。原则是小阶向大阶看齐——阶码小的数尾数右移,阶差为几就右移几位。不能大阶向小阶看齐,否则尾数左移会丢失高位,误差更大。
  2. 尾数运算:对阶后,尾数按定点补码加减法运算。
  3. 规格化:把结果调整为规格化形式。
    • 左规:尾数出现 00.0… 或 11.1… 时左移,每移一位阶码减 1;
    • 右规:尾数溢出(形如 01.xxx 或 10.xxx)时右移 1 位,阶码加 1。
  4. 舍入:对阶或右规时移出的位会丢失精度,需要舍入。常用方法:0 舍 1 入、恒置 1 法、就近舍入(IEEE 754 默认,即"四舍六入五成双")。

最后还需判断溢出:阶码上溢 → 溢出异常;阶码下溢 → 按 0 处理。

📌 考察知识点: 浮点数加减运算(国企概念题常考,本套选择题未覆盖)。


简答 9. 简述一条指令的完整执行过程(CPU 的工作流程)。 ​

参考答案: 以单条指令为例,按机器周期分为五步:

  1. 取指(IF):PC 送地址到存储器,取出指令送入 IR,PC 自动加 1(或加指令长度)。
  2. 译码(ID):控制器对 IR 中的操作码译码,判断指令类型,同时读取寄存器操作数。
  3. 执行(EX):由 ALU 完成运算,或计算访存的有效地址。
  4. 访存(MEM):若为访存指令,按有效地址读写主存。
  5. 写回(WB):把结果写回寄存器或存储器,并更新标志位(PSW)。

CPU 的基本组成:运算器(ALU、通用寄存器组、PSW)+ 控制器(PC、IR、MAR、MDR、时序部件、微操作信号发生器)。 关键寄存器:PC(下条指令地址)、IR(当前指令)、MAR(访存地址)、MDR(访存数据)。

📌 考察知识点: CPU 组成与指令执行流程(中国移动明确列为高频,本套选择题未覆盖)。


简答 10. 简述计算机存储器层次结构,并说明为什么这种结构能提高性能。 ​

参考答案:

  • 层次(由快到慢、由小到大、由贵到便宜):寄存器 → Cache(L1 / L2 / L3)→ 主存(内存)→ 辅存(磁盘 / SSD)→ 三级存储(磁带 / 云)
  • 设计依据——程序局部性原理:
    • 时间局部性:刚被访问过的数据,很可能很快被再次访问(如循环变量)。
    • 空间局部性:刚被访问过的数据,其相邻地址的数据很可能很快被访问(如数组遍历)。
  • 效果:让 CPU 绝大多数访问都能在高速层命中,从而以接近 Cache 的速度、接近辅存的容量与价格,实现"速度、容量、成本三者的折中"。
  • 容量换算:1KB = 2¹⁰B、1MB = 2²⁰B、1GB = 2³⁰B。注意字长(word)与字节(Byte)不同——字长是 CPU 一次能处理的二进制位数。

📌 考察知识点: 存储器层次结构(国网大纲「计算机系统的组成」,本套选择题未覆盖)。


简答 11. 比较 Cache 的三种地址映射方式。 ​

参考答案:

方式规则优点缺点
直接映射主存块只能放到 Cache 的唯一行:行号 = 主存块号 mod Cache 行数硬件最简单、成本最低、查找快冲突率高,命中率低
全相联映射主存块可放到 Cache 的任意行冲突率最低、命中率最高需比较所有行的标记,比较器多、成本高、速度慢
组相联映射组间直接映射、组内全相联:组号 = 主存块号 mod 组数折中方案,实际 CPU 普遍采用(2 路 / 4 路 / 8 路)复杂度介于两者之间
  • 地址划分(直接映射 / 组相联):标记 Tag | 行号或组号 Index | 块内地址 Offset
    • Offset 位数 = log₂(块大小);Index 位数 = log₂(行数或组数);Tag 位数 = 主存地址位数 − Index 位数 − Offset 位数。
  • 全相联映射没有 Index 字段,只有 Tag + Offset。

📌 考察知识点: Cache 映射方式(408 约 16 次;互联网面试高频)。


简答 12. Cache 的写策略有哪几种?各自适用什么场景? ​

参考答案:

  • 写命中时:
    • 写直达(Write Through):同时写 Cache 和主存。优点:实现简单、主存与 Cache 始终一致;缺点:写主存慢,访存开销大(可用写缓冲缓解)。
    • 写回(Write Back):只写 Cache 并置"脏位",被替换时才写回主存。优点:减少访存次数、性能高;缺点:存在不一致窗口,需额外脏位。
  • 写不命中时:
    • 写分配(Write Allocate):先把主存块调入 Cache 再写(常与写回配合)。
    • 非写分配(No-Write Allocate):直接写主存,不调入 Cache(常与写直达配合)。
  • 常见组合:写回 + 写分配(现代 CPU 主流);写直达 + 非写分配(实现简单)。

📌 考察知识点: Cache 写策略。


简答 13. 简述从 CPU 给出虚拟地址到访问到物理内存的完整过程。 ​

参考答案:

  1. CPU 发出虚拟地址(VA),拆分为虚页号 VPN + 页内偏移 Offset。
  2. 用 VPN 查 TLB(快表):
    • TLB 命中 → 直接得到物理页框号 PFN,与 Offset 拼接成物理地址,访问 Cache / 主存。无需查页表。
    • TLB 未命中 → 进入第 3 步。
  3. 查页表(多级页表需逐级查):
    • 页表项有效位 = 1(页面在主存)→ 得到 PFN,并把该页表项回填 TLB,再拼物理地址访问。
    • 页表项有效位 = 0(页面不在主存)→ 产生缺页异常,由 OS 从磁盘换入页面(主存满则按置换算法换出),更新页表后重新执行该指令。
  4. 访问 Cache / 主存时还可能发生 Cache 缺失(与缺页是两回事),按 Cache 缺失惩罚处理。

📌 考察知识点: 虚拟存储器、TLB、页表(408 约 19 次)。


简答 14. "TLB 失效"与"缺页"有什么区别? ​

参考答案:

  • TLB 失效(TLB miss):TLB 中没有该页表项的副本,但页面很可能仍在主存。代价小——只需查内存中的页表,命中后把页表项回填 TLB,指令继续执行,不产生异常 / 中断。
  • 缺页(Page Fault):页表项有效位为 0,说明页面确实不在主存(在磁盘上)。代价大——产生缺页异常,由操作系统进行磁盘 I/O 换入页面(可能还需换出其他页),随后重新执行被中断的指令。
  • 递进关系:TLB 失效 → 查页表 → 若有效位为 0 才是缺页。三步递进,前两步都不等于缺页。

📌 考察知识点: 虚拟存储器(区分 TLB 失效与缺页)。


简答 15. 简述中断响应的完整过程,并说明"保护现场"与"保护断点"的区别。 ​

参考答案: 中断响应(由硬件自动完成):

  1. 关中断(置中断屏蔽位,防止响应过程被新中断打断);
  2. 保护断点:把当前 PC(下一条指令地址)与 PSW(程序状态字) 压栈或存入特定寄存器;
  3. 判别中断源(查询中断向量 / 优先级排队);
  4. 转中断服务程序(按中断向量取服务程序入口地址送 PC);
  5. 服务程序内部:保护现场(通用寄存器内容压栈)→ 处理中断 → 恢复现场 → 开中断 → 中断返回(IRET)。

区别:

  • 断点:指程序的返回地址(PC)与程序状态字,由硬件在响应阶段自动保存。
  • 现场:指通用寄存器的内容,通常由中断服务程序用指令保存 / 恢复。
  • 记忆:"硬件存断点,软件存现场"。

📌 考察知识点: 中断系统(408 约 24 次;国企高频)。


简答 16. 比较程序查询、中断、DMA 三种 I/O 控制方式。 ​

参考答案:

方式数据传送主体传送单位CPU 参与程度适用设备
程序查询(轮询)CPU字 / 字节全程参与,反复查询状态并等待,效率最低极低速、简单设备
程序中断CPU(执行服务程序)字 / 字节每个字 / 字节都要中断一次,开销较大低速、中速设备(键盘、打印机)
DMADMA 控制器(硬件)数据块只在传送前初始化(设地址 / 长度 / 方向)与传送后收尾(响应中断),传送过程不干预高速、成块设备(磁盘、网卡)
  • DMA 与中断的本质区别:传送单位不同(数据块 vs 字 / 字节),执行主体不同(硬件 vs CPU 执行程序)。
  • 注意:DMA 传送结束后仍会向 CPU 发中断用于通知收尾——这与"DMA 传送过程不需要 CPU 参与"并不矛盾。
  • DMA 与 CPU 争用总线的处理:停止 CPU 访存、周期挪用(周期窃取)、交替访存。

📌 考察知识点: 程序查询 / 中断 / DMA 三种 I/O 方式(国企高频;程序查询方式为本套选择题缺口)。


简答 17. 指令流水线有哪三种冒险(相关)?各自的解决方法是什么? ​

参考答案:

  1. 结构冒险(资源相关):多条指令在同一周期争用同一硬件资源(如同时取指与取数争用存储器)。
    • 解决:增加硬件资源(指令 Cache 与数据 Cache 分离、双端口存储器)、插入气泡(停顿)。
  2. 数据冒险(数据相关):后一条指令需要用到前一条指令尚未写回的结果。
    • 类型:RAW(写后读,最常见)、WAR(读后写)、WAW(写后写)。
    • 解决:转发 / 旁路(Forwarding / Bypassing)——把 ALU 结果直接从流水线寄存器送到需要的段,无需等写回;插入气泡;编译器指令调度(重排指令顺序)。
  3. 控制冒险(控制相关):转移指令改变 PC,导致后续已取入的指令可能取错。
    • 解决:分支预测(静态 / 动态,如两级自适应预测)、延迟槽(延迟分支)、提前在译码段计算转移地址并判断、插入气泡。

流水线性能: 理想情况下 k 段流水线执行 n 条指令的时间 = (k + n − 1) × 时钟周期;时钟周期 = 最慢段的时间(瓶颈段决定,是"取最大、不求和")。

📌 考察知识点: 流水线冒险(互联网面试高频)。


简答 18. 简述总线的分类,并说明总线带宽的计算方法。 ​

参考答案:

  • 按功能分类:
    • 数据总线:传输数据,双向,位数决定一次能传输的数据宽度。
    • 地址总线:传输地址,单向(CPU → 存储器 / I/O),位数决定最大寻址空间(n 位地址总线 → 2ⁿ 个地址单元)。
    • 控制总线:传输控制信号(读 / 写、中断请求、总线请求 / 授权等),单根线方向固定,整体可视为双向。
  • 按连接对象分类: 片内总线、系统总线、通信总线。
  • 总线带宽(数据传输率)= 总线宽度(字节)× 总线频率
    • 例:总线宽度 32 位(4B)、工作频率 66MHz、每个时钟周期传 1 次 → 带宽 = 4B × 66MHz = 264MB/s。
    • 若每个时钟周期传 2 次(双沿传输 / 双倍速率),带宽翻倍。
  • 总线仲裁:链式查询(连线最少、优先级固定、最脆弱)、计数器定时查询(1 根请求线 + log₂N 根地址线)、独立请求(N 根请求 + N 根授权,响应最快、优先级可编程)。

📌 考察知识点: 总线(国企高频)。


简答 19. 什么是大端和小端?求结构体 struct { char a; int b; char c; } 在 32 位系统默认对齐下的 sizeof,并说明原因。 ​

参考答案:

  • 大端(Big Endian):高字节存放在低地址("高存低")。如 0x12345678 存于 0x100 起:0x100=0x12、0x101=0x34、0x102=0x56、0x103=0x78。
  • 小端(Little Endian):低字节存放在低地址("低低对应")。x86、ARM(默认)采用小端;网络字节序为大端。
  • 记忆口诀:"大端高存低,小端低低对"。

sizeof 计算(32 位系统,默认 4 字节对齐):

成员偏移大小填充说明
char a01补 3 字节,使 int b 对齐到 4 的倍数
int b44—
char c81补 3 字节,使结构体总大小为最大对齐数 4 的倍数
合计12 字节
  • 对齐规则:① 每个成员的偏移必须是该成员大小的整数倍(不足则填充);② 结构体总大小必须是最大成员对齐数的整数倍(不足则尾部填充)。
  • 若加 #pragma pack(1)(按 1 字节对齐),则 sizeof = 1 + 4 + 1 = 6 字节。
  • 为什么要对齐:CPU 按字(4B / 8B)访问内存,未对齐的数据会跨越字边界,需要两次访存并拼接,效率降低;部分架构(如某些 ARM)甚至直接触发硬件异常。

📌 考察知识点: 大小端存储与字节对齐(企业 C/C++、嵌入式岗必考,408 不考)。


简答 20. 磁盘的存取时间由哪几部分组成?比较 RAID 0、RAID 1、RAID 5 的特点。 ​

参考答案:

磁盘存取时间 = 寻道时间 + 旋转等待时间 + 数据传输时间

  • 寻道时间:磁头移动到目标磁道的时间(通常最耗时,占大头)。
  • 旋转等待时间(旋转延迟):等待目标扇区转到磁头下方,平均为半圈的时间 = 60 / (2 × 转速 rpm) 秒。
  • 数据传输时间:读写目标扇区数据的时间 = 数据量 / 传输率。
  • 例:转速 7200rpm → 平均旋转延迟 = 60 / (2 × 7200) = 1/240 s ≈ 4.17ms。

RAID 对比:

等级原理冗余能力可用容量特点
RAID 0条带化(数据分块分散到各盘)无冗余100%(N 盘之和)读写性能最高,但任一盘损坏全部数据丢失,可靠性反而低于单盘
RAID 1镜像(两盘存相同数据)每组可坏 1 盘50%冗余最高、读性能好,写性能与利用率最低(成本最高)
RAID 5条带化 + 分布式奇偶校验可坏 1 盘(N−1)/N性能与冗余的均衡方案,至少需 3 块盘;写操作有校验开销
RAID 4条带化 + 专用校验盘可坏 1 盘(N−1)/N校验盘成为写瓶颈
RAID 6双重校验可坏 2 盘(N−2)/N可靠性更高,写性能更差

📌 考察知识点: 磁盘与 RAID(运营商 / 银行科技岗常考)。


持续学习,持续积累。