C++C++后端开发面试真题C++八股

C++面试题与八股文汇总:205 道内存管理、虚函数、智能指针、STL 高频真题分类整理(2026 面经)

面灵AI整理的 C++ 八股合集,覆盖内存管理与指针、智能指针与 RAII、虚函数与多态、C++11 新特性与移动语义、STL 容器、关键字、编译链接、多线程与手撕题,标注近期实际出题的大厂。

收录题目
205 道
统计周期
截至 2026 年 10 月
近期出题公司字节跳动在招腾讯在招百度阿里巴巴美团在招华为快手网易在招小米大疆
面灵AI
21 分钟阅读

C++ 岗的面试,题目几乎围着同一批东西转:new 和 malloc 有什么区别、虚函数到底怎么实现多态、智能指针各自解决什么问题、vector 扩容时发生了什么。腾讯、字节、百度、华为这几家,换了部门、换了面试官,问到的还是这几块。原因不复杂:C++ 把内存、对象生命周期、编译期行为都交给了程序员,面试官想知道你是只会写语法,还是真的清楚一行代码背后发生了什么。

这份合集从公开面经里把 C++ 方向反复出现的八股题抽出来重新归类,一共 205 道题,分九个主题。它只收 C++ 语言本身与 STL,操作系统、计算机网络、数据库这类公共基础不在这里展开,后端岗的完整高频清单可以对照后端开发高频面试题榜单。

怎么用这份题单:

  • 题目后面括号里是近期实际问过这道题的大厂,不代表完整名单,也不代表没标注的公司不问
  • C++ 八股的追问很有层次:先问"是什么",再问"底层怎么实现",最后问"什么时候会出问题"。只背结论,第二层就会卡住
  • 内存管理、虚函数、智能指针、STL 容器底层这四块是几乎所有 C++ 岗的公共必考区,时间不够就先把它们吃透

主题导航:内存管理与指针 · 智能指针与 RAII · 面向对象与虚函数 · C++11 新特性与移动语义 · STL 容器与算法 · 关键字与类型转换 · 拷贝、构造与析构 · 编译链接与程序运行 · 多线程与手撕题

内存管理与指针

  • new 和 malloc 有什么区别?(腾讯 / 百度 / 字节跳动)
  • new/delete 和 malloc/free 能不能混用?new 出来的对象可以用 free 释放吗?(腾讯 / 百度)
  • new 和 malloc 分配的内存分别在哪个区?(字节跳动 / 小米)
  • new 和 malloc 的完整过程是什么,底层用了哪些系统调用?(京东 / 蚂蚁)
  • C++ 的内存管理是怎么做的?有哪些内存分配方式?(腾讯 / 华为 / 快手)
  • C++ 程序的内存分区有哪些?各自存什么?(腾讯 / 字节跳动 / 华为)
  • 除了堆和栈,还有哪些内存区?(腾讯 / 大疆)
  • 堆和栈有什么区别?谁的效率更高?(腾讯 / 字节跳动 / 华为)
  • 为什么要区分堆和栈?(字节跳动 / 网易)
  • static 变量存储在哪个区?(字节跳动 / 腾讯 / 大疆)
  • malloc 的典型实现原理是什么?(腾讯 / 小红书 / 快手)
  • malloc 底层是怎么实现的,和 mmap、brk 是什么关系?(字节跳动 / 百度 / 腾讯)
  • malloc 分配大块内存和小块内存时用的系统调用一样吗?(百度 / 腾讯)
  • malloc 返回的是物理地址还是虚拟地址?(腾讯 / 百度 / 快手)
  • 什么是内存对齐,有什么好处?(腾讯 / 字节跳动 / 华为)
  • 结构体的内存对齐规则是什么,怎么计算结构体大小?(华为 / 腾讯 / 小米)
  • 给一个结构体让你算大小,怎么调整成员顺序来省内存?(大疆 / 华为 / 快手)
  • 空类的 sizeof 是多少,为什么?(腾讯 / 百度 / 快手)
  • 什么是内存泄漏?和内存溢出有什么区别?(百度 / 美团 / 字节跳动)
  • C++ 里内存泄漏是怎么产生的,怎么避免?(华为 / 腾讯 / 字节跳动)
  • 线上程序发生了内存泄漏,怎么排查和定位?(字节跳动 / 小红书 / 快手)
  • 检测内存泄漏有哪些工具?(华为 / 字节跳动 / 阿里巴巴)
  • 什么是野指针,产生的原因是什么,怎么避免?(字节跳动 / 腾讯 / 小米)
  • 野指针和悬空指针有什么区别?(腾讯 / 字节跳动 / 华为)
  • 指针和引用有什么区别?(华为 / 腾讯 / 百度)
  • 指针和数组有什么区别?对数组和指针分别用 sizeof 结果一样吗?(大疆 / 小鹏 / 字节跳动)
  • const int*、int const*、int* const 分别是什么意思?(百度 / 腾讯 / 大疆)
  • strlen 和 sizeof 有什么区别?(地平线 / 百度 / 字节跳动)
  • 程序出现段错误是什么原因,怎么定位?(蔚来 / 百度 / 腾讯)
  • 怎么排查 C++ 程序的 core dump?(腾讯 / 京东 / 百度)
  • C++ 和 Java 在内存管理上有什么区别?(百度 / 京东 / 华为)
