0 持续更新中
目录
0 持续更新中
1 C++语言相关
1.1 malloc/free和new/delete区别
1.2 内存泄漏
1.3 堆区和栈区的区别
1.4 宏定义和const的区别
1.5 多态
1.6 类中的静态成员变量
2 操作系统相关
2.1 进程和(用户)线程的区别
2.2 系统调用
2.3 中断
2.4 进程切换
2.5 页面置换算法
2.6 虚拟内存的实现
2.7 线程间的通信
3 计算机网络
3.1 TCP和UDP的区别
3.2 TCP三次握手四次挥手
3.3 TCP和UDP的结构
4 数据库
4.1 innodb引擎
5 算法题
5.1 给定一个数组,查找重复元素
1 C++语言相关
1.1 malloc/free和new/delete区别
- malloc/free 是c语言中的库函数。new/delete是C++中的关键字。库函数不可以重载,关键字可以。
- malloc要自己计算内存大小。new是有编译器计算内存大小。
- malloc返回的是void*指针。new返回的是对应类型的指针。
- new和delete使用时会调用构造函数和析构函数,但malloc和free不会。
1.2 内存泄漏
- 程序占有内存资源而不释放内存资源。
- 堆内存泄漏:malloc和new后忘记free和delete。
- 系统资源泄漏:忘记释放各种句柄。
- 数组对象没有一个一个delete或者没用delete[]。
- 基于基类指针生成子类对象,基类的析构函数不是虚函数导致子类调用基类的析构函数而不是自己的析构函数。
1.3 堆区和栈区的区别
- 管理方式不同:栈是由编译器自动申请和释放的,堆是由程序员自己申请和释放的。
- 空间大小不同。
- 是否产生内存碎片:栈是不会产生内存碎片,堆会。
- 堆是动态分配,栈既有动态分配又有静态分配。
- 栈的效率高于堆。
1.4 宏定义和const的区别
2024-春招-4399-一面
答案
1.5 多态
2024-春招-4399-一面
答案
1.6 类中的静态成员变量
2024-春招-4399-一面
答案
2 操作系统相关
2.1 进程和(用户)线程的区别
- 进程是资源分配的基本单位。线程是CPU调度的基本单位。
- 进程切换效率低,线程切换效率。
- 进程有独立的虚拟地址空间。线程没有,但线程有栈,pc,本地存储等独立空间。
- 线程必须依附与进程,一个进程可以有多个线程。
- 同一进程内的线程切换就不需要CPU切换进程。
- 进程切换效率低,线程切换效率
2.2 系统调用
C语言调有exec()函数就可以调用一个系统调用。
- 执行系统调用时,CPU会从用户态转变为核心态。
- 系统要调用外部资源时需要执行系统调用,如键盘输入,打印机等。
- 流程:传递系统调用参数->执行陷入指令(用户态) -> 执行系统调用相应服务程序(核心态)->返回用户程序。
2.3 中断
-
硬中断:硬件相关。如—网络流量不断送进一个有限的缓冲区,使用硬中断可以要求CPU优先处理这个有限的缓冲区以免数据丢失。
- 软中断:用户相关。应用程序通过系统调用使CPU从用户态转为内核态。
2.4 进程切换
- 并行性:多个CPU分别运行不同的进程。
- 并发性:CPU不断切换进程达到类似对个进程并行的效果。
- 进程切换有个三角裤图。
2.5 页面置换算法
程序发生缺页中断,执行页面置换算法。
- 目的:减少页面置换的次数
- 先进先出算法。
- 最佳置换算法。
- 最近未使用算法。
- 时钟页面置换算法。
2.6 虚拟内存的实现
2.7 线程间的通信
2024-春招-4399-一面
答案
3 计算机网络
3.1 TCP和UDP的区别
2024-春招-4399-一面
相同点:
- 均属于传输层协议。
- 为应用层提供服务。
不同点:
- TCP是面向连接,UDP是面向未连接。
- TCP是可靠传输,UDP是不可靠传输。
- TCP是1对1,UDP可以多对多。
- TCP是基于字节流(分段,分片),UDP基于报文。
3.2 TCP三次握手四次挥手
百度的图。
3.3 TCP和UDP的结构
来自百度
4 数据库
4.1 innodb引擎
B+树
5 算法题
5.1 给定一个数组,查找重复元素
2024-春招-4399-一面
这里我回答的是用哈希表,时间复杂度是O(n);