前言
自学/学习路线这样的一期我想写很久了,因为一直想写的全一点硬核一点所以拖到了现在,我相信这一期对不管是还在学校还是已经工作的同学都有所帮助,不管是前端还是后端我都墙裂建议大家看完,因为这样会让你对你所工作的互联网领域相关技术栈有个初步的了解。
这期可谓是呕心沥血之作,不要白嫖喲。
正文
我先介绍一下前端
前端
我读者群体是以后端为主的,如果有大学还没开始学习的小伙伴,这个时候我想已经是满屏幕的问号了,为啥我们后端程序员还要去学习前端呢?我只能告诉你,傻瓜,肤浅。
如果是已经大学毕业的程序员我相信每一个后端程序员都会简单的前端,甚至很多后端对目前前端最新技术也都是了解的,我们可不能闭门造车,谁告诉你后端就不学点前端了?而且你了解前端在之后工作联调过程中或许会有更好的思路对你的工作是有所帮助的。
我们上网最先接触到的肯定不是后端的一系列东西,而是移动端和前端网页,各种花里胡哨的样式不是我们要去了解的,但是网页的基本语言以及布局从0到1这个过程是我们应该去了解的,大家看到的花里胡哨的网页布局、链接、文字、图片、事件等,都是一个个的标签、class样式以及js事件而已。
技术背后的思想其实是互通的,所以作为后端以前端作为我们程序员学习的切入点是完全OK的(只是针对还未入门萌新猿),我相信在各位的大学前端基础课程也都是有安排的,而且不管是上学还是以后毕业我相信各位以后一定会接触些许前端的。
在大学一般都是用项目去锻炼技术的,那在项目里面很可能就是你一个人从前端到后端都是自己写的,我在大学就是这样的,现在工作了我们很多内容系统简单的前端也都是我们自己去开发的,因为为了简单的页面和逻辑去浪费前端的资源是没有很大必要的。
在这里我列举了我目前觉得比较简单和我们后端可以了解的技术栈,都是比较基础和我觉得比较必须的。
HTML、CSS、JS、Ajax我觉得是必须掌握的点,看着简单其实深究或者去操作的话还是有很多东西的,其他作为扩展有兴趣可以了解,反正入门简单,只是精通很难很难。
在这一层不光有这些还有Http协议和Servlet,request、response、cookie、session这些也会伴随你整个技术生涯,理解他们对后面的你肯定有不少好处。
扩展:前端技术我觉得VUE、React大家都可以尝试去用用,他们目前支持很多即插即用的插件会帮助你更便捷的开发出漂亮的网页。
Tip:我这里最后删除了JSP相关的技术,我个人觉得没必要学了,很多公司除了老项目之外,新项目都不会使用那些技术了。
前端在我看来比后端难,技术迭代比较快,知识好像也没特定的体系,所以面试大厂的前端很多朋友都说难,不是技术多难,而是知识多且复杂,找不到一个完整的体系,相比之下后端明朗很多,我后面就开始继续往下讲了。
网关层:
互联网发展到现在,涌现了很多互联网公司,技术更新迭代了很多个版本,从早期的单机时代,到现在超大规模的互联网时代,几亿人参与的春运,几千亿成交规模的双十一,无数互联网前辈的造就了现在互联网的辉煌。
微服务,分布式,负载均衡、云原生等我们经常提到的这些名词都是这些技术在场景背后支撑。
单机顶不住,我们就多找点服务器,但是怎么将流量均匀的打到这些服务器上呢?
负载均衡,LVS
我们机器都是IP访问的,但是我们上网都是访问域名就好了,那怎么通过我们申请的域名去请求到服务器呢?
DNS
大家刷的抖音,B站,快手等等视频服务商,是怎么保证同时为全国的用户提供快速的体验?
CDN
我们这么多系统和服务,还有这么多中间件的调度怎么去管理调度等等?
zk
这么多的服务器,怎么对外统一访问呢,就可能需要知道反向代理的服务器。
Nginx
这一层做了反向负载、服务路由、服务治理、流量管理、安全隔离、服务容错等等都做了,大家公司的内外网隔离也是这一层做的。
我之前还接触过一些比较有意思的项目,所有对外的接口都是加密的,几十个服务会经过网关解密,找到真的路由再去请求。
这一层的知识点其实也不少,你往后面学会发现分布式事务,分布式锁,还有很多中间件都离不开这一层的Zookeeper,接下来就是整个学习体系最复杂的部分了,服务端。
服务层:
这一层有点东西了,算是整个框架的核心,如果你跟敖丙一样以后都是从事后端开发的话,我们基本上整个技术生涯,大部分时间都在跟这一层的技术栈打交道了,各种琳琅满目的中间件,计算机基础知识,Linux操作,算法数据结构,架构框架,研发工具等等。
我想在看这个文章的各位,计算机基础肯定都是学过的吧,如果大学的时候没好好学,我觉得还是有必要再看看的。
为什么我们网页能保证安全可靠的传输,你可能会了解到HTTP,HTTPS,TCP协议,什么三次握手,四次挥手,中间人攻击等。
还有进程、线程、协程,内存屏障,指令乱序,分支预测,CPU亲和性等等,在之后的编程生涯,如果你能掌握这些东西,会让你在遇到很多问题的时候瞬间get到点,而不是像个无头苍蝇一样乱撞(然而敖丙还做得不够,所以最近也是在恶补操作系统和网路相关的知识)。
了解这些计算机知识后,你就需要接触编程语言了,大学的C语言基础会让你学什么语言入门都会快点,嵌入式实习结束后我选择了面向对象的JAVA,但是也不知道为啥现在还没对象。
JAVA的基础也一样重要,面向对象(包括类、对象、方法、继承、封装、抽象、 多态、消息解析等),常见API,数据结构,集合框架,设计模式(包括创建型、结构型、行为型),多线程和并发,I/O流,Stream,网络编程你都需要了解。
代码会写了,你就要开始学习一些能帮助你把系统变得更加规范的框架,SSM可以会让你的开发更加便捷,结构层次更加分明。
写代码的时候你会发现你大学用的Eclipse在公司看不到了,你跟大家一样去用了IDEA,第一天这是什么玩意,一周后,真香,但是这玩意收费有点贵,那免费的VSCode真的就是不错的选择了。
代码写的时候你会接触代码的仓库管理工具maven、Gradle,提交代码的时候会去学习项目版本管理工具Git。
代码提交之后,发布之后你会发现很多东西需要自己去服务器亲自排查,那Linux的知识点就可以在里面灵活运用了,通过跳板机访问服务器查看进程,查看文件,各种Vim操作指令等等。
当你自己研发系统发布时你发现很多命令其实可以写成一个脚本一键执行就好了,那Shell会让你事半功倍的。
系统层面的优化很多时候会很有限,你可能会尝试从算法,或者优化数据结构去优化,你看到了HashMap的源码,想去了解红黑树,然后在算法网上看到了二叉树搜索树和各种常见的算法问题,刷多了,你也能总结出精华所在,什么贪心,分治,动态规划等。
这么多个服务,你发现HTTP请求已经开始有点不满足你的需求了,你想开发更便捷,像访问本地服务一样访问远程服务,所以我们去了解了Dubbo,Spring cloud等。
了解Dubbo的过程中,你发现了RPC的精华所在,所以你去接触到了高性能的NIO框架,Netty。
代码写好了,服务也能通信了,但是你发现你的代码链路好长,都耦合在一起了,所以你接触了消息队列,这种异步的处理方式,真香。
他还可以帮你在突发流量的时候用队列做缓冲,但是你发现分布式的情况,事务就不好管理了,你就了解到了分布式事务,什么两段式,三段式,TCC,XA,阿里云的全局事务服务GTS等等。
业务场景使用的多的时候你会想去了解RocketMQ,他也自带了分布式事务的解决方案,但是他并不适合超大数据量的场景,这个时候Kafka就会进入你的视线中。
我上面提到过zk,像Dubbo、Kafka等中间件都是用它做注册中心的(后续kafka会把zk去掉)很多技术栈最后都组成了一个知识体系,你先了解了体系中的每一员,你才能把它们联系起来。
服务的交互都从进程内通信变成了远程通信,所以性能必然会受到一些影响。
此外由于很多不确定性的因素,例如网络拥塞、Server 端服务器宕机、挖掘机铲断机房光纤等等,需要许多额外的功能和措施才能保证微服务流畅稳定的工作。
Spring Cloud 中就有 Hystrix 熔断器、Ribbon客户端负载均衡器、Eureka注册中心等等都是用来解决这些问题的微服务组件。
你感觉学习得差不多了,你发现各大论坛博客出现了一些前沿技术,比如容器化、云原生,你可能就会去了解像**Docker,Kubernetes(K8s)**等技术,你会发现他们给企业级应用提供了怎样的便捷。
微服务之所以能够快速发展,很重要的一个原因就是:容器化技术的发展和容器管理系统的成熟。
这一层的东西呢其实远远不止这些的,我不过多赘述,写多了像个劝退师一样,但是大家也不用慌,大部分的技术都是慢慢接触了,工作中慢慢去了解,去深入的。
这里呢还是想说我经常提到的那句话,你知道的越多,你不知道的越多,所有领域都是这样,一旦你深入了解了这个技术细节,衍生出来的新知识点和他的弊端会让你发现自己的无知,但学到自己不会的不断去进步会让你在学习的道路上走更远的。
好啦我们继续沿着图往下看,那再往下是啥呢?
数据层:
数据库可能是整个系统中最值钱的部分了,去年也发生了微盟程序员删库跑路的操作,删库跑路其实是我们在网上最常用的笑话,但是这个笑话背后我们应该得到的思考就是,数据是整个企业最重要最核心的东西,我现在在公司的大数据团队对此深有体会。
如果大家对大数据感兴趣我想我后面也可以找机会单独出一期大数据技术栈相关的专题。
学习路线
以上就是整个系统所有的技术栈了,这个时候大家再看一下我开头的电商项目图大家是不是会觉得更有感觉了?是不是发现好像是那么回事,也大概知道了很多技术栈在一个系统里面的地位了?
技术路线路线图呢就用我之前的图其实就够了,不一定要严格按照这个去学习,只是给大家一个参考。
资料/学习网站
JavaFamily:由一个在互联网苟且偷生的男人维护的GitHub
B站 网址:www.bilibili.com
中国大学MOOC 网址:www.icourse163.org
IMOOC 网址:www.imooc.com
极客时间 网址:https://time.geekbang.org
极客学院 网址:www.jikexueyuan.com
网易云课堂 网址:https://study.163.com
百度/谷歌 网址:www.baidu.com www.google.com
知乎 网址:www.zhihu.com
GitHub 网址:https://github.com
我要自学网 网址:www.51zxw.net
w3school、菜鸟教程 网址:www.w3school.com.cn www.runoob.com
豆瓣、微信读书、当当 网址:www.douban.com https://weread.qq.com http://book.dangdang.com
CSDN 网址www.csdn.net
掘金 网址 https://juejin.im
博客园 网址:www.cnblogs.com
思否(segmentfault) 网址:https://segmentfault.com
stackoverflow 网址:https://stackoverflow.com
开源中国 网址:www.oschina.net
V2ex 网址:www.v2ex.com
infoQ 网址:www.infoq.cn
有道词典 网址:www.youdao.com
印象笔记 网址:www.yinxiang.com
有道云、石墨文档 网址:https://note.youdao.com https://shimo.im
ProcessOn 、xmind 网址:www.processon.com www.xmind.cn
鸠摩搜索 网址:www.jiumodiary.com
脚本之家 网址:www.jb51.net/books
牛客网 校招 网址:www.nowcoder.com
LeetCode、lintcode 网址:https://leetcode-cn.com www.lintcode.com
数据结构模拟 网址:www.cs.usfca.edu
BOSS、拉钩 网址:www.zhipin.com www.lagou.com
总结
我提到的技术栈你想全部了解,我觉得初步了解可能几个月就够了,这里的了解仅限于你知道它,知道他是干嘛的,知道怎么去使用它,并不是说深入了解他的底层原理,了解他的常见问题,熟悉问题的解决方案等等。
你想做到后者,基本上只能靠时间上的日积月累,或者不断的去尝试积累经验,也没什么速成的东西,欲速则不达大家也是知道的。
技术这条路,说实话很枯燥,很辛苦,但是待遇也会高于其他一些基础岗位。
所实话我大学学这个就是为了兴趣,我从小对电子,对计算机都比较热爱,但是现在打磨得,现在就是为了钱吧,是不是很现实?若家境殷实,谁愿颠沛流离。
都看到这了
小编这有自学的过程中有一些资源可以免费共享,学习交流可加群【796170550】
【内含Java学习80g视频,大厂面试题库,Java学习书籍,项目资源、跟技术指导】加微信即可领取备注777即可!