溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java工程師學(xué)習(xí)指南(完結(jié)篇)

發(fā)布時(shí)間:2020-06-23 06:04:23 來(lái)源:網(wǎng)絡(luò) 閱讀:84 作者:程序員江湖 欄目:編程語(yǔ)言

Java工程師學(xué)習(xí)指南

完結(jié)篇

先聲明一點(diǎn),文章里面不會(huì)詳細(xì)到每一步怎么操作,只會(huì)提供大致的思路和方向,給大家以啟發(fā),如果真的要一步一步指導(dǎo)操作的話,那至少需要一本書(shū)的厚度啦。

因?yàn)楣P者還只是一名在校生,所以寫(xiě)的內(nèi)容主要還是針對(duì)Java初學(xué)者或者接觸Java后端不久的朋友,不適用于已經(jīng)工作多年的Java大佬們。所以本文中的方法不一定適合所有人,如有錯(cuò)誤還請(qǐng)諒解。

本期的內(nèi)容是系列文章的最后一部分內(nèi)容了。這個(gè)系列可能還有很多東西沒(méi)有說(shuō)清楚,也有很多內(nèi)容被忽略了。但是這些內(nèi)容也確實(shí)是筆者結(jié)合自己經(jīng)驗(yàn)總結(jié)而成的,希望能對(duì)大家有用 ~ 當(dāng)然如果有什么建議也可以隨時(shí)和筆者交流。

上期回顧

上期我們重點(diǎn)介紹了Java工程師進(jìn)階所需要掌握的一些技術(shù)內(nèi)容。特別對(duì)于即將參加校招的同學(xué)來(lái)說(shuō),最重要的也是這部分內(nèi)容,你需要了解JVM虛擬機(jī)原理,Java并發(fā)原理,并且熟悉JDK的部分源碼,了解這些API的底層實(shí)現(xiàn)。

之所以把這部分放在Java Web項(xiàng)目之后來(lái)講,是因?yàn)槲矣X(jué)得,一開(kāi)始做項(xiàng)目的時(shí)候你不可能已經(jīng)掌握好上述內(nèi)容了,所以你完全可以帶著問(wèn)題去做項(xiàng)目,再花時(shí)間去學(xué)習(xí)底層原理,這樣你可以很好地結(jié)合你之前實(shí)踐過(guò)的代碼去理解那些底層技術(shù)了。

本期主題

本期主要介紹的是Java后端技術(shù)比較“高端”的一些內(nèi)容,也就是我們經(jīng)常聊的分布式,架構(gòu),緩存,消息隊(duì)列等內(nèi)容,另外我們也會(huì)介紹一些大后端相關(guān)的技術(shù),比如云計(jì)算(OpenStack和docker),大數(shù)據(jù)(hadoop生態(tài)),以及一些常用的后端技術(shù)。

這些內(nèi)容其實(shí)離我們并不遠(yuǎn),只不過(guò)在平時(shí)的項(xiàng)目中可能用的比較少,所以作為學(xué)生黨一般也只能通過(guò)一些文章或者書(shū)本去學(xué)習(xí)理論知識(shí)。那么基于這么一個(gè)情況,我們來(lái)談?wù)勗趺磳W(xué)習(xí)這部分的內(nèi)容吧。

01

Web后端架構(gòu)

后端進(jìn)階第一步,先把Web架構(gòu)相關(guān)的技術(shù)學(xué)好吧,因?yàn)橹按蠹叶甲鲞^(guò)Java Web項(xiàng)目,想必對(duì)這塊內(nèi)容還是比較熟悉的吧。我們需要了解Web架構(gòu)演化的歷史,了解為什么要做服務(wù)器集群,為什么要用緩存,為什么要做拆分,做主從,以及為什么要有分布式。

推薦資源:《深入分析Java Web技術(shù)內(nèi)幕》,《大型網(wǎng)站技術(shù)架構(gòu)》

