文档章节

数据结构算法有用吗?

做人当本然
 做人当本然
发布于 2017/05/09 10:48
字数 1024
阅读 4
收藏 0

本文转自「开发者圆桌」一个10年老猿原创文章传播开发经验,尤其适合初学者或刚入职场前几年程序猿的微信公众号。

数据结构算法有什么用?

 

当你用着Java里面的集合类很爽的时候,你有没有想过,怎么ArrayList就像一个无限扩充的数组,也好像链表之类的。好用吗?好用,这就是数据结构的用处,只不过你在不知不觉中使用了。

 

校招会发现大公司考的就是这类的题目,刚开始不会考你Java的线程,集合,多态什么的特性,考的就是你的基础,你的这些基础扎实,学其他不是问题。

 

每种数据结构有自己的优点和缺点,想想如果Google的数据用的是数组的存储,我们还能方便地查询到所需要的数据吗。而算法,在这么多的数据中如何做到最快的插入,查找,删除,也是在追求更快。

 

对待数据结构算法的态度

 

如果说 Java 是自动档轿车,C就是手动档吉普。数据结构呢?是变速箱的工作原理。你完全可以不知道变速箱怎样工作,就把自动档的车子从 A 开到 B,而且未必就比懂得的人慢。写程序这件事,和开车一样,经验可以起到很大作用,但如果你不知道底层是怎么工作的,就永远只能开车,既不会修车,也不能造车。如果你对这两件事都不感兴趣也就罢了,数据结构懂得用就好。但若你此生在编程领域还有点更高的追求,数据结构是绕不开的课题。

 

Java 替你做了太多事情,那么多动不动还支持范型的集合类,加上垃圾收集,会让你觉得编程很容易。但你有没有想过,那些集合类是怎么来的,以及它存在的意义是什么?最粗浅的,比如 ArrayList 这个类,你想过它的存在是多么大的福利吗——一个可以随机访问、自动增加容量的数组,这种东西C是没有的,要自己实现。但是,具体怎么实现呢?如果你对这种问题感兴趣,那数据结构是一定要看的。

 

甚至,面向对象编程范式本身,就是个数据结构问题:怎么才能把数据和操作数据的方法封装到一起,来造出 class / prototype 这种东西?

 

此外,很重要的一点是,数据结构也是通向各种实用算法的基石,所以学习数据结构都是提升内力的事情。

 

符合自身职业规划

 

这里辩证分析一下,并不是所有搞程序的都要钻研数据结构和算法,而是要根据自身的职业规划和兴趣来。在之前的文章中也提到过什么是真正的编程能力,整体来说分两类:一类是理论:算法,数据结构,复杂度,机器学习,模式识别,等等等。一类是系统:操作系统,网络系统,分布式系统,存储系统,游戏引擎,等等等。

 

第一类理论走的是深度,是在追问在给定的计算能力约束下如何把一个问题解决得更快更好。而第二类系统走的是广度,是在追问对于一个现实的需求如何在众多的技术中设计出最多快好省的技术组合。

 

这两类能力是相互依存的,不可或缺的,在自身职业规划中有所偏重是可以的,但是两类能力必须要有一定的了解和积累。

 

扩展阅读

 

什么才是真正的编程能力?

为什么看起来简单的服务,却需要大量顶尖高手来开发?

© 著作权归作者所有

做人当本然
粉丝 0
博文 11
码字总数 12300
作品 0
东城
高级程序员
私信 提问
【译】Swift算法俱乐部-为什么要学习算法与数据结构?

本文是对 Swift Algorithm Club 翻译的一篇文章。 Swift Algorithm Club是 raywenderlich.com网站出品的用Swift实现算法和数据结构的开源项目,目前在GitHub上有18000+⭐️,我初略统计了一下...

Andy_Ron
2018/09/16
0
0
如何有效地写算法题

原文出处:侯振宇 这篇文章最早发在我团队的文档中。我的团队鼓励每个同学都在业余时间多做算法题,特别是新人。个人认为在编程能力的提升上比做 side project 更有用,对职业发展也是如此。...

侯振宇
2018/01/15
0
0
如何有效地做算法题

这篇文章最早发在我团队的文档中。我的团队鼓励每个同学都在业余时间多做算法题,特别是新人。个人认为在编程能力的提升上比做 side project 更有用,对职业发展也是如此。当然出于兴趣做的 ...

侯振宇
2018/01/11
0
0
Java数据结构与算法(第一章综述)

数据结构和算法能起到什么作用? 数据结构是对在计算机内存中(有时在磁盘中)的数据的一种安排。数据结果包括数组、链表、栈、二叉树、哈希表等等。算法对这些结构中的数据进行各种处理,例...

小风89
2015/10/21
146
0
Dojo扩展--DojoX

DojoX 是 Dojo 主功能的一个扩展区,可以说是新功能和新想法孵化器。在这里,可以找到很多最新奇的功能组件。 目前 DojoX 项目主要扩展了数据结构与算法、数据处理与通信、实用工具、图形 AP...

匿名
2009/12/02
2.9K
0

没有更多内容

加载失败,请刷新页面

加载更多

Jenkins系列_插件安装及报错处理

进入Jenkins之后我们可以进行插件的安装,插件管理位于以下模块: 发现上面报了一堆错误,是因为插件的依赖没有安装好,那么这一节,就先把这些错误解决掉吧。解决完成后,也就基本会使用插件...

shzwork
今天
2
0
mysql mysql的所有查询语句和聚合函数(整理一下,忘记了可以随时看看)

查询所有字段 select * from 表名; 查询自定字段 select 字段名 from 表名; 查询指定数据 select * from 表名 where 条件; 带关键字IN的查询 select * from 表名 where 条件 [not] in(元素...

edison_kwok
昨天
9
0
解决多线程并行加载缓存问题(利用guava实现)

依赖 com.google.guava:guava:20.0 import com.google.common.cache.Cache;import com.google.common.cache.CacheBuilder;import java.util.concurrent.ExecutionException;import j......

暗中观察
昨天
3
0
利用VisualVM 内存查看

准备工作,建几个测试类。等下就是要查看这几个类里面的属性 package visualvm;public class MultiObject { private String str; private int i; MultiObject(String str...

冷基
昨天
3
0
组装一台工作游戏两用机

一、配置清单如下: 分类 项目 价格(元) 主板 华硕(ASUS)TUF Z370-PLUS GAMING II 电竞特工 Z370二代 支持9代CPU 1049 CPU 英特尔(Intel) i7 8700K 酷睿六核 盒装CPU处理器 2640 风扇 九...

mbzhong
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部