社招 小鹏汽车-c++ 自动驾驶岗位的面试记录

小鹏汽车-c++ 自动驾驶岗位的面试(jd在最后)
(原本会议45min,干到了70min+)

0.15min分钟的手撕代码
deleteDuplicates(ListNode* head),删除所有重复数字的节点
问下复杂度是多少-n^2?
如何降下来复杂度?
(用c有点蒙蔽,他提了下c++容器,恍然-set和map是可以的自动排序的,可以降低,很尴尬用c为主c++为辅)

1.敲打简历。
做了哪些工作?
问是代码框架是怎么样的?(实话实话)
问问是如何实现消息队列的?(尴尬,用的现成的ucos接口)
换了一个问题,用来什么技术栈(我常用c的,对这个表示陌生。我说我描述下是如何实现的吧)

2.内核裁剪是这么做的?
(大致说了些,根据内核打印,移除一些模块驱动。精简网络-比如去掉一些ssh,把一些服务往后移动)

3.linux的文件系统说一下,说一下底层原理?比如yaffs的这个管理吧?
(我说我用他们多一点,比如用过哪些类型的fs,这个底层确实接触的不多。有点慌....,不知道怎么回答)

4.调用read函数读取数据,到得到数据,中间过程发生了什么?
(说了个大概:
应用层调用read,引发一个系统调用,cpu从用户模式切换到内核模式,想要参数将会传递给内核
内核会调用参数进行验证
内核验证通过会找到对应文件结构体(file文件)进行查找和定位,通过file文件可以找到节点inode,
闪传驱动读取数据和ecc校验数据
接下里就是数据从内核到用户空间的复制,返回用户空间?)

5.用什么方案去实现状态机机制
(我说了下:通过状态机标志位+轮询方式)

6.说下linux内核的内存管理,他们是怎么管理的?为何要引入虚拟
我提到了进程隔离(内存空间的隔离),访问权限的控制,
图片物理内存显示,实现内存扩展
给开发提供了一个同一的、连续的地址空间,我们不需要关注物理内存的布局和碎片,检查程序开发和内存管理

7.GDB常用哪些指令?如何用GDB调试查找死锁问题?
我讲了lrbsqdp(提前速记了:冷若冰霜驱动盘)这个几个指令的使用
l-list显示10行代码,r-run运行代码,b-break设置断点,s-step单步运行,q-quit推出,d-del删除断点,p-print打印变量。
如何查找:结合top和ps。
通过info threads打印出所有线程的信息,包括id和状态
通过thread id 切换到某一个线程
进行栈回溯,了解栈在做什么
然后用print打印锁信息,查看依赖关系和锁状态

8.智能指针有哪些,哪些使用场景?
三种unique_ptr,shared_ptr,weak_ptr
场景:第一个是希望对资源拥有唯一所有权的时候用;
第二个是希望多个指针共享同一块资源的所有权时,
第三个主要时用于解决第二个可能产生的循环引用问题时用。

9.拷贝构造函数的传入参数,如果不加引用符号会怎么样?
会导致无线递归,最后引发栈溢出

10.多态是怎么实现的?
主要是通过虚函数和指针来实现的。
讲了有编译多态和运行时动态多态(主要讲一下运行多态?)
主要讲了虚函数表和虚函数指针的逻辑

11.出了这个虚函数,还有通过哪些方式实现这个动态多态的过程呢?
function,bind,策略模式。知道,但是记得不多了。

12.反问阶段.

日常用的,主要是用c为主,c++为辅

总体感觉:给自己打个7分吧,听天由命等通知。。
---------------------------------------------------------------------------
职位描述
自动驾驶软件开发高级/资深工程师/专家(Linux/C++方向)
岗位职责:
1、负责自动驾驶相关的新产品软件设计和开发;
2、负责自动驾驶相关的应用和算法软件在新软硬件平台上/新车型上的移植和调优;
3、与各相关团队协作,共同完成自动驾驶产品工程化落地,负责分析和解决遇到的相关软硬件问题;
4、负责现有平台/车型的迭代开发维护。

岗位要求:
1、本科及以上学历,计算机/软件专业,至少3年以上软件开发经验;
2、熟练使用现代C++语言开发(C++11及其以上),熟悉STL并了解其实现原理,能进行多线程编程、网络编程、通信中间件开发;
3、熟悉Linux/QNX,并具备在其上的工程构建、开发、问题定位及解决能力;
4、责任心强,具备优秀的学习能力、独立分析问题和良好的团队沟通协作能力;
5、有基于嵌入式平台的大型应用软件开发经验优先,有自动驾驶产品开发和落地经验优先。
全部评论
有二面吗
点赞 回复 分享
发布于 2025-07-13 18:22 上海
佬,社招c++岗位,简历里准备了啥项目啊
点赞 回复 分享
发布于 2025-06-26 10:35 浙江

相关推荐

04-21 16:27
已编辑
蚌埠坦克学院 C++
提问环节: 1、说一下C++的三大特性2、C++多态3、讲一下虚函数指针和虚函数表、虚函数表在虚拟内存的哪个区4、说一下用到的C++11/14/17的新特性5、多线程同步的方式6、用过哪些锁?7、讲一下RAII8、智能指针有哪些?有什么特点?9、写一个简单的shared_ptr10、shared_ptr的底层,在内存中是怎么布局的?11、说一下shared_ptr的循环引用?怎么解决?weak_ptr如何创建和使用?12、指向内存的shared_ptr都释放了,但还有一个weak_ptr指向这块内存,这块内存会释放吗?13、weak_ptr也有计数吗?说一下14、讲一下常见的几种设计模式和实现方法15、单例模式的实现,以及单例模式的优缺点16、设计模式的六大原则17、聊一下pImpl?18、ffmpeg和gstreamer框架的对比和优缺点19、说一下音视频同步的原则和做法20、OpenGL渲染帧率如何确定?21、如果显示器帧率是60帧,视频是150帧,应该怎么渲染22、介绍一下你的码率控制模块的设计框架?码率控制模式如何选型?(cbr/abr/vbr)23、介绍一下你是如何处理弱网卡顿的(时域svc + 记忆化滑动窗口预测)24、如果网络持续恶化,你会立刻降码率吗?25、介绍一下你的多路解码模块设计?内存池大概是怎么实现的?(多级分辨率链表 + LRU)26、讲一下AI工具,如何使用和发布skills和mcp server27、平时用AI开发多吗?都是怎么用AI的?28、Qt主窗口用的QWidget还是QMainWindow?为什么?29、 对多进程和多线程的理解,顺便提到macOS偏好多进程开发的原因30、为什么基类析构函数一般做成虚函数,构造函数能不能做成虚函数,为什么?31、共享屏幕看一下项目代码,看看你的代码习惯反问环节:Q1:您组里做什么业务呢?A1:音视频SDK开发,涉及linux和windows端,这块跟你经历接近;除此之外还要在移动端APP做拼接、特效等功能,不过这些你过来后也可以学。Q2:您是如何解决soc芯片编码能力不足,但需要给多路APP用户推流的问题?如果复用某几路流,码控不能兼容用户体验,您是如何思考的?A2:我们业务是手机和相机局域网通信的,并且只推一路流(笑),不过你提的这个问题确实不好解决。Q3:请您给一些关于我学习和成长的建议?A3:了解基础技术的前提下,多学习和使用AI吧,AI更新太快,程序员都要被自己开发的AI干掉了(笑)
点赞 评论 收藏
分享
评论
7
48
分享

创作者周榜

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