当前位置: 首页 > 面试经验 >

【投稿】美团嵌入式软件开发面经汇总

优质
小牛编辑
99浏览
2023-07-23

【投稿】美团嵌入式软件开发面经汇总

【嵌入式未来】

嵌入式软件开发最强攻略一篇就够了!《嵌入式软件开发笔试与面试手册》:https://blog.nowcoder.net/zhuanlan/jvN8gj

软件开发笔试汇总专栏https://blog.nowcoder.net/zhuanlan/0oDWVm

以下是美团嵌入式面经汇总

一面:

问项目:

感觉对MCU相关的非常感兴趣,主要了解MCU的片上OS和各种驱动的掌握情况。

问基础:

实时操作系统内核的线程切换、内存管理、线程同步方式(信号量、互斥量、消息队列)的底层实现?

如果某线程出现卡死,那么操作系统在设计上该如何解决?

如果提升操作系统对关键功能的响应程度?

手撕代码:

反转链表

二面:

问项目:

感觉对linux相关的非常感兴趣,主要问项目里多线程并发编程的软件设计思想。

问问题:

如何保障功能模块对于突发情况的安全性?

如何在开发过程中做单元测试?

手撕代码:

删除链表倒数第K个节点

三面:

问项目:

总体都问了一下,对于做项目的动机和原因,提升和改进,进行提问。

问问题:

MCU如何在线程切换间隔16毫秒的情况下,实现对一个32位传感器的分两次各16位的数据采集?

为什么小型无人机的设计规格要求比民用航空器还要高?

一架无人机从软硬件层面考虑最重要的部分是哪一部分?

第一志愿投的嵌软,和我目前做的(mcu和无人机)也比较契合,结果给我挂了。后面被自动车配送部的自动驾驶系统工程师捞了约面试。这个是我第三志愿,当时纯属看到里面有个传感器方向的比较偏硬件才选的,而且本身也没报多大希望,我也一直以为对方是kpi面所以基本没准备。好了直接开始。

面试官人挺热情的,上来先向我介绍他们部门主要的业务和具体的工作内容,主要是把其他算法部门设计的自动驾驶算法部署到实车上然后根据特定的场景做优化(比方说算法部门设计的算法是针对通用场景,但实际车跑的路可能没有红绿灯,也可能是土路所以甚至连交通指示线都没有,就需要对这些特定场景做优化)。

然后我稍微介绍了自己的情况。我做的项目是UWB定位在无人机上的应用,用的stm32和freertos,主要的内容还是偏硬件的,算法上就是复现了uwb的tdoa定位算法。然后面试官以为我是做的控制算法,我和他说了是做定位算法,他应该不熟这块,后面就再也没问我项目相关的内容了。

之后大部分都是问的C++的内容,C++11标准新加了哪些内容,我回答多加了几个智能指针、列表初始化更加通用、新加了一些数据结构之类的。

然后问我智能指针的作用,我回答了智能指针是用类对指针做封装,可以在作用域结束的时候自动调用析构函数释放内存从而避免内存泄漏。然后又问我新标准的智能指针有哪些,我没用过不知道。

之后问我堆和栈的有什么作用和他们的区别,这个我只知道堆用来存放动态申请的变量,栈用来存放临时变量和函数参数之类的。

问我new和malloc这些用得多吗,我在rtos上用队列之类的比较多,基本不用动态内存共享数据。

问了几个数据结构的问题,vector和array的区别,没用过array答不出来;queue和dqueue的区别,没用过dqueue但是瞎编了一些。

让我手动实现vector,我不会,之后就只让我实现int类型的vector,成员函数只让实现push_back(),写得磕磕绊绊,面试官一直提示我,就差手把手教我敲代码了,最后我还是犯了很多低级错误(数组边界溢出、内存泄漏)现场手撕代码确实心态很不一样,平时不会犯的错误全犯上了

之后问数据结构,我说vector、map和unordered_map这些用得比较多,就问我map和unordered_map区别和底层实现,一个排序一个不排序,map用红黑树,另一个用哈希表。然后问我红黑树插入一个值的时间复杂度,我说没了解过红黑树的具体实现不知道。