兩本都是阿里大佬出的書(shū),兩位都是淘寶系的技術(shù)大牛。前一本書(shū)主要講述的Java Web的一些技術(shù)基礎(chǔ),關(guān)于Web架構(gòu)的內(nèi)容比較少。

后一本則是李智慧大佬寫(xiě)的架構(gòu)科普書(shū)籍,用非常簡(jiǎn)單易懂的語(yǔ)言寫(xiě)出了大型Web項(xiàng)目架構(gòu)之美,分別著眼于高可用,高性能,高擴(kuò)展等方面講解了很多設(shè)計(jì)結(jié)構(gòu)的原則和方法。這本書(shū)應(yīng)該是Web架構(gòu)小白最好的入門書(shū)籍了。

02

分布式理論基礎(chǔ)

由于下面的內(nèi)容或多或少都會(huì)涉及到分布式相關(guān)的知識(shí),所以這一部分我們主要介紹一下有關(guān)分布式的基礎(chǔ)知識(shí)。筆者對(duì)分布式的學(xué)習(xí)主要也停留在理論上,所以這里講的也是一些理論的東西。

推薦資源:《從Paxos到zookeeper分布式一致性原理與實(shí)踐》,我的技術(shù)博客專欄“分布式系統(tǒng)理論與實(shí)踐”

這本書(shū)比較好地科普了分布式基礎(chǔ)知識(shí),也介紹了zookeeper的原理和使用。了解zookeeper是了解分布式技術(shù)很重要的一個(gè)環(huán)節(jié)。

1 CAP 和 BASE

談分布式就要談CAP,一致性,高可用,網(wǎng)絡(luò)分區(qū)容忍性為何只能三選二,為什么網(wǎng)絡(luò)分區(qū)容忍性必須要被考慮。CAP在實(shí)際應(yīng)用中真的可靠么?

BASE出現(xiàn)的原因,為什么BASE更容易實(shí)現(xiàn),更適合實(shí)際應(yīng)用,BASE可以通過(guò)哪些技術(shù)去實(shí)現(xiàn)呢?

2 一致性協(xié)議和算法

一致性協(xié)議也是分布式理論的一個(gè)重點(diǎn),2PC,3PC,分別指的是什么,其中分別有什么問(wèn)題。3PC解決了2PC的一個(gè)問(wèn)題,卻仍然不完美。

Paxos和Raft兩種一致性算法,顯然前者比后者復(fù)雜得多,但是Raft可能更加實(shí)用。為什么我們需要一致性算法,它們又有什么用呢。

3 分布式事務(wù)和最終一致性

分布式事務(wù)是一個(gè)復(fù)雜的概念,主要指分布式系統(tǒng)中需要強(qiáng)一致場(chǎng)景時(shí)所用到的事務(wù)。理解和實(shí)現(xiàn)它都不是簡(jiǎn)單的事情。

如果我們退而求其次,不要求強(qiáng)一致性,而選擇最終一致性,則可以用更加靈活的方案,比如事務(wù)消息。

常見(jiàn)分布式技術(shù)

推薦資源:《從Paxos到zookeeper分布式一致性原理與實(shí)踐》,我的技術(shù)博客專欄“分布式系統(tǒng)理論與實(shí)踐”,《深入理解Spring Cloud與微服務(wù)構(gòu)建》,《分布式服務(wù)框架原理與實(shí)踐》。

1 zookeeper

上文說(shuō)到zookeeper是分布式技術(shù)很重要的一塊內(nèi)容,這是因?yàn)閦ookeeper用于管理和協(xié)調(diào)分布式組件,雖然它出自hadoop生態(tài),卻用于很多應(yīng)用當(dāng)中,基本上有分布式的地方就有zk的存在。

