查看原文
其他

嵌入式er如何提高面试成功率?听前辈细细道来

嵌入式ARM 2021-01-31


在开头还是要简单啰嗦一点所有面试都要注意的细节,虽然也许人尽皆知,但把控好整个面试的流程才是制胜关键:


1、自我介绍


准备一段1分钟之内的自我介绍,包含基本的个人消息,项目信息,获奖信息等。不要太长,简历上有的尽量简练。


2、项目描述

技术面试时,通常都会让描述下自己做过的项目。所以要将自己做过的项目整理,准备两个方面:


(1) 项目的内容(市场需求、功能等)

(2) 涉及的关键技术(技术亮点重点突出)


面试时,表达力求清晰。


3、常见问题


1) 终面时,面试官一般都会说,你有什么问题要问吗?

2) 对公司的产品有了解吗?

3) 你的薪酬期望是多少?

4) 你在学校的表现怎样?

5) 你家里人怎么看待你留在xx地方工作?

6) 你希望从事哪个方面的开发?

7) 你的职业规划是什么?

8) 你为什么选择留在xx地方工作?

9)自己的优缺点?有些缺点(如不善于交流,其实大家都差不多,不要对自己失去信心),自己知道就好了,不要说给面试官,但也不要说自己的缺点是优点太多,这个原因很明显。面试官喜欢有合作精神,交流能力比较好的。尽量突出自己的优点。

10) 遇到的最大挫折?或者项目中遇到的难题是什么?怎么解决的?

11) 请给出一个能留下来的理由?或者你的优势在哪里?


4、简历


这个很重要,可以结合图文的形式,建议做精美一点。如果做的东西很多,可以多写一点,但要注意排版,技术面试官一般会比较关心项目。


我简历做了3个版本(1页版,2页版(1页文字+1页图片),4页版)。实践证实,4页版(1.5页文字+2.5页图)效果最佳,1页版的基本都石沉大海了。


5、做好面试记录和总结


不要面试时,投递的公司和岗位都忘记了。另外,每次面试都要总结下自己哪里做的不好,哪个问题卡壳了,下去搞明白,做到每次面试都有所收获,尽量不让车费白白浪费。


投递公司我分了两个类:已投递(整理投递信息),已面试(整理面试经验)。建议保留公司的职位要求信息,便于准备。还有一定要对自己面试的公司有所了解(产品,企业文化了解是最好不过了)。


6、其他方面


1、衣着整洁要得体

2、求职资料要备齐

3、请勿陪同或携伴

4、称呼仪态要得当

5、沟通表达要求清晰流畅

6、 讲礼仪,不要迟到


嵌入式找工作校招上究竟是怎样的,什么最重要?简历该怎么做?嵌入式工程师YellowMax如是说:(来源:嵌入式Max)


说实话,面了这么多家公司,觉得校招最注重的还是基础能力与理论。对于嵌入式Linux开发类职位来说,最重要的是C语言基本功底,对C语言要了解的十分透彻,比如C语言的面向对象编程,怎么用C语言去实现面向对象类高级语言的继承、多态、封装。达到熟练掌握数据结构,尤其是链表。对于指针不能仅停留在取址、加减运算这基本印象上,至少要达到知道指针与数组名的区别,知道char、int等指针类型的区别以及它们的相互转换方法,知道函数指针与指针函数的使用以及区别等等。在学习过程中要找准自己的方向,不要去过度追求各种金光闪闪的框架以及语言的奇淫技巧,学习过程中要注重各个知识背后的原理,而不是仅仅会用。

校招的优点(相对社招)

  • 对应聘者的专业实践技能要求不是很高,更多看重理论基础

  • 大公司校招很多,是进入到大公司工作的好途径

  • 公司经过学校进行一轮初级筛选,会主动为应聘者避开一些坑人的公司

  • 地点集中,都是公司去学校招聘,不必满世界跑来跑去,节省时间财力


准备

  1. 职业方向的选择
    我其实很早之前就在为工作做准备了,具体开始时间是大二的暑假,那个时候有段时间专门请教了多个学长,网上查询了很多资料,结合自己的专业与兴趣,最后选择了嵌入式Linux开发这个职位方向。

  2. 资料的收集与学习
    当时选定方向之后就一直在网上找相关的学习资料,想着要找到一份比较系统完善的学习资料,这样可以在学习的过程中节省很多的时间精力,最后找到了韦东山的嵌入式学习视频,狠下心来买了一个开发板以及视频的二三期(这里怎么这么像打广告,不过这个视频确实不错,售后也比较给力),这个算是我的嵌入式启蒙了,至今仍然非常感谢录制视频的人,让我学到了很多有用的东西。同期,我实验室里面有两位同学在一个嵌入式的班参加培训,我还记得好像是信盈达,大家一同学习,相互打鸡血,学习过程也就不显得太过无聊。


临近2017年的校招,那个时候是2016年的7、8月份,我开始为正式的校招做近期准备了,准备的内容包括以下方面:

  • 简历

  • 学习并熟悉校招流程

  • 找一些嵌入式类的笔试题去练习

  • 公司宣讲会信息搜集


另外推荐两个非常好用的网站,有网页客户端也有手机APP。

  1. 海投网:该网站是从各个高校的首页里面抓取招聘信息,然后整理集合到网站页面中,并且可以选择城市地区,简直是一个校招信息收集的神奇,极大地节省了自己去各个地方搜集招聘信息的时间精力,并且信息还比较全面,值得使用。

  2. 看准网:该网站里面有各大公司的面试经历,点评以及薪资平均值统计等等,但是需要自己上传面试经历等来获得查看所有信息的权限,自己找点学长的面试经历或者别的,填上去过了审核就可以随意查看各种信息啦,里面的信息很有参考价值。


由于我是毕业于一个普通的二本院校(虽然专业是一本),所以很多嵌入式的公司并不会鸟我们学校,由于离武汉比较近,并且往届的很多学长也是去的武汉,再者还有一位实验室的大牛也要去武汉参加校招,所以就决定跟他一块去武汉碰碰运气,也因此我还额外准备了武汉地区校招攻略,什么杂七杂八的生活用品,准备在武汉血战一个月。

简历的书写

简历的问题我跟实验室那位大牛前前后后搞了一个月左右,期间咨询过老师,网上搜集无数模板,知乎上也找了不少相关话题,参考往届学长学姐的简历,最后终于搞出了一版还算满意的简历。
简历的书写要遵循以下几点(必须遵守):

  • 简洁,页数必须控制在一页以内(最重要)。

  • 实习经验优于项目经验优于与职位不相关的项目,每个条目用2-3行概括,抓关键词,突出项目所涉及的知识点。

  • 不要出现错字、病句、标点符号使用错误、排版不整齐、英文大小写不一致、中文数字与阿拉伯数字混用等(一个都不要有)。

  • 内容要包括个人信息、教育经历、专业技能、项目作品、所获奖项、 在校任职等。

  • 不要写不会或者不熟悉的知识点,写上去的必须保证能够脱口而出并且没有错误。

  • 尽量不要出现精通的字样。

  • 需要突出的技能点加粗(注意:只有技能栏,别的地方再随意加粗就显得太乱了)。


这里给出一份简历模板,不一定符合每一个人,但是绝对很有指导意义:



