面试真题

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

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

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

按难度

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

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

简单C++
explicit` 的作用?
结论:explicit修饰C++构造函数,禁止隐式类型转换。原理:1.单参数构造函数默认允许隐式转换如A a=10;调用构造。2.加explicit后只能显式A a(10);阻止意外转换。3.提升类型安全,避免如bool…
🎤 百度
简单C++
if/switch中的初始化器
结论:C++17起支持if/switch初始化器,允许在条件前声明并初始化变量,其作用域仅限控制结构内部。原理:语法扩展为if (init; cond)和switch (init; cond),编译器先执行init再判断…
🎤 阿里巴巴
简单C++
map和unordered_map相关
结论:二者均为关联式键值容器,禁止重复key(multimap允许),主要差异在底层与有序性。核心要点:map以红黑树实现,迭代器遍历得到升序序列,查找稳定O(log n);unordered_map以哈希桶实现,遍历顺…
🎤 腾讯
简单C++
map可以寻址吗?
结论:map不支持像数组那样的常数时间随机寻址(按整数下标访问),但提供按键查找的operator[]。原理:map底层红黑树节点分散在堆上,内存不连续,仅提供双向迭代器而非随机访问迭代器,因此不能通过索引直接跳转;op…
🎤 Momenta
简单C++
new和malloc的区别?
结论:new是C++运算符,malloc是C标准库函数,二者在类型、构造、失败处理等方面不同。要点:1.new自动计算所需内存大小并返回对应类型指针,malloc需显式传入字节数且返回void*需强转;2.new分配内存…
🎤 美团
简单C++
std::sort 使用了哪种排序算法?
结论:std::sort通常实现为内省排序(introsort),混合快速排序、堆排序和插入排序。原理:1. 先以快排递归分区;2. 当递归深度超过2*log2(N)时改用堆排,避免快排最坏O(N^2);3. 数据量小(…
🎤 金山
简单C++
关键字override,final的作用
结论:C++中override显式标记函数重写基类虚函数,编译器强制检查签名匹配;final修饰类阻止继承,修饰虚函数阻止进一步重写。原理:override是上下文关键字,用于编译期多态检查,若未真正重写则报错;fina…
🎤 腾讯
简单C++
C++ 编译过程(四个阶段)
结论:C++编译分为预处理、编译、汇编、链接四个阶段。核心要点:预处理处理#指令,展开宏、包含头文件、条件编译,生成.i文件;编译将预处理代码进行词法、语法、语义分析及优化,翻译成汇编代码生成.s文件;汇编把汇编指令逐条…
🎤 百度
简单C++
vector和array的区别
结论:array是编译期固定大小的栈数组封装,vector是运行时动态大小的堆数组。核心要点:1. 大小:array<T,N>大小N编译确定不可变;vector可动态resize;2. 内存:array通常在栈(或全局区…
🎤 Momenta
中等C++
多态+内存对齐
结论:多态通过虚函数表实现运行时动态绑定,内存对齐以空间换时间提升访问效率。核心要点:1.多态:基类含虚函数时对象含vptr指向vtable,调用虚函数按实际对象类型查表;纯虚函数定义接口。2.内存对齐:编译器按成员大小…
🎤 网易
中等C++
非虚函数和虚函数的调用原理
非虚函数与虚函数核心在绑定时机与机制:1.非虚函数:编译期静态绑定,编译器根据调用者的静态类型直接确定函数入口地址,生成call指令跳转到固定地址;不依赖对象运行时类型,无多态。2.虚函数:运行期动态绑定,每个含虚函数的…
🎤 ToDesk
中等C++
构造函数抛出异常的问题
结论:构造函数抛异常表示对象创建失败,C++会逆序析构已构造的基类与成员,但对象本身不会调用析构。要点:1)栈对象:编译器自动清理已初始化成员(如string);2)堆对象:new失败不返回指针,但构造函数体内裸资源分配…
🎤 百度
中等C++
简述智能指针种类以及使用场景
结论:C++智能指针主要有unique_ptr、shared_ptr、weak_ptr。unique_ptr独占所有权,不可拷贝只能移动,适用单一所有者资源管理;shared_ptr引用计数,多指针共享对象,计数为0释放…
🎤 小米
中等C++
请简述C++类型推导用法
结论:C++类型推导用于简化代码,通过auto、decltype和模板推导自动确定类型。核心要点:auto从初始化表达式推导变量类型,如auto x = 5;推导为int;decltype推导表达式类型而不计算,保留引用…
🎤 京东
中等C++
请简述function,lambda,bind之间的关系
结论:std::function是通用函数包装器,lambda是匿名闭包,bind用于参数绑定,三者实现可调用对象统一。要点:lambda就地定义,编译器生成轻量functor,高效;std::function类型擦除可…
🎤 网易
中等C++
如果让你实现菱形继承,你怎么做?
使用虚继承解决菱形继承的二义性和数据冗余。核心要点:在中间基类继承顶层基类时加virtual关键字,使顶层基类子对象在最终派生类中只有一份;非虚继承会导致两份基类成员,访问时产生二义性;虚继承通过虚基类表指针共享同一实例…
🎤 京东
中等C++
如何定义只能在堆上生成对象的类
将析构函数设为private或protected并提供静态工厂方法,禁止栈上分配。核心要点:栈对象离开作用域需调用析构,若析构私有则编译报错;堆对象由delete显式调用,可在类内静态方法或友元中访问私有析构;也可将构造…
🎤 字节跳动
中等C++
手撕 std::vector
结论:std::vector是连续内存动态数组,手撕需实现内存管理、扩容和常用接口。核心要点:1. 内部维护起始指针data、大小sz、容量cap;2. 构造可分配cap空间,析构释放;3. push_back:若sz=…
🎤 拼多多
中等C++
手撕 unique_ptr
结论:unique_ptr是独占所有权智能指针,手撕需实现移动语义并禁止拷贝。核心要点:1. 内部持有裸指针T* ptr和删除器(默认delete);2. 析构调用删除器释放资源;3. 禁用拷贝构造和拷贝赋值(=dele…
🎤 字节跳动
中等C++
手撕有界环形队列
结论:用固定数组+头尾索引+计数实现有界环形队列,支持入队出队且满时拒绝。核心要点:1)成员含数组buf、容量cap、头head、尾tail、大小sz;2)入队若sz<cap则buf[tail]=x, tail=(tai…
🎤 腾讯
题目整理自公开面经,答案由校招宝自研生成,仅供参考