数据结构与算法(01):为什么要学习数据结构与算法

原文:数据结构与算法(01):为什么要学习数据结构与算法

前言


集中学习数据结构与算法有一段时间,计划花一段时间专门记录一下学习笔记。这篇文章想分享下自己在学习数据结构预算法前的初衷,为什么要学习数据结构预算法?我要说明一下,我也是在学习阶段,有表述错误的地方希望看到文章的朋友可以指出来。

是因为那次,我深刻意识到了数据结构与算法的重要性。算法同事对我数据结构做出微小的调整+简单的算法实现,结果相比我之前的实现方式,在性能上高出数百倍,听着一定觉得很夸张,到现在我还记得当时我惊讶的状态。那一刻深刻意识到它的重要性。

为什么要学习数据结构预算法


可能很多同学会认为数据结构与算法,跟操作系统、计算机网络一样,是脱离实际工作的知识,可能出了面试,这辈子也用不着?

尽管计算机专业的同学在大学期间都学习多这门课程,甚至很多培训机构也会培训这方面的知识,但是据我了解,有很多像我这样的程序员对数据结构和算法依旧一窍不通。还有一些人也只是听说过数组、链表、快排这些最基本的数据结构和算法,稍微复杂一点的就完全没概念了。

当然,也有很多人说,自己实际工作中根本用不到数据结构和算法。所以,就算不懂这块知识,只要Java API、开发框架用的熟练,照样可以吧代码写的“飞”起。事实真的这样吗?

今天我来谈谈自己的想法,或者说学习过一段时间之后的一些心得。

想要通关大肠面试,千万别让数据结构和算法拖了后腿

听说很多大公司,比如BAT、滴滴、美团、小米、Vivo等等,面试的时候都喜欢考算法,让人现场写代码。很多人虽然技术不错,但每次面试都会“跪”在算法上,很是可惜。那我们思考一下,为什么这些大公司都喜欢考算法呢?

还记得校招的时候,参加面试的时候,我们基本上都没啥项目经验,公司只能考察我们的基础知识是否牢固。社招更不用说了,越是厉害的公司,越是注重考察数据结构与算法这类基础知识。我想是因为相比短期能力,他们更看重我们应聘人的长期潜力。

可能你会说,我不懂数据结构与算法,照样找到了好工作啊。那我是不是就不用学习数据结构与算法呢?当然不是了,我们学习任何知识都是为了“用”的,是为了解决实际工作问题的,学习数据结构和算法自然也不例外。

不愿做一辈子CRID

如果你和我一样只是一名业务开发工程师,可能会觉得每天主要做的就是数据库CRID,哪里用的到数据结构与算法。是的,对于大部分的业务开发来说,我们平时可能更多的是利用已经封装好的接口、类库来堆砌、翻译业务逻辑,很少需要自己实现数据结构和算法。但是,不需要自己实现并不代表我们什么都不需要了解。

如果不知道这些类库背后的原理,不懂得时间、空间复杂度分析,我们如何用好、用对他们?存储某个业务数据的时候后,如何知道应该用ArrayList还是LinkedList?调用了某个函数之后,又改如何评估代码的性能和资源的消耗呢?

作为业务开发,我们会用到各种框架、中间件和底层系统,比如Spring、RPC框架、消息中间件、Redis等等。在这些基础框架中,一般都揉和了很多基础数据结构和算法的设计思想。

比如,我们常用的Key—Value数据库Redis中,里面的有序集合是什么数据结构来实现的呢?为什么要用跳表来实现呢?为什么不用二叉树呢?

如果我们能弄明白这些底层原理,就能更好的使用他们。即便出现问题,也能够快速的定位。因此,掌握数据结构和算法,不管对于阅读框架源码,还是理解其背后的设计思想,也都是非常有用的。

