有人问:想进Google,应该做哪些准备?
其实进Google没有固定公式,但学好编程绝对是最快的途径之一。

首先,想进Google或翻墙硅谷,有三条路可选:

1、去国外读研,毕业后找工作2、直接投外企,FLAG,抽H1B3、去国内有transfer机会的外企,找机会从内部transfer到美国

其次,不管你作何规划,都必须学好编程

光从G家招聘需求最大的三大岗位CS、DS、MLE来看:他们在面试中都考算法。虽说国内BAT也考算法,但大多是皮毛。而G家的面试难就难在对候选人数据结构和算法的要求非常高,哪怕最普通的岗位都要最优秀的人去胜任。

所以,应该作何准备?

我就选个特别的角度来讲吧——关于我自己肉身翻墙进G家的学习方法和经验总结。
我大学土木专业,毕业之后发现踩到天坑,工作工作找不到,做研究吧好像也看不到希望。看身边朋友做程序员混的风生水起,就动了心,但以国内目前的招聘需求来看,对我转行非常不利,于是我跟好朋友一起,肉身翻墙,先去美国读了个CS,然后沉下心来慢慢寻找工作机会。
但其实,先不说你出国留学、毕业找全职工作、拿身份这些事有多辛苦。光说拿到G家面邀,通过面试就足够困难了。现在想想我能进G家,真的非常幸运。还记得当时的招聘流程是这样的:
从在谷歌投简历到最后拿到offer,大概要经历3~4轮的面试。在这几个流程中,会被问到的问题有三大类:算法题/系统设计/Behavioral Question不同的问题面试官考察的侧重点是不一样的。
所以我着重从这几个方面帮大家分析分析,进G家需要具备哪些条件:
1、算法
G家基本是三轮算法一轮design,但考算法非常看运气,有的会被问到很难很怪的题,所以一定要好好准备。我建议题主在大学期间好好学习算法与数据结构,有能力的话可以参加一下ACM,提升自己的硬实力。
其次,提升算法的最快方式就是多去刷题,我的方法是按照类别去刷,用的是学习资料是《FLAG面试常考知识点及考察频率》里的分类方法,基本每个概念做两三道就可以了。
个人建议刷题的重点可以放在动规、二叉树、递归、链表、二分搜索上,动规简单看下就可以了,投入产出比非常差。其他常考知识点可以参考《FLAG面试常考知识点及考察频率》上划分的FLAG面试常考算法知识点和频率,在免费试听课上就能学到,不用担心被收qian~
扫码报名,免费试听
当你做完这一步之后,应该能对各类算法题有一个比较全面的认知,如果你能够做到看一眼题目就知道怎么解,效果基本就达到了。如果还没有,建议继续刷题来巩固和熟练。
我一开始是在学完算法与数据结构基础之后,直接去LintCode上找G家的高频题去练习。大概百来道吧,基础的算法知识点都能覆盖。
遇到不熟悉的题型,可以将他们单独放在一个list里,之后专门攻克。事实证明这样的准备比盲目去刷几百题更有效,我就是靠这样的方法,在G家终面时遇到了原题,也算非常幸运了。
2、系统设计
G家的考察风格基本是三轮coding一轮design,湾区还有很多小公司反而更注重design的考察,所以可想而知,不管你去不去G家,系统设计都特别重要。
如果你想通过系统设计帮你升levle涨薪进大厂,首先要了解系统设计面试的评分标准
根据我之前的面试经验,我发现系统设计主要考察这几个方面:
  • 可行解 Work Solution 25%
  • 特定问题 Special Case 20%
  • 分析能力 Analysis 25%
  • 权衡 Tradeoff 15%
  • 知识储备 Knowledge Base 15%
但说实话,算法可以靠刷题去巩固,系统设计却并没有一个标准的备战方式。我前期面试的时候总挂在设计上,因为面试官抛给我问题之后,我会疯狂的去怼关键词,像是Load Balancer,Memcache,NodeJS什么的...
所以那阵子几乎所有面试的公司都挂了,一度看到设计题就恐惧。后来室友推荐给我一套系统设计4S分析法,谁能想到设计题也能套模板回答,套用之后,仿佛打开了新世界大门,这里借花献佛,分享给大家~
所谓4S分析法指的就是👇:
  • Scenario(场景)
  • Service(服务)
  • Storage(存储)
  • Scale(扩展)
