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

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

智能推荐

jstat命令详解(转载)-程序员宅基地

文章浏览阅读335次。原文地址:https://www.cnblogs.com/lizhonghua34/p/7307139.html jstat命令可以查看堆内存各部分的使用量,以及加载类的数量。命令的格式如下:jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数]注意:使用的jdk版本是jdk8.类加载统计:C:\Users\Administrator>..._jstat time

npm i 报错:This version of npm is compatible with lockfileVersion@1, but package-lock.json-程序员宅基地

文章浏览阅读4.9k次。lock.json是源于lockfileVersion@2;npm是lockfileVersion@1的,但。方法1、升级一下npm。_this version of npm is compatible with lockfileversion@1, but package-lock.j

WGS84和ECEF坐标的转换-程序员宅基地

文章浏览阅读2.6k次。#include "stdafx.h"#include <math.h>#define PI 3.141592653/*该程序根据GPS.G1-X-00006.pdf文档,实现了WGS84和ECEF坐标的转换*/void LLAtoECEF(double latitude, double longitude, double..._ecef转载体坐标

计算机组成原理笔记-持续更新_计算机组成原理第六版知识点总结-程序员宅基地

文章浏览阅读372次。计算机的发展_计算机组成原理第六版知识点总结

Oracle12c/19c问题:ORA-01109解决办法_oracle19c ora-01109-程序员宅基地

文章浏览阅读1.7k次,点赞3次,收藏5次。出现问题:在数据库服务器端,查询dual表,报ORA-01109错误ORA-01109:database not open查看:sqlplus / as sysdba;--管理员登录select con_id,name,open_mode from V$pdbs;--查看pdb的状态--发现服务DB_**,处于mounted状态解决办法:alter pluggable database DB_** open;alter session set container=D_oracle19c ora-01109

JS:运算符的优先级(+ - * / && || ,等)_js & 优先级-程序员宅基地

文章浏览阅读2.7k次。逗号,运算符:使用,可以分割多个语句,一般在声明变量时使用。举例:// ,运算符可以同时同时声明多个变量,并赋值var a=2,b=5,c=10;其实运算符和学过的数学一样,在JS中运算符也有优先级。比如:先乘除后加减,小括号()的优先级属于一人之上,万人之下的,优先级很高。var a = 1+3*5; // 结果为16那么在JS中也有个自己的运算符优先级表,表中越靠上的优先级越高,优先级越高越会优先计算,如果优先级一样,则从左往右按顺序计算。表格中运算符的优先级不用全部记住,如果遇到_js & 优先级

随便推点

Unity AssetBundle_assetbundle 判断文件完整性-程序员宅基地

文章浏览阅读2.7k次,点赞3次,收藏11次。#AssetBundle作用原理把资源导出成一种叫做AssetBundle的文件,然后打包后可以在Unity程序运行的时候再加载回来用。AssetBundle是采取某一种压缩方式压缩成的资源文件。节省存储空间,控制游戏包的大小,实现游戏的热更新。AssetBundle文件分类AssetBundle文件可以分为两类:序列化文件(serialized file)和资源文件(resource ..._assetbundle 判断文件完整性

通信网络编程第六次作业_按照消息的通知方式,可以将io分为,按照消息的处理机制来看,套接字编程可以分为-程序员宅基地

文章浏览阅读1.3k次。1、 何谓同步与异步?它们的区别是什么?课本(P158)同步与异步这两个概念与消息的通知机制有关,和消息如何处理无关。对于消息而言,在同步的情况下,由消息处理者自己去等待消息是否被触发;在异步情况下,由触发机制通知处理者,然后进行消息处理。 2、 何谓阻塞与非阻塞?它们与同步与异步的区别是什么?课本(P158)从消息处理机制来看,套接字编程可分为阻塞和非_按照消息的通知方式,可以将io分为,按照消息的处理机制来看,套接字编程可以分为

使用Tesseract-OCR训练自定义字库_tesseract训练自己的字库-程序员宅基地

文章浏览阅读4k次。文本识别前言由于我的个人博客之前挂了,一直没来得及迁移,所以又重新拾起了csdn…在利用python进行文本识别时,使用tesseract往往是一个非常好的选择,且tesseract支持自己训练的字库,自己训练出来的字库一般具有轻量、有针对性、识别率高的特点。本文就讲述了如何使用tesseract自己训练字库。安装tesseract环境下载Tesseract-OCR官方命令行工具:https://sourceforge.net/projects/tesseract-ocr-alt/files/_tesseract训练自己的字库

怎样知道 CPU 是否支持虚拟化技术(VT) | Linux 中国-程序员宅基地

文章浏览阅读380次。版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.csdn.net/F8qG7f9YD02Pe/article/details/79832475 ..._在计算节点检查cpu是否支持vt-x或amd-v。将命令和执行结果提交到答题卷中指定位置

郑州大学远程教育c语言程序设计答案,郑州大学远程教育C语言考试试卷.doc-程序员宅基地

文章浏览阅读755次。郑州大学远程教育C语言考试试卷【ZZJ网上考试系统 v10.1】 本套软件使用权属于:郑州大学远程教育学院 (学期:131)考试课程:6517.C语言程序设计(第3次考试) 考试时间:120分钟 考场:123.15.57.116 考试日期:2013-10-16考号姓名:曹光辉剩余时间:55:23保存交卷帮助窗体顶端本卷共有3大题。窗体底端一、单项选择题(10道小题,共10分)1、C语言并不是非常严..._郑州大学c语言编写程序答案

关于统计分析软件Spss统计个案数和实际数据的个案数不一致问题_spss个案数和实际数不一致-程序员宅基地

文章浏览阅读8.2k次。解决方法:数据---个案加权---在弹出的对话框左侧选择需要处理的一列数据名称,右侧选中“不对个案加权”即可,亲测有效,不妨试试!_spss个案数和实际数不一致