数据结构与算法真的那么重要么?_数据结构与算法重要吗_seemygo的博客-程序员宝宝

技术标签: Java  编程  数据结构与算法  

很多同学对数据结构与算法的第一印象,可能是觉得它复杂、深奥、难以理解。之所以会有这种观念,我认为主要是因为没有找到适合自己的学习方法及学习资料。其实学习任何知识点,只要找到对的学习方法和学习资料,都能做到攻克难点,牢牢掌握。

 

另外,同学们可能还有一个疑问:在平时的开发工作中,一个产品,从开发到上线,似乎都不会用到数据结构与算法,也就是说即使不懂数据结构与算法,也能出色地完成日常的工作任务,照样能拿到高薪。那我们为什么还要学习数据结构与算法呢?

 

其实,一个很重要的原因是为了应对面试,数据结构与算法,是很多名企面试的必考题。国内外一线的大型互联网公司,在面试的过程中,多少都会问到一些关于数据结构与算法的题目。而且规模越大的公司,就越注重数据结构与算法。甚至,现在很多中小型公司的面试题都会涉及到算法知识。这个我们其实不难理解,无论什么类型的公司,为了筛选出更优秀的人才,面试题的难度都会越来越高。

 

说到这,同学们可能会觉得很奇怪,平时工作中很少接触的数据结构与算法,为什么会经常出现在面试题中呢?这不是让人很难理解吗?甚至还有人会觉得这很不公平,会导致企业错失人才。比如有这样一个人,他拥有至少5年开发经验,技术实力、业务能力、学习能力都很强,公司安排的每项任务都能出色完成,但可能只是因为他不会数据结构与算法,就被大公司拒之门外,而事实上他的综合能力可能比一些大公司的人都要强。

 

这样的情况,其实不是没有,2015年,Homebrew的作者去google面试,但不幸的是他被google拒绝了。Homebrew大家应该都听说过,它是Mac平台的安装包管理工具,全世界大大小小互联网公司的程序员可能都在用这个工具。这足以说明Homebrew作者的技术实力了吧?可他还是被拒绝了,当时他发了条twiiter吐槽。

 

 

google回应:“我们90%的工程师都在使用你写的Homebrew工具,你却不能白板编程一个二叉树的翻转,所以请滚蛋吧”。不过后来,还是有很多硅谷的大公司抢着要他。

 

所以说,同学们的担心是有可能发生的,大公司面试着重考察数据结构与算法,确实可能会错失一些人才,那他们为什么还要这样做呢?

 

其实不管哪个公司,都想尽可能地招到更优秀的人才。但是在短短几个小时的面试过程中,想了解清楚一个人,太难了。所以很多大公司招聘的第一步,就是学历要求:本科、硕士、甚至是博士。因为从概率上讲,高学历出现优秀人才的几率会更大一点。举个例子:一个是毫无开发经验的计算机专业硕士,而另一个是拥有3年开发经验的大专生,很多大公司可能会选择招聘那位硕士。因为他们看重的是一个人的长期潜力,而技术是可以通过培训获得的,潜力却不是每一个人都拥有的。当然除了通过学历筛选人才,在面试时考察数据结构与算法,也是在短时间内考察一个人长期潜力的捷径。

 

因为数据结构与算法功底扎实的程序员,其技术实力、业务能力、自学能力大多都不会差。其次,如果面试题内容都是平时工作中常用的技术点,其实大家的答案都大同小异,而且还有很多人会靠背题来应付面试。而算法题因为其范围很大,可以尽可能地避免这种情况的发生,而且这种问题考验的更多的是一个人的编程功底和长期积累。所以很多大公司都会使用算法题来筛选人才。

 

总而言之,要想进入更大的公司,数据结构与算法是你必须要跨过去的坎。

 

一开始提到,可能在大家平时的开发过程中,不怎么用到数据结构与算法的知识。那是因为我们的很多开发任务,都可以直接用各种第三方框架来完成。然而,很多第三方框架内部都用到了大量的数据结构与算法的知识。如果你懂数据结构与算法,就可以更好地去读懂框架源码,体会作者的设计思想,也能让你更好地使用框架,把框架的价值发挥到最大。平时没用到数据结构与算法,也可能是因为自己目前开发的项目还太小。当开发大型项目,面对海量数据处理,或者要求性能的极致优化时,必然要用到数据结构与算法来优化程序。所以,很多时候,并不是数据结构与算法没有用,而可能是自己的境界还不够高。

 

另外,在计算机编程领域,数据结构与算法的应用是无处不在。比如图像视频处理、数据库、游戏开发、编译器、搜索引擎、AR、VR、人工智能、区块链等领域,都是以数据结构算法为基石。

 

扎实的数据结构与算法功底,能让我们站在更高的角度去思考代码、写出性能更优的程序,能让我们更快速地学习上手各种新技术(比如人工智能、区块链等),能让我们敲开更高级编程领域的大门。为什么有些人学新技术这么快?比如区块链、人工智能等,很可能就是因为别人数据结构与算法的功底更扎实。

 

Pascal之父Nicklaus Wirth曾经凭借一个公式获得了图灵奖(计算机领域的诺贝尔奖)。

  •  算法 + 数据结构 = 程序

     

 

 

由此可见数据结构与算法的重要性!

 

