原文链接:https://medium.freecodecamp.com/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13#.734ffve0j
翻译者:shixinzhang
译文链接:http://blog.csdn.net/u011240877/article/details/53706155

的确如标题所言,为了准备 Google 软件工程师的面试,我花了数以千计个小时读书、写代码、观看计算机科学相关的讲座。

如果你对我的面试计划有兴趣,可以从我的 github 项目 上查看计划。

这个计划是怎么产生的呢?

我中学时期就开始编程,但是大学却选了经济学。这是因为我担心毕业时会有太多程序员找工作。现在想想我错大发了。

后来为了称为一个程序员我加入了军队,但是招聘人员却把我送到了军事情报处,于是我花了一年学习汉语,又在韩国服役了两年。

在退役前我试着重新拿起键盘,却发现物是人非,区别太大了。我从初中到高中一直使用的是 BASIC。但是回归后使用的是 C++,这两者间差别太大了,一时间我无法适应。

但是我很喜欢做网站,那会儿使用的还是 WordPress。我不懂怎么从零开始搭建一个网站。

在退役后,我决定在韩国再留一年,教英语。同时不忘初心,晚上、周末都用来学习 Web 开发,用的是 Perl, HTML, CSS (这在那会儿是个新生物), JavaScript 和 SQL。

在经过一年高强度的学习后,我得到一份在西雅图编程的工作,从此以后我就待在西雅图了。

从此以后我做了 15 年 Web 开发者。我创办了三家公司,其中两家至今还在盈利。这些年我在大公司、小公司都待过,见证、助力过创业公司的启动和成长,也招募、管理过团队,也当过产品经理,设计师,市场人员和 CEO。

在这个过程中我收获了很多,也算是比较成功。但是还差得很多。

职业方向的改变

还记得我错选经济学,没拿到计算机学位那部分吗?最终有所改变。

工作几年后,我觉得我已经大成了,去哪家公司都妥妥的,毕竟我是一位“全栈工程师”。

然而在 2013 年找工作时,我意识到自己原来差的这么多。

过去那些年我花了太多时间追寻金钱,甚至空余时间也在运营公司,这让我的技术止步不前。我的技术栈有些跟不上时代了。

过去那些年我的技术一直是够用就行了。虽然技术面比较广,却没有任何一个方向称得上专家。

别会错意了,我想找到工作还是没问题的,只不过不是我想要去的技术或者领域。我还是可以被一些技术栈不是很新的公司聘用的,给的待遇也不差,但是我对那样的前景无法感到兴奋。

我的这种“差得很多”的自我认识在去年一次找工作时达到了极点。我对一家风投投资的本地创业公司工作很感兴趣。但是由于我没有计算机学位,不具备这个学位掌握的技术和知识,导致我最终没有机会。

那时我一直在我公司中全职工作。

在 2016 年初,我觉得是时候做出改变了,从 Web 开发者到软件工程师。为了在几个月内掌握计算机学位学习的知识,我需要刻苦学习和练习,虽然长路漫漫,但我相信,一旦成功,我就会进入一段新的职业生涯。

有人可能觉得 Web 开发者和软件工程师没什么区别。它们都需要编程和技术,但是软件工程需要更多知识,比如数据结构和算法,编译型语言,对内存的关注,理解不同的代码和架构对运行机器的影响。

大公司招聘软件工程师时,期望候选人掌握这些知识。

我向在 Google 工作的一位朋友咨询了关于在 Google 工作的问题,也读过《How Google Works》,对 Google 有了一定的了解。

偶然一次机会,还得到一份 Google 面试候选人的指导笔记,这成为我学习计划的基础。

Google 是一个非常棒的公司,在意识到这一点之前,它就已经是我的目标。

为什么我的目标是 Google

目标设到月球,即使失败,也能落到众星之间。

Google 的门槛非常高,他们只想招聘最棒的人才,所以我把目标设定的高一点,即使最后没去成 Google,去别的公司应该也没什么问题。

而且,随着对 Google 的了解越深,我对它的渴望就越发强烈。

