一份来自亚马逊工程师的 Google 面试指南,GitHub 收获 9.8 万星,已翻译成中文

一位从 1997 年就入行的 Web 工程师,立志要成为 Google 软件工程师,3 年前写下了一篇超完整学习和面试教程,以此作为自己的奋斗计划。

这位名叫 John Washam 的工程师,换了好几份工作,最后却阴差阳错在 2017 年成为了亚马逊 AWS 的技术专家。

但这并不妨碍他的教程成为热门,在 GitHub 上线以来,已收获近 10 万星的好评。

而且最近这篇教程已经完成了中文翻译,就算你没有去 Google 面试的机会,也可以用它来好好充实一下自己。

为何写这篇教程

作者 Washam 本人并非计算机学位,但在儿时就已经展现出对计算机的浓厚兴趣,从事的工作是关于 web 程序的构建、服务器的构建。

作为一名非专业人士转行,Washam 已经算是相当成功。然而,他还是想去 Google 工作,真正地去理解计算机系统、算法效率、数据结构性能、低级别编程语言及其工作原理。

可对这些知识都不了解的他,怎么会被 Google 应聘呢?

于是他在网上收集了各类计算机专业知识,以及进入谷歌工作的员工分享的资源,并系统地整理了这些资料。

Washam 强调,想去 Google 工作首先不要妄自菲薄。Google 的工程师都是才智过人的。但是,就算是工作在 Google 的他们,仍然会因为觉得自己不够聪明而感到一种不安。

学习资源

接下来就跟着 Washam 的脚步去学习。

首先要做的就是选择一门语言,在 Google 一般是 C++、Java、Python,有时也会用到 JavaScript、Ruby。背后还有一些如 SQL、HTML 等技术没有列出。

接着开始学习计算机硬件知识:

然后补充计算机专业的基础数学知识,如算法复杂度 / Big-O / 渐进分析法、数据结构、树、排序、图论。

此外还有递归、动态规划、组合与概率、NP&NP- 完全和近似算法、缓存、线程与进程、系统设计、可伸缩性、数据处理。

看到这么多知识点,你会不会觉得有点懵呢?Washam 告诉你一点小技巧。

因为你不可能一遍就记住所有知识点。所以需要把要回顾的知识点做成抽认卡(flashcard):正常的及带有代码的,类似于背单词。

每种卡都会有不同的格式设计。项目主页中就有抽认卡的源代码,可以根据自己的学习特点去制作。

Washam 还留有一组 ASCII 码表、OSI 堆栈、Big-O 记号及更多的小抄纸,以便在空余的时候可以学习。每编程半个小时就要休息一下,并去回顾你的抽认卡。

当然,论文的阅读也是必不可少的,尤其是谷歌曾经发表的一些基础技术论文。

书籍则推荐一些关于算法和 C++ 编程之类的。

去 Google 面试需要注意什么

面试的第一步当然是要有一份好的简历,这样才能为你争取到宝贵的面试机会。知名科技博主 Steve Yagge 给出了 10 个贴士,帮你做出一份还不错的简历。

这位 Steve 曾经在亚马逊、Google 都工作过,Washam 的这个项目就大量地引用了他的技术博客内容。

在面试时,你可能会遇到这 20 个问题,每个问题准备 2-3 种回答。准备点故事,而不要只是摆一些你完成的事情的数据。

面试官在也会问你还有哪些问题,不要说自己没有什么要问题,可以试试问一些此类问题:

当然,进入 Google 也不意味着结束,你还要新的学习过程。

Washam 还有一份附加内容,包括 Emacs 和 Vim、Unix 命令行工具、密码学。这些内容虽然不会直接用到,但是会大大提高你的效率。

最后,在这样一个特殊的时期,好好给自己充个电。祝大家在新的一年里都能面试成功!

传送门

资源地址:
https://github.com/jwasham/coding-interview-university/blob/master/translations/README-cn.md