面试真题

技术面 + 非技术面高频问题 · 企业真题标题 + 校招宝自研参考答案
面试真题
2508 道
技术岗
641 道
非技术岗
1867 道
当前筛选
85 道

按赛道技术岗以技术方向细分;非技术岗按「结构化 / 半结构化 / 无领导 / HR / 职能」细分

按方向/形式点选即筛,再点「全部」还原

按难度

按企业点选查看该公司全部题目

分类:C++85 道 · 点击进入查看参考答案

中等C++
lambda引用捕获的风险
结论:引用捕获不延长变量生命周期,易导致悬空引用和未定义行为。核心风险:1. 返回含引用捕获的lambda,局部变量销毁后调用即悬空;2. 多线程/异步中,原作用域提前结束;3. 循环中用引用捕获循环变量,所有lambd…
🎤 腾讯
中等C++
malloc底层实现以及线程安全
结论:malloc底层常用ptmalloc(glibc),向内核brk/mmap申请堆/匿名映射,分割为内存块管理;线程安全靠arena锁与线程本地tcache。原理:分配器维护fast/small/large bins…
🎤 腾讯
中等C++
malloc是如何分配内存的,free怎么知道该释放多少内存?
结论:malloc从系统申请大块内存池(brk堆或mmap映射)后自行切割;free通过块头部元数据知大小。原理:实际分配时多划出头部(如8字节存size和标志),返回用户指针指向数据区;free将指针前移获头部读siz…
🎤 腾讯
中等C++
map的两种扩容方式
结论:std::map基于红黑树,无容量扩容概念,节点动态创建;若指unordered_map,其扩容方式为rehash,常见两种策略:桶数组翻倍(2的幂)或按质数序列递增。原理:map是节点式容器,插入新元素直接分配节…
🎤 Momenta
中等C++
map和unordered_map的区别?红黑树与AVL树的区别?
结论:map底层红黑树,有序、查找O(log n);unordered_map底层哈希表,无序、平均O(1)。红黑树弱平衡,AVL强平衡。要点:map元素按key比较排序,支持范围查询,空间开销每个节点含颜色等;unor…
🎤 Shopee
中等C++
map是线程安全的吗?如何实现线程安全的map
结论:std::map不是线程安全的,多线程并发读写需外部同步。实现方式:1) 粗粒度锁:用std::mutex包裹所有操作,写时独占,读时共享(shared_mutex);2) 细粒度分段锁:将key空间分片,每片独立…
🎤 字节跳动
中等C++
printf是怎么实现的
结论:printf是C标准库函数,解析格式串与可变参数,格式化后通过系统调用write输出。原理:1. 用va_list取可变参数,按%d/%s从栈或寄存器取参;2. 转字符串写入用户态stdout缓冲区(行缓冲);3.…
🎤 字节跳动
中等C++
static_cast与dynamic_cast的区别?dynamic_cast的原理
结论:static_cast是编译期类型转换,无运行时检查;dynamic_cast用于多态类型向下转型,有RTTI运行时检查,失败返回nullptr或抛异常。区别:1. static_cast可转相关类型(数值、向上转…
🎤 英伟达
中等C++
std::move与std::forward的区别
结论:std::move无条件将实参转为右值引用以触发移动语义;std::forward完美转发,保留实参原值类别。原理:move本质是static_cast<T&&>(t),仅类型转换不移动数据;forward利用引用…
🎤 网易
中等C++
unique_ptr是怎么实现的?unique_ptr 和 shared_ptr 删除器的设计差异?
结论:unique_ptr通过独占裸指针和删除器实现单一所有权无引用计数;shared_ptr通过控制块含引用计数和删除器实现共享。核心要点:unique_ptr实现为模板类含T*指针和删除器(默认delete),禁止拷…
🎤 哔哩哔哩
中等C++
weak_ptr如何实现的?如何使用weak_ptr?
结论:weak_ptr是弱引用智能指针,不拥有对象所有权,用于安全观测shared_ptr管理对象。要点:实现上内部含指向shared_ptr控制块(含强引用计数、弱引用计数、对象指针)的指针,构造/赋值只增弱引用计数不…
🎤 哔哩哔哩
中等C++
编译、链接、重定位
结论:编译将源码转汇编,汇编生成可重定位目标文件,链接合并目标文件并解析符号,重定位修正地址。要点:编译分预处理、编译、汇编,检查语法生成汇编,产出.o文件含未决符号引用且地址从0始;链接进行符号解析和重定位,把相对偏移…
🎤 百度
中等C++
类成员初始化顺序?
结论:C++类成员初始化顺序固定为:静态成员(程序启动)->基类构造->按声明顺序初始化非静态成员->构造函数体。要点:1)静态成员变量在首次使用前初始化,且只一次;2)基类构造函数先于派生类;3)非静态成员按在类内声明…
🎤 小米
中等C++
类对象的大小由哪些因素决定?
结论:C++类对象大小由非静态数据成员、虚函数指针及内存对齐填充决定。因素:1)非静态成员变量总和(静态成员、成员函数不占对象空间);2)若存在虚函数或继承虚类,对象含vptr(通常8字节,32位4字节);3)继承时基类…
🎤 虎牙
中等C++
C++ 四种强制类型转换
结论:C++提供四种命名强制转换以增强类型安全:static_cast、dynamic_cast、const_cast、reinterpret_cast。要点:static_cast用于编译期已知类型的转换,如数值提升、…
🎤 百度
中等C++
C++ Pimpl了解吗?有什么好处?
结论:Pimpl(Pointer to Implementation)是隐藏类实现细节的惯用法,在头文件仅前置声明实现结构体并用智能指针持有。要点:类A中定义struct Impl; std::unique_ptr<Im…
🎤 阿里巴巴
中等C++
C++17的常用特性
结论:C++17常用特性提升表达力与性能。要点:结构化绑定auto [a,b]=pair简化解构;if constexpr编译期分支优化模板;std::optional表示可能无值,std::variant类型安全联合,…
🎤 阿里巴巴
中等C++
C++调用C函数,C调用C++函数,原理是什么?
结论:C++与C互调核心在于名称修饰(name mangling)不同,用extern "C"统一符号。要点:C++为支持重载将函数名修饰为复杂符号(如_Z3fooi),C保持原样(foo);C++调用C:在C++中用e…
🎤 思必驰
中等C++
double 转 int64 用 `reinterpret_cast` 和 `static_cast` 区别
结论:static_cast做数值类型转换(截断小数),reinterpret_cast仅重新解释比特模式不做数值转换。区别:1.static_cast<int64_t>(d)将double值3.14转为int64_t的…
🎤 百度
中等C++
vector处理大规模数据时的优化
结论:主要通过减少内存重分配、降低拷贝开销来优化。核心要点:1. 预先reserve()预留足够容量,避免多次扩容拷贝;2. 使用emplace_back()原地构造对象,减少临时对象拷贝;3. 若数据量超内存,采用分块…
🎤 Momenta
题目整理自公开面经,答案由校招宝自研生成,仅供参考