Google 有很好的“招培育留”氛围。简单地说,Google 选用聪明、有创造力的人,然后把他们照顾得很好。Google 奖励能创造价值的人,鼓励大胆创新,给员工自由,让他们为用户做出好的决定。

Google 的招聘流程经过多年调整,招聘以聪明、激情为准。脑力测验早就不用了,候选者的编程能力,技术知识,是否“够谷歌”(这个词蕴含的内容太多了…)。

Google 的管理也很不一般。他们的管理非常宽松,相信工程师可以做正确的决定。对雇员的信任使得 Google 的管理角色不同于平常公司。此外,管理层不能单方面决定雇佣、开除或者提拔一个员工,大多数重要的决策都需要由委员会投票决定,这样可以降低风险。

Google 的人力资源部一直在进步,他们根据数据和员工反馈来提升评估系统,这个系统包括招聘、提升、奖励等内容。

我的天,Google 的优点太多了。我曾去过一次 Google 的办公室,我本来的期望就很高,结果发现那儿的情景比我想象的还要好!

关于谷歌面试学院

还记得那份告诉我该学习什么的面试指导笔记么?虽然上面的内容我很多都不懂,但至少它让我有了目标。

我把笔记上的题目变成提纲,然后通过观看麻省理工学院和加州大学伯克利分校在 YouTube 上的讲座来一一学习。每个链接上可能有多个学习内容,很多视频基本都会引出下一个视频,就这样我不停地学习,学习提纲逐渐丰富。

由于之前我的写的商业、工作代码都是保密的,我的 Github 基本是空空的,看起来像根本没有在敲代码一样,于是我把这份学习提纲上传了上去。我需要创建一个作品,开始我叫它“Project 9894”,是因为 Google 创建于 1998 年 9 月 4 号。后来我把它改名为“谷歌面试学院”。

在学习的过程中,我把自己发现的话题都一一添加上去。

过去我总觉得“知识够用就行了”。这么多年职业生涯中我根本不清楚 CPU 怎么处理一段程序,内存如何工作,或者其他的知识,我很佩服自己这么多年是怎么过来的。

我的 Github 小项目渐渐开始得到一些关注,我甚至写了篇文章庆祝项目得到 20 个 star。

有天早晨我发现我的项目有 120 个 star 了!某个业内知名人士前一晚上在推特上分享了我的项目,让我的项目收到很多关注,甚至进入了 Github 当日流行榜。好几天我都是 Github 流行榜的第一名哈哈。

许多善良的人主动鼓励、感激我,这让我发现原来有数以千计的人跟我一样,不仅想去 Google 工作,也想成为一名软件工程师,我列出的学习内容正是他们需要学习的方向。

到目前为止它有超过 21000 个 star 了,难以置信。

如果我无法 Google 工作怎么办

只要不是天塌下来,都没关系。

为了成为 Google 的软件工程师,我投入了大量的时间和精力,即使我不幸失败了,我学到的知识和能力也足以让我去任何其他公司任职。

不论结局如何,起码我会成为一名入门级别的软件工程师。我不认为我有 15 年的软件工程师经验,因为我过去的确不具备这个能力,我和刚毕业的计算机学生一样还只是新手。

这对于我来说是一段新的旅程,才刚刚开始,即使我会犯很多错,也毫不畏惧,因为我有学习新内容的热情,我要学习所有需要的知识,成为团队中优秀的一部分。

叮嘱:别像我一样学过多东西

我花了八个月时间准备面试,但事实上我可以缩短很多时间。跟做其他复杂的事情一样,一开始都需要试错、走弯路,总有一些事我想回去重做。

我学习了很多我不需要的内容,有些是因为我觉得面试需要,有些是我觉得工作里会用到。我不想成为团队中的负担。但事实证明我操心太多了,很多内容都没必要学习。

我花了三周阅读一本 1000 页左右的讲 C++ 的书,那么多内容我没记得多少,但是起码对 C++ 了解多了一点。本来我以为会用到 C,C++,或者 Java,结果我面试中准备用的是 Python。记住这个教训:别猜,去问!去查!

到后来才发现,我只需要读三四本书就够了,我读的太多了。

