电子通信、嵌入式工程师的面试指南

作者:火哥

授权转载自公众号嵌入式老鸟的职场之道(id:ict_embedded),火哥也是我们的校园代理

火哥自从校招找工作到现在,面试过不下50家公司,拿到过不少于30个offer。虽然不能说百战百胜,但是也还算有着较高的面试成功率。这50场以上的面试中,火哥用过不同的简历,尝试过不同的项目介绍技巧,也算颇有心得,今天我们聊聊电子通信,嵌入式工程师面试的那些事。

一、公司面试求职者的目的是什么

《孙子兵法》有云知己知彼,百战不殆,当然百战不殆并不等于百战百胜,而是说在知己知彼的前提下,至少结果不会太难看,哪怕没有打胜战,也不至于损兵折将,一败涂地。

所以要去面试一家公司,首先搞清楚公司面试求职者的目的。很多人说,面试不就是为了招人嘛,当然招人是肯定要招的,但不仅仅这么简单。

不管是校招社招,有一些公司常年好像都在招聘,但是据我了解去面试的人成功率并不高,而且被问到远超当前工作经历的很难的问题时,求职者幼小的心灵遭受打击,这到底是怎么回事呢?其实面试你的公司其目的一般是这几类:

  • 常年挂机等大牛的公司

  • 寻找备胎的公司

  • 团队大体成形,有缺人的hc名额,但是项目不急的公司

  • 急招对口业务项目的公司

  • 常年挂机等大牛的公司。

这类公司可能根本不缺人或者暂时没有hc(head count 即部门招聘名额的意思)。但是他们也会长期在招聘网站上挂机,占用前排广告位,因为招聘网站在同行业流量还算大,挂机费用也不贵,挂上职位,能给公司刷存在感,起到广告效应,比电视广告便宜多了。当然如果真的有行业大牛(比如Linus.Tovalds等等)来面试,公司也可能乘机申请特批的hc(一般要CEO签字)挖到大牛。

寻找备胎的公司。

有些公司人员架构基本成形,但是考虑到每年有一定离职率,或者已经给牛人发offer但是不确定牛人一定会来,所以有可能接下来会继续邀请你面试,虽然可能面试过程你发挥不错,问题都答出来了,聊的挺开心,但是最后由于牛人按时报到或者今年离职率低,没有腾出hc, 最后没有给你offer,其实这也是经常发生的,所以各位求职者没有拿到正式offer之前,不要掉以轻心,不要抱有各种幼稚幻想,该继续面下一家,该干嘛继续干嘛。

团队大体成形,有缺人的hc名额,但是项目不急的公司。

这种公司也会经常出来邀请人面试,但一般难度会有点高,也会有点挑剔或者说谨慎,因为就目前公司人员配置,可能基本能完成项目,但是可能会有点赶,招你过来可以起到锦上添花但不是雪中送炭的作用,可能会更加看重你未来给公司带来的潜力,而不是对当前公司平台,业务的熟悉程度。这种公司可能会在面试的时候,用更多不常用的基础知识考察你的潜力,最后给最满意的候选人发offer,属于慢慢挑的公司。

急招对口业务项目的公司。

顾名思义,公司非常缺人,非常急,希望你一周之内就能到岗(这时裸辞已经离职的可能比在职的反而有优势)。这种公司招人,可能就不太管你基础,潜力这些东西懂不懂,上来的问题一般就是你熟不熟悉某某平台,有没有用过XX芯片,如果没有就基本over了。

所以面试胜败乃兵家常事,火哥这种全球一流公司的老油条,也有面试小公司翻船的经历,所以各位小伙伴面试求职,一定要保持良好心态,胜不骄败不馁,不要一点小的失败,被面试官鄙视两句就上纲上线,觉得自己无能,其实面试官里面也有很多傻逼的,很多时候面试失败并不是你的错,因为不同公司面试你的目的有时候你并不清楚。

