大疆嵌入式算法一面面经 | base上海 | 八股深挖
刚结束大疆嵌入式算法岗的一面,趁着记忆还热乎赶紧来发个面经。base上海,整体时长一个多小时,面试官非常老道,八股问得超细,项目挖得很深,问题层层递进,稍微卡一下就继续往里追问,体验上属于压力面那一类。
整体感受
这次面试的覆盖面是真的广,从单片机裸机、RTOS源码、ARM架构,一路问到Linux内核VFS、进程调度、驱动模型,中间还穿插了C/C++基础八股、图像算法、Camera HAL框架,最后再来一道手撕。如果只复习了某一个方向(比如纯嵌入式或者纯Linux),应该会比较吃力。我自己感觉答得磕磕绊绊,有些细节问到底实在编不下去就老实说不会了,面试官倒也没为难,听完就接下一题。
面试题目记录
(按面试顺序整理,部分细节可能有遗漏)
- 自我介绍
- 项目里碰到的最难的问题是什么,怎么解决的
- 裸机和RTOS如何选型,什么场景该上Linux驱动
- RTOS如何保证实时性
- FreeRTOS源码层面如何实现任务调度
- FreeRTOS的任务切换底层是怎么做的
- 怎么判断一个MCU能驱动几路电机
- 如何根据主频估算能带动多少路电机
- 摄像头驱动底层如何检测驱动错误
- 如果打印日志,如何根据日志排查I2C驱动问题
- I2C驱动的完整时序讲一下
- 为什么需要头文件
- 头文件分尖括号和双引号,引入顺序应该怎么写
- 追问:就是要先写双引号再写尖括号,理由是什么
- float可以移位吗
- 追问:就是要让float移位怎么办(提示可以用指针强转)
- new和malloc的区别
- 进程间、线程间通信方式,管道的优势是什么
- 同进程的多个线程之间,可以用socket通信吗
- 聊聊Camera HAL,CamX框架的工作流,ISP简单介绍一下
- 仿射变换的原理简单说一下
- Uboot启动流程和Linux启动流程,把两个串起来讲
- 页表实现机制,分页的缺点是什么?三级页表的原理?页表存在的意义
- 操作系统调度过程深挖,内核由哪些部分组成
- tasklet和workqueue的底层区别
- 做过哪些Linux驱动,遇到过什么问题?项目都是自己做的吗?讲讲难点
- 编译器优化做了哪些事情,O2和O3的区别
- 知道cacheline填充减少伪共享吗
- Linux内核了解多少,重点聊进程调度和VFS
手撕代码
给一个整数N,螺旋打印1到N×N的螺旋矩阵。
题目本身不算难,经典的边界收缩题,主要看代码风格和边界处理。面试官会让你边写边讲思路,中途还会追问空间复杂度能不能再优化、N是奇数偶数的边界情况怎么处理,基本一边写一边讲一边被打断。
说真的,这次能撑下来真得感谢秋招前一直在跟的一个专栏 ——《嵌入式软件工程师面试完全指南》。今天面试问到的几乎全部都能在专栏里找到对应章节,有些题目甚至原题难度。我自己就是当初简历薄、面经底子差,被秋招毒打了几场之后才下决心系统补一遍,订了之后是真心觉得回本。
目前专栏已经更新到 32篇 / 12w+字,内容基本覆盖嵌入式岗会被问到的所有方向:
- C语言陷阱 / 计网高频
- 操作系统 / RTOS原理(FreeRTOS源码这块讲得特别细)
- Linux驱动开发(我这场被问到的tasklet/workqueue/VFS都有)
- 通信协议 / 硬件基础(I2C/SPI/UART时序全套)
- 项目高频问题 + 反问环节话术
现在 4.7w+同学在看,3300+订阅,销量基本就是口碑了,适合面经底子薄、想一次性系统梳理的xdm。专栏还在持续更新中📈,内容只会越来越全,价格也只会越涨越高,越早订越划算。
🔗 专栏直达:https://www.nowcoder.com/creation/manager/columnDetail/MJNwoM
