大疆 - 嵌入式工程师 (上海)- 面经(123)
❗❗如果本文对您有帮助,请不要吝啬您的评论、点赞、收藏与小花,这对我非常重要!谢谢!❗❗
部分内容为牛客其他同学分享,单击小标题即可跳转至对应链接
如果侵犯了您的权益,请与我取得联系,我将立刻删除对应部分
-1、背景
岗位:嵌入式工程师(上海)
工作职责:
你将深入最底层的技术,从芯片第一条指令到整个复杂智能系统,整个软硬件系统都将为你敞开;
你将探索各类应用场景,设计实现安全、易用、智能的功能,为全球用户带来全新的体验;
多通道发展路线,纯粹的工程师文化,期待才华横溢、充满热情的你加入大疆!
- 深入理解产品,参与到产品开发的整个生命周期中,包括需求定义、方案设计、实现、测试、生产、售后等;
- 基于芯片平台,设计并开发高性能、高可靠、高安全、高效率的智能硬件解决方案;
- 设计并构建复杂异构的系统平台,优化系统及资源部署,比如RTOS、Linux、 Android、安全OS、AI库、多媒体系统平台等;
- 深入参与算法部署与优化,实现部署各类算法,并不断优化提升算法性能;
- 深入参与软硬件协同设计,如芯片、硬件、结构协同设计,软硬件系统建模和量化分析,以达到系统性能、功耗、成本的最优,提升产品竞争力;
- 深入参与驱动开发、中间件开发、框架开发,解决系统稳定性和性能问题;
- 输出相关技术文档并构建领域知识库。
任职要求:
- 本科及以上学历,计算机、电子、通信、自动化、车辆工程或软件相关专业优先;
- 熟悉C/C++编程语言,具有良好的代码编写习惯;
- 具有扎实的数字电路、模拟电路、微机原理等专业理论基础知识;
- 具有一定的硬件基础知识,能够看懂原理图,掌握基本的硬件调试工具的使用方法(如示波器、逻辑分析仪等);
- 具有嵌入式相关开发经验,熟悉ARM/DSP等任一平台的体系架构;
- 熟悉一种及以上常用外设接口,如USB/UART/I2C/SPI/CAN/SD/BLE/MIPI/以太网/I2S/PDM等;
- 至少具有以下条件之一:
- 熟悉Linux或者某一款RTOS,了解其操作系统原理,具有驱动开发或者应用开发经验;
- 熟悉Linux/RTOS内核调试工具,熟悉内存管理、线程、任务调度、中断管理和存储等模块,具有实战经验;
- 熟悉音视频编解码,具有流媒体相关开发经验,了解V4L2、ALSA、DRM、GUI、屏幕驱动等驱动框架;
- 熟悉Linux网络驱动和协议栈,有无线网卡、BT等驱动开发经验;
- 熟悉DSP或NEON代码优化,熟悉vector C或 intrinsic C编程;
- 熟悉主流深度学习推理框架,有在DSP/NPU/GPU任一平台上深度学习网络部署或高性能算子优化的经验;
- 熟悉无刷直流电机、永磁同步电机基础控制原理,有相关驱动器开发经验,熟悉dSPACE/MBD等开发方式;
- 熟悉大功率电源,逆变器、DC/DC、buck、boost等电源拓扑,有相关电源产品调试经验;
- 熟悉无线调制解调原理,对无线通信协议有一定的了解,比如LTE/NR/WIFI等;
- 熟悉数字信号处理、模拟电子技术、音频算法等知识。
- 具有较强的学习、沟通表达能力和良好的团队合作精神;
- 具有无人机、机器人开发经验或有RoboMaster/Robocon比赛经验、各类电子设计竞赛经验者优先。
意向地点:上海市
时间线:
0716(投递) -> 0811(笔试) -> 0826(一面)-> 0828(二面)-> 0910(HR面)-> 1008 ❌
0、笔试
1、面经
1.1、一面
一
- 无基本八股文考察,大部分围绕简历的项目/实习经历展开追问
- 多线程人脸识别项目中,项目是基于怎样的考录要使用多线程,使用单一的一个进程不行吗?(这个项目中,我如果使用单一进程的话会导致视频播放非常卡顿,使用多线程+队列缓存的方式可以提高视频的帧率)
- 问项目遇到最大的难题?(内存泄漏问题,简单来说就是编程时申请了内存但是后续没有释放,而指针却置空了,程序重复运行造成内存泄漏,一天后虚拟内存接近用满的状态程序执行异常)
- 你是如何排查问题的?花了多长时间,用了哪些 Linux 内存泄漏的排查工具?(如 valgrind)
- Linux 下: VSS RSS PSS 的区别?
- FreeRTOS 任务调度的底层实现了解吗?
- STM32 单片机项目,为什么要使用消息队列,可以用其他方式代替吗?
- 多线程之间要传输大量的数据,如何实现?
- 对大疆有什么了解?用过大疆产品吗
二
- 自我介绍(介绍你的背景和教育经历,特别强调与嵌入式系统相关的学习和项目经验)
- Linux 中的线程一般是怎么调度的?
- 如果现在是一个单核的 CPU,那么多个线程是按什么顺序去运行的?也就是线程的系统调度?
- 如果现在多个线程,怎么确定哪一个会先被执行?
- 能简单说一些你用过的 STM32 的一些芯片的配置吗?CPU 主频,Flash 和 RAM 分别都是多大的?
- 你在 STM32 上都做过哪些开发?
- 你开发过哪些驱动吗?
- 你了解整个 SPI 的通信过程吗?SPI 有几根线,分别是什么?你使用 SPI 的时候速率配置的是多少?
- 有使用过 DMA 吗?解释一下什么是 DMA?
- SPI 有 4 种模式你知道是哪 4 种模式吗?
- 你在开发调试过程中有遇到过哪些难以解决的问题可以分享一下吗?
- 你有做过一些比较大型的软件开发吗?就是一些比较大的功能需要做一些设计、分层的东西。
- 中间层的设计你考虑了哪些因素?
- 进程通信有使用过一些锁和同步的东西吗?
- 多个进程在获取不到锁的时候会进入什么状态?
- 假设一个低优先的进程A获取先到锁,高优先级的进程B获取不到锁,那高优先级进程B的进行也会阻塞吗?
- 那如果还有一个任务 C,优先级介于 A 和 B 之间,那么 C 任务会去抢占 CPU 资源吗?
- 那这样导致 B 等待资源的时候会越来越长,这样的问题有方法可以解决吗?
- 用什么方式提高 A 的优先级?
- 那么 A 的优先级需要提高到多少?
- Linux 是在用户态开发还是内核态开发?
- 在用户态开发中程序跑飞,出现段错误等情况,你通过什么方式去定位?
- 运行态的错误怎么调试?
- 知道程序分成那几个段吗?
- 堆和栈有什么区别?
三
- Uboot 中不同异常向量表的设置;
- 如何设置 Uboot 的 C 语言环境;
- ARM 的工作模式;
- 如何将项目中的一个检测做成自动化的模式;
- Uboot 启动的流程;
- 有没有对项目通信部分做过修改;
四
- 为什么不做算法,选择嵌入式
- 各种语言的区别
- C++ 虚函数的实现
- 操作系统,你最了解哪一个
- 页表实现机制,分页的缺点?
- 操作系统调度过程深挖
- 系统调用过程深挖
- 做过驱动吗
- 哪里人,想去哪里工作
- 反问
==以下五~十五为牛客-嵌入式盟主整理,这里给出链接🔗==
五
- 自我介绍;
- 问了很多自我介绍里的内容,这里不提;
- 芯片选型考虑哪些因素?
- 系统用了哪些外设?
- 对哪些通信接口熟悉?介绍一下 SPI;
- 线程都有哪些状态?及其各自的转换?
- 有 cache 的 CPU 上使用 DMA 如何保证数据的一致性?
- 系统跑了几个任务?
- 按键防抖如何实现,该线程优先级如何设置?
- 平时怎么 debug?
- 用过哪些锁?
- static 关键字作用?
- 程序段还有哪些区?
- 哪些地方会用到栈?有没有关注 FLASH 和 RAM 空间?
- volatile 关键字作用?
- 选择 DJI 的主要原因?
- 有用过 DJI 的产品吗?
- 反问
六
- MCU 能不能运行 Linux?
- STM32 启动过程?
- 进程和线程的区别?
- C++ 为什么有指针还要引用?
七
电话一面 30 分钟
- 自我介绍
- 介绍项目
- 详细讲项目流程和代码思路
- 因为用了 RTOS,所以详细问了几个线程间的通信和同步
- 问为什么用这种方式并设置场景让我换别的方案
- 大概项目聊了 15 分钟;
- Linux 的中断流程,有哪些中断处理操作?
- 阻塞休眠原理
- tasklet 和 workqueue 的底层区别?
- RTOS 采取哪些手段保证他的实时性?
- 在做硬件驱动的时候,碰到的比较困难的问题?
- 项目中有制定通讯协议,就问有出现过什么通讯错误,出现错误了怎么办?通讯丢失怎么办?
- 做过哪些 Linux 驱动,遇到过什么问题?
- Linux 中能进行浮点数运算吗?
八
一面 40 分钟 介绍项目用了 20 分钟
- RTOS 中哪里会进行线程调度
- 线程切换为什么用 PendSV,有什么优势?
- static 用法,变量存储位置
- C 语言编译后的内存分布
- volatile 变量作用?修饰哪些变量?为什么这些变量要用 volatile 修饰?
- SPI 四种模式
- 串口发送一个字节多少位
- 线程优先级反转,如何解决?
- 反问环节
九
- 自我介绍
- 51 和 32 架构的区别
- STM32 处理中断的过程
- 保护现场保护什么东西(寄存器和堆栈)
- 要保护那些寄存器?
- STM32 是要中断嵌套的吗,什么时候需要什么时候不需要
- Cortex-M 系列使用浮点会对 STM32 中断效率产生什么影响
- 对嵌入式哪方面比较深刻,研究比较深入的
- UART 是怎么样的接口
- UART 异步,不需要时钟,那为什么还要设定波特率
- SPI 跟 UART 在使用上有什么区别
- SPI 和 UART 需不需要区分主从
- SPI 的从是否可以主动读写主的数据,怎么做到的
- 写 I2C、SPI、UART 驱动需要哪些注意的地方
- I2C、SPI、UART 接收方式有哪三种(轮询,中断和DMA)
- 如果是中断收到的数据要谁去申请谁去释放?
- 中断里数据往一个 buffer 去放,这个 buffer 要谁去申请
- 如何保证 buffer 读和写的互斥
- 反问
十
- 介绍项目
- 用的什么单片机
- 有没有用到 RTOS
- 分了几个任务
- 由此问了一些 RTOS 的问题
- 你任务的优先级是怎么安排的,高优先级的的线程RTOS会怎么样处理?
- 相同优先级的几个线程是怎么运行的?
- 对于临界区数据的处理,使用互斥锁和自己通过条件来判断,哪样更好,为什么?
- 上下文切换的时候
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
嵌入式软件名企笔/面试真题合集 文章被收录于专栏
欢迎来到我的专栏,在这里,我将整理并分享2024年各大企业的真实笔试/面试真题,帮助求职者了解考试趋势和嵌入式常见考点。无论你是准备面试,还是希望提升自己的专业知识,这里都能为你提供宝贵的参考和学习资源。