当然,回到常规的面试流程,公司邀请你来面试,可能是希望多了解你的长处,看看你的长处能不能在公司对应的岗位上产生价值(当然不排除少数公司出一些难题,打击你的信心,让你不敢要太高的薪水)。

由于现代城市社会,都是陌生人社会,人和人之间,如果没有机会共事过一份事业,彼此之间是很难有信任感的,尤其是技术人员之间的信任感更低(其实体育领域也是要有信任感,才敢在比赛最后时刻把球传给最信任的队友完成绝杀)。

通过面试的了解(不管是问一些看起来用不上的基础知识还是常用的业务知识),都是在增加用人部门和求职者之间的了解和信任,只有你有足够的技术说服力,让面试官信任你的能力,对方才愿意把重要的工作交给你。

本文要聊的主要也是这种陌生人面试(一般曾经共事过的同事再次搭档,走走流程就好了,不用做那么多算法题,因为共事的过程能够给他们带来足够的信任),在这种陌生人面试的模式下,不管看重学历,大厂背景,还是算法内核等基础知识,业务知识项目经验等等,都是增加信任感的一个媒介,不同面试官对这些东西权重不一样,但是本质上还是考查你这个人值不值得信任,进而分配工作任务,有没有可能最后把事情搞砸。

二、如何准备简历

简历是找工作的第一关,能否写好简历直接决定是否有面试邀请。火哥的准备简历有这几点窍门,所以有着较高的面试邀请率:

  • 简历要有公司和行业的针对性

  • 使用云盘来保存简历

  • 技术词汇要通用,关键词加粗

  • GitHub、技术博客等展示技术能力的链接

  • 关于有用的证书

  • 是否让猎头帮忙推荐简历

简历要有公司和行业的针对性

电子通信,嵌入式相关的行业其实很多,不同行业不同公司看重的项目和基础技能其实是不一样的(比如你做视频相关的开发去面试语音技术相关的公司,对方对视频相关的项目经验不太了解或者兴趣不大)。所以去面试不同行业的公司,简历要有针对性,但是维护太多版本的简历又很累,而且简历简历,尽量简单(不超过2页),一般2页之内可能记录不下你做过的所有项目和技能信息。

所有火哥一般会有一个基础版的简历,里面记录了所有工作以来做过的项目相关的东西,但是这份简历一般不会直接投出去。除了基础版简历,火哥还会准备三份岗位版简历(针对视频开发,通用嵌入式驱动开发,通用嵌入式应用开发),每份简历里的项目经历都可以从基础版简历里面复制粘贴相关的项目,去除无关的项目。

如果遇到你特别中意的公司和岗位(dream company),那么就为这家公司的岗位专门修改一份简历。但是一般情况下,三份不同的岗位版简历根据JD描述,投递到不同的岗位。

使用云盘来保存简历

基础版和岗位版的简历最好在云盘上统一管理和修改,因为你world pdf文件,在不同的电脑和U盘上拷来拷去,久而久之你会搞乱,可能也分不清哪个盘上的简历是最新的,这就可能出现投递错误简历的尴尬,所以最好用云盘管理更新最新的简历。

技术词汇要通用,关键词加粗

一份简历是否会收到面试邀请,最后做决定有可能是HR也有可能是用人部门。不同公司情况不一样,不能一概而论,所以在简历中描述技术相关信息,请不要用太多私有,冷门特殊的技术词汇(比如有些小伙伴简历中写负责AL006设备的CD0x2协议的开发,不是细分专业领域,鬼知道你在开发啥)。

火哥这里有技术项目介绍的例子,里面通用的技术词汇与开发平台全部标记起来,让面试官和HR一眼就能看清楚重点。其实面试官和HR真正看简历也是挑关键词看,而不是把你的项目从头看到尾,研究你做了什么技术,所以标记出关键词,让HR或者用人部门快速知道你是否值得邀请。

在这里插入图片描述

GitHub、技术博客等展示技术能力的链接