随着年龄的增长,无论是学习能力,还是体力都会有一定程度地下降。所以,我们更应该珍惜时间,不要在应该努力奋斗的年纪选择安逸,学习和积累都要趁早。如果你想在IT路上走得更远,站得更高,那就必须掌握数据结构与算法。更何况这真的是一种一次掌握,终生受益的技术。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/seemygo/article/details/88792095

智能推荐

hive:Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient_perfectzq的博客-程序员宝宝

异常情况: Exception in thread “main” java.lang.RuntimeException: org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.Sessi

DreamweaverCS6破解安装_始终在仰望大佬的博客-程序员宝宝

安装不是很难,粗略一写这里介绍的是Dreamweaver CS6的安装盒破解,亲测可用。  首先是Dreamweaver CS6的安装,安装包:点击下载安装包。 解压完成后,会自动运行安装程序   如果解压之后的安装过程意外终止了,可以进到之前解压指定的目录中,找到Set-up.exe,直接开始安装,而不用再重新解压一次了 4 可能会弹出...

互联网进军影视作品的软广告_wanghero的博客-程序员宝宝

 互联网进军影视作品的软广告(文:王英雄)     昨日和妻子一同去看了宁浩的新作《疯狂的赛车》。2006年的那部《疯狂的石头》可以说是我们俩最近几年最喜欢的电影了,自然对宁浩的作品非常期待,一直忙没时间看,昨天终于抽了个时间,用了两张移动的优惠卷看了这部电影。    看完这部片子,总的来说比我预想的稍微好一点点,依然是“石头”般的搞笑,依然是“石头”般的多线程,依然是“石头”

LeetCode 45. Jump Game II (贪心/bfs,dfs超时)_HuangHongkai_ 的博客-程序员宝宝

Given an array of non-negative integers, you are initially positioned at the first index of the array.Each element in the array represents your maximum jump length at that position.Your goal is to r...

HDU 1829 - A Bug‘s Life_99度灰的博客-程序员宝宝

题目大意:有n只虫子,m对情侣,问其中是否有同性恋,一般虫子异性恋。解题思路:与食物链那题有些相似,但又比那题简单许多。因为只有两种关系了,0为同性,1为异性,所以查找和合并时的关系变更尝试推一下就出来了。具体的详讲看POJ-1182ac代码:#include #include using namespace std;struct node{ int pre; int

ubuntu下安装flask-mysqldb问题记录_litexy的博客-程序员宝宝

python中使用mysql的包有pymysql和mysqldb,同样地,flask也为其提供了扩展:flask-mysql(貌似基于pymysql),flask-mysqldb,但flask-mysql只支持python2,而flask-mysqldb同时兼容python2和python3。在虚拟环境中安装flask-mysqldb:pip install flask-mysqldb出现如...

随便推点

基于 Docker 环境及 Calico 网络的 Consul + Consul Template + Registrator + nginx 容器服务注册和发现 转载_ junior1206的博客-程序员宝宝

由于公司的基础环境为 Docker,有项目需要做 ZooKeeper 或者 Spring Cloud 的服务注册,服务注册的 IP 及端口均为 Docker 内部提供,所以需要搭建 Calico 网路来实现宿主机访问。另测试环境的服务均为 IP + 端口的方式访问,一旦更换宿主机则导致无法调用的情况,所以需要配置域名来访问,而测试环境发布频繁,所以需要服务能自动注册及发现来生成域名。介绍...

res里面的drawable(ldpi、mdpi、hd… 分类: An..._weixin_30292843的博客-程序员宝宝

(1)drawable-hdpi里面存放高分辨率的图片,如WVGA (480x800),FWVGA (480x854)  (2)drawable-mdpi里面存放中等分辨率的图片,如HVGA (320x480)  (3)drawable-ldpi里面存放低分辨率的图片,如QVGA (240x320)ldpi:240x320mdpi:320x480hdpi:480...

通用型之输入输出---GPIO__LiuChunJiang刘春江的博客-程序员宝宝

GPIO就是我们最常见的一种外设了。它就是STM32上的一个具有输入输出功能的引脚。这部分我们就学习一下GPIO的一些寄存器从而了解GPIO的功能和作用。--------------------------------------------------------分割线-----------------------------------------------------------首先介绍的是IO口的输入输出模式!输入模式-输入浮空(GPIO_Mode_IN_FLOATING)-输入上拉(G

springMVC生成图片验证码_蜗牛在爬的博客-程序员宝宝

以下是springMVC生成图片验证码相关代码,请参考:controller层如下:/**     * 生成验证码     * @param request     * @param response     * @return     */    @RequestMapping(value = "/generateCheckCode", method

HDFS原理深入_It.explorer的博客-程序员宝宝

一、HDFS概述数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,因此迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统 。是一种允许文件通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和存储空间。通透性。让实际上是通过网络来访问文件的动作,由程序与用户看来,就像是访问本地的磁盘一般。容错。即使系统中有某些节点宕机,整体来说系统仍然可以持...

bzoj 1176: [Balkan2007]Mokia(cdq分治)_clover_hxy的博客-程序员宝宝

1176: [Balkan2007]MokiaTime Limit: 30 Sec  Memory Limit: 162 MBSubmit: 1850  Solved: 818[Submit][Status][Discuss]Description维护一个W*W的矩阵,初始值均为S.每次操作可以增加某格子的权值,或询问某子矩阵的总权值.修改操作数MInput

推荐文章

热门文章

相关标签