DJI大疆【嵌入式软件工程师】技术面(凉经)
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.你有什么需要问我的吗?
很遗憾,这是一篇凉经,不过经过大疆的面试后我总结了很多经验,对后续的面试也有很大帮助。