准备 Linux C++ 面试,建议从知识体系 + 实战编码 + 项目经验 + 常见面试题四个维度系统准备。下面给你一份比较实用的路线图。
一、C++ 语言基础(必考)
重点不在“会用”,而在“理解原理”。
1. 语法与特性
- const / constexpr
- 引用 vs 指针
- 函数重载、默认参数
- 面向对象:封装、继承、多态(虚函数表)
- 构造 / 析构顺序
- 拷贝构造、移动构造、拷贝赋值、移动赋值
- 深拷贝 vs 浅拷贝
2. 内存与对象模型
- 栈 / 堆 / 全局区 / 文本段
- new / delete 与 malloc / free 区别
- 内存对齐
- 智能指针(重点):
unique_ptr
shared_ptr(引用计数)
weak_ptr
- 循环引用问题
3. C++11/14/17 重点
auto / decltype
- lambda 表达式
std::function / std::bind
- 右值引用、移动语义
std::thread
nullptr
- 范围 for
✅ 建议:能手写 shared_ptr simplified 实现
二、Linux 系统基础(高频)
Linux C++ 岗非常看重系统能力。
1. 进程与线程
- 进程 vs 线程
- fork / exec
- 僵尸进程 / 孤儿进程
- 线程同步:
- 死锁产生条件 & 避免
2. 文件系统 & IO
- 文件描述符
- 阻塞 / 非阻塞 IO
- 多路复用:
- 零拷贝(sendfile / mmap)
3. 网络基础
- TCP 三次握手 / 四次挥手
- TIME_WAIT 原因
- TCP 粘包
- UDP vs TCP
- 拥塞控制 / 流量控制(了解)
三、数据结构与算法(手写代码)
Linux C++ 面试通常现场写 C++ 代码。
常考
- 链表(反转、环检测)
- 二叉树(遍历、递归)
- 栈 / 队列
- 排序(快排、归并)
- 哈希表
- 字符串处理
✅ 建议:
- 用 C++ STL 写(
vector, map, unordered_map)
- 注意边界和异常
四、STL 与底层原理
面试官常问“你怎么用 STL 的”。
- vector 扩容机制
- map vs unordered_map
- 迭代器失效
- 仿函数
- allocator(了解)
五、项目准备(非常重要)
没有项目 = 很容易被刷。
推荐项目方向
- 简易 HTTP 服务器(epoll + 线程池)
- 聊天室(TCP + 多线程)
- 内存池
- 日志系统
- 协程库(进阶)
项目要能回答:
- 为什么这么做?
- 遇到什么问题?
- 怎么优化的?
- QPS / 延迟多少?
六、常见面试题示例
malloc 和 new 的区别?
- 虚函数是怎么实现的?
shared_ptr 线程安全吗?
epoll 水平触发和边缘触发区别?
- 死锁怎么排查?
- 程序崩溃如何定位(core dump)?
- 如何处理 TCP 粘包?
七、复习资料推荐
- 《C++ Primer》
- 《Effective C++》
- 《Linux 高性能服务器编程》
- 《UNIX 网络编程》
- LeetCode(中等题为主)
- 自己搭 Linux 环境(Ubuntu / CentOS)
如果你愿意,我可以:
- 给你一份 2 周 / 1 个月复习计划
- 或直接 模拟一次 Linux C++ 面试
- 或针对 初级 / 中级 / 高级 分别准备
你现在是几年级 / 有无项目经验?