联想C++研发工程师面经

📍面试公司:联想(Lenovo)
🕐面试时间:2025年08月23日
💻面试岗位:C++研发工程师
❓面试问题:
一、现代C++特性与语言演进 (C++11/14/17/20)
1.​​右值引用与移动语义​​:解释std::move和std::forward的区别?完美转发是如何实现的?
2.​​智能指针进阶​​:std::shared_ptr的线程安全性如何?std::weak_ptr如何解决循环引用?
3.​​C++17/20新特性​​:谈谈你对std::optional, std::variant, std::string_view的理解。C++20的Coroutines(协程)有什么优势?
4.​​类型推导与模板​​:auto和decltype有什么区别?模板参数包(Parameter Pack)如何展开?
二、内存管理新范式
1.​​内存池技术​​:如何自己实现一个内存池?
2.​​检测与优化​​:除了Valgrind,还有哪些工具(如ASAN、MSAN)可用于检测内存问题?如何重载new和delete来跟踪内存分配?
三、并发编程与现代多线程
1.​​原子操作与内存模型​​:std::atomic<T>是如何保证原子性的?解释一下内存序(Memory Order):memory_order_relaxed、memory_order_acquire、memory_order_release的区别和应用场景。
2.​​无锁编程​​:什么是无锁(Lock-Free)数据结构?尝试实现一个无锁的队列或栈。
3.​​协程​​:C++20的协程底层机制是什么?co_await、co_yield、co_return分别做了什么?
四、STL容器与算法新特性
1.​​新容器​​:std::unordered_map的负载因子和再哈希策略是怎样的?C++23引入了哪些新容器?
2.​​算法复杂度与选择​​:std::sort用的是哪种排序算法?什么情况下会退化为O(n²)?如何避免?
五、系统设计与性能优化
1.​​设计线程安全的LRU缓存​​:要求get和put操作的时间复杂度为O(1),并考虑高并发场景。
2.​​零拷贝技术​​:如何在Linux下使用sendfile或splice实现零拷贝文件传输?
3.​​高性能日志系统​​:如何设计一个每秒处理千万级日志条目且保证零丢失的采集系统?
六、设计模式与架构演进
1.​​现代C++下的设计模式​​:如何使用移动语义和智能指针实现单例模式、工厂模式?
2.​​分布式系统概念​​:如何理解分布式缓存中的缓存击穿、雪崩和穿透?如何设计一个防护系统?
七、手撕代码题目更新
1.​​实现一个移动语义优化的字符串类​​(MiniString),要求支持拷贝构造、移动构造、析构。
2.​​实现一个简化版的std::shared_ptr​​(MySharedPtr),模拟引用计数。
3.​​实现一个线程安全的环形缓冲区(Ring Buffer)​​,支持多生产者和多消费者。
🙌面试感想:
联想的C++面试很​​现代化和深度化​​。面试官不仅考察传统的语言特性和底层原理,还会深入询问​​C++17/20的新特性、无锁编程、协程、高性能系统设计​​等前沿话题。手撕代码环节的题目综合性更强,常要求实现一个小型的数据结构或系统组件,并考虑线程安全和性能。项目经验部分问得非常细,要求候选人能清晰说明技术选型、性能优化证据链和故障排查路径。整体感觉面试官水平很高,乐于追问,氛围既有挑战性又很专业。
#发面经攒人品#
全部评论
好难啊感觉
点赞 回复 分享
发布于 2025-11-05 17:42 四川

相关推荐

