C++
精通预计深耕 6 个月+星团 编程语言
岗位需求
1 核心 · 0 加分
在职岗位将其列为技能要求
核心岗位薪资带
28k-60k
核心要求岗位的月薪区间
需求趋势
上升 0稳定 1收缩 0
核心要求岗位的趋势分布
面试题库
高频真题 · 参考答案随题展开1. 智能指针 unique_ptr、shared_ptr、weak_ptr 各适用什么场景?
unique_ptr 表达独占所有权,零开销抽象(大小等于裸指针,默认删除器下),不能拷贝只能移动,函数传参用值或引用皆可,是默认选择,数组特化会正确调用 delete[]。shared_ptr 用控制块里的原子引用计数实现共享所有权,拷贝增减计数,归零释放对象,代价是原子操作开销与控制块内存;make_shared 一次分配对象加控制块更高效且异常安全;循环引用(A 持 B、B 持 A)导致永不归零,需把回边换成 weak_ptr。weak_ptr 观察不拥有,lock() 尝试升级为 shared_ptr 处理缓存与观察者场景。线程安全性要分清:计数原子安全,指向的对象本身仍需自行同步。答出默认 unique、跨所有权共享 shared、破环 weak 三句结论即佳。
2. 什么是 RAII?为什么它是 C++ 资源管理的核心?
RAII 指把资源(内存、文件句柄、锁、连接)的生命周期绑定到栈对象:构造获取、析构释放,资源管理变成类型问题而非流程问题。收益是异常安全——栈展开时局部对象析构自动执行,不会泄漏;是无差错早退——多处 return 都走同一析构路径;是作用域即文档。标准库实例:智能指针管内存、lock_guard 管锁、fstream 与 jthread 管句柄与线程。手写时遵循三法则或五法则(析构、拷贝构造、拷贝赋值,加移动构造与移动赋值),或 rule of zero 直接用值与智能指针成员避免手写。对比 Go 的 defer 与 Java 的 try-with-resources,RAII 由作用域自动触发且零抽象成本。答出异常安全论证与三/五法则即完整。
3. 移动语义与完美转发解决什么问题?
移动语义让资源(堆内存、句柄)的所有权可被「窃取」而非深拷贝:右值引用 T 与对左值的 std::move 强转为将亡值,vector 扩容时移动元素只搬指针不搬数据,性能质变;noexcept 的移动构造还让容器敢于移动,否则退回拷贝。完美转发解决参数透传时的值类别保持:模板参数 T 与万能引用(T 加对右值引用折叠)推导出左值或右值,再用 std::forward 小于 T 大于 恢复原始类别,使包装函数(emplace、make_shared)把参数原样转给构造器。注意区分 std::move 只是转换不移动任何东西,被移动对象处于有效未指定状态只能重新赋值或析构。答出右值与将亡值概念、折叠规则示例(传 int 与 int 均可)即优秀。
4. 虚函数表机制与对象内存布局是怎样的?
含虚函数的类对象头部藏一个 vptr 指向该类的虚函数表 vtable,表内是各虚函数的实际地址加 RTTI、偏移信息。调用 p 等于 f() 编译为通过 vptr 查表间接调用,一次额外间接带来动态多态;单继承下基类子对象在前,派生类只增不改虚表布局;多继承有多个 vptr 与 thunk 调整 this;虚继承引入虚基表解决菱形公共基类多副本。构造顺序基类到派生类,构造期间虚表尚未指向最终覆盖版本,故构造函数内虚调用不多态;析构必须虚函数,否则经基类指针 delete 派生对象是未定义行为,纯虚析构还要给定义。成本上每类一张表、每对象一个指针,且妨碍内联。能画出单继承内存图并解释构造期与析构虚表状态即满分。
5. STL 容器如何选型?迭代器失效规则要注意什么?
连续内存的 vector 随机访问 O(1)、尾部摊还 O(1),缓存最优,是默认选择,中间插删 O(n);deque 两端摊还 O(1) 但分段存储;list 双向链表任意位置 O(1) 插删但访问 O(n)、缓存差,list 加 forward_list 适用频率极低;关联容器有序 map 与 set 基于红黑树 O(log n) 有序遍历;unordered 系哈希桶平均 O(1) 无序。字符串 sso 小字符串优化避免堆分配。迭代器失效是高频坑:vector 扩容使全部失效,中间 erase 使其后失效,删除用 it 等于 erase(it) 接住返回值;unordered rehash 使迭代器失效但引用仍有效;list 与 map 仅被删节点失效。multi 系与透明比较器(C++14 起 find 泛型查找)是延伸点。答出默认 vector 加失效规则细节即佳。
官方文档
2 条标准库权威参考中文版,查 API 与语义细节必备
标准、会议与官方新闻门户,跟踪语言演进
推荐教程
2 条免费高质量连载教程,从语法到现代 C++ 最系统
中文基础语法速览,适合入门与快速复习
推荐课程
0 条待共建——资源由编辑部持续遴选补充。
上手实践
1 条免费练习加导师评审,练现代 C++ 惯用法
难度档决定星等与难度分权重(入门 1 / 进阶 2 / 精通 3);学习资源由编辑部遴选并持续维护, 经验心得欢迎在上方「知识分享」区署名分享。