簡(jiǎn)單說(shuō)來(lái),zk可以提供全局統(tǒng)一的節(jié)點(diǎn)樹(shù)結(jié)構(gòu),通過(guò)節(jié)點(diǎn)來(lái)管理資源,同時(shí)zk自身是使用集群方式部署的,所以保證自己是高可用的。根據(jù)這一特點(diǎn),它可以作為服務(wù)注冊(cè)中心,還可以實(shí)現(xiàn)分布式鎖等功能。

2 分布式服務(wù)

分布式服務(wù)是一個(gè)挺有意思的東西,也很常用,簡(jiǎn)單來(lái)說(shuō),就是把服務(wù)組件部署在不同節(jié)點(diǎn)上,通過(guò)rpc的方式訪問(wèn),為了實(shí)現(xiàn)這一功能,我們需要考慮通信協(xié)議,序列化方式,進(jìn)一步來(lái)說(shuō),我們還要了解如何做服務(wù)注冊(cè)和發(fā)現(xiàn),以及如何做限流,做服務(wù)熔斷和降級(jí),等等等等。

常見(jiàn)的分布式服務(wù)框架有dubbo,以及Spring Cloud這類產(chǎn)品,學(xué)會(huì)使用他們,然后了解它們的底層實(shí)現(xiàn)原理,相信會(huì)是一個(gè)很有趣的過(guò)程。

3 負(fù)載均衡

關(guān)于負(fù)載均衡,說(shuō)起來(lái)其實(shí)很簡(jiǎn)單,就是把一組請(qǐng)求分成多組,按照某種規(guī)則分發(fā)到多臺(tái)服務(wù)器上。

但是負(fù)載均衡也涉及很多內(nèi)容,包括負(fù)載均衡的算法,負(fù)載均衡的實(shí)現(xiàn)方式,我們需要了解它到底是在哪一層實(shí)現(xiàn)的。

一般來(lái)說(shuō),常用的負(fù)載均衡方式有nginx和lvs兩種,分別是7層和4層的負(fù)載均衡,一個(gè)基于域名進(jìn)行負(fù)載均衡,一個(gè)基于端口號(hào)做負(fù)載均衡。了解它們的實(shí)現(xiàn)原理,會(huì)讓你更好地理解這部分內(nèi)容。

4 分布式session和分布式鎖

這兩個(gè)組件也是分布式項(xiàng)目中經(jīng)常要用到的,了解它們的使用和實(shí)現(xiàn)原理,有助于以后在項(xiàng)目中的實(shí)踐。

分布式session一般有多種實(shí)現(xiàn)方式,可以存數(shù)據(jù)庫(kù)或者緩存,也可以單獨(dú)部署成一個(gè)服務(wù),總之最重要的一點(diǎn)就是,性能要好,并且要高可用。

分布式鎖則用于一些需要一致性的場(chǎng)景中,比如訂單生成這種全局唯一的功能,分布式鎖通??梢杂镁彺婊蛘邤?shù)據(jù)庫(kù)來(lái)實(shí)現(xiàn),但為了保證高性能,并且避免死鎖,我們一般采用Redis或者zookeeper來(lái)實(shí)現(xiàn)。

04

緩存

講到緩存,我們說(shuō)的最多的就是Redis,所以我們要講的也是Redis。學(xué)習(xí)Redis,除了學(xué)會(huì)使用簡(jiǎn)單的api之外,最好還要了解它的實(shí)現(xiàn)原理。

推薦資源:我的技術(shù)博客專欄“重新學(xué)習(xí)MySQL和Redis”,《Redis設(shè)計(jì)與實(shí)現(xiàn)》

這里我們主要介紹三部分內(nèi)容,也是我個(gè)人認(rèn)為比較重要的三塊內(nèi)容。

1 數(shù)據(jù)結(jié)構(gòu)和底層實(shí)現(xiàn)

