大家好,我是吴师兄,不知不觉的从 16 年接触算法开始到现在已经过去四年了,今天分享一下我学算法的经历,希望对学算法的你有帮助。

学算法的那些年,吴师兄接触的网站、软件、视频、书籍大揭秘

一、为什么学算法

首先,我们得承认,算法在工作中不是必须的

那为什么还要学算法呢?

这个问题真的是仁者见仁智者见智,有的人想提高技术水平,研究源码时发现得掌握相应的数据结构与算法才行,比如  Redis 里面的跳表、 Linux 内核文件系统里面的红黑树;有的人认为学好算法能改善思考问题的方式,有意的训练编程的思想。

而我的想法很简单粗暴:为了跳槽涨工资

我是非科班出身的程序员,误打误撞的进入了互联网行业,而作为一名初级程序员,只要掌握了 Ctrl + C 和 Ctrl + V 就能处理 90% 的工作,数据结构与算法在工作中基本上没用到,即使平时看源码的时候也不会去深究为什么会这样设计。

日子就这样简单枯燥的过去了,直到一年半后我决定跳槽。。。

16 年的时候视频方向比较火,所以投了 Bigo 的简历,没想到一去面试就给我三道算法题,依稀记得是把字符串转换为整数、合并有序数组、动态规划题,现在想来一点都不难,当时却是一脸懵逼,相当尴尬。

那个时候我才知道,哦,程序员原来还要学算法。

二、怎么准备算法面试

简单起来就三句话:边看书(视频),边敲代码,边做题练习。

这三个过程中都需要去思考,多问为什么,这样在面试过程中才能表现的更好。

比如面试官问你如何对一组数据进行排序,那他可能希望你对这组数据有着更全面的思考:是否包含大量重复元素?取值范围是否有限?是否近乎有序?

正如前往所言,数据的不同特点对应着不同的算法

大量重复元素意味着可以使用三路快排

取值范围有限可以考虑使用计数排序。

插入排序在近乎有序的情况下性能最佳。

推荐阅读:

https://coding.imooc.com/class/82.html

三、我用过的那些算法网站

1、LeetCode

英文网址:https://leetcode.com/
中文网址:https://leetcode-cn.com/

难度从 Easy、Medium 至 Hard 都有,目前来看挺多大厂面试官喜欢从中挑选题目。

2、牛客网

https://ac.nowcoder.com/acm/home

讨论区:

https://www.nowcoder.com/discuss

牛客网提供了众多的企业校招真题供大家练习,另外还有很多很好的题库供大家在线编程使用,特别推荐《剑指offer》题库,额外推荐他们的讨论区,包含了各大互联网大厂的面试经验,值得你提前学习参考。

3、Data Structure Visualization

https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

一个数据可视化和算法可视化的网站,用它可以生成各种各样的数据结构,模拟它们添加和删除的过程,而且还可以用它来演示算法的执行过程。

4、VisuAlgo

https://visualgo.net/zh

一个动态可视化网站!

学算法的那些年,吴师兄接触的网站、软件、视频、书籍大揭秘

堆的学习过程有时候挺难理解的,在这个网站上演示一下元素的各种操作过程,会带来一些更直观的印象。

学算法的那些年,吴师兄接触的网站、软件、视频、书籍大揭秘

四、书籍 & 视频  & 专栏

市面上有许许多多的书籍、视频、专栏,很多人都在纠结:我应该选择书籍、视频还是专栏进行学习呢?哪本算法书籍比较好呢?哪些视频最符合我的情况呢?那些专栏是不是割韭菜?

事实上,无论书籍、视频还是专栏,里面的内容基本上都是这些。

  • 复杂度分析

  • 基本算法思想

  • 排序算法

  • 搜索

  • 查找

  • 字符串匹配

  • 线性表

  • 散列表

不用纠结,你只要踏踏实实的把任何一本书籍或者一套视频或者一个专栏看完,你的算法基本上就入门了,剩下的无非就是查缺补漏和练习。

如果你还是纠结,那我可以给出几个小参考给你。

如果你通勤时间比较久(在一个小时左右),那可以考虑使用 2 倍速 看视频或者听音频,一方面可以 ”自我感动“:我今天在努力学习,另一方面也可以更好进入工作的状态。

注意:我在这里使用「自我感动」一词并非贬义,而是褒义;一般情况下,我们在等地铁或者公交的时候,无非在刷朋友圈、微博,或者看视频、抖音,想到自己平时在做这些事情,现在却在学习,怎能不感到一番。换句话说觉得自己在努力学习有什么不好?

如果你每天有完整的一大段时间,那可以挑选一本薄一点的算法书籍,仔细看看,将课后的练习题做一做。

《算法导论》不推荐初学者看。这本书是本神书,但是这本书的门槛比较高,需要有一定数学基础和算法基础的人去研究,如果你没有一定的基础或者对算法狂热的学习兴趣,你很难啃下去,最终丧失学算法的动力。

Ps:给需要买书的同学提供一个当当优惠码,可以花160买400的书

优惠码:B8HVHA

如果你上班有划水时间,那可以挑选一个专栏去学习,编译代码期间、调试环境过程划一划专栏的章节,那也挺好的。

目前极客、拉勾、掘金、GitChat 都有相应的专栏。

五、软件

软件的话推荐两个,一个叫 算法动画图解 ,一个叫 LeetCode

学算法的那些年,吴师兄接触的网站、软件、视频、书籍大揭秘
学算法的那些年,吴师兄接触的网站、软件、视频、书籍大揭秘

LeetCode 的评论区,人才辈出,骚话不断,题解区更是藏龙卧虎,值得一看。

学算法的那些年,吴师兄接触的网站、软件、视频、书籍大揭秘
学算法的那些年,吴师兄接触的网站、软件、视频、书籍大揭秘

好啦,以上就是我的分享,感谢你的阅读:)