对于其中的几点说明:

  • 由于面积受限,所以文字内容框比word默认标准的A4纸文字框大

  • 个人链接完全是想要面试官知道有这么个东西,同学也曾提醒过我,在纸质简历上放链接就是浪费地方,但是从实际结果来看,还是有用处的,这个因人而异吧

  • 项目作品或者实习经历最好不要少于三个

  • 多采用关键字描述,节省字数

  说起简历的问题,又想到了去武汉面试的时候见到的华科同学的简历,开头大大的学校名以及学校logo,目测占去了整张简历的1/5,这个真的不是夸张。对于这些名牌大学来说,学校真的是整个简历上面最耀眼的地方了,当然要大书特书(感觉我语气有点酸哎),而咱这种二流的学校,既不想让学校太过显眼,又不能说让面试官看半天还找不到学校名,于是就悄么叽儿的稍微往下放一点,也算是不卑不亢了哈。最后,学校不是很好的就千万不要学人家华科的孩子们啦,省点空间写点真正有用的东西是首要的。

出发去武汉

至今仍然清楚地记得,出发去武汉的日子是9.1号,卧铺,两个人(实验室同学同行),历经9个小时。由于打算在武汉长期奋斗,所以两个人都拖着大包小包,异常笨重,当天夜晚走的,第二天下车到华科的时候已经是中午十点左右了。两个人就随便买了点东西,拖着大箱子在华科的校园里面随便晃一晃,边走边吃边聊,顺便感受一下华科的环境氛围。

由于第一次去武汉,首先要做的就是找住的地方,作为学生,当然就要找经济一点的地方啦。住的地方有多种选择,比如:

  • 酒店:数量较多,价格较贵。没有住过,武汉的一个如家一个月是2000,觉得较贵就没有住(穷学生的痛处)。

  • 青年旅舍:数量较多,价格便宜。这种一般是一间房子里面住很多人,洗漱什么的超级不方便,在武汉大概是每天30元的样子,我跟我同学只住了一天,因为人太多,我个人比较难以忍受,只在里面住了一天就拖着同学另寻住处。

  • 小旅馆:数量中等,价格便宜。学校旁边比较常见(你懂得),这种小旅馆按月来订的话是有优惠的,比如我们一个房间是70一晚,然后按月来订的话就是每晚50,合计每人25,由于我不喜欢与人一块挤在一张床上睡,就打地铺,同学睡床上。

  • 学校招待所:据说有,但是没有找到,于是作罢,但是有些学校是有的,价格极其便宜。


中间还有一件事情,就是在武汉待得时间较长了,想要去剪一次头发,于是手机搜索好不容易找到一家最近的,一看,洗剪吹20,心想,虽然比在学校贵了点,但是还能够接受,但是同学觉得不太对,于是进门的时候问了一句,原来是洗剪吹各20,卧槽,当时心里就开始怀疑人生,于是剪发作罢,坚持了一个月没理发,回校的时候头发都长老长。(写着写着就心疼当时的自己)

惨烈的校招

经过两天的休整,9.4号就开始在网上找相应的招聘信息了,这个时候必须先说一下校招的基本流程:

  • 收集招聘信息
    收集信息主要指的是企业宣讲会信息的收集,包括企业开办宣讲会的时间、地点、是否有笔试等等信息。这里安利一个网站—-海投网, 有手机 APP 和网站,里面的信息都是从各大学校的招聘门户拉取过来的,不用一个一个去学校网站查找信息,省去了大量的时间。收集招聘信息有以下几个注意事项:

    1. 注意时间问题。同一个公司的宣讲会一般会在多个学校召开,最好去到该公司的官网上面去看看宣讲会行程。协调好各个想去的公司的时间去参加宣讲会。

    2. 特别注意一些有注明现场笔试或者现场接受简历的宣讲会信息,这些是重点关注的。因为现在有很多公司校招都是网投简历了,网投简历有的不能用自己写好的简历,而是网站上面的简历模板,而且是通过计算机进行筛选的,这样重重原因会导致学校不好的同学简历根本不会到达HR的手里,网站直接自动筛选程序就给过掉了。而现场接收简历就不存在这种情况,会大大提高简历的过审概率。注意有网申的一定要网申,网申与现场投递简历并不冲突,可同时进行。

    3. 需要在线笔试的注意一下笔试时间,协调好时间,不要因为要参加别的宣讲会而错过了,也可以趁机提前准备一下。

  • 网投简历( 或者宣讲会现场投递简历)
    现在越来越多的公司都选择网投简历,节省成本,这样造成的弊端上面也说过了, 但是有注明要网投的公司还是要去网投一下的。网投的时候信息一定要填写完整, 把自己会的、做过的东西全部列出来(没有一页A4纸的限制),这样会加大简历过审的几率。宣讲会现场投递简历的时候可以先听一听宣讲内容,然后进一步决定要投递哪一个岗位,然后把岗位名称写上去(不必直接打印岗位名称或者公司名到简历上面),可以一份简历模板,多次投递。

  • 到现场参加宣讲会( 笔试/投递简历)
    有的宣讲会结束之后会进行现场笔试以及简历投递,有的宣讲会注明了不接受现场简历那就没有太大的必要过去参加了,把时间留给那些有现场笔试和简历投递的宣讲会。

  • 面试
    面试一般情况下有两轮,第一轮是技术面,也就是一对一的面试,第二轮是 hr 面,主要谈薪资待遇啊等等。有的公司有群面,注意:技术类公司也有群面的。这样的公司一般就是一面技术面,二面群面,之后是签约洽谈。

  • 签约洽谈
    在过了重重关卡之后终于来到签约阶段,签约一般都是以 offer的形式进行,也就是双方协议,有纸质的,也有邮件形式的(有的双方协议会约定违约金),这表明公司有录用你的意向了,等到三方协议发放的时候就可以同公司进行三方协议的签订了,到这里你就基本上确定能够被该公司录取了。


由于去的比较早,且还有没几天就过中秋节了,所以这段时间来校招的公司不是太多,但是当时并没有意识到这个问题,在经过几天的折腾之后,发现竟然一无所获,面试机会都不超过两个,说实话,当时我们两个都有点灰心甚至绝望了,也一度萌生出回校继续考研的心思(现在想想真是十分荒唐的想法)。所以校招的时候有一点,就是一定要坚定信念,不要遇到那么一两个挫折就想着要不要放弃,要抱着一种不成功便成仁的想法,否则,那段时间的情绪真的是非常低落,这样会十分影响面试发挥的。

在这次校招当中,我的直接竞争对手是华科、武大这些尖子学校里面的学生,本来是感觉压力挺大的,在一开始的一两场面试中就表现出一种强烈的自卑感,但是后来一想,在这里谁认识你啊,面试完大部分人还不都是各奔东西了,所以自卑给谁看呢,我的自卑源于认识的人比我牛,而又和我在同一个场合的情况下,既然大家都不认识我,我还有什么可自卑的,就是干啊,出错、出丑也不用担心,反正也没人知道你。抱着这样的想法,我在面试当中也就少了很多的自卑,而是抱着平等的心态来面试的,表现自然也就比之前好很多了。值得一提的是,在华硕的一场面试当中遇到一位华科的研究生,曾问他对于华硕本次面试的感觉。结果人家说什么?人家说这次面试就是来玩玩的,主要是为了积攒经验,这次面试过不了就算了,反正他们学校有华为可以保底。当时我听完之后,心中有一万只草泥马在奔腾,要知道我这种学校出身的想去华为连简历都过不了机筛的,华为保底这种想法真的是想都不敢想,华科学生们的底气可见一斑,从一方面也可以看出普通学校与重点学校的差别了。

