【C++开发面经】全过程面试问题详解
目录
1. C++ 多态的表现形式
2. AVL 树和红黑树的区别
3. 进程和线程的区别
4. select 和 epoll 的区别
1. C++ 多态的表现形式
- 动态多态(运行时):虚函数 + 继承 + 基类指针 / 引用,派生类重写虚函数,运行时动态绑定实现;
- 静态多态(编译期):函数重载(参数不同)、模板(类 / 函数模板),编译期确定调用逻辑。
2. AVL 树和红黑树的区别
- 平衡标准:AVL 树是严格平衡(左右子树高度差≤1),红黑树是黑平衡(最长路径≤2× 最短路径);
- 性能:AVL 插入删除旋转次数多(维护严格平衡),查询更快;红黑树旋转少,插入删除效率高,内存占用低(无高度记录);
- 适用:AVL 适合查询密集,红黑树适合插入删除频繁(如 STL map、Linux 内核)。
3. 进程和线程的区别
- 资源分配:进程是资源分配单位(独立地址空间、PID),线程是调度执行单位(共享进程资源);
- 切换开销:进程切换开销大(需切换地址空间),线程切换快(仅切换上下文);
- 并发能力:线程并发度更高,一个进程可包含多个线程。
4. select 和 epoll 的区别
- 底层结构:select 基于位图,epoll 基于红黑树 + 就绪链表;
- 连接限制:select 有最大文件描述符限制(1024),epoll 无;
- 效率:select 轮询遍历(O (n)),epoll 仅处理就绪事件(O (1));
- 触发方式:epoll 支持水平 / 边缘触发,select 仅支持水平触发;
- 适用:epoll 更适合高并发场景,select 适合简单低并发。
