手撕~大疆嵌入式软件 面试题 面经
本文收集、梳理了大疆嵌入式软件面试的一系列问题,每个问题都值得我们深思、学习,我会逐个对问题进行分析、回答,当然答案肯定开放的,不会有一个标准的正确答案。但个人知识有限,题解可能有误、有缺陷,小弟抛砖引玉一下,希望各位大佬能各抒高见。
·
摘要
本文收集、梳理了大疆嵌入式软件面试的一系列问题,每个问题都值得我们深思、学习,我会逐个对问题进行分析、回答,当然答案肯定开放的,不会有一个标准的正确答案。
问题基本上来自于CSDN、知乎、小红书等各个平台,先谢过各位大佬们的热心分享。其中有的问题可能也不一定是来自于大疆,而是来自于相似的超级大厂,反正都是我们嵌入式软件工程师非常值得思考的一些问题,这些问题可能看上去简单,就这么简单一句话,但真要回答,要全面的考虑问题场景,可能需要非常多的知识点去做支撑。
个人知识有限,题解可能有误、有缺陷,小弟抛砖引玉一下,希望各位大佬能各抒高见。
蓝色链接为个人对各个问题的见解,仅供参考。
问题清单
驱动或硬件类别
- 设计CAN总线驱动时,如何处理总线冲突和数据丢包?
如何应对CAN总线冲突和数据丢包 - STM32中DMA设置的目的地址和源地址的数据宽度不一致,会发生什么现象?
DMA与外设数据宽度不一致的问题现象及本质 - 中断管理的设计逻辑是怎样的?
- 在MCU上如何实现用户态与内核态隔离?如何保障系统安全?
- 驱动开发中遇到过哪些棘手问题?如何解决的?
- 如何使用示波器排查串口通信异常问题
- 设计SPI驱动时,如何处理数据传输的稳定性问题
- 如何通过原理图定位IIC异常原因
- 对“软硬件协同设计”的理解是什么,如何平衡性能和成本
- 通过驱动开发解决硬件兼容性问题
- 嵌入式系统,想要做低功耗设计,可以从哪些方面考虑?
嵌入式系统 低功耗设计 - 如何评估一个嵌入式模块的功耗水平,会从哪些模块开始优化?
- C语言实现串口解析协议,核心逻辑是什么?
- 中间件开发,简化应用层调用
- 请以你熟悉的芯片型号,讲述从上电启动到运行用户程序的具体过程
- 嵌入式系统设计时,如何选择存储介质,FLASH SD卡
- 无刷电机控制原理,嵌入式软件在其中的作用
- 用嵌入式平台开发低功耗蓝牙时,如何优化连接稳定性
- 一次从芯片手册,到解决问题的经历
- 设计以太网驱动时,如何处理网络延迟和数据包重传问题
- 使用逻辑分析仪分析SPI时,会重点关注哪些参数
- 如何优化系统启动的时间,关键步骤是什么?
- 设计嵌入式系统电源模块时,如何实现低功耗模式的切换
- 熟悉那种存储管理方法,在嵌入式系统中如何应用
- 如何判断主频能带动多少电机
- 摄像头驱动底层,如何检测驱动错误
- 如果打印日志,如何根据日志排查12C驱动
- 12C驱动的时序
- Camera HAL的了解,camx框架的工作流,ISP简单介绍
- 做过哪些 Linux 驱动,遇到过什么问题?项目这些都是自己做的吗?简单说一下难点
- cortexM3 M4处理任务的区别
- 两个同一型号的芯片,想要挂载到同一个IIC总线上,如何操作?
- IIC为何是开漏输出
- 为什么要做Device BUS Driver这样的驱动模型?这三个分别代表什么
- 优化嵌入式系统性能的经历,功耗或速度
编程基础类别
- 野指针如何出现的,怎么解决?
C野指针的概念与应对(源头、阻隔、定位) - 嵌入式代码开发中,如何保证代码编写规范,有哪些工具?
- 讲讲多人合作开发一个项目时的工作流?如何解决多人之间软件版本冲突的?
GitFlow Workflow 工作流理论模型 - 如何管理代码的版本迭代和代码分支问题?
GitFlow Workflow 工作流理论模型 - 为什么需要头文件,设计头文件时需要注意什么?
头文件_架构师必经之路 - 头文件分尖括号和双引号,应该如何写引入的顺序 ?
- 就是要先写双引号再写尖括号,为什么 ?
- float可以移位吗 ?就是要float移位怎么办 ?
- new和malloc 区别?
- 编译器优化做了什么,O2 和 O3 的区别?
- 手撕代码:手撕螺旋矩阵 给一个整数N ,螺旋打印1 - N*N
- 虚函数了解吗?
- 函数return的值是怎么return的?
- 堆栈的区别?
- C语言中static的作用,是如何把变量/函数限制在当前文件的?
- C和C++混编的时候,需要使用extern来声明,为什么?
- C和C++编译时,有哪些不一样的地方?
操作系统类别
- RTOS设计优先级时,原则有哪些?
嵌入式系统中线程优先级的设计框架 - 线程切换的具体设计是怎样的?
- 讲一种你熟悉的RTOS,是如何选择最高优先级任务的?
- 信号量和互斥锁的底层实现机制是什么?
- 内存管理的设计思路如何实现?
- 实时操作系统的调度器如何设计?包括调度算法和上下文保存/恢复的具体实现
- 操作系统中有哪些场景会触发调度器调用?
- 释放信号量后,系统如何选择下一个调度的线程?
- 如何评估操作系统的实时性?中断响应时间如何测量?
- 在MCU上如何实现用户态与内核态隔离?如何保障系统安全?
- 释放信号量后,系统如何选择下一个调度的线程?
- 如何评估操作系统的实时性?中断响应时间如何测量?
- Linux和RTOS内核有何差异性,分别适用于哪些场景?
- 熟悉Linux内核的中断管理机制,如何避免中断嵌套导致的问题?
- 嵌入式系统中,如何设计日志系统,方便排查问题
- 对“异构系统平台”例如Linux+RTOS的资源调度有什么设计经验?
- 如何调试RTOS中的锁死问题,简述排查步骤
- 裸机和RTOS,如何挑选,包括Linux驱动
- RTOS如何保证实时性
- FreeRTOS源码如何实现任务调度
- FreeRTOS如何实现任务切换
- 进程间、线程间通讯,管道的优势
- 同进程多线程,可以socket通讯吗?
- Uboot 启动的流程/Linux启动流程,协同说一下这两个
- 页表实现机制,分页的缺点?三层页表的原理,页表的意义
- 操作系统调度过程深挖,内核组成
- cacheline填充减少伪共享?
- linux 内核的一些了解,主要是进程调度还有VFS
- Linux 下: VSS RSS PSS 的区别?
- FreeRTOS 任务调度的底层实现了解吗?
- STM32 单片机项目,为什么要使用消息队列,可以用其他方式代替吗?
- 多线程之间要传输大量的数据,如何实现?
- freerots底层任务是怎么调度的?
- 怎么选优先级最高的任务?
- 为什么操作系统要分为内核态和用户态?
- 死锁的必要条件?互斥条件、请求和保持条件、不剥夺条件、环路等待条件
- tasklet 和 workqueue 的底层区别 ?
- linux下有哪几类的设备驱动,这些设备驱动主要有哪些差异?实现上有什么区别?
- 用户空间的应用程序不能直接访问硬件资源吗?如果真的要访问有没有什么办法?
- 有几种方法从用户态进入内核态?
- RTOS任务切换在汇编层面做了什么?
- RTOS的内核调度的开销/实时指标有吗?展开说说
可靠性设计
- 嵌入式系统的高安全性设计有什么思路,例如攻击防御、数据加密等
- 讲讲你熟悉的AES加密
- 如何处理嵌入式系统在高温下的稳定性问题?
- 嵌入式系统的高可靠性设计有什么实践?例如看门狗 容错机制
嵌入式三大线程之 守护线程的设计框架 - 如何平衡嵌入式系统中功能复杂性和代码可维护性?
- 嵌入式系统"安全OS",如何防止固件被破解?
- 解决系统偶发性崩溃的经历,及如何解决?
AI算法类别
- 如何将AI算法部署到嵌入式平台中,并进行性能优化?
- 熟悉AI推理框架,例如tensorflow lite ,在嵌入式部署的难点
- 传感器数据融合算法
- 仿射变换原理,简单说一下
其他类别
- 入职5年后你希望成为怎样的技术人才?有何规划?
- 假设工作第3年时,你需带领应届生团队开发新项目,会如何安排?
- 比赛中,队员提出激进方案(可能夺冠或失败)时,作为队长如何抉择?
- 是否有日常运动习惯?坚持运动的原因是什么?
- 作为教练如何选人分工?你个人打什么位置及原因?
- 你是否有问题需要提问?
- 嵌入式工程师最重要的“底层思维”是什么?举例
- 对“多通道多发展路线”的工程师文化有什么期待,如何规划自己的技术成长?
- 如何向非技术人员,讲解“驱动开发”对产品体验的影响
- 加入公司后,最想深耕的技术方向是什么?
- 碰到的最难的问题 ?
- 如何分配自己的精力和优先级?
- 心目中理想的工作是什么样子的?
- 你觉得是先有技术,还是现有产品的想象然后再用技术去实现?
- 有没有遇到过压力特别大的项目?举例子说明
- 你觉得某个设备的哪个指标对用户体验来说,是非常重要的?
- 最具有挑战性的事情?
- 你做的这个项目,做的事情和业界对标存在什么不足?
- 未来3-5年的一个规划是什么?
- 对加班怎么看?
更多推荐



所有评论(0)