中间有一场魅族的面试,面我的人是个胖哥,但是有一个很奇怪的点,就是我之前去面试的时候一般都是我很紧张,有时候甚至说话或者动作都会抖,但是那天面试魅族的时候因为我已经经历过了很多场面试啦,所以自然比较随意了,不是很紧张,但是面试官我有看到他拿鼠标的手在微微发抖,我就很奇怪,难道他比我还紧张?哈,这都是臆测了,不知道具体什么原因。期间面试挺顺利,各种问题都没有卡壳,也没有不会的,但是最终面试没过,这就是很诡异的地方,我每次面试过后都会总结,但是这次我实在是找不到没过的原因。

录用我的一家公司是珠海的全志科技,是做超大规模集成电路的,也就是传说中的芯片原厂,这次面试让我相信,也许,有时候找工作真的是要看缘分的。第一次面试是一个晚上,7点去酒店集合,当时在跟一个同来面试的在闲聊,过了一会儿,我看到有位同学垂头丧气地出去了,我就半开玩笑说,这肯定是被面试官怼了,希望待会我不会垂头丧气地走出去吧。然而,这个flag立的好啊,果不其然,我被怼的快要说不出话来,出去的时候心情同前一位同学,当天晚上真的是整个校招的心情最低点,之前已经跪掉不少面试了,当时还给女朋友打电话说想读研,不想再面下去了,然后女票也是安慰了许久,但是我的心情没有丝毫缓和。就这样闷闷不乐到第二天,起床的时候突然收到一条短信,告诉我面试过了,让参加第二场面试,当时就很恍惚,现在想来也许是我的态度打动了面试官,亦或是各种比赛经历与项目经历啥的?话说二面的时候我那组刷了2/3的人,也许是我华硕群面积攒了一些经验,所以才得以顺利过了面试,真是福祸相依啊。

注意:有的培训公司也会浑水摸鱼进入到校招的行列,往往他们会出一些比较困难的问题刁难你,然后告诉你,你的能力不够,需要在我们公司进行多长多长时间的培训,期间不需要付培训的费用诸如此类,那么就要注意了,这类就是十足的培训公司,千万不要去。

尾声

收到了现任公司的offer之后,就比较放心了,因为这家公司算是符合我的心理预期,并且公司是嵌入式同学都想进的所谓的芯片原厂,后期的面试就是真的十分放松了,期间包括一个上海的格科微电子,当时在全国也就招那么几个人,真的没想到会收到offer,但是最终因为其它各种原因,选择了现在的全志科技。至此为止,整个校招算是接近尾声,还有几天才到租房期限,这几天也陆续面过几家公司,但都没有合心意的,就这样磨磨蹭蹭到了退房那天。还记得那天下着小雨,天气逐渐转凉,回程狠心买了高铁票,几个小时之后到大郑州,心里面的一块石头也算是落了地,这将近一个月早上6点出门,晚上12点左右才回到住的地方,整个人精神紧绷,现在也可以放松一下啦。

找工作最重要的是心态问题,当你多次失败的时候就会有很大的挫败感,这个时候不可避免的想要逃避找工作这个现实,想着能不能去考研,能不能先回去,再学习一段时间再来找工作,我告诉你,不能。千万不要想着给自己留后路,你已经没有退路了,不管失败几次,要学会调整自己的心态,没有到最后一刻就要相信自己能够找到一个好的工作。还有一个就是不能够消极怠工,可能因为心情缘故,有的宣讲会因为远或者你自己觉得不太适合你就不去了,简历也不想投递,这样是不行的,不论你心情再差都不能够消极怠工,不然你很可能会错过很重要的机会。

找工作很苦,考研也很苦,选择了一个方向后就要沿着这个方向死磕下去(前提是你确定了自己想走的方向),不要想着有回头路。对于考研与工作我也不能够给出一个确切的答案,只能说是看自己的想法了,但是有一点我可以确切的给出答案,那就是考研究生一定要考一个好的学校,怎么也得是985、211(双一流大学),最差也得是你报考的专业在全国是能够排的上号的,否则我认为上研究生纯属是浪费时间,还不如去参加点培训找工作去。在我去面试的过程中碰到的本科生的比例约等于0,几乎清一色的985、211硕士研究生,由此推及其他地区的校招,大抵也是如此,可以得知找工作的压力多大,如果考研也是为了找一个好的工作的话,那最好还是考虑下上面的话。

后记

这里说一下在面试过程中的个人经验积累。

面试篇

  • 技术面
    也就是一对一的面试,在该轮面试中,面试官主要就你简历上面的内容进行询问考察,主要目的是了解你的个人能力,判断你是否适合公司的这个职位。在此轮面试当中一般有两种面试官:

    • 一种是就着你做的每一个项目去问,问的不是很深入,并且问题的内容也不会超过你简历上面写到的东西。

    • 一种是只选择你简历上面的一个项目深入了去问,并且他还会就这个项目进行扩展,问出一些你可能没有接触过的东西来。

我个人认为遇到第一种面试官对你的面试过程来说是比较幸运的,因为你很容易就可以回答出他想要的回答,你不会有太大的压力。这时就主要看你的项目是否够足够吻合那个职位要求,以及你的项目涉及的知识点是否是面试官想要的,这里拼的就是项目经验。当你遇到第二种面试官(一般会是项目总监或者技术总监一类的人)的时候,我必须要同情你一下,因为你很可能会挂掉这次面试。但是从另一个方面来说,这又是比较幸运的,因为这样的面试官所在的公司我认为创新能力比较强,公司也比较有活力(一家之言,也说不定)。这里拼的就是你的知识面以及抗压能力,还有面试官对你的主观印象了。面试的时候有几个注意事项:

  1. 不会的东西就说不会,但是尽量要找一个相近的可替代的东西去补充。 比如问你会不会写一个 memcpy 函数,如果你不会这个但是又恰巧会 strcpy 函数,那你就把strcpy函数写出来,还要大概说一下你觉得memcpy函数可以怎样去实现,可能会遇到那些问题等,诸如此类。

  2. 涉及让自己评价自己的问题不要说太满。比如让你说自己的缺点,不要把自己说的一无是处,而是挑一个不至于让人一听就对你没有好感的缺点去说。让你说自己的优点,也不要把自己说的十全十美,很可能后面有一个坑等着你去跳,而要挑一个个性的,与众不同的优点。说优缺点的时候最好配以例子进行说明,而是不是干巴巴的总结。

  3. 如果问到你还有什么问题想问的吗?千万不要说没了,你要就这所申请的职位或者你本身就感兴趣的东西去问一下面试官。比如你可以问:这个职位在公司里面有多少人啊,主要负责哪条产品线啊等等。

  • 群面(研发类少见)
    主要就是无领导小组讨论。网上有很多详细介绍的,这里简单说明几点。

    1. 无领导小组讨论会有总结陈词、计时、记录员几个角色,一般来说总结陈词与记录员是一个人

    2. 总结陈词是高风险、高回报的角色。个人最建议抢到计时这个角色, 主要负责时间分配

    3. 遇到有时间要求的个人观点描述一定要注意时间,大家观点都差不多,但是你没超时你就有更多的筹码。

