软件工程师面试都面什么
我差不多从工作到现在经历了大大小小差不多有三十多场面试,数量其实算相对比较少的,而且其中有一半是过去两年多才发生的,之前找工作一直都算是比较顺,基本上面个三五家都有差不多的Offer,也算是赶上了移动互联网的红利。今年在朋友推荐下还参与了两次海外公司的面试,虽然都没有面过,但是也开阔了下眼界,而且发现国外面试还是和国内面试区别挺大的。先说国内互联网公司的面试,一般来说至少会有两轮的面试,稍微大一点的公司都是三四轮,最后会带一轮HR的面试。第一轮面试一般是考察对当前技术栈的基础知识和考察计算机基础理论,这一轮通常就是国内面试经常说的八股的考察,只要用心准备的话,一般都能过。但这其实是个苦活,准备的过程还是比较耗时间,因为当去准备这部分面试的时候,会发现要准备的东西真的很多,只是自己技术栈里面涉及到的内容想要准备好就有好多内容要准备。第一轮面试很多公司也会考察一下算法,不过也很初级,基本上LeetCode上Easy水平的题目,而且是很常规的大路题。第二轮面试就开始进行项目相关的面试,以及更加深挖技术原理,第二轮有的会考察算法,有的不会。整体还是更加侧重项目的考察。最经典的问题就是,项目上遇到的难点是什么?你是如何解决的?说实话第一次面试的时候被问到,感觉还有点懵逼,因为日常工作中如果不去刻意积累,或者在面试前刻意准备的话,就很容易感觉似乎没什么难点,如果你直接回答没什么难点的话,可能面试官会觉得项目深度不够,没有自己思考之类的,面试结果就会有点危险。我感觉还是要在日常工作中尝试去积累类似遇到的问题,尽管很多问题感觉解决了之后没什么,但是在没有搞定之前还是很惆怅的... 面试其实很多时候也是问的思路,不一定说遇到多难的问题,很多时候还是看面对一个未知问题的时候的解决思路。我之前面试的时候就太侧重一面的那些基础的知识的准备,反而忽略了项目深度的挖掘,导致的结果就是80%的一面基本上都能过,二面成功率骤减,所以再面试的话,应该着重从项目上深度挖掘一下,提炼一下项目中遇到的难点。国外的面试和国内面试还不一样,主要考察的是算法和系统设计,不过我面试的样本非常少,很容易以偏概全,所以这里着重谈自己的体会。算法的题目难度至少是 middle 级别的,会要求限时解出来而且是脱离IDE的场景,要能通过测试用例,所以想要通过这种级别的考试,还是要不断的刷 leetcode 积累经验,这是个慢活,不是一朝一夕能提升的能力,尤其对于非科班出身的工程师。因为我算法面试没有通过,所以没有经历系统设计的面试,不过当时问了下面试官系统设计的题目,也是给定一个大概的需求场景,让我们尝试去设计软件系统应对这样的需求。油管上有很多类似的视频,有兴趣的可以看看。系统设计面试的准备过程其实对我还挺有启发的,因为以前总是特别关注具体的执行,整体系统设计层面考虑的并不多,在准备的过程中,开始尝试用更加宏观的视角去思考如何从一个系统层面去关注问题的解决。所以尽管没有通过国外公司的面试,但收获也是有的,不虚此行。简单聊大概就是这么多,我这边主要还是针对客户端层面的面试。
