背景
空识拿到了Google 的 offer,和狗头做起了同事。
他一个礼拜刷了 100 多道题,然后面试 Google 终于通过了。这个经历还是蛮具有代表性的,分享给正在准备面试的你。
以下 Q 为 lucifer,A 为 空识。
采访
Q: 你是什么时候开始接触数据结构与算法(以下简称算法)的?
A: 大概是十年前读本科的时候……但是没有系统性的学习,只了解过一些特殊用途的算法(X 算法,RSA 算法,…)打算转码的时候才开始重头系统性的学习。
Q: 你是什么时候接触 91 天学算法(以下简称 91 天)的?从什么途径得知的?
A: Github 上的题解->西法的公众号,在公众号里了解到的。
Q: 91 天有给你带来了什么样的变化么?
A: 我变秃了,也变强了。从一开始看到 two sum 觉得精妙,周赛做不出 easy 到现在能 稳定写 2-3 题。一开始 oa 撞原题都写不好到现在不少 oa 直接做也能拿到面试机会了。
尤其印象深刻的是 一开始自己刷题,easy 可能都要磨蹭个 2-3 小时研究相关的 topic 搞明白题解,最后一周刚好要准备狗厂面试,五天就刷了 100+题…… 真的变秃了。
Q: 学习算法过程中有“顿悟”的时刻么?
A: 有呀,正如六祖慧能在《坛经》里说到的,“迷闻经累劫,悟则刹那间”,在各种重复思考卡壳之后再去看题解的点悟往往会有那种开了一扇门的感觉,然后就悟了哈哈。
Q: 你比较擅长的算法是什么?可以给大家简单分享一下么?
A: 其实是数学法,因为本身是学数学相关方向的,以前经常被同学分享这种很巧的题,所以练习得比较多。
Q: 有没有什么想和刚入坑算法的同学分享的?
A: 一定一定一定一定要坚持不要放弃,每天再难至少要刷 1 ~ 3 题(具体看是否脱产),每天发掘一个小技巧,91 天就能学会很多很多东西。而且尤其是一开始,easy/medium 的题都刷的很艰难需要很多时间,这个时候很容易会怀疑自己的能力/天赋,但是千万不要绝望不要放弃,因为绝望/放弃其实没有任何作用,咬紧牙关坚持下去是最重要的,超越了觉悟,就能看到希望。
另外还有就是万事从简,我最早转码纠结于以后到底该做什么纠结了很久,其实这个回头看,其实都要学的,直接捡一个比较主流找得到不少题解的语言开始最重要。
Q: 相对而言,你觉得 91 天哪里做的还不够好?应该如何改进?
A: 其实我觉得挺好的……感觉可能硬性要求开始的时候多打点卡比较好……?因为感觉一开始人比较容易有惰性,不想走出舒适区,可能需要一点 push。
Q: 有没有什么面试和刷题技巧或建议给大家
A: 我觉得很重要的几个点:
力扣官方有很好的 explore 卡片,那个可以很好的作为基础篇的补充,针对性的刷题可以帮你形成你自己的理解,有理解了刷题就快了。
力扣的公司 tag 是可以按照频率选题的,刷高频题通常能够给你更直观的一个关于“这个公司到底是在考什么”的体验。
打周赛,其实多少分不重要,能不能涨分也不重要,重要的是思路。 所以你可以随便打开任何一期周赛,然后用力扣网站的模拟面试功能打。然后设立个目标,目标应该是差不多一个小时做二望三。
Think out loud。面试的时候沟通很重要,所以一定要学会自言自语,写完主动手动跑一遍,想一次 edge case,然后算一遍复杂度,可以的话甚至可以想一想这个题可以怎么改编怎么 followup。
注:北美的小伙伴我推荐用 interviewing.io,我觉得练习很有效……
- 一定一定一定一定要自信,振作起来,生活不容易,你是最棒的。
lucifer 总结
空识最后给的五个建议都非常的实用,手动点赞。另外空识的建议已经收到了。我们后期会加大 push 力度,努力营造一个积极向上的刷题氛围,fighting!
此外,空识提到了很多次打模拟面试或者周赛。其实我也建议大家过一遍 tag 后就先打 20 次周赛,做几道题都不重要,就是锻炼自己的做题能力以及给定压力下的思考反应等。