首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
C++工程师精选面经合集
4家公司
10篇面经
最新
热门
昨天 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
昨天 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
昨天 09:09
浙江大学 算法工程师
京东 C++ 二面 面经
二面基本不扫知识面,每个问题都往深里挖,答完他会继续追问,感觉整场面试都在被拷问细节。项目聊了将近三十分钟,他对架构设计和性能优化特别感兴趣,问了很多"你当时有没有考虑过其他方案"和"这个方案的瓶颈在哪里"。1. 讲一下 C++ 的对象模型,一个含有虚函数的类,它的对象在内存里是什么布局?多继承时虚函数表是怎么组织的?答:一个含有虚函数的类,对象内存布局从低地址开始:首先是虚指针(vptr),占一个指针大小(64 位系统 8 字节),指向该类的虚函数表。然后是按声明顺序排列的成员变量,编译器可能在成员之间插入填充字节满足对齐要求。虚函数表是一个函数指针数...
C++八股文全集
点赞
评论
收藏
分享
/discuss/866969999762612224
昨天 17:18
东北大学 嵌入式工程师
1.10 C++ 面向对象(重头戏)
一、面向对象和面向过程区别 面向过程:强调过程的抽象化和模块化,以过程为中心处理客观世界问题。 面向对象:强调把解决问题的方法直接绑定到对象身上。二、 面向对象的基本特征有哪些? 抽象(抽象出共同的、本质的特征)、继承(基类与派生类)、封装(将数据和方法封装在一个类中,只提供一些公有接口来访问)、多态(相同方法在不同对象上的表现不同)。三、什么是深拷贝和浅拷贝 主要是针对指针成员变量来说的,深拷贝要求重新申请一段新的内存,将源对象指针所指向的内存内容拷贝到新对象中。浅拷贝就会简单的进行指针赋值。四、什么是友元 一些类会给成员以外的函数或类(即友元函数、友元类)提供访问、操作自身成员变量(包括私...
C++/嵌入式开发 秋招...
点赞
评论
收藏
分享
/discuss/867093021601320960
昨天 10:16
门头沟学院 C++
影石 音视频开发-C++ 一面
1. 自我介绍2. 写一个高性能模块,需要用链表时,会优先考虑 std::list 吗答案:不一定。很多人看到“频繁插入删除”就先想到 std::list,但高性能场景下不能只看时间复杂度,还得看缓存局部性、内存分配次数、节点额外开销、遍历成本。std::list 的确能做到已知位置 O(1) 插入删除,但它不是连续内存,每个节点单独分配,cache 命中率通常比较差,实际性能未必比 vector 或 deque 好。如果模块里遍历远多于插删,或者数据量大、对 cache 敏感,往往连续存储更占优势。如果确实要频繁中间插删,又担心节点分配成本,工程里还可能结合对象池、侵入式链表或者 boost...
C++ 常考面试题总结
点赞
评论
收藏
分享
/discuss/866986801402044416
昨天 09:09
浙江大学 算法工程师
京东 C++ 一面,聊了一个小时,问得又广又杂
投的是京东基础架构部门的 C++ 后端开发岗,一面是电话面试,面试官语速很快,上来先聊了十分钟背景,然后直接进技术。整体风格是广度优先,覆盖面很宽,C++ 基础、内存管理、并发、网络、项目都有,但每道题不会问得特别深,感觉是在快速扫描知识面。项目聊了将近二十分钟,他对项目里用到的技术选型很感兴趣,问了不少为什么这么选。最后有一道手撕,难度不高,时间也够。总时长刚好一个小时,整体节奏很快,没有太多思考时间。1. 自我介绍,介绍一下你的实习经历和做过的项目2. 你提到用过消息队列,为什么要引入 MQ,解决了什么问题,选型上为什么选这个而不是其他的?答:引入 MQ 主要解决三个问题:解耦、异步、削峰...
C++八股文全集
点赞
评论
收藏
分享
/discuss/866969974793895936
昨天 16:55
东北大学 嵌入式工程师
1.9 C++ 四种类型转换
一、static_cast 最常用的普通类型转换。用于编译时进行类型转换,不进行运行时类型检查。可以进行向上转换(隐式,不必使用),也可以保证合法向下转换(但不一定安全,只是让编译器认为安全,安全由程序员来保证),但不允许无关转换。二、 dynamic_cast 运行时类型检查。主要用于向下转换,将基类指针/引用安全地转换为派生类指针/引用。在转换失败时返回 nullptr(指针)或抛出 std::bad_cast异常(引用)。成功条件:基类必须有虚函数,要不然不是多态;要转换的目标类型必须是对象的实际类型(或者是派生类型)。三、const_cast 可以消除 const 或 volatile...
C++/嵌入式开发 秋招...
点赞
评论
收藏
分享
/discuss/867087290223386624
昨天 10:09
门头沟学院 C++
理想 后端开发-C++ 一面
1. 在多态场景下,父类析构函数为什么通常要写成虚函数答案:如果一个类会被当成基类使用,并且外部可能通过父类指针去释放子类对象,那父类析构函数就应该定义成虚函数。原因是删除对象时如果析构函数不是虚函数,那么 delete basePtr 只会调用父类析构,不会正确调用子类析构,子类里申请的资源就可能泄露。这本质上是为了保证析构链完整执行,也是运行时多态在销毁阶段的体现。如果一个类根本不打算被继承,也不会通过基类指针释放对象,那不一定非要虚析构,但只要它是“多态基类”,基本都应该加上。代码: #include <iostream> using namespace std; class...
C++ 常考面试题总结
点赞
评论
收藏
分享
/discuss/866985193020669952
03-26 19:11
浙江大学 算法工程师
联想 C++ 二面,聊了一个半小时差点没撑住
二面,还是视频面试,这次面试官换了一个人,自我介绍说是做系统软件方向的高级工程师。和一面相比节奏明显不一样,问题少但每道都很深,基本上每个话题都会顺着你的回答继续挖,感觉整场面试就是在不断被追问。项目聊了将近三十分钟,他对架构设计和遇到的问题非常感兴趣,问了很多"为什么这么做"和"有没有更好的方案"。后半段有一道系统设计题,没有手撕算法,但设计题聊了很久。整体强度比一面高不少,面完感觉脑子空了。1. 讲一下你对 C++ 对象内存布局的理解,虚继承是怎么解决菱形继承问题的?答:一个普通 C++ 对象的内存布局,从低地址到高地址依次是:如果有虚函数,最开头是...
C++八股文全集
点赞
评论
收藏
分享
/discuss/866759056449466368
昨天 16:50
东北大学 嵌入式工程师
1.8 C/C++ 虚函数 && 并行
一、纯虚函数是什么 形式:virtual 返回类型 虚函数名(形参表)= 0; 含有虚函数的类会变成抽象类,该类只能被继承而不能被实例化对象。纯虚函数永远不会被调用,主要是用来统一管理子对象。二、什么函数不能被声明为虚函数普通函数;静态成员函数;内联成员函数(内联函数是为了减少调用代价,而虚函数是为了多态,这两者之间矛盾,并且内联函数在编译的时候就已经展开);构造函数;友元函数三、C++中如何阻止一个类被实例化? 将类的成员函数写成纯虚函数,变成抽象类。四、std::thread(1)基本用法 1)创建线程:通过函数、Lambda 或成员函数创建线程: 关键点: 线程在构造时立即开始执行(无需...
查看10道真题和解析
点赞
评论
收藏
分享
/discuss/867086131840483328
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-26 15:26
浙江大学 算法工程师
联想 C++ 一面,问得比想象中深很多
投的是联想的 C++ 软件开发岗,一面是视频面试,面试官看起来是个技术 lead,全程很平和,没有刁难的感觉,但问题一个接一个,基本没有冷场的时间。整体考察方向偏基础扎实度,C++ 语言特性问得比较细,也有一道设计题和一道手撕。项目部分聊了大概十分钟,他主要关注你在项目里遇到了什么问题、怎么解决的,不太关心项目本身做了什么。总时长约六十分钟,体验不错,面试官会给你思考时间,答不上来他也会给提示。1. new 和 malloc 的区别是什么?placement new 是什么,什么时候会用到?答:malloc 是 C 标准库函数,只负责分配一块指定大小的原始内存,返回 void*,不做任何初始化...
C++八股文全集
点赞
评论
收藏
分享
/discuss/866702501184139264
昨天 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-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
03-26 08:57
浙江大学 算法工程师
Momenta C++ 智驾 二面 面经
1. 自我介绍,介绍一下你觉得最有挑战性的项目2. 你提到用过多任务架构,任务数量多了之后内存压力怎么处理的?静态分配和动态分配你怎么选择?答:任务多了之后内存压力主要来自两块:每个任务的栈空间,以及任务间通信用的队列和信号量。栈空间的处理:先用 uxTaskGetStackHighWaterMark 跑一段时间,看每个任务实际用了多少栈,按实际用量加一定余量分配,不要每个任务都给一个很大的默认值对于简单任务(只做状态机跳转、没有深层函数调用)可以给很小的栈,比如 128 字对于有 printf、sprintf 或者复杂字符串处理的任务,栈需要大一些静态分配 vs 动态分配:嵌入式项目里我倾向...
C++八股文全集
点赞
评论
收藏
分享
/discuss/866604572402380800
昨天 16:31
东北大学 嵌入式工程师
1.6 C/C++ 函数
一、请写个函数在 main 函数执行前或者后执行 #include <stdio.h> void before() __attribute__((constructor));//设置函数属性 void after() __attribute__((destructor)); void before() { printf("this is function %s\n",__func__); return; } void after(){ printf("this is function %s\n",__func__); return; } in...
C++/嵌入式开发 秋招...
点赞
评论
收藏
分享
/discuss/867081244645851136
03-24 16:18
门头沟学院 C++
畅唐网络 C++开发 一面
1. C++ 的三大特性答案:C++ 的三大特性一般指封装、继承、多态。封装是把数据和操作数据的方法放在一起,同时通过 public、protected、private 控制访问权限,隐藏实现细节。继承是子类复用父类的属性和行为,减少重复代码,也方便做层次化设计。多态是同一个接口在不同对象上表现出不同的行为,常见的是通过虚函数实现运行时多态。这三者结合起来,核心价值就是提高代码复用性、扩展性和维护性。2. 菱形继承的缺点?如何解决?答案:菱形继承指的是一个子类同时继承两个父类,而这两个父类又继承自同一个基类。它最典型的问题就是数据冗余和二义性。子类对象里可能会有两份共同基类的数据,访问共同基类...
C++ 常考面试题总结
点赞
评论
收藏
分享
/discuss/865990878005841920
03-26 08:57
浙江大学 算法工程师
Momenta C++ 智驾 一面 面经
1. 自我介绍2. vector 的底层实现原理是什么?扩容时发生了什么?答:vector 本质是一块连续的堆内存,维护三个指针:指向数据起始位置、指向当前末尾、指向分配内存的末尾,分别对应 size 和 capacity。扩容过程:当 size == capacity 时,继续 push_back 会触发扩容申请一块新的更大的内存(通常是原来的 1.5 倍或 2 倍,不同实现不同)把原来的元素全部移动(或复制)到新内存释放旧内存更新内部指针关键点:扩容后所有迭代器、指针、引用全部失效,因为底层内存地址变了扩容是 O(n) 操作,但均摊下来每次 push_back 是 O(1)如果提前知道大小...
C++八股文全集
点赞
评论
收藏
分享
/discuss/866604542438211584
昨天 16:15
东北大学 嵌入式工程师
1.5 C/C++ 变量
一、全局变量可不可以定义在可被多个 .C 文件包含的头文件中?为什么? 不可以,在连接阶段会产生重复定义问题。 可以在头文件对全局变量声明,然后在其中一个.c文件对其定义。 //header.h extern int global_variable; //file1.c #include "header.h" // 之所以也要包含 .h 是为了告诉编译器将 global_variable 导出为全局符号,另外能进行类型匹配检查 int global_variable = 10; // 定义全局变量 //file2.c #include "header.h"...
查看6道真题和解析
点赞
评论
收藏
分享
/discuss/867077247033692160
03-24 16:13
门头沟学院 C++
数码视讯 C++开发 一面
1. C++ 多态答案:C++ 多态分编译时多态和运行时多态。编译时多态主要是函数重载、模板,运行时多态主要是虚函数。面试里一般问的还是运行时多态,也就是基类指针或者引用指向子类对象,调用重写后的函数。它的核心价值是接口统一、实现可替换,在客户端开发里像渲染对象、组件系统、资源加载器这类设计都很常见。多态成立的前提一般是继承、虚函数重写、父类指针或引用调用。代码: #include <iostream> using namespace std; class Base { public: virtual void draw() { cout << "Base d...
C++ 常考面试题总结
点赞
评论
收藏
分享
/discuss/865989511325442048
玩命加载中
写面经
发动态
写文章
全站热榜
更多
写面经
发动态
写文章
牛客网
牛客网在线编程
牛客网题解
牛客企业服务