面灵AI 面试助手

面试官问「new 和 malloc 有什么区别?」,看浮窗当场给你什么

面试官一开口,浮窗就出要点和能直接念的回答,被追问也接得住。共享屏幕时对面看不见。

腾讯会议文件编辑显示周一 14:32
腾讯会议 · C++ 开发工程师 · 技术一面REC 00:10
面
面试官
我
面试官:
聆听中18:05
Ctrl+Alt+Shift+↑回看
Ctrl+Alt+Shift+↓看新
拖动分割线看面试官那一侧:共享屏幕、窗口录制、截图里都不会出现答案层
浮窗里这道题的回答

核心要点 new 会调构造函数而 malloc 只分配原始内存、new 失败抛 bad_alloc 而 malloc 返回空指针、new 按类型自动算大小、两套必须配对使用

参考回答 最本质的区别是 new 会调用构造函数,malloc 只分配一块原始内存。new 是运算符,底层一般先调 operator new 拿到内存,再在上面构造对象;delete 对应地先析构再释放。其次是失败处理不同:new 失败默认抛 std::bad_alloc,malloc 返回空指针。还有 new 按类型自动算大小、直接返回正确类型的指针,malloc 要自己算字节数再强转。所以两套必须配对使用,new 出来的对象用 free 释放会跳过析构,资源就泄漏了。

