逛了快三个月的牛客,看过了不少大佬写的面经,收获颇多。但是发现ARM的面经太少了,自己写一个一、二面的面经,希望对有需要的牛友有所帮助。
岗位:Application Engineer(Software Engineer)
一面:电话面试,时长约40分钟,首先自我介绍,然后把简历里有关与嵌入式的项目问了一遍,对技术细节非常关注,并且问的很深,基本上每个问题都是以问到我不会为止,但是面试官很和蔼,会笑着说没关系,我只是想看知识储备的深度。除了项目以外,问了一些基础知识,如下:
(1)在你做的嵌入式项目中,有没有遇到过系统崩溃,比如UBOOT、内核、驱动等等出了问题,或者板子死机、或者开不了机等等一些列情况下,你是怎么定位和解决的,然后回根据你的回答继续深问。
(2)你用的处理器是什么系列?比如Cortex M3系列,然后就会继续问你一些M3处理器相关的问题,M系列的处理器支持什么异常、都有哪些寄存器,不同的
寄存器有什么作用?
(3)堆和栈的作用,结构特点,数据结构中的堆和栈与操作系统中的堆和栈有什么区别没有?
(4)空栈和满栈有了解吗?什么是SP、什么是FP寄存器?
(5)MCU的启动流程有了解么?可以简单的聊一下bootloader的工作流程么?
(6)Linux开发过程中,汇编代码一般什么时候会用?主要有什么作用?
(7)指针和引用的区别?
(8)应用层和内核层的区别?你的代码具体是工作在哪一层的?
(9)应用层和内核层怎么进行数据交互的?你的开发过程中有过内核编程的经验么?具体是怎么做的呢?然后根据你做的具体问一些袭细节问题?
(10)voliate关键词的作用,举几个应用的例子?
(11)单片机中断的概念,中断发生时,cpu具体的操作步骤是怎么样的呢?Linux中断和单片机中有什么区别呢?具体是怎么工作的呢?
(12)最后让来一段英文的自我介绍、随便聊什么,主要是考察你的英语口语能力。
一面结束后,下午就收到了二面的面试安排,HR很客气和温柔,甚至打电话还问还有没有兴趣继续二面!!!!!
二面:视频面试,时长约50分钟。二面没有自我介绍,面试官挑了一个最感兴趣的项目,然后简单的介绍了一下项目的结构和功能,问了下里面的通信方式、数据的加密和解密方法与原理、还有一些项目里的细节问题,聊了一个项目以后就主要是在回答一些他的问题。
(1)再次问到了在做的嵌入式项目中,有没有遇到过板子死机、或者开不了机等等一些列情况下,你是怎么定位和解决的?可能跟我报的岗位有关系吧,个人感觉面试官非常非常在意个人解决问题的能力和思路。
(2)随便聊了些其它的基础知识后,给了一篇完全没有见过的英文文档,给你五分钟的时间,快速阅读和学习,然后将你在这短时间学习到的东西给他讲一讲,主要是考察英语阅读和快速学习能力,给我的文档是一篇关于缓存一致性问题文档。
(3)问了下读研给自己最大的收获是什么?为什么?
(4)什么项目让你觉得最难?为什么最难?难点在哪儿?你是怎么解决的?然和在这里面聊了下客户和技术支持之间的恩怨情仇!!!两个人都大笑了一场。
(5)问了下对常见校验算法的了解情况,如CRC算法的原理。
(6)问我有没有什么想问他的,其中我问了一个对Linux驱动学习的建议,面试给出了很多的建议,大致如下(感觉可以针对他的建议学习,至少这是他所关心的问题和知识点呀):了解基本的编译器原理,包括预处理、编译、汇编和链接这些过程中的细节,要清楚这些文件的作用;了解基本的编译器,如怎么使用不同的GCC工具、性能调优工具等等;学习下Freertos的原理;掌握uboot的启动流程;了解行业的安全标准;学习Linux内核的本身;掌握常用外设的驱动编写;了解计算机原理,至少对主流的结构有所了解;了解cache、MMU等等相关的知识。
(7)最后再简单的介绍了下部门的职责和工作内容。
最后要结束的时候,面试官问我,会不会给我offer了最后不来。。。。。当时本能的犹豫了一下?应该是太诚实的原因。
总的来说面试官和HR很nice,整个流程也很快,问道不会的问题,他会先和你说没关系的,然后再简单的给你讲解一下,比如中间讲Linux中的堆栈的时候,我回答完毕以后,他详细的分析了我的回答,并告诉我有一部分理解是不对的,应该是怎么样的,这让我感觉非常非常暖心,因为更多公司是不管你回答的如何的,反手给你挂掉,然后下一次你遇到同样问题的时候,可能还是答错了。。。。。。。
////////
end
///////
全部评论
(12) 回帖