简历只能简单的介绍一些工作经历,但是如果面试官对你有兴趣,想更加深入了解你做了什么,这个时候,github和技术博客是非常好的技术和能力的证明。毕竟面试的时间有限,要通过1个多小时的面试了解一个人全面的能力并不现实,所以很多面试官面试前后还会翻阅你的github和博客,乃至最后比较候选人,选择困难的时候,GitHub和博客也是一个有力的参考(毕竟你不只是能完成工作就行,很多时候好公司招人名额有限,你需要与同样合适的人竞争岗位,那用什么证明你更优秀呢?)。

我了解到很多有经验,有技术的工程师,由于没有github和博客来宣传自己的技术,只通过短短一个小时的面试,没有办法把自己的技术展现完全,最后面试官不是很信服,反而选择了技术不如他,但是有博客和github能证明技术的候选人。

关于有用的证书

电子通信、嵌入式等靠实际技能吃饭的行业,有用的职业证书可能不多,但是如果你从事网络工程师相关的工作,思科或者华为认证还是有必要的,其它简历上需要具体咨询相关岗位有经验的老鸟。

另外基本的一点就是英语六级(CET-6)证书,这个对985 211学历背景的童鞋,CET-6应该属于标配。但是普通一二三本工科专业,据我了解,CET6过级率应该不高,平均不到20%。但是如果要面试行业内的外企,三资企业,没有CET6可能会让老板怀疑你的英语沟通能力,但对于已经毕业没有CET6证书的童鞋,补救办法就只能考雅思6.5分以上或者托福对应分数来弥补没有CET6的缺陷。

很多人说找工作看能力不看学历,普通一二三本也有优秀的人才,学历是层次,18岁高考就决定了,后面不考研就没法改变了,但是英语等级证书大学之后还是有机会考取的吧,而且机会很多,如果出身普本,又没有CET6证书,怎样证明你是普本中的优秀人才,和其它普本不一样呢?所以CET6,雅思6.5等证书也是表证明学历普通的你学习态度好的一个点。

是否让猎头帮忙推荐简历

关于猎头岗位,一般猎头推荐的都是薪资较高的中高端岗位(这样猎头提成高),猎头推荐有这么几个优势:

  • 猎头接触过这个岗位的很多候选人,可能给你更多详细的面试准备信息(因为她更希望客户面试通过)。

  • 猎头对这个岗位的薪资了解的信息比你多,在谈价的时候,猎头可以起到抬价的作用(毕竟利益相关)

  • 猎头可以帮你获得更多,更快的面试反馈信息,哪怕失败了,也知道具体的原因和失败点。

所以在这里,火哥是建议如果有猎头推荐的岗位,尽量找猎头。但是需要注意的是,猎头推荐岗位一般是从自己和客户的利益出发,大部分推荐的是你有很大概率能面试上的岗位,而对你的职业岗位发展和这个行业的发展,以及你是否有机会挑战更好更大的平台其实是不care的,甚至可能为了自己的利益忽悠你去一个并不是很有前景的行业和公司,所以自己分析利弊,决定是否接受猎头推荐。

三、如何准备基础知识的面试

1. 为什么社招有经验的求职者还要考察书本基础知识

很多有经验的工程师和我抱怨过,为什么嵌入式面试,还要考一些平时根本用不上的算法,还要根本接触不到的编译器,Linux内核原理。

关于这个疑惑,首先要接受这个事实,有经验的工程师,尤其是非管理岗位的嵌入式工程师(包括初级、中级、高级),在社招需要做笔试题,考察很多算法和操作系统内核原理的知识的客观存在事实。

我参与的面试中,70%以上都有算法和内核原理的考察,尤其是创始人团队是互联网背景出身的情况下,对算法考察更为喜爱,而互联网背景创始人团队在电子通信,嵌入式相关领域招人的公司,往往参考BATH的薪资标准,给得起较高于传统行业的薪资,所以为了高薪就业机会,你必须适应游戏规则,准备算法,Linux内核,系统原理等基础知识的面试。

