Java工程师学习指南(完结篇)

Java工程师学习指南java

完结篇nginx

先声明一点,文章里面不会详细到每一步怎么操做,只会提供大体的思路和方向,给你们以启发,若是真的要一步一步指导操做的话,那至少须要一本书的厚度啦。程序员

由于笔者还只是一名在校生,因此写的内容主要仍是针对Java初学者或者接触Java后端不久的朋友,不适用于已经工做多年的Java大佬们。因此本文中的方法不必定适合全部人,若有错误还请谅解。web

本期的内容是系列文章的最后一部份内容了。这个系列可能还有不少东西没有说清楚,也有不少内容被忽略了。可是这些内容也确实是笔者结合本身经验总结而成的,但愿能对你们有用 ~ 固然若是有什么建议也能够随时和笔者交流。算法

上期回顾

上期咱们重点介绍了Java工程师进阶所须要掌握的一些技术内容。特别对于即将参加校招的同窗来讲,最重要的也是这部份内容,你须要了解JVM虚拟机原理,Java并发原理,而且熟悉JDK的部分源码,了解这些API的底层实现。docker

之因此把这部分放在Java Web项目以后来说,是由于我以为,一开始作项目的时候你不可能已经掌握好上述内容了,因此你彻底能够带着问题去作项目,再花时间去学习底层原理,这样你能够很好地结合你以前实践过的代码去理解那些底层技术了。数据库

本期主题

本期主要介绍的是Java后端技术比较“高端”的一些内容,也就是咱们常常聊的分布式,架构,缓存,消息队列等内容,另外咱们也会介绍一些大后端相关的技术,好比云计算(OpenStack和docker),大数据(hadoop生态),以及一些经常使用的后端技术。后端

这些内容其实离咱们并不远,只不过在平时的项目中可能用的比较少,因此做为学生党通常也只能经过一些文章或者书本去学习理论知识。那么基于这么一个状况,咱们来谈谈怎么学习这部分的内容吧。api

01数组

Web后端架构

后端进阶第一步,先把Web架构相关的技术学好吧,由于以前你们都作过Java Web项目,想必对这块内容仍是比较熟悉的吧。咱们须要了解Web架构演化的历史,了解为何要作服务器集群,为何要用缓存,为何要作拆分,作主从,以及为何要有分布式。

推荐资源:《深刻分析Java Web技术内幕》,《大型网站技术架构》

两本都是阿里大佬出的书,两位都是淘宝系的技术大牛。前一本书主要讲述的Java Web的一些技术基础,关于Web架构的内容比较少。

后一本则是李智慧大佬写的架构科普书籍,用很是简单易懂的语言写出了大型Web项目架构之美,分别着眼于高可用,高性能,高扩展等方面讲解了不少设计结构的原则和方法。这本书应该是Web架构小白最好的入门书籍了。

02

分布式理论基础

因为下面的内容或多或少都会涉及到分布式相关的知识,因此这一部分咱们主要介绍一下有关分布式的基础知识。笔者对分布式的学习主要也停留在理论上,因此这里讲的也是一些理论的东西。

推荐资源:《从Paxos到zookeeper分布式一致性原理与实践》,个人技术博客专栏“分布式系统理论与实践”

这本书比较好地科普了分布式基础知识,也介绍了zookeeper的原理和使用。了解zookeeper是了解分布式技术很重要的一个环节。

1 CAP 和 BASE

谈分布式就要谈CAP,一致性,高可用,网络分区容忍性为什么只能三选二,为何网络分区容忍性必需要被考虑。CAP在实际应用中真的可靠么?

BASE出现的缘由,为何BASE更容易实现,更适合实际应用,BASE能够经过哪些技术去实现呢?

2 一致性协议和算法

一致性协议也是分布式理论的一个重点,2PC,3PC,分别指的是什么,其中分别有什么问题。3PC解决了2PC的一个问题,却仍然不完美。

Paxos和Raft两种一致性算法,显然前者比后者复杂得多,可是Raft可能更加实用。为何咱们须要一致性算法,它们又有什么用呢。