在平时的工作中,数据结构和算法的应用到处可见。再来举个很常见的例子:如何实时地统计业务接口的99%响应时间?可能你最先想到的是每次查询时,从小到大排序所有的限行时间,如果总共有100个数据,那第99个便是99%的相应时间。很显然,每次用这个方法查询的话都要排序,效率是非常低下的。但是,如果知道“堆”这个数据结构的话,用连个堆可以非常高效地解决这个问题。

对于基础结构研发工程师,写出开源水平的架构才是他们的目标

现在互联网上的技术文章、架构分享、开源项目满天飞,照猫画虎做一套基础架构框架并不难。就拿RPC框架来看。

不同的公司、不同的人做出的RPC框架,架构设计思路都差不多,最后实现的功能也差不多。但是有的人做出来的框架,Bug很多、性能一般、扩展性也不好,只能在自己公司仅有的几个项目里面用一下。而有的人做的框架可以开源道GitHub上给更多的人用,甚至被Apache收录,就好比阿里的Dubbo RPC框架。为什么会有这么大的差距呢?

我认为,那些高手之间的竞争其实就在细节。这些细节包含:你用的算法是不是够优化,数据存取的效率是不是够高,内存是不是够节省等等。这些积累起来,决定了一个框架是不是优秀。所以,如果你和我一样还不懂数据结构和算法,对大O复杂度分析还不是很熟练,不知道怎么分析代码的时间复杂度和空间复杂度,这个很是说不过去,也应该赶紧补一补。

对编程有追求,不想被行业淘汰

什么是编程能力强,是代码的可读性好、健壮?还是扩展性好?我觉得没办法给出一个明确的标准,也列不全,因为可以衡量的指标是在是太多了。但是,在我看来,性能好坏起码是其中一个非常重要的评判标准。但是,如果我们连代码的时间复杂度、空间复杂度都不知道怎么分析,又怎么能写出高性能的代码呢?

可能有人和我之前想法差不多,我现在的业务,用户量很少,需要处理的数据量也很少,开发中不需要考虑那么多性能的问题,完成功能是最主要的,用什么数据结构和算法,差别不是很大。但是当我接触到千万级数据处理,甚至亿级数据的时候我傻眼了。内存溢出等问题接踵而来的时候,我慌了,当时我完全拿他没办法,因为我的知识储备有限。我记得很清楚,当时找了一个专门做算法的同事,请求他的支援,他在了解了我的需求后给出了一套自己的算法实现方案,我试过了,结果让我很难受,问题解决了,而且结果完全超出我的预期,甚至是惊讶,但我还是很难过,难过的是我自己之前忽视数据结构这块。他给的方案其实都是我熟悉的几种常用数据结构,只是在先后顺序上做了调整,和算法思路上给出了一点提示,结果性能好不夸张的说,高出我之前的百倍。也是那次事情时候,我才下定决心要集中的学习数据结构与算法,并且要高度重视它。

其实做业务开发的同学几年下来都会有这样的感觉,一样事情做久了,一个公司待久了,会发现我们每天做的都是重复的事情。可能让你写一份自己的简历,都可以写七八个项目,但明显能看的出来项目之间的技术架构、实现技术方案都大同小异,或者说我们的能力并没有跟着项目经验的增加而出现大的提升。所以我觉得数据结构与算法这个东西我们不去学,可能真的一辈子都哟弄不到,也感受不到它的好,它的强大之处。但是一旦掌握,你就会常常被他的强大威力所折服。

内容总结


其实写这篇文章,单纯为了分享一下自己的想法,希望对跟我一样的程序员们对数据结构与算法的认识能够引起高度重视。我们的目的是建立时间复杂度、空间复杂度意识,写出高质量的代码,能够设计基础加固,提成编程技能,训练逻辑思维,积攒人生经验,以此获得工作回报,实现我们的价值。

更多个人文章:RelaxHeart网 - Tec博客

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,383评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,522评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,852评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,621评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,741评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,929评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,076评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,803评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,265评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,582评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,716评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,395评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,039评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,027评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,488评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,612评论 2 350