大疆智能驾驶嵌入式软件工程师一面面经
面试时长:约50分钟
面试方式:视频面试
面试官:技术leader,看起来是做底层驱动和系统相关的
关于春招
今年春招从2月底就陆续开始了,大疆的智能驾驶部门招人需求还挺大的,主要是车载域控制器、传感器融合、实时系统这些方向。建议大家尽早投递,提前批的面试节奏会快一些,而且HC相对充足。
春招相比秋招竞争会小一些,但是对基础要求不低,尤其是嵌入式方向,既要懂软件也要懂硬件,准备起来内容比较多。
嵌入式方向如何准备
基础知识方面:
- C语言要非常扎实,指针、内存管理、位操作这些必须熟练掌握
- 操作系统重点看进程线程、内存管理、中断机制、调度算法
- 数据结构和算法也要准备,虽然嵌入式考得相对少,但基本的链表、树、排序还是会问
- 计算机组成原理和体系结构很重要,要理解CPU、Cache、总线、存储器这些硬件原理
嵌入式专业知识:
- 熟悉至少一种MCU或SOC,比如STM32、ARM Cortex系列,了解其架构和外设
- 掌握常见通信协议:UART、I2C、SPI、CAN等,知道它们的时序和应用场景
- 了解RTOS的基本概念,最好实际用过FreeRTOS或RT-Thread
- Linux驱动开发要有所了解,字符设备、块设备、网络设备的框架
- 中断、DMA、定时器这些是高频考点,要深入理解原理
项目经验(重点):
- 移植FreeRTOS到STM32F4平台,实现多任务调度和任务间通信,深入理解了任务切换、信号量、消息队列的底层实现机制,通过优化任务优先级和栈大小将系统响应时间降低了30%
- 开发基于CAN总线的多节点通信系统,实现了自定义的应用层协议,处理了总线仲裁、错误检测、重传机制等问题,最终实现了99.9%的通信可靠性
- 编写IMU传感器驱动程序,通过SPI接口读取陀螺仪和加速度计数据,使用DMA+双缓冲机制实现高速数据采集,采样率达到1kHz,并通过卡尔曼滤波算法进行数据融合
- 实现了一个轻量级的内存池管理器,解决了频繁malloc/free导致的内存碎片问题,将内存利用率提升到95%以上,消除了内存分配失败的风险
- 调试过一个复杂的中断优先级冲突问题,通过逻辑分析仪抓取信号时序,定位到是中断嵌套导致的栈溢出,最终通过调整中断优先级分组和增加栈空间解决
- 使用Buildroot定制嵌入式Linux系统,裁剪内核模块,优化启动时间从15秒降到3秒,并交叉编译了应用程序和第三方库
- 开发过字符设备驱动,实现了ioctl接口用于用户态和内核态的数据交互,理解了内核空间和用户空间的内存映射机制
学习资源推荐:
- 《深入理解计算机系统》必看,理解底层原理
- 《嵌入式Linux应用开发完全手册》适合入门
- 看一些开源项目的代码,比如U-Boot、Linux内核驱动部分
- 多逛逛嵌入式相关的论坛和博客,了解实际工程问题
整体感觉面试官比较nice,会根据你的回答深入追问,考察得比较细致。问题涵盖了C/C++基础、操作系统、嵌入式系统、实时性相关的内容,还有一些智能驾驶场景下的实际问题。
全网最全面的嵌入式八股文专栏:https://www.nowcoder.com/creation/manager/columnDetail/mPZ4kk
面试题目
- 介绍一下volatile关键字的作用,在嵌入式开发中什么场景下必须使用
- 说一下中断的处理流程,中断上下文和进程上下文有什么区别
- 什么是内存屏障,为什么需要内存屏障,在ARM架构下有哪些内存屏障指令
- DMA传输的原理是什么,使用DMA需要注意哪些问题
- 实时操作系统和Linux的区别,什么场景下需要使用RTOS
- 任务调度算法有哪些,抢占式调度和非抢占式调度的区别
- Cache一致性问题是什么,多核系统下如何保证Cache一致性
- 说一下大小端的概念,如何判断系统是大端还是小端,跨平台通信时如何处理字节序问题
- I2C和SPI通信协议的区别,分别适用于什么场景
- 看门狗的作用是什么,如何设计一个可靠的看门狗机制
- 在嵌入式系统中如何进行内存管理,如何避免内存碎片
- 说一下中断优先级和中断嵌套,如何设计合理的中断优先级
- 智能驾驶系统对实时性要求很高,如何保证关键任务的实时响应
- 如果传感器数据采集出现延迟或丢帧,你会从哪些方面排查问题
- 你在项目中遇到过哪些嵌入式系统的性能瓶颈,是如何优化的
个人感受: 题目比较贴近实际工作场景,不是纯粹考八股文,需要有实际的嵌入式开发经验。面试官会根据简历上的项目深入问,所以简历上写的东西一定要熟悉。整体难度适中,但考察面比较广,既有理论也有实践。建议多做一些底层相关的项目,了解硬件和软件的交互,这样回答问题会更有底气。