一般群面的步骤如下:1. 个人观点表述;2. 无领导小组讨论;3. 总结发言

  • 签约洽谈
    签约洽谈就是公司有录用你的意向了,主要就是跟你谈一些公司的福利待遇问题, 下面列出几个个人认为比较重要的问题:

    1. 是否有实习

    2. 试用期时长,劳动协议时长(三年期、五年期)

    3. 是否有餐补以及住宿是否有补贴

    4. 每天上下班时间以及一周工作几天

    5. 年薪(注意除了月薪一定要问下年薪的构成,有的会发放 14 个月或者 13 个月的工资以及年终奖), 每年的调薪考核方式以及调薪幅度

    6. 入职是否有培训,是一对一的吗

    7. 入职时的职位分配

  • 一些常见的面试问题

    1. Q:你还有没有什么想问的
      A:这个职位在公司里面有多少人啊,主要负责哪条产品线,在公司具体负责哪一块的业务

    2. Q:你还有没有什么想展示的
      A:这个问题是让你进一步说明你自己会些什么东西,因此你简历上有的他还没问到的或者是你会的但是没有写到简历上面的都可以说出来

    3. Q:你认为自己的优缺点有哪些
      A:缺点:做事情比较急
      优点:做事情之前喜欢做好规划
      原则:缺点不要说得太过;优点要找个性的,不要太虚太笼统,结合例子说明。

    4. Q:你觉得你的自学能力怎么样(以及其余类似的问题)
      A:包括其他让你评价你自己某一方面的能力的时候,注意后面的坑,你确定以及肯定你那方面能力足够的话,你可以说你能力很强,否则不要说太满,而且一般情况下这个问题后面会跟着一个小测试,用来测试你的能力,所以,不确定的千万不要说大话。

    5. Q:你对这个工作是否有一定的规划
      A:这个问题要结合公司回答,比如我想在公司的带领下和公司一同成长,未来也希望能够参与到公司的管理团队当中去,共同带领公司向前发展。总之不要显得你毫无野心和目标不明确。

    6. Q:如果你从公司离职,可能会是什么原因
      A:个人发展与公司发展方向不符;公司不能够满足个人发展所需的空间等等

    7. Q:你的期望薪资是多少
      A:这个问题的原则上是不要给出确切的工资数目
      一般情况可以回答:相信公司都有自己的评价标准,希望公司能够根据我的个人能力给出相匹配的工资数目。如果你碰到了比较固执的面试官非要你给出一个确定的薪资数目(看准网上面会有各大公司的匿名薪资统计),你最好已经提前查看过该公司的薪资水平是多少,如果这个公司你很想去,那么你按低于公司平均水平的数目来说,如果这个公司你不是太想去,那你就可以往高了说点。但是说出来的薪资数目一定要有根据,比如你说你参考了公司的薪资水平与当地的消费水平等等。

笔试篇

笔试会有在线笔试以及现场笔试两种类型,像嵌入式软件工程师最常考的就是 C 语言,也会有链表、二叉树、模电、数电、编程以及操作系统方面的题。这个主要就是靠平时的积累以及刷题经验,嵌入式软件工程师不需要了解过多的算法,但是数据结构与 C 语言编程是一定要掌握的。推荐 495 个 C 语言问题, 50 个 C、C++面试题这几个pdf文件,好好看看。最后,最重要的,笔试还是靠平时的积累,多动手编程,多去练习。


电子通信、嵌入式工程师校招怎样才能提高面试成功率?嵌入式工程师火哥如是说:(来源:嵌入式老鸟的职场之道)

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

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

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

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

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

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

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

  4. 急招对口业务项目的公司。顾名思义,公司非常缺人,非常急,希望你一周之内就能到岗(这时裸辞已经离职的可能比在职的反而有优势)。这种公司招人,可能就不太管你基础,潜力这些东西懂不懂,上来的问题一般就是你熟不熟悉某某平台,有没有用过XX芯片,如果没有就基本over了。
    所以面试胜败乃兵家常事,火哥这种全球一流公司的老油条,也有面试小公司翻船的经历,所以各位小伙伴面试求职,一定要保持良好心态,胜不骄败不馁,不要一点小的失败,被面试官鄙视两句就上纲上线,觉得自己无能,其实面试官里面也有很多傻逼的,很多时候面试失败并不是你的错,因为不同公司面试你的目的有时候你并不清楚。
    当然,回到常规的面试流程,公司邀请你来面试,可能是希望多了解你的长处,看看你的长处能不能在公司对应的岗位上产生价值(当然不排除少数公司出一些难题,打击你的信心,让你不敢要太高的薪水)。由于现代城市社会,由于都是陌生人社会,人和人之间,如果没有机会共事过一份事业,彼此之间是很难有信任感的,尤其是技术人员之间的信任感更低(其实体育领域也是要有信任感,才敢在比赛最后时刻把球传给最信任的队友完成绝杀)。通过面试的了解(不管是问一些看起来用不上的基础知识还是常用的业务知识),都是在增加用人部门和求职者之间的了解和信任,只有你有足够的技术说服力,让面试官信任你的能力,对方才愿意把重要的工作交给你。本文要聊的主要也是这种陌生人面试(一般曾经共事过的同事再次搭档,走走流程就好了,不用做那么多算法题,因为共事的过程能够给他们带来足够的信任),在这种陌生人面试的模式下,不管看重学历,大厂背景,还是算法内核等基础知识,业务知识项目经验等等,都是增加信任感的一个媒介,不同面试官对这些东西权重不一样,但是本质上还是考查你这个人值不值得信任,进而分配工作任务,有没有可能最后把事情搞砸。


二、如何准备简历

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


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

    电子通信,嵌入式相关的行业其实很多,不同行业不同公司看重的项目和基础技能其实是不一样的(比如你做视频相关的开发去面试语音技术相关的公司,对方对视频相关的项目经验不太了解或者兴趣不大)。所以去面试不同行业的公司,简历要有针对性,但是维护太多版本的简历又很累,而且简历简历,尽量简单(不超过2页),一般2页之内可能记录不下你做过的所有项目和技能信息。所有火哥一般会有一个基础版的简历,里面记录了所有工作以来做过的项目相关的东西,但是这份简历一般不会直接投出去。除了基础版简历,火哥还会准备三份岗位版简历(针对视频开发,通用嵌入式驱动开发,通用嵌入式应用开发),每份简历里的项目经历都可以从基础版简历里面复制粘贴相关的项目,去除无关的项目。如果遇到你特别中意的公司和岗位(dream company),那么就为这家公司的岗位专门修改一份简历。但是一般情况下,三份不同的岗位版简历根据JD描述,投递到不同的岗位。

  2. 使用云盘来保存简历


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

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

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

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



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

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

5. 关于有用的证书

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

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

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


