为什么要学习数据结构和算法?
是不是觉得数据结构和算法,跟os、计网一样,属于脱离实际工作的屠龙术?
除了面试,其实这辈子也用不着?
尽管计算机专业同学在大学都学过这些课程,甚至很多培训机构也会培训,但很多程序员对数据结构和算法依旧一窍不通。绝大多数人只听说过数组、链表、快排这些最简单的数据结构和算法,稍微复杂一点的就完全没概念。
很多人说实际工作中根本用不到数据结构和算法。所以,就算不懂这块知识,只要Java API、开发框架用得熟练,照样可以把代码写得“飞”起来。
事实真的是这样吗?
想要通关大厂面试,数据结构和算法是开胃菜
BAT字节、Google、微软,面试都喜欢考算法、手写代码并运行。有些人虽然技术八股文不错,但每次去面试都会“跪”在算法上,很可惜。
那你可曾想过,为何这些大公司喜欢考察算法?
校招时,学生一般都没有实际项目经验,公司只能考察他们的基础知识是否牢固。
社招更不用说,越注重技术的公司,越会重点考察数据结构与算法这类基础知识。
因为相比短期能力,他们更看中候选人的长期潜力。
我不懂算法,照样找到了高薪大厂工作啊。我是不是就不用研究算法了?
要以发展的眼光看待,我们学任何知识都是为了解决实际问题,学习算法自然有用处。难道你真愿意一直做个crud boy?
可我整天工作就是crud 啊,哪里用到过算法?
诚然,大部分业务开发都是利用封装好的API堆砌、转译业务逻辑,几乎无需自行实现算法。
但不需要自己实现≠什么都不需要了解。
若不知道这些类库背后的原理,不懂得时间、空间复杂度分析,你如何能用好、用对它们?
存储某业务数据时,你如何知道应该用ArrayList,还是LinkedList?
调用某方法后,你如何评估代码的性能和资源消耗?
业务开发用到的各种框架、中间件和底层系统,如MySQL、Spring、MQ和Redis等。这些基础组件中,其实都内置了很多基础算法思想。
如Redis中,有序集合用什么数据结构实现?为什么要用跳表?为什么不用二叉树?
若能清晰这些底层原理,就能更好利用它们。即便出现问题,也方便定位。
实际工作中的算法应用到处可见,如何实时地统计业务接口的99%响应时间?
你可能想,每次查询时,从小到大排序所有的响应时间,若总共有1200个数据,那第1188个数据就是99%的响应时间。
每次用这个方法查询的话都要排序,效率太低。但若你知道“堆”数据结构,用两个堆即可高效解决。
现在开源的技术文章、架构、项目很多,照猫画虎做一套基础框架并不难。我就拿RPC框架举例。
不同人做出的RPC框架,架构设计思路其实都差不多,所实现的功能也相差无几。但就是有人做的框架,Bug很多、性能一般、扩展性也不好,只能在自己公司仅有的几个项目里面玩一下。
而有人的框架就能开源到GitHub,甚至被Apache收录。
为什么会有这么大差距?
编程高手竞争就在细节:算法是不是足够优化,数据存取的效率是不是足够高,内存是不是够节省等等。
所以细节决定成败!
对编程还有追求?不想被35优化?那就不要只会写只是能run的代码!
何为编程高手?不同人可能观点不同。但在我看来,性能好坏至少算一项关键指标。若你连代码时间复杂度、空间复杂度都会分析,怎么可能写出高性能代码?
我在小公司工作的呀,非互联网,用户量少,处理数据量也小,qps几乎0,开发不需要考虑那些性能问题,完成功能就下班了,用不用数据结构和算法,无足轻重。
那你就甘愿“十年如一日”重复 crud 了吗?
大家都知道这行35岁后容易被行业淘汰,原因其实就在此。有人写代码,从不考虑非功能性需求,只是完成功能,能run就行;做事情的时候,也从无长远规划,只顾眼前三分利。
这样即使十年业务积累,跟应届生一年积累没有本质区别。怎么不会被淘汰呢?
大公司里性能几乎是时刻都要考虑的。一个简单的ArrayList、Linked List的选择问题,就可能会产生成千上万倍的性能差别。
数据结构和算法的意义就彰显了。
数据结构和算法这个东西,如果你不去学,可能真的这辈子都用不到,也感受不到它的好。但一旦掌握,你就会常常被它的强大威力所折服。
之前你可能需要费很大劲儿来优化的代码,需要花很多心思来设计的架构,用了数据结构和算法之后,很容易就能解决。
总结
学习数据结构和算法,并非为了死记硬背几个知识点。而是为建立时间复杂度、空间复杂度意识,写出高质量代码,能够设计基础架构,提升编程技能,训练逻辑思维,积攒人生经验,以此获得工作回报,实现你的价值,完善你的人生。
掌握数据结构与算法,看待问题的深度,解决问题的角度就会完全不同。
为什么要学习数据结构和算法?相关推荐
- 数据结构和算法一定要背算法的代码嘛_我们为什么要学习数据结构和算法?
对于我们来说,数据结构和算法是那么熟悉,又是那么陌生.作为计科院的学生,大学里都接触过,但是进入社会以后,我们看起来很少会用到这个.这时候不仅会想到一件问题,学习数据结构和算法真的有用吗?不学习这个就 ...
- 入门篇001:为什么要学习数据结构与算法 by 王争(摘取对自己有用部分)
说明:内容摘自:<数据结构与算法之美> by:王争 选取自己所需部分内容. 1.不想一辈子只会基本的CRUD; 2.作为业务开发,我们会用到各种框架.中间件和底层系统,比如 Spring. ...
- 程序员为什么要学习数据结构与算法?
前言 数据结构Q与算法是程序员内功体现的重要标准之一,且数据结构也应用在各个方面, 业界更有程序-数据结构+算法这个等式存在. 各个中间件开发者,架构师Q他们都在努力的优化中间件.项目结构以及算法提高 ...
- 数据结构与算法学习-开篇
前言 数据结构和算法这门课一直是计算机专业最基础的一门课,大学时期掌握的不够好,毕业后长期写业务,也没有特别的花时间好好攻克一下,一直是自己的短板.这次在极客时间上订阅了两门数据结构和算法方面的专栏, ...
- 数据结构与算法笔记(一)—— 引入概念、时间复杂度
一.前沿 我们为什么要学习数据结构和算法? 我们举一个可能不太恰当的例子: 如果将最终写好运行的程序比作战场,我们码农便是指挥作战的将军,而我们所写的代码便是士兵和武器. 那么数据结构和算法是什么? ...
- Java数据结构和算法(一)——简介
本系列博客我们将学习数据结构和算法,为什么要学习数据结构和算法,这里我举个简单的例子. 编程好比是一辆汽车,而数据结构和算法是汽车内部的变速箱.一个开车的人不懂变速箱的原理也是能开车的,同理一个不懂数 ...
- JavaScript数据结构和算法
前言 在过去的几年中,得益于Node.js的兴起,JavaScript越来越广泛地用于服务器端编程.鉴于JavaScript语言已经走出了浏览器,程序员发现他们需要更多传统语言(比如C++和Java) ...
- 学习数据结构和算法前瞻
我并非计算机科班出身,以前只对C.java.Matlab.Python语言有粗略的了解,以前写代码的时候只会考虑功能能实现就行了,并不考虑性能方面的问题,对数据结构与算法从未学习过,更不了解什么时间复 ...
- 如何抓住重点,系统高效地学习数据结构与算法?
你是否曾跟我一样,因为看不懂数据结构和算法,而一度怀疑是自己太笨?实际上,很多人在第一次接触这门课时,都会有这种感觉,觉得数据结构和算法很抽象,晦涩难懂,宛如天书.正是这个原因,让很多初学者对这门课望 ...
- JavaScript数据结构和算法 1
前言 在过去的几年中,得益于Node.js的兴起,JavaScript越来越广泛地用于服务器端编程.鉴于JavaScript语言已经走出了浏览器,程序员发现他们需要更多传统语言(比如C++和Java) ...
最新文章
- java swing 文件选择,设置默认文件选择路径,桌面路径
- shell脚本中怎样同时执行多个.sql文件,并把结果写入文件中(转)
- Docker 操作命令 整理
- Oracle 19c 新特性:混合分区表Hybrid partitioned tables强体验
- mac os 开启FTP Server
- TensorFlow——Ubuntu系统上TensorFlow的安装教程
- 剑指Offer之数组中只出现一次的数字
- java通过JDBC驱动连接操作hive实例
- Java实现Excel中的Rate函数
- Bandizip安装教程
- 图片优化之Base64解决方案
- 【MOOS系统安装步骤】
- 数据结构第一节课感受
- 行人重识别的挑战 与 最新进展 (35页PPT整理)
- 把树莓派变身无线AP
- 小蓝和小绿机器人篇_小绿和小蓝机器人篇:很高兴认识你,你尚未认识我,做人真难啊...
- struts2文件上传类型限制 之 zip和rar文件类型
- java查找第k大的数字_查找数组中第k大的数
- 皕杰报表中的图表钻取
- java json上传文件_java实现文件上传