大家好,我是吴师兄,不知不觉的从 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 的评论区,人才辈出,骚话不断,题解区更是藏龙卧虎,值得一看。
好啦,以上就是我的分享,感谢你的阅读:)
最后,小编想说:我是一名python开发工程师,整理了一套最新的python系统学习教程,想要这些资料的可以关注私信小编“01”即可(免费分享哦)希望能对你有所帮助.