我归纳了一本重复查看的算法总结,里面记录了很多我不希望在面试中遇到的问题。这其实是无用功,你不必这么做。

我花了很多时间看视频,然而本应该少看一些的,应该随着时间慢慢增加内容。

我应该尽早停止看书,换成看视频,早点开始编程验证、解决问题。早点开始动手实践我所学的。

隔一段时间重顾知识是记忆的关键方法。不要一次性学完一项知识就不管了,这样你无法真正的掌握。隔一段时间回顾一下,每次重复,你都会加深自己的理解,次数多了,你就会理解每个细节,成为真正的专家。

为了帮助回顾知识,我做了个手机上用的知识点抽记卡,里面有 1792 份知识,现在想想内容有些过于多了。一有时间我就回顾上面的知识点,比如圣诞节购物、排队等公交时。当抽记卡上的问题我能正确地回答时,就标记为“理解了”,否则从抽记卡上看明白答案,等待下次回答问题正确了再标记。

我内心的恐惧让我学习了太多不需要的知识,比如“要是他们考我红黑树相关的知识怎么办”。

但是我不想面向面试学习,我想要为了在 Google 工作、解决重量级问题而学习。这就意味学习算法还是有用的,它们可以提升计算机的时间和空间效率。

或许我永远用不到 Ford-Fulkerson 算法(一类计算网络流的最大流的贪心算法),但学习后我起码知道如果有类似的问题出现,该怎么解决。

总结

现在我了解了计算机的历史,编程中最伟大的部分–数据结构与算法,还有计算机系统底层是如何工作的。

在开始准备谷歌面试之前,我总希望可以跳过所有准备阶段,直接应聘,然后去学习工作中用到的语言和工具就好了。

但是在这个过程中,我意识到这些知识是多么重要,虽然它们可能在日常开发中应用不到,但是我相信我的付出会给自己带来内在的提升。

我马上就提交申请了,为了这件事我几乎准备了一年(一月份开始,但直到四月,我才能够保证全职学习)。

我觉得我已经准备的差不多了,是时候提交申请,对我这段时间的学习进行一次检验了。

这将是我人生的一次飞跃。我看到前方有一个光明的未来。

谢谢你花时间读我的故事。

关于我的信息

Github 项目:google-interview-university
个人主页:https://googleyasheck.com

备注

原文链接:I studied full-time for 8 months just for a Google interview
作者:John Washam
翻译者:shixinzhang

谷歌求职记:我花了八个月准备谷歌面试相关推荐

  1. R7-5 谷歌的招聘 (7 分)2004 年 7 月,谷歌在硅谷的 101 号公路边竖立了一块巨大的广告牌(如下图)用于招聘。内容超级简单,就是一个以 .com 结尾的网址,而前面的网址是一个 10

    R7-5 谷歌的招聘 (7 分) 2004 年 7 月,谷歌在硅谷的 101 号公路边竖立了一块巨大的广告牌(如下图)用于招聘.内容超级简单,就是一个以 .com 结尾的网址,而前面的网址是一个 10 ...

  2. 重磅来袭!谷歌八年高级工程师亲授面试经验!!!

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! Pablo Samuel Castro是谷歌Brain的一名高级研究员,其研究内容 ...

  3. 具有软件特色的电子小硕求职记

    十月国庆大阅兵刚过,又到了应届生求职应聘的高峰季节,我也踏上了这趟载着数十万甚至上百万人的大船.简单介绍下:南京211院校小硕,本科非211的,电子类专业,在校期间由于课题和老板项目的原因从事的课题研 ...

  4. Jamie求职记--北邮信通小硕--技术类

    前言:      前些日子看了Steve兄的求职分享帖,写的很好,相信对于将来想从事非技术类的师弟师妹们,一定有很大的积极作用.      相信我们09级的同学们很多人还记得07级信通院求职交流会中大 ...

  5. Google, FaceBook, Amazon 加州求职记

    一年多前,出于显而易见的原因,下定决心肉身翻墙.经过一番考虑,放弃了读书这条途径,决定直接找工作,通过H1B签证出去.于是去年八月份从百度辞职,开始着手准备.当时觉得今年拿到H1B的成功率大致能有个六 ...

  6. 小林求职记(六)踩过Dubbo坑,回答印象深,干货整理

    小林求职记系列文章,归置到公众号菜单栏,欢迎查看历史篇 前传 小林求职记(五)上来就一连串的分布式缓存提问,我有点上头.... 终于,在小林的努力下,获得了王哥公司那边的offer,但是因为薪水没有谈 ...

  7. 小林求职记(五)上来就一连串的分布式缓存提问,我有点上头....

    小林求职记系列文章,归置到公众号菜单栏,欢迎查看历史篇 前传 小林求职记(四)不会吧不会吧,面试还真会问这些呀 在之前王哥的辅助之下,小明的简历成功被内推进到了王哥所在公司.由于一面就是王哥自己,所以 ...

  8. 小林求职记(四)不会吧不会吧,面试还真会问这些呀

    小林求职记系列文章,归置到公众号菜单栏,欢迎查看历史篇 前传 小林求职记(三)一上来就围绕电商系统层层提问,我太难了.... 经历了好几次求职失败的经历,小林最终找到了自己以前一起工作合作的老同事王哥 ...

  9. 小林求职记(三)一上来就围绕电商系统层层提问,我太难了....

    前传 面试官:什么是大事务?小林哥:就是 很大...的...事务?? 小林求职记(二):说好的问基础,为啥我感觉一点也不基础呢? 二面的面试官来到来我的跟前,开始对我的简历进行了一番打量然后就开始了技 ...