至于为什么要考察这些,尤其是骨干团队已经成形的公司(上一段1 2 3 类公司都算),希望能通过基础知识测试,摸底候选人的基本功掌握程度,期望招到的候选人,不只是能处理当前的业务工作,而是有更强的发展潜力,能在公司需要的时候,适应公司技术发展的变化,调整自己的技术方向。

因为在现代新兴行业的公司,组织架构,技术方向调整是很常见的事情(火哥工作5年遇到过三次组织架构和分工调整),一般情况下认为,只有基础扎实的人,才能适应不同领域的调整。扎实的内核,算法基础,能帮助你在工作中处理一些可能表面上看不到,埋藏在更加深层的bug,尽管这些问题不会天天出现,一旦出现真要命,因为你平时用的知名的工具,软件,库比如Linux内核,工具链,libc库并不是完全没有bug的。

火哥之前就利用编译链接的基础知识,帮助客户解决过glibc库的版本兼容性问题。在基本扎实的人,一般在解决问题的思路上,不会犯方向性的大错误,能够快速定位到核心的问题。

另外,扎实的基本功,也能增强领导对你的信任感。比如当你知道你乘坐的飞机的设计师和制造师是大专学历出身,给你做临床手术的医生是三本或者大专学历,平时口口声声说看能力不看学历的人,心理会不会产生不信任感,不愿意坐这架飞机,不愿意这个医生做手术呢?同理,如果你的下属有很多基本知识都不知道,你敢把至关重要的客户项目交给他吗?

2、嵌入式工程师如何准备基础知识面试

讲了这么多基础知识面试,但是到底如何准备呢?其实准备基础知识面试没有什么捷径,没有太多投机取巧的方法,只能老老实实针对性的花时间看专业书籍和文章。不要指望完全靠工作经项目的经验来学习基础知识,这就像职业球员一样,不要指望联赛,常规赛的比赛经验来代替平时的速度,力量,耐力训练一样。

工作(比赛)虽然确实有很多实践性,经验性的东西不可能在书本上学到,但是工作(比赛)并不能代替平时的基础知识基本功训练。同样,运动员转会的时候,也会有耐力,速度等基本功测试,就如同工程师跳槽的工程师有基础知识摸底面试。

工程师没有平常的基本功训练,知识很容易遗忘和脱节,就像运动员不注重平时训练,身体状态就会随着年龄下滑明显(想想C罗34岁了还要有健身房专门的力量训练)。

那么基础知识训练该看些什么呢?就嵌入式领域而言,火哥推荐下面这基本经典书籍:

算法:刷完《 算法(第四版)》

上面的例题,有答案的练习题,这样基本能应付大部分算法面试

数据结构: 《数据结构与算法分析 》

计算机必备知识,没啥好说的,老老实实学完。

Linux内核:入门级-- 《Linux内核设计与实现(第三版)》 ,

进阶级-- 《深入Linux内核架构 》,

Linux内核的学习时间花费可能比较长,也有一定难度,只能说任重道远,建议下一份对应版本的内核源码,慢慢啃,花个半年一年总能啃完的。理解内核各种子系统和机制,对嵌入式Linux驱动开发也是大有好处。

编程规范: 《代码大全(第二版)》 , 学习一些编程规范,增加和面试官聊天的谈资。

其它:《程序员的自我修养》, 讲一些编译,链接的知识,

《编程珠玑》:一些面试的技巧性算法速成。

3.基础知识笔试面试注意点

考虑到很多公司会考察纸上写程序,所以带上自动铅笔和橡皮擦很重要,这能让你纸上写代码的时候便于修改。另外,不适应纸上写程序的,面试前最好找2道题在纸上真实写写,感觉和敲键盘完全不一样,尤其是用墨笔写,更加容易涂涂改改。

四、面试前要和hr确认的信息

面试之前,建议加添加hr微信,问清楚面试的具体地点,以及面试多少轮,流程是怎么样的,大概需要多少时间,这样便于你规划交通和请假的时间(考虑到在职面试的情况)。

