大疆 - 嵌入式工程师 (上海)- 面经(123)

❗❗如果本文对您有帮助,请不要吝啬您的评论、点赞、收藏与小花,这对我非常重要!谢谢!❗❗

alt

部分内容为牛客其他同学分享,单击小标题即可跳转至对应链接

如果侵犯了您的权益,请与我取得联系,我将立刻删除对应部分

-1、背景

岗位:嵌入式工程师(上海)

工作职责:

你将深入最底层的技术,从芯片第一条指令到整个复杂智能系统,整个软硬件系统都将为你敞开;
你将探索各类应用场景,设计实现安全、易用、智能的功能,为全球用户带来全新的体验;
多通道发展路线,纯粹的工程师文化,期待才华横溢、充满热情的你加入大疆!

  1. 深入理解产品,参与到产品开发的整个生命周期中,包括需求定义、方案设计、实现、测试、生产、售后等;
  2. 基于芯片平台,设计并开发高性能、高可靠、高安全、高效率的智能硬件解决方案;
  3. 设计并构建复杂异构的系统平台,优化系统及资源部署,比如RTOS、Linux、 Android、安全OS、AI库、多媒体系统平台等;
  4. 深入参与算法部署与优化,实现部署各类算法,并不断优化提升算法性能;
  5. 深入参与软硬件协同设计,如芯片、硬件、结构协同设计,软硬件系统建模和量化分析,以达到系统性能、功耗、成本的最优,提升产品竞争力;
  6. 深入参与驱动开发、中间件开发、框架开发,解决系统稳定性和性能问题;
  7. 输出相关技术文档并构建领域知识库。

任职要求:

  1. 本科及以上学历,计算机、电子、通信、自动化、车辆工程或软件相关专业优先;
  2. 熟悉C/C++编程语言,具有良好的代码编写习惯;
  3. 具有扎实的数字电路、模拟电路、微机原理等专业理论基础知识;
  4. 具有一定的硬件基础知识,能够看懂原理图,掌握基本的硬件调试工具的使用方法(如示波器、逻辑分析仪等);
  5. 具有嵌入式相关开发经验,熟悉ARM/DSP等任一平台的体系架构;
  6. 熟悉一种及以上常用外设接口,如USB/UART/I2C/SPI/CAN/SD/BLE/MIPI/以太网/I2S/PDM等;
  7. 至少具有以下条件之一:
    1. 熟悉Linux或者某一款RTOS,了解其操作系统原理,具有驱动开发或者应用开发经验;
    2. 熟悉Linux/RTOS内核调试工具,熟悉内存管理、线程、任务调度、中断管理和存储等模块,具有实战经验;
    3. 熟悉音视频编解码,具有流媒体相关开发经验,了解V4L2、ALSA、DRM、GUI、屏幕驱动等驱动框架;
    4. 熟悉Linux网络驱动和协议栈,有无线网卡、BT等驱动开发经验;
    5. 熟悉DSP或NEON代码优化,熟悉vector C或 intrinsic C编程;
    6. 熟悉主流深度学习推理框架,有在DSP/NPU/GPU任一平台上深度学习网络部署或高性能算子优化的经验;
    7. 熟悉无刷直流电机、永磁同步电机基础控制原理,有相关驱动器开发经验,熟悉dSPACE/MBD等开发方式;
    8. 熟悉大功率电源,逆变器、DC/DC、buck、boost等电源拓扑,有相关电源产品调试经验;
    9. 熟悉无线调制解调原理,对无线通信协议有一定的了解,比如LTE/NR/WIFI等;
    10. 熟悉数字信号处理、模拟电子技术、音频算法等知识。
  8. 具有较强的学习、沟通表达能力和良好的团队合作精神;
  9. 具有无人机、机器人开发经验或有RoboMaster/Robocon比赛经验、各类电子设计竞赛经验者优先。

意向地点:上海市

时间线:

0716(投递) -> 0811(笔试) -> 0826(一面)-> 0828(二面)-> 0910(HR面)-> 1008 ❌

0、笔试

20240811 - 大疆 - 笔试

1、面经