3 分布式事务和最终一致性

分布式事务是一个复杂的概念,主要指分布式系统中须要强一致场景时所用到的事务。理解和实现它都不是简单的事情。

若是咱们退而求其次,不要求强一致性,而选择最终一致性,则能够用更加灵活的方案,好比事务消息。

常见分布式技术

推荐资源:《从Paxos到zookeeper分布式一致性原理与实践》,个人技术博客专栏“分布式系统理论与实践”,《深刻理解Spring Cloud与微服务构建》,《分布式服务框架原理与实践》。

1 zookeeper

上文说到zookeeper是分布式技术很重要的一块内容,这是由于zookeeper用于管理和协调分布式组件,虽然它出自hadoop生态,却用于不少应用当中,基本上有分布式的地方就有zk的存在。

简单说来,zk能够提供全局统一的节点树结构,经过节点来管理资源,同时zk自身是使用集群方式部署的,因此保证本身是高可用的。根据这一特色,它能够做为服务注册中心,还能够实现分布式锁等功能。

2 分布式服务

分布式服务是一个挺有意思的东西,也很经常使用,简单来讲,就是把服务组件部署在不一样节点上,经过rpc的方式访问,为了实现这一功能,咱们须要考虑通讯协议,序列化方式,进一步来讲,咱们还要了解如何作服务注册和发现,以及如何作限流,作服务熔断和降级,等等等等。

常见的分布式服务框架有dubbo,以及Spring Cloud这类产品,学会使用他们,而后了解它们的底层实现原理,相信会是一个颇有趣的过程。

3 负载均衡

关于负载均衡,提及来其实很简单,就是把一组请求分红多组,按照某种规则分发到多台服务器上。

可是负载均衡也涉及不少内容,包括负载均衡的算法,负载均衡的实现方式,咱们须要了解它究竟是在哪一层实现的。

通常来讲,经常使用的负载均衡方式有nginx和lvs两种,分别是7层和4层的负载均衡,一个基于域名进行负载均衡,一个基于端口号作负载均衡。了解它们的实现原理,会让你更好地理解这部份内容。

4 分布式session和分布式锁

这两个组件也是分布式项目中常常要用到的,了解它们的使用和实现原理,有助于之后在项目中的实践。

分布式session通常有多种实现方式,能够存数据库或者缓存,也能够单独部署成一个服务,总之最重要的一点就是,性能要好,而且要高可用。

分布式锁则用于一些须要一致性的场景中,好比订单生成这种全局惟一的功能,分布式锁一般能够用缓存或者数据库来实现,但为了保证高性能,而且避免死锁,咱们通常采用Redis或者zookeeper来实现。

04

缓存

讲到缓存,咱们说的最多的就是Redis,因此咱们要讲的也是Redis。学习Redis,除了学会使用简单的api以外,最好还要了解它的实现原理。

推荐资源:个人技术博客专栏“从新学习MySQL和Redis”,《Redis设计与实现》

这里咱们主要介绍三部份内容,也是我我的认为比较重要的三块内容。

1 数据结构和底层实现

Redis的数据结构比较丰富,但更有意思的是这些数据结构背后的底层实现,也就是做者如何用c语言来实现这些结构的。其中会有你熟悉的数组,链表,还有一些有意思的结构好比跳表,哈希表。

2 持久化方式

持久化方式主要分两种,aof和rdb,前者基于追加日志的方式来实现日志持久化,后者则是使用备份数据的方式来实现持久化。

3 分布式方案

这是Redis最有趣也最复杂的部分。 首先,Redis可使用主从的方式部署,其中“哨兵”这一组件用于故障切换。

基于哨兵的主从部署后来发展为Redis cluster的部署方式,也就是Redis集群,经过分片的方式来部署Redis集群,而且集群中任一节点均可以用来对外提供服务。

固然,除了Redis集群以外,还有codis的分布式方案,codis基于代理的方式来实现,表面上仍是使用原来的Redis API,但实际上访问的倒是一个Redis集群。

05

消息队列

