嵌入式软件开发必知:100个核心面试题精解,适用入门嵌入式软件初级工程师,筑牢基础,技术积累,校招面试。

你是一位具有20年工作经验的嵌入式硬件工程师和嵌入式软件工程师,同时也是计算机科学家,请你详细回答以下面试问题,越详细越好,有流程图也最好,最好让初学者也懂,牢记我的要求:我有100个问题想问你:
1.计算机中存储一个ASCI码字符需要占用多少个字节?
2.操作系统的四大基本功能包括哪些?
3.数据结构中,栈的存取原则是什么?
4.计算机网络OSI参考模型分为几层?
5.C语言中,基本数据类型有哪些?
6.数据库中,主键的作用是什么?
7.算法的时间复杂度通常用什么符号表示?
8.排序算法的平均时间复杂度为O(nlogn)的有哪些?
9.计算机组成原理中,CPU的主要组成部分包括运算器和什么?
10.网络协议TCP的中文全称是什么?
11.面向对象编程的三大特性包括哪些?
12.数据库SQL语言中,用于查询数据的命令是什么?
13.数据结构中,链表相比数组的主要优势是什么?
14.操作系统中,进程和线程的本质区别是什么?
15.Java 语言的特点包括哪些?
16.计算机网络中,IP地址分为几类?
17.算法的空间复杂度是指算法运行过程中所需的什么资源?
18.无序的数据结构有哪些?
19.数据库中,外键的作用是维护表之间的什么关系?
20.操作系统中,死锁产生的四个必要条件是什么?
21.C++语言中,虚函数的作用是什么?
22.计算机网络中,HTTP协议默认使用的端口号是多少?
23.数据结构中,二叉树的前序遍历顺序是什么?
24.算法设计的五大基本方法包括哪些?
25.数据库中,事务的ACID 特性分别指什么?
26.操作系统中,分页存储管理和分段存储管理的主要区别是什么?
27.Python语言中,列表和元组的丰要区别是什么?
28.计算机网络中,子网掩码的作用是什么?
29.数据结构中,队列的存取原则是什么?
30.稳定排序算法有哪些?
31.数据库中,索引的主要作用是什么?
32.操作系统中,进程调度的主要目的是什么?
33.计算机组成原理中,内存按读写方式可分为RAM和什么?
34.网络协议UDP的中文全称是什么?
35.面向对象编程中,封装的目的是什么?
36.数据结构中,哈希表的查找时间复杂度理想情况下是多少?
37.数据库SQL语言中,用于插入数据的命令是什么?
38.操作系统中,虚拟内存的核心思想是什么?
39.C语言中,指针变量存储的是什么?
40.计算机网络中,DNS的主要作用是什么?
41.数据结构中,树的深度是指什么?
42.贪心算法的典型应用有哪些?
43.数据库中,视图的本质是什么?
44.操作系统中,文件系统的主要功能是什么?
45.Java语言中,接口和抽象类的主要区别是什么?
46.计算机网络中,TCP和UDP的主要区别是什么?
47.数据结构中,栈的应用场景有哪些?
48.算法的正确性是指算法能够满足什么要求?
49.数据库中,GROUP BY子句的作用是什么?
50.操作系统中,进程的三种基本状态是什么?
51.C++语言中,类的构造函数的作用是什么?
52.计算机组成原理中,总线按功能可分为数据总线、地址总线和什么?
53.计算机网络中,局域网的英文缩写是什么?
54.数据结构中,二又搜索树的特点是什么?
55.排序算法的最坏时间复杂度为O(n2)的有哪些?
56.数据库中,JOIN子句的作用是什么?
57.操作系统中,分时系统的主要特点是什么?
58.Python 语言中,字典的键必须满足什么条件?
59.计算机网络中,HTTPS协议默认使用的端口号是多少?
60.数据结构中,图的邻接矩阵存储方式适合哪种类型的图?
61.算法的健壮性是指算法能够处理什么情况?
62.数据库中,DELETE和 TRUNCATE命令的主要区别是什么?
63.操作系统中,批处理系统的主要特点是什么?
64.C语言中,数组名代表的是什么?
65.计算机组成原理中,Cache的作用是什么?
66.计算机网络中,广域网的英文缩写是什么?
67.面向对象编程中,继承的目的是什么?
68.数据结构中,图的深度优先遍历类似于树的哪种遍历?
69.数据库中,事务的隔离级别有哪几种?
70.操作系统中,进程同步的主要目的是什么?
71.Java 语言中,垃圾回收的作用是什么?
72.计算机网络中,ARP协议的主要作用是什么?
73.数据结构中,队列的应用场景有哪些?
74.动态规划算法的典型应用有哪些?
75.数据库中,CREATE TABLE命令的作用是什么?
76.操作系统中,设备管理的主要功能是什么?
77.C++语言中,析构函数的作用是什么?
78.计算机组成原理中,指令系统的核心是什么?
79.计算机网络中,ICMP协议的主要作用是什么?
80.数据结构中,哈希冲突的解决方法有哪些?
81.算法的效率主要取决于时间复杂度和什么?
82,数据库中,ALTER TABLE命令的作用是什么?
83.操作系统中,线程调度的调度单位是什么?
84.Python语言中,装饰器的主要作用是什么?
85.计算机网络中,FTP协议的主要作用是什么?
86.数据结构中,二叉树的中序遍历顺序是什么?
87.基于比较的排序算法有哪些?
88.数据库中,DISTINCT关键字的作用是什么?
89.操作系统中,死锁的预防措施有哪些?
90.C语言中,函数指针的作用是什么?
91.计算机组成原理中,控制器的主要功能是什么?
92.计算机网络中,SMTP协议的主要作用是什么?
93.数据结构中,图的广度优先遍历类似于树的哪种遍历?
94.算法的优化主要从哪些方面入手?
95.数据库中,UPDATE命令的作用是什么?
96.操作系统中,分页存储管理中页面大小的选择会影响什么?
97.Java 语言中,多线程的实现方式有哪几种?
98.计算机网络中,Telnet协议的主要作用是什么?
99.数据结构中,平衡二叉树的定义是什么?

1. 计算机中存储一个 ASCII 码字符需要占用多少个字节?

核心结论:标准 ASCII 码字符占用 1 个字节(8 位)。

  • 标准 ASCII 码的字符范围是 0-127(共 128 个字符),8 位二进制(00000000-01111111)足以存储。
  • 扩展 ASCII 码(128-255)同样占用 1 个字节,但不属于通用标准,不同系统支持不同。
  • 例子:字符 'A' 的 ASCII 码是 65,二进制为 01000001,刚好存满 1 个字节。

2. 操作系统的四大基本功能包括哪些?

核心结论:处理器管理、存储器管理、设备管理、文件管理。

  • 处理器管理:分配 CPU 资源,调度进程 / 线程执行(比如让多个软件轮流用 CPU)。
  • 存储器管理:管理内存,分配内存空间、回收空闲内存,避免冲突。
  • 设备管理:控制打印机、键盘等硬件,让软件能调用硬件功能。
  • 文件管理:管理硬盘上的文件 / 文件夹,负责创建、删除、读写、查找。

3. 数据结构中,栈的存取原则是什么?

核心结论:先进后出(LIFO,Last In First Out),也叫 “后进先出”。

  • 形象理解:像叠盘子,先放的盘子在最下面,只能先拿最上面(后放的)。
  • 关键操作:入栈(push,添加元素到栈顶)、出栈(pop,移除栈顶元素)。

4. 计算机网络 OSI 参考模型分为几层?

核心结论:7 层,从下到上依次是物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。

  • 通俗记忆:“物数网传会表应”(谐音:雾数网传绘表英)。
  • 各层核心作用(简化):
    • 物理层:负责物理设备连接(如网线、光纤),传递电信号 / 光信号。
    • 网络层:实现不同网络间的路由(如 IP 地址转发)。
    • 传输层:负责端到端通信(如 TCP/UDP)。
    • 应用层:直接对接软件应用(如 HTTP、QQ)。

5. C 语言中,基本数据类型有哪些?

核心结论:分为整型、字符型、实型(浮点型)三大类,具体包括charshortintlongfloatdouble

  • 整型:存储整数,short(短整型)、int(整型)、long(长整型),区分有符号(默认)和无符号(unsigned修饰)。
  • 字符型:char,存储单个字符(本质是 ASCII 码对应的整数)。
  • 实型:存储小数,float(单精度,4 字节)、double(双精度,8 字节,精度更高)。

6. 数据库中,主键的作用是什么?

核心结论:唯一标识表中的每一行数据,确保数据的唯一性和完整性。

  • 关键特性:
    1. 不可重复:表中没有两行数据的主键值相同(比如学生表的 “学号” 不能重复)。
    2. 非空:主键值不能为 NULL(必须有具体值,否则无法标识行)。
  • 例子:用户表用 “用户 ID” 作为主键,每个用户的 ID 唯一,通过 ID 能快速定位到具体用户。

7. 算法的时间复杂度通常用什么符号表示?