1.1、一面

  1. 无基本八股文考察,大部分围绕简历的项目/实习经历展开追问
  2. 多线程人脸识别项目中,项目是基于怎样的考录要使用多线程,使用单一的一个进程不行吗?(这个项目中,我如果使用单一进程的话会导致视频播放非常卡顿,使用多线程+队列缓存的方式可以提高视频的帧率)
  3. 问项目遇到最大的难题?(内存泄漏问题,简单来说就是编程时申请了内存但是后续没有释放,而指针却置空了,程序重复运行造成内存泄漏,一天后虚拟内存接近用满的状态程序执行异常)
  4. 你是如何排查问题的?花了多长时间,用了哪些 Linux 内存泄漏的排查工具?(如 valgrind)
  5. Linux 下: VSS RSS PSS 的区别?
  6. FreeRTOS 任务调度的底层实现了解吗?
  7. STM32 单片机项目,为什么要使用消息队列,可以用其他方式代替吗?
  8. 多线程之间要传输大量的数据,如何实现?
  9. 对大疆有什么了解?用过大疆产品吗

  1. 自我介绍(介绍你的背景和教育经历,特别强调与嵌入式系统相关的学习和项目经验)
  2. Linux 中的线程一般是怎么调度的?
  3. 如果现在是一个单核的 CPU,那么多个线程是按什么顺序去运行的?也就是线程的系统调度?
  4. 如果现在多个线程,怎么确定哪一个会先被执行?
  5. 能简单说一些你用过的 STM32 的一些芯片的配置吗?CPU 主频,Flash 和 RAM 分别都是多大的?
  6. 你在 STM32 上都做过哪些开发?
  7. 你开发过哪些驱动吗?
  8. 你了解整个 SPI 的通信过程吗?SPI 有几根线,分别是什么?你使用 SPI 的时候速率配置的是多少?
  9. 有使用过 DMA 吗?解释一下什么是 DMA?
  10. SPI 有 4 种模式你知道是哪 4 种模式吗?
  11. 你在开发调试过程中有遇到过哪些难以解决的问题可以分享一下吗?
  12. 你有做过一些比较大型的软件开发吗?就是一些比较大的功能需要做一些设计、分层的东西。
  13. 中间层的设计你考虑了哪些因素?
  14. 进程通信有使用过一些锁和同步的东西吗?
  15. 多个进程在获取不到锁的时候会进入什么状态?
  16. 假设一个低优先的进程A获取先到锁,高优先级的进程B获取不到锁,那高优先级进程B的进行也会阻塞吗?
  17. 那如果还有一个任务 C,优先级介于 A 和 B 之间,那么 C 任务会去抢占 CPU 资源吗?
  18. 那这样导致 B 等待资源的时候会越来越长,这样的问题有方法可以解决吗?
  19. 用什么方式提高 A 的优先级?
  20. 那么 A 的优先级需要提高到多少?
  21. Linux 是在用户态开发还是内核态开发?
  22. 在用户态开发中程序跑飞,出现段错误等情况,你通过什么方式去定位?
  23. 运行态的错误怎么调试?
  24. 知道程序分成那几个段吗?
  25. 堆和栈有什么区别?

  1. Uboot 中不同异常向量表的设置;
  2. 如何设置 Uboot 的 C 语言环境;
  3. ARM 的工作模式;
  4. 如何将项目中的一个检测做成自动化的模式;
  5. Uboot 启动的流程;
  6. 有没有对项目通信部分做过修改;

  1. 为什么不做算法,选择嵌入式
  2. 各种语言的区别
  3. C++ 虚函数的实现
  4. 操作系统,你最了解哪一个
  5. 页表实现机制,分页的缺点?
  6. 操作系统调度过程深挖
  7. 系统调用过程深挖
  8. 做过驱动吗
  9. 哪里人,想去哪里工作
  10. 反问

