一、语言基础
-
多态的实现
-
通过虚函数表(vtable)实现动态绑定,运行时根据对象类型调用对应的函数。虚函数通过
virtual
关键字声明,子类可重写基类虚函数112。
-
-
指针与引用的区别
-
指针是变量,存储地址,支持多级指针;引用是别名,初始化后不可更改,直接操作目标变量。引用更安全且语法简洁21113。
-
-
static
关键字的作用-
隐藏作用域(文件或函数内)、延长局部变量生命周期、类静态成员共享数据。静态函数仅在本文件可见,静态成员函数无
this
指针71113。
-
-
const
与volatile
-
const
修饰只读变量,volatile
防止编译器优化(如多线程共享变量或硬件寄存器)711。 -
两者可同时修饰变量(如只读状态寄存器)11。
-
-
内存管理
-
malloc/free
与new/delete
区别:new
调用构造函数,delete
调用析构函数,支持类型检查812。 -
内存泄漏检测工具(如Valgrind)及避免方法1。
-
-
虚函数与纯虚函数
-
虚函数允许子类重写,纯虚函数(
virtual void func() = 0;
)强制子类实现,用于定义接口1213。
-
-
类型转换
-
static_cast
(隐式转换)、dynamic_cast
(类层次转换)、const_cast
(去常量)、reinterpret_cast
(底层重解释)212。
-
二、数据结构与算法
-
STL容器实现
-
vector
:动态数组,倍增扩容;map
基于红黑树(O(log n)查找),unordered_map
基于哈希表(O(1)查找,冲突解决如链地址法)1213。
-
-
链表操作
-
反转链表、检测环(快慢指针)、合并有序链表、删除重复节点12。
-
-
树结构
-
红黑树特性(近似平衡,插入/删除通过旋转保持平衡),与AVL树对比(红黑树牺牲严格平衡换取更高插入效率)1213。
-
B+树与B树区别(B+树非叶节点仅存索引,数据全在叶节点)12。
-
-
排序与查找
-
快排(分治,平均O(n log n))、堆排序(构建大顶堆)、归并排序(稳定,O(n)空间)12。
-
海量数据排序(外排序、分桶法)12。
-
-
字符串处理
-
strcpy
、memcpy
实现及边界处理(如strncpy
防止缓冲区溢出)1113。
-
三、操作系统
-
进程与线程
-
进程是资源分配单位,线程是CPU调度单位。线程共享进程内存空间,切换开销更小21113。
-
同步机制:互斥锁、条件变量、信号量、自旋锁(忙等待,适用于短临界区)111。
-
-
死锁与避免
-
条件:互斥、请求与保持、不可抢占、循环等待。避免方法:银行家算法、按序申请资源111。
-
-
内存管理
-
虚拟内存作用(扩展物理内存、隔离进程空间)、页面置换算法(LRU、FIFO)1113。
-
内存碎片解决(伙伴系统、Slab分配)1。
-
-
进程间通信(IPC)
-
管道、消息队列、共享内存、信号量、Socket211。
-
四、计算机网络
-
TCP与UDP
-
TCP可靠传输(三次握手、四次挥手、超时重传、滑动窗口),UDP无连接、高效但不可靠112。
-
可靠UDP实现:应用层添加序列号、确认应答、重传机制1。
-
-
HTTP/HTTPS
-
HTTP 1.1长连接、HTTPS通过TLS加密(SSL握手过程)1。
-
状态码:200(成功)、404(未找到)、502(网关错误)11。
-
-
IO模型
-
同步阻塞、非阻塞、多路复用(select/poll/epoll)、异步IO(如IOCP)112。
-
五、数据库(补充)
-
事务ACID:原子性、一致性、隔离性、持久性。
-
索引优化:B+树索引、覆盖索引、最左前缀原则。
-
锁机制:行锁、表锁、乐观锁(版本号)与悲观锁。
高频附加题
-
设计模式:单例模式(线程安全实现)、工厂模式、观察者模式112。
-
智力题:判断点是否在三角形内(面积法或向量叉乘)2。
-
系统设计:如何实现高并发服务器(线程池+epoll)、分布式ID生成(雪花算法)111。