之后问我操作系统,进程和线程这些。我只把背的概念答上了,又问我有没有做过多线程编程。我说只用过rtos,里面任务的概念和linux的进程线程这些类似,面试官应该也不太懂freertos就没接着往下问了。

又问了我代码管理工具有没有用过,我就说用过gitbash,只会常用的几个简单的指令add、commit、reset、clone、push、checkout这些。面试官问我如果commit了一个有bug的版本,后面修复后不想重新commit,因为这样会把有bug的那个版本留在仓库里,这个时候要用什么指令,我没用过不会。问我merge的作用,我忘了就没答上来。

之后问我对深度学习熟不熟悉,我说本科时候做过一些图像识别之类的。之后问我python,我说以有写过一些脚本做数据处理之类的,但是已经好久没写过python了。就让我用python写使用迭代器访问一个数组,我凭着仅剩的记忆写的也不知道对不对。

最后我问了他们对应届生怎么培养的,他说他社招进的也不太清楚。然后我说我之前只做过mcu和rtos的嵌入式开发,基本没怎么用过linux,他说他们部门主要还是在linux上做开发所以还是需要掌握的。

总的来说,因为本身是想投mcu方向的嵌软,再加上这个时间约面基本都是kpi面,我就完全没有准备,而且也是我的第一场面试,最近老板催得紧,八股什么的也没怎么背。结果没想到面试官特别特别热情,我答得特别烂也会很耐心教我,完全没有说因为kpi面就随便草草了事,全程面了一个多小时

一面

  • TCP的问题,一知半解的状态
  • I/O复用解决什么问题?为什么使用I/O复用?
  • TCP和UDP的区别?
  • 问项目中CPP语法问题?
  • 项目中算法?
  • 项目问题。

二面 一周后 (1h)

  1. 进行自我介绍
  2. 详细讲下对你提高很大的项目?
  3. 写一下类的拷贝构造(运行的时候,类里面没有加public:关键字,我服了)
  4. 虚函数的构造,能否有delete函数,构造函数能否有虚函数?
  5. 零偏和零漂的区别?还有一个专用名词忘记了?
  6. IIC的读寄存器的操作流程是什么?
  7. 场景题:通过一个系统的通信协议升级,怎样保证通信不受影响?
  8. 为啥是三次握手?
  9. 对智能锁的一些提议?
  10. 反问技术栈安排没有细致的思考,没有掌握好方法论的区别。

第一个问题,自我介绍

之后先做一道编程题:二进制中1的个数

需要把十进制转成二进制,数出32位二进制值中有多少个1,然后也涉及了负数补码的知识。

(之前准备的都是链表题,排序题,和栈有关的题,实在没想到来个这么底层的,做的很糟糕)。

之后开始问项目,首先问第一个项目电控都涉及了什么,我说底盘,esp32,树莓派什么的。问用树莓派做了什么,然后编程使用的是什么软件,怎么用云服务器显示温湿度情况,通信协议是什么,代码结构,dht11输出的是模拟量还是数字量。

之后问到第二个项目,看我项目中涉及232和485通信,问232和485通信协议的区别,之后问freertos,任务间如何通信,消息队列,消息队列中的消息是隐藏还是直接输出,之后问消息队列函数(居然答错了,想从地缝钻进去)。

之后面试官问我是不是只是看了源码,我实话实说我们最后选用了裸机开发,只是尝试了freertos,并未成功使用,然后问我裸机开发如何分配的任务,代码的大致结构,中断顺序优先级什么的。

还有一点关于qt的问题

再之后问我专利,我说专利虽然是老师报的,但确实是我自己写的,我写完老师把他自己放在了一作。。。。

然后是两个论文,我实话实说都是做的视觉方面,第一个使用了yolo7与cnn,第二个使用了opencv的图像处理,轮廓检测。之后问我是否搭载过嵌入式设备,我说只是在win系统,和云gpu上跑过,图确实是出来了,效果是有的,但没实物。

然后面试官开始和我聊家常,问我为啥不保研,成绩什么的,我说自己成绩前30%,也就能学术保研,而且保研会有很多未知情况,自己不稳,怕自己最后工作和保研哪个都没得到。