2025-12-31 19:15
门头沟学院 Java
1.Java变量有成员变量,还有局部变量。那它们在这个语法和内存分配以及生存周期上有什么区别?2.如果说一个类里面我有三个成员变量,那它们初始化的顺序是怎么样的?3.那它们三个都是非静态的呢?非静态的成员变量,那它们之间初始化之间有顺序的差别吗?4.比如说我要&nbsp;new&nbsp;一个对象,呃比如说我自定义了一个对象&nbsp;A,我&nbsp;new&nbsp;了一个&nbsp;A括号,那么这个A它可能是在哪分配呢?它一定是在堆上分配吗?5.String&nbsp;a&nbsp;=&nbsp;new&nbsp;String("hello")和String&nbsp;a="hello"的区别?6.那我们都知道那个java&nbsp;的里面object&nbsp;这个类是很多对象的一个基类。如果我重写了&nbsp;equals&nbsp;方法,但是我忘记重写它的&nbsp;hashCode&nbsp;的方法了,那在&nbsp;map,HashMap&nbsp;的这种使用场景下,把这个对象作为那个k的类型会有什么问题吗?7.假如说我初始容量传了5,就new&nbsp;HashMap(5),然后我往里&nbsp;put&nbsp;了一个元素,那么请问执行完之后,这个&nbsp;HashMap&nbsp;底层的数组大小是多大?8.我往里&nbsp;put的时候,我大概&nbsp;put&nbsp;多少个的时候它会触发扩容啊?9.HashMap&nbsp;在并发环境下使用会有这种线程不安全的问题。那它对应的线程安全的方案是什么?10.你实际开发中使用过&nbsp;Hashtable&nbsp;或者说是&nbsp;synchronized&nbsp;的&nbsp;HashMap吗?11.比如说现在有个线程池,然后它的核心线程数是&nbsp;5,最大线程数是&nbsp;10队列是&nbsp;100,那么假如这时候突然来了&nbsp;110&nbsp;个任务,那这个线程池它会怎怎么处理?12.请问一个对象,他什么情况下会进入到老年代?13.对象比较大,那这个大什么叫大呢?多大算大?14.项目相关问题15.手撕代码(LRU缓存)import&nbsp;java.util.HashMap,import&nbsp;java.util.Map;
点赞 评论 收藏
分享
2025-12-29 19:56
已编辑
门头沟学院 golang
岗位:腾讯云-平台后台开发工程师&nbsp;(西安云智)投递时间:&nbsp;2025-12-18进度日志:2025-12-18:&nbsp;完成简历投递。2025-12-19:&nbsp;约面&nbsp;12-22。2025-12-22:&nbsp;完成一面。2025-12-24:&nbsp;完成二面。2025-12-26:&nbsp;完成三面HR。2025-12-29:&nbsp;人才库。以下是面经:📌&nbsp;一面&nbsp;(2025-12-22)1.&nbsp;自我介绍2.&nbsp;操作系统&nbsp;&amp;&nbsp;运维:-&nbsp;CPU&nbsp;负载突增&nbsp;(99%)&nbsp;的排查思路。-&nbsp;常用命令:`top`,&nbsp;`htop`,&nbsp;`lsof&nbsp;-i`,&nbsp;`ps&nbsp;-ef`&nbsp;等。3.&nbsp;网络排查:如何查看服务器上特定连接的状态?&nbsp;(记录:当时未答全,补充:`netstat`,&nbsp;`ss`)4.&nbsp;并发模型:进程、线程、协程的区别与联系。5.&nbsp;MySQL:-&nbsp;ACID&nbsp;事务属性。-&nbsp;隔离级别(RU,&nbsp;RC,&nbsp;RR,&nbsp;Serializable)。-&nbsp;MVCC&nbsp;(多版本并发控制)&nbsp;原理。6.&nbsp;Go&nbsp;网络编程:`net/http`&nbsp;包的默认配置缺陷及自定义&nbsp;`Client`(如超时设置)。7.&nbsp;协议相关:-&nbsp;TCP、UDP、HTTP&nbsp;的层级关系。-&nbsp;HTTP&nbsp;vs&nbsp;HTTPS&nbsp;的区别。-&nbsp;HTTPS&nbsp;的&nbsp;TLS/SSL&nbsp;握手过程。8.&nbsp;缓存:数据一致性方案(先更新数据库再删除缓存的原因及潜在问题)。9.&nbsp;手撕代码:实现一个&nbsp;LRU&nbsp;算法。10.&nbsp;反问:部门业务方向。📌&nbsp;二面&nbsp;(2025-12-24)1.&nbsp;自我介绍2.&nbsp;项目深度:-&nbsp;项目中消息队列的应用场景。-&nbsp;数据链路处理细节:采集、发送、处理的全流程。-&nbsp;技术选型:考虑过&nbsp;Websocket&nbsp;或者直接&nbsp;TCP&nbsp;吗?为什么选择&nbsp;HTTP?3.&nbsp;自研组件:自己写的消息队列具体逻辑实现。4.&nbsp;Redis:缓存一致性问题的深度探讨。5.&nbsp;协议相关:是否有&nbsp;MQTT&nbsp;使用经验?6.&nbsp;手撕代码:判断链表是否有环。7.&nbsp;反问:-&nbsp;部门业务信息及技术栈。-&nbsp;面试表现:技术扎实,但工作经历较少,后续需要通过更多项目实践来提升。📌&nbsp;三面(HR)&nbsp;(2025-12-26)1.&nbsp;自我介绍2.&nbsp;项目深度:项目中遇到的问题?怎么解决的,有什么结果3.&nbsp;家庭情况4.&nbsp;有压力怎么解决?互相有问题如何沟通。5.&nbsp;反问📌&nbsp;结果&nbsp;(2025-12-29)收到两条通过短信,但后续查询发现已进入人才库。问下佬们,是不是被排序卡掉了?
查看24道真题和解析
点赞 评论 收藏
分享
2025-12-31 19:36
已编辑
哈尔滨工业大学(威海) C++
一面&nbsp;12.2340&nbsp;分钟,刚面完官网马上就通过了,手撕第二道题想半天想不出来,面试官给了提示马上写出来了。鹅的面试官非常和蔼,全程笑着面完的,面试之前非常焦虑紧张,对自己的项目不是很熟悉,面试内容没怎么问项目,都是八股和算法,体验很好。面试问到的内容:值传递和引用传递提到了右值,什么时候用右值Unordered_map&nbsp;和&nbsp;map&nbsp;的区别Auto&nbsp;用过吗,什么时候用,有什么风险多继承有什么问题,菱形继承怎么解决虚函数表的原理C++&nbsp;怎么新建线程两个线程操纵一个变量会怎么样栈和堆了解吗,有什么区别程序编译运行过程发生了什么Static&nbsp;的函数有了解吗Const&nbsp;和&nbsp;constexpr字符的子串、旋转升序数组找最小值(二分查找)反问环节:部门做什么、后续流程IEG&nbsp;给王者等游戏提供工具优化、给公司其他部门提供工具。二面流程和一面差不多,不用太担心。二面&nbsp;12.2970&nbsp;分钟,一面面试官说二面和一面差不多让我别太担心,结果完全不是,一上来就问底层原理,操作系统给我拷打懵了,感觉啥也不会,虽然面试官给我解释然后让我重新答一遍,可我真的想不出来。面试问到的内容:看到你这个奖项,美赛得了什么奖?ACM&nbsp;打过吗?Elf&nbsp;有了解吗?虚拟地址和物理地址如何转换?快表的缩写是什么?如果查找从内存中查找一个数据,查到以后放到多级缓存中,放到哪一级?Linux&nbsp;中命令行定位搜索文件中的某个字符串在哪个文件静态链接和动态链接有了解吗?如果在一个&nbsp;h&nbsp;文件中定义一个类,然后在&nbsp;B、C&nbsp;中写这个类,有影响吗?如何避免头文件的重复调用?汇编文件了解吗?如何把分配在栈和堆中?别说这么多就说代码怎么写有两个线程,要分配一块空间,不加锁怎么实现(原子变量可行,面试官问不用原子变量如何实现)如果有一个类,里面只有一个&nbsp;int,然后他的子类是一个八字节的&nbsp;long&nbsp;long,这两个地址是挨着的吗?不是的话中间是什么?类型转换有了解吗?如果要把一个&nbsp;long&nbsp;long&nbsp;值转换为地址赋给指针要用什么?cmake了解吗?makefile会写吗?手撕:单调栈,几天后气温升高感觉不止这些,还问了很多,每个问题都追问得很细,想不起来了。不过确实都不怎么会,寒假得好好沉淀一下原理。
查看26道真题和解析
点赞 评论 收藏
分享
评论
3
28
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务