数据结构与算法真的那么重要么?-程序员宅基地

技术标签: 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

智能推荐

计算两个经纬度点之间的距离_getdistance求经纬度之间的距离-程序员宅基地

文章浏览阅读1.2k次。计算经纬度点之间距离的算法 getDistance(lat1, lng1, lat2, lng2) { const radLat1 = lat1 * Math.PI / 180.0; const radLat2 = lat2 * Math.PI / 180.0; const a = radLat1 - radLat2; con..._getdistance求经纬度之间的距离

Unity + Grpc + protobuf + C# 使用流程详解_unity grpc-程序员宅基地

文章浏览阅读3.7k次,点赞11次,收藏30次。最近公司的一个unity项目要把通信方式从Photon替换成grpc,正好系统学一下grpc,以下是我的学习心得。本篇博客系统详细地介绍了unity使用grpc通信的全部要点,希望可以帮助到大家。奥利给!详解目录一、本篇博客知识点简介二、资源及工具的下载地址1、protocolBuffer各个版本2、GRPC3、grpc_unity_package.2.27.0-dev4、.NET Core SDK 2.1及以上三、C#使用Grpc方法流程1、新建项目2、定义服务3、使用GRPC.Tools自动生成.c_unity grpc

Keil出现无法生成.hex文件,经检查,发现是MULTIPLE PUBLIC DEFINITIONS。_keil生成不了hex文件的原因multilple-程序员宅基地

文章浏览阅读1.3w次,点赞4次,收藏6次。Keil出现无法生成.hex文件,经检查,发现是MULTIPLE PUBLIC DEFINITIONS。 实际并不应该出现这种问题。 回顾新建项目时在选择单片机型号STC12C5A60S2后,在CPU栏没有选择默认,而是选择了 Use Extended Linker(LX51) instead of BL51 和 Use Extended Assembler(AX51) instead of ..._keil生成不了hex文件的原因multilple

hibernate 的dialect(方言)配置_hibernate.dialect配置-程序员宅基地

文章浏览阅读4.2k次。转自:https://blog.csdn.net/baidu_40487407/article/details/93042568RDBMS方言RDBMSDialectDB2org.hibernate.dialect.DB2DialectDB2 AS/400org.hibernate.dialect.DB2400DialectDB2 OS390org.hibern..._hibernate.dialect配置

Linux---wifi驱动移植及调试(SSV6x5x)_linux wifi驱动-程序员宅基地

文章浏览阅读4.4k次,点赞2次,收藏21次。南方硅谷ssv6x5x驱动移植_linux wifi驱动

Win10系统怎么使用U盘重装(图文并茂)_windows10下载u盘安装-程序员宅基地

文章浏览阅读6k次,点赞6次,收藏56次。本教程一共分为了10个步骤,每一个步骤都有图片,相对来说非常详细了,欢迎大家讨论与学习!_windows10下载u盘安装

随便推点

记录一次kafka内存溢出,消费慢_kafka消费导致内存泄露-程序员宅基地

文章浏览阅读1k次。记录一次kafka内存溢出,消费慢_kafka消费导致内存泄露

前端学习week9-程序员宅基地

文章浏览阅读933次,点赞12次,收藏29次。数据存储在用户浏览器中设置、读取方便、甚至页面刷新不丢失数据容量较大,sessionStorage和localStorage约5M左右正则表达式是用于匹配字符串中正负组合的模式。在JavaScript中,正则表达式也是对象,通常用来查找、替换哪些符合正则表达式的文本作用:表单验证、过滤敏感词、字符串中提取我们想要的部分const 变量名 = /表达式/其中/ /是正则表达式字面量基于VueCli自定义创建项目架子安装脚手架创建项目。

解决syszuxpinyin重复点击lineEdit无法弹出输入法界面和无法删除原有内容问题_qlineedit输入中文无法删除-程序员宅基地

文章浏览阅读2.1k次。解决方法均来源于论坛,自己把它给整理一下1,因为自己做的界面用到了lineedit,但是发现第一次点击lineedit获得焦点就可以弹出输入法界面,但是再重复点击的时候就不能弹出来了,必须重新获得焦点,于是通过重载重载了QLineEdit的mousePressEvent在mousePressEvent加上一个自定义的信号 emit clicked()重载代码如下:mylineedi_qlineedit输入中文无法删除

jeb 下载-程序员宅基地

文章浏览阅读1k次。jeb-1.5.201408040(full)_keygen_by_scz(20150725) http://scz.617.cn/ 修改jeb_wincon.bat 中java home 变量,然后就可以启动 注册机 java kegen_jeb下载 csdn

python绿色参数_Python进阶三部曲之IO操作-程序员宅基地

文章浏览阅读60次。IO编程文件读写打开文件open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True) 具体需要查看API,这里只介绍几个常用的方法。open函数的文件名是必传参数,返回一个文件对象#打开一个文件。f = open('read.txt', 'r')open函数的mode参数:值..._python程序里面传进去的参数是绿色

高通平台8953 Linux DTS(Device Tree Source)设备树详解之一(背景基础知识篇)_高通提取dtb-程序员宅基地

文章浏览阅读5.8k次,点赞3次,收藏61次。本系列导航:高通平台8953 Linux DTS(Device Tree Source)设备树详解之一(背景基础知识篇)高通平台8953 Linux DTS(Device Tree Source)设备树详解之二(DTS设备树匹配过程)高通平台8953 Linux DTS(Device Tree Source)设备树详解之三(高通MSM8953 android7.1实例分析篇)一.什么是DTS?为..._高通提取dtb

推荐文章

热门文章

相关标签