登录
  • #刷题

面向‌‌‍‍‌‍‍‌‍‌‍‍‌‍‍‍‍‌‍‍‌‌‍‌‌‌‍‌‌‌‍‌面试刷题:0基础到Google和WePay的心得

易潇
9915
61
回报地里~

我商科本科通过bootcamp转码,申请季节结束大概拿了5个offer。其中湾区的有Google和WePay。

很多朋友都说我的经历挺励志的,希望能了解一下我是怎么刷题的,所以在这里贴出来~

**********本文只讨论刷题心得,有相关问题欢迎留言*********

我的刷题情况

在谷歌面试的时候,我大概刷了550道题左右:其中大概150道简单,310道中等,90道困难。包含中国站一些剑指和面试经典的重复题。对于前200和一些高频题,我刷了两遍以上或者更多。





上图是我刷图论的模板题



我在四月份之前断断续续的大概刷过60道题左右,然后在四月份的时候我新开了一个进程并且开始好好刷题。完成最后一个面试是7月20日。

刷题心得

按照一个基于tag的计划开始刷题

tag的定义:在力扣题库界面的上方可以看到不同的标签(tag),点进去就可以进入每个标签的列表。

按照标签刷题的好处是它能帮助你巩固你对某个数据结构的理解,并且不断的改正和进步。

网上有很多大佬分享过刷题顺序和题单,或者你也可以自己创建一个列表。我觉得不用太纠结“到底哪个列表最好”,作为一个刚开始刷题的人,今天先学A或者B一般来说影响不会太大 --- 反正到最后都是要学的。最重要的是“开始学”。不要害怕计划不完美。计划肯定不会是完美的,是会随着自己的认知和进度而修正的。

我参加了力扣加加(微信公众号同名)的91天学算法打卡项目(收费十块人民币)。91算法过程基本上是先看某个专题的讲义,然后这一个星期从易到难每天做一道。我觉得91算法的独特之处是“有讲义”,这个讲义基本包含了刷题所需要的数据结构知识。当然,中国区力扣也有很多leetbook可以学习,我觉得如果没有基础的话,强烈推荐先看点资料再开始刷题。

建立一个有正向反馈的Todo List

为什么我这么推荐按照计划刷题呢,还有一个原因是Todo List是一个很方便建立正向反馈的工具。(注:此处的todo list指把要做的事情拆分写下来,再划掉,并且告诉自己好棒棒的这个行为模式。具体用什么方法实现都可以。)

为什么建立正向反馈很重要呢 --- 你如果打过游戏,那么你一定有过“呀就打了一会儿游戏怎么就这么点啦”的感觉。打游戏的时候时间过的飞快就是因为大多数设计好的游戏都会不断的给予玩家正向反馈。同理,我们想要一直刷题,那么就要给自己创造一个有「持续正向反馈」的环境。

Todo List就是这样一个工具。我刷题的时候使用的是「ipad + goodnotes + + apple pencil」。一般来说,我每天会制定第二天需要做什么事情,并且尽量把它拆分成小的、容易完成的步骤。比如说我想学习字典树,那么我就会把计划拆分成:



  1. 看91算法的字典树专题

  2. 写91算法的字典树模板题 LC208

  3. 写91算法的字典树推荐题



  • LC211

  • LC212

  • LC472

  • LC648

  • LC820

  • LC1032

4.(如果还有精力)做力扣上字典树标签里的高频5道题

一般来说,除了学习某个专题,我的一天还会有一些其他事情:比如打卡91算法每日一题,打卡力扣每日一题,看邮件,投递申请等等。大部分时候,我起床之后坐在电脑前,都本能的觉得“太难了”,以至于“我不想干”。每当我有这种感觉的时候,我就在所有的待办事项中选一个我觉得最容易完成的项目并且开始做。换句话说 --- 别想那么多,兄弟,冲就完了!(好吧我是个fps游戏玩家)。我一般会选择先做91每日一题,因为它不会太难,而且打卡了之后会被其他刷题小伙伴看到,这让我有种觉得自己很棒棒的感觉。只要开始建立 「“克服困难” -> “执行任务” -> “完成之后感觉自己很棒棒”」 的行为模式之后,一切都会变得简单起来。