核心结论:大 O 符号(O-notation),比如 O (n)、O (nlogn)、O (n²)。

  • 作用:描述算法执行时间随输入数据规模增长的变化趋势(不关心具体执行时间,只关心 “增长速度”)。
  • 通俗理解:比如 “找数组中的元素”,最坏情况要遍历所有元素,时间复杂度是 O (n)(n 是数组长度),表示 “执行时间随数组长度线性增长”。

8. 排序算法的平均时间复杂度为 O (nlogn) 的有哪些?

核心结论:快速排序、归并排序、堆排序。

  • 各算法特点(简化):
    • 快速排序:实际应用中最快,不稳定,空间复杂度 O (logn)。
    • 归并排序:稳定,空间复杂度 O (n)(需要额外数组)。
    • 堆排序:不稳定,空间复杂度 O (1)(原地排序)。
  • 备注:“稳定” 指排序后,值相同的元素保持原先后顺序。

9. 计算机组成原理中,CPU 的主要组成部分包括运算器和什么?

核心结论:控制器,两者合称 “中央处理器(CPU)的核心部件”。

  • 运算器:负责算术运算(加减乘除)和逻辑运算(与、或、非)。
  • 控制器:指挥 CPU 各部件协调工作,读取指令、解析指令、执行指令。
  • 通俗理解:运算器是 “计算器”,控制器是 “指挥官”。

10. 网络协议 TCP 的中文全称是什么?

核心结论:传输控制协议(Transmission Control Protocol)。

  • 核心特点:面向连接、可靠传输、有序传输(比如发送数据前要 “三次握手” 建立连接,接收方要确认收到数据)。
  • 应用场景:网页浏览(HTTP)、文件传输(FTP)等需要保证数据不丢失的场景。

11. 面向对象编程的三大特性包括哪些?

核心结论:封装、继承、多态。

  • 封装:把数据和操作数据的方法打包成类,隐藏内部实现细节,只暴露接口(比如手机,用户不用知道内部电路,只需要按按钮)。
  • 继承:子类可以继承父类的属性和方法,减少重复代码(比如 “学生类” 继承 “人类” 的 “姓名、年龄” 属性)。
  • 多态:同一方法在不同子类中有不同实现,调用时自动匹配(比如 “动物类” 的 “叫” 方法,“猫子类” 实现为 “喵喵叫”,“狗子类” 实现为 “汪汪叫”)。

12. 数据库 SQL 语言中,用于查询数据的命令是什么?

核心结论:SELECT 命令(最常用的 SQL 命令)。

  • 基本语法:SELECT 列名 FROM 表名 WHERE 条件
  • 例子:查询 “学生表” 中所有 18 岁的学生姓名,命令是SELECT 姓名 FROM 学生表 WHERE 年龄=18
  • 扩展:可搭配GROUP BY(分组)、ORDER BY(排序)、JOIN(关联表)等子句。

13. 数据结构中,链表相比数组的主要优势是什么?

核心结论:插入、删除操作效率高(无需移动大量元素),且可以动态扩容(无需预先指定长度)。

  • 对比数组:
    • 数组:插入 / 删除元素时,需要移动后续元素(比如数组中间插一个元素,后面的都要后移),时间复杂度 O (n);长度固定,扩容麻烦。
    • 链表:插入 / 删除只需修改节点的指针(比如链表中间插节点,只需改前后节点的指向),时间复杂度 O (1);长度可动态增加,无需预先分配空间。
  • 缺点:链表查询元素效率低(必须从表头遍历),时间复杂度 O (n)。

14. 操作系统中,进程和线程的本质区别是什么?

核心结论:进程是 “资源分配的基本单位”,线程是 “CPU 调度的基本单位”(线程共享进程的资源)。

  • 关键区别:
    1. 资源占用:进程有独立的内存空间、文件句柄等资源;线程无独立资源,共享所属进程的资源。
    2. 切换开销:进程切换需要保存 / 恢复整个进程的资源状态,开销大;线程切换只需保存线程的执行状态,开销小。
    3. 关联性:一个进程可以包含多个线程,线程必须依赖进程存在。
  • 例子:打开一个浏览器(进程),里面的多个标签页(线程),共享浏览器的内存和网络资源。

15. Java 语言的特点包括哪些?

核心结论:跨平台、面向对象、健壮性、安全性、解释型(搭配 JVM)。

  • 关键特点详解:
    • 跨平台:通过 Java 虚拟机(JVM)实现,“一次编写,到处运行”(比如 Windows 和 Linux 上都能运行同一 Java 程序)。
    • 面向对象:完全支持封装、继承、多态,没有全局函数和全局变量。
    • 健壮性:内置垃圾回收(自动释放无用内存),避免内存泄漏;强类型检查,减少运行时错误。
    • 安全性:禁止直接操作内存(无指针),防止恶意代码破坏系统。

16. 计算机网络中,IP 地址分为几类?

核心结论:传统 IPv4 地址分为 5 类(A、B、C、D、E 类),常用的是 A、B、C 三类。

  • 分类依据:IP 地址前几位(网络位)区分类别:
    • A 类:前 1 位为 0,范围 1.0.0.0-126.255.255.255(用于大型网络)。
    • B 类:前 2 位为 10,范围 128.0.0.0-191.255.255.255(用于中型网络)。
    • C 类:前 3 位为 110,范围 192.0.0.0-223.255.255.255(用于小型网络)。
    • D 类:前 4 位为 1110,用于组播;E 类:前 4 位为 1111,用于科研(不公开使用)。

17. 算法的空间复杂度是指算法运行过程中所需的什么资源?

核心结论:所需的存储空间(包括程序代码占用的固定空间和运行时动态分配的临时空间)。

  • 计算范围:
    1. 输入数据占用的空间(通常不算,因为是 “输入” 本身需要的)。
    2. 程序代码占用的固定空间(比如函数、变量定义)。
    3. 运行时临时分配的空间(比如递归调用的栈空间、排序时的临时数组)。
  • 例子:归并排序需要额外的数组存储合并后的元素,空间复杂度是 O (n);快速排序的递归调用栈空间,空间复杂度是 O (logn)。

18. 无序的数据结构有哪些?

核心结论:哈希表(散列表)、集合(Set)、无向图(无特定顺序存储顶点)。

  • 各结构特点:
    • 哈希表:存储键值对,通过哈希函数定位元素,元素没有固定顺序(比如 Java 的 HashMap、Python 的字典)。
    • 集合(Set):存储不重复的元素,元素无序(比如 Python 的 set)。
    • 无向图:顶点之间的边没有方向,顶点存储无固定顺序(比如社交网络中的 “好友关系” 图)。
  • 对比有序结构:数组、链表、栈、队列、二叉搜索树(有序)。

19. 数据库中,外键的作用是维护表之间的什么关系?

核心结论:维护表之间的 “参照完整性”(通常是一对多关系)。

  • 通俗理解:外键是一张表中引用另一张表主键的字段,确保两张表的数据一致。
  • 例子:“订单表” 的 “用户 ID” 是外键,引用 “用户表” 的 “用户 ID”(主键)。
    • 禁止插入 “用户表中不存在的用户 ID” 到订单表(避免订单属于不存在的用户)。
    • 删除用户表中的某条记录时,需先删除订单表中对应的订单(或设置 “级联删除”),避免数据孤立。

20. 操作系统中,死锁产生的四个必要条件是什么?

核心结论:资源互斥、持有并等待、不可剥夺、循环等待(四个条件同时满足才会产生死锁)。

  • 条件详解(通俗版):
    1. 资源互斥:某个资源只能被一个进程占用(比如打印机同一时间只能给一个程序用)。
    2. 持有并等待:进程已经占用了一个资源,又去申请另一个资源,同时不释放已占用的。
    3. 不可剥夺:进程占用的资源不能被强制抢走(比如进程没主动释放打印机,其他进程不能抢)。
    4. 循环等待:多个进程形成循环等待资源的链条(比如 A 等 B 的资源,B 等 C 的资源,C 等 A 的资源)。

21. C++ 语言中,虚函数的作用是什么?

核心结论:实现多态(让子类重写父类的方法后,通过父类指针 / 引用调用时,自动执行子类的实现)。

  • 关键要点:
    • 父类中用virtual关键字声明虚函数。
    • 子类用override关键字重写该函数(可选,但推荐)。
    • 无虚函数时,父类指针调用的是父类的方法(静态绑定);有虚函数时,调用的是子类的方法(动态绑定)。
  • 例子:

    cpp

    运行

    class 动物 { public: virtual void 叫() { cout << "动物叫" << endl; } };
    class 猫 : public 动物 { public: void 叫() override { cout << "喵喵叫" << endl; } };
    动物* a = new 猫();
    a->叫(); // 输出“喵喵叫”(多态效果)
    

22. 计算机网络中,HTTP 协议默认使用的端口号是多少?

