北美软件工程师面试简单介绍

前言

想起来写一下这个东西其实是因为我自己刚经历了一次在职跳槽,加上道长的新书也出版了一段时间,就想着写点自己的经验和理解,分享一下。

基本情况

New Grad (应届生)

首先要说的一点是,如果您是 New grad ,那么在大多数情况下是不存在针对具体岗位的招聘的,更多的是一个非常 General 的岗位。

对于大公司来说,一般大部分的 Manager 不会主动去招 New grad ,而是由公司统一安排进行的。然后,再分配到各个组里去。

所以,对于 New grad 来说,您的面试,基本上就全是算法了。根据不同的公司,可能有4-5轮算法的 onsite 面试。

对于应届生来说,最好的准备就是去更多的准备一些 CS 的基础知识,比如说基本的数据结构,基础的常见算法,当然也可以选择在 Leetcode 这样的平台上刷刷题。

在职跳槽

面试级别

在职跳槽会有比较多的情况,这也会取决于你的工作经验等等的其他条件。

先说一点,一般来说,各大公司一般都会更喜欢找人的时候给低一点的级别,然后让你升上去,即便最开始给你的钱已经是更高一级了。

按照北美大公司来讲:
Google: 一般来说3年以下,会给你安排面试 L3,其他的一般都是 L4, L4的范围会非常大, 而再往上的 L5 则一般需要非常资深的人才能拿到。

Facebook: Facebook这两年对E3(入门级)的需求越来越低,所以一般来说,公司会期望你去面E4,而再往上的 E5 相对来说情况也比较多,个人感觉6年左右经验的人可以尝试一下。

Amazon: Amazon 的情况和 Facebook比较像,相对来说对 SDE II 的需求量比较大,同时,价格的浮动范围也相对会比较小。

Linkedin: Linkedin 的级别比较特殊,他们的 entry level 叫Junior Software Engineer, 升一个级别就到了Senior Software Engineer,名字非常的诡异,但是其实你可以理解成 Junior Software 对应 Facebook 的 E3,Senior 对应 E4,而 Staff 对应 E5。

Apple: Apple 是个比较奇特的存在,他家的级别是从 ICT2 开始,一直到 ICT6,一般两年经验会给到 ICT3,3年以上会给 ICT4,ICT5 或者更往上则非常少。

Uber: Uber 的情况和 Facebook 的基本上差不多,从 Software Engineer I 开始。

Airbnb: Airbnb 也和 Uber 的情况差不多,参考 Uber 就好。

当然,上面的这些数字什么的都仅供参考。

如果你还想具体了解一下北美各个公司直接的级别对应关系的话,可以参考一下这个网站,当然,仅供参考。

面试准备

基础知识

第一个要准备的就是基础知识了。

这里说的基础知识不仅仅讲的是某个具体方向的基础知识,而是 Computer Science 的基础知识。

现在越来越多的同学是从其他专业转行到码农这个行业的。于是就会出现其实很多同学其实对CS的基础知识并不了解,但是就想着去做一些比较 High Level 的东西。

之前在微博上有个传播了很久的图:

这张图非常形象的说出了现在很多人在学习CS知识时候的现状。

很难简单的说对于每个人来说这样的学习是好还是不好,而我只想说对于面试来说,你这样做一定会死的很惨。所以,好好准备基础知识吧。

当然,光是硬背题目,刷题也不是完全够的。在面试的过程中,如果面试官想要检验你是不是特意为了面试去背了题目或者是去看了别人分享的面经,那对他们来说,非常简单的做法就是问一个之前网上没有的 Follow up 问题。假设你之前是通过死记硬背或是特意准备而来进行面试的话,那么,非常有可能你就会答不出来 Follow up 问题。面试的结果,自然也就可想而知了。

在这还是推荐一下最最经典的算法基础教程:《算法导论》,现在应该已经出到了第4版还是第5版本了。这本书本身就是很多学校CS的教材,假如你在当年上学的时候没有好好学过的话,是时候重新拿出来好好学习一下了。

当然,如果你并不想通过看书的方式来学习算法的话,一些网上的基础课程的网课也是非常不错的,可以去了解一下。(注意,我说的不是培训班,那些几千上万学费的培训班并不推荐。)

面试准备区别

北美和国内的面试最大区别可能就是在算法的准备上了。

国内在面试的时候更加注重的是你的专业知识的了解程度,比如说iOS的Runloop是怎么工作的这样的问题,相对来说,算法的重要程度并不是那么的高。

而与之对应的北美,在面试上,算法的重要性会更加高一些。比较常见的是面试情况举几个例子:

  1. Facebook 两轮算法,一轮 Behavior Question + 一个小算法,一轮 System Design。
  2. Linkedin 一轮算法,一轮 Behavior Question(里面穿插了一些基础知识问题)还有一轮是现场 Coding,也就是让你按照他的要求去现场写代码。
  3. Google 三轮算法,两轮 Sytem Design。
  4. Amazon 一轮Design,三轮算法。

很显然,对于绝大部分的公司来说算法是考察的核心。

也许会疑惑,平时在工程中99%的时间都用不到任何的算法,或者说99.99%的情况你都不要自己去实现一个算法,为什么还要这么重视算法。

我说说我自己的理解吧,不一定正确。

  1. 工程能力是一个很虚的概念,原因是很难被量化。换句话说,你几乎不能在短短的45分钟到1小时内展现你嘴里说的强大能力,
  2. 如果说想要考察工程能力,也许可以像 Linkedin 中的那一轮一样,让你现场实现一段代码。但是当你从另外一个角度想,在45分钟里想要写出可以实际编译运行的code,那么,其实依然只能写一个非常小的功能,也很难覆盖到更多更复杂的部分。这样的情况下,考察本身就变成了更多的是考察你知不知道这个小功能的 SDK 里的 API 了。
  3. 对于大部分大公司来说,代码规范也好,用的构架也好,内部工具也好,都是独一无二的,在这样的情况下,对于大公司来说与其招一个会用很多第三方库的程序员,不如招一个基础能力强,学习能力好的。

那么如何准备算法呢?

top Created with Sketch.