这是 JinTao(aka TJ) 的一篇分享自己如何面试准备进谷歌的经历分享,经历还是蛮曲折的,想去大公司的话非常具体参考价值。
TJ 是我的一个老朋友了,《91 天学算法》也跟了好几期,如果你也参加过《91 天学算法》,那么很有可能知道她。我俩私底下交流也蛮多的,得知她最近刚刚进了谷歌,就邀请她来写一下自己的面试准备经历。
本文中的 lucifer:
是我自己添加的内容,不是作者写的,大多是补充一些资料以便让大家进一步学习。
关于刷题
西法的讲义和他的方法足够足够了。另外,狗头刷题经验已经说很好了,很全面了。做题,注重理解,做西法推荐的经典题,和复习是关键。时间长了会忘记,会缓慢。
lucifer: 关于狗头的刷题经验,大家可以去《力扣加加》历史文章中搜索”狗头“关键字
谷歌很难说刷题范围,把西法讲义好好做,基础题做好,记得面试的时候交流积极主动且清楚,只要运气正常没遇到超级超级难的题,就可以了。谷歌比较注重 followup,比如一开始一个简单题,不要急着秒,要想各种 case,和面试官讨论,其实那些 case 有可能会在之后 followup 出。
这里的讲义指的是 《91 天学算法》的资料,活动介绍与参与方式见我的博客置顶帖。地址:https://lucifer.ren/blog/
谷歌的面经不一定有意义,这里是指,”别人面了,靠记忆从英文翻译成了中文写出来,且非常模糊的那类面经“,时间不够的话,可以不看。leetcode tag 高频还是有参考意义的,但也不要指望遇到原题,几乎不可能,注重西法的讲义学习和练习就好。
面试过程
一般的过程(可能不适用 meta,但狗家是追求这样的)是:
第一步,面试官说完题目,至少得花时间好好理解题意,套自己想的好的 test case,问清 corner case 处理情况。千万不要马上开始写。
第二步,说暴力法,说复杂度,想怎么优化,说方法,得到面试官的认可,才开始写代码。
第三步,写代码(一般西法有归纳模版,经典题一般有基本套路,得提前练熟)
第四步,过自己的 testing case,然后分析复杂度。
第五步,应对可能的 followup。一般都会有。
lucifer: 我在网上找到一份 《Interview Cheat Sheet》,这个 PDF 列举了面试的模板步骤。,详细指示了如何一步步完成面试。地址:https://github.com/azl397985856/leetcode/blob/master/assets/cheatsheet.pdf
整个过程尽可能积极,创造快乐积极的氛围,把面试官当同事。
lucifer: 这句话我熟啊,上次听似乎还是在狗头那儿
心态
面试途中除了刷题挫败,还有就是对自己怀疑&对现状不满之类的负面情绪需要处理。如果需要心理咨询,尽快做,比如 betterhelp,也许可以减少弯路;尽可能每天瑜伽垫上跟视频运动下,同时多输入积极的东西,看看别人在最艰难的时候是怎么做的,给自己打打鸡血。每天至少 10 分钟,闭眼憧憬下未来,越疯狂和理想越好,想不到看不到,就很难有行动力,尤其是当外界没有一点正反馈的时候。最后就是保持感激,最艰难的时候,一定会有支持和帮助你的人,如果没有的话,就换圈子和积极寻找。再差再难过也得有点信念吧,这点是最难也是最重要的。
lucifer: 好的状态可以事半功倍
学习资料
北美的同学,可以考虑一下 CodePath,是个很好的公益组织,有免费的刷题课程帮助提升 tech diversity,讲师都是名企的,一般都是 CodePath 之前的校友,现在反哺。如果已经上班了,也可以考虑志愿做 CodePath mentor,可以有效提高沟通能力。和西法讲义结合,强强联手,另外 AlgoExpert 也不错的。如果时间有限,可以只刷 AlgoExpert。题不在多,在于思路覆盖面。
最后
找工作可以很漫长,也可以很快,很多变数,而且很看缘分,很多时候更是自己和自己的斗争吧,在最低谷的时候,也请相信自己。