拿之前面试时遇到的真题举例:如何设计一个推特?
这里我套用4S分析法,来帮大家展开回答下:
第一步:Scenario 场景
在这一步,你需要询问面试官:需要设计哪些功能(也可以自己想),需要承受多大的访问量?
首先可以把Twitter的功能一个个罗列出来,很显然你无法在45分钟的面试中完成所有功能的设计,所以需要筛选出核心功能(Post a Tweet,Timeline,News Feed,Follow/Unfollow a user,Register/Login)。
然后有的面试官可能会问你系统承受的QPS大概是多少?需要考虑并发用户,读频率(Read QPS)以及写频率(Write QPS)。记住重要的是你的思考和计算过程而不是计算结果。
分析QPS有什么用?
  • 如果QPS = 100,那么用你的笔记本作Web服务器就好了;
  • QPS = 1K,一台好点的Web 服务器也能应付,需要考虑Single Point Failure;
  • QPS = 1m,则需要建设一个1000台Web服务器的集群,并且要考虑如何Maintainance(某一台挂了怎么办)。
QPS 和 服务器/数据库之间的关系
  • 一台Web Server承受量约为 1K的QPS(考虑到逻辑处理时间以及数据库查询的瓶颈);
  • 一台SQL Database承受量约为 1K的QPS(如果JOIN和INDEX query比较多的话,这个值会更小);
  • 一台 NoSQL Database (Cassandra) 约承受量是 10k 的 QPS;
  • 一台 NoSQL Database (Memcached) 约承受量是 1M 的 QPS。
第二步,Service服务
所谓服务可以认为是逻辑处理的整合,对于同一类问题的逻辑处理可以归并到一个服务中。这一步实际上就是将整个系统细分为若干个小的服务。
根据第一步选出的核心功能,我们可以将推特拆分成如下的几个服务:
篇幅有限,关于后面几个步骤的更多的内容,可以直接移步《系统架构设计通关攻略》,也是免费资源。像秒杀订票系统,设计电梯,三驾马车,新鲜事系统,评论系统这些大厂常考的设计题,都能手把手带你实操。
扫码报名,免费试听
用我的亲身实践,帮大家总结一下系统设计面试中需要注意的点:
  • Ask before design. 问清楚再动手设计,不要一上来就冲着一个巨牛的方案去设计;
  • No more no less. 不要总想着设计最牛的系统,要设计够用的系统;
  • Work solution first. 先设计一个基本能工作的系统,然后再逐步优化;
  • Analysis is important than solution. 系统设计没有标准答案,记住答案是没用的,通过分析过程展示知识储备,权衡各种设计方式的利弊。
3、加分项目
最后跟大家分享一些我在自学过程中发现的宝藏项目,项目储备丰富了,绝对能在投递简历时加分~
01
linghu-algorithm-templete
虽然谷歌的算法面非常爱出变形题,但面试官最终想考察的东西肯定是不变的,所以我在备战期间会选择多做高频题,搞清面试官的出题套路。
02
Twitter 后端系统 - Python 项目实战
Facebook资深架构师的Twitter项目,带你从零设计Twitter,最终搭建一个P8(L5)水准的项目
涉及万行代码,最终成果是一个可上线的工业级别的项目,而不是像市面大多数项目课程简单做个demo。
涉及的面试难点包括:
  • 如何分别测试登录用户和未登录用户?
  • 如何做反向查询?
  • 如何设计数据库表达?
  • 如何让部分用户看到某个新功能,其他用户看到的就是功能?(灰度测试)
  • comments的API该如何设计?
  • ……
最适合当作系统设计的练手项目,可以免费试听,大家可以去感受一下。
扫码报名,免费试听
03
LintCode
小众在线刷题平台,在学完算法与数据结构后,可以先找几道G家的原题练练手,感受下大厂的面试难度及考察风格,除此之外,对于新手也专门设置了新手必刷编程50题,基础薄弱的也可以先从这里开始刷起。
最后我想说,其实进大厂说难也难,说简单也简单。如果题主铁了心想在毕业后肉身翻墙,先打好算法基础是当务之急,但愿我的分享对你有用。
希望早日跟你成为同事~
玄学时刻:点赞在看的人都能offer多多!
戳下方
阅读原文”免费试听课程
继续阅读
阅读原文