大家好我是敖丙,想出后端学习路线这样的一期我其实预谋了很久,然而因为工夫的起因始终拖到了当初,我认为这样的一期一两天就能够搞定,后果从构思到整顿材料,再到做成视频公布,差不多前前后后用了两周的工夫。
你们也晓得丙丙始终都是创作鬼才来的,所以我必定不会不苟言笑去介绍一个路线,后期我想了好几个切入点,最初决定用一个 残缺的电商零碎 作为切入点,带着大家看看,咱们须要学些啥,我还帮大家还收集配套视频和材料,暖男 石锤啊,这期是醉生梦死之作,不要白嫖 了。
注释
在构思的时候,我依照本人之前的电商教训去臆想了一个电商零碎,基本上算是麻雀虽小五脏俱全,也应该囊括了大家当前会接触到的所有技术栈了,可能还是没那么全,然而齐全是够用的,在视频的最初也会给个我举荐的学习路线。
这就是我设计的一个迷你电商零碎了,大家能够每个点看一下,看看什么中央是你接触过的,什么技术栈是你不太熟悉的,我感觉还算是比拟全的,有什么倡议也能够留言给我,工夫起因我就不停留太久了,想理解的话大家能够暂停多观赏一会。
不晓得大家都看了一下没,当初咱们就要庖丁解牛了,我从上到下顺次剖析。
前端
你可能会会好奇,你不是讲后端学习路线嘛,为啥还有前端的局部,我只能通知你,傻瓜,浮浅。
咱们可 不能闭门造车,谁通知你后端就不学点前端了?
前端当初很多也理解后端的技术栈的,你想咱们去一个网站,最先接触的,最先看到的是啥?
没错就是前端,在大学你要是找不到专门的前端同学,去做零碎必定也要本人顶一下前端的,那我感觉最根本的技术栈得相熟和理解吧,丙丙当初也是偶然会开发一下咱们的管理系统次要是 VUE 和React。
在这里我列举了我目前感觉比较简单和咱们后端能够理解的技术栈,都是比拟根底的。
作为一名后端理解局部前端常识还是很有必要的,在当前开发的时候,公司有前端那能帮忙你前后端联调更顺畅,如果没前端你本人也能顶一下简略的页面。
HTML、CSS、JS、Ajax我感觉是必须把握的点,看着简略其实深究或者去操作的话还是有很多货色的,其余作为扩大有趣味能够理解,反正入门简略,只是精通很难很难。
在这一层不光有这些还有 Http 协定 和 Servlet,request、response、cookie、session这些也会随同你整个技术生涯,了解他们对前面的你必定有不少益处。
Tip:我这里最初删除了 JSP 相干的技术,我集体感觉没必要学了,很多公司除了老我的项目之外,新我的项目都不会应用那些技术了。
前端在我看来比后端难,技术迭代比拟快,常识如同也没特定的体系,所以面试大厂的前端很多敌人都说难,不是技术多难,而是常识多且简单,找不到一个残缺的体系,相比之下后端清朗很多,我前面就开始讲后端了。
网关层:
互联网倒退到当初,涌现了很多互联网公司,技术更新迭代了很多个版本,从晚期的单机时代,到当初超大规模的互联网时代,几亿人参加的春运,几千亿成交规模的双十一,有数互联网前辈的造就了当初互联网的辉煌。
微服务 , 分布式 , 负载平衡 等咱们常常提到的这些名词都是这些技术在场景背地撑持。
单机顶不住,咱们就多找点服务器,然而怎么将流量平均的打到这些服务器上呢?
负载平衡,LVS
咱们机器都是 IP 拜访的,那怎么通过咱们申请的域名去申请到服务器呢?
DNS
大家刷的抖音,B 站,快手等等视频服务商,是怎么保障同时为全国的用户提供疾速的体验?
CDN
咱们这么多零碎和服务,还有这么多中间件的调度怎么去治理调度等等?
zk
这么多的服务器,怎么对外对立拜访呢,就可能须要晓得反向代理的服务器。
Nginx
这一层做了 反向负载、服务路由、服务治理、流量治理、平安隔离、服务容错 等等都做了,大家公司的 内外网隔离 也是这一层做的。
我之前还接触过一些比拟有意思的我的项目,所有对外的接口都是加密的,几十个服务会通过网关解密,找到真的路由再去申请。
这一层的知识点其实也不少,你往后面学会发现 分布式事务,分布式锁 ,还有很多中间件都离不开zk 这一层,咱们持续往下看。
服务层:
这一层有点货色了,算是整个框架的外围,如果你跟我帅丙一样当前都是从事后端开发的话,咱们基本上整个技术生涯,大部分工夫都在跟这一层的技术栈打交道了,各种目不暇接的中间件,计算机基础知识,Linux 操作,算法数据结构,架构框架,研发工具等等。
我想在看这个视频的各位,计算机根底必定都是学过的吧,如果大学的时候没好好学,我感觉还是有必要再看看的。
为什么咱们网页能保障安全可靠的传输,你可能会理解到HTTP,TCP 协定,什么三次握手,四次挥手。
还有 过程、线程、协程,什么内存屏障,指令乱序,分支预测,CPU 亲和性 等等,在之后的编程生涯,如果你能把握这些货色,会让你在遇到很多问题的时候霎时 get 到点,而不是像个无头苍蝇一样乱撞(然而丙丙还做得不够)。
理解这些计算机常识后,你就须要接触编程语言了,大学的 C 语言 根底会让你学什么语言入门都会快点,我抉择了面向对象的JAVA,然而也不晓得为啥当初还没对象,也因而经常一个在深夜坐在工位上陷入对人生和社会的思考。
JAVA 的根底也一样重要,面向对象 (包含类、对象、办法、继承、封装、形象、多态、音讯解析等),常见 API,数据结构, 汇合框架 , 设计模式 (包含创立型、结构型、行为型), 多线程和并发 ,I/ O 流,Stream,网络编程 你都须要理解。
代码会写了,你就要开始学习一些能帮忙你把零碎变得更加标准的框架,SSM 能够会让你的开发更加便捷,构造档次更加明显。
写代码的时候你会发现你大学用的 Eclipse 在公司看不到了,你跟大家一样去用了 IDEA,第一天这是什么玩意,一周后,真香,然而这玩意免费有点贵,那收费的VSCode 真的就是不错的抉择了。
代码写的时候你会接触代码的仓库管理工具maven、Gradle,提交代码的时候会去写我的项目版本管理工具Git。
代码提交之后,公布之后你会发现很多货色须要本人去服务器亲自排查,那 Linux 的知识点就能够在外面灵活运用了,查看过程,查看文件,各种 Vim 操作等等。
零碎的优化很多中央没优化的空间了,你可能会尝试从 算法 ,或者优化 数据结构 去优化,你看到了 HashMap 的源码,想去理解红黑树,而后在算法网上看到了二叉树搜寻树和各种常见的算法问题,刷多了,你也能总结出精髓所在,什么 贪婪,分治,动静布局 等。
这么多个服务,你发现 HTTP 申请曾经开始有点不满足你的需要了,你想开发更便捷,像拜访本地服务一样拜访近程服务,所以咱们去理解了Dubbo,Spring cloud。
理解 Dubbo 的过程中,你发现了 RPC 的精髓所在,所以你去接触到了高性能的 NIO 框架,Netty。
代码写好了,服务也能通信了,然而你发现你的代码链路好长,都耦合在一起了,所以你接触了 音讯队列,这种异步的解决形式,真香。
他还能够帮你在突发流量的时候用队列做缓冲,然而你发现分布式的状况,事务就不好治理了,你就理解到了分布式事务,什么 两段式,三段式,TCC,XA,阿里云的全局事务服务 GTS等等。
分布式事务的时候你会想去理解RocketMQ,因为他自带了分布式事务的解决方案,大数据的场景你又看到了Kafka。
我下面提到过 zk,像Dubbo、Kafka 等中间件都是用它做注册核心的,所以很多技术栈最初都组成了一个常识体系,你先理解了体系中的每一员,你能力把它们分割起来。
服务的交互都从过程内通信变成了近程通信,所以性能必然会受到一些影响。
此外因为很多不确定性的因素,例如网络拥塞、Server 端服务器宕机、挖掘机铲断机房光纤等等,须要许多额定的性能和措施能力保障微服务晦涩稳固的工作。
Spring Cloud 中就有 Hystrix 熔断器、Ribbon 客户端负载均衡器、Eureka 注册核心 等等都是用来解决这些问题的微服务组件。
你感觉学习得差不多了,你发现各大论坛博客呈现了一些前沿技术,比方容器化,你可能就会去理解容器化的常识,像 Docker,Kubernetes(K8s) 等。
微服务之所以可能疾速倒退,很重要的一个起因就是:容器化技术的倒退和容器管理系统的成熟。
这一层的货色呢其实远远不止这些的,我不过多赘述,写多了像个劝退师一样,然而大家也不必慌,大部分的技术都是缓缓接触了,工作中缓缓去理解,去深刻的。
好啦咱们持续沿着图往下看,那再往下是啥呢?
数据层:
数据库可能是整个零碎中最值钱的局部了,在我码文字的前一天,刚好产生了微盟程序员删库跑路的操作,删库跑路其实是咱们在网上最罕用的笑话,没想到还是照进了事实。
这里也提一点点吧,36 小时的故障,其实在互联网公司应该是个笑话了吧,权限管制没做好相似 rm -rf、fdisk、drop 等等这样的高危命令是能够实时拦挡掉的,备份,全量备份,增量备份,提早备份,异地容灾 全副都考虑一下应该也不至于这样,一家上市公司还是有点点不应该。
数据库根本的 事务隔离级别 , 索引,SQL,主被同步,读写拆散 等都可能是你学的时候要理解到的。
下面咱们提到了平安,不要把鸡蛋放一个篮子的情理大家应该都晓得,那 分库 的意义就很显著了,而后你会发现工夫久了表的数据大了,就会想到去接触分表,什么 TDDL、Sharding-JDBC、DRDS 这些插件都会接触到。
你发现流量大的时候,或者热点数据打到数据库还是有点顶不住,压力太大了,那非关系型数据库就进场了,Redis当然是首选,然而 MongoDB、memcache 也有各自的利用场景。
Redis 应用后,真香,真快,然而你会开始放心最开始提到的平安问题,这玩意快是因为在内存中操作,那断点了数据丢了怎么办?你就开始浏览官网文档,理解 RDB,AOF 这些长久化机制,线上用的时候还会遇到 缓存雪崩击穿、穿透 等等问题。
单机不满足你就用了,他的集群模式,用了集群可能也放心集群的衰弱状态,所以就得去理解 哨兵 ,他的 主从同步 ,工夫久了 Key 多了,就得理解 内存淘汰机制……
他的大容量存储有问题,你可能须要去理解Pika….
其实远远没完,每个的点我都点到为止,然而其实要深究每个点都要学很久,咱们接着往下看。
实时 / 离线 / 大数据
等你把几种关系型非关系型数据库的知识点,整顿分明后,你会发现数据还是大啊,而且数据的场景越来越多多样化了,那大数据的各种中间件你就得理解了。
你会发现很多场景,不须要实时的数据,比方你查你的支付宝去年的,上个月的账单,这些都是不会变动的数据,没必要实时,那你可能会接触像 ODPS 这样的中间件去做数据的离线剖析。
而后你可能会接触 Hadoop 系列相干的货色,比方于 Hadoop(HDFS) 的一个数据仓库工具Hive,是建设在 Hadoop 文件系统之上的分布式面向列的数据库HBase。
写多的场景,适宜做一些简略查问,用他们又有点大材小用,那 Cassandra 就再适合不过了。
离线的数据分析没方法满足一些实时的常见,相似风控,那 Flink 你也得略知一二,他的窗口思维还是很有意思。
数据接触完了,计算引擎 Spark 你是不是也不能放过 ……
搜索引擎:
传统关系型数据库和 NoSQL 非关系型数据都没方法解决一些问题,比方咱们在百度,淘宝搜寻货色的时候,往往都是几个关键字在一起一起搜寻货色的,在数据库除非把几次的后果做交加,不然很难去实现。
那全文检索引擎就诞生了,解决了搜寻的问题,你得思考怎么把数据库的货色实时同步到 ES 中去,那你可能会思考到 logstash 去定时跑脚本同步,又或者去接触伪装成一台 MySQL 从服务的Canal,他会去订阅 MySQL 主服务的binlog,而后本人解析了去操作 Es 中的数据。
这些都搞定了,那可视化的后盾查问又怎么解决呢?Kibana,他他是一个可视化的平台,甚至对 Es 集群的衰弱治理都做了可视化,很多公司的日志查问零碎都是用它做的。
学习路线
看了这么久你是不是发现,帅丙只是始终在介绍每个层级的技术栈,并没说到具体的一个路线,那是因为我想让大家先有个认知或者说是扫盲吧,我一样用脑图的形式汇总一下吧,如果图片被平台二压了,能够去公众号回复【路线】。
材料 / 学习网站
JavaFamily:由一个在互联网得过且过的男人保护的 GitHub
CodeGym:一个在线 Java 编程课程,80% 的内容是练习,适宜无所不通的入门者。
Wibit Online Java Courses:一个十分乏味的编程学习网站,各种活泼的动画形象能让人遗记学习的干燥。在线视频学习,非常适合零根底。
stanford CS106A: Programming Methodology:斯坦福经典课程系列,齐全没有编程教训,想学 Java 语言的,能够看看这个课程。
Bloombenc:一个在线交互式学习平台,老师能够依据你的学习能力和节奏批改他们的教学方法,还能够在平台上编码。
Imooc:慕课网,我大学的 C 语言就是在这里看的
CodeAcademy:比拟实用的 Java 在线课程,重视的是在找工作时十分有用的技术能力。
PLURALSIGHT:整合了很多 Java 的视频课程,局部收费,局部付费,能够依据本人的须要筛选。
Lynda Online Java Training Videos:Java 进阶课程,包含如何应用 JDBC 来集成 MySQL 数据库,Reflection API,管理文件和目录等。
九章根底算法班(Java):中文在线互动课,随时开始学习。
BeginnersBook:Java 初学者收费教程,有略微一些编程根底之后,能够跟着文档里的代码练习。
docs.oracle.com/javase/tutorial:官网 Java 指南,对理解简直所有的 java 技术个性都十分有帮忙。
JournalDev:Java 相干教程及问答
JavaWorld:最早的一个 Java 站点,每周更新 Java 技术文章。
developer.com/java:由 http://Gamelan.com 保护的 Java 技术文章网站。
IBM Developerworks 技术网站:IBM 的 Develperworks 技术网站,这是其中的 Java 技术主页
絮叨
如果你想去一家不错的公司,然而目前的硬实力又不到,我感觉还是有必要去致力一下的,技术能力的高下能决定你走多远,平台的高下,能决定你的高度。
如果你通过致力胜利进入到了心仪的公司,肯定不要懈怠放松,职场成长和新技术学习一样,逆水行舟。
丙丙发现在工作中发现我身边的人真的就是实力越强的越致力,最高级的自律,享受孤单(周末的歪哥)。
总结
我提到的技术栈你想全副理解,我感觉初步理解可能几个月就够了,这里的理解仅限于你晓得它,晓得他是干嘛的,晓得怎么去应用它,并不是说深刻理解他的底层原理,理解他的常见问题,相熟问题的解决方案等等。
你想做到后者,基本上只能靠工夫上的与日俱增,或者一直的去尝试积攒教训,也没什么速成的货色,欲速则不达大家也是晓得的。
技术这条路,说实话很干燥,很辛苦,然而待遇也会高于其余一些根底岗位。
所瞎话我大学学这个就是为了趣味,我从小对电子,对计算机都比拟酷爱,然而当初打磨得,当初 就是为了钱 吧,是不是很事实?若家境殷实,谁愿流离失所。
然而至多丙丙因为做软件,扭转了家庭的困境,本人日子也向小康一步步迈过去。
说做程序员扭转了我和我家人的毕生可能夸大了,然而我总有一种下半辈子会因为我抉择走这条路而扭转的错觉。
我是敖丙,你晓得的越多,你不晓得的越多,咱们下期见!
人才 们的 【三连】 就是敖丙创作的最大能源,如果本篇博客有任何谬误和倡议,欢送人才们留言!