贴一个我中期的日程表,这个时候我已经建立了比较好的循环,所以会看到每天完成的任务多了起来,而且我也已经不太依赖“在完成每个任务之后划掉”这个动作了。我的笔记也并没有很整洁或者美观,只要自己能看懂就可以。

当然,在工具上不一定要跟我一样。本子和笔也可以。不过我强烈推荐用一个本子,因为周末和月末的时候回顾看看也会继续加深上面提到的有正向反馈的行为模式。

学会站在巨人的肩膀上

一道题看10分钟如果没有思路就不要太浪费时间在错误的方法上面,学会看和学习别人的题解。

一般力扣解题区的高票题解都很好。(注:这里指力扣中国 leetcode-cn.com的题解,如果你没看过,强烈推荐,是个宝藏!)

一个题解如果看不懂也没关系,首先照着它写一遍,然后通过各种打印和调试搞清楚每一行代码都是在做什么;如果还是不清楚为什么,可以把某一段代码注释掉再点提交。这个时候系统会报错,你再拿着这个输入一行行的分析题解,就能明白这一段代码在做什么、为什么必须要存在在题解里。(这样提交成功率会变低,但是变低又怎么样呢,我们的目标又不是成为提交成功率最高的仔)。

当然,问其他人也可以,但是我更推荐带有具体目的性的提问,而不是“这道题怎么做?”这种宽泛的问题。一般来说,问题越具体,越好回答,被回答的几率越高。

数量还是质量?

其实都需要。一定的数量是熟练度的保证和见过大部分题型的基础。

熟练度在面试中很重要:面试一共那么长时间,其他条件不变,写代码越快,能做的其他事情就越多。其他事情可以是多跟面试官交流,回答一些follow up,做一些优化等等。这些都是面试加分的项目。

见过大部分题型也很重要:见题型多的本质是帮助我们对于某一类问题更好的抽象。比如对于堆来说,91算法一直强调它的本质是“动态求极值”。刚读完我是不理解的,做了一道题我可能稍微有点理解了,做了三道题我就会觉得“哇塞还能这样,哦果然能这样!”拥有抽象问题的能力就等同于拥有以不变应万变的能力,在遇到没见过的题的时候就可以不慌。在面试中遇见原题的概率确实也不大,所以锻炼抽象能力很重要。

当然,刷题的质量也重要。当我们说刷题的质量的时候,我们在说什么呢?我觉得质量是指:一道题是否真的理解它在求什么。对于每一种这道题可能的思路,运用了哪些数据结构,用这种数据结构的优势和劣势在哪里。比如两数和,哈希表是常见的时间优化解法。这里利用了哈希表能用O(1)时间获得对应key的值的特性,牺牲了空间复杂度,而优化了时间复杂度。

复习和重复

复习和重复是很重要的,毕竟“孰能生巧”嘛。对于我来说,每个数据类型的模板题是我写的最多的,多到我能一遍过的基础上每隔一段时间还要刷一下。我在面试之前对于每个常见的数据类型都有自己喜欢的模板写法,并且能根据每道题对模板进行改进。

我记得我当时学堆的时候觉得太难了,我就照着91算法讲师小漾写过的堆写了一个礼拜 -- 就是从早到晚一直写的那种一个礼拜。之后我经常打趣说“就算你半夜三点把我拉起来让我手写一个堆都不会有任何bug”。凑巧的是,我在面试某个pre-ipo公司的时候就考到了跟堆相关的知识。当时的运行环境是HackerRank,需要把代码跑出来并且通过实例。(注:并不是每个公司都要求代码能在环境中运行,有的公司面试更像在白板上写代码。)我当即给面试官表演了一段速写最大堆,因为太熟了,所以行云流水一气呵成。写完了之后我发现两位面试官的眼睛放光,后来recruiter主动反馈说面试结果非常非常好。在给offer的时候给了比申请的级别高了一点,而且最后谈薪资的时候还主动加了12%。

有很多一起刷题的小伙伴