消息队列的做用通常来讲就是削峰,控流,解耦合,目前业界也有不少的消息队列产品,在不少公司都会使用,固然,它们各有各的优缺点,咱们也没必要全都了解,这里咱们大概介绍3种消息队列,它们各自的特色都比较鲜明,值得你们去了解一番。

1 RabbitMQ

笔者刚开始接触的消息队列是rabbitmq,它的使用方法比较简单。 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现,主要有如下特色:

1.  `安装部署简单,上手门槛低,功能丰富,符合AMQP标准;`

2.  `企业级消息队列,通过大量实践考验的高可靠;`

3.  `集群易扩展,能够轻松的增减集群节点;`

4.  `有强大的WEB管理页面。`

2 Kafka

与其余MQ相比较,Kafka有一些优缺点,主要以下

优势:

1.  `可扩展。Kafka集群能够透明的扩展,增长新的服务器进集群。`

2.  `高性能。Kafka性能远超过传统的ActiveMQ、RabbitMQ等,Kafka支持Batch操做。`

3.  `容错性。Kafka每一个Partition数据会复制到几台服务器,当某个Broker失效时,Zookeeper将通知生产者和消费者从而使用其余的Broker。`

缺点:

1.  `重复消息。Kafka保证每条消息至少送达一次,虽然概率很小,但一条消息可能被送达屡次。`

2.  `消息乱序。Kafka某一个固定的Partition内部的消息是保证有序的,若是一个Topic有多个Partition,partition之间的消息送达不保证有序。`

3.  `复杂性。Kafka须要Zookeeper的支持,Topic通常须要人工建立,部署和维护比通常MQ成本更高。`

RocketMQ

RocketMQ是一个纯java、分布式、队列模型的开源消息中间件,前身是Metaq,当 Metaq 3.0发布时,产品名称改成 RocketMQ。

具备如下特色:

1.  `一、可以保证严格的消息顺序`

2.  `二、提供丰富的消息拉取模式`

3.  `三、高效的订阅者水平扩展能力`

4.  `四、实时的消息订阅机制`

5.  `五、亿级消息堆积能力`

除此以外,它还有一个优势,就是支持事务消息,让分布式事务的实现变得简单

05

分布式数据库

这里说的分布式”数据库“,其实指的是数据库的分布式方案,更具体来讲,主要指的是数据库的主从部署,以及分库,分表。

1 主从复制和读写分离

这是数据库高可用的基础。MySQL数据库会使用日志来完成主从复制,先写主库,而后再同步到从库。读写分离则通常是指的是:从库负责读,主库负责写。

2 分库分表方案

分库分表是解决大表性能瓶颈的一种方法,固然也分为横向拆分和纵向拆分,横向拆分指的就是减小单表的数据量,放到其余表或者其余库中。纵向拆分则通常指按照业务来拆分,把没必要要的字段放到其余表中。

分库分表能够在应用层作,经过对id或者其余字段进行hash以便映射到对应的表中。固然也能够经过数据库中间件来完成,例如mycat这种中间件,经过代理的方式实现分库分表,很是方便。

06

大后端相关技术

这部分的内容笔者也只是略知一二,因此这里只是抛砖引玉,作一个简单的科普罢了。毕竟我们学技术的人都是先讲深度再来谈广度。当你对以前的内容掌握得比较好的时候,再去看看大后端的一些其余技术,也会感受挺有意思的。

下面这些技术主要是我本身学习路上接触过的一些内容,因此比较熟悉,才拿出来分享,至于适不适合你们的口味,可能就见仁见智了。

Hadoop生态

笔者以前参与过数据仓库相关的项目,因此稍微了解了这方面的内容,感受hadoop生态仍是挺有意思的。

你们不妨去了解一下其中的基本组件,而后打一个集群本身玩玩看。 常见的组件有:hdfs,hbase,hive,zookeeper,flume,sqoop,yarn。

推荐资源:个人技术博客-我的分类-hadoop,《大数据技术原理与应用》

对于入门hadoop生态来讲,这本书彻底足够了,若是你要作大数据平台开发或者是数据研发工程师,可能须要很是全面地了解这些组件的底层原理。