6. 是否让猎头帮忙推荐简历

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

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

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

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

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

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


  1. 为什么社招有经验的求职者还要考察书本基础知识
    很多有经验的工程师和我抱怨过,为什么嵌入式面试,还要考一些平时根本用不上的算法,还要根本接触不到的编译器,Linux内核原理。
    关于这个疑惑,首先要接受这个事实,有经验的工程师,尤其是非管理岗位的嵌入式工程师(包括初级、中级、高级),在社招需要做笔试题,考察很多算法和操作系统内核原理的知识的客观存在事实,我参与的面试中,70%以上都有算法和内核原理的考察,尤其是创始人团队是互联网背景出身的情况下,对算法考察更为喜爱,而互联网背景创始人团队在电子通信,嵌入式相关领域招人的公司,往往参考BATH的薪资标准,给得起较高于传统行业的薪资,所以为了高薪就业机会,你必须适应游戏规则,准备算法,Linux内核,系统原理等基础知识的面试。
    至于为什么要考察这些,尤其是骨干团队已经成形的公司(上一段1 2 3 类公司都算),希望能通过基础知识测试,摸底候选人的基本功掌握程度,期望招到的候选人,不只是能处理当前的业务工作,而是有更强的发展潜力,能在公司需要的时候,适应公司技术发展的变化,调整自己的技术方向。因为在现代新兴行业的公司,组织架构,技术方向调整是很常见的事情(火哥工作5年遇到过三次组织架构和分工调整),一般情况下认为,只有基础扎实的人,才能适应不同领域的调整。扎实的内核,算法基础,能帮助你在工作中处理一些可能表面上看不到,埋藏在更加深层的bug,尽管这些问题不会天天出现,一旦出现真要命,因为你平时用的知名的工具,软件,库比如Linux内核,工具链,libc库并不是完全没有bug的,火哥之前就利用编译链接的基础知识,帮助客户解决过glibc库的版本兼容性问题。在基本扎实的人,一般在解决问题的思路上,不会犯方向性的大错误,能够快速定位到核心的问题
    另外,扎实的基本功,也能增强领导对你的信任感。比如当你知道你乘坐的飞机的设计师和制造师是大专学历出身,给你做临床手术的医生是三本或者大专学历,平时口口声声说看能力不看学历的人,心理会不会产生不信任感,不愿意坐这架飞机,不愿意这个医生做手术呢?同理,如果你的下属有很多基本知识都不知道,你敢把至关重要的客户项目交给他吗?


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

讲了这么多基础知识面试的到底,但是到底如何准备呢?其实准备基础知识面试没有什么捷径,没有太多投机取巧的方法,只能老老实实针对性的花时间看专业书籍和文章。不要指望完全靠工作经项目的经验来学习基础知识,这就像职业球员一样,不要指望联赛,常规赛的比赛经验来代替平时的速度,力量,耐力训练一样。工作(比赛)虽然确实有很多实践性,经验性的东西不可能在书本上学到,但是工作(比赛)并不能代替平时的基础知识基本功训练。同样,运动员转会的时候,也会有耐力,速度等基本功测试,就如同工程师跳槽的工程师有基础知识摸底面试。工程师没有平常的基本功训练,知识很容易遗忘和脱节,就像运动员不注重平时训练,身体状态就会随着年龄下滑明显(想想C罗34岁了还要有健身房专门的力量训练)。

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

算法:刷完 算法(第四版) [book.douban.com/subject] 上面的例题,有答案的练习题,这样基本能应付大部分算法面试

数据结构: 数据结构与算法分析 [book.douban.com/subject] 计算机必备知识,没啥好说的,老老实实学完。

Linux内核:入门级-- Linux内核设计与实现(第三版) [book.douban.com/subject], 进阶级-- 深入Linux内核架构 [book.douban.com/subject], Linux内核的学习时间花费可能比较长,也有一定难度,只能说任重道远,建议下一份对应版本的内核源码,慢慢啃,花个半年一年总能啃完的。理解内核各种子系统和机制,对嵌入式Linux驱动开发也是大有好处。

编程规范: 代码大全(第二版) [book.douban.com/subject], 学习一些编程规范,增加和面试官聊天的谈资。

其它:程序员的自我修养[book.douban.com/subject], 讲一些编译,链接的知识,编程珠玑 [book.douban.com/subject] 一些面试的技巧性算法速成。

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机制等基本工作原理的东西才好提问,也更好展现技术的深度。所以你要学会如何引导面试官像原理性问题上提问,同时你也要打扎实自己的技术基本功。

那么具体流程又是如何的?《华为、中兴、阿里...硬件工程师的24家公司面试经历》这位大佬面试了24家名企。不够过瘾?听这位“自学成才”的大佬细细道来:


背景: 


我之前工作过两家公司,一家做智能卡芯片的,一家做蓝牙产品,基本是应用层的内容。可惜嵌入式开发会越来越向底层发展,没做过底层协议开发是我的一大软肋。 


自学过TCP/IP,linux内核(0.11版) 
使用过python


公司A


一面


项目模式(产品/模块) 
蓝牙芯片在产品中的作用(MCU,控制外部DSP或其他芯片;或只作为蓝牙模块) 
蓝牙软件成品模式(固件模式,通过SPI烧录) 
蓝牙协议栈的架构和分层 
蓝牙协议栈与网络协议栈(4层架构或7层架构)的对比 
蓝牙芯片(是否基于Linux或其他常用架构) 
蓝牙软件的软件架构(event-driven类型的,而不是单片机那种大while循环的) 
函数指针与指针函数分别是什么?用简单的代码表示出来 
Linux内核的版本;操作系统任务切换的关键是什么(保存上个任务的上下文,加载下个任务的上下文)


二面


说说经历过的最难的项目


分享


这个其实是我同学推荐的,虽然面试完全没有准备(因为个人原因还未开始投简历),但面试过程还算基本顺利。可惜该公司有个性格测试,没过


公司B


自我介绍

项目模式(产品/模块) 

蓝牙芯片在产品中的作用(MCU,控制外部DSP或其他芯片;或只作为蓝牙模块) 
蓝牙协议栈与TCP/IP模型的对比;描述一下TCP/IP模型(协议)的主要内容;蓝牙协议的细节 
wifi与蓝牙的对比 
蓝牙通信速率(面试时没答上来,基本没关注过……后来了解到现在最大24Mbps,一般也就几十k) 
python的项目经历 
I2C的通信模式(看来是答错了,我以为有个校验位(UART有校验位,是10位数据),结果每次传输是8bit,然后1bit应答),通信速率,工作时的挂载情况(最多5,6个设备) 
USB的协议架构 
git的使用 
makefile的了解(编译的经过) 
Linux内核的版本(推荐我看2.4版本……) 
Linux驱动开发 
socket


分享


总结了之前的经验,专门看了一些蓝牙底层协议和网络四层协议的对比,但是忽略了I2C,之前做I2C也不是做I2C的底层协议,主要是应用,抓取过一些I2C的通信数据,UART也是同样的,结果我在数据格式上没分清UART和I2C。USB协议也不太了解,只是在原来的公司做过一些基本是应用层的代码改动。


公司C


部门1


自我介绍 
手机开发 
手机架构分层 
C开发平台 
是否做过Linux驱动开发