Redis的數(shù)據(jù)結(jié)構(gòu)比較豐富,但更有意思的是這些數(shù)據(jù)結(jié)構(gòu)背后的底層實(shí)現(xiàn),也就是作者如何用c語(yǔ)言來(lái)實(shí)現(xiàn)這些結(jié)構(gòu)的。其中會(huì)有你熟悉的數(shù)組,鏈表,還有一些有意思的結(jié)構(gòu)比如跳表,哈希表。

2 持久化方式

持久化方式主要分兩種,aof和rdb,前者基于追加日志的方式來(lái)實(shí)現(xiàn)日志持久化,后者則是使用備份數(shù)據(jù)的方式來(lái)實(shí)現(xiàn)持久化。

3 分布式方案

這是Redis最有趣也最復(fù)雜的部分。 首先,Redis可以使用主從的方式部署,其中“哨兵”這一組件用于故障切換。

基于哨兵的主從部署后來(lái)發(fā)展為Redis cluster的部署方式,也就是Redis集群,通過(guò)分片的方式來(lái)部署Redis集群,并且集群中任一節(jié)點(diǎn)都可以用來(lái)對(duì)外提供服務(wù)。

當(dāng)然,除了Redis集群之外,還有codis的分布式方案,codis基于代理的方式來(lái)實(shí)現(xiàn),表面上還是使用原來(lái)的Redis API,但實(shí)際上訪問(wèn)的卻是一個(gè)Redis集群。

05

消息隊(duì)列

消息隊(duì)列的作用一般來(lái)說(shuō)就是削峰,控流,解耦合,目前業(yè)界也有很多的消息隊(duì)列產(chǎn)品,在很多公司都會(huì)使用,當(dāng)然,它們各有各的優(yōu)缺點(diǎn),我們也不必全都了解,這里我們大概介紹3種消息隊(duì)列,它們各自的特點(diǎn)都比較鮮明,值得大家去了解一番。

1 RabbitMQ

筆者剛開(kāi)始接觸的消息隊(duì)列是rabbitmq,它的使用方法比較簡(jiǎn)單。 RabbitMQ是一個(gè)由erlang開(kāi)發(fā)的AMQP(Advanced Message Queue )的開(kāi)源實(shí)現(xiàn),主要有以下特點(diǎn):

<pre>

  1. 安裝部署簡(jiǎn)單,上手門檻低,功能豐富,符合AMQP標(biāo)準(zhǔn);

  2. 企業(yè)級(jí)消息隊(duì)列,經(jīng)過(guò)大量實(shí)踐考驗(yàn)的高可靠;

  3. 集群易擴(kuò)展,可以輕松的增減集群節(jié)點(diǎn);

  4. 有強(qiáng)大的WEB管理頁(yè)面。

</pre>

2 Kafka

與其他MQ相比較,Kafka有一些優(yōu)缺點(diǎn),主要如下

優(yōu)點(diǎn):

<pre>

  1. 可擴(kuò)展。Kafka集群可以透明的擴(kuò)展,增加新的服務(wù)器進(jìn)集群。

  2. 高性能。Kafka性能遠(yuǎn)超過(guò)傳統(tǒng)的ActiveMQ、RabbitMQ等,Kafka支持Batch操作。

  3. 容錯(cuò)性。Kafka每個(gè)Partition數(shù)據(jù)會(huì)復(fù)制到幾臺(tái)服務(wù)器,當(dāng)某個(gè)Broker失效時(shí),Zookeeper將通知生產(chǎn)者和消費(fèi)者從而使用其他的Broker。

</pre>

缺點(diǎn):

<pre>

  1. 重復(fù)消息。Kafka保證每條消息至少送達(dá)一次,雖然幾率很小,但一條消息可能被送達(dá)多次。

  2. 消息亂序。Kafka某一個(gè)固定的Partition內(nèi)部的消息是保證有序的,如果一個(gè)Topic有多個(gè)Partition,partition之間的消息送達(dá)不保證有序。

  3. 復(fù)雜性。Kafka需要Zookeeper的支持,Topic一般需要人工創(chuàng)建,部署和維護(hù)比一般MQ成本更高。

