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

2023-06-18 0 339

Java技师自学指南

第一集

先新闻稿一点,该文里面不会详尽到每一步棋是不是操作方式,只会提供大体的路子和方向,给我们以启迪,假如真的要一步棋一步棋辅导操作方式的话,那至少须要一两本书的宽度啦。

因为本栏还只是一位在校学生,所以写的文本主要就还是特别针对Java新手或是碰触Java后端不久的朋友,呼吸困难用于早已工作多年的Java元老们。因此责任编辑中的方法不一定适宜其他人,如有严重错误还Couserans。

下期的文本是系列产品该文的最后一部分文本了。这个系列产品可能将还有许多东西没有说清楚,也有许多文本无关紧要。但是那些文本也确实是本栏紧密结合自己策尔纳而成的,希望能对我们管用 ~ 当然假如有什么建议也能即时和本栏沟通交流。

中金简述

中金他们重点如是说了Java技师高阶所须要掌控的许多控制技术文本。特别对于即将参加校招的老师来说,最重要的也是该些文本,你须要介绍JVM软件包基本原理,Javamammalian基本原理,并且熟识JDK的部分源标识符,介绍那些API的下层实现。

之因此把这部分放在Java Web工程项目之后来说,是因为我觉得,一开始做工程项目的时候你不可能将早已掌控好上述文本了,因此你完全能带着问题去做工程项目,再花时间去自学下层基本原理,这样你能较好地紧密结合你之前课堂教学过的标识符去认知那些下层控制技术了。

下期主轴

下期主要就如是说的是Java后端控制技术较为“中高档”的许多文本,也就是他们经常聊的分布式系统,构架,内存,消息堆栈等文本,另外他们也会如是说许多大上端相关的控制技术,比如云计算(OpenStack和docker),大数据(hadoop自然生态),以及许多常见的后端控制技术。

那些文本其实离他们并近在咫尺,或者说在平常的工程项目中可能将用的较为少,因此作为学生党一般也只能通过许多该文或是书柜去自学专业知识。那么基于这么一个情况,他们来聊聊是不是自学该些的文本吧。

01

Web后端构架

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 分布式系统事务和最终一致性

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

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

03

常见分布式系统控制技术

推荐资源:《从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 )的开源实现,主要就有以下特点:

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

企业级消息堆栈,经过大量课堂教学考验的高可靠;

集群易扩展,能轻松的增减集群节点;

有强大的WEB管理页面。

2 Kafka

与其他MQ相较为,Kafka有许多优缺点,主要就如下

优点:

可扩展。Kafka集群能透明的扩展,增加新的服务器进集群。

高性能。Kafka性能远超过传统的ActiveMQRabbitMQ等,Kafka支持Batch操作方式。

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

缺点:

重复消息。Kafka保证每条消息至少送达一次,虽然几率很小,但一条消息可能将被送达多次。

消息乱序。Kafka某一个固定的Partition内部的消息是保证有序的,假如一个Topic有多个Partitionpartition之间的消息送达不保证有序。

复杂性。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实现的分布式系统日志系统,多用于分析和定位系统问题,经常会出现在许多较为重要的应用当中。

当然,也有现在大火的人工智能,还有太多的控制技术他们没机会去介绍和使用,他们能做的也就是在自己能力范围内把须要做的东西做到最好了。

因此,那些文本并不是每一样你都须要知道,但是假如有时间去介绍一下的话,还是建议多介绍一点的。

07

总结

总结

今天码的字有点多,因此难免有些写的不太好的地方,希望我们见谅。纵观全文,他们主要就讲了那些文本:

1 Web构架

2 分布式系统基础理论

3 常见分布式系统控制技术

4 内存

5 消息堆栈

6 数据的分布式系统方案

7 大上端相关控制技术

至此本系列该文就早已结束了,不知道我们有什么问题或是建议想和本栏沟通交流吗~赶紧加我的微信来聊聊吧。

写本系列产品该文也是因为有许多朋友想要介绍更加清晰的Java后端自学路线,因此我总结了之前自己的自学历程,才创作出这四篇该文,希望能够对我们有所帮助~

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

— END —

想介绍Java后端自学路线?你只须要这一张图!Java技师修炼之路(校招总结)Java技师自学指南(入门篇)Java技师自学指南(初级篇)Java技师自学指南(中级篇)

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

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务