云计算初探

笔者以前参与过私有云相关的项目,因此稍微了解了这方面的内容,感受这方面的内容也蛮有趣的。

我在项目中主要接触到的是OpenStack,docker以及kubenetes,OpenStack是一个私有云生态,内部结构对于咱们来讲仍是比较复杂的,不过最根本的虚拟化技术仍是基于kvm虚拟化来实现的。

docker则是如今很是流行的一种容器,用于快速部署应用。

kubenetes也借着docker的东风火了起来,能够理解为是基于容器的分布式调度系统。

这些技术在企业中也是比较经常使用的,只不过对于研发同窗来讲,更多时候扮演的是工具的角色。

推荐资源:《Docker技术入门与实战》,《kubenetes权威指南》

其余常见后端技术

除此以外,想必你们还了解过不少其余的技术,只不过不一样的业务用到的组件每每不同,因此并非每一个东西你都须要去了解。

好比搜索引擎技术Lucene,基于它的两款产品solr和elasticsearch,一般出如今须要搜索功能的项目中。

再好比流式计算技术,如storm和spark streaming等等,一般都用于大数据部门,用做实时数据采集。

又如ELK实现的分布式日志系统,多用于分析和定位系统问题,常常会出如今一些比较重要的应用当中。

固然,也有如今大火的人工智能,还有太多的技术咱们没机会去了解和使用,咱们能作的也就是在本身能力范围内把须要作的东西作到最好了。

因此,这些内容并非每同样你都须要知道,可是若是有时间去了解一下的话,仍是建议多了解一点的。

总结

今天码的字有点多,因此不免有些写的不太好的地方,但愿你们见谅。纵观全文,咱们主要讲了这些内容:

1 Web架构

2 分布式基础理论

3 常见分布式技术

4 缓存

5 消息队列

6 数据的分布式方案

7 大后端相关技术

至此本系列文章就已经结束了,不知道你们有什么问题或者建议想和笔者交流吗~赶忙加个人微信来聊聊吧。

写本系列文章也是由于有不少朋友想要了解更加清晰的Java后端学习路线,因此我总结了以前本身的学习历程,才创做出这四篇文章,但愿可以对你们有所帮助~

微信公众号

我的公众号:黄小斜

黄小斜是跨考软件工程的 985 硕士,自学 Java 两年,拿到了 BAT 等近十家大厂 offer,从技术小白成长为阿里工程师。

做者专一于 JAVA 后端技术栈,热衷于分享程序员干货、学习经验、求职心得和程序人生,目前黄小斜的CSDN博客有百万+访问量,知乎粉丝2W+,全网已有10W+读者。

黄小斜是一个斜杠青年,坚持学习和写做,相信终身学习的力量,但愿和更多的程序员交朋友,一块儿进步和成长!

原创电子书:
关注公众号【黄小斜】后回复【原创电子书】便可领取我原创的电子书《菜鸟程序员修炼手册:从技术小白到阿里巴巴Java工程师》

程序员3T技术学习资源: 一些程序员学习技术的资源大礼包,关注公众号后,后台回复关键字 “资料” 便可免费无套路获取。

考研复习资料:
计算机考研大礼包,都是我本身考研复习时用的一些复习资料,包括公共课和专业的复习视频,这里也推荐给你们,关注公众号后,后台回复关键字 “考研” 便可免费获取。

技术公众号:Java技术江湖

若是你们想要实时关注我更新的文章以及分享的干货的话,能够关注个人公众号【Java技术江湖】一位阿里 Java 工程师的技术小站,做者黄小斜,专一 Java 相关技术:SSM、SpringBoot、MySQL、分布式、中间件、集群、Linux、网络、多线程,偶尔讲点Docker、ELK,同时也分享技术干货和学习经验,致力于Java全栈开发!

Java工程师必备学习资源: 一些Java工程师经常使用学习资源,关注公众号后,后台回复关键字 “Java” 便可免费无套路获取。

个人公众号

本文由博客一文多发平台 OpenWrite 发布!

相关文章
相关标签/搜索