最新文章

  1. 通过显微镜,人们又看到了一个活生生的但是肉眼看不到的世界。透过成千上万的点击数据,在线世界也就变得更为鲜活,更有意义了。...
  2. python math库常用函数_Python math库常用函数
  3. OpenCL异构并行计算编程笔记(2):命令队列与内存对象
  4. 脑电信号特征提取常用算法(共空间模式CSP、小波变换DWT、功率谱密度PSD、AR模型)
  5. java设置字体大小和颜色_Java 设置Excel图表背景填充(颜色、图片填充)
  6. VBA合并csv文件
  7. 网易云音乐IPO拟至少募30.4亿港元 开售半日已获足额认购
  8. Sql Like 通配符 说明
  9. 实习成长之路:MySQL六:行锁的功与过:怎么减少行锁对性能的影响?
  10. linux下ssh安装教程,linux安装ssh
  11. java wsdl文件生成代码_wsdl文件生成java代码
  12. Adaptable and Adaptive Hypermedia Systems
  13. GB/T 20984-2022《信息安全技术 信息安全风险评估方法》解读
  14. Android 使用adb查看和修改电池信息
  15. java privatekey输出字符串_根据字符串(String)生成公钥(PublicKey)和私钥(PrivateKey)对象...
  16. python爬虫:爬取猫眼TOP100榜的100部高分经典电影
  17. 安装.Net应用程序(如B站弹幕姬)报错:参照的程序集没有安装在系统上。 (异常来自 HRESULT:0x800736B3)
  18. 硬盘插到群晖上使用之后再插回Windows就不识别了,记录一次解决过程
  19. C语言 有五个人坐在一起问第五个人多少岁?
  20. 安卓逆向高阶之frida hook java层

热门文章

  1. 应届IT研究生面试自我介绍中英文模板
  2. 安装vue-cli出错:npm ERR path D:\nodeJs\node_global\node_modules\@vue\cli\node_modules\core-js-pure
  3. 移植后php感染,除了排斥、感染…移植后容易发生的这项疾病,很多人都忽视了!...
  4. Android单元测试框架Robolectric3.0介绍(一)
  5. 知道服务器地址上传网页文件,修改的网页怎么上传到服务器地址
  6. 拼音转换---Python自然语言处理(6)
  7. docker中java钩子_springboot项目在docker容器中如何优雅关闭
  8. Win10 使用Office 2016 出现多个授权信息无法激活的问题以及解决办法
  9. “超前学一般都没用!”关于带娃学数学, 我们问了浙大博士贼叉老师8个问题...
  10. python读取excel文件并保存成array