</pre>

RocketMQ

RocketMQ是一個(gè)純java、分布式、隊(duì)列模型的開(kāi)源消息中間件,前身是Metaq,當(dāng) Metaq 3.0發(fā)布時(shí),產(chǎn)品名稱改為 RocketMQ。

具有以下特點(diǎn):

<pre>

  1. 1、能夠保證嚴(yán)格的消息順序

  2. 2、提供豐富的消息拉取模式

  3. 3、高效的訂閱者水平擴(kuò)展能力

  4. 4、實(shí)時(shí)的消息訂閱機(jī)制

  5. 5、億級(jí)消息堆積能力

</pre>

除此之外,它還有一個(gè)優(yōu)點(diǎn),就是支持事務(wù)消息,讓分布式事務(wù)的實(shí)現(xiàn)變得簡(jiǎn)單

05

分布式數(shù)據(jù)庫(kù)

這里說(shuō)的分布式”數(shù)據(jù)庫(kù)“,其實(shí)指的是數(shù)據(jù)庫(kù)的分布式方案,更具體來(lái)說(shuō),主要指的是數(shù)據(jù)庫(kù)的主從部署,以及分庫(kù),分表。

1 主從復(fù)制和讀寫(xiě)分離

這是數(shù)據(jù)庫(kù)高可用的基礎(chǔ)。MySQL數(shù)據(jù)庫(kù)會(huì)使用日志來(lái)完成主從復(fù)制,先寫(xiě)主庫(kù),然后再同步到從庫(kù)。讀寫(xiě)分離則一般是指的是:從庫(kù)負(fù)責(zé)讀,主庫(kù)負(fù)責(zé)寫(xiě)。

2 分庫(kù)分表方案

分庫(kù)分表是解決大表性能瓶頸的一種方法,當(dāng)然也分為橫向拆分和縱向拆分,橫向拆分指的就是減少單表的數(shù)據(jù)量,放到其他表或者其他庫(kù)中??v向拆分則一般指按照業(yè)務(wù)來(lái)拆分,把不必要的字段放到其他表中。

分庫(kù)分表可以在應(yīng)用層做,通過(guò)對(duì)id或者其他字段進(jìn)行hash以便映射到對(duì)應(yīng)的表中。當(dāng)然也可以通過(guò)數(shù)據(jù)庫(kù)中間件來(lái)完成,例如mycat這種中間件,通過(guò)代理的方式實(shí)現(xiàn)分庫(kù)分表,非常方便。

06

大后端相關(guān)技術(shù)

這部分的內(nèi)容筆者也只是略知一二,所以這里只是拋磚引玉,做一個(gè)簡(jiǎn)單的科普罷了。畢竟咱們學(xué)技術(shù)的人都是先講深度再來(lái)談廣度。當(dāng)你對(duì)之前的內(nèi)容掌握得比較好的時(shí)候,再去看看大后端的一些其他技術(shù),也會(huì)感覺(jué)挺有意思的。

下面這些技術(shù)主要是我自己學(xué)習(xí)路上接觸過(guò)的一些內(nèi)容,所以比較熟悉,才拿出來(lái)分享,至于適不適合大家的口味,可能就見(jiàn)仁見(jiàn)智了。

Hadoop生態(tài)

筆者之前參與過(guò)數(shù)據(jù)倉(cāng)庫(kù)相關(guān)的項(xiàng)目,所以稍微了解了這方面的內(nèi)容,感覺(jué)hadoop生態(tài)還是挺有意思的。

大家不妨去了解一下其中的基本組件,然后打一個(gè)集群自己玩玩看。 常見(jiàn)的組件有:hdfs,hbase,hive,zookeeper,flume,sqoop,yarn。

