这是我参与8月更文挑战的第16天,活动详情查看:8月更文挑战
一年前,我还是一个算法小白,对各种算法概念一无所知,一年后,我已经能轻松应对算法面试,甚至一看到面试官要出算法题,就会非常的心安。
在这期间,我系统性地学习了算法,并且保持着高强度的练习,投入了大量的心血,leetcode上刷了500道题,同时也参加了很多场面试来检验自己,我从一遇到算法面试到害怕,到最后做到游刃有余,看到自己的蜕变,非常的欣慰,在此总结下自己学习算法的心路历程。
从0到100
我平时忙于工作,很少有时间去主动学习算法。缺少算法学习的环境,是学习算法的硬伤,于是我痛下血本,报名了极客大学的算法训练营,希望从中找到同行的小伙伴,营造学习环境,强迫自己去学好算法。
训练营的主讲老师覃超老师非常棒,我从他身上学到了很多,除了算法知识外,也包括工作、学习方法等等,受益匪浅。
学习算法的一个诀窍就是「五毒神掌」,要多练多刷,第一遍不会很正常,关键是要理解后,自己能做出来,一般一道题隔断时间做一次,做5次之后基本就记住了。
学习算法也要注意系统性。可以先学数据结构,从一维到二维,再学习算法思想,贪心回溯动态规划等等。
这段时间的做题感受,就是觉得自己很笨,什么都不会。这很正常,不能放弃,因为感到痛苦意味着已经走出了舒适区。
跟随训练营,从20年6月份到9月份,每周坚持练10道左右的题,我实现了算法题从0到100的突破。
100到200
结束了训练营,我已经养成了刷算法题的习惯,在未来的一段时间,每天会做一道新题,同时也会温习旧题。
从0到100很难,但是我从100到200就很容易,因为自己已经大致建立好了算法的知识体系,现在要做的,就是把逐个知识点都去攻克。
这段时间的做题感受,做过的题也做不出,很挫败。这很正常,因为很多题做的遍数不够多,还没有很深的理解,要多加练习。这段时期很关键,如果放弃就前功尽弃了。
于是从20年10月份到12月份,我完成了从100到200的突破。
200到300
21年为了跳槽,所以给自己加大了刷题力度,我仍然是按照知识点专题的做法,把某一类题目搞懂,如果不会,看完题解后,继续去找相似题去做。
这段时间的感受是,简单级别的题目基本都能做出来,中等题还是有难度,需要看题解。可以感受到之前的努力有了成效,我慢慢形成了自己的算法知识体系,并且开始热衷于分享题解。
从21年1月到3月,我完成了从200到300的突破。
300到400
因为找工作不顺利,算题面试老是由于紧张而写不出,所以我加大了刷题力度,每天都会安排自己做leetcode上的模拟面试。
这段时间压力比较大,也非常的焦虑,对自己提出了很高的要求。常常在做一道题的时候,就把与之相关的所有题型都复习一遍,并且一定要自己写出来,而不是似懂非懂。
这段时间的感受是,我的算法能力突飞猛进,因为有招聘的压力,我对算法面试这件事很上心。一些中等题目稍加思考后,也基本能做出来。
从21年4月到5月,我完成了从300到400的突破。
400到500
从2021年6月到8月,我完成了从400到500的突破。
这段时期刷题比较佛系,毕竟各种类型的题目都了然于心,重复做题边际效应递减,更多的是找一些面试中的真题来检验自己。
因为这时我的算法积累也非常多了,我也去参加了很多场面试,除非是困难题,简单和中等难度的题我基本都能写出来。
我面试目前写过的最难的题是「滑动窗口最大值」,这道题是困难题,我之前做过,有个大致思路,面试时稍微整理一下思路,也能立刻写出。回望几个月前的自己,可能会一看到是道困难题而大脑空白吧。
总结一下我的经验,leetcode刷题是真有效果,随着你刷题数目的增多,你会发现每到一个阶段,自己的实力都有了质的增长。
刷题时要掌握方法,要注重自己的知识体系建立,同时要注意举一反三,「五毒神掌」。
目前技术面试的考察项繁多,但算法应该是最基本也是最常见的一项考察了,学习算法永远不亏,祝大家都能拿到满意的offer!