另外可以了解公司的基本制度,比如正常情况下几点上下班,一周几天,有没有大小周,是否需要打卡,是否弹性,五险一金的缴纳标准(不少民营企业是以当地最低工资标准缴),医保是不是第一档(注意深圳一档,二档医保的区别)。

你可以通过后面这些信息,判断公司的制度对你是否可以接受,值不值得去一趟。

五、如何通过一些技巧在面试中多多展示自己的长处

很多工程师都有这样的经历,在平时工作中做了很多事情,解决了不少难题,但是却在面试中不知道如何像面试官表达这些东西,或者漏掉了你的很多优秀的闪光点,吃了亏。

其实火哥也在以前的面试中面临同样的难题,明明有解决问题的能力,明明知道很多东西,但是在面试官面前都在把优点隐藏,把缺点放大。

那么之后火哥在面试中做了哪些改进来提高offer率呢?

1.准备项目PPT介绍系统原理和框架

以前有的小伙伴说,面试把平时的作品带过去,到时面试爱怎么吹就怎么吹。

当然这是不现实的,很多做过的东西是前公司的带不出来,加上面试公司的环境不一定允许你现场展示作品,这个想法不太现实。

不过,带上一个台ipad平板电脑或者小型的笔记本电脑,把你平时做过的主要项目的系统模块框架做成PPT,在面试的时候给面试官讲解展示,我觉得是一个很重要的技巧。

因为简历只是简单介绍你的项目经历,面试官不大可能从简历上一眼就看明白你所做的项目的原理和框架。所以你要准备PPT资料是对简历上项目信息的一个补充,让面试官看懂你做的项目。尽管现代大企业,项目分工细化。

作为基层开发工程师,不太可能整个项目都是你自己独立设计和实现的,总有你不懂的模块,但是在面试准备PPT中,你还是要把整个项目的系统框架画出来,让面试官能够了解整个项目是怎么样的,你在里面做了什么,尽管有些模块你可能没有参与,不懂,可以在聊天的时候对面试官说明,但是根据心理学的一些理论(应该是《思考,快与慢》里面的观点,有兴趣可以读读,增加个人软实力)人脑一般注重的是信息的完整性,而不是一些细节末枝的地方,所以能完整的给出项目系统框图,让面试官对你做的整个项目能够有所了解,即使你有不懂的模块,但也能给面试官带来好感,让他有问题可以交流,而不是制造冷场。

下面是火哥面试时候带的PPT项目和系统软件架构描述的例子:

在这里插入图片描述

在这里插入图片描述

在这里大家要意识到一点,图片所携带的信息量远比文字来得大,在PPT里尽量少写文字,多画图,用框架图描述你的项目,面试官可能也不会有耐心仔细看你的项目描述文字,如果没有PPT所带的框图,而是直接带着简历去面试,面试官对于自己不熟悉的项目和词汇也会听得云里雾里,不知所云,最后不知道如何提问,尬聊收场。

火哥也是在多次面试深刻领悟到这一点,发现纯语言上的技术交流和沟通,会有许多误解和信息不对称的地方,远不如图片携带的信息量大,所以自己制作项目介绍的PPT,通过PPT引导面试官熟悉你的项目,和你沟通交流,是技术面试里面非常重要的一个环节。

2.面试前自我排练,培养气场

火哥在面试完和hr总结面试过程的时候,有些hr夸火哥面试气场很好(这里不要脸一下)。其实这个和火哥以前从小参加各种演讲,辩论比赛,以及大学之后参加的科研论坛和项目答辩有关系。

在技术面试中,表现出一种自信和镇定是非常重要的,哪怕你有些问题你确实不懂,但是你的镇定,不慌张,有条有理的气场能给面试官一种靠谱感,让他信任你。

当然如果你从小缺乏这样锻炼的机会,那也不要紧,临阵磨枪,在你做好项目的ppt之后,对着ppt把你的项目从头到尾大声讲一遍,一定要讲出来,实地演练,然后录音,回过头来听录音,自己感觉讲的有些什么不完美的地方,面试的时候还可以修正。

