DJI大疆【嵌入式软件工程师】2020秋招面经

技术面

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.多个进程在获取不到锁的时候会进入什么状态?
A:阻塞。

16.假设一个低优先的进程A获取先到锁,高优先级的进程B获取不到锁,那高优先级进程B的进行也会阻塞吗?
A:还是会阻塞。

17.那如果还有一个任务C,优先级介于A和B之间,那么C任务会去抢占CPU资源吗?
A:会的.

18.那这样导致B等待资源的时候会越来越长,这样的问题有方法可以解决吗?因为B的优先级才最高。
A:先把A优先级提高,等A释放后再给B。

19.用什么方式提高A的优先级?
RTOS有函数可以提高。

20.那么A的优先级需要提高到多少?
面试过后才突然想起来,从问题15-20,其实面试官想考的是“优先级反转问题”。但是我当时回答的磕磕绊绊,甚至有一些错误。

21.linux你是在用户态开发还是内核态开发?

22.在用户态开发中程序跑飞,出现段错误等情况,你通过什么方式去定位?

23.运行态的错误怎么调试?

24.知道程序分成那几个段吗?

25.堆和栈有什么区别?

26.你有什么需要问我的吗?

很遗憾,这是一篇凉经,不过经过大疆的面试后我总结了很多经验,对后续的面试也有很大帮助。

失败总结

  1. 不应该将很想去的公司放在一个去面试。
    大疆是我整个秋招面试的第一站,大概在7月初,当时还在忙实验室老板的活,都没开始准备秋招,没有做项目总结,没有开始刷面试题。所以很多理论知识虽然知道,但是回答得不够全面。
  2. 回答不够自信。
    后面发现自己都是用疑问的语气去回答问题。其实是回答对的,但需要更肯定的语气的回应面试官的提问。
  3. 缺乏实习经验,缺乏软件开发的正规流程和方法。
    其实这里就是面试官问到的软件调试、架构设计、资源优化的问题,我当时回答的很初级。因为平时都是在实验室做项目,基本都是以科研项目为主,而科研项目第一考虑是先实现功能而不在乎成本的。而企业级开发更多就会考虑产品稳定性、运行效率、迭代优化等。所以我总结为缺乏实习经验,如果有实习经验,就能够提前学习到更多工程思想。

一些建议

经过整个秋招之后总结,总结大疆的嵌入式岗位招聘和其他企业的相比有哪些差异。

  1. 大疆性格测试要好好做。
    同期有很多小伙伴都被性格测试给挂了,如果挂了连面试的机会都没有。
  2. 简历要丰富,注意突出项目和使用到的技能。
    同样,简历筛选也会筛选掉一大部分人。原因就是大疆现在还在成长期,人员规模还不算多,所以每年给出来的HC也是有限,供应远远大于需求,自然会在前面的环节筛选掉大部分人。
  3. 好好准备RTOS。
    很多做嵌入式开发的同学都是在linux上做开发,有一部分也是使用单片机,但是很多人基本都没有接触过RTOS。大疆是做无人机,其实不仅仅大疆,一些对控制要求比较严格的产品很多都会使用到实时操作系统,所以这部分内容很多公司没有特别要求的,但大疆面试中会经常问到的。强烈建议看FREERTOS官方文档学习。
  4. 好好复习一下编译原理和计算机操作系统。
    看看我上面的面试中,有多少问题是关于编译原理和一些操作系统任务调度这些理论知识。这些内容相信计算机的同学有系统学习过,但是像通信类、自动化、电子等专业可能就没有系统学习过。
  5. 最好有实习经验。
    最好接触过一些已经量产的产品的开发流程。这时候你就会站在工程师的角度去思考问题,而不是一个学生角度。需要学习架构设计思想、软件debug定位能力、资源受限做程序优化等内容。如果没有实习经验,也要自己有意识去准备这部分内容。

你可能感兴趣的:(【秋招面经】,面试,嵌入式,经验分享)