问我怎么得了那么多奖,有啥诀窍,我说也没啥诀窍,就一直在学,虽然有些学艺不精,但确实除了实验室组织的比赛,自己看到有啥比赛就叫其他同学和自己一起参加,他们负责其他,我编程,所以得了二十多个奖,也学了不少,c/c++/python/c#什么的,还做过俩游戏demo。因为比赛参加的也杂,一直没一个很专注的方向,也造成了现在很被动的局面。

然后问我平时最多使用的语言是什么,我说其实是python,因为建模比赛,其他比赛什么的都是python用的多。

问觉得自己笔试答的怎么样,我说感觉十分糟糕,第一题模拟栈调试了一个多小时,第二题动态规划,第三题第四题都没时间看,自己也属于临时抱佛脚,三月份才开始练leetcode,也没练多少

又问觉得自己代码能力怎么样,说飞控都需要代码能力很强,我觉得自己代码能力很一般,但代码整合能力还可以,目前练了一些题好了很多,还会再继续刷题提升自己的代码能力

还问我觉得到了飞控组能干啥,自己底层确实不太了解,我就说上位机或者通信还可以,自己如果真的能得到实习也会提升自己编写代码的能力。

最后是反问,我说具体什么时间会出结果,他说周六

总共用时一个小时,感觉自己答的很糟糕,准备的基本没用上,不过面试官很好,面试体验也很好。

面了一个小时,第二天早上人才库..自己八股基础太差了。整个面试过程很轻松、很舒服。一开始让自我介绍,然后让我介绍论文,因为水文又跟现在方向不相关,就简单讲了一些,没有深入问。然后开始问实习相关的内容,实习做的车辆定位相关的工程项目,面试官是飞控组,挺感兴趣,一直深入挖实习相关的问题。实习大概问了半个小时后,开始手撕一道区间链表反转题,只看了反转链表题,结果区间反转没写出来,跟跟面试官说了一下思路。然后开始问我八股:共享内存?进程通信?ROS通讯底层原理?C++move函数?C++虚析构函数?不记得还有没有别的了,然后就直接反问环节?1.更看重什么?面试官说更看重基础,要对原理有深入的理解,这样子才能做优化巴拉巴拉。我就知道得人才库了,因为八股回答太差了。

一面,70min

项目相关:

了解项目背景

SPI的通信方式

UART和SPI的有什么异同, 分别适合用于什么场景

软件流程图

UART通信数据用什么格式、封装

项目过程中最难解决的技术问题是什么

你觉得DMA最大的作用是什么

感觉是场景题:

没有操作系统的话怎么实现一些周期性的函数

一个函数要10ms执行一次,怎么保证10ms的周期 (答:用定时器)

同时有1ms、5ms、10ms、20ms,怎么做(裸机多任务系统)

项目里有这种周期性执行的函数吗

C语言八股

宏定义,static、volatile

git命令,分支

为什么要使用Makefile

RT-Thread给你印象最深刻的东西

调试工具用的是什么,调试环境

比如说:

现在有一项工作你是负责人,几个同学一起做,但他的工作还没完成影响到进度,你会怎么做

你在工作过程中遇到的非技术方面的比较难解决的问题是什么

遇到过的压力最大的事情是什么

是否有职业规划

实习时间

反问

二面 ,30min,一面后第一个工作日约二面

介绍一下项目

研究生阶段研究内容是什么,项目有什么难点吗

有用到操作系统吗

对使用的硬件电路有了解吗

芯片的驱动是自己写的吗,还是厂家写好的

有用到什么算法吗

uart、spi、iic具体的应用场景,有什么不同

你依据什么原则去选择通信协议

你软件中 中断 用的多吗

你觉得传参用指针的形式有什么好处

你觉得RTOS、Linux有什么区别

你在写C的时候一般常用的数据类型有哪些

float的精度是多少

你对堆栈有什么管理吗(笑死根本不用堆)

需要实现分配堆栈的空间大小吗(答了STM32是可以配置堆栈的大小的)

你会基于什么原则去配置堆的大小

C++这里也有使用经验吗(答刷题用C++)

以后有考虑在美团做嵌入式的开发吗

实习时间

反问

1、聊项目

本人是做倾转旋翼机飞控的,面试官首先让介绍一下自己然后谈项目经历,问了各个阶段的控制策略及算法,巴拉巴拉一顿谈,本身是搞这个的,说的还算比较流畅,问的问题都是和项目相关的大都是你再说,他在听,没听到问你,只要你认真做项目这部应该不难。