部门2:


一面


自我介绍 
最有挑战的项目 
职业发展方向(我表示我想做Linux驱动开发或系统开发,不过面试官说他们的项目里并没有分的很详细) 
我问的问题:项目的产品


二面


C程序,判断一个对称数 
删除双链表中的一个已知节点p 
好的代码应该有的特点


分享


部门1是做芯片开发的,可惜我完全没接触过。所以问了几个问题后感觉不合适,就结束了。


公司D


单片机经验(51或linux) 
软件架构;个人负责的部分 
我问的问题:公司的主控芯片和产品的关系


分享


这个公司是看到我的蓝牙经验,考虑他们的产品中可能会用到蓝牙才面试我的,但我做的不是蓝牙底层协议,他们了解到这个后就没怎么再问了


公司E


一面


好的编程习惯(结合C语言的测试题详细说明,第一个点出C变量的声明和初始化的位置应该在一起) 
第一份工作的内容,负责的部分,拿到一个文档后如何开发/测试 
第二份工作中影响最大的项目,为什么要实现蓝牙设备之间的连接?为什么不从主设备直接向2个蓝牙设备播放音乐? 
这么多年编程有什么最宝贵的编程经验?


二面


影响最大的项目


分享


一面有点像压力测试,比如问题“为什么要实现蓝牙设备之间的连接?为什么不从主设备直接向2个蓝牙设备播放音乐?”产品设计并不是我做的,至于为什么我也不清楚。“为什么不从主设备直接向2个蓝牙设备播放音乐?”这是因为目前的任何一款手机还不支持同时向2个蓝牙设备播放音乐。看来大家都知道蓝牙,但是都没用过啊,如果面试官用过多个蓝牙设备,就不会问这种问题了。


公司F


volatile的作用(没答上来) 
如何写一个无限循环? 
如何跳出无限循环?(面试官说可以使用goto来跳出循环) 
为什么一般C程序中不使用goto(面试官提示:如果从一个函数中使用goto到函数外,会有什么影响?)

UART,通信的细节:UART的数据格式?如何保证在侦听UART时不会一直判断接收到0?

2种CPU架构(不知道,面试官说是冯诺伊曼架构和哈佛架构,还提了一句图灵机……) 
RISC和CISC的区别(没回答上来,面试官说是与指令长度有关。我说我只了解比如汇编中RET长度可能只有2字节,而jmp指令可能是4字节,这样汇编转换成机器码后,可能会做4字节对齐,如果一段指令刚好差2个字节,就会补2字节的0。所以有些机器码反汇编后就会出错,是因为刚好补0造成的。)

寄存器长度变小,寻址范围会变小么?(我答错了。应该是不会,考虑CPU上的地址总线和数据总线是分开的)

一个简单的C函数编程,如何把一个变量中的某一比特取反?

在软件上,有中断号,中断向量表,中断函数,3者的关系是什么?(学过linux 0.11版的同学们肯定都知道答案)

发生中断,芯片会做什么?(我回答的软件部分的东西:影响堆栈,任务会切换到内核态并执行中断。不清楚具体硬件上会做什么,印象里CPU只有中断标志位会被置位。其他芯片不太了解)

芯片如何降低功耗(sleep部分模块,具体的睡眠操作:断电还是取消时钟) 
如何唤醒已经睡眠的模块?

时钟变慢的影响?(不太懂芯片……)

英文对话

我问的问题:项目的工作方向(了解到是做一个芯片内部的模块验证工作)


分享


这家公司是做芯片的,所以问的东西有点偏底层,微电子方向。虽然感觉面试官超有亲和力,但我还是想做软件开发方面的,所以有点对不住这位面试官。


总结


嵌入式开发还是相当繁杂的。从芯片级开发到嵌入式产品的开发,或许我投的还是有些广,但是有一点大家一定要知道,把自己写在简历上的内容掌握,无论别人怎么问都不会出错,这样才能正确体现自己的实力


这里设计的技术难点还有一个FatFs文件系统的移植。文件系统是为了明确磁盘或分区上的文件的方法和数据结构。说起文件系统必须相对于存储设备才有意义。这里是用来管理Sd卡上面的文件。


文件系统的层次叫驱动程序要高一层,为什么这么说呢,上一张图你就明白了:

 


程序员需要给文件系统提供三个对底层硬件的操作函数,我们才能利用文件系统对硬盘(disk)上面的设备进行管理和使用。


这三个函数分别是:sd_read();sd_write();RTC();他们分别是SD读扇区,SD卡写扇区,系统时钟。(可能还需要提供更多的函数接口,但是SD卡读写扇区是必须要有的)。


文件系统接受了这三个资源便可以对Sd卡进行管理了。


应用程序就是实现了吧SD卡上面的MP3文件或者wma文件通过文件系统提供的函数接口找出来,发送到数据流设备上,也就是解码芯片上,解码流程我们不需要知道,这是芯片内部集成的,无需人工参与。输出到音频输出设备就行了。


说到这个里,我们的MP3就可以运行了——把程序下到单片机上面,上电,应用程序就开启了!听歌吧~~~


补充:


这里没有使用到操作系统,不能实现多进程同时进行工作,每次只能实现一个硬件工作。如果加入操作系统,我们可以看到的效果就会是MP3一边显示歌词,温度、时间,一边放歌曲,操作系统是个很好玩的东西,有兴趣的可以移植uCOS II,这个比较小,AVRX也可以,在做这些之前,花点时间去了解软件层面上的各个层之间的调度关系,少走弯路。

让我们把目光放到国外,在美国,面试又会被问什么?

1、Describe the most challenging engineering project you have been involved in   during the past year. What made this project challenging for you?


描述过去一年中您参与的最具挑战性的工程项目。您觉得项目的挑战点是什么?


This question not only helps you get a better understanding of what the  candidate believes is a challenging project, but it also shows you what they  have learned from past challenges in the field. In most cases, you will want to  have more questions in your back pocket to get even more information out of this  question. Consider follow-up questions about how the candidate overcame the  challenges they faced and what they learned from it.


这个问题不仅可以帮助您更好地理解应聘者认为的具有挑战性的项目是什么,还可以向您展示他们从该领域过去的挑战中学到了什么。在大多数情况下,您会希望能引申出更多的问题来获得更多的信息。考虑的引申问题可包括:候选人如何克服他们面临的挑战以及他们从中学到了什么。


2、Tell me about an experience you had with a difficult client. How did you   handle the situation? Looking back, what would you have done differently? (you  could substitute boss if the candidate hadn’t dealt directly with customers)


告诉我一个您和难相处的客户的经历。您是如何处理这种情况的?回顾一下,您会做什么改变? (如果应聘者没有直接与客户打交道,对象可以替换成老板)


It is important to see how potential employees deal with pressure from  difficult clients. You need someone who won’t damage critical relationships with  your clients when things get tough. A good candidate will demonstrate the  ability to listen to a client’s problem and fix the problem in a way that is  suitable for all parties.


重要的是要看到应聘者如何应对来自困难客户的压力。当事情变得棘手时,您需要一个不会破坏您与客户关系的人。一个好的应聘者会展现出倾听客户问题的能力,并用适合各方的方式解决这个问题


