首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
C++工程师精选面经合集
4家公司
10篇面经
最新
热门
昨天 07:26
浙江大学 算法工程师
大疆 | C++开发工程师 二面 面经
1. 介绍一个你主导的最复杂的项目,架构是怎么设计的,遇到的最难的技术问题是什么,怎么解决的?答:这道题是二面的开场,考察系统思维和技术深度,回答要有结构。建议按三段走:背景和目标(项目是什么、规模、你的角色)→ 架构设计思路(为什么这么分层、核心模块怎么划分、关键技术选型理由)→ 最难的问题(要具体,不能说"遇到了很多困难",要说清楚是什么问题、为什么难、排查过程、最终方案)。比如车载物联项目,可以说:系统需要同时管理30+种异构设备,设备协议差异大,所以设计了HAL抽象层屏蔽硬件差异,上层统一用设备模型操作;最难的问题是多设备并发上报状态时MQTT消息乱序,排查发现是Q...
C++八股文全集
点赞
评论
收藏
分享
/discuss/867669026103713792
03-28 23:54
门头沟学院 C++
网易 后端开发-C++ 一面
1. 自我介绍2. 智能指针了解什么,unique_ptr、shared_ptr、weak_ptr 分别适合什么场景答案:unique_ptr 表示独占所有权,一个资源同一时刻只能有一个拥有者,适合所有权非常明确的场景,开销也最小。shared_ptr 表示共享所有权,底层通过控制块和引用计数管理对象生命周期,适合多个对象共同持有同一资源的情况。weak_ptr 不增加强引用计数,主要用于观察 shared_ptr 管理的对象,典型作用是打破循环引用。真正写工程时,智能指针不是“哪里都能上”,本质还是要先把对象所有权设计清楚。shared_ptr 用多了,很多时候反而说明对象边界没设计好。代码...
C++ 常考面试题总结
点赞
评论
收藏
分享
/discuss/867555164809457664
03-28 12:35
北京科技大学 人工智能
寒武纪 笔试C++
一共四道题,我是菜狗,全都没有100%,最后一道题没做出来第一道题:一个班有N个学生,如果上课之前到场人数少于K,这节课就取消,给你NK和全班人到班里的时间,让你判断这节课会不会被取消e.ginput :N4K3 时间:-1 -3 4 2 ==>YES 会被取消,因为0时刻到班俩人我感觉就是盘有多少大于0的数字,看这个数是不是比K小就行,一开始只有60%,加了个K>N输出YES就80%,然后我就想不到别的情况了,欢迎大佬评论区指导!!!第二题:有点像斐波那契,f(i+2)=f(i)+f(i+1)*f(i+1),让你求f(n)input:f(1) f(2) n 0<=f1,f2<=2 3<=n<=12我直接递归的,只有60%,一个是longlong会溢出,还有应该可能是内存占用太大 ?第三题:有A、B、C、三个数组,每次从两个数组中选一个元素进行删和减操作,比如从A里选a,B里选b,然后B删掉b,A里的a变成a-b,问你最后留下来的数组元素之和最大是多少input: 2 4 1(三个数组的长度,题里的输入是三行,我直接写一行里了哈)1 2(第一个) 6 3 4 5(第二个)5(第三个)output:20个人觉得,就是三个数组元素之和,先选个max mid 和min,然后return mid-(min-max);然后mid = sum1+sum2+sum3-max-min,带进去就是return sum1+sum2+sum3-2*min,但是只有50%第四题:我感觉可能和bfs/dfs有关,可以做出来,但是我的脑子,em,不好形容题目:给你一个全排列序列(题目就是这样说的我记得,其实就是1~n的乱序),让你找1~n阶完美序列,举个例子吧序列L:4 5 1 3 2 6下标i:0 1 2 3 4 51阶 就是包含12阶 就是连续的两个位置包含1和2 这个序列的1和2被3隔开了,所以没有2阶3阶 L[2~4]连续包含123,虽然是132,但是算作完美序列以此类推最后输出是一串01字符,一阶有为1,二阶没有为0,三阶有为1,所以这三阶的输出就是101我的想法是以1为中心,向两边去找,用一个count标记小于等于阶数的个数,边界不合法break,遇到比阶数大的break,但是通过率0比如说我找3阶,1的左边是5,5>3,所以左边的搜索到此为止,1<3,count++,继续,右边3不大于3,count++,继续搜索,2<3,count++,继续,6>3,break,最终count=3=阶数,那么存在3阶完美序列唉,还是算法题做得不够,小菜狗只能到这个程度了,欢迎大佬评论区指点!!!!!
查看8道真题和解析
点赞
评论
收藏
分享
/feed/main/detail/c67ed2a866c1421b8fa1039958620936
03-28 20:23
浙江大学 算法工程师
大疆 | C++开发工程师 一面 面经 拷打
1. C++对象模型中,虚函数表(vtable)的布局是怎样的?多继承时vtable如何组织?答:每个含有虚函数的类都有一张vtable,存放在只读数据段,表中按声明顺序存放虚函数指针。每个该类的对象头部有一个隐藏的vptr指向这张表。多继承时情况更复杂:对象内存中会有多个vptr,每个基类子对象对应一个。比如类C继承自A和B,C的对象布局是先放A的子对象(含A的vptr),再放B的子对象(含B的vptr)。C重写的虚函数会覆盖A那张表里对应的槽位,同时B那张表里也会有一个thunk(调整器),负责在调用时修正this指针偏移,再跳转到C的实现。这就是为什么多继承下虚函数调用有额外的this指...
C++八股文全集
点赞
评论
收藏
分享
/discuss/867501989213630464
03-28 23:49
门头沟学院 C++
字节跳动-后端开发实习生-C++ 一面
1. 自我介绍2. 项目介绍3. 进程和线程的本质区别是什么,为什么线程切换通常更轻答案:进程是资源分配的基本单位,线程是 CPU 调度的基本单位。一个进程有自己独立的虚拟地址空间、文件描述符表、页表等资源;同一进程里的多个线程共享代码段、数据段、堆、打开的文件等资源,但每个线程有自己独立的栈、寄存器上下文和线程局部存储。线程切换通常比进程切换轻,是因为同进程线程切换时,不需要像进程切换那样频繁切换地址空间和页表,缓存和 TLB 的破坏通常也更小。但“轻”不代表没成本,线程切换依然涉及内核调度、寄存器保存恢复、可能的锁竞争和缓存失效。4. 进程通信方式有哪些,怎么选答案:常见的进程通信方式有管...
C++ 常考面试题总结
点赞
评论
收藏
分享
/discuss/867553948784152576
03-27 20:49
已编辑
东北大学 嵌入式工程师
1.11 C++ STL
一、STL 容器序列容器:vector、list、forward_list、deque、array、string关联式容器(自动排序、基于红黑树):set、map、multiset、multimap无序关联式容器(基于哈希表):unordered_set、unordered_map、unordered_multiset、unordered_multimap适配器容器(是对其他容器的封装):stack、queue、priority_queue二、STL 算法 std::vector<int> v {1, 2, 3, 4}; auto it = std::find(v.begin(),...
C++/嵌入式开发 秋招...
点赞
评论
收藏
分享
/discuss/867110345083535360
03-27 09:09
浙江大学 算法工程师
京东 C++ 二面 面经
二面基本不扫知识面,每个问题都往深里挖,答完他会继续追问,感觉整场面试都在被拷问细节。项目聊了将近三十分钟,他对架构设计和性能优化特别感兴趣,问了很多"你当时有没有考虑过其他方案"和"这个方案的瓶颈在哪里"。1. 讲一下 C++ 的对象模型,一个含有虚函数的类,它的对象在内存里是什么布局?多继承时虚函数表是怎么组织的?答:一个含有虚函数的类,对象内存布局从低地址开始:首先是虚指针(vptr),占一个指针大小(64 位系统 8 字节),指向该类的虚函数表。然后是按声明顺序排列的成员变量,编译器可能在成员之间插入填充字节满足对齐要求。虚函数表是一个函数指针数...
C++八股文全集
点赞
评论
收藏
分享
/discuss/866969999762612224
03-27 10:22
门头沟学院 C++
影石 音视频开发-C++ 二面
1. 自我介绍2. 如何设计一个类只能在栈上创建对象答案:如果想让一个类只能在栈上创建,核心就是禁止堆分配。最常见的做法是把 operator new 和 operator delete 声明为删除,或者放到 private 里不让外部调用。这样外部就不能通过 new 在堆上申请对象了,只能直接定义局部对象。不过这种方式只能限制常规 new,如果有人用 placement new 或者其他非常规手段,还得结合接口设计一起控制。代码: #include <iostream> using namespace std; class StackOnly { public: StackOnl...
C++ 常考面试题总结
点赞
评论
收藏
分享
/discuss/866988517153333248
03-27 17:18
东北大学 嵌入式工程师
1.10 C++ 面向对象(重头戏)
一、面向对象和面向过程区别 面向过程:强调过程的抽象化和模块化,以过程为中心处理客观世界问题。 面向对象:强调把解决问题的方法直接绑定到对象身上。二、 面向对象的基本特征有哪些? 抽象(抽象出共同的、本质的特征)、继承(基类与派生类)、封装(将数据和方法封装在一个类中,只提供一些公有接口来访问)、多态(相同方法在不同对象上的表现不同)。三、什么是深拷贝和浅拷贝 主要是针对指针成员变量来说的,深拷贝要求重新申请一段新的内存,将源对象指针所指向的内存内容拷贝到新对象中。浅拷贝就会简单的进行指针赋值。四、什么是友元 一些类会给成员以外的函数或类(即友元函数、友元类)提供访问、操作自身成员变量(包括私...
C++/嵌入式开发 秋招...
点赞
评论
收藏
分享
/discuss/867093021601320960
03-27 09:09
浙江大学 算法工程师
京东 C++ 一面,聊了一个小时,问得又广又杂
投的是京东基础架构部门的 C++ 后端开发岗,一面是电话面试,面试官语速很快,上来先聊了十分钟背景,然后直接进技术。整体风格是广度优先,覆盖面很宽,C++ 基础、内存管理、并发、网络、项目都有,但每道题不会问得特别深,感觉是在快速扫描知识面。项目聊了将近二十分钟,他对项目里用到的技术选型很感兴趣,问了不少为什么这么选。最后有一道手撕,难度不高,时间也够。总时长刚好一个小时,整体节奏很快,没有太多思考时间。1. 自我介绍,介绍一下你的实习经历和做过的项目2. 你提到用过消息队列,为什么要引入 MQ,解决了什么问题,选型上为什么选这个而不是其他的?答:引入 MQ 主要解决三个问题:解耦、异步、削峰...
C++八股文全集
点赞
评论
收藏
分享
/discuss/866969974793895936
03-27 10:16
门头沟学院 C++
影石 音视频开发-C++ 一面
1. 自我介绍2. 写一个高性能模块,需要用链表时,会优先考虑 std::list 吗答案:不一定。很多人看到“频繁插入删除”就先想到 std::list,但高性能场景下不能只看时间复杂度,还得看缓存局部性、内存分配次数、节点额外开销、遍历成本。std::list 的确能做到已知位置 O(1) 插入删除,但它不是连续内存,每个节点单独分配,cache 命中率通常比较差,实际性能未必比 vector 或 deque 好。如果模块里遍历远多于插删,或者数据量大、对 cache 敏感,往往连续存储更占优势。如果确实要频繁中间插删,又担心节点分配成本,工程里还可能结合对象池、侵入式链表或者 boost...
C++ 常考面试题总结
点赞
评论
收藏
分享
/discuss/866986801402044416
03-27 16:55
东北大学 嵌入式工程师
1.9 C++ 四种类型转换
一、static_cast 最常用的普通类型转换。用于编译时进行类型转换,不进行运行时类型检查。可以进行向上转换(隐式,不必使用),也可以保证合法向下转换(但不一定安全,只是让编译器认为安全,安全由程序员来保证),但不允许无关转换。二、 dynamic_cast 运行时类型检查。主要用于向下转换,将基类指针/引用安全地转换为派生类指针/引用。在转换失败时返回 nullptr(指针)或抛出 std::bad_cast异常(引用)。成功条件:基类必须有虚函数,要不然不是多态;要转换的目标类型必须是对象的实际类型(或者是派生类型)。三、const_cast 可以消除 const 或 volatile...
C++/嵌入式开发 秋招...
点赞
评论
收藏
分享
/discuss/867087290223386624
03-26 19:11
浙江大学 算法工程师
联想 C++ 二面,聊了一个半小时差点没撑住
二面,还是视频面试,这次面试官换了一个人,自我介绍说是做系统软件方向的高级工程师。和一面相比节奏明显不一样,问题少但每道都很深,基本上每个话题都会顺着你的回答继续挖,感觉整场面试就是在不断被追问。项目聊了将近三十分钟,他对架构设计和遇到的问题非常感兴趣,问了很多"为什么这么做"和"有没有更好的方案"。后半段有一道系统设计题,没有手撕算法,但设计题聊了很久。整体强度比一面高不少,面完感觉脑子空了。1. 讲一下你对 C++ 对象内存布局的理解,虚继承是怎么解决菱形继承问题的?答:一个普通 C++ 对象的内存布局,从低地址到高地址依次是:如果有虚函数,最开头是...
C++八股文全集
点赞
评论
收藏
分享
/discuss/866759056449466368
03-27 10:09
门头沟学院 C++
理想 后端开发-C++ 一面
1. 在多态场景下,父类析构函数为什么通常要写成虚函数答案:如果一个类会被当成基类使用,并且外部可能通过父类指针去释放子类对象,那父类析构函数就应该定义成虚函数。原因是删除对象时如果析构函数不是虚函数,那么 delete basePtr 只会调用父类析构,不会正确调用子类析构,子类里申请的资源就可能泄露。这本质上是为了保证析构链完整执行,也是运行时多态在销毁阶段的体现。如果一个类根本不打算被继承,也不会通过基类指针释放对象,那不一定非要虚析构,但只要它是“多态基类”,基本都应该加上。代码: #include <iostream> using namespace std; class...
C++ 常考面试题总结
点赞
评论
收藏
分享
/discuss/866985193020669952
03-27 16:50
东北大学 嵌入式工程师
1.8 C/C++ 虚函数 && 并行
一、纯虚函数是什么 形式:virtual 返回类型 虚函数名(形参表)= 0; 含有虚函数的类会变成抽象类,该类只能被继承而不能被实例化对象。纯虚函数永远不会被调用,主要是用来统一管理子对象。二、什么函数不能被声明为虚函数普通函数;静态成员函数;内联成员函数(内联函数是为了减少调用代价,而虚函数是为了多态,这两者之间矛盾,并且内联函数在编译的时候就已经展开);构造函数;友元函数三、C++中如何阻止一个类被实例化? 将类的成员函数写成纯虚函数,变成抽象类。四、std::thread(1)基本用法 1)创建线程:通过函数、Lambda 或成员函数创建线程: 关键点: 线程在构造时立即开始执行(无需...
查看10道真题和解析
点赞
评论
收藏
分享
/discuss/867086131840483328
03-26 15:26
浙江大学 算法工程师
联想 C++ 一面,问得比想象中深很多
投的是联想的 C++ 软件开发岗,一面是视频面试,面试官看起来是个技术 lead,全程很平和,没有刁难的感觉,但问题一个接一个,基本没有冷场的时间。整体考察方向偏基础扎实度,C++ 语言特性问得比较细,也有一道设计题和一道手撕。项目部分聊了大概十分钟,他主要关注你在项目里遇到了什么问题、怎么解决的,不太关心项目本身做了什么。总时长约六十分钟,体验不错,面试官会给你思考时间,答不上来他也会给提示。1. new 和 malloc 的区别是什么?placement new 是什么,什么时候会用到?答:malloc 是 C 标准库函数,只负责分配一块指定大小的原始内存,返回 void*,不做任何初始化...
C++八股文全集
点赞
评论
收藏
分享
/discuss/866702501184139264
03-26 20:27
已编辑
门头沟学院 人工智能
又面了一次滴滴base北京
国际化外卖后端岗位北京这边的面试官很好我想想问了什么1.自我介绍2.个人职业前景3.由于我的技术栈是c/c++,python,问我对java中间件的了解:我就谈了谈对epoll,消息队列,主从模型,生产者消费者模型解决tcp粘包拆包问题设计的基于状态机的应用层协议从应用层到客户端的中间件链路4.io网络模型有哪些5.场景题,简单描述就是如何保证抗住高并发流量6.场景题,简单描述就是如何保证外卖流程的顺序不乱7.场景题,简单描述就是如何保证MQ在MQ层不丢失,不太会我只知道强行在生产者中写入硬盘,但是面试官说这是业务层,他想知道在MQ层的不丢失怎么,最后告诉我用Raft一致性算法(完全不了解)8.手撕合并有序链表9.反问,公司目前对ai开发的支持,对agent开发怎么看,公司目前在美洲外卖的排名前景之类的整个流程大概40分钟不到会不会是kpi面啊,上次我面滴滴base杭州,两道手撕LRU和反转链表,面了60分钟给我挂了更新,已被挂,唉,接着努力吧
查看7道真题和解析
点赞
评论
收藏
分享
/feed/main/detail/6c9c572048714dc9a95b349635a58420
03-27 16:40
东北大学 嵌入式工程师
1.7 C/C++ 数组 && 位操作
一、以下代码表示什么意思? *(a[1]+1)、*(&a[1][1])、(*(a+1))[1] *(a[1]+1):相当于a[1][1] *(&a[1][1]):相当于 a[1][1] (*(a+1))[1]:相当于 a[1][1] //&a指向的是整个二维数组的地址;a指向的是二维数组的第一行起始地址;a[1]指向的是第一行第一个元素的起始地址;a[1][1]:对第一行第一个元素取值 二、数组下标可以为负数吗? 可以。数组下标只是相当于当前数组起始地址的偏移量而已。可能代表向前寻址。三、数组如果在栈上分配,其大小必须在编译时确定 char* getBuffer(int...
查看7道真题和解析
点赞
评论
收藏
分享
/discuss/867083558748286976
03-26 08:57
浙江大学 算法工程师
Momenta C++ 智驾 二面 面经
1. 自我介绍,介绍一下你觉得最有挑战性的项目2. 你提到用过多任务架构,任务数量多了之后内存压力怎么处理的?静态分配和动态分配你怎么选择?答:任务多了之后内存压力主要来自两块:每个任务的栈空间,以及任务间通信用的队列和信号量。栈空间的处理:先用 uxTaskGetStackHighWaterMark 跑一段时间,看每个任务实际用了多少栈,按实际用量加一定余量分配,不要每个任务都给一个很大的默认值对于简单任务(只做状态机跳转、没有深层函数调用)可以给很小的栈,比如 128 字对于有 printf、sprintf 或者复杂字符串处理的任务,栈需要大一些静态分配 vs 动态分配:嵌入式项目里我倾向...
C++八股文全集
点赞
评论
收藏
分享
/discuss/866604572402380800
03-25 16:20
门头沟学院 C++
小米汽车 软件工程师-C++ 一面
1、make_shared 了解过吗?答案:了解。make_shared 本质上是用来创建 shared_ptr 的工厂函数。和直接 shared_ptr<T>(new T(...)) 相比,它通常只做一次内存分配,把对象本体和控制块放在一块连续内存里,所以性能更好,缓存局部性也更好。另外它异常安全性也更强,像复杂表达式里直接 new 可能在构造 shared_ptr 前抛异常,make_shared 可以避免这种问题。但它也不是所有场景都适合。比如对象特别大、你希望对象和控制块分开释放,或者需要自定义删除器,那就不一定用 make_shared。因为只要还有 weak_ptr 持...
C++ 常考面试题总结
点赞
评论
收藏
分享
/discuss/866353856953839616
玩命加载中
写面经
发动态
写文章
全站热榜
更多
写面经
发动态
写文章
牛客网
牛客网在线编程
牛客网题解
牛客企业服务