2、问一些控制相关的基础知识

2.1、 稳定裕度

最近在刷c/c++代码,把控制的基本知识都忘记的差不多了,这么基础的东西一时都想不起来了,跳过。回来查了下资料:

稳定裕度:稳定裕度根据环(稳定)幅相特性曲线点的相对距离,可以判别系统的相对稳定裕度,称之为稳定裕度。稳定裕度应用时考虑幅稳定裕度和相角稳定裕度。

2.2、 带宽

控制系统的带宽一般指闭环系统的bode图中幅频特性曲线下降到-3分贝所对应的频率,注意这里是闭环系统的幅频特性,不是分析稳定性用的开环系统幅频特性。控制系统的带宽主要由其闭环传递函数的零极点决定,反映了当参考信号高于此频率后时,系统将无法以正常幅度跟踪,因而带宽越大,系统能响应的频率也越快。

2.3、如何调PID

问到点上了,主要就是干这个的,一顿巴拉巴拉。首先应该一环一环往外调,从内环到外环,首先i值和d值尽可能小(d可以给0),然后给个p值,进行实验,如果震荡就减小P的值,同时加点d,分析飞行日志,如果期望和响应存在静差,则加大i,按照这个方法反复调试,直到系统稳定。

反问:

系统震荡是减小p么?当时一脸懵逼,后来面试官给我解释分高频震荡和低频震荡,不同震荡调节的方式是不一样的。默默点头,可能我没遇到过。

2.4、攻角的定义(固定翼)

答得是攻角就是迎角,指气流坐标系与飞机机体坐标系x轴的夹角。回来查下标准答案是迎角的定义是飞机机翼的翼弦与相对气流之间的夹角 ,向上为正。

3、反问环节

3.1、你们属于哪个科室的?

答:飞控与导航实验室

3.2、民航空域管理比较严格,现在已经实现用无人机送外卖了么?

答:在深圳某些试点小区已经实现一年多了,全国除北京外空域基本都可以飞。

3.3、主要用什么语言编程?

反问:你平时用什么编程?matlab?回答:用c++,才入学是用matlab一段时间,后来感觉工程上matlab不太实用,转向c++了。面试官:我们用的是matlab,然后转成c++。我:那飞控的整体框架是别的部门写的么?面试官:嵌入式部门负责这个。我:,感觉聪明反被聪明误。

3.4、方便问下你们用什么控制算法么?

答:自抗扰。

 首先介绍一下自己的背景。本科是某211自动化专业,研究生是某211控制科学与工程专业的。研究生做的就是飞行控制和制导算法,算是跟专业很对口的一份实习了。读研期间做过软件界面,写过控制、制导算法,前前后后加起来大概有5个项目经历,还算是经历比较丰富吧。       本来我是没有实习的想法的,因为听师兄说我们实验室之前就没有人出去实习,但我还是抱着试一试的态度,就算是去不了就当作给自己长经验了,也方便后续的提前批和秋招的准备。       闲话不多数,简单写一些笔试、面试的过程。       笔试:由于并不是传统意义上的互联网(前端、后端...这些),所以笔试也是蛮简单的。一共四道编程题,还有几道神经网络、人工智能、自动控制原理的选择题。编程题过了3.9。由于没接触过神经网络的内容,所以选择题随便蒙的。整体的分数应该还是比较高的。过了一周就收到了一面的通知。       一面:技术面。首先是自我介绍,然后问了三个专业课问题。第一个是比较基础的问题,二阶系统的参数指标怎么算,就一个公式就解决了;第二个问题我都没有听说过;第三个问题是离散系统的一个问题,在准备专业课的时候匆匆看了一眼,也基本没答出来。然后就是聊项目。项目聊的很细,简历里写的每一个点、每一个字都问到了。一面大概持续了半个小时就结束了,整体感觉良好。       二面:二面距离一面一周的时间,也是技术面。自我介绍后一直都在问基础知识,真的是很基础的那种。比如二阶系统的那些参数指标是什么意思、PID怎么调参的这种。偶尔聊了聊项目。整体氛围还是很不错的。整体时间大概持续了不到半个小时。

#嵌入式##美团##面经##秋招#
 类似资料: