C/C++ 开发工程师(驱动)一面、二面面经
完整信息
本篇目录
岗位是C/C++开发工程师(驱动),高通方向,base重庆。
8月21日投递,9月14日一面,9月16日二面,9月28日查到未通过。
一面当天就过了,第二天紧接着二面,结果二面之后等了差不多两周,最后还是挂了。
一面:Linux驱动和摄像头问得挺细
一面先是自我介绍,确认了一下岗位,随后就开始围绕实习项目提问。
- 介绍一下实习项目,尤其是影像相关的部分。
- 分离屏端的性能优化具体做了什么?分离和组合时有哪些优化?
- 分离屏和主机怎么保证操作和状态一致?
- 实习主要做的是上层开发,还是底层驱动?
- 应用层开发时,怎么处理多线程同步和竞态问题?
- 除了互斥锁,还了解哪些同步机制?知道无锁编程吗?
- MCU开发中用过哪些通信协议?各自有什么特点?
- 为什么从原来的专业转到嵌入式和驱动开发?
- 介绍一下V4L2。如果要添加一个摄像头设备,应该做哪些工作?
- 如果现在有两个CMOS,应该怎么调试?
- 自己有没有实际写过摄像头驱动?
- 摄像头不出图,应该从哪里开始排查?
- 排查之前,是不是应该先确认设备有没有成功挂载?
- 有没有使用过MIPI接口的Sensor?
- 了解摄像头3A吗?
- 如果摄像头过曝,应该调哪些参数?
- 是否了解CMOS成像原理,以及常见参数的含义?
- EV是什么?
- 了解哪些图像格式?YUV、RGB、NV12有什么区别?
- YUV为什么可以减少色度数据量?
这一串下来,感觉面试官对摄像头这块还是比较关注的。
其中我觉得最值得单独准备的是V4L2和摄像头不出图的排查。
先说V4L2。
如果简历里写过Linux摄像头驱动,最好别只知道几个ioctl命令。
至少要把Sensor驱动、V4L2框架、Video设备、videobuf2和用户态采集流程之间的关系理清楚。
比如用户态通过VIDIOC_REQBUFS申请缓冲区,再用VIDIOC_QBUF入队,通过VIDIOC_STREAMON启动采集,最后用VIDIOC_DQBUF取得完成的缓冲区。
这些步骤为什么存在,驱动和硬件分别负责什么,最好能串起来讲。
当然,实际驱动的注册流程会随具体平台和设备架构变化,不能认为所有摄像头都按同一份模板写。
再说摄像头不出图。
这道题我觉得特别典型。但真排查的时候,得先确认问题到哪一层。
设备有没有识别成功?Sensor供电、时钟、复位和控制总线是否正常?初始化寄存器配置对不对?MIPI CSI链路有没有错误?后面的缓冲区有没有正常完成?
一面最后还问了Android、HAL层、AI使用情况,以及部分简历经历。
当晚一面通过,第二天安排二面。
二面:开始重点聊项目
原本以为二面会继续深挖内核或者驱动实现,结果这一轮主要聊项目经历。
问题整理如下:
- 自我介绍。
- 从竞赛和实习项目里,挑一个印象最深或者最有成就感的项目介绍。
- 分离屏的UI性能优化具体怎么做?怎么发现性能瓶颈?优化效果用什么指标评价?
- 什么是脏矩形?
- 实习期间最大的收获是什么?
- 平时怎么使用AI?
- 怎么看AI对软件开发的影响?
- 有没有跟同事沟通不顺畅、需求没对齐的时候?怎么处理?
- 课外看过哪些技术书籍?
- 本科到硕士之间为什么有一年的空档?
- 为什么选择现在的学校?
- 相比其他候选人,觉得自己有哪些优势?讲三点。
后面就是反问环节。
UI性能优化,到底怎么证明自己优化过?
这道题至少要想清楚三个问题。
第一,性能瓶颈是怎么找到的?
不能看到界面卡顿,就直接认为是渲染太慢。
有可能是事件处理耗时,也可能是控件更新、布局计算或者真正的绘制阶段出了问题。
比较直接的办法就是针对各阶段做耗时统计,有条件再结合性能分析工具查热点。
第二,具体做了什么优化?
如果是重复绘制太多,那就考虑减少不必要的刷新。
如果是某个操作阻塞了UI线程,就得考虑是不是应该调整任务执行方式。
不同原因对应的优化方法不一样。
第三,怎么证明有效?
最好选固定场景,对比优化前后的平均帧率、单帧耗时、卡顿次数等。
只说“现在感觉流畅多了”,显然不太够。
两轮下来,感觉有几个点挺值得注意
首先,这个岗位虽然叫驱动开发,但一面不是只考Linux内核。
多线程、MCU通信协议、摄像头驱动、图像格式、影像基础都有涉及。
这也跟候选人自己的经历有关。他有影像相关实习,也写过摄像头驱动,面试官自然会顺着这些内容问。
准备的时候,如果发现有些基础点一直解释不清,也可以看看这篇文章,结合自己的项目查漏补缺。
目前 9w+ 同学在看,3700+ 订阅。数据摆这儿,口碑自己说话,也感谢大家的支持,几乎0差评也说明大家也得到了自己想要的答案。
适合面经基础薄弱、想一次性系统梳理的同学。越早订越划算,内容只会越来越全,价格也只会越涨越高。
🔗 专栏直达:https://www.nowcoder.com/creation/manager/columnDetail/MJNwoM
先整理这么多。
本篇目录
当前问题0133
- 01
一面先是自我介绍,确认了一下岗位,随后就开始围绕实习项目提问。
- 02
介绍一下实习项目,尤其是影像相关的部分。
- 03
分离屏端的性能优化具体做了什么?分离和组合时有哪些优化?
- 04
分离屏和主机怎么保证操作和状态一致?
- 05
实习主要做的是上层开发,还是底层驱动?
- 06
应用层开发时,怎么处理多线程同步和竞态问题?
- 07
除了互斥锁,还了解哪些同步机制?知道无锁编程吗?
- 08
MCU开发中用过哪些通信协议?各自有什么特点?
- 09
为什么从原来的专业转到嵌入式和驱动开发?
- 10
介绍一下V4L2。如果要添加一个摄像头设备,应该做哪些工作?
- 11
如果现在有两个CMOS,应该怎么调试?
- 12
自己有没有实际写过摄像头驱动?
- 13
摄像头不出图,应该从哪里开始排查?
- 14
排查之前,是不是应该先确认设备有没有成功挂载?
- 15
有没有使用过MIPI接口的Sensor?
- 16
了解摄像头3A吗?
- 17
如果摄像头过曝,应该调哪些参数?
- 18
是否了解CMOS成像原理,以及常见参数的含义?
- 19
EV是什么?
- 20
了解哪些图像格式?YUV、RGB、NV12有什么区别?
- 21
YUV为什么可以减少色度数据量?
- 22
自我介绍。
- 23
从竞赛和实习项目里,挑一个印象最深或者最有成就感的项目介绍。
- 24
分离屏的UI性能优化具体怎么做?怎么发现性能瓶颈?优化效果用什么指标评价?
- 25
什么是脏矩形?
- 26
实习期间最大的收获是什么?
- 27
平时怎么使用AI?
- 28
怎么看AI对软件开发的影响?
- 29
有没有跟同事沟通不顺畅、需求没对齐的时候?怎么处理?
- 30
课外看过哪些技术书籍?
- 31
本科到硕士之间为什么有一年的空档?
- 32
为什么选择现在的学校?
- 33
相比其他候选人,觉得自己有哪些优势?讲三点。