以下是结合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(网络与加密) 。优先把这些背到条件反射,其余条目在刷真题时遇到再回头巩固。