==以下五~十五为牛客-嵌入式盟主整理,这里给出链接🔗==

  1. 自我介绍;
  2. 问了很多自我介绍里的内容,这里不提;
  3. 芯片选型考虑哪些因素?
  4. 系统用了哪些外设?
  5. 对哪些通信接口熟悉?介绍一下 SPI;
  6. 线程都有哪些状态?及其各自的转换?
  7. 有 cache 的 CPU 上使用 DMA 如何保证数据的一致性?
  8. 系统跑了几个任务?
  9. 按键防抖如何实现,该线程优先级如何设置?
  10. 平时怎么 debug?
  11. 用过哪些锁?
  12. static 关键字作用?
  13. 程序段还有哪些区?
  14. 哪些地方会用到栈?有没有关注 FLASH 和 RAM 空间?
  15. volatile 关键字作用?
  16. 选择 DJI 的主要原因?
  17. 有用过 DJI 的产品吗?
  18. 反问

  1. MCU 能不能运行 Linux?
  2. STM32 启动过程?
  3. 进程和线程的区别?
  4. C++ 为什么有指针还要引用?

电话一面 30 分钟

  1. 自我介绍
  2. 介绍项目
    1. 详细讲项目流程和代码思路
    2. 因为用了 RTOS,所以详细问了几个线程间的通信和同步
    3. 问为什么用这种方式并设置场景让我换别的方案
    4. 大概项目聊了 15 分钟;
  3. Linux 的中断流程,有哪些中断处理操作?
  4. 阻塞休眠原理
  5. tasklet 和 workqueue 的底层区别?
  6. RTOS 采取哪些手段保证他的实时性?
  7. 在做硬件驱动的时候,碰到的比较困难的问题?
  8. 项目中有制定通讯协议,就问有出现过什么通讯错误,出现错误了怎么办?通讯丢失怎么办?
  9. 做过哪些 Linux 驱动,遇到过什么问题?
  10. Linux 中能进行浮点数运算吗?

一面 40 分钟 介绍项目用了 20 分钟

  1. RTOS 中哪里会进行线程调度
  2. 线程切换为什么用 PendSV,有什么优势?
  3. static 用法,变量存储位置
  4. C 语言编译后的内存分布
  5. volatile 变量作用?修饰哪些变量?为什么这些变量要用 volatile 修饰?
  6. SPI 四种模式
  7. 串口发送一个字节多少位
  8. 线程优先级反转,如何解决?
  9. 反问环节

  1. 自我介绍
  2. 51 和 32 架构的区别
  3. STM32 处理中断的过程
  4. 保护现场保护什么东西(寄存器和堆栈)
  5. 要保护那些寄存器?
  6. STM32 是要中断嵌套的吗,什么时候需要什么时候不需要
  7. Cortex-M 系列使用浮点会对 STM32 中断效率产生什么影响
  8. 对嵌入式哪方面比较深刻,研究比较深入的
  9. UART 是怎么样的接口
  10. UART 异步,不需要时钟,那为什么还要设定波特率
  11. SPI 跟 UART 在使用上有什么区别
  12. SPI 和 UART 需不需要区分主从
  13. SPI 的从是否可以主动读写主的数据,怎么做到的
  14. 写 I2C、SPI、UART 驱动需要哪些注意的地方
  15. I2C、SPI、UART 接收方式有哪三种(轮询,中断和DMA)
  16. 如果是中断收到的数据要谁去申请谁去释放?
  17. 中断里数据往一个 buffer 去放,这个 buffer 要谁去申请
  18. 如何保证 buffer 读和写的互斥
  19. 反问

  1. 介绍项目
    1. 用的什么单片机
    2. 有没有用到 RTOS
    3. 分了几个任务
    4. 由此问了一些 RTOS 的问题
    5. 你任务的优先级是怎么安排的,高优先级的的线程RTOS会怎么样处理?
    6. 相同优先级的几个线程是怎么运行的?
    7. 对于临界区数据的处理,使用互斥锁和自己通过条件来判断,哪样更好,为什么?
    8. 上下文切换的时候

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

欢迎来到我的专栏,在这里,我将整理并分享2024年各大企业的真实笔试/面试真题,帮助求职者了解考试趋势和嵌入式常见考点。无论你是准备面试,还是希望提升自己的专业知识,这里都能为你提供宝贵的参考和学习资源。

全部评论

相关推荐

评论
4
14
分享

创作者周榜

更多
牛客网
牛客企业服务