By asking what the candidate would have done differently, you can see how the  individual has grown since the event.


通过询问应聘者会有什么不同的做法,您可以看到这个人自那次事件后的成长情况。


3、How do you stay current with the latest technology?


您如何与最新的技术保持同步?


Engineering is a fast-paced field. In an ever-changing environment, it is  important to keep up with technology. You could even ask specific questions  about a new technology that is gaining traction in the field to see if the  candidates know much about what is current.


工程学是一个快节奏的领域。在这个日新月异的环境下,与技术齐肩并进是很重要的。您甚至可以问一个关注度比较高的新技术的具体问题,看看应聘者是否了解当前的趋势。


4、Tell me about a time you had to lead. How would you describe your  leadership style?


告诉我关于您做领导的一段时间,您如何描述您的领导风格?


Most non-junior people have had some sort of leadership role(s). This could  have been a large project involving many people, or a simpler task with only one  other. Regardless, you want someone who knows how to step up when they are  needed. You’ll learn how the candidates define leadership, and how they will  function in that role at your company. You want to look for someone with  leadership qualities that fit in with your company’s culture.


大多数非初级人员多少都做过领导角色,可能是一个涉及许多人的大型项目,或者只是一个简单的任务。无论如何,您需要一个知道如何在需要的时候站出来的人。您将了解应聘者如何界定领导力,以及他们将如何在贵公司担任这一角色。您想找一个与公司文化相适应的具有领导才能的人。


5、What do you enjoy the most and least about engineering?


关于工程师,您最喜欢和最不喜欢部分分别是什么?


When it comes to hiring a new engineer, you want to ensure that you are  picking someone who has a good attitude about the job they will be asked to do  every day. You are looking for someone who is interested in the things that your  particular position has to offer. If their least favorite activity is a big part  of the position, you will immediately know they aren’t the right fit.


在聘请一位新工程师时,您要确保您挑选了一个对他们每天要做的工作持良好态度的人。您要找的是对您的制定职位感兴趣的人。如果他们最不喜欢的活动是这个职位的重要组成部分,您马上就会知道他们不是合适的人选。


6、Where do you see yourself five (or ten) years from now?


您认为自己五(或十年)以后会怎么样?


This is a common interview question regardless of the type of position. You  should ask this question to get a better feel for the goals of the candidates.  No employer wants to hire someone who doesn’t expect to stick around for a  while, and engineering positions are no different.


这是一个常见的面试问题,不管职位的类型如何。您应该问这个问题,以便更好地了解应聘者的目标。没有雇主愿意雇佣一个预计不会坚持工作一段时间的人,工程师的职位也不例外。


7、Can you describe the most challenging written technical report or  presentation you’ve had to complete?


您能描述您完成的最具挑战性的书面技术报告或演讲吗?


You want to know about a candidate’s verbal and written skills as well as  their engineering skills. As the candidate explains the report or presentation,  you’ll gain insight into what they find challenging, and what kinds of  information gathering and presentation projects the candidate has been  responsible for in the past, while also learning about their communications  skills.


您想知道应聘者的口头和书面表达能力以及他们的工程技能。当应聘者解释报告或演讲时,您将了解他们发现的挑战,以及过去应聘者负责什么样的信息收集和陈述项目,同时也了解他们的沟通技巧。


8、What checks and balances do you put in place to ensure that you don’t make  mistakes?


您有什么制衡措施来确保您不犯错误?


It is important that candidates know how to check their own work to prevent  mistakes. This is a question that will often make candidates think about the way  they do things, even though they might not have considered it much before. Even  if they aren’t aware of it, most candidates already have some sort of system in  place to prevent errors in their work, and this question just makes them think  about it.


应聘者应该知道如何检查自己的工作以防止错误,这点很重要。这通常是一个让候选人思考他们做事的方式的问题,尽管他们以前可能没有考虑过。即使他们没有意识到这一点,大多数的候选人已经有了某种方法来防止他们工作出现错误,而这个问题只是让他们思考。


Candidates may ask a colleague to check over their ideas and work, and/or use  helpers like spreadsheets, timelines, checklists, etc. No matter what the system  is, it is important that each candidate has one and can describe it  thoroughly.


应聘者可以请同事检查一下工作、探讨一下想法,或者使用诸如电子表格、时间表、核对表等辅助工具。不管这个系统是什么,重要的是每个候选人要有一个,并且可以完整地描述它。


9、Have you ever been asked to work on a decreased budget or help reduce  costs?


您是否曾被要求减少预算或降低成本?


Companies all want to save money. Candidates experienced in finding ways to  reduce costs could be instrumental in decreasing costs within your company, as  there are bound to be times when saving money is an important aspect of the  job.


公司都想省钱。在降低成本方面经验丰富的应聘者有助于降低贵公司的成本,因为一定会有节省开支的时候。


Interviewing can be a tough job. You will often talk with numerous qualified  engineers, and will need to sort through them to find the best fit for the  position. While you are interviewing candidates, keep your company’s atmosphere  in mind. You want to pick someone who is more than just qualified; you want  someone who can also fit in with the other employees.


面试可能是一项艰难的工作。您会经常与众多合格的工程师交谈,并需要对其进行分类以找到适合这个职位的最佳人选。当您在面试应聘者时,要记住公司的氛围。您想挑选一个不仅仅是适合职位的人,更是能与其他员工和谐相处的人。


As you conduct more interviews, you will surely add your own questions to  this list, and find new ways to get differentiating information out of potential  engineering employees during the interview process, such as with follow-up and  field-specific questions. Try to enjoy your time on the employer side of the  table. It can be taxing, but is ultimately rewarding.


当您进行更多的面试时,您肯定会将自己的问题添加到这个列表中,并在面试过程中找到新的方法来区分潜在的工程技术人员,例如后续问题和特定领域的问题。试着享受您作为面试官的时间,可能很费精力,但最终是有益的。


嵌入式工程师面试时一般会有哪些问题?嵌入式软件工程师经典面试题127道》这篇文章可以解答你的疑问。那嵌入式面试会遇到哪些一般人不知道的问题?如何解答?嵌入式工程师鱼鹰Osprey如是说:(来源:鱼鹰谈单片机

嵌入式软件需要掌握什么东西?

1) 对单片机的熟悉程度(包括中断系统、各种外设模块、时钟系统等)

2) 对通信协议的熟悉程度(常见的有SPI、UART、I2C等)

3) 掌握基本的数据结构(如队列、栈、链表)

4) 掌握基本的算法(多种排序算法,数据结构中需要的一些算法)

其实嵌入式的东西很庞杂,不是一下子就能说清的,只能想到哪写到哪了。

对单片机的熟悉程度,这个就要考你的基本功了,比如单片机运行到main函数之前做了什么(首先是从启动文件的复位中断进入,然后初始化时钟,进入main函数之前还得初始化一些全局变量)?单片机的中断机制是怎样的(这个和向量表有很大关系)?固件升级原理(一份BootLoader程序,一份APP,这个其实不难,如果你的简历没有写这个的话可能不会问这个)?是否使用过DMA,原理是什么(DMA传输方式,怎么设置)?

