网络上有不少文章都描述了算法的重要性,包括大公司面试,有大量的算法题。若是算法弱,那么极大可能与大公司错过。下面谈一谈为何算法和数据结构重要,而且算法知识须要沉淀。程序员
做为Java web开发人员,若是刚开始没有进入大公司,而进入小公司,又忙于项目,忙于学习各类框架,忽视了底层的学习,通过两三年以后,总会意思到本身在某方面的薄弱,特别是想深刻一些框架底层知识,Java源码的内容等。为何出现这种状况,由于在前期学习框架的内容时,框架是易学的,按照文档规范去作就能够了,甚至能够不用思考。我在刚入一家公司作Java开发时,大牛将框架已经搭建完成,而本身要完成的工做就是写接口,而且写接口须要彻底按照必定的规范去实现,有一套标准化的流程,到了最后,本身能够不须要太多思考,按模板去套。当这样持续了一年以后,发现本身除了一套按照规范实现功能的技能,其余技能都很是薄弱,大牛的框架底层实现相对复杂一点,但都已经封装好了,上手的人能够不须要知道框架是如何运行的,但对我的的成长在某方面是缺失的。若是本身不努力学习。web
以后去啃框架内的知识时,须要了解的内容才让我打开眼界。一个简单的例子,程序会将全部的操做都放入都一个队列中,而后由线程中队列中取出,再丢给其余线程去操做,队列是先进先出的,这样不会由于放入的操做超时太长时间。也许会以为这个很好理解,是的队列的知识很简单,可是它会常常被使用。若是之前没有学过,可能对这个概念不太了解,若是这个概念不了解,后续的其余操做就变得很麻烦,逐渐的,就会丧失继续研究代码的动力。面试
如今是2019年,互联网发展已经进入到新的阶段,而不在像前两年的野蛮生长,现阶段会对从业人员的要求会提升,毕竟市场上的人也逐渐增多,我知道的一个Java岗位,一天就有2000个简历投递进入,而想要战胜这么多的人,能力不突出那么就会被淘汰掉,而什么是本身突出的能力,就须要好好思考一番。算法
突出能力包括解决复制问题的能力,有深刻框架底层,可以解决一些疑难杂症的能力,有快速学习,快速上手的能力,而这些都须要靠一些知识沉淀,这些知识的沉淀都还得是计算机知识。数据库
为何学习算法可让本身的知识沉淀,经过编程语言实现算法,可以让本身逻辑更清晰,让本身思考的更全面,好比二叉树,B-树,B+树,经过一些学习和实现,可以理解为何数据库中实现B+树做为存储结构。在实现过程当中,也可以检验本身对编程语言的驾驭能力,而不是经过堆砌代码来实现简单的接口任务。沉淀的还有本身的架构能力,虽然这种方式与架构能力八竿子打不着,可是确能够深深地影响本身之后架构能力,若是对算法,数据结构了解不深,那么就根本不会去思考框架的优劣,不去思考框架给本身项目带来哪些影响。编程
万变不离其宗的是那些算法和理论,在突飞猛进的互联网中,框架变化太快,追逐框架,本身的精力永远也更不上。而最新的人工智能等新技术,对算法的要求特别高,应该说,若是一我的的算法知识不够,那么对新技术的知识就会彻底不懂,更不谈经过这些新技术而衍生的方面,本身就只能错过这些。而对于从事Java web开发领域,若是一个简单的排序,通常会想到For循环遍历,是否会想到冒泡排序,是否会使用到Java已经封装好了的排序规则,而底层实现就是用到的那些算法。网络
并非算法有多么的好,必需要像算法开发工程师那样精通算法,其实不是,也不是须要短期掌握的,而是经过学习算法和数据结构,以达到知识的一种沉淀。数据结构
若是真的开发了几年的程序员,没有计算机知识的沉淀,那么本身就可能没法竞争的过年轻的程序员。前几年还好,大龄程序员由于市场野蛮生长,已经得到了足够的经验和地位,而以后对于新进入的程序员,要求就很是严苛,毕竟互联网也在升级。架构