大疆 - 嵌入式工程师 (上海)- 面经(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年各大企业的真实笔试/面试真题,同时还整理了嵌入式软件相关的八股知识。专栏内容涵盖C/C++基础、嵌软常见通信协议、ARM、FreeRTOS、Linux OS相关问题汇总,希望能帮助求职者了解考试趋势和嵌入式常见考点。无论你是准备面试,还是希望提升自己的专业知识,这里都能为你提供宝贵的参考和学习资源。

全部评论

相关推荐

07-28 23:57
已编辑
哈尔滨工程大学 Java
各位牛友大家好!一年一度的秋招黄金季又来了!今年自动驾驶领域的明星公司——元戎启行 (DeepRoute.ai) 的秋招已经正式启动!作为去年成功上岸元戎的学长,深知秋招竞争的激烈和一份靠谱内推的重要性。今天不仅为大家带来软件开发岗(C++/Java/Python方向通用)的独家面经复盘,更重要的是提供🔥 官方最强内推渠道!使用我的内推码投递,简历优先筛选,大大提高过筛率!🚀 为什么选择元戎启行?行业风口: 深耕L4级自动驾驶,技术实力顶尖,与多家头部车企深度合作,量产落地进程加速!技术驱动: 核心团队成员来自国内外顶尖高校和科技公司,技术氛围浓厚,成长空间巨大。薪资福利: 提供极具竞争力的薪资(SP/SSP offer 非常大方!)、丰厚的签字费、完善的六险一金、补充商业保险、年度体检、带薪年假、节日福利、免费三餐/下午茶、租房补贴等。工作体验: 开放、扁平、高效的技术氛围,牛人聚集,能学到真东西!软件开发岗面试经验深度复盘(通用方向)我面试的是软件开发工程师-自动驾驶系统方向,整体流程高效紧凑(大概3周走完全流程),面试官专业且友好。📝 一面(技术面 - 基础+项目深挖,约60分钟)1. 自我介绍: 重点突出与岗位匹配的技能和项目经历。2. 基础知识:C++: 虚函数机制、多态实现原理、智能指针(unique/shared/weak区别及使用场景)、STL容器底层原理(vector扩容、map/set实现)、移动语义。操作系统: 进程/线程/协程区别与通信方式、死锁条件及预防/避免、内存管理(分页/分段)、常用Linux命令。计算机网络: TCP三次握手/四次挥手、TCP vs UDP、HTTP/HTTPS、常见状态码、WebSocket。数据结构与算法: 数组 vs 链表时间复杂度、树(二叉树遍历、BST)、堆、哈希表冲突解决。3. 项目深挖: 重点! 面试官会选择一个你最核心的项目,深入追问细节:项目背景、目标、你的具体职责。技术选型原因?遇到了哪些技术难点?如何解决的?系统架构设计?模块划分?关键算法/数据结构?性能优化?如何测试和验证效果?有没有考虑过其他方案?为什么最终选择这个?面试官特别关注:解决问题的思路、工程能力、对技术的深度理解。4. 简单算法题: 在线coding,LeetCode Easy/Medium难度,字符串处理或基础数据结构应用(例如:反转链表、两数之和变种、有效的括号、合并有序数组)。📝 二面(技术面 - 深度技术+系统设计/场景题,约60-75分钟)1. 针对一面或简历中其他项目进行更深层次的追问: 可能涉及并发控制、设计模式应用、底层优化细节等。2. 系统设计/场景题(重要):设计一个高性能的消息队列(核心功能、吞吐量、持久化、可靠性保障思路)。设计一个实时车辆轨迹数据处理模块(数据流、数据结构、查询效率、如何扩展)。设计一个线程池(核心参数、工作流程、任务队列选择、拒绝策略)。考察点:架构思维、权衡能力、对常见中间件/系统的理解、工程经验。3. 底层原理: 可能会深入问一些Linux内核机制(如epoll)、网络协议栈、内存分配器等(根据简历和面试情况)。4. 中等算法题: LeetCode Medium及以上难度,动态规划、DFS/BFS、链表/树的操作(例如:二叉树的最大路径和、LRU缓存机制、岛屿数量、排序链表)。📝 三面(技术面/主管面 - 综合能力+未来潜力,约45-60分钟)1. 技术广度: 可能会涉及一些非项目相关但体现技术视野的问题(如对云计算、分布式、数据库的理解)。2. 解决复杂问题的思路: 给一个开放的难题或Bug场景,问你的分析和解决思路。3. 学习能力/技术热情: 最近在看什么技术?有深入研究的领域吗?如何学习新技术?4. 沟通协作: 项目中如何与团队成员协作?遇到分歧如何处理?5. 职业规划: 为什么选择自动驾驶?为什么选择元戎?未来几年的规划?6. 可能还有一道中等难度算法题或设计题: 侧重思路和沟通。📝 HR面(约30分钟)自我介绍(简洁版)。对元戎的了解?为什么选择元戎?个人优缺点?期望薪资?工作地点倾向?手里是否有其他Offer?入职时间?反问环节(可以问团队情况、培养计划、公司文化等)。💡 面试准备建议1. 吃透基础: 操作系统、网络、数据结构、语言特性(尤其C++)、数据库是重中之重。2. 深挖项目: 对自己的项目了如指掌,能用清晰的逻辑阐述设计思路、难点、解决方案、收获。STAR法则很好用。3. 算法刷题: LeetCode至少刷透Hot 100 + 剑指Offer,重点在链表、树、数组、字符串、动态规划、DFS/BFS、堆栈队列。中等难度是主流。4. 了解公司业务: 了解一下元戎的技术路线、产品(如DeepRoute-Driver 3.0)、合作伙伴。面试官可能会问“为什么选择我们”。5. 模拟面试: 找同学朋友多练,尤其是项目阐述和系统设计。6. 心态平和: 展现积极自信、善于沟通、乐于学习的态度。🔥🔥🔥 重中之重:你的独家内推通道!强烈建议通过我的内推链接进行投递! 内推简历会进入优先筛选通道,大大提高你的简历通过率(免筛/快筛),避免在简历池中被淹没!很多优秀同学挂在了简历关,非常可惜!📌 内推方式如下(超简单两步):1. 点击官方校招投递链接: [此处替换为元戎启行官方校招网申链接]2. 在网申系统的“内推码/内推人”一栏,务必填写我的内推码:NTAW9FW填写内推码投递,你将获得以下优势:简历优先筛选! 更快进入笔试/面试流程。随时找我查询进度! (在系统允许范围内,我会尽力帮你查看)。投递后可以私聊我(牛客私信/微信[可留,可选]),备注“元戎内推+姓名”,我会拉你进信息交流群(如有),及时分享动态、答疑解惑。全程助力,让你的秋招之路更顺畅!⏰ 重要提醒秋招是越早投递优势越大!HC(HeadCount)有限,先到先得,后面可能竞争更激烈或HC被锁!认真对待每一次笔试和面试,充分准备。仔细阅读岗位JD(Job Description),确保技能匹配。行动起来!不要再观望了!元戎启行是自动驾驶领域不可多得的优秀平台,技术氛围好,发展前景广阔。现在投递,就是抢占先机!✅ 立即投递: https://app.mokahr.com/m/campus-recruitment/deeproute/145894#/home✅ 必填内推码: NTAW9FW有任何关于岗位、面试、内推流程的问题,都欢迎在帖子下方留言或直接私信我!我会尽力解答。祝各位牛友都能在秋招中斩获心仪的Offer!期待在元戎启行与你成为同事!一起Drive the Future! 💨PS: 欢迎已经拿到元戎面试邀请或Offer的大佬在评论区分享经验,互帮互助!PPS: 我的内推码真实有效,已经帮助多位同学成功进入流程!欢迎大家踊跃投递!
元戎启行HR面14人在聊
点赞 评论 收藏
分享
评论
21
134
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务