其实每个人,内心的思路、想法和灵感远比他口头表达出来的多,如果只思考而不录音讲出来,锻炼你的表达,你永远不知道你表达的东西和你想到的东西所体现的信息差在哪里。

3.刻意准备2-3个平时解决的复杂问题的案例

能不能介绍一下你平时遇到的一个比较印象深刻的问题,以及你的解决思路。相信大家面试都遇到过这样的问题,相对于这个问题,其实工作时间越久的童鞋反而越不好答,因为解决的问题太多,时间太久的东西可能忘记,一般最近的问题才容易回想,一时半会选择困难不知道讲哪个问题。

其实这个情况,火哥建议大家做好预案,用百度云盘或者印象笔记,写下你处理过的3个很有代表性的问题,每次面试之前稍微看一下,每次遇到这个问题就拿出准备好的模板应答(为什么要准备3个,因为怕面试官有些方向不熟,聊不下去,让你换一个问题)。

4.学会和面试官找共同技术话题,提供补充信息,促进面试官多了解你

电子通信,嵌入式相关领域,业务方向很多,面试官的知识不可能面面俱到,做网络的面试官不懂音视频解码,做mcu的面试官不懂协处理器并行加速都是很有可能的。

然而现代社会,行业变迁太快,你不可能限定自己只在一个行业里面找工作,比如做手机wifi就只做一辈子手机wifi,一辈子都在手机行业找工作,不考虑IPC网络摄像头行业,不考虑路由器行业,万一手机行业需求不足,大规模裁员呢,你总得想办法在原来技术可以用得上的新行业找工作。

这样,和不同业务背景的面试官交流,找话题聊下去就是一个非常值得提升的软实力。在和面试官交流的时候,切记不要面试官问一句,你就只答一句,这样如果面试官没有题库的话,过2-3轮基本就会尬聊结束的状态。或者面试官无奈只能让你写算法了。

正确的沟通方式是,面试官提问的问题,哪怕不懂,你也得多回答一些东西,牵涉一些主题相关的技能点,让面试官多了解你的知识技能,引导面试官朝着你懂的方向提问。

举个栗子,我没有语音相关项目经历,当面试官问我语音相关的问题,你懂吗?我的回答不是两个字——不懂,而是说,虽然没有做过语音相关的模块,但是我之前写过AAC音频压缩流和和h264视频压缩流做MP4 muxer封装打包,以及音视频播放同步相关的程序,这样引导面试官像我提问音视频同步的问题,顺利回答出以音频为基准,用pts时间戳做同步。同时也是在暗示面试官,虽然我没做过语音相关的东西,但是对这方面还是有所了解,有一定基础,能马上学习适应。

另外,在介绍自己项目的时候记得延伸理论知识点,让面试官有提问的空间,比如我在介绍在前公司用buildroot做自动化系统构建脚本的时候,不是一句话介绍说我用buildroot搭建了系统自动构建系统就完事了,而是接着补充道,这里面我还做了工具链升级,用硬浮点替换软浮点工具链,还对某些现有的方案做了升级,比如MIPS方案256MB DDR内存升级到512MB DDR内存,并且做了512MB大内存的压力测试,这样通过引申更多的技术关键词,引导面试官提问我ARM硬浮点的基本工作原理,以及如何测速512MB DDR系统的性能等一系列新问题,然后通过这些新问题把自己积累的理论知识展现出来。

要知道你做得应用业务逻辑代码其实都不好提问,大部分情况下都是问你用了哪些库的哪些功能就没了,反而牵涉到内核机制,CPU机制等基本工作原理的东西才好提问,也更好展现技术的深度。

所以你要学会如何引导面试官像原理性问题上提问,同时你也要打扎实自己的技术基本功。

最后祝愿认真读完我的文章的童鞋都找到理想如意的工作。

–END–


关注公众号百问科技(ID:baiwenkeji)第一时间阅读嵌入式干货。 技术交流加个人威信13266630429,验证:CSDN博客