通信协议的话,主要不是上层的通信协议,而是物理层面的通信协议,比如串口通信需要掌握一帧格式(起始位、数据域、奇偶校验位、停止位等);SPI通信的四种模式,你又是如何确定使用哪种模式的?I2C通信格式(起始信号、结束信号、应答信号等)?如果说你学过USB,可能会问你USB采用什么编码、有几种端点模式、简单介绍枚举过程(但也别太简单)?更高级的可能问你关于网络这块的知识(具体鱼鹰也不知道,因为还没系统学过,这里推荐《TCP/IP详解》)

数据结构,比如最常接触的栈、队列、链表(单向、多向链表)的原理,而数据结构肯定会涉及到一些算法操作,比如出栈、入栈;出队、入队;插入、删除等操作,而比较纯粹的算法是排序算法,其中有冒泡算法、快速排序算法等(这里推荐《大话数据结构》),注意这些知识常以笔试形式出现,所以一定要能写出来(关于笔试推荐《剑指Offer》)。

鱼鹰最弱的应该是笔试了,或者说算法。在嵌入式软件开发过程中,用到的算法其实并不多,但是要你自己用笔写出来还是有很大的难度的,鱼鹰这方面的能力确实欠缺,因为我一般喜欢深入理解思考后就把细节记录下来,然后选择遗忘的(遗忘不是说全部不记得了,而是说只记得大概,细节记不住而已),所以说面试前不来个系统的刷题,临时抱佛脚一下,基本笔试是没戏的。

但是笔试成绩我觉得只是一个方面,一般来说笔试之后会有面试(社招一般笔试、面试紧邻的,校招的话如果你的笔试成绩不合格,那么连面试资格都没有),所以如果笔试成绩不理想的话,一定要好好准备面试(这里插一句,面试前,一定一定要上网查找公司的背景信息,起码要知道公司是做什么产品的,鱼鹰就在这里吃了一个亏,之前对这个不重视,有的公司查过,有的公司没查过,刚好没查过的公司突然就问到这个问题,很尴尬,因为这体现了你对这次面试的尊重,而不是在浪费面试官的时间)。面试的话,就随你发挥了,只要你对自己的技术有信心,那么面试应该不会太难,一般来说,面试官问的都是简历上的东西,所以简历的内容不要造假,否则回答不出来就麻烦了。

现在就来具体聊聊几个一般人不知道的知识:


01、你是怎么接收、发送串口数据的?


这个问题其实比较宽泛,一般经验少的会说使用查询方式,但是查询方式效率是非常低下的,所以如果你只能回答这个,100分的题你只能得个30分。如果你说用中断方式,那么请问你具体是如何处理的?如果你回答说一个字节接收完之后再接收下一个字节,那么可以得个50分。

紧接着又问你,你是怎么接收一帧数据的(这个其实不应该由面试官问,而是由你自己补充全面),如果你说采用帧头、帧尾判断的方式接收的,那么这道题还是给你50分,但是你说用空闲中断,那么70分以上,如果你说用DMA+空闲中断的方式接收的,那么90分以上(这是我认为最好的方式了,可能会有其他更好的方式也说不定)。

那么现在说说空闲中断,为什么你说了空闲中断之后,一下子从不及格到及格了?

空闲中断,顾名思义,就是串口空闲后产生的中断。我们都知道,数据一般是按照数据帧来发送的,即一个数据帧一个数据帧的发送,如果两帧发送之间能间隔一段时间,那么在接收端就可以产生空闲中断(关于这个空闲中断,以后可能会专门写一篇笔记介绍),有了空闲中断有什么好处?

1) 可以接收不定长数据(这是最明显的好处)

2) 不需要复杂的帧格式(比如帧头、帧尾可以不要)

3) 一个数据帧接收错误,不会影响到下一帧数据的接收

有了空闲中断,可谓好处多多(有的单片机没有空闲中断,那就没办法,当然也可以舍弃一个定时器资源来获得空闲中断的效果),所以当初了解到这个之后,就一直使用这种方式接收了。

但是空闲中断虽好,如果你每接收一个字节都要CPU干预,还是效率太低,那么这时候就得配合DMA了。

怎么配合?比如说你一个数据帧的最大长度是10个字节,设置串口接收缓存区为20个字节,那么你可以设置DMA传输长度为20,这样DMA每从串口传输一个字节,传输长度就会自减,当产生空闲中断时,只要你知道开始设置的传输长度和剩余的传输长度,那么就可以得到你已经接收的数据长度,之后你再重新设置新的接收长度即可进行下一次数据帧的接收。

如此一来,接收一个数据帧只要CPU干预一次就够了,就是在接收完数据帧的时候由空闲中断通知CPU进行后续处理即可(注意不是DMA中断),极大的减少了CPU工作时间。

有的时候,数据量很大,CPU来不及处理,那么你可以通过以下方式解决:

1) 增加消息队列(非常好的解决方式)

2) 增加两帧之间的发送时间(对于实时性要求很高的可能不合适)

3) 前面两种方式叠加


02、LCD显示屏上的按键有多种触发方式,比如触摸、实体按键,以后还可能增加其他方式,你会怎么设计结构,让其兼容适应不同的环境?


如果是你,你会怎么考虑?


鱼鹰当初的答案是:软件层次上设计三层。

第一层:和硬件底层驱动相关的

第二层:中间层,负责对接底层驱动和上层应用

第三层:上层调用接口

这个答案我不知道到底好不好,但就以我现有的知识介绍吧。

一般开发人员的软件设计只有第一层和第三层(即应用层直接访问底层函数),很少有第二层,事实上设计第二层很有必要,为什么这么说呢,就像题目所说的,一旦你将触摸换成了按键,那么所有用到这个按键程序的地方,你都得进行修改,虽然不是很难,但是也麻烦,并且增加了出错的可能性,但是有了中间层就不一样了,你只要修改这个中间层的代码就可以了,你的应用层根本不需要修改。所以中间层的设计很关键,要尽可能的把关键信息抽象化,这样才不会导致明明已经设计了中间层,还是免不了大面积修改,那么就得不偿失了(这里的中间层可以使用函数指针或者使用一个函数封装一个底层函数,而你的函数(指针)原型就得好好考虑清楚了)。


03、FIFO队列中,有一个后面接收的数据,但是想让它更快处理,应该怎么办?


FIFO队列的特点就是先进先出,为什么这个问题反着来?既然你都是顺序处理了,为啥你还要插队?但是实际上确实可能出现插队的情况,那该怎么办?这个问题如果是以前的自己可能回答不出来,但是当鱼鹰把uCOS II 源码看了个遍之后,就知道该怎么做了。

uCOS II的消息队列的源码中,有个函数的选项,就可以选择你插入队列的数据放在队头还是队尾。按照队列的特点,肯定是要插入到队尾的,但是题目要求更快处理,那么插入到队头是最好的方式,所以这个问题的答案是,将数据插入到队头,这样既可保持队列的特性,又能处理一些紧急的消息,一举两得。

从这里也可以知道,阅读源码虽然看似费时费力,但是对你的思想、思维是有很大拓展意义的,与其停留在表明不明所以,遇到操作系统问题到处问人,不如静下心来好好看看源码,对你的技术水平是会有很大的提高的。

最后留一个问题,如果单片机没有在线调试功能,你会用什么方式调试?


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存