是不是觉得数据结构和算法,跟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的选择问题,就可能会产生成千上万倍的性能差别。
数据结构和算法的意义就彰显了。

数据结构和算法这个东西,如果你不去学,可能真的这辈子都用不到,也感受不到它的好。但一旦掌握,你就会常常被它的强大威力所折服。
之前你可能需要费很大劲儿来优化的代码,需要花很多心思来设计的架构,用了数据结构和算法之后,很容易就能解决。

总结

学习数据结构和算法,并非为了死记硬背几个知识点。而是为建立时间复杂度、空间复杂度意识,写出高质量代码,能够设计基础架构,提升编程技能,训练逻辑思维,积攒人生经验,以此获得工作回报,实现你的价值,完善你的人生。

掌握数据结构与算法,看待问题的深度,解决问题的角度就会完全不同。

为什么要学习数据结构和算法?相关推荐

  1. 数据结构和算法一定要背算法的代码嘛_我们为什么要学习数据结构和算法?

    对于我们来说,数据结构和算法是那么熟悉,又是那么陌生.作为计科院的学生,大学里都接触过,但是进入社会以后,我们看起来很少会用到这个.这时候不仅会想到一件问题,学习数据结构和算法真的有用吗?不学习这个就 ...

  2. 入门篇001:为什么要学习数据结构与算法 by 王争(摘取对自己有用部分)

    说明:内容摘自:<数据结构与算法之美> by:王争 选取自己所需部分内容. 1.不想一辈子只会基本的CRUD; 2.作为业务开发,我们会用到各种框架.中间件和底层系统,比如 Spring. ...

  3. 程序员为什么要学习数据结构与算法?

    前言 数据结构Q与算法是程序员内功体现的重要标准之一,且数据结构也应用在各个方面, 业界更有程序-数据结构+算法这个等式存在. 各个中间件开发者,架构师Q他们都在努力的优化中间件.项目结构以及算法提高 ...

  4. 数据结构与算法学习-开篇

    前言 数据结构和算法这门课一直是计算机专业最基础的一门课,大学时期掌握的不够好,毕业后长期写业务,也没有特别的花时间好好攻克一下,一直是自己的短板.这次在极客时间上订阅了两门数据结构和算法方面的专栏, ...

  5. 数据结构与算法笔记(一)—— 引入概念、时间复杂度

    一.前沿 我们为什么要学习数据结构和算法? 我们举一个可能不太恰当的例子: 如果将最终写好运行的程序比作战场,我们码农便是指挥作战的将军,而我们所写的代码便是士兵和武器. 那么数据结构和算法是什么? ...

  6. Java数据结构和算法(一)——简介

    本系列博客我们将学习数据结构和算法,为什么要学习数据结构和算法,这里我举个简单的例子. 编程好比是一辆汽车,而数据结构和算法是汽车内部的变速箱.一个开车的人不懂变速箱的原理也是能开车的,同理一个不懂数 ...

  7. JavaScript数据结构和算法

    前言 在过去的几年中,得益于Node.js的兴起,JavaScript越来越广泛地用于服务器端编程.鉴于JavaScript语言已经走出了浏览器,程序员发现他们需要更多传统语言(比如C++和Java) ...

  8. 学习数据结构和算法前瞻

    我并非计算机科班出身,以前只对C.java.Matlab.Python语言有粗略的了解,以前写代码的时候只会考虑功能能实现就行了,并不考虑性能方面的问题,对数据结构与算法从未学习过,更不了解什么时间复 ...

  9. 如何抓住重点,系统高效地学习数据结构与算法?

    你是否曾跟我一样,因为看不懂数据结构和算法,而一度怀疑是自己太笨?实际上,很多人在第一次接触这门课时,都会有这种感觉,觉得数据结构和算法很抽象,晦涩难懂,宛如天书.正是这个原因,让很多初学者对这门课望 ...

  10. JavaScript数据结构和算法 1

    前言 在过去的几年中,得益于Node.js的兴起,JavaScript越来越广泛地用于服务器端编程.鉴于JavaScript语言已经走出了浏览器,程序员发现他们需要更多传统语言(比如C++和Java) ...

最新文章

  1. java swing 文件选择,设置默认文件选择路径,桌面路径
  2. shell脚本中怎样同时执行多个.sql文件,并把结果写入文件中(转)
  3. Docker 操作命令 整理
  4. Oracle 19c 新特性:混合分区表Hybrid partitioned tables强体验
  5. mac os 开启FTP Server
  6. TensorFlow——Ubuntu系统上TensorFlow的安装教程
  7. 剑指Offer之数组中只出现一次的数字
  8. java通过JDBC驱动连接操作hive实例
  9. Java实现Excel中的Rate函数
  10. Bandizip安装教程
  11. 图片优化之Base64解决方案
  12. 【MOOS系统安装步骤】
  13. 数据结构第一节课感受
  14. 行人重识别的挑战 与 最新进展 (35页PPT整理)
  15. 把树莓派变身无线AP
  16. 小蓝和小绿机器人篇_小绿和小蓝机器人篇:很高兴认识你,你尚未认识我,做人真难啊...
  17. struts2文件上传类型限制 之 zip和rar文件类型
  18. java查找第k大的数字_查找数组中第k大的数
  19. 皕杰报表中的图表钻取
  20. java json上传文件_java实现文件上传

热门文章

  1. 科目三考试技巧全总结
  2. 常见MFC UI界面库
  3. java 计算器 正负号转换_【计算器正负号】一个小程序,有点问题
  4. ajax die,check_ajax_referer()
  5. MD5以及SHA加密不在安全的分析
  6. Redis Gossip广播通信 1.gossip原理概述
  7. [渝粤教育] 西南科技大学 语言学概论(英语) 在线考试复习资料
  8. office365彻底卸载教程
  9. 写了一个测试体质的工具,其实也可以用于算命。
  10. 使用canvas压缩图片大小