前不久我写过一篇文章,介绍了 GitHub 上有一位工程师为了得到 Google 的工作机会,不惜花费大量时间整理与 Google 有关的学习资料及面试题的故事。
现在我将这篇文章贴过来,希望对大家有所帮助。
GitHub 标星 8w!学完这份指南后,你就可以去 Google 面试了!
下面是正文。
如果让你选择一家互联网科技公司加入,你会选择哪一家?
具体答案因人而异,不过我相信,作为目前全球最为知名的互联网公司,Google 一定名列其上。
自诞生以来,Google 已推出多款改变世界的互联网产品,旗下也汇聚了一大批优质的工程师与科学家。与此同时,因其崇尚自由开放,不作恶的互联网理念,也受到了许多互联网优秀人才的认可,Google 也成为了他们最想去的互联网企业之一。
来自西雅图的工程师 John Washam 便是其中一员。
John Washam 是一名软件工程师,目前定居于美国西雅图。2016 时,因其在 GitHub 上发布了一个名为「Google 面试大学」的项目而名声大噪,引发技术圈内诸多人的关注。
John 在中学时代便开始接触编程,后面上大学的时候,主修的确是经济学专业。原因是他认为在他大学毕业后,计算机专业的人才将会供过于求。后面事实证明,他错了。
几年后,John 毕业,他选择了参军,军队驻扎于韩国,因此他自学了两年韩语。
从军队退伍后,他又开始重拾编程,经过一年的学习,他掌握了 Perl、HTML、CSS、JavaScript 和 SQL 等相关知识,这些知识让他成功在西雅图找到了一份编程相关的工作。
随后 15 年,John 一直在 Web 开发领域深耕,期间创立了 3 家公司,当中有 2 家还成功盈利了。在这个过程中,他还掌握了团队管理、市场营销等其它非计算机专业的基础知识,使其成为不折不扣的全栈工程师。
正常情况下,普通人能走到这一步,已经算是人生赢家了。但是,John 并不满足于此,他想完成另一个新身份转变:从 Web 工程师变为软件工程师。
许多人看到这里,估计会心里犯嘀咕,这两个岗位区别有那么大吗?但 John 认为,相较于前者,后者需要掌握数据结构、算法、编译语言、内存优化等更深层次的编程知识。
之后,John 便开始投入精力学习,并将进入 Google 工作视为其成功掌握这项技能的判定标准。
在学习的过程中,他开始接触大量与编程相关的知识与教学资源,秉着前人栽树后人乘凉的精神,John 在 GitHub 上开源了这份学习指南,并将其命名为「Google Interview University」(现已更名「Coding Interview University」)。
https://github.com/jwasham/coding-interview-university
在 John 放出这个项目后没几天,GitHub Star 便如火箭般快速飙升,短短三四天内便突破 10000 Star,成功霸榜 GitHub Trending!
项目历史增长曲线:
这份指南里面包含 Google 相关的介绍视频、面试过程、教学资源,同时也有数据结构、算法、密码学等计算机专业的知识讲解。
同时该指南也有中文版翻译:
https:// github.com/jwasham/codi ng-interview-university/blob/master/translations/README-cn.md
不过由于这份译文未跟原文保持同步更新,因此内容难免会有缺失。英文阅读能力尚可的同学,还是建议直接看 README 原文。
下面我简单挑选了几张项目截图,让大家感受一下这份资料里面都有什么干货:
可以看到,这份指南资料整理得还是非常齐全的。
尽管 John 最后没去成谷歌(去了亚马逊),但他留下的这份指南,还是让诸多后来者受益无穷,在此也对作者表示下感谢。
如果你也有一颗想进入大企工作的心,不妨提前先查阅下这份资料,看看是否对你有所帮助。
推荐阅读:
GitHub 标星 5000+!学生党学编程,有这份资料就够了!
欢迎关注公众号:GitHubDaily,每日分享 GitHub 优质开源项目、学习资源、开发技巧。
我感觉相对来说Google算是面试最简单的公司之一,因为它几乎只面算法题。。。稍高级别一些的职位会有个System Design...
所以算法学好点就足够了。。
18年面过北美社招,算法题都巨水,基本会用STL,考考DP,敲个最短路,写个Trie就到头了。。。当然也不是说让你写个裸的XX算法,都是用非常基本的算法解决问题,不会给你设置知识壁垒。
16年面过国内实习+转正,稍微难一些,一道题基本上好几问不同的算法,考了基环内向树,树状数组计数,深搜转记忆化搜索计数,离散化二分加贪心,费用流构图,不过都是最基本的那种模板题(俗称一眼题),你找个OJ每个category刷10道题基本可以刷到类似的。。。
我当年听说本科同学面腾讯,人家电话里问他如何在UDP基础上实现一个TCP,我觉得这个还要考虑sequential,retry,设计backoff,分析reliability和performance啥的,比算法题要考虑的东西多多了。。。而且电话里还没法画图。。。
据他们面高频交易公司的说还考各种操作系统的东西...
=====
UPD1:关于TCP的例子,你要是背过了课本尤其是写过这个作业,那讨论难度就没什么意义了啊。我只是以此为例,比如告诉你UDP、TCP的定义,给你class UDP,问你怎么扩展成class TCP(我们可以把UDP、TCP换成别的),这种开放性的设计和实现问题,是不是会比面试中一道20分钟的算法题需要想的内容更多。BTW有的学校CS和CE是分开的,CS并不必修计算机网络。
UPD2:评论有人说算法题都做了 / Leetcode刷完了但并没有拿到Offer,首先给不给Offer也要看你解题过程中的思维过程,其次Leetcode的题目覆盖面并不全,难度也相对偏低,应该说是个面经网站,定义为传统OJ有点牵强,“找个OJ每个category刷10道题”需要一个ACM向的OJ有针对性地刷上 30*10 这样?
凡是大部分员工都不认可,只有管理层一厢情愿的推崇的,就是low的公司文化。