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

weblog 精帖
255

        从计算机程序出现的第一天起,对效率的追求就是程序天生的信仰,这个过程犹如一场没有终点,永不停歇的F1方程式竞赛,程序员是车手,技术平台则是在赛道上飞驰的赛车。---深入理解java虚拟机

        现在是2019年,互联网发展已经进入到新的阶段,而不在像前两年的野蛮生长,现阶段会对从业人员的要求会提高,毕竟市场上的人也逐渐增多,我知道的一个Java岗位,一天就有2000个简历投递进入,而想要打败这么多的人,能力不突出那么就会被淘汰掉,而什么是自己突出的能力,就需要好好思考一番。
        突出能力包括解决复制问题的能力,有深入框架底层,能够解决一些疑难杂症的能力,有快速学习,快速上手的能力,而这些都需要靠一些知识沉淀,这些知识的沉淀都还得是计算机知识。
        为什么学习算法可以让自己的知识沉淀,通过编程语言实现算法,能够让自己逻辑更清晰,让自己思考的更全面,比如二叉树,B-树,B+树,通过一些学习和实现,能够理解为什么数据库中实现B+树作为存储结构。在实现过程中,也能够检验自己对编程语言的驾驭能力,而不是通过堆砌代码来实现简单的接口任务。沉淀的还有自己的架构能力,虽然这种方式与架构能力八竿子打不着,但是确可以深深地影响自己以后架构能力,如果对算法,数据结构了解不深,那么就根本不会去思考框架的优劣,不去思考框架给自己项目带来哪些影响。
        万变不离其宗的是那些算法和理论,在日新月异的互联网中,框架变化太快,追逐框架,自己的精力永远也更不上。而最新的人工智能等新技术,对算法的要求特别高,应该说,如果一个人的算法知识不够,那么对新技术的知识就会完全不懂,更不谈通过这些新技术而衍生的方面,自己就只能错过这些。而对于从事Java web开发领域,如果一个简单的排序,一般会想到For循环遍历,是否会想到冒泡排序,是否会使用到Java已经封装好了的排序规则,而底层实现就是用到的那些算法。
并不是算法有多么的好,必须要像算法开发工程师那样精通算法,其实不是,也不是需要短时间掌握的,而是通过学习算法和数据结构,以达到知识的一种沉淀。
        如果真的开发了几年的程序员,没有计算机知识的沉淀,那么自己就可能无法竞争的过年轻的程序员。前几年还好,大龄程序员因为市场野蛮生长,已经获得了足够的经验和地位,而之后对于新进入的程序员,要求就非常严苛,毕竟互联网也在升级。

会算法和不会算法的区别

        不会算法时你也许会是这样

        会算法的你可能会是这样

猜你喜欢
  • blog -特别的和

    问题描述:思路:遍历1-n个,判断是否满足条件。代码:package club.test;public class TestMain11 { public static void main(String[] args) { int nu
  • blog 递归实现合并两递增链表-合并后保持递增序列

    递归实现合并两递增链表-合并后保持递增序列java描述:单链表:递归链表节点package club.test;/*** * 链表节点 * @author jiajia * */public class Node { publi
  • blog 迷宫问题-寻找最短路径

    迷宫问题-寻找最短路径:广度优先搜索:队列,链表代码实现:<!DOCTYPE html><html> <head> <meta charset='UTF-8'> <title></title> <script> var
  • blog -的分解

    题目描述思路:枚举,只需枚举前两个,满足条件的第三个自然是2019减去前两个。代码package lanqiao;public class TestMain1 { public static void main(String[] a
  • blog 是单调栈?

    对于栈,一般来讲是先进后出。而所谓 单调栈 则是在栈的 先进后出 基础之上额外添加一个特性:从栈顶到栈底的元素是严格递增(or递减)。那具体的进栈过程如下:1.对于单调递增栈,若当前进栈元素 e,从栈顶开始遍历元素,把小于 e 或者等于
  • blog KMP

    1.PMT KMP的核心,是一个被称部分匹配表(Partial Match Table)的组。我觉得理解KMP的最大障碍就是很多人在看了很多关于KMP的文章之后,仍然搞不懂PMT中的值代表了意思。先来解释一下这个
  • blog -列求值

    问题描述思路: 斐波那契列的变体 考虑如果把20190324项的每一项的值都出来的话,那值的范围就会超出基本类型能够表示的范围,又考虑到题目是求最后四位,而加时前一位不会影响后一位的计果,例如
  • blog -层次打印二叉树节点信息(以及树的层级遍历)

    控制台打印效果 | /-----------10(10)------\ |
  • blog -判断单链表是否有环 求环的入口地址(java)

    问题:如上图的一个链表,如何判断一个链表中是否存在环,以及如何求出环的入口以及何如求出链表的长度。 方案一:利用hash表         首先准备一个hash表如hashMap等,然后从链表头部
  • blog -图的着色问题

    -图的着色问题问题描述: 图的m-着色判定问题——给定无向连通图G和m种不同的颜色。用这些颜色图G的各顶点着色,每个顶点着一种颜色,是否有一种着色使G中任意相邻的2个顶点着不同颜色?个人感觉图的着色问题类似八皇后