背景:
面试者: 王某(以下简称我) 嵌入式行业刚入门 10年工作经历 从事方向为:GPS、BD导航,物联网,车联网方向
面试官:前华为员工 3年工作经验,现为1 创业公司嵌入式部门leader,公司已获得风投注资500W RMB,产品方向为物联网和小众市场产品。
面试地点:陕西某众创空间
职位:高级嵌入式工程师
以下开始介绍这次的面试经过:
惯例:首先是HR人员上场,填写标准制式的表格,填写完成后,一般都是自我介绍下,这里不再累述,干过几个公司,为什么离职,对本公司的了解,然后就是期望的薪资什么的。
完了就给了一份笔试题:时间30分钟,30分钟完成后通知HR,面试题如下:
对于一个刚毕业或者的工作2-3年的人来说,做笔试题可以检验处他的基本水平,但是超过5年的人很反感做笔试题,除非这个公司在业界很知名或者是外企。
正确答案没有查证:
以下是我的理解:
填空题1:
WLILE()语句里边首先是个赋值语句,然后是判断,循环里边是地址增加。
分析考察 = 和 == 区别答案 A
2:
二维数组定义和ASIIC码的知识
答案 C 二维数组定义 B 0X38 是字符‘8’的ASIIC码
3.:关于地址和值的考察 这个在嵌入式中大量用到,MCU的寄存器的定义就是这样定义的,一般人不会注意这些东西,毕竟芯片商把这块都给大家做好了,直接使用就行了
这个题当时考虑了半天还是打错了,快到时间的时候在试题背面画了类似的图,由于时间关系最后没修改答案正确答案
*(u32 *) (0x20000123)= 0x11223344;
*(u32 *) (0x20000123)&0xFF;
44.
简答题:
1.考察编程能力,编程习惯。对应编程题,在试题的背面只是写出了函数名 形参, 返回参数,具体内容未写,由于时间原因一般情况下 不做编程题
2.嵌入式经典的16个问题里边的 ,在题上用笔画出了有问题的地方,没形参,没返回值,不能用PRINTF函数,其他的没深究貌似浮点那也有问题。
3.IO输入输出有8中模式,对于一个常用STM32的人来说,8种模式用全的很少吧,浮空输入,模拟输入,上拉,下拉输入,OD ,PP,剩下的2个是复合型的没用过也就没记,模拟IIC的问题 ,用开漏方式,外接上拉电阻。
4.不做描述
基本在20分钟就做完了上边那些,就剩那个编程和填空的3的1,2不确定,无聊就在试题背面画了下大概。
30分钟时间到,通知HR试题答完,技术下来面试;
面试官过来,正式开始面试环节,礼貌性的问候和自我介绍,然后我就说了今天大家就是相互探讨,相互交流,学习,面试官就说(没介绍自己,负责什么的):把你的工作经历介绍下,做了哪些项目,大概介绍下。
我:什么时候毕业,毕业后在那个公司做了哪些项目,产品,产品应用方向,主要技术,外设,负责那部分,实现什么样的功能。下来来说重点部分,有几个产品是使用STM32开发的,用C语言编写,不过有时会把c写成C++的形式,可能是我表述的不是很清楚,就给他用Linux的驱动举例,咨询他是否会Linux,他的回答是肯定的,在Linux所有去驱动只要实现READ, WEITR ,IOCTRL,对应的设备只用去调用就行了,说白了就是c 实现面向对象的思想。给各位看下实例吧:
typedef struct
{
void (*Init) (void);
u8 (*GetICInfo) (IC_MEMORY_INFO* info);
u8 (*EraseSector)(u16sectorNo);
u8 (*Prog) (u8* data, u16 sectorNo);
u8 (*ProgRAM)(u8* data, u16sectorNo);
u8 (*Read) (u8* data, u16 sectorNo);
u8 (*Protect)(u32 data);
}DEVICE_IC_ST;
extern const DEVICE_IC_ST stm32;
关于C、C++我问了面试官一个最基本的问题结构体和类的区别,答案是数据。
这是唯一的一次我和面试官的互动。
下来就聊到STM32开发中会用上位机开发一些测试程序,讲了下什么情况下会测测试程序,开发环境,他问了下会QT没,我回答是用MFC,QT不会,然后就聊到了上位机下位机之间的通讯,和通讯协议,我在试题的背面写了我常用的协议格式,格式如下:
包头 |
LEN |
CMD |
DAT[N] |
CHK |
包尾 |
第一个问题出现了:包头是怎么实现的,由于这个问题过于简单没有回答,只是回答你只要能根据你定义的协议八数据解析出来就行了,一般情况下包头包尾根据自己常用的写个定义就行了,如果不知道怎么定义,我强烈鄙视(aa 55, “BS” )都行,只要能解析,数据不出错即可。
然后就说下如果没有包头 包尾的话是MODBUS协议,第一个为地址(0-255)并用中文说明是工业现场的通讯协议
下边的是在工作中定义的一条消息
主单元地址 |
功能码 |
寄存器地址 |
数据 |
CRC16校验 |
1字节 [FAH] |
1字节[06H] |
2字节 |
(占)2字节 |
2字节 |
第二个问题:介绍下什么是MODbus协议,我就大概介绍了下常用的01 03 06 10命令,单个的读写和多个的读写方式这个只是根据平时用到的做了个简介,当然不全对,只是个大概。看着对方胸有成竹的样子认为遇到行家了。MODBUS协议我也就用了几个产品
第三个问题:应用场合 震惊 前边都说了工业现场的通讯协议,然后有重复了一遍。
第四个问题:他们的稳定性是怎么保证的,MODBUS 80年代就开始用的,是比较好的一个协议,协议解析除了不出问题的话,一般出问题的后我们的处理办法就是重发,收到反馈为止
关于协议的稳定问题我反问了你们是怎么做,我们交流下,这个来回了3个,人家说这个是我问你的问题,你先回答,好吧谁让我面试者呢,就讲了重发机制,常用的2种方法一种是周期的重发,周期间隔相等,另外一种就是根据定义延长间隔时间重发,同时本地保存数据
引出了问题五:
本地怎么保存信息,数据内容加时间戳,并在上边的那个自定义协议上画出时间戳部分字段
引出了问题六:
本地怎么保存,一般情况下,存FLASH,对于要求比较高的数据直接存铁电。连接成功后打包上传,FALSH的容量可以根据理论值进行计算常用的是8MB 16MB 32MB 64MB 不差钱的可以用更大(也可以用SD TF卡存储,没提 害怕有引出其他问题)
问题七:
如果1S一次的数据怎么处理,一般是按照一页进行存储。
问题到这基本就完了,然后面试官就说了怎么针对我有敌意啊,让你讲个MODBUS,你就当我没接触过用最短的时间给我讲明白,我说我只能给你大概讲下,如果要细讲的我抽出半天的时间给你讲解,工业现场的通讯协议你也要问题用在什么场合,不是很明白吗,用在工业,不是我理解有问题,就是我智商有问题,然后就我们就没有必要在进行沟通了,就OVERL .
总结:
作为技术人员,我也面试过很多应聘者,大家之间是一种平等的交流,相互学习,相互探讨,通过简历对他做的东西有个大概的认识,能让来面试的基本都是从事过相关的工作或者相近的工作,通过有针对性的提问对面试者的技能又个大概的认知。如果面试人员的简历中出像类似的产品会进行细致的了解。对于面试人员的回答如果有异议也会给出一些解答和分析。
在以上的交流,不应该算做交流只能算作提问,发现面试官给人一种高高在上的感觉,面试的人员就是来面试,在回答的过程中有感兴趣或者不知道的就进行深究,完全不知道他要面试的这个岗位的目的。作为一个高级岗位,一般是要看面试者的基本的技能水平,处理问题,解决问题的能力,对产品的规划,把握,对开发进度的控制。人员的协调,处理能力。
在上边的提问中并没有完全体现出来。
附某公司高级工程师要求:
职位描述:
精通Android系统的软件的开发,对ios系统也熟悉
开发和维护智能设备,并且能开发基于Android系统的智能设备的应用
有效带领技术团队,建立并完善公司各项研发规范及流程
对项目开发流程、质量、进度的规划和控制管理。
负责系统架构设计、数据库设计、业务逻辑、核心代码等设计
带领团队完成移动端、PC端的开发任务
精通开发APP