智能指针与 RAII

  • 讲一下 C++ 的智能指针,有哪几种?(腾讯 / 字节跳动 / 百度)
  • 为什么要用智能指针,它解决了什么问题?(字节跳动 / 腾讯 / 大疆)
  • 智能指针为什么能自动释放内存?(腾讯 / 快手 / 美团)
  • 智能指针的实现原理是什么?(腾讯 / 华为 / 字节跳动)
  • 智能指针的底层结构是什么?(腾讯 / 字节跳动 / 华为)
  • 说一下 unique_ptr、shared_ptr、weak_ptr 各自的特点和使用场景。(腾讯 / 字节跳动 / 快手)
  • unique_ptr 是怎么实现的,为什么它是独占的?(腾讯 / 字节跳动 / 快手)
  • shared_ptr 的引用计数原理是什么?(字节跳动 / 腾讯 / 哔哩哔哩)
  • shared_ptr 的控制块里有哪些东西?(腾讯 / 字节跳动 / 京东)
  • shared_ptr 是线程安全的吗?(快手 / 字节跳动 / 百度)
  • 智能指针本身线程安全吗,项目里怎么保证安全?(字节跳动 / 小鹏 / 腾讯)
  • shared_ptr 的循环引用问题是什么,怎么解决?(腾讯 / 网易 / 华为)
  • weak_ptr 的作用是什么,能不能访问资源?(字节跳动 / 百度 / 腾讯)
  • weak_ptr 内部是怎么借助 shared_ptr 实现的?(腾讯 / 哔哩哔哩 / 快手)
  • make_shared 和直接用裸指针构造 shared_ptr 有什么区别?(腾讯 / 百度 / 快手)
  • shared_ptr 有哪些优化手段?(腾讯 / 字节跳动 / 快手)
  • 智能指针有什么缺点?(腾讯 / 哔哩哔哩 / 滴滴)
  • 实习或项目里用过哪些智能指针,怎么选?(腾讯 / 华为 / 快手)
  • RAII 是什么,全称是什么?(美团 / 快手 / 字节跳动)
  • 为什么 C++ 的资源管理几乎都围绕 RAII 展开?(字节跳动 / 百度 / 腾讯)
  • 哪些标准库组件用到了 RAII?
  • 析构函数里为什么不应该抛异常?(字节跳动 / 拼多多 / 网易)

面向对象与虚函数

  • C++ 面向对象的三大特性是什么,分别怎么实现?(华为 / 百度 / 快手)
  • 谈谈你对 C++ 封装、继承、多态的理解。(腾讯 / 华为 / 小米)
  • C++ 的多态是怎么实现的?(腾讯 / 华为 / 字节跳动)
  • 静态多态和动态多态有什么区别?(百度 / 腾讯 / 字节跳动)
  • 虚函数是什么,有什么作用?(腾讯 / 字节跳动 / 华为)
  • 虚函数的底层实现是什么?(腾讯 / 字节跳动 / 百度)
  • 虚函数表是什么,作用和基本原理是什么?(腾讯 / 华为 / 美团)
  • 虚函数表是每个对象一份还是每个类一份?(腾讯 / 字节跳动 / 快手)
  • 虚函数表存放在内存的哪个区域?(腾讯 / 百度 / 网易)
  • 虚函数表是什么时候生成的,虚表指针什么时候初始化?(腾讯 / 百度 / 字节跳动)
  • 虚函数表和虚表指针怎么寻址?(快手 / 字节跳动 / 腾讯)
  • 多重继承时虚函数表的内存分布是怎样的?(腾讯 / 快手 / 小米)
  • 虚函数为什么能实现多态?(百度 / 快手 / 美团)
  • 纯虚函数和抽象类是什么,为什么要用纯虚函数?(腾讯 / 华为 / 字节跳动)
  • 虚函数和纯虚函数有什么区别?(腾讯 / 百度 / 华为)
  • 构造函数能不能声明为虚函数?为什么?(腾讯 / 字节跳动 / 百度)
  • 析构函数为什么要定义成虚函数?(腾讯 / 字节跳动 / 小米)
  • 基类析构函数没写 virtual,用基类指针指向派生类对象会有什么问题?(字节跳动 / 京东 / 快手)
  • 析构函数在什么时候应该声明为虚函数?(字节跳动 / 快手 / 网易)
  • 还有哪些函数不能声明为虚函数(内联函数、友元函数、静态成员函数)?(快手 / 腾讯 / 百度)
  • static 成员函数能不能是虚函数?(腾讯 / 百度 / 美团)
  • inline 关键字可以用于虚函数吗?(腾讯 / 字节跳动 / 华为)
  • 构造函数和析构函数里能不能调用虚函数,会触发多态吗?(腾讯 / 字节跳动 / 网易)
  • 子类重写了虚函数,父类构造函数里调用它会怎样?(字节跳动 / 小红书 / 网易)
  • 重载、重写和隐藏有什么区别?(字节跳动 / 腾讯 / 百度)
  • C++ 的函数重载是怎么实现的?(字节跳动 / 百度 / 腾讯)
  • 构造函数和析构函数的调用顺序是怎样的(含继承)?(字节跳动 / 网易 / 华为)
  • 销毁对象时子类和基类析构函数的调用顺序是什么?(腾讯 / 字节跳动 / 快手)
  • 虚继承是什么,解决了什么问题?(网易 / 字节跳动 / 百度)
  • 多重继承会带来哪些问题?(网易 / 字节跳动 / 腾讯)
  • public 继承和 private 继承有什么区别?(腾讯 / 蔚来)
  • struct 和 class 有什么区别?(腾讯 / 字节跳动 / vivo)
  • C++ 有哪些设计原则?(腾讯 / 华为 / 美团)
  • 构造函数里用初始化列表和函数体内赋值有什么区别?(腾讯 / 百度 / 拼多多)
  • const 加在成员函数后面表示什么?(腾讯 / 小米 / 网易)

C++11 新特性与移动语义

  • C++11 引入了哪些重要特性,你都用过哪些?(腾讯 / 百度 / 字节跳动)
  • 说说 C++11 的新特性,并介绍一下智能指针。(美团 / 腾讯 / 华为)
  • 什么是左值,什么是右值?(腾讯 / 网易 / 字节跳动)
  • 左值引用和右值引用有什么区别?(腾讯 / 百度 / 字节跳动)
  • 右值引用可以用来做什么,它在 C++11 里解决了什么问题?(腾讯 / 华为 / 快手)
  • 右值引用的作用和底层实现是什么?(腾讯 / 阿里巴巴 / 美团)
  • 什么是移动语义?(快手 / 网易 / 腾讯)
  • 移动构造函数和拷贝构造函数有什么区别?(网易 / 微软 / 百度)
  • std::move 的作用和底层原理是什么?(字节跳动 / 腾讯 / 快手)
  • std::forward 和 std::move 分别用在什么场景?(字节 / 大疆 / 小红书)
  • 什么是完美转发,怎么实现?(字节跳动 / 哔哩哔哩 / 腾讯)
  • emplace_back 和 push_back 有什么区别?(腾讯 / 字节跳动 / 百度)
  • lambda 表达式的捕获方式有哪些,底层是什么?
  • auto 和 decltype 的区别是什么?
  • nullptr 相比 NULL 好在哪?
  • 什么是 C++ 模板,模板编译之后是什么样子?(腾讯 / 字节跳动 / 米哈游)
  • 模板特化和偏特化是什么?
  • C++ 里的原子变量是怎么实现的?(百度 / 腾讯 / 小米)
  • C++ 协程用过吗?(滴滴 / 百度 / 腾讯)
  • C++ 和 Java 有哪些主要区别?(字节跳动 / 腾讯 / 阿里巴巴)
  • C 和 C++ 的主要区别是什么?(华为 / 字节跳动 / 腾讯)
  • C++ 和 Go 的区别是什么?(腾讯 / 字节跳动 / 百度)
  • C++ 里怎么使用 C 语言的库?(华为 / 哔哩哔哩 / 拼多多)

STL 容器与算法

  • STL 有哪些容器,各自的特点和适用场景?(华为 / 小米 / 百度)
  • 序列容器和关联容器分别有哪些?(字节跳动 / 阿里巴巴 / 美团)
  • 讲一下 STL 某个容器的底层实现原理。(百度 / 腾讯 / 华为)
  • vector 的底层实现是什么?(百度 / 华为 / 字节跳动)
  • vector 是怎么扩容的,扩容时内部会发生什么?(腾讯 / 华为 / 快手)
  • vector 怎么判断应该扩容(size 和 capacity 的区别)?(字节跳动 / 快手 / 百度)
  • vector 扩容有什么问题,为什么 push_back 可能让迭代器失效?(腾讯 / 美团 / 字节跳动)
  • vector 的 push_back 时间复杂度是多少,均摊复杂度怎么算?(字节跳动 / 小红书 / 网易)
  • vector 插入、删除、查找的时间复杂度分别是多少?(百度 / 腾讯 / 中兴)
  • vector 是线程安全的吗?(百度 / 京东 / 美团)
  • STL 容器是线程安全的吗?(美团 / 哔哩哔哩 / 小米)
  • vector 和 list 有什么区别?(腾讯 / 字节跳动 / 华为)
  • vector 和 list 怎么选,遍历速度哪个更快?(腾讯 / 华为 / 字节跳动)
  • vector 和 deque 有什么区别?(腾讯 / 华为 / 大疆)
  • deque 的底层是怎么实现的?(网易 / 华为 / 哔哩哔哩)
  • 数组和 vector 有什么区别?(美团 / 华为 / 小米)
  • map 的底层是什么,为什么用红黑树?(腾讯 / 字节跳动 / 哔哩哔哩)
  • map 的底层为什么用红黑树而不用 AVL 树?(腾讯 / 字节跳动 / 网易)
  • unordered_map 的底层是怎么实现的?(腾讯 / 华为 / 字节跳动)
  • map 和 unordered_map 有什么区别?(百度 / 腾讯 / 小米)
  • map 和 unordered_map 各自的优势和使用场景是什么?(腾讯 / 网易 / 字节跳动)
  • map 与 unordered_map 的增删改查复杂度分别是多少?(腾讯 / 字节跳动 / 小米)
  • unordered_map 的哈希冲突是怎么处理的?(腾讯 / 百度 / 华为)
  • unordered_map 是怎么扩容的?(快手 / 美团 / 腾讯)
  • set 和 unordered_map 的区别是什么?(影石 / 华为)
  • 红黑树的特点是什么,为什么说它是弱平衡?(百度 / 快手 / 美团)
  • 红黑树和平衡二叉树(AVL)有什么区别?(美团 / 腾讯 / 字节跳动)
  • 红黑树相比普通二叉搜索树有什么优势?(华为 / 美团 / 拼多多)
  • 红黑树是怎么通过旋转和变色保持平衡的?(百度 / 字节跳动 / 快手)
  • 往红黑树里插入一个节点的过程是什么?(网易 / 京东 / 百度)
  • 红黑树在哪些场景里会用到?(华为 / 美团 / 腾讯)
  • string 的底层是怎么实现的?(美团 / 华为 / 百度)
  • sort 的底层是怎么实现的?(美团 / 腾讯 / 字节跳动)
  • STL 是怎么管理内存的?(字节跳动 / 腾讯 / 网易)
  • 迭代器失效有哪些场景?

关键字与类型转换

  • static 关键字有哪些用法?(字节跳动 / 小米 / 腾讯)
  • static 修饰全局变量和不修饰有什么区别?(大疆 / 字节跳动 / 百度)
  • static 变量的初始化发生在什么阶段?(腾讯 / 美团 / 大疆)
  • 在头文件里定义 static 变量会有什么问题?(字节跳动 / 拼多多 / 百度)
  • const 关键字有什么作用,应用场景有哪些?(华为 / 腾讯 / 哔哩哔哩)
  • const 和 static 有什么区别?(腾讯 / 华为 / 百度)
  • const 和 #define 宏有什么区别?(字节跳动 / 大疆 / 华为)
  • const 修饰成员函数是什么意思,const 是左结合吗?(腾讯 / 快手 / 小米)
  • volatile 的作用是什么?(美团 / 字节跳动 / 百度)
  • volatile 能保证原子性吗?(美团 / 华为 / 字节跳动)
  • volatile 是怎么限制编译器优化的,什么场景必须用?(字节跳动 / 大疆 / 小鹏)
  • 访问硬件寄存器、中断变量时为什么常常要用 volatile?(大疆 / 小鹏)
  • inline 关键字有什么优缺点?(腾讯 / 华为 / 大疆)
  • inline 和 #define 有什么区别?
  • extern 关键字有什么作用?(腾讯 / 字节跳动 / 百度)
  • extern "C" 有什么作用?(腾讯 / 字节跳动 / 百度)
  • C++ 有哪四种类型转换?(腾讯 / 字节跳动 / 百度)
  • static_cast 和 dynamic_cast 有什么区别,转换失败分别会怎样?(腾讯 / 快手 / 蔚来)
  • dynamic_cast 依赖什么机制才能工作?
  • 强制类型转换有什么风险?
  • #define 宏有什么缺点?
  • typedef 和 using 有什么区别?

