面试真题

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

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

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

按难度

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

分类:C++ · 难度:中等52 道 · 点击进入查看参考答案

中等C++
auto,auto&,auto&& 的作用和区别
结论:auto按值类型推导,auto&为左值引用,auto&&为转发引用(万能引用);核心要点:1.auto声明变量拷贝初始化,忽略顶层const和引用;2.auto&必须绑定左值,可修改原对象且零拷贝;3.auto&&…
🎤 阿里巴巴
中等C++
C++多继承是什么?有什么问题?怎么解决的?
多继承指一个派生类同时继承多个基类,可组合多类能力。问题:菱形继承引发数据冗余与二义性,如B、C继承A,D继承B和C,D内含两份A成员,访问A成员时产生歧义。解决:采用虚继承(virtual public),使公共基类在…
🎤 字节跳动
中等C++
C++多态相关
C++多态相关核心是实现机制:虚函数与虚表。基类声明virtual函数,派生类重写(签名一致);每个含虚函数的类有虚函数表(vtable)存函数指针,对象内含虚表指针(vptr)指向所属类vtable。调用虚函数时经vp…
🎤 字节跳动
中等C++
C++什么时候生成默认的构造函数?
编译器在需要时合成默认构造函数(无参):1.类有虚函数(需初始化vptr);2.有虚继承(需设虚基类指针);3.基类无默认构造或默认不可访问;4.成员对象无默认构造。若用户已定义任意构造函数,编译器不再合成默认版(可用=…
🎤 百度
中等C++
C++什么时候生成默认拷贝构造函数?
默认拷贝构造在用户未定义且被调用时由编译器合成,执行成员级浅拷贝。触发场景:同类型对象初始化(A a2=a1;)、函数按值传参、返回非引用对象。合成条件:类无用户拷贝构造;若类含虚函数,合成版会正确复制vptr指向同类型…
🎤 大疆
中等C++
C++中const和static的使用
结论:const表示只读不可修改,static表示静态存储或类级共享,二者常结合。要点:const修饰变量只读,修饰指针分顶层/底层const,修饰成员函数保证不修改对象;static修饰局部变量延长生命周期至程序结束,…
🎤 网易
中等C++
C++weak_ptr
结论:weak_ptr是弱引用智能指针,配合shared_ptr使用,不增加引用计数,解决循环引用和临时所有权。要点:1.由shared_ptr构造如auto wp=weak_ptr(sp); 2.不拥有对象,不影响生命…
🎤 字节跳动
中等C++
const与static关键字的用法,与this指针的关系
结论:const修饰成员函数承诺不修改对象;static表示类级别共享,无this指针。要点:1.const用法:成员变量初始化后不可变;成员函数尾部加const,函数内不能改非static成员,此时this类型为con…
🎤 腾讯
中等C++
extern的作用,为什么要用extern“C”,extern变量在哪个数据段?
结论:extern用于声明外部链接的变量或函数,表明其定义在其他编译单元;extern "C"指示C++编译器按C语言规则编译链接,避免名称修饰导致符号不匹配;extern全局变量根据是否初始化分别存于.data或.bs…
🎤 虎牙
中等C++
lambda 表达式底层实现原理
结论:lambda底层被编译器翻译成重载operator()的匿名闭包类。核心要点:1. 编译器为每个lambda生成唯一类,捕获变量成为该类成员变量;2. 按值捕获通过拷贝构造存入,按引用捕获存引用;3. 无捕获lam…
🎤 虎牙
中等C++
lambda和bind的区别
结论:lambda更现代、可读且易优化,bind用于旧式参数绑定。核心差异:1. 写法:lambda直接写代码块,bind需用std::placeholders重排;2. 捕获:lambda可显式捕获局部变量,bind需…
🎤 腾讯
中等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利用引用…
🎤 网易
题目整理自公开面经,答案由校招宝自研生成,仅供参考