后端校招 | 高频 C++ 面试题整理
🎯 一、为什么专门做一期 C++ 面试题分享?
其实很多后端同学在面试准备时都有发现一个问题即
-
Java 岗位题资源非常多
-
但 C++ 后端面试内容分散、缺少整合
所以我整理了 GitHub 上高频 C++ 后端面试题 + 答案解析,今天精选 5 道拆解给大家看
🔍 二、精选高频 C++ 面试题答题技巧
1. new 和 malloc 的区别?
特性 | new |
malloc |
---|---|---|
返回类型 | 指定类型指针 | void* |
构造函数 | 会调用构造函数 | 不会调用 |
释放方式 | delete |
free |
重载支持 | 支持重载 | 不支持 |
异常处理 | 分配失败抛异常 | 返回 NULL |
🔹 答题建议: 不要只背表格,重点突出:“new 是操作符,支持构造/析构函数;malloc 是函数,只负责内存分配。”
2. 虚函数表机制(vtable)是怎么实现的?
-
编译器为每个有虚函数的类生成一个虚函数表(vtable)
-
每个对象包含一个指向该类虚函数表的指针(vptr)
-
虚函数调用时,通过 vptr 查找 vtable 中对应函数地址,进行动态绑定
🔹 答题建议: 可配合画图说明 Base* p = new Derived(); 时如何通过 vptr 调用 Derived 的虚函数。
3. C++11 中 std::move 和右值引用的作用?
std::move 不是移动函数,而是 将左值转换为右值引用
搭配右值引用,实现 资源的所有权转移
可避免不必要的深拷贝,提高性能(如返回大型对象、容器优化)
🔹 示例:
std::vector<int> v1 = {1, 2, 3};
std::vector<int> v2 = std::move(v1); // v1 的资源“偷”给了 v2
4. 内存对齐规则 + 字节对齐面试陷阱
面试官问:“一个结构体如下所示,sizeof 是多少?”
struct A {
char a;
int b;
char c;
};
-
sizeof(A) 是 12,因为会有字节对齐填充字节
-
答题时要讲:按最大成员对齐 + 编译器对齐限制
🔹 建议配合图示解释每个字段的起始位置,展示你真的理解了原理。
5. 智能指针 shared_ptr vs unique_ptr 区别
类型 | 是否共享所有权 | 支持复制? | 场景 |
---|---|---|---|
unique_ptr |
❌ 仅一个拥有者 | ❌ 不可复制 | 独占资源管理,如文件句柄 |
shared_ptr |
✅ 多个共享 | ✅ 可复制 | 多方共享数据,如缓存池 |
🔹 答题建议: 强调生命周期管理、引用计数机制、循环引用陷阱(可联讲 weak_ptr)
🎁 GitHub 面试题项目推荐
我把这些 C++ 面试题 + 操作系统 + Redis + 数据库等内容,整理成了一个开源项目:
📘 项目地址: 👉 0voice/Campus_recruitment_interview_questions
✨ 项目亮点:
✅ 每道 C++ 高频题都有详细答案和笔记
✅ 支持一键搜索你想复习的知识点
✅ 包含腾讯、字节、阿里真实面经+题目
持续更新维护中,欢迎 star ⭐
#面试题##面经##大厂##秋招##应届生#