小鹏汽车嵌入式软件开发一面面经
最近整理了一下面小鹏嵌入式软件开发岗位的一面内容。整体感觉是,一面问得还是比较扎实,重点集中在嵌入式基础、RTOS、通信协议、内存、驱动理解和项目细节上。题目本身不算特别偏,但比较考验基础是否成体系,尤其是很多问题都可以顺着项目继续往下深挖,所以准备的时候不能只停留在背概念。
- 请先做一下自我介绍,并重点讲一个你最熟悉的嵌入式项目
- 你项目中的数据流是怎样的,从采集到处理再到发送,中间经过了哪些环节
- MCU 从上电到进入
main函数,中间一般会经历哪些关键步骤 - 启动文件和链接脚本分别起什么作用,为什么嵌入式开发离不开它们
- 全局变量、局部变量、静态变量一般分布在哪些内存区域
- 栈和堆分别适合什么场景,在嵌入式里为什么很多项目会谨慎使用堆内存
const、static、volatile这几个关键字在嵌入式里分别常用来做什么- 如果一个变量会被中断和主循环同时访问,应该注意哪些问题
- 你怎么理解 RTOS,和裸机 super loop 相比,RTOS 的主要优势是什么
- 任务切换时到底切换了什么,所谓“上下文”通常包括哪些内容
- 消息队列、信号量、互斥锁分别适合解决什么问题
- 如果多个任务要共享同一份资源,怎样避免竞争和数据异常
- UART、CAN、SPI 这几种通信方式,各自更适合哪些典型场景
- 如果串口接收的数据存在丢包、错位或者半包问题,一般怎么处理
- DMA 的作用是什么,为什么它在串口接收、ADC 采样这些场景里很常见
- 看门狗的作用是什么,喂狗逻辑设计不合理会有什么问题
- 低功耗模式下,系统休眠和唤醒时通常要关注哪些内容
- 如果设备运行一段时间后偶发死机或重启,你会从哪些方向开始排查
- 你怎么理解驱动开发,驱动层和应用层之间为什么要做接口隔离
- 如果让你重新优化之前做过的项目,你会优先改哪些地方
准备嵌入式面试八股文我推荐这个专栏,真的很全面,很深入:
https://www.nowcoder.com/creation/manager/columnDetail/mPZ4kk
整体总结下来,这场一面的风格还是很典型的嵌入式开发面试风格,不会特别偏算法,但会很关注基础是不是扎实、项目是不是自己真正做过、出了问题有没有排查思路。准备这类面试的时候,我自己的感受是,光刷题不太够,还是要把知识点和项目经历真正串起来。比如问到任务调度,不只是知道概念,还要能联系到自己项目里的任务划分、同步机制和资源竞争;问到串口、DMA、看门狗,也最好能结合实际场景去讲。
如果是准备这类岗位,我觉得比较有效的方法是先按专题把基础过一遍,比如内存布局、启动流程、RTOS、通信协议、驱动分层、异常排查这些,再回过头把自己的项目重新梳理成一条完整链路:做了什么、为什么这么设计、踩过什么坑、怎么解决的。这样到面试里,不管面试官从哪个点切进来,都比较容易接得住。

查看15道真题和解析