核心结论:80 端口(TCP 端口)。

  • 补充说明:
    • HTTP 是超文本传输协议,用于网页浏览,默认通过 80 端口建立连接。
    • 若端口被占用,可自定义其他端口(比如 8080),但访问时需指定端口(如http://localhost:8080)。
    • 对应的 HTTPS 协议(加密版 HTTP)默认端口是 443。

23. 数据结构中,二叉树的前序遍历顺序是什么?

核心结论:根节点 → 左子树 → 右子树(简称 “根左右”)。

  • 遍历流程(以简单二叉树为例):

    plaintext

          1(根)
         / \
        2   3
       / \
      4   5
    
    前序遍历顺序:1 → 2 → 4 → 5 → 3。

24. 算法设计的五大基本方法包括哪些?

核心结论:枚举法、递推法、递归法、分治法、动态规划法。

  • 各方法通俗解释:
    • 枚举法:逐个尝试所有可能的解(比如密码破解,尝试 0000-9999 所有组合)。
    • 递推法:从已知条件出发,逐步推出结果(比如斐波那契数列,f (n)=f (n-1)+f (n-2))。
    • 递归法:函数调用自身,把大问题拆成小问题(比如求 n!,n! = n*(n-1)!)。
    • 分治法:把大问题拆成多个独立的小问题,解决后合并结果(比如归并排序、快速排序)。
    • 动态规划法:把大问题拆成重叠的小问题,存储小问题的解(避免重复计算,比如背包问题)。

25. 数据库中,事务的 ACID 特性分别指什么?

核心结论:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。

  • 特性详解(通俗版):
    • 原子性:事务是 “最小单位”,要么全部执行成功,要么全部失败回滚(比如转账,A 扣钱和 B 加钱必须同时成功或同时失败)。
    • 一致性:事务执行前后,数据库的完整性约束不变(比如转账后,A 和 B 的总钱数不变)。
    • 隔离性:多个事务同时执行时,彼此不干扰(比如 A 转账给 B 的同时,C 查询 A 的余额,不会看到 “扣钱但没到账” 的中间状态)。
    • 持久性:事务执行成功后,数据修改永久保存(即使数据库崩溃,重启后数据也在)。

26. 操作系统中,分页存储管理和分段存储管理的主要区别是什么?

核心结论:分页是 “按固定大小划分内存”(面向物理内存),分段是 “按逻辑功能划分内存”(面向用户程序)。

  • 关键区别对比:
    对比项分页存储管理分段存储管理
    划分依据物理内存固定大小(如 4KB / 页)程序逻辑功能(如代码段、数据段)
    块大小所有页大小相同各段大小不同
    目的提高内存利用率(减少碎片)方便程序编写、共享和保护
    地址结构页号 + 页内偏移段号 + 段内偏移

27. Python 语言中,列表和元组的主要区别是什么?

核心结论:列表(list)是可变的(可增删改元素),元组(tuple)是不可变的(创建后不能修改元素)。

  • 关键区别详解:
    • 列表:用[]表示,支持append()(添加)、pop()(删除)、insert()(插入)等修改操作。
    • 元组:用()表示,无修改操作,若要 “修改” 需重新创建新元组。
    • 其他区别:元组创建速度比列表快,占用内存更少;元组可作为字典的键(列表不行,因为可变)。
  • 例子:

    python

    运行

    lst = [1,2,3]; lst.append(4) # 列表可修改,结果[1,2,3,4]
    tup = (1,2,3); tup.append(4) # 报错,元组不可修改
    

28. 计算机网络中,子网掩码的作用是什么?

核心结论:区分 IP 地址中的 “网络位” 和 “主机位”,判断两个 IP 是否在同一子网。

  • 通俗理解:
    • IP 地址由 “网络位(表示所在子网)” 和 “主机位(表示子网内的设备)” 组成。
    • 子网掩码用 “1” 表示网络位,“0” 表示主机位(比如 255.255.255.0,前 24 位是网络位,后 8 位是主机位)。
  • 用法:将 IP 地址和子网掩码做 “与运算”,结果相同则在同一子网。
  • 例子:IP1=192.168.1.10,IP2=192.168.1.20,子网掩码 = 255.255.255.0,与运算后结果都是 192.168.1.0,说明在同一子网。

29. 数据结构中,队列的存取原则是什么?

核心结论:先进先出(FIFO,First In First Out)。

  • 形象理解:像排队买票,先排队的人先买票离开。
  • 关键操作:入队(enqueue,添加元素到队尾)、出队(dequeue,移除队首元素)。

30. 稳定排序算法有哪些?

核心结论:冒泡排序、插入排序、归并排序、基数排序。

  • 稳定排序定义:排序后,值相同的元素保持原有的相对顺序。
  • 例子:数组 [2, 1, 2],稳定排序后是 [1, 2, 2](两个 2 的顺序和原来一致);不稳定排序可能变成 [1, 2, 2](顺序可能颠倒)。
  • 对比不稳定排序:快速排序、堆排序、选择排序。

31. 数据库中,索引的主要作用是什么?

核心结论:加快查询速度(减少数据扫描范围),类似书籍的目录。

  • 关键要点:
    • 索引基于特定列创建(比如用户表的 “手机号” 列),存储列值和对应的行地址。
    • 查询时,数据库通过索引快速定位到目标行,无需遍历整个表(比如查手机号 138xxxx8888 的用户,直接通过索引找到行)。
    • 缺点:创建和维护索引会占用额外空间;插入、更新、删除数据时,需要同步更新索引(降低写操作效率)。

32. 操作系统中,进程调度的主要目的是什么?

核心结论:合理分配 CPU 资源,提高 CPU 利用率,让多个进程公平、高效地执行。

  • 调度目标:
    1. 提高 CPU 利用率:不让 CPU 空闲(比如一个进程等待 IO 时,调度另一个进程使用 CPU)。
    2. 公平性:多个进程轮流使用 CPU,避免某个进程长期占用。
    3. 响应时间短:交互式进程(如键盘输入)能快速得到 CPU 响应。
  • 常用调度算法:先来先服务(FCFS)、短作业优先(SJF)、时间片轮转(RR)。

33. 计算机组成原理中,内存按读写方式可分为 RAM 和什么?

核心结论:ROM(只读存储器,Read-Only Memory)。

  • 两者对比:
    • RAM(随机存取存储器):可读可写,断电后数据丢失(比如电脑的内存、手机的运行内存)。
    • ROM(只读存储器):只能读取,不能随意写入,断电后数据不丢失(比如电脑的 BIOS、手机的固件)。
  • 扩展:ROM 的变种包括 PROM(可编程 ROM,一次性写入)、EPROM(可擦除可编程 ROM)、Flash ROM(闪存,如 U 盘、固态硬盘)。

34. 网络协议 UDP 的中文全称是什么?

核心结论:用户数据报协议(User Datagram Protocol)。

  • 核心特点:无连接、不可靠传输、无序传输(发送数据前不建立连接,接收方不确认)。
  • 优势:传输速度快(无连接开销),延迟低。
  • 应用场景:视频通话、语音聊天、游戏等对实时性要求高,允许少量数据丢失的场景。

35. 面向对象编程中,封装的目的是什么?

核心结论:隐藏对象的内部实现细节,保护数据安全,简化使用方式,提高代码可维护性。

  • 核心作用:
    1. 数据安全:防止外部代码随意修改对象的内部数据(比如 “银行账户” 类,禁止直接修改 “余额”,只能通过 “存款”“取款” 方法修改)。
    2. 简化使用:外部只需调用对象的公开接口(方法),不用关心内部逻辑(比如用手机,只需按 “打电话” 按钮,不用懂内部电路)。
    3. 可维护性:内部实现修改时,只要接口不变,外部代码无需修改。

36. 数据结构中,哈希表的查找时间复杂度理想情况下是多少?

核心结论:O (1)(常数时间,无论数据规模多大,查找一次就能找到)。

  • 理想情况:哈希函数能将不同的键映射到不同的哈希桶,查找时通过键计算哈希值,直接定位到对应的桶,无需遍历。
  • 非理想情况:出现哈希冲突(多个键映射到同一个桶),查找时间复杂度会上升(最坏情况 O (n)),需通过冲突解决方法优化。

37. 数据库 SQL 语言中,用于插入数据的命令是什么?

核心结论:INSERT 命令。

  • 基本语法:
    1. 插入单行数据:INSERT INTO 表名 (列1, 列2) VALUES (值1, 值2)
    2. 插入多行数据:INSERT INTO 表名 (列1, 列2) VALUES (值1, 值2), (值3, 值4)
    3. 插入查询结果:INSERT INTO 表名 (列1, 列2) SELECT 列1, 列2 FROM 另一表名
  • 例子:向 “学生表” 插入一条数据,INSERT INTO 学生表 (姓名, 年龄) VALUES ('张三', 18)

38. 操作系统中,虚拟内存的核心思想是什么?

核心结论:将磁盘空间作为内存的补充,让程序认为有足够的内存,实际只将当前需要的部分加载到物理内存。

  • 通俗理解:
    • 物理内存(比如 8GB)是 “高速缓存”,磁盘(比如硬盘)是 “大容量仓库”。
    • 程序运行时,只把当前要用的代码和数据(比如打开的文档、正在执行的函数)加载到物理内存,其他部分存在磁盘的虚拟内存区域。
    • 当需要用到未加载的部分时,操作系统将其从磁盘调入物理内存,同时将暂时不用的部分换出到磁盘。
  • 作用:让程序能突破物理内存限制(比如 8GB 内存能运行需要 16GB 内存的程序)。

39. C 语言中,指针变量存储的是什么?

核心结论:存储另一个变量的内存地址(指针是 “指向” 变量的 “路标”)。

  • 关键要点:
    • 变量的内存地址是一个十六进制数(比如 0x7ffeefbff5c4),指针变量存储这个地址。
    • 通过指针可以间接访问和修改目标变量的值(用*运算符解引用)。
  • 例子:

    c

    运行

    int a = 10; // 变量a的值是10,内存地址假设为0x1234
    int *p = &a; // 指针p存储a的地址(0x1234)
    *p = 20; // 通过指针修改a的值,a现在是20
    

40. 计算机网络中,DNS 的主要作用是什么?

核心结论:域名系统(Domain Name System),将域名(如www.baidu.com)解析为 IP 地址(如 180.101.49.11)。

  • 通俗理解:
    • IP 地址是网络设备的 “身份证”(比如 180.101.49.11),但难记;域名是 “别名”(比如www.baidu.com),容易记。
    • DNS 相当于 “电话簿”,输入域名后,DNS 服务器查询对应的 IP 地址,让电脑能找到目标服务器。
  • 流程:用户输入www.baidu.com → 电脑向 DNS 服务器查询 → DNS 返回 IP 地址 → 电脑通过 IP 地址连接百度服务器。

41. 数据结构中,树的深度是指什么?

核心结论:从根节点到最底层叶子节点的最长路径上的节点数(根节点深度为 1,往下每层加 1)。

  • 通俗理解:树的 “高度”(从根到最下面的叶子的层数)。
  • 例子:

    plaintext

          1(根,深度1)
         / \
        2   3(深度2)
       / \
      4   5(深度3)
    
    这棵树的深度是 3(根节点 1 → 2 → 4,共 3 个节点)。

42. 贪心算法的典型应用有哪些?

核心结论:活动选择问题、零钱兑换问题(找零最少硬币)、哈夫曼编码、最小生成树(Prim 算法、Kruskal 算法)。

  • 各应用通俗解释:
    • 活动选择:从多个有时间冲突的活动中,选择最多不冲突的活动(比如选最多能参加的会议)。
    • 零钱兑换:用最少的硬币凑成指定金额(比如用 1 元、5 元、10 元凑 27 元,优先用 10 元,再 5 元,再 1 元)。
    • 哈夫曼编码:给出现频率高的字符分配短编码,压缩数据(比如文件压缩)。
    • 最小生成树:在连接所有节点的边中,选择总权重最小的边集合(比如城市间修路,总造价最低)。

43. 数据库中,视图的本质是什么?

核心结论:视图是 “虚拟表”,由一个或多个表的查询结果定义,不存储实际数据(数据仍存在原表中)。

  • 关键特点:
    • 视图的结构和数据由查询语句决定(比如CREATE VIEW 学生视图 AS SELECT 姓名, 年龄 FROM 学生表 WHERE 年龄>=18)。
    • 访问视图时,数据库动态执行查询语句,返回结果(相当于 “实时查询”)。
    • 作用:简化复杂查询(将常用的复杂查询封装为视图)、隐藏敏感数据(比如只展示学生的姓名和年龄,不展示身份证号)。

44. 操作系统中,文件系统的主要功能是什么?

核心结论:管理和组织磁盘上的文件,提供文件的创建、删除、读写、查找等操作接口。

  • 核心功能:
    1. 文件存储:将文件按一定格式存储在磁盘上(比如 FAT32、NTFS、ext4 等文件系统格式)。
    2. 目录管理:创建目录(文件夹),组织文件的层级结构(比如 C 盘→文档→工作文件)。
    3. 权限控制:限制不同用户对文件的操作(比如只读、可写、可执行)。
    4. 文件查找:提供按文件名、大小、修改时间等条件查找文件的功能。

45. Java 语言中,接口和抽象类的主要区别是什么?

核心结论:接口是 “完全抽象”(只能定义抽象方法和常量),抽象类是 “部分抽象”(可定义抽象方法、普通方法、成员变量)。

  • 关键区别对比:
    对比项接口(interface)抽象类(abstract class)
    方法类型只能是抽象方法(Java 8 后可有默认方法)可混合抽象方法和普通方法
    成员变量只能是常量(public static final)可定义普通成员变量
    继承 / 实现一个类可实现多个接口一个类只能继承一个抽象类
    设计目的定义行为规范(“能做什么”)代码复用(“是什么,能做什么”)

46. 计算机网络中,TCP 和 UDP 的主要区别是什么?

核心结论:TCP 是面向连接、可靠传输;UDP 是无连接、不可靠传输,核心区别在 “连接性” 和 “可靠性”。

  • 关键区别对比:
    对比项TCPUDP
    连接性面向连接(三次握手建立连接,四次挥手断开)无连接(直接发送数据)
    可靠性可靠(重传丢失数据、排序、去重)不可靠(不重传、不排序)
    速度慢(连接和确认开销)快(无额外开销)
    应用场景网页、文件传输、邮件视频、语音、游戏

47. 数据结构中,栈的应用场景有哪些?

核心结论:括号匹配、表达式求值、函数调用栈、浏览器历史记录(前进 / 后退)。

  • 各场景通俗解释:
    • 括号匹配:检查代码、表达式中的括号是否成对(比如 “(())” 正确,“(()” 错误),遇到左括号入栈,遇到右括号出栈匹配。
    • 表达式求值:计算 “3+4*2” 等后缀表达式(逆波兰表达式),用栈存储操作数,遇到运算符弹出两个数计算后入栈。
    • 函数调用栈:程序调用函数时,当前函数的状态(参数、返回地址)入栈,函数执行完后出栈,恢复上一层函数的状态。
    • 浏览器历史:打开新网页时入栈,点击 “后退” 时出栈,点击 “前进” 时再次入栈。

48. 算法的正确性是指算法能够满足什么要求?

核心结论:算法能在有限步骤内,对所有合法输入都得到正确的输出(符合问题的需求)。

  • 关键要点:
    1. 输入合法:算法针对的是 “问题定义的合法输入”(比如 “排序算法” 的输入是 “一组可比较的元素”)。
    2. 步骤有限:算法执行的步骤是有限的(不能无限循环)。
    3. 输出正确:输出结果必须符合问题的预期(比如排序算法的输出是 “按升序排列的元素”)。
  • 例子:“求两个数的和” 算法,输入 2 和 3,输出 5(正确);输入 - 1 和 5,输出 4(正确),则算法正确。

49. 数据库中,GROUP BY 子句的作用是什么?

核心结论:将查询结果按指定列分组,相同值的行归为一组,通常搭配聚合函数(SUM、COUNT、AVG 等)使用。

  • 基本语法:SELECT 分组列, 聚合函数 FROM 表名 GROUP BY 分组列
  • 例子:
    • 表 “订单表” 有 “用户 ID”“金额” 列,查询每个用户的订单总金额:SELECT 用户ID, SUM(金额) AS 总金额 FROM 订单表 GROUP BY 用户ID
    • 结果会按 “用户 ID” 分组,每个用户一行,显示总金额。

50. 操作系统中,进程的三种基本状态是什么?

核心结论:运行态、就绪态、阻塞态(等待态)。

  • 状态详解:
    1. 运行态:进程正在占用 CPU,执行指令(比如正在打字的记事本进程)。
    2. 就绪态:进程已具备运行条件,等待 CPU 分配(比如多个文档同时打开,只有一个在运行,其他在就绪态)。
    3. 阻塞态:进程因等待某个事件(如 IO 操作、资源申请)而暂停,即使有 CPU 也不能运行(比如下载文件的进程,等待网络数据时处于阻塞态)。
  • 状态转换流程图:

51. C++ 语言中,类的构造函数的作用是什么?

核心结论:创建对象时初始化对象的成员变量(给对象的 “属性” 赋初始值)。

  • 关键特点:
    • 构造函数名与类名相同,无返回值(连 void 都不用写)。
    • 可重载(一个类可以有多个参数不同的构造函数)。
    • 若未自定义构造函数,编译器会自动生成默认构造函数(无参数,不做任何初始化)。
  • 例子:

    cpp

    运行

    class 学生 {
    public:
      string 姓名;
      int 年龄;
      // 构造函数:创建对象时初始化姓名和年龄
      学生(string n, int a) { 姓名 = n; 年龄 = a; }
    };
    学生 s("张三", 18); // 创建对象s,姓名=张三,年龄=18
    

52. 计算机组成原理中,总线按功能可分为数据总线、地址总线和什么?

核心结论:控制总线(Control Bus)。

  • 三类总线的作用:
    1. 数据总线(DB):传输 CPU 与内存、外设之间的数据(比如 CPU 读取内存中的数据,通过数据总线传输)。
    2. 地址总线(AB):传输 CPU 要访问的内存或外设的地址(比如 CPU 要读取内存 0x1234 的数据,通过地址总线发送地址)。
    3. 控制总线(CB):传输控制信号(比如 CPU 发出 “读”“写” 信号,外设发出 “就绪” 信号)。

53. 计算机网络中,局域网的英文缩写是什么?

核心结论:LAN(Local Area Network)。

  • 定义:覆盖范围小(比如办公室、家庭、校园)的网络,距离通常在 1 公里以内。
  • 特点:传输速度快(比如 100Mbps、1Gbps)、延迟低、成本低。
  • 例子:家里的 Wi-Fi 网络、公司的办公网络,都属于局域网。

54. 数据结构中,二叉搜索树的特点是什么?

核心结论:左子树的所有节点值 <根节点值,右子树的所有节点值> 根节点值(左小右大),且左右子树也都是二叉搜索树。

  • 核心优势:查找、插入、删除操作效率高(平均时间复杂度 O (logn))。
  • 例子:

    plaintext

          5(根)
         / \
        3   7(左3<5,右7>5)
       / \ / \
      2  4 6  8(左子树3的左2<3,右4>3;右子树7的左6<7,右8>7)
    
  • 查找操作:要找 6,先和根 5 比(6>5),去右子树;再和 7 比(6<7),去左子树,找到 6。

55. 排序算法的最坏时间复杂度为 O (n²) 的有哪些?

核心结论:冒泡排序、插入排序、选择排序、希尔排序(希尔排序最坏时间复杂度取决于步长,最坏可达 O (n²))。

  • 各算法最坏情况场景:
    • 冒泡排序:数组逆序排列(比如 [5,4,3,2,1]),需要交换 n (n-1)/2 次。
    • 插入排序:数组逆序排列,每个元素都要插入到最前面,移动次数最多。
    • 选择排序:无论数组顺序如何,最坏时间复杂度都是 O (n²)(每次都要遍历剩余元素找最小值)。
  • 备注:这些算法适合小规模数据排序,大规模数据不推荐。

56. 数据库中,JOIN 子句的作用是什么?

核心结论:将两个或多个表按指定条件关联起来,查询跨表的数据(比如从 “订单表” 和 “用户表” 中同时查询订单信息和用户信息)。

  • 常用 JOIN 类型:
    1. INNER JOIN(内连接):只返回两个表中满足条件的匹配行(比如订单表和用户表中都存在的用户 ID)。
    2. LEFT JOIN(左连接):返回左表的所有行,右表匹配的行显示,不匹配的显示 NULL。
  • 例子:
    • 订单表(订单 ID、用户 ID、金额),用户表(用户 ID、姓名),查询订单及对应用户名:SELECT 订单表.订单ID, 用户表.姓名, 订单表.金额 FROM 订单表 INNER JOIN 用户表 ON 订单表.用户ID = 用户表.用户ID

57. 操作系统中,分时系统的主要特点是什么?

核心结论:多个用户同时使用计算机,CPU 按时间片轮流为每个用户服务(“分时共享 CPU”)。

  • 关键特点:
    1. 多路性:多个用户通过终端同时访问计算机(比如机房的多台终端连接一台服务器)。
    2. 交互性:用户能实时与计算机交互(比如输入命令后,立即得到响应)。
    3. 独立性:每个用户感觉自己独占计算机(时间片切换快,用户察觉不到)。
    4. 及时性:用户的请求能在短时间内得到响应(时间片通常是毫秒级)。
  • 例子:Windows、Linux、macOS 等桌面操作系统,都属于分时系统。

58. Python 语言中,字典的键必须满足什么条件?

核心结论:字典的键必须是 “不可变类型”(哈希可哈希),且不能重复。

  • 不可变类型包括:整数(int)、字符串(str)、元组(tuple)、布尔值(bool)。
  • 可变类型(不能作为键):列表(list)、字典(dict)、集合(set)(因为可变类型的哈希值会变,无法定位)。
  • 例子:

    python

    运行

    dict1 = {1: "a", "name": "张三", (1,2): "tuple"} # 合法
    dict2 = {[1,2]: "list"} # 报错,列表是可变类型,不能作为键
    dict3 = {1: "a", 1: "b"} # 不报错,但键1重复,最终值为"b"(后面的覆盖前面的)
    

59. 计算机网络中,HTTPS 协议默认使用的端口号是多少?

核心结论:443 端口(TCP 端口)。

  • 补充说明:
    • HTTPS 是 HTTP 的加密版本(基于 SSL/TLS 协议加密),用于安全通信(比如网上银行、购物支付)。
    • 默认端口 443,与 HTTP 的 80 端口区分,访问时无需指定端口(如https://www.taobao.com)。
    • 加密作用:防止数据在传输过程中被窃取、篡改(比如输入密码时,加密后传输)。

60. 数据结构中,图的邻接矩阵存储方式适合哪种类型的图?

核心结论:适合稠密图(边数多,接近完全图)。

  • 邻接矩阵定义:用一个 n×n 的二维数组存储图(n 是顶点数),数组 [i][j] 表示顶点 i 和顶点 j 之间是否有边(有边为 1 / 权重,无边为 0/∞)。
  • 优缺点:
    • 优点:查找两个顶点之间是否有边的时间复杂度 O (1),简单直观。
    • 缺点:占用空间 O (n²)(与边数无关),稀疏图(边数少)会浪费大量空间。
  • 例子:完全图(每个顶点都与其他所有顶点相连),邻接矩阵大部分元素为 1,空间利用率高。

61. 算法的健壮性是指算法能够处理什么情况?

核心结论:算法能处理非法输入(比如输入不符合要求的数据)或异常情况(比如除数为 0、数组越界),并给出合理的处理结果(不崩溃、不输出错误数据)。

  • 通俗理解:算法 “抗造”,遇到意外情况也能正常应对。
  • 例子:
    • “求两个数的除法” 算法,若输入除数为 0,健壮的算法会提示 “除数不能为 0”,而不是崩溃;
    • “排序算法” 若输入空数组,健壮的算法会直接返回空数组,而不是报错。

62. 数据库中,DELETE 和 TRUNCATE 命令的主要区别是什么?

核心结论:DELETE 是 “逐行删除数据”(可回滚、可带条件),TRUNCATE 是 “清空表数据”(不可回滚、速度快)。

  • 关键区别对比:
    对比项DELETETRUNCATE
    操作方式逐行删除,记录日志清空整个表,不记录逐行日志
    回滚支持(事务中可回滚)不支持(立即生效)
    条件可带 WHERE 子句(删除指定行)不能带条件(清空所有行)
    速度慢(逐行处理)快(直接清空)
    自增列自增列值不重置自增列值重置为初始值

63. 操作系统中,批处理系统的主要特点是什么?

核心结论:将多个作业(程序)批量提交,操作系统自动依次执行,无需用户干预。

  • 关键特点:
    1. 批量性:用户将多个作业(比如多个计算任务)提交给系统,形成作业流。
    2. 自动性:操作系统按顺序执行作业,无需用户手动操作(比如执行完一个计算任务,自动执行下一个)。
    3. 单道批处理:同一时间只有一个作业在执行(早期);多道批处理:多个作业并发执行(提高 CPU 利用率)。
  • 应用场景:早期的大型计算机(比如科研计算、数据处理),现在常用于服务器批量任务(比如夜间数据备份)。

64. C 语言中,数组名代表的是什么?

核心结论:数组名代表数组首元素的内存地址(常量指针,不能修改)。

  • 关键要点:
    • 数组名是 “首元素地址”,比如int arr[5] = {1,2,3,4,5}arr等价于&arr[0](首元素 1 的地址)。
    • 数组名不能被赋值(比如arr = &x会报错,因为 arr 是常量指针)。
    • 例外情况:sizeof(arr)中,arr 代表整个数组,计算的是数组的总字节数(比如 arr [5] 是 int 类型,sizeof (arr)=20 字节)。
  • 例子:

    c

    运行

    int arr[5] = {1,2,3,4,5};
    printf("%p\n", arr); // 输出数组首元素地址(如0x7ffeefbff5a0)
    printf("%p\n", &arr[0]); // 输出与上面相同
    

65. 计算机组成原理中,Cache 的作用是什么?

核心结论:高速缓冲存储器,介于 CPU 和内存之间,解决 CPU 和内存速度不匹配的问题(提高数据访问速度)。

  • 速度对比:CPU(纳秒级)> Cache(几纳秒)> 内存(几十纳秒)> 磁盘(毫秒级)。
  • 工作原理(局部性原理):
    • CPU 访问数据时,先查 Cache;若有(命中),直接读取(速度快);
    • 若没有(未命中),从内存读取数据,同时把数据存入 Cache(下次访问可命中)。
  • 作用:减少 CPU 等待内存数据的时间,提高 CPU 利用率(比如 CPU 要读取常用数据,Cache 命中后无需等内存)。

66. 计算机网络中,广域网的英文缩写是什么?

核心结论:WAN(Wide Area Network)。

  • 定义:覆盖范围广(比如城市、国家、全球)的网络,距离通常在几十公里以上。
  • 特点:传输速度比局域网慢(比如 Mbps 级)、延迟高、成本高(依赖光纤、卫星等长途传输介质)。
  • 例子:互联网(Internet)、电信的宽带网络、银行的全国性网络,都属于广域网。

67. 面向对象编程中,继承的目的是什么?

核心结论:实现代码复用(子类复用父类的属性和方法),简化代码编写,支持多态。

  • 核心作用:
    1. 代码复用:父类的属性和方法,子类无需重新编写(比如 “人类” 有 “姓名、年龄” 属性和 “吃饭” 方法,“学生类” 继承后直接拥有)。
    2. 扩展功能:子类可在父类基础上添加新的属性和方法(比如 “学生类” 在 “人类” 基础上添加 “学号、成绩” 属性)。
    3. 支持多态:子类重写父类的方法,实现不同的行为(比如 “人类” 的 “工作” 方法,“学生类” 重写为 “学习”)。

68. 数据结构中,图的深度优先遍历类似于树的哪种遍历?

核心结论:类似于树的前序遍历(根左右)。

  • 遍历原理:
    • 深度优先遍历(DFS):从起始顶点出发,尽可能深地访问顶点,访问完当前顶点的所有邻接顶点后,回溯到上一个顶点。
    • 树的前序遍历:根节点 → 左子树 → 右子树,也是 “先访问当前节点,再递归访问子节点”,逻辑一致。
  • 例子:图的顶点 A 连接 B、C,B 连接 D,DFS 顺序是 A→B→D→C,与树的前序遍历逻辑相同。

69. 数据库中,事务的隔离级别有哪几种?

核心结论:MySQL 中分为 4 种(从低到高):读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)、串行化(Serializable)。

  • 各级别详解(通俗版):
    1. 读未提交:一个事务能读到另一个事务未提交的数据(脏读),最低级别,性能最高。
    2. 读已提交:一个事务只能读到另一个事务已提交的数据(避免脏读),但同一事务中多次查询可能结果不同(不可重复读)。
    3. 可重复读:同一事务中多次查询结果相同(避免不可重复读),但可能读到幻影数据(幻读),MySQL 默认级别。
    4. 串行化:事务串行执行(同一时间只有一个事务执行),避免所有并发问题,但性能最低。

70. 操作系统中,进程同步的主要目的是什么?

核心结论:协调多个并发进程的执行顺序,避免竞争条件(多个进程同时操作共享资源导致数据错误),确保数据一致性。

  • 通俗理解:多个进程 “协同工作”,按规则访问共享资源(比如多个进程写同一个文件,需要按顺序写,避免数据混乱)。
  • 典型场景:
    • 生产者 - 消费者问题:生产者进程生产数据,消费者进程消费数据,需要同步(消费者不能在生产者没生产时消费,生产者不能在缓冲区满时生产)。
    • 银行转账问题:两个进程同时给同一账户转账,需要同步(避免同时修改余额导致数据错误)。
  • 同步机制:信号量、互斥锁、条件变量等。

71. Java 语言中,垃圾回收的作用是什么?

核心结论:自动回收程序中不再使用的对象所占用的内存(释放无用内存,避免内存泄漏)。

  • 关键要点:
    • 垃圾:指没有任何引用指向的对象(比如Object obj = new Object(); obj = null;,obj 不再指向对象,该对象成为垃圾)。
    • 垃圾回收器(GC):Java 虚拟机(JVM)的组件,定期扫描内存,识别垃圾并释放其占用的内存。
    • 优点:无需程序员手动释放内存(C/C++ 需要free/delete),减少内存泄漏风险。
  • 注意:垃圾回收时机由 JVM 决定,程序员不能手动触发(可调用System.gc()建议回收,但 JVM 不一定执行)。

72. 计算机网络中,ARP 协议的主要作用是什么?

核心结论:地址解析协议(Address Resolution Protocol),将 IP 地址解析为物理地址(MAC 地址)。

  • 通俗理解:
    • IP 地址是 “逻辑地址”(比如 192.168.1.10),用于跨网络通信;MAC 地址是 “物理地址”(比如 00:11:22:33:44:55),用于同一局域网内设备通信。
    • 同一局域网内,计算机要给另一台计算机发送数据,需要知道对方的 MAC 地址,ARP 协议就是通过 IP 地址查询 MAC 地址。
  • 流程:计算机 A 要给同一局域网的计算机 B(IP:192.168.1.20)发送数据 → A 发送 ARP 广播(询问 “谁是 192.168.1.20?请告诉我你的 MAC 地址”) → B 收到广播后,回复自己的 MAC 地址 → A 得到 MAC 地址后,发送数据。

73. 数据结构中,队列的应用场景有哪些?

核心结论:任务调度、消息队列、广度优先遍历(BFS)、打印机队列。

  • 各场景通俗解释:
    • 任务调度:操作系统的进程调度(按顺序分配 CPU 时间片)、手机的应用后台任务队列(按顺序执行任务)。
    • 消息队列:分布式系统中,不同服务之间通过消息队列传递消息(比如订单服务给支付服务发消息,按顺序处理)。
    • 广度优先遍历:遍历树或图时,按层级访问节点(比如树的层序遍历,用队列存储当前层级的节点)。
    • 打印机队列:多个文档同时打印,按提交顺序排队打印(先提交的先打印)。

74. 动态规划算法的典型应用有哪些?

核心结论:背包问题(0-1 背包、完全背包)、最长公共子序列(LCS)、最长递增子序列(LIS)、最短路径问题(Floyd-Warshall 算法)。

  • 各应用通俗解释:
    • 0-1 背包:有一个容量固定的背包,若干物品(每个物品有重量和价值,只能选或不选),选物品放入背包,使总价值最大。
    • 最长公共子序列:找两个字符串中最长的公共子序列(比如 “ABCBDAB” 和 “BDCAB” 的 LCS 是 “BCAB”)。
    • 最长递增子序列:找数组中最长的严格递增子序列(比如 [10,9,2,5,3,7,101,18] 的 LIS 是 [2,3,7,101])。
    • 最短路径:Floyd-Warshall 算法求图中所有顶点之间的最短路径。

75. 数据库中,CREATE TABLE 命令的作用是什么?

核心结论:创建数据库表(定义表的结构,包括列名、数据类型、约束条件)。

  • 基本语法:CREATE TABLE 表名 (列1 数据类型 约束, 列2 数据类型 约束, ...)
  • 常见约束:主键(PRIMARY KEY)、非空(NOT NULL)、唯一(UNIQUE)、外键(FOREIGN KEY)。
  • 例子:创建 “学生表”,包含学号(主键)、姓名(非空)、年龄:

    sql

    CREATE TABLE 学生表 (
      学号 INT PRIMARY KEY,
      姓名 VARCHAR(20) NOT NULL,
      年龄 INT
    );
    

76. 操作系统中,设备管理的主要功能是什么?

核心结论:管理计算机的外部设备(如打印机、键盘、硬盘),提供设备的访问接口,协调设备与 CPU、内存的工作。

  • 核心功能:
    1. 设备分配:为进程分配所需的设备(比如多个进程申请打印机,按顺序分配)。
    2. 设备驱动:通过设备驱动程序(驱动),让操作系统能识别和控制设备(比如显卡驱动、打印机驱动)。
    3. 缓冲管理:在内存中设置缓冲区,缓解 CPU 和设备的速度差异(比如 CPU 写入数据到缓冲区,设备从缓冲区读取,提高效率)。
    4. 中断处理:设备完成操作后(比如打印机打印完),向 CPU 发送中断信号,CPU 暂停当前工作,处理设备请求。

77. C++ 语言中,析构函数的作用是什么?

核心结论:销毁对象时释放对象占用的资源(比如动态分配的内存、打开的文件、网络连接)。

  • 关键特点:
    • 析构函数名是类名前加~,无返回值,无参数(不能重载,一个类只有一个析构函数)。
    • 若未自定义析构函数,编译器会自动生成默认析构函数(不释放动态资源)。
    • 对象生命周期结束时(比如函数执行完、delete关键字删除对象),析构函数自动调用。
  • 例子:

    cpp

    运行

    class 文件操作 {
    public:
      FILE *file;
      // 构造函数:打开文件
      文件操作(const char *filename) { file = fopen(filename, "r"); }
      // 析构函数:关闭文件,释放资源
      ~文件操作() { if (file) fclose(file); }
    };
     文件操作 f("test.txt"); // 创建对象,打开文件
    // 函数执行完,对象f销毁,析构函数自动关闭文件
    

78. 计算机组成原理中,指令系统的核心是什么?

核心结论:指令(机器指令),是 CPU 能直接识别和执行的基本操作命令。

  • 指令的组成:操作码 + 地址码。
    1. 操作码:指定指令要执行的操作(比如加法、减法、读取内存)。
    2. 地址码:指定操作数的地址(比如加法操作的两个数存在内存的哪个位置)。
  • 指令系统:一台计算机支持的所有指令的集合(比如 x86 指令集、ARM 指令集)。
  • 通俗理解:指令是 CPU 的 “命令语言”,CPU 的工作就是不断读取指令、解析指令、执行指令。

79. 计算机网络中,ICMP 协议的主要作用是什么?

核心结论:互联网控制消息协议(Internet Control Message Protocol),用于在 IP 网络中传递控制消息和错误报告(比如网络不通、目标不可达)。

  • 核心功能:
    1. 错误报告:当数据包无法送达目标时,路由器发送 ICMP 错误消息给源主机(比如 “目标不可达”“超时”)。
    2. 网络测试:常用的ping命令就是基于 ICMP 协议(发送 ICMP 请求包,接收 ICMP 响应包,判断网络连通性)。
    3. 路由控制:传递路由相关的控制信息(比如路由器之间的路由通告)。

80. 数据结构中,哈希冲突的解决方法有哪些?

核心结论:开放定址法(线性探测、二次探测、双重哈希)、链地址法(拉链法)、再哈希法、建立公共溢出区。

  • 常用方法详解:
    1. 链地址法(最常用):每个哈希桶对应一个链表,哈希冲突的元素存入同一个链表,查找时遍历链表。
    2. 线性探测:哈希冲突后,依次检查下一个哈希桶(比如桶 i 冲突,检查 i+1、i+2...),直到找到空桶。
    3. 二次探测:哈希冲突后,检查 i+1²、i-1²、i+2²、i-2²... 的桶,避免线性探测的 “聚集效应”。
  • 例子:链地址法中,键 A 和键 B 哈希值相同(冲突),都存入桶 3 对应的链表,查找时先定位到桶 3,再遍历链表找 A 或 B。

81. 算法的效率主要取决于时间复杂度和什么?

核心结论:空间复杂度(算法运行时所需的存储空间)。

  • 算法效率的两大衡量指标:
    1. 时间复杂度:描述算法执行时间随输入规模增长的趋势(快不快)。
    2. 空间复杂度:描述算法所需存储空间随输入规模增长的趋势(省不省空间)。
  • 权衡关系:很多算法存在 “时间 - 空间权衡”,比如牺牲空间换时间(如动态规划存储子问题解),或牺牲时间换空间(如递归算法节省存储,但执行时间长)。

82. 数据库中,ALTER TABLE 命令的作用是什么?

核心结论:修改已存在的数据库表结构(比如添加列、修改列类型、删除列、添加约束)。

  • 常用语法:
    1. 添加列:ALTER TABLE 表名 ADD 列名 数据类型
    2. 修改列类型:ALTER TABLE 表名 MODIFY 列名 新数据类型
    3. 删除列:ALTER TABLE 表名 DROP 列名
    4. 添加主键约束:ALTER TABLE 表名 ADD PRIMARY KEY (列名)
  • 例子:给 “学生表” 添加 “性别” 列(VARCHAR 类型,长度 2):ALTER TABLE 学生表 ADD 性别 VARCHAR(2)

83. 操作系统中,线程调度的调度单位是什么?

核心结论:线程(线程是 CPU 调度的最小单位)。

  • 关键说明:
    • 进程是资源分配的单位,线程是调度的单位(CPU 分配时间片给线程,而不是进程)。
    • 一个进程中的多个线程共享进程资源,CPU 通过调度线程来执行程序(比如一个浏览器进程中的多个标签页线程,轮流占用 CPU)。
  • 调度算法:与进程调度类似,常用时间片轮转、优先级调度等(比如高优先级线程先获得 CPU)。

84. Python 语言中,装饰器的主要作用是什么?

核心结论:在不修改原函数代码的前提下,给函数添加额外功能(比如日志记录、性能测试、权限验证)。

  • 核心原理:装饰器是一个函数,接收原函数作为参数,返回一个新函数(包装后的函数)。
  • 语法:用@装饰器名放在函数定义前。
  • 例子:给函数添加日志记录功能:

    python

    运行

    def log_decorator(func):
        def wrapper(*args, **kwargs):
            print(f"函数{func.__name__}开始执行")
            result = func(*args, **kwargs)
            print(f"函数{func.__name__}执行结束")
            return result
        return wrapper
    
    @log_decorator # 用装饰器装饰函数
    def add(a, b):
        return a + b
    
    add(2, 3) # 输出:函数add开始执行 → 函数add执行结束,返回5
    

85. 计算机网络中,FTP 协议的主要作用是什么?

核心结论:文件传输协议(File Transfer Protocol),用于在客户端和服务器之间传输文件(上传、下载)。

  • 核心功能:
    1. 上传文件:客户端将本地文件发送到 FTP 服务器(比如把本地的文档上传到服务器)。
    2. 下载文件:客户端从 FTP 服务器获取文件(比如从服务器下载软件安装包)。
    3. 目录操作:创建、删除、切换服务器上的目录。
  • 端口:默认使用 21 端口(控制端口,用于发送命令)和 20 端口(数据端口,用于传输文件数据)。
  • 例子:FTP 工具(如 FileZilla)连接 FTP 服务器后,可上传本地文件到服务器,或下载服务器文件到本地。

86. 数据结构中,二叉树的中序遍历顺序是什么?

核心结论:左子树 → 根节点 → 右子树(简称 “左根右”)。

  • 遍历流程(以简单二叉树为例):

    plaintext

          1(根)
         / \
        2   3
       / \
      4   5
    
    中序遍历顺序:4 → 2 → 5 → 1 → 3。
  • 特殊意义:二叉搜索树的中序遍历结果是 “升序排列” 的(比如上面的二叉搜索树,中序遍历是 4,2,5,1,3 → 实际二叉搜索树的中序遍历是 4,2,5,1,3?不,二叉搜索树的中序遍历是升序,比如正确的二叉搜索树中序遍历是 4,2,5,1,3 不对,应该是 4→2→5→1→3 的升序是 1,2,3,4,5?哦,上面的例子不是二叉搜索树,正确的二叉搜索树中序遍历是升序,比如:

    plaintext

          3(根)
         / \
        2   4
       /     \
      1       5
    
    中序遍历:1→2→3→4→5(升序)。

87. 基于比较的排序算法有哪些?

核心结论:冒泡排序、插入排序、选择排序、快速排序、归并排序、堆排序、希尔排序。

  • 定义:排序过程中,通过比较元素之间的大小关系来决定元素的顺序。
  • 对比非基于比较的排序:基数排序、计数排序、桶排序(不比较元素大小,基于元素的其他特征排序)。
  • 特点:基于比较的排序最坏时间复杂度最低是 O (nlogn)(比如快速排序、归并排序),而非基于比较的排序可达到 O (n)(但依赖元素的范围)。

88. 数据库中,DISTINCT 关键字的作用是什么?

核心结论:去除查询结果中的重复行,只返回唯一的行。

  • 基本语法:SELECT DISTINCT 列名 FROM 表名
  • 例子:
    • 表 “学生表” 的 “班级” 列有重复值(比如多个学生在 “一班”),查询所有不重复的班级:SELECT DISTINCT 班级 FROM 学生表
    • 结果会显示每个班级只出现一次(比如 “一班”“二班”“三班”)。
  • 注意:DISTINCT 作用于所有查询列(比如SELECT DISTINCT 班级, 性别 FROM 学生表,会去除 “班级 + 性别” 都相同的行)。

89. 操作系统中,死锁的预防措施有哪些?

核心结论:破坏死锁的四个必要条件之一(资源互斥、持有并等待、不可剥夺、循环等待)。

  • 具体措施:
    1. 破坏 “持有并等待”:进程申请资源时,必须一次性申请所有需要的资源(要么全给,要么全不给),申请期间不持有任何资源。
    2. 破坏 “不可剥夺”:进程占用的资源若长时间不用,或有更高优先级进程申请,可强制剥夺该资源。
    3. 破坏 “循环等待”:给所有资源编号,进程必须按编号递增的顺序申请资源(比如先申请 1 号资源,再申请 2 号,不能反过来)。
    4. 破坏 “资源互斥”:尽量使用可共享的资源(比如打印机改为共享打印服务器,多个进程可同时 “使用”,实际是排队打印)。

90. C 语言中,函数指针的作用是什么?

核心结论:函数指针是指向函数的指针变量,存储函数的内存地址,核心作用是间接调用函数、实现回调函数、统一接口调用。

  • 关键要点:
    1. 函数名本质是函数的入口地址,函数指针存储这个地址,通过指针可调用函数。
    2. 定义格式:返回值类型 (*指针名)(参数类型1, 参数类型2, ...)(括号不能少,否则变成 “返回指针的函数”)。
    3. 核心应用:回调函数(把函数指针作为参数传给其他函数,在其他函数中调用)、根据条件动态选择调用的函数。
  • 通俗例子:

    c

    运行

    // 定义两个函数
    int add(int a, int b) { return a + b; }
    int sub(int a, int b) { return a - b; }
    
    int main() {
      // 定义函数指针,指向返回int、参数为两个int的函数
      int (*func_ptr)(int, int);
      
      func_ptr = add; // 指针指向add函数
      printf("3+2=%d\n", func_ptr(3, 2)); // 间接调用add,输出5
      
      func_ptr = sub; // 指针指向sub函数
      printf("3-2=%d\n", func_ptr(3, 2)); // 间接调用sub,输出1
      return 0;
    }
    
  • 回调函数场景:比如排序函数中,通过函数指针传入自定义比较规则(升序 / 降序),实现通用排序。

91. 计算机组成原理中,控制器的主要功能是什么?

核心结论:控制器是 CPU 的 “指挥中心”,核心功能是按顺序读取、解析、执行指令,协调 CPU 内部及外设、内存的工作。

  • 核心功能分点(执行流程):
    1. 取指令:从内存中读取当前要执行的指令(根据程序计数器 PC 的地址),并存入指令寄存器 IR。
    2. 指令译码:对指令寄存器中的指令进行解析,确定指令要执行的操作(比如加法、读取内存)和操作数地址。
    3. 执行指令:向运算器、内存、外设发送控制信号,完成指令指定的操作(比如让运算器执行加法,让内存读取数据)。
    4. 控制协调:控制指令执行的时序(比如什么时候取指令、什么时候译码),协调运算器、内存、外设的工作节奏,处理中断信号。
  • 通俗理解:控制器就像乐队指挥,按 “乐谱(程序指令)” 指挥各个 “乐手(运算器、内存、外设)” 协同工作,确保每一步都按顺序执行。

92. 计算机网络中,SMTP 协议的主要作用是什么?

核心结论:简单邮件传输协议(Simple Mail Transfer Protocol),核心作用是将电子邮件从发件人的邮件客户端(或发件服务器)发送到收件人的邮件服务器。

  • 关键要点:
    1. 传输方向:只负责 “发送邮件”,不负责 “接收邮件”(接收邮件用 POP3 或 IMAP 协议)。
    2. 默认端口:25(非加密)、465(SSL 加密)。
    3. 工作流程:发件人写邮件 → 邮件客户端通过 SMTP 连接发件服务器 → 发件服务器通过 SMTP 将邮件转发到收件人服务器 → 收件人通过 POP3/IMAP 从自己的服务器读取邮件。
  • 例子:用 QQ 邮箱给 163 邮箱发邮件,QQ 邮箱客户端先通过 SMTP 把邮件发给 QQ 邮件服务器,QQ 服务器再通过 SMTP 转发到 163 邮件服务器,最后 163 邮箱用户用 IMAP 读取邮件。

93. 数据结构中,图的广度优先遍历类似于树的哪种遍历?

核心结论:类似于树的层序遍历(按层级逐层访问节点)。

  • 遍历原理对比:
    1. 树的层序遍历:从根节点开始,先访问第 1 层(根节点),再访问第 2 层所有节点,接着第 3 层,依次向下(比如根→左孩子→右孩子→左孙子→右孙子)。
    2. 图的广度优先遍历(BFS):从起始顶点开始,先访问起始顶点的所有邻接顶点(第 1 层邻居),再依次访问每个邻接顶点的邻接顶点(第 2 层邻居),不重复访问,逻辑与层序遍历完全一致。
  • 遍历流程例子(图):

    plaintext

    顶点A连接B、C,顶点B连接D,顶点C连接E
    
    BFS 遍历顺序:A → B → C → D → E(先访问 A 的邻居 B、C,再访问 B 的邻居 D、C 的邻居 E),和树的层序遍历节奏相同。
  • 实现工具:两者都需要用 “队列” 存储待访问的节点(先入队的先访问)。

94. 算法的优化主要从哪些方面入手?

核心结论:主要从时间复杂度、空间复杂度、代码可读性与稳定性三个核心方面入手,兼顾执行效率和实用价值。

  • 具体优化方向:
    1. 时间复杂度优化:减少不必要的计算(比如避免重复遍历、缓存中间结果)、选择更高效的算法(比如用 O (nlogn) 排序替代 O (n²) 排序)、优化数据结构(比如用哈希表替代数组查找)。
    2. 空间复杂度优化:减少临时变量占用(比如原地排序替代需要额外数组的排序)、复用空间(比如动态规划用一维数组替代二维数组)、释放无用资源(比如及时回收指针、关闭文件)。
    3. 可读性与稳定性:优化代码逻辑(避免冗余代码)、处理边界情况(比如空输入、异常值)、保持算法稳定(比如排序时不改变相同元素的相对顺序)。
  • 优化原则:先保证正确性,再优化效率;优先优化瓶颈(比如某个 O (n²) 的循环是执行最慢的部分,优先优化它)。

95. 数据库中,UPDATE 命令的作用是什么?

核心结论:修改数据库表中已存在的数据(可修改单行、多行,或全表数据)。

  • 基本语法:UPDATE 表名 SET 列1=值1, 列2=值2 WHERE 条件
  • 关键要点:
    1. WHERE 子句:指定要修改的行,若省略 WHERE,会修改表中所有行(慎用,容易误改全表)。
    2. 可搭配其他子句:比如AND/OR(多条件)、IN(指定多个值)。
  • 通俗例子:
    • 学生表中,将 “张三” 的年龄改为 19(张三的学号是 1001):UPDATE 学生表 SET 年龄=19 WHERE 学号=1001
    • 将所有 18 岁学生的性别改为 “男”:UPDATE 学生表 SET 性别='男' WHERE 年龄=18
  • 注意:修改前建议先用SELECT查询 WHERE 条件对应的行,确认无误后再执行 UPDATE,避免误改。

96. 操作系统中,分页存储管理中页面大小的选择会影响什么?

核心结论:页面大小会影响内存利用率、IO 操作次数、页表大小三个关键指标,需权衡选择。

  • 具体影响:
    1. 内存利用率:页面越大,“内部碎片” 越多(比如页面 4KB,一个 1KB 的程序也占 4KB,浪费 3KB),内存利用率越低;页面越小,内部碎片越少,但页表会越大。
    2. IO 操作次数:页面越大,单次 IO 能读取更多数据,程序加载时需要的 IO 次数越少(比如加载 16KB 的程序,4KB 页面需要 4 次 IO,8KB 页面需要 2 次);页面越小,IO 次数越多。
    3. 页表大小:页面越小,相同大小的程序需要的页面数越多,页表(记录页面和物理块映射关系)的条目越多,页表占用的内存越大;页面越大,页表越小。
  • 实际选择:操作系统会选折中值(比如 4KB、8KB),平衡内存利用率和 IO 效率(比如 Windows、Linux 默认页面大小多为 4KB)。

97. Java 语言中,多线程的实现方式有哪几种?

核心结论:主要有 3 种:继承Thread类、实现Runnable接口、实现Callable接口(带返回值)。

  • 三种方式详解(通俗版):
    1. 继承 Thread 类:
      • 步骤:创建子类继承Thread,重写run()方法(线程执行逻辑),创建子类对象并调用start()方法启动线程。
      • 缺点:Java 单继承,子类继承 Thread 后不能再继承其他类。
      • 例子:

        java

        运行

        class MyThread extends Thread {
          public void run() { System.out.println("线程执行"); }
        }
        new MyThread().start(); // 启动线程
        
    2. 实现 Runnable 接口:
      • 步骤:创建类实现Runnable接口,实现run()方法,将该类对象传入Thread构造器,调用start()
      • 优点:可同时继承其他类,更灵活(推荐使用)。
      • 例子:

        java

        运行

        class MyRunnable implements Runnable {
          public void run() { System.out.println("线程执行"); }
        }
        new Thread(new MyRunnable()).start(); // 启动线程
        
    3. 实现 Callable 接口:
      • 特点:带返回值(可获取线程执行结果),可抛出异常,需搭配FutureTask使用。
      • 适用场景:需要线程执行结果的场景(比如计算任务)。

98. 计算机网络中,Telnet 协议的主要作用是什么?

核心结论:远程登录协议(Teletype Network),核心作用是通过网络远程登录到另一台计算机(服务器、路由器等),并在远程计算机上执行命令。

  • 关键要点:
    1. 工作方式:客户端通过 Telnet 连接远程服务器的 23 号端口(默认),输入用户名和密码登录后,可直接操作远程计算机(比如执行命令、修改配置)。
    2. 安全性:数据传输不加密(用户名、密码、命令都明文传输),容易被窃取,现在常用 SSH 协议(加密)替代。
    3. 应用场景:早期用于远程管理服务器、路由器配置,现在仅在测试或无安全要求的场景使用。
  • 例子:用 Telnet 客户端连接远程 Linux 服务器,登录后输入ls命令,可查看服务器上的文件列表;输入reboot命令,可重启服务器。

99. 数据结构中,平衡二叉树的定义是什么?

核心结论:平衡二叉树(AVL 树)是二叉搜索树的变种,核心定义是 “树上所有节点的左右两个子树的高度差(平衡因子)的绝对值不超过 1”,且左右子树也都是平衡二叉树。

  • 关键概念:
    1. 平衡因子:节点的左子树高度 - 右子树高度(平衡二叉树中,平衡因子只能是 - 1、0、1)。
    2. 高度:节点到最底层叶子节点的最长路径长度(叶子节点高度为 1)。
  • 通俗例子(合法平衡二叉树):

    plaintext

          3(平衡因子0:左子树高2,右子树高2)
         / \
        2   4(平衡因子0:左子树高1,右子树高1)
       /     \
      1       5(平衡因子0:无左右子树)
    
    每个节点的左右子树高度差都≤1,符合定义。
  • 反例(非平衡二叉树):

    plaintext

          3(平衡因子2:左子树高3,右子树高1)
         /
        2
       /
      1
    
    根节点的左子树高 3,右子树高 1,高度差 2,不符合平衡二叉树定义。
  • 核心作用:避免二叉搜索树退化为 “链表”(比如插入有序数据时,二叉搜索树变成链表,查询效率从 O (logn) 降到 O (n)),保证查询、插入、删除的效率稳定在 O (logn)。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小范好好学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值