拷贝、构造与析构

  • 深拷贝和浅拷贝有什么区别?(美团 / 字节跳动 / 百度)
  • 在 C++ 里怎么实现深拷贝?(华为 / 字节跳动 / 滴滴)
  • 什么时候需要自定义拷贝构造函数?(小鹏 / 美团 / 字节跳动)
  • 什么情况下会调用拷贝构造函数?(华为 / 百度 / 网易)
  • 拷贝构造函数的参数为什么必须是引用?
  • 赋值运算符重载要注意哪些问题(自赋值、异常安全)?
  • 什么是三五法则(Rule of Three / Five)?
  • 构造函数和析构函数分别有什么作用?(华为 / 理想 / 腾讯)
  • C++ 析构函数是什么时候被调用的?(华为 / 字节跳动 / 快手)
  • 如何禁止一个类被拷贝,如何禁止在栈上或堆上创建对象?
  • 什么是 explicit 关键字,作用是什么?
  • 友元函数是什么,有什么利弊?
  • 对象的内存布局是什么样的(含虚表指针和成员变量)?

编译链接与程序运行

  • C++ 的编译过程分哪几步,每一步生成什么?(腾讯 / 字节跳动 / 百度)
  • 预处理阶段做了哪些事?(大疆 / 阿里巴巴)
  • 从 C++ 源码到可执行文件的完整过程是什么?(字节跳动 / 小红书 / 快手)
  • 静态链接和动态链接有什么区别?(字节跳动 / 华为 / 腾讯)
  • 静态库和动态库有什么区别?
  • 头文件里的 #ifndef 和 #pragma once 有什么区别?
  • 一个程序运行起来,内存布局是怎样的?(腾讯 / 字节跳动 / 美团)
  • C++ 的内存模型是什么?(腾讯 / 蔚来 / 华为)
  • C++ 的未定义行为有哪些常见例子?
  • 内联函数、模板、虚函数对代码体积和性能分别有什么影响?

多线程与手撕题

  • C++ 怎么创建一个线程?
  • C++ 里常见的锁有哪些,读写锁怎么使用?(字节跳动 / 小红书 / 网易)
  • mutex、lock_guard 和 unique_lock 有什么区别?
  • 条件变量怎么用,为什么要配合循环判断?
  • 死锁产生的条件是什么,怎么避免?
  • thread_local 是什么,有什么用?
  • 手写 memcpy,要考虑内存重叠。(腾讯 / 华为 / 字节跳动)
  • memcpy 和 memmove 有什么区别?(华为 / 腾讯 / 蔚来)
  • 手写 strcpy,strcpy 会有什么安全问题?(腾讯 / 华为 / 蔚来)
  • 手写一个 shared_ptr。
  • 手写 vector 的核心实现(扩容、拷贝、移动)。
  • 手写单例模式,怎么保证线程安全?
  • 手写 string 类,包含拷贝构造和赋值运算符。
  • 手写线程池。
面灵AI 笔试助手

笔试机考碰上这类手撕代码题

不用切屏:鼠标在「解题」按钮上停 1.2 秒,AI 读完题,把思路、复杂度和代码直接贴在考试页上方。

2026 届秋招 · C++ 开发工程师笔试nowcoder.com/exam剩余 42:10交卷
已进入全屏防作弊模式,切屏 / 退出全屏将被记录
Online Assessment
算法编程题 · 3 / 12

