java比较特殊,毕竟后端扛霸子,想要认真学好java,必须有好的计算机基础,但是为何须要基础呢?前端
把这个问题弄明白,要学哪些基础知识就清楚多了。java
第一个问题,10个用户使用的系统和1000000我的使用的系统,对后端来讲差异大吗?程序员
这是不少初学者弄不清楚的事情。对前端而已,差异不会特别大,对后端来讲,天壤之别。算法
不说架构,只说服务器的资源,后端代码是运行在服务器上,服务器和pc同样,一样是要有cpu,内存,硬盘,带宽的,当系统的使用量比较多的时候,就会出现性能瓶颈。数据库
内存不足,cpu跑满100%,磁盘不足等等问题,这在不少时候都交给运维去检测和处理,开发人员须要懂吗?编程
不一样的解决方案,带来的资源使用率不同。
因此后端人员必须作性能优化,不少事情,专业和非专业的区别,就在于能不能把事情作好。后端
从这个问题来看,你发现后端须要什么基础知识没?设计模式
计算机组成原理,来告诉你计算机的物理机构,数据如何存储。
计算机操做系统来告诉你怎么管理内存,什么叫进程 ,什么叫线程,什么又是io。
计算机网络告诉你什么是tcp和http,什么是报文。性能优化
这些课程和基础知识的做用就是给你更好的认知本身编写程序都底层实现原理,为你解决性能问题提供基础支撑。服务器
第二个问题,数据库要建索引,btree和hash两种索引,区别是什么?各自应该用在什么场景。
若是你没有数据结构的基础,对btree惟一的认知应该就是逼数吧?
hash是什么鬼,hash算法?算什么鬼玩意。
对这两个概念都不清楚的话,能不能作好索引的建立?固然能,操做很简单,但是建立出来的索引能不能解决问题,让访问速度更快?
也很简单,两个索引随便试呗,这个不行用那个。
这就是没文化时候的解决方案,而正确的学习方式就是花时间理解什么是btree,什么是hash,底层如何实现的,再结合业务场景,去判断应该作什么样的索引。
第三个问题,为何用消息队列?
什么叫解藕,什么叫内聚?生产者消费者又是什么意思?
这些是设计模式,或者是面向对象的一些概念。
有更多的例子能够举,但概括下来就是弄清楚底层构建的原理。
算法算一层
操做系统算一层
组成原理算一层
数电模电单片机算一层
物理算一层
你能从上到下一层层的逐层分解,互联网在你脑壳里就没有秘密。
正常而言,学到组成原理就够了。
可是,这么一个庞大的知识体系,你要学多久?
并且,真正用到的基础知识和工做场景紧密相连,可能只有20%用获得,你只是不清楚是哪20%而已。
结论以下:
1 计算机组成原理,计算机操做系统,计算机网络,数据库,数据结构,算法 这是六门基础课要学习
2 你没时间系统的学习一遍,只能去找工做中很大可能用到的,先过一遍,有基础概念,之后遇到问题的时候,能够知道归属哪一个领域。
怎么知道什么内容是可能用到的,请自行搜索腾讯课堂修真院的洗髓换骨营,缩减到了10%的内容。
3 对于没有用户量的系统而言,没有太多学习基础课程的必要,由于你不须要解决这些问题。但薪水和你能解决的问题是等价的,你愿意一直只作初级程序员么?
4 编程思惟在基础课程里都有锻炼,在工做中也更重要。