刷题,尤其是一开始刷题,都是令人感到困难的。很多时候这件事并不难,但是这种“好难啊”的感觉才是真正阻碍我们开始的东西。当有了很多小伙伴的时候,有了周围人的压力和鼓励,这种感觉会减弱一些。

刷题的中后期也会经常感到迷茫和焦虑,有很多小伙伴也能很好的减轻迷茫感。甚至很多时候,因为刷题群、技术群里很多大佬都上岸了,大佬们还会分享职位信息,可谓是一举两得。

对于我来说,我在决定要刷题的初期在网上加了很多技术群和刷题群。在我刷题的大部分时间里, 我每天早上睁眼看微信都是一页的刷题群未读消息。每次看到这个,我就有种我也要赶紧起床刷题的紧迫感。每次刷题觉得郁闷了,去群里跟大家聊聊天互相鼓励,也会一会儿就觉得元气满满。

在哪里找这些群呢 --- 力扣中国题解区有一些活跃的大佬们的刷题群都不错,力扣中国的讨论区也经常有人拉刷题群。

适应面试环境

算法面试和在家自己悠闲刷题的感觉还是不一样的。算法面试要求快速的锁定思路并且进行精准打击。(呃,好像游戏打多了...)这方面我强烈推荐力扣的周赛和进行一些模拟面试。模拟面试可以找朋友,也有一些提供类似服务的网站。我在interviewing.io模拟了三次,感觉还是挺有用的。对于单纯的面试状态来说,要做到1)遇到没见过的题就算没有更好的思路也能暴力解,并且再从暴力解中查看哪里可以优化。2)面试官能听懂描述思路和技术用语。

我现在的力扣中国区竞赛分大概是1780(很弱鸡,大佬勿拍呜呜呜)。曾经我也很焦虑的问Lucifer竞赛/面试一紧张没思路怎么办。Lucifer的回复很简单也很有效:“先打20场再说”。

Just do it

“先打20场再说”是面向面试刷题中最重要的指导思想了。开始总是让人觉得非常困难,但是事情往往没有想的那么难。我也常常因为害怕自己“做不好”而浪费很多时间在寻找“最完美的”开始方法上 --- 实际上,当一个人开始学习某一项技能的时候,大概率这个学习方法是不完美的。所以如果你也想开始面向面试刷题,请把它想成一款游戏 --- 先开始打了再说,打了之后再根据需求和网上的攻略调整自己打游戏的方式就能慢慢变成大神啦。换句话说,学会控制和对抗自己的情绪,时刻牢记自己的目标。在每次做什么事情的时候,我都会问自己,”做XXX对我上岸有用么?“没用,我就不做。比如恐慌、难过、害怕对我的目标没有帮助,我就尽可能的不去做这样的事情。

希望能帮到大家,最重要的就是~开~始~做~

这篇文章的原文是我给一个公众号写的稿子,本文有适当删改~

附:我很多朋友好像都不知道中国区力扣,国区力扣的题解真的很好。题解看多了之后会发现那几个常出现的高票大佬们解题思路都很好。

强烈推荐:

力扣加加的Lucifer,Lucifer yyds(微信公众号:力扣加加)

宫水三叶(竞赛出身,解题思路和approach写的非常好。我超喜欢她的分析和DP系列。微信公众号:宫水三叶)

笨猪爆破组(回溯和DP题里画的状态树非常帮助理解~,写JS和GO)

补充内容 (2021-07-30 12:29 +8:00):

啊这篇文章讨论的是面向面试刷题,但是面试准备不只有刷题,能通过面试的原因也绝对不只是因为刷了题XD。

补充内容 (2021-08-12 13:45 +08:00):

我上的bootcamp是App Academy,比较好的我听过的也有Hack Reactor。AA上课之后感想在这里

BootCamp AA 上课后体验总结 1point3acres.com

所有经历非常主观大家仅供参考

补充内容 (2021-08-13 20:08 +08:00):

刷题问题可以这个帖子问,bootcamp问题可以另一个bootcamp帖子问,以后方便大家检索。没有标准的主观问题,比如xxx难吗,xxx感受如何请别问;不聊“我焦虑怎么办”这种心理问题;谢谢大家…
61条回复
热度排序

发表回复