以下是结合2022—2026年真题考点提炼的上午选择题背诵条目,共 510 条。每条给出结论/原理 + 真题考查形式或典型陷阱,按模块编号。
一、计算机组成与体系结构(1—65)
1. CPU由运算器、控制器、寄存器组和内部总线组成。真题常问“CPU核心部件不包括什么”,存储器不属于CPU核心部件。
2. 运算器核心部件:ALU(算术逻辑单元)、AC(累加器)、DR(数据缓冲寄存器)、PSW(状态条件寄存器) 。
3. 控制器核心部件:PC(程序计数器)、IR(指令寄存器)、指令译码器、时序部件。
4. PC存下一条指令地址,IR存当前指令。2024—2025反复考“PC存当前指令”为错误选项。
5. IR对用户完全透明,用户程序不能直接访问;PC用户可见(可编程访问)。透明性辨析是常考点。
6. 补码的作用:将减法转化为加法,简化运算器设计。2024下半年考过“求补码真值”。
7. 已知X的补码,求−X的补码:连同符号位一起按位取反,末位加1。2025下半年直接考查。
8. 移码:只把补码的符号位取反,其余位不变。常用于浮点数的阶码。
9. 正数的原码、反码、补码三者相同;负数的反码是原码数值位按位取反(符号位不变),补码是反码末位加1。
10. 机器字长为n时,补码表示范围:−2ⁿ⁻¹ 到 2ⁿ⁻¹−1;原码和反码范围:−(2ⁿ⁻¹−1) 到 2ⁿ⁻¹−1。
11. 浮点数:阶码决定范围,尾数决定精度。阶码越长范围越大,尾数越长精度越高。
12. 浮点数运算步骤:对阶→尾数运算→规格化→舍入→溢出判断。
13. 海明校验码:可检错也可纠错,校验位公式 2^r ≥ r + m + 1(m数据位,r校验位)。连续多年考查。
14. 奇偶校验:只能检错,不能纠错。
15. CRC循环冗余校验:可检错,不可纠错,用模2除法计算。
16. 流水线周期:等于各段中最慢的那一段时间。2025下半年给出取指2ns、分析2ns、执行1ns,周期为2ns。
17. 流水线执行时间:单条指令完整时间 +(指令数n−1)× 流水线周期。注意第1条走完全部工段。
18. 流水线吞吐率 = 1 / 流水线周期(指令不重叠时),或按“指令数 / 总时间”计算。
19. 流水线加速比 = 不使用流水线的时间 / 使用流水线的时间。
20. 寻址方式快慢排序:立即寻址 > 寄存器寻址 > 直接寻址 > 间接寻址。立即最快(操作数在指令中),间接最慢(多次访存)。
21. 立即寻址:操作数直接包含在指令中,无需额外访存。
22. 直接寻址:指令中存放操作数的内存地址,需要访问内存获取数据。
23. 间接寻址:指令中存放的是操作数地址的地址,需要多次访存。
24. 寄存器寻址:操作数存放在CPU寄存器中,寻址开销小。
25. Cache的作用:缓解CPU与主存之间的速度矛盾,依据局部性原理。Cache是除寄存器外最快的存储层次。
26. Cache命中率 = 命中次数 / 总访问次数。命中率计算题在2022—2025年均出现。
27. 局部性原理:包括时间局部性(刚用过的数据可能再用)和空间局部性(相邻数据可能被用)。Cache设计的理论基础。
28. 存储访问速度排序:通用寄存器 > Cache > 内存RAM > 硬盘。越靠近CPU,速度越快、容量越小、成本越高。
29. 主存容量计算:容量 = 存储单元数 × 每单元位数。地址线n根,寻址范围 = 2ⁿ 个存储单元。
30. 内存地址范围计算技巧:大减小加1。例如B3000H到DABFFH的容量按此方法计算。
31. 串联系统可靠度 = 各部件可靠度相乘。
32. 并联系统可靠度 = 1 − 各部件失效率相乘(即 1 − (1−R)ⁿ)。并联易错点:不是直接乘可靠度。
33. 总线分类:数据总线双向,地址总线单向(CPU发出地址),控制总线双向。
34. 数据总线宽度决定CPU与内存之间一次能传输的数据位数;地址总线宽度决定寻址范围。
35. RISC特点:指令少、定长、寄存器多、流水线友好、多数指令在一个周期内完成。2022下半年考过RISC特点。
36. CISC特点:指令多、变长、寻址方式多、复杂指令需多个周期。
37. I/O方式效率排序:DMA > 中断 > 程序查询。程序查询CPU全程等待,利用率最低;DMA硬件直接搬数据,CPU几乎不参与。
38. 程序查询方式:CPU需全程等待,无法与CPU并行工作,适用于低速外设。
39. 中断方式:外设就绪后主动发中断信号,CPU无需轮询等待,可与CPU并行工作。
40. DMA方式:无需CPU干预,直接完成主存与外设数据交换,传输效率最高,适用于硬盘、显卡等高速设备。
41. 中断响应时,CPU保存程序计数器(PC) 和程序状态字(PSW),然后转中断服务程序。
42. 中断向量:存放中断服务程序入口地址。中断向量表在内存固定区域。
43. DMA与中断的区别:DMA不需要CPU逐字节介入,中断需要CPU执行中断服务程序。
44. 虚拟存储:解决主存容量不足的问题,由页式/段式/段页式管理。逻辑地址 = 页号 + 页内偏移。
45. 地址总线宽度与寻址范围:地址线n根,可寻址 2ⁿ 个单元。
46. 字节 = 8 bit;字 = 机器字长。主存编址分“按字节编址”和“按字编址”。
47. 最小数据单位是bit,最小存储单位是byte。
48. 进制表示:D十进制、B二进制、O八进制、H十六进制。
49. 定点整数补码可表示 2ⁿ 个数(比原码多一个负数)。
50. 冯·诺依曼体系结构的核心思想:存储程序,指令和数据以同等地位存放在存储器中。
51. 指令的组成:操作码 + 地址码。操作码指明做什么,地址码指明操作数在哪里。
52. 指令执行三步骤:取指—分析—执行。流水线计算的基础框架。
53. CPU与主存之间的速度矛盾由Cache缓解;主存与辅存之间的容量矛盾由虚拟存储缓解。
54. Spooling技术:将独占设备改造为虚拟共享设备,解决CPU与设备速度不匹配。
55. 总线结构:单总线、双总线、三总线。三总线包括数据总线、地址总线、控制总线。
56. 磁盘容量计算:容量 = 磁头数 × 柱面数 × 每道扇区数 × 每扇区字节数。
57. 磁盘存取时间 = 寻道时间 + 旋转延迟 + 传输时间。寻道时间通常最长。
58. RAID:RAID 0条带化无冗余;RAID 1镜像;RAID 5分布式奇偶校验。
59. 编码:ASCII码7位表示128个字符;汉字国标码/区位码;机内码用于计算机内部存储。
60. 逻辑运算:与(AND)、或(OR)、非(NOT)、异或(XOR)。异或:相同为0,不同为1。
61. 码制转换:原码→反码→补码→移码的转换链条必须熟练。
62. 零的表示:原码和反码中零有正零和负零两种;补码和移码中零唯一。
63. 浮点数溢出判断:阶码溢出才是真正的溢出,尾数溢出可通过规格化纠正。
64. CPU中的寄存器:用户可见的有PC、通用寄存器;用户不可见(透明)的有IR、MAR、MDR。
65. 多核CPU:每个核心有独立的运算器和控制器,共享Cache和内存。
二、操作系统(66—130)
66. 进程三态转换:运行 → 阻塞(等待I/O或事件);阻塞 → 就绪(事件完成);就绪 → 运行(被调度)。
67. 进程不能从阻塞直接转为运行,必须先转为就绪再被调度。
68. 进程与线程的资源共享:同一进程内线程共享代码段、全局变量、打开文件;但每个线程有独立栈和寄存器。
69. 线程共享内容:进程代码段、公有数据、打开的文件描述符、信号处理器、当前目录、用户ID与组ID。
70. 线程独有内容:线程ID、独立寄存器组、线程堆栈(栈指针)、错误返回码、信号屏蔽码。
71. 线程是CPU调度的基本单位,进程是资源分配的基本单位。
72. PV操作方向:前趋图中,箭线起点是V(前驱完成通知),终点是P(后继开始前等待)。互斥信号量初值1,同步信号量初值通常0。
73. P操作:P(S)使S = S − 1;若S < 0,进程阻塞。
74. V操作:V(S)使S = S + 1;若S ≤ 0,唤醒一个等待进程。
75. 死锁四个必要条件:互斥、请求与保持、不可剥夺、循环等待。四个同时满足才可能死锁。
76. 不死锁判定公式:m × (w − 1) + 1 ≤ n 时不可能死锁(m进程数,w每进程最大需求,n资源总数)。
77. 银行家算法:用于避免死锁,判断系统是否存在安全序列。
78. 死锁预防:破坏四个必要条件之一;死锁避免:银行家算法动态判断。概念辨析是2025年考点。
79. 页式存储地址转换:逻辑地址 = 页号 + 页内偏移;页表把页号映射为物理块号。
80. 页面淘汰原则:被修改过的脏页要写回磁盘,未修改的直接丢弃。
81. FIFO页面置换可能产生Belady异常(物理块增多,缺页率反而上升);LRU不会。
82. LRU(最近最少使用) :淘汰最长时间未被访问的页面。
83. OPT(最优置换) :淘汰未来最长时间内不被访问的页面,理论最优但不可实现。
84. 页表的作用:记录页号到物理块号的映射,页表项还包含有效位、修改位、访问位等。
85. 快表(TLB) :存放最近使用的页表项,加速地址转换,依据局部性原理。
86. 段页式存储:先分段,段内再分页。地址 = 段号 + 页号 + 页内偏移。
87. 内存碎片:固定分区产生内部碎片;动态分区产生外部碎片;页式有内部碎片无外部碎片;段式有外部碎片。
88. 文件物理结构:连续结构存取快但产生碎片;链接结构无碎片但只能顺序访问;索引结构支持随机访问,索引表占空间。
89. 绝对路径:从根目录开始;相对路径:从当前工作目录开始。
90. 树形目录结构:支持文件重名、便于分类管理,绝对路径和相对路径结合使用。
91. 索引文件:通过索引表访问文件块,支持随机存取。
92. 位示图:用二进制位表示磁盘块占用情况,常考字号、位号计算。
93. 磁盘调度算法:SSTF(最短寻道时间优先) 可能饥饿;SCAN(电梯算法) 兼顾方向;FCFS 最简单。
94. 进程调度算法:FCFS简单但平均等待时间长;短作业优先平均等待最短但可能饥饿;时间片轮转公平但上下文切换开销大。
95. 临界区:一次只允许一个进程进入的代码段。PV操作实现互斥访问临界区。
96. 信号量:互斥信号量用于互斥,初值1;同步信号量用于同步,初值视条件而定(常为0)。
97. 进程同步的临界资源:打印机、共享变量等一次只允许一个进程使用的资源。
98. 线程的实现方式:用户级线程(内核不可见,切换快)和内核级线程(内核管理,可多核并行)。
99. 死锁检测:通过资源分配图判断是否存在环路;有环不一定死锁(同类资源多个时)。
100. 虚拟存储的容量:由地址空间决定(逻辑地址位数),不是由内存和外存容量简单相加决定。
101. I/O软件层次:用户层I/O → 设备独立性软件 → 设备驱动程序 → 中断处理程序 → 硬件。
102. Spooling系统的组成:输入井、输出井、输入缓冲区、输出缓冲区、输入进程、输出进程。
103. 操作系统的四大功能:进程管理、存储管理、文件管理、设备管理。
104. 操作系统的特征:并发、共享、虚拟、异步。
105. 批处理系统:吞吐量大,但交互性差;分时系统:交互性好,响应时间短;实时系统:对响应时间有严格限制。
106. PCB(进程控制块) :进程存在的唯一标志,包含进程标识符、状态、优先级、资源清单等。
107. 进程创建:分配PCB、分配资源、调入内存、转入就绪态。
108. 进程终止:释放资源、回收PCB。
109. 进程切换:保存当前进程上下文,恢复新进程上下文,开销较大。
110. 线程切换:同进程内线程切换只需保存/恢复寄存器和栈指针,开销小于进程切换。
111. 作业调度:从后备队列选择作业调入内存;进程调度:从就绪队列选择进程分配CPU。
112. 多级反馈队列调度:兼顾不同类型进程,短作业优先、长作业不饥饿。
113. 优先级调度:静态优先级和动态优先级;可能产生优先级反转问题。
114. 优先级反转:低优先级进程持有高优先级进程需要的资源,导致高优先级进程被阻塞。
115. 管程:封装共享资源和操作,简化同步编程,避免PV操作的分散错误。
116. 生产者—消费者问题:用PV操作实现同步与互斥,缓冲区是临界资源。
117. 读者—写者问题:允许多个读者同时读,写者与任何人互斥。
118. 哲学家进餐问题:死锁的经典场景,通过限制同时拿筷子的哲学家数量来预防。
119. 文件逻辑结构:有结构文件(记录式)和无结构文件(流式)。
120. 文件目录:FCB(文件控制块)存放文件名、物理位置、大小、权限等。
121. 文件共享:硬链接(多个目录项指向同一inode)和软链接(符号链接,指向路径名)。
122. 文件保护:访问控制矩阵、访问控制表(ACL)、能力表。
123. 磁盘空间管理:空闲表法、空闲链表法、位示图法、成组链接法。
124. 成组链接法:UNIX常用,将空闲块分组管理,节省空间。
125. 设备管理:独占设备、共享设备、虚拟设备。
126. 设备驱动程序:与硬件直接交互,屏蔽硬件差异。
127. 中断处理程序:处理I/O完成中断,唤醒等待进程。
128. 缓冲技术:单缓冲、双缓冲、多缓冲,缓解CPU与I/O速度不匹配。
129. 操作系统启动过程:BIOS自检 → 引导程序 → 加载内核 → 初始化 → 启动用户态。
130. 微内核结构:内核只保留最基本功能,其他服务在用户态运行,提高可靠性和可扩展性。
三、数据结构与算法(131—215)
131. 栈的特性:后进先出(LIFO) 。2025年直接考“栈遵循先进先出”为错误选项。
132. 队列的特性:先进先出(FIFO) 。
133. 循环队列解决顺序队列的假溢出。判满:(rear + 1) % maxSize == front(牺牲一个单元)。
134. 链表操作:删除最后一个结点需要遍历链表;删除/插入头结点只需操作头指针。
135. 顺序表:随机访问O(1),插入/删除平均O(n)。
136. 单链表:不支持随机访问,查找O(n),插入/删除已知前驱时O(1)。
137. 双向链表:可双向遍历,插入/删除更方便。
138. 栈的应用:表达式求值、括号匹配、递归实现、函数调用。
139. 队列的应用:BFS、缓冲区、任务调度。
140. 二叉树遍历:前序“根左右”,中序“左根右”,后序“左右根”。
141. 二叉树还原:已知中序 + 前序或中序 + 后序可唯一还原;已知前序 + 后序不能唯一确定。
142. 完全二叉树:结点编号与满二叉树对应,叶子只出现在最后两层。
143. 满二叉树结点数:深度为k的满二叉树有 2^k − 1 个结点。
144. 二叉树性质:第i层最多 2^(i−1) 个结点;深度为k最多 2^k − 1 个结点。
145. 哈夫曼树:权值小的优先合并,带权路径长度最小。频率高的字符编码短。
146. 哈夫曼编码是前缀编码,任一编码不是另一编码的前缀。
147. 二叉排序树(BST) :左子树 < 根 < 右子树;中序遍历得到有序序列。
148. 平衡二叉树(AVL) :左右子树高度差绝对值 ≤ 1。插入/删除可能需要旋转(LL、RR、LR、RL)。
149. B树:多路平衡查找树,每个结点既存关键字也存数据。
150. B+树:只有叶子结点存数据,非叶子只存索引,叶子间用指针连成链表,范围查询更快。数据库索引常用。
151. 图的存储:邻接矩阵适合稠密图,邻接表适合稀疏图。
152. 邻接矩阵:空间O(n²),判断两点是否相邻O(1);邻接表:空间O(n+e),遍历邻接点高效。
153. 图的遍历:DFS用栈(递归),BFS用队列。
154. 拓扑排序:用于AOV网,每次输出入度为0的顶点;能输出全部顶点则无环。
155. 关键路径:AOE网中最长路径,关键活动时间裕量为0。
156. 最小生成树:Prim适合稠密图,Kruskal适合稀疏图。
157. 最短路径:Dijkstra单源、不能负权;Floyd多源、可负权但不能负环。
158. 排序平均复杂度O(n log n) :快排、归并、堆排(“快归堆”)。
159. 排序平均复杂度O(n²) :冒泡、插入、选择(“冒插选”)。
160. 不稳定排序:快排、希尔、选择、堆排(“快希选堆”)。
161. 稳定排序:冒泡、插入、归并、基数。
162. 快速排序最坏情况:基本有序时退化为 O(n²) 。
163. 归并排序空间复杂度:O(n) ,需要辅助数组。
164. 堆排序建堆时间:O(n) ;每次调整 O(log n) ,总时间 O(n log n) 。
165. 冒泡排序:稳定,最好O(n)(已有序),最坏O(n²)。
166. 插入排序:稳定,基本有序时效率高。
167. 选择排序:不稳定,无论初始顺序如何都是O(n²)。
168. 希尔排序:不稳定,是插入排序的改进,按增量分组。
169. 基数排序:稳定,非比较排序,时间复杂度O(d(n+r))。
170. 二分查找:必须有序,时间复杂度 O(log n) 。
171. 二分查找最多比较次数:⌈log₂(n+1)⌉。
172. 哈希冲突处理:开放定址法(线性探测、二次探测)、链地址法。链地址法不产生聚集。
173. 哈希表查找:理想情况O(1),冲突严重时退化。
174. 时间复杂度增长顺序:O(1) < O(log n) < O(n) < O(n log n) < O(n²) < O(n³) < O(2ⁿ) < O(n!) 。
175. 分治法:将问题分解为相互独立的子问题,递归求解后合并(归并排序、二分查找)。
176. 动态规划:子问题重叠,用表格保存已解子问题,避免重复计算。典型:0-1背包、最长公共子序列。
177. 贪心法:每步选当前最优,不回溯,不保证全局最优。典型:活动安排、哈夫曼编码、Dijkstra。
178. 回溯法:递归尝试 + 剪枝 + 恢复现场。典型:N皇后、排列组合。
179. 递归与栈:递归调用使用系统栈保存返回地址和局部变量。
180. 字符串:朴素匹配最坏O(mn);KMP利用next数组达到O(m+n)。
181. 数组与矩阵:二维数组按行存储和按列存储的地址计算公式不同。
182. 特殊矩阵压缩:对称矩阵、三角矩阵、对角矩阵的压缩存储。
183. 稀疏矩阵压缩:三元组表(行、列、值)或十字链表。
184. 广义表:表头(第一个元素)、表尾(除表头外的剩余元素)。长度和深度的计算。
185. 树转二叉树:左孩子右兄弟。
186. 森林转二叉树:每棵树转二叉树后,根结点依次相连。
187. 顺序查找:O(n),不要求有序。
188. 分块查找:块间有序、块内无序,平均性能介于顺序和二分之间。
189. 动态查找表:二叉排序树、AVL树、B树、B+树、哈希表。
190. 静态查找表:顺序查找、二分查找、分块查找。
191. 算法效率度量:时间复杂度和空间复杂度,关注最坏情况。
192. 递归算法:必须有递归出口,否则无限递归。
193. 迭代与递归:迭代通常效率更高(无函数调用开销),递归代码更简洁。
194. 稳定排序的选择:需要保留相等元素原始顺序时,选择冒泡、插入、归并、基数。
195. 基本有序时的排序选择:插入排序或冒泡排序效率最高。
196. 空间紧张时的排序选择:堆排序(原地排序,空间O(1))。
197. 求Top K问题:用堆排序或快速选择,不需要完全排序。
198. 外部排序:数据量大于内存时使用,多路归并。
199. 贪心法与动态规划的区别:贪心不回溯、不保证最优;动态规划保存子问题解、保证最优。
200. 分治法与动态规划的区别:分治子问题独立;动态规划子问题重叠。
201. 回溯法的剪枝:提前判断当前路径不可能产生解,减少搜索空间。
202. N皇后问题:n=4时解为2。2025下半年算法题直接考查。
203. 背包问题:0-1背包用动态规划;部分背包用贪心法。
204. 最长公共子序列(LCS) :动态规划,时间复杂度O(mn)。
205. Dijkstra算法:贪心策略,不能处理负权边。
206. Floyd算法:动态规划思想,三重循环,O(n³)。
207. Prim算法:从顶点出发,每次选连接已选集合和未选集合的最小边。
208. Kruskal算法:按边权排序,用并查集判断是否成环。
209. 拓扑排序的应用:判断有向图是否有环、确定任务执行顺序。
210. 关键路径的应用:确定工程最短工期,关键活动不能延误。
211. AOV网:顶点表示活动,边表示活动之间的优先关系。
212. AOE网:边表示活动,顶点表示事件,边权表示活动持续时间。
213. 事件的最早发生时间:从源点正向计算,取最大值。
214. 事件的最迟发生时间:从汇点反向计算,取最小值。
215. 活动的时间裕量 = 最迟开始时间 − 最早开始时间。裕量为0的活动是关键活动。
四、程序设计语言基础(216—265)
216. 编译过程顺序:词法分析 → 语法分析 → 语义分析 → 中间代码生成 → 优化 → 目标代码生成。
217. 词法分析:识别单词(标识符、关键字、常数),依据正规式/有限自动机。
218. 语法分析:判断句子结构是否符合文法,括号不匹配在此阶段发现。
219. 语义分析:检查语义合法性(变量未声明、类型不匹配)。
220. 中间代码:与具体机器无关,便于优化和移植。常见形式:四元式、三元式、逆波兰式。
221. 目标代码生成:生成汇编或机器码,与具体硬件相关。
222. 编译型语言:先翻译后执行,效率高但可移植性差。C、C++是编译型。
223. 解释型语言:边翻译边执行,可移植性好但效率低。Python、JavaScript是解释型。
224. Python特点:跨平台、开源、解释型、面向对象、动态编程。不是编译型。
225. 有限自动机DFA:每个状态对同一输入只有唯一后继;NFA可有多个后继。
226. 正规式与有限自动机:两者等价,都用于描述词法规则。
227. 文法:上下文无关文法用于描述程序设计语言的语法结构。
228. 语法树:根是开始符号,叶子是终结符,内部结点是非终结符。
229. 传值调用:形参是实参的副本,修改形参不影响实参。
230. 传址/引用调用:形参是实参的地址或别名,修改形参会改变实参。
231. 后缀表达式(逆波兰式) :操作数在前,运算符在后;用栈求值。
232. 中缀转后缀:按运算符优先级和括号规则转换,操作数顺序不变。
233. 程序设计语言的基本成分:数据、运算、控制、传输。控制包括顺序、选择、循环。
234. 标识符作用域:局部变量、全局变量、静态局部变量的生命周期和可见性不同。
235. 静态变量:生命周期贯穿程序运行,但作用域限于定义它的函数/文件。
236. 动态语义与静态语义:静态语义在编译期检查(类型匹配);动态语义在运行期体现(数组越界)。
237. 编译优化:局部优化、循环优化、全局优化。优化不改变程序语义。
238. 词法分析的工具:LEX;语法分析的工具:YACC。
239. 上下文无关文法:用产生式描述语法,四元组(非终结符、终结符、产生式、开始符号)。
240. 正规式:描述词法规则,与有限自动机等价。
241. 表达式求值:中缀、前缀、后缀三种形式,后缀最适合计算机求值。
242. 函数调用的参数传递:传值、传地址、传名。传名调用在每次使用时重新求值实参。
243. 递归函数的实现:依赖系统栈保存返回地址和局部变量。
244. 变量的存储分配:静态分配(编译期确定)和动态分配(运行期确定)。
245. 堆和栈:栈由编译器自动管理,存放局部变量和返回地址;堆由程序员手动管理(如malloc/new)。
246. 内存泄漏:动态分配的内存未释放,导致可用内存逐渐减少。
247. 编译错误的类型:词法错误(非法字符)、语法错误(结构错误)、语义错误(类型不匹配)。
248. 解释器的组成:词法分析、语法分析、语义分析、执行。
249. 编译器与解释器的区别:编译器生成目标代码,解释器直接执行源程序或中间代码。
250. 程序设计语言的分类:命令式、函数式、逻辑式、面向对象。Prolog是逻辑式语言。
251. C语言的特点:编译型、静态类型、接近硬件、可移植性较好。
252. 面向对象语言的特征:封装、继承、多态。
253. 动态绑定:运行时根据对象实际类型决定调用哪个方法(多态的实现机制)。
254. 静态绑定:编译时确定方法调用(如重载)。
255. 重载(Overload) :同一作用域内方法名相同、参数列表不同。
256. 重写(Override) :子类重新定义父类的方法,方法签名相同。
257. 值传递与引用传递的输出判断:常考程序运行后变量的值,注意形参是否改变实参。
258. 变量的初始化:局部变量未初始化时值不确定;全局变量默认初始化为0。
259. 短路求值:逻辑与/或运算可能不计算右侧表达式。
260. 运算符优先级:括号 > 单目 > 算术 > 关系 > 逻辑 > 赋值。
261. 类型转换:隐式转换和显式转换(强制类型转换),注意精度丢失。
262. 数组名:在表达式中通常退化为指向首元素的指针。
263. 指针与引用:指针可以为空、可以重新赋值;引用必须初始化且不能更换绑定。
264. 函数指针:指向函数的指针,可用于回调机制。
265. 编译预处理:宏定义、文件包含、条件编译,在编译之前处理。
五、软件工程(266—350)
266. 瀑布模型:阶段严格顺序、文档驱动,不够灵活,难以适应需求变化。适合需求明确的项目。
267. 瀑布模型的五个阶段:需求分析、设计、编码、测试、维护。每阶段有评审和文档控制。
268. V模型:瀑布模型的变体,开发阶段与测试阶段一一对应(需求↔验收测试,设计↔集成测试)。
269. 原型模型:快速构建原型验证需求,适合需求不明确的项目。
270. 螺旋模型:强调风险分析,适合大型复杂项目。
271. 增量模型:分批交付,每个增量是一个可运行的部分。第一个增量是核心产品。
272. 敏捷开发:迭代、快速响应变化;每日站会、结对编程(XP) 是典型实践。
273. 极限编程(XP)的价值观:沟通、简单、反馈、勇气。
274. Scrum:迭代周期称为Sprint,角色有Product Owner、Scrum Master、开发团队。
275. 喷泉模型:面向对象开发,阶段无明显边界、迭代重叠。
276. 统一过程(RUP) :四个阶段——起始、精化、构建、移交。
277. CMM 5级:初始级 → 可重复级 → 已定义级 → 已管理级 → 优化级。
278. CMM初始级:成功依赖个人英雄主义,过程混乱。
279. CMM可重复级:建立基本项目管理过程,跟踪费用、进度、功能。
280. CMM已定义级:过程文档化、标准化。
281. CMM已管理级:对过程和产品质量进行定量管理。
282. CMM优化级:持续过程改进,定量分析。
283. CMMI两种表示法:阶段式模型和连续式模型。
284. 内聚从高到低:功能 > 顺序 > 通信 > 过程 > 时间 > 逻辑 > 偶然。
285. 功能内聚:模块内所有元素共同完成一个单一功能,内聚最高。
286. 偶然内聚:模块内元素之间没有实质联系,内聚最低。
287. 逻辑内聚:模块内执行逻辑上相似的功能,由参数决定执行哪一个。
288. 时间内聚:模块内任务必须在同一时间段内执行。
289. 过程内聚:模块内任务必须按特定次序执行。
290. 通信内聚:模块内所有元素操作同一数据结构或使用同一输入/输出。
291. 顺序内聚:模块内一个元素的输出是另一个元素的输入。
292. 耦合从低到高:非直接 > 数据 > 标记 > 控制 > 外部 > 公共 > 内容。
293. 内容耦合最高:一个模块直接访问另一个模块的内部数据或代码。
294. 数据耦合:模块间只传递数据参数,耦合最低(除非直接耦合外)。
295. 设计原则:高内聚、低耦合。
296. 信息隐蔽:模块内部实现细节对使用者隐藏,提高可修改性。
297. McCabe环路复杂度:边 − 节点 + 2,或判定节点数 + 1。
298. 黑盒测试:等价类划分、边界值分析,不关心内部逻辑。
299. 白盒测试:逻辑覆盖(语句、判定、条件、路径)。路径覆盖覆盖程度最高。
300. 语句覆盖:每条语句至少执行一次,最弱的逻辑覆盖。
301. 判定覆盖:每个判断的真假分支至少各执行一次。
302. 条件覆盖:每个判断中每个条件的真假至少各出现一次。
303. 路径覆盖:所有可能路径至少执行一次,覆盖最强。
304. 测试顺序:单元测试 → 集成测试 → 系统测试 → 验收测试。
305. 单元测试:针对单个模块,常用白盒测试。
306. 集成测试策略:一次性集成、自顶向下、自底向上、三明治集成。
307. 自顶向下集成:需要桩模块(stub)模拟下层模块。
308. 自底向上集成:需要驱动模块(driver)模拟上层模块。
309. 系统测试:整个系统与环境集成后测试,黑盒为主。
310. 验收测试:用户参与,确认系统满足需求。
311. 回归测试:修改代码后重新测试,确保未引入新错误。
312. 软件维护类型:纠错性(修bug)、适应性(环境变化)、完善性(加功能/改善性能)、预防性(提高可维护性)。
313. 完善性维护:占比通常最大,为了增加功能或改善性能。
314. 纠错性维护:修复运行中发现的错误。
315. 适应性维护:适应硬件、软件环境的变化。
316. 预防性维护:为了提高未来可维护性而修改软件。
317. 软件危机表现:费用和进度失控、质量低下、难以维护、生产率低下。
318. SRS(需求规格说明书)特性:完整性、一致性、可验证性、可修改性、可追踪性。
319. 需求分析阶段的任务:确定系统“做什么”,输出需求规格说明书。
320. 概要设计 vs 详细设计:概要设计定体系结构和模块划分;详细设计定模块内部算法和数据结构。
321. 结构化分析方法:数据流图(DFD)、数据字典、加工说明。核心是自顶向下逐层分解。
322. 结构化设计:模块化、信息隐蔽、模块独立性。信息隐蔽提高可修改性。
323. 模块独立性由内聚和耦合共同决定。
324. 软件质量特性(ISO 9126) :功能性、可靠性、易用性、效率、可维护性、可移植性。
325. 可移植性设计:核心是屏蔽平台差异;“使用特定环境专用功能”是破坏可移植性的做法。
326. 风险管理:风险识别 → 风险预测 → 风险评估 → 风险控制。
327. 风险暴露 = 风险概率 × 风险影响。
328. PERT图:用于进度管理,边表示任务,节点表示事件,可计算关键路径。
329. Gantt图:横道图,直观展示任务时间,但不能显示任务间依赖关系。
330. 关键路径:PERT图中最长路径,决定项目最短工期。
331. 软件文档:开发文档、管理文档、用户文档。文档是软件产品的一部分。
332. 数据流图(DFD) :描述数据流动和加工,四种元素——外部实体、加工、数据存储、数据流。
333. 数据字典:对DFD中每个元素的定义,包括数据项、数据结构、数据流、数据存储、加工。
334. 结构化语言:用于描述加工逻辑,包括顺序、选择、循环。
335. 判定表/判定树:描述复杂条件组合下的加工逻辑。
336. 系统总体结构设计:将系统划分为模块,确定模块间调用关系。
337. 模块扇入扇出:扇入指调用该模块的上级模块数;扇出指该模块调用的下级模块数。
338. 深度与宽度:深度指模块调用层次;宽度指同一层模块数。
339. 软件过程:软件生命周期中的一系列活动,包括开发过程、管理过程、支持过程。
340. 软件生命周期:可行性分析、需求分析、设计、编码、测试、维护。
341. 可行性分析:技术可行性、经济可行性、操作可行性、法律可行性。
342. 成本估算:COCOMO模型、Putnam模型、专家判断法。
343. COCOMO模型:基于代码行数估算工作量,分为基本、中间、详细三级。
344. 软件配置管理:版本控制、变更管理、配置审计。
345. 基线:经过评审和批准的配置项,变更需走变更控制流程。
346. 版本控制工具:Git、SVN,管理代码版本和协作开发。
347. 软件复用:代码复用、设计复用、分析复用、测试复用。
348. 逆向工程:从代码恢复设计信息,用于维护和改造遗留系统。
349. 再工程:逆向工程 + 重构 + 正向工程,改造旧系统。
350. 软件质量保证(SQA) :通过过程审计和产品评审确保质量。
六、面向对象与UML(351—410)
351. 类图关系强弱:依赖 < 关联 < 聚合 < 组合 < 泛化(继承)< 实现。
352. 聚合 vs 组合:聚合空心菱形,整体消失部分还在;组合实心菱形,整体消失部分随之销毁。
353. 菱形位置:聚合/组合的菱形永远在整体一端。
354. 泛化:实线 + 空心三角,三角指向父类。
355. 实现:虚线 + 空心三角,三角指向接口。
356. 依赖:虚线 + 开口箭头,指向被依赖类。方法参数/局部变量中使用,临时关系。
357. 关联:实线,成员变量持有,长期结构关系。
358. 用例关系include:虚线箭头指向被包含用例,表示一定会执行的公共行为。
359. 用例关系extend:虚线箭头指向基础用例,表示有条件才执行的扩展行为。
360. include与extend箭头口诀:“包箭被,扩箭基” ——include指被包含,extend指基础。
361. 参与者:火柴人,画在系统边界之外。“时间”不能作为参与者。
362. 用例名:动词 + 名词,对参与者有可观测的完整结果;不拆内部步骤(“验证密码”不是用例)。
363. UML静态图:类图、对象图、用例图、构件图、部署图。
364. UML动态图:序列图、通信图、状态图、活动图。
365. 通信图:强调对象之间的链和消息,与序列图语义相近。
366. 对象图:某一时刻一组对象及关系的快照。
367. 状态图:描述一个对象在生命周期内的状态变迁。
368. 活动图:描述流程和并行行为,有分叉/汇合。
369. 部署图:实施阶段使用,描述物理节点和构件分布。
370. 序列图:强调消息传递的时间顺序。对象框、生命线(虚线)、激活期(长条)。
371. 序列图消息类型:同步消息(实心三角)、异步消息(空心三角)、返回消息(虚线开口箭头)。
372. 多重度:1恰好一个;0..1零或一个;0..*或*零个或多个;1..*至少一个。
373. 多重度判定:站在每一端看对方,两端都要标。
374. 开闭原则:对扩展开放,对修改关闭。
375. 单一职责原则:一个类只做一种类型的功能,修改原因只有一个。
376. 里氏替换原则:子类可以替换父类而不改变程序正确性。
377. 依赖倒置原则:依赖抽象,不依赖具体实现。
378. 接口隔离原则:使用多个专门接口,而不是一个庞大接口。
379. 迪米特法则:一个对象应尽可能少地了解其他对象(最少知识原则)。
380. 封装:隐藏内部实现细节,只暴露必要接口。
381. 继承:子类获得父类的属性和方法,实现代码复用。
382. 多态:同一接口,不同实现。运行时根据实际对象类型决定调用哪个方法(动态绑定)。
383. 抽象类:不能实例化,可包含抽象方法和具体方法。
384. 接口:只包含抽象方法(Java 8后可有默认方法),类可以实现多个接口。
385. 面向对象分析(OOA) :识别对象、类、关系,建立分析模型。
386. 面向对象设计(OOD) :设计类结构、接口、交互,建立设计模型。
387. 面向对象测试:单元测试类,集成测试类间交互,系统测试整体行为。
388. 继承的透明性:子类应能完全替代父类(里氏替换)。
389. 组合优于继承:组合更灵活,避免继承层次过深。
390. UML中的接口:用类框加«interface»构造型表示,或圆形表示。
391. 构件图:描述软件构件及其依赖关系。
392. 包图:将模型元素分组,管理复杂度。
393. UML用例图的作用:描述系统功能需求,参与者与用例的关系。
394. UML类图的作用:描述系统静态结构,类的属性和方法及关系。
395. UML序列图的作用:描述对象间按时间顺序的消息交互。
396. UML状态图的作用:描述对象状态变迁及触发事件。
397. UML活动图的作用:描述业务流程或算法流程,支持并行。
398. UML部署图的作用:描述系统物理部署,节点和构件的分布。
399. 用例之间的泛化:子用例继承父用例的行为,空心三角指向父用例。
400. 参与者之间的泛化:子参与者继承父参与者的用例。
401. 包含关系是必须的,扩展关系是可选的。
402. 类图中的可见性:+公开,-私有,#保护,~包内可见。
403. 抽象操作:斜体表示,子类必须实现。
404. 静态成员:下划线表示,属于类而非实例。
405. 关联类:关联本身也可以有属性,用类表示并连接到关联线上。
406. 限定关联:用限定符缩小多重度范围。
407. 依赖的构造型:«use»、«call»、«create»等。
408. UML中的注释:折角矩形,用虚线连接到被注释元素。
409. UML图的选择:静态结构选类图,交互选序列图/通信图,流程选活动图,状态变迁选状态图。
410. 面向对象方法的优点:可复用、可扩展、可维护,映射问题域自然。
七、数据库系统(411—465)
411. 三级模式:外模式(用户视图)、模式(逻辑结构)、内模式(物理存储)。
412. 两级映像:外模式/模式映像保证逻辑独立性;模式/内模式映像保证物理独立性。
413. E-R转关系模式 1:N:1端主键放入N端作外键。方向不能反。
414. E-R转关系模式 M:N:必须单独建表,主键 = 双方主键组合,双方主键各自也是外键。
415. E-R转关系模式 1:1:任一方主键放入另一方作外键(或两表合并)。
416. 范式 1NF:属性不可再分。
417. 范式 2NF:消除非主属性对码的部分函数依赖。
418. 范式 3NF:消除非主属性对码的传递函数依赖。
419. BCNF:消除主属性对码的部分和传递依赖,比3NF更严格。
420. 函数依赖:X→Y表示X决定Y。候选键是能决定所有属性的最小属性集。
421. 主属性:包含在任一候选键中的属性;非主属性:不包含在任何候选键中的属性。
422. 部分函数依赖:非主属性只依赖联合主键的一部分。
423. 传递函数依赖:A→B,B→C,且B不是候选键,则A→C是传递依赖。
424. 事务ACID:原子性、一致性、隔离性、持久性。
425. 脏读:读到其他事务未提交的数据。避免脏读的隔离级别至少是读已提交(Read Committed) 。
426. 不可重复读:同一事务内两次读同一数据结果不同(其他事务修改并提交了)。
427. 幻读:同一事务内两次查询返回不同行数(其他事务插入/删除了行)。
428. 隔离级别从低到高:读未提交 → 读已提交 → 可重复读 → 串行化。
429. 封锁协议:一级封锁防丢失修改;二级防脏读;三级防不可重复读。
430. 共享锁(S锁) :读锁,多个事务可同时持有。
431. 排他锁(X锁) :写锁,独占,与任何锁互斥。
432. 两段锁协议:加锁阶段和解锁阶段,保证可串行化。
433. SQL的WHERE与HAVING:WHERE过滤行(分组前);HAVING过滤分组后的组。
434. SQL聚合函数:COUNT、SUM、AVG、MAX、MIN。
435. 多表查询:必须写JOIN和连接条件,漏掉连接条件会变成笛卡尔积。
436. 内连接:只返回匹配的行;外连接:返回不匹配的行(左外、右外、全外)。
437. 子查询:嵌套在另一个查询中的查询,可用于IN、EXISTS、比较运算。
438. GROUP BY:按列分组,常与聚合函数配合使用。
439. ORDER BY:排序,ASC升序(默认),DESC降序。
440. 数据库设计六步骤:需求分析 → 概念设计 → 逻辑设计 → 物理设计 → 实施 → 维护和优化。
441. 概念设计:输出E-R图,与具体DBMS无关。
442. 逻辑设计:将E-R图转换为关系模式,进行规范化。
443. 物理设计:确定存储结构、索引、分区等。
444. 关系代数运算:并、差、笛卡尔积、选择、投影、连接。
445. 选择(σ) :按条件筛选行;投影(π) :选择列。
446. 自然连接:自动按同名属性等值连接,并去掉重复列。
447. 笛卡尔积:两个关系的所有元组组合,通常需要配合选择条件才有意义。
448. 主键:唯一标识元组,不能为空,不能重复。
449. 外键:引用另一个关系的主键,可以为空,但非空时必须存在。
450. 实体完整性:主键不能为空。
451. 参照完整性:外键必须引用存在的主键值,或为空。
452. 用户定义完整性:业务规则约束(如年龄范围)。
453. 视图:虚表,不存储数据,简化查询和权限控制。
454. 索引:加速查询,但增加插入/删除/更新的开销。
455. 聚集索引:数据物理顺序与索引顺序一致;非聚集索引:不一致。
456. 分布式数据库:数据分布在多个节点,透明性包括位置透明、分片透明、复制透明。
457. 数据仓库:面向主题、集成、相对稳定、反映历史变化,用于分析决策。
458. OLTP vs OLAP:OLTP面向事务处理,OLAP面向分析。
459. 数据挖掘:从大量数据中发现模式,分类、聚类、关联规则。
460. NoSQL:非关系型数据库,适合大数据和高并发,如键值、文档、列族、图数据库。
461. CAP定理:一致性、可用性、分区容错性三者不可兼得。
462. 数据库备份:完全备份、增量备份、差异备份。
463. 数据库恢复:利用日志 undo/redo,将数据库恢复到一致状态。
464. 检查点:减少恢复时需要重做的日志量。
465. 数据库安全:认证、授权(GRANT/REVOKE)、加密、审计。
八、计算机网络与信息安全(466—510)
466. 网络设备层次:Hub物理层,交换机数据链路层,路由器网络层,网关应用层及以上。VLAN工作在数据链路层。
467. 集线器(Hub) :物理层设备,共享带宽,冲突域扩大。
468. 交换机:数据链路层设备,基于MAC地址转发,隔离冲突域。
469. 路由器:网络层设备,基于IP地址转发,隔离广播域。
470. 网关:应用层及以上,协议转换。
471. OSI七层:物理层 → 数据链路层 → 网络层 → 传输层 → 会话层 → 表示层 → 应用层。
472. TCP/IP四层:网络接口层 → 网际层 → 传输层 → 应用层。
473. TCP特点:可靠、面向连接、面向字节流。三次握手建立连接,四次挥手释放连接。
474. UDP特点:快、无连接、面向报文,适合视频/语音/DNS。
475. 三次握手:SYN → SYN+ACK → ACK,防止已失效的连接请求突然到达。
476. 四次挥手:FIN → ACK → FIN → ACK,因为TCP是全双工的。
477. 常见端口:80-HTTP,443-HTTPS,21-FTP,53-DNS,25-SMTP,110-POP3。
478. SMTP:发送邮件;POP3/IMAP:接收邮件。
479. HTTP:超文本传输协议,无状态,默认端口80。
480. HTTPS:HTTP over SSL/TLS,默认端口443,加密传输。
481. DNS:域名解析,通常使用UDP 53端口。
482. FTP:文件传输,使用TCP,控制连接21,数据连接20(主动模式)。
483. IP地址分类:A类1—126,B类128—191,C类192—223,D类组播,E类保留。
484. 私有地址:10.0.0.0/8、172.16.0.0/12、192.168.0.0/16。
485. 子网掩码核心公式:可用主机数 = 2^h − 2(h主机位);前缀 = 32 − h。
486. 子网掩码对照表:/25→126,/26→62,/27→30,/28→14,/29→6,/30→2。
487. 看到“30台”直接反应 /27,255.255.255.224;看到“62台”直接反应 /26,255.255.255.192。
488. CIDR:无分类域间路由,如192.168.1.0/26,前缀表示网络位数。
489. 网络地址:主机位全0;广播地址:主机位全1。
490. 加密与签名:公钥加密,私钥签名。加密用对方公钥,签名用自己私钥。
491. 对称加密:加密解密同一密钥,速度快,如DES、3DES、AES。
492. 非对称加密:公钥和私钥配对,如RSA、ECC。
493. 数字签名的作用:保证不可否认性和完整性,不保证机密性。
494. 数字证书:由CA签发,绑定公钥与身份。
495. 哈希算法:SHA-256属于哈希;RSA、ECC属于非对称加密。
496. 哈希函数特性:任意长度输入 → 固定长度输出,不可逆。
497. 防火墙类型:包过滤防火墙(速度快、粒度粗);应用代理网关防火墙(检查应用层、速度慢);状态检测防火墙(兼顾安全与速度)。
498. 网络攻击类型:DDoS(流量压垮)、ARP欺骗(伪造MAC-IP)、SQL注入(拼恶意SQL)、XSS(塞恶意脚本)、重放攻击(重发截获的认证报文)。
499. 病毒类型:Worm蠕虫(自我复制传播)、Trojan木马(伪装)、Backdoor后门、Macro宏病毒(感染文档)。
500. 入侵检测:专家系统、模型检测、简单匹配,分为基于主机和基于网络。
501. VPN:虚拟专用网,通过加密隧道在公共网络上传输私有数据。
502. SSL/TLS:传输层安全,为应用层提供加密和认证。
503. IPSec:网络层安全,常用于VPN。
504. 访问控制:自主访问控制(DAC)、强制访问控制(MAC)、基于角色的访问控制(RBAC)。
505. RBAC:将权限赋予角色,用户通过角色获得权限,简化管理。
506. 安全威胁:中断(破坏可用性)、截获(破坏机密性)、篡改(破坏完整性)、伪造(破坏真实性)。
507. 计算机犯罪:非法侵入、破坏数据、传播病毒、网络诈骗。
508. 网络安全等级保护:分等级保护、分等级监管。
509. 无线网络安全:WEP(已不安全)、WPA/WPA2(较安全)。
510. 电子邮件安全:PGP、S/MIME,用于加密和签名邮件。
使用建议:510条中,真题重复密度最高的是 1—10(CPU与码制)、13—18(校验与流水线)、66—78(进程与死锁)、131—162(数据结构与排序)、266—316(软件工程)、351—360(UML关系)、411—432(数据库范式与事务)、466—497(网络与加密) 。优先把这些背到条件反射,其余条目在刷真题时遇到再回头巩固。