本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点、资料以及个人系列文章。
这期我想写好久了,可是由于时间的缘由一直拖到了如今,我觉得一两天就写完了,结果从构思到整理资料,再到写出来用了差很少一周的时间吧。前端
大家也知道丙丙一直都是创做鬼才来的,因此我确定不会一本正经的写,我想了好几个切入点,最后决定用一个完整的电商系统做为切入点,带着你们看看,咱们须要学些啥,我甚至还收集配套视频和资料,暖男石锤啊,这期是呕心沥血之做,不要白嫖了。git
在写这个文章以前,我花了点时间,本身臆想了一个电商系统,基本上算是麻雀虽小五脏俱全,我今天就用它开刀,一步步剖析,我会讲一下咱们可能会接触的技术栈可能不全,可是够用,最后给个学习路线。程序员
Tip:请多欣赏一会,每一个点看一下,看看什么地方是你接触过的,什么技术栈是你不太熟悉的,我以为还算是比较全的,有什么建议也能够留言给我。github
不知道你们都看了一下没,如今咱们就要庖丁解牛了,我从上到下依次分析。面试
你可能会会好奇,你不是讲后端学习路线嘛,为啥还有前端的部分,我只能告诉你,傻瓜,肤浅。算法
咱们可不能闭门造车,谁告诉你后端就不学点前端了?数据库
前端如今不少也了解后端的技术栈的,你想咱们去一个网站,最早接触的,最早看到的是啥?编程
没错就是前端,在大学你要是找不到专门的前端同窗,去作系统确定也要本身顶一下前端的,那我以为最基本的技术栈得熟悉和了解吧,丙丙如今也是偶尔会开发一下咱们的管理系统主要是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集群的健康管理都作了可视化,不少公司的日志查询系统都是用它作的。
看了这么久你是否是发现,帅丙只是一直在介绍每一个层级的技术栈,并没说到具体的一个路线,那是由于我想让你们先有个认知或者说是扫盲吧,我同样用脑图的方式汇总一下吧,若是图片被平台二压了,能够去公众号回复【路线】。
Tip:原本这一栏有不少我准备的资料的,可是都是外链,或者不合适的分享方式,博客的运营小姐姐提醒了我,因此你们去公众号回复【路线】好了。
若是你想去一家不错的公司,可是目前的硬实力又不到,我以为仍是有必要去努力一下的,技术能力的高低能决定你走多远,平台的高低,能决定你的高度。
若是你经过努力成功进入到了心仪的公司,必定不要懈怠放松,职场成长和新技术学习同样,不进则退。
丙丙发如今工做中发现我身边的人真的就是实力越强的越努力,最高级的自律,享受孤独(周末的歪哥)。
我提到的技术栈你想所有了解,我以为初步了解可能几个月就够了,这里的了解仅限于你知道它,知道他是干吗的,知道怎么去使用它,并非说深刻了解他的底层原理,了解他的常见问题,熟悉问题的解决方案等等。
你想作到后者,基本上只能靠时间上的日积月累,或者不断的去尝试积累经验,也没什么速成的东西,欲速则不达你们也是知道的。
技术这条路,说实话很枯燥,很辛苦,可是待遇也会高于其余一些基础岗位。
所实话我大学学这个就是为了兴趣,我从小对电子,对计算机都比较热爱,可是如今打磨得,如今就是为了钱吧,是否是很现实?若家境殷实,谁愿颠沛流离。
可是至少丙丙由于作软件,改变了家庭的窘境,本身日子也向小康一步步迈过去。
说作程序员改变了我和我家人的一辈子可能夸张了,可是我总有一种下班辈子会由于我选择走这条路而改变的错觉。
我是敖丙,一个在互联网苟且偷生的工具人。
创做不易,本期硬核,不想被白嫖,各位的「三连」就是丙丙创做的最大动力,咱们下次见!
本文 GitHub https://github.com/JavaFamily 已经收录,有大厂面试完整考点,欢迎Star。