实现 void* my_memcpy(void* dst, const void* src, size_t n),要求源和目标内存有重叠时结果依然正确。
示例:char s[] = "abcdef"; my_memcpy(s + 2, s, 4) → s 变为 "ababcd"

solution.cpp
void* my_memcpy(void* dst, const void* src, size_t n) {
// TODO
}
面灵AI
已连接编程余 27min
悬停回看
把鼠标悬停到下方「解题」按钮 1.2 秒
AI 会自动截屏并解答
也可以直接按 Ctrl+Alt+Shift+Enter,手不用离开键盘
悬停看新
编程
5min/题
解题
^⌥⇧⏎
加页
^⌥⇧S
重置
悬停 0.8s
退出
悬停 2.5s
悬停 1.2 秒触发,焦点不离开考试页——不切屏、不切窗口;浮窗可调到近乎透明,第二机位拍到的几乎只剩考试页本身

备考重点

C++ 八股的核心区别在于它考的是"这行代码背后发生了什么",不是"语法怎么写"。内存管理和虚函数是出现频率最高的两块,几乎每场 C++ 岗面试都会碰到,但很少停在"是什么",追问会落到"虚函数表在内存哪个区、什么时候生成""new 底层调了什么""智能指针的控制块里有什么"。这几个底层问题能讲清楚,整个 C++ 面试的基础就稳了。

建议按这条主线准备:先把一个对象从创建到销毁的全过程走一遍(内存分配、构造函数、虚表指针初始化、析构、释放),再顺着每一步补"为什么"和"出问题会怎样"。内存对齐、sizeof、构造析构顺序这些容易被忽略的小题,实际上经常作为现场口述或手写题出现,值得单独过一遍。

C++11 之后的内容(智能指针、右值引用、移动语义、lambda)已经是常规必考项,不是加分项。能说清"移动语义省掉了哪一次拷贝"比背出右值引用的语法更能拿分。如果目标是后端或基础架构岗,STL 容器的底层实现(vector 扩容、unordered_map 哈希冲突、红黑树)加上多线程与锁,会是权重更高的一组;而嵌入式、自动驾驶和机器人方向的岗位,则更偏重 volatile、内存对齐、extern "C" 和链接这类贴近底层的题。

常见问题

这份题单是怎么整理出来的?

来源是公开面经,把 C++ 方向反复出现的八股题抽出来重新归类,不包含面灵用户的面试内容。括号里标注的是近期实际问过这道题的大厂,只作参考,不代表完整名单。

C++ 面试八股应该先准备哪些部分?

优先顺序建议是:内存管理(堆栈、new/malloc、内存泄漏)→ 虚函数与多态 → 智能指针 → STL 容器底层(vector、map、unordered_map)→ C++11 新特性。这五块是各大厂 C++ 岗的公共必考区,剩下的关键字、编译链接、多线程再按目标岗位补。

面试官问虚函数,一般会追问到什么程度?

通常是三层:先问什么是虚函数、怎么实现多态,再追问虚函数表和虚表指针的存放位置与生成时机,最后落到边界问题,比如构造函数能不能是虚函数、析构函数为什么要写成虚函数、构造函数里调用虚函数会怎样。能画出带虚表指针的对象内存布局,比背结论更容易拿分。

没有 C++ 项目经验,这部分怎么准备?

优先吃透原理和对比关系(new 对 malloc、unique_ptr 对 shared_ptr、map 对 unordered_map),这是追问最集中的区域。再自己手写一遍简化版的 shared_ptr 和 vector,跑通之后再回答细节问题会踏实很多。

想要一份属于你的题库?

按你的目标公司和岗位,定制专属高频题

这份合集是官方按岗位整理的通用版。告诉面灵AI 你要面的公司和岗位,结合你的简历,生成一份只属于你的近期高频题和参考回答。

面试实时辅助

下载面灵AI桌面客户端,面试 / 笔试时 AI 实时听题辅助作答。