追一科技 C++ 一面
1)C++ 多态和继承
- 继承:子类复用父类成员,表达 is-a 关系。
- 多态:同一接口,不同实现;运行时通过基类指针/引用调用子类重写函数。
- 条件:基类函数要加 virtual,通过指针/引用调用才是运行时多态。
2)C++ 智能指针如何自动销毁
- 本质:RAII,智能指针对象析构时自动释放资源。
- unique_ptr:独占所有权,离开作用域自动 delete。
- shared_ptr:引用计数,计数为 0 时销毁对象。
- weak_ptr:不增加引用计数,解决循环引用。
3)虚函数的作用
- 支持运行时多态(动态绑定)。
- 通过虚函数表 vtable 在运行时决定调用哪个重写函数。
- 常用于接口抽象、框架扩展、解耦。
4)TCP 通过什么保证可靠传输
- 序列号 + ACK 确认应答
- 超时重传
- 滑动窗口(流量控制)
- 拥塞控制(慢启动、拥塞避免等)
- 校验和 + 按序重组 + 去重
5)操作系统主要功能
- 进程/线程管理(调度、同步、通信)
- 内存管理(分页、虚拟内存)
- 文件系统管理
- 设备管理(I/O、中断)
- 用户接口与系统调用
- 安全与权限控制
6)排序算法时间复杂度(最低)
- 基于比较的排序理论下界:O(n log n)。
- 非比较排序(计数/桶/基数)在特定条件下可达 O(n)。
7)如何防止类被继承
- C++11:class A final { ... };
- 或者构造函数设为 private/protected 并限制创建(不如 final 直观)。
8)出现死锁的原因
死锁四个必要条件同时满足:
- 互斥
- 请求并保持
- 不可剥夺
- 循环等待
常见场景:线程 A 持有锁1等锁2,线程 B 持有锁2等锁1。 预防:固定加锁顺序、一次性申请资源、超时锁、死锁检测。
9)Go 中 goroutine 的底层调度
- Go 调度模型:G-M-PG:goroutineM:内核线程P:处理器(调度上下文)
- 调度器把大量 G 映射到少量 M 上执行。
- 特性:工作窃取(work stealing)、抢占式调度(新版本更完善)、网络 I/O 与调度器协作(netpoll)。
- 优势:轻量、创建快、切换成本低。
10)手撕:双栈实现队列(push / pop)
#include <stack>
#include <stdexcept>
using namespace std;
class MyQueue {
private:
stack<int> in_st, out_st;
void moveIfNeeded() {
if (out_st.empty()) {
while (!in_st.empty()) {
out_st.push(in_st.top());
in_st.pop();
}
}
}
public:
void push(int x) {
in_st.push(x);
}
int pop() {
moveIfNeeded();
if (out_st.empty()) throw runtime_error("queue is empty");
int v = out_st.top();
out_st.pop();
return v;
}
int front() {
moveIfNeeded();
if (out_st.empty()) throw runtime_error("queue is empty");
return out_st.top();
}
bool empty() const {
return in_st.empty() && out_st.empty();
}
};
- 均摊复杂度:push O(1),pop O(1)(均摊)。
11)设计一个 HTTP Server 框架(面试回答思路)
可以按分层讲:
- 网络层:epoll + 非阻塞 socket(Reactor)
- 协议层:HTTP 请求解析(请求行、header、body)
- 路由层:method + path 映射 handler
- 业务层:中间件机制(日志、鉴权、限流)
- 并发模型:主线程 accept + 线程池处理
- 连接管理:Keep-Alive、超时关闭
- 稳定性:优雅退出、异常处理、监控指标(QPS、RT、错误率)
- 可扩展:插件化 handler、配置热更新
背不下来直接说: “我会用 Reactor + 线程池做高并发网络层,上层拆协议解析、路由和中间件,保证高性能同时兼顾可维护和可扩展。”
C++面试总结 文章被收录于专栏
本专栏系统梳理C++面试高频考点,从基础语法、内存管理、STL与设计模式,到操作系统与项目实战,结合真实面试题深度解析,帮助开发者高效查漏补缺,提升技术理解与面试通过率,打造扎实的C++工程能力。

查看7道真题和解析