推薦資源:我的技術(shù)博客-個(gè)人分類-hadoop,《大數(shù)據(jù)技術(shù)原理與應(yīng)用》

對(duì)于入門hadoop生態(tài)來(lái)說(shuō),這本書(shū)完全足夠了,如果你要做大數(shù)據(jù)平臺(tái)開(kāi)發(fā)或者是數(shù)據(jù)研發(fā)工程師,可能需要非常全面地了解這些組件的底層原理。

云計(jì)算初探

筆者之前參與過(guò)私有云相關(guān)的項(xiàng)目,所以稍微了解了這方面的內(nèi)容,感覺(jué)這方面的內(nèi)容也蠻有趣的。

我在項(xiàng)目中主要接觸到的是OpenStack,docker以及kubenetes,OpenStack是一個(gè)私有云生態(tài),內(nèi)部結(jié)構(gòu)對(duì)于我們來(lái)說(shuō)還是比較復(fù)雜的,不過(guò)最根本的虛擬化技術(shù)還是基于kvm虛擬化來(lái)實(shí)現(xiàn)的。

docker則是現(xiàn)在非常流行的一種容器,用于快速部署應(yīng)用。

kubenetes也借著docker的東風(fēng)火了起來(lái),可以理解為是基于容器的分布式調(diào)度系統(tǒng)。

這些技術(shù)在企業(yè)中也是比較常用的,只不過(guò)對(duì)于研發(fā)同學(xué)來(lái)說(shuō),更多時(shí)候扮演的是工具的角色。

推薦資源:《Docker技術(shù)入門與實(shí)戰(zhàn)》,《kubenetes權(quán)威指南》

其他常見(jiàn)后端技術(shù)

除此之外,想必大家還了解過(guò)很多其他的技術(shù),只不過(guò)不同的業(yè)務(wù)用到的組件往往不一樣,所以并不是每個(gè)東西你都需要去了解。

比如搜索引擎技術(shù)Lucene,基于它的兩款產(chǎn)品solr和elasticsearch,通常出現(xiàn)在需要搜索功能的項(xiàng)目中。

再比如流式計(jì)算技術(shù),如storm和spark streaming等等,通常都用于大數(shù)據(jù)部門,用作實(shí)時(shí)數(shù)據(jù)采集。

又如ELK實(shí)現(xiàn)的分布式日志系統(tǒng),多用于分析和定位系統(tǒng)問(wèn)題,經(jīng)常會(huì)出現(xiàn)在一些比較重要的應(yīng)用當(dāng)中。

當(dāng)然,也有現(xiàn)在大火的人工智能,還有太多的技術(shù)我們沒(méi)機(jī)會(huì)去了解和使用,我們能做的也就是在自己能力范圍內(nèi)把需要做的東西做到最好了。

所以,這些內(nèi)容并不是每一樣你都需要知道,但是如果有時(shí)間去了解一下的話,還是建議多了解一點(diǎn)的。

總結(jié)

今天碼的字有點(diǎn)多,所以難免有些寫(xiě)的不太好的地方,希望大家見(jiàn)諒??v觀全文,我們主要講了這些內(nèi)容:

1 Web架構(gòu)

2 分布式基礎(chǔ)理論

3 常見(jiàn)分布式技術(shù)

4 緩存

5 消息隊(duì)列

6 數(shù)據(jù)的分布式方案

7 大后端相關(guān)技術(shù)

至此本系列文章就已經(jīng)結(jié)束了,不知道大家有什么問(wèn)題或者建議想和筆者交流嗎~趕緊加我的微信來(lái)聊聊吧。

寫(xiě)本系列文章也是因?yàn)橛泻芏嗯笥严胍私飧忧逦腏ava后端學(xué)習(xí)路線,所以我總結(jié)了之前自己的學(xué)習(xí)歷程,才創(chuàng)作出這四篇文章,希望能夠?qū)Υ蠹矣兴鶐椭鷡

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI