最近有不少小夥伴來問我,Java小白如何入門,如何安排學習路線,每一步應該怎麼走比較好。本來我覺得以前的幾篇文章已經能夠解決你們的問題了,其實否則,由於我以前寫的文章都是站在Java後端的全局上進行思考和總結的,忽略了不少小白們的感覺,而不少朋友都須要更加基礎,更加詳細的學習路線。java
因此,今天咱們從新開一個新的專題,分別按照四篇文章講述Java的學習路線(分別是入門篇,初級篇,中級篇,高級篇),筆者也打算趁此機會,回憶一下本身的Java學習歷程。今天咱們要講的是,小白同窗如何入門Java。nginx
先聲明一點,文章內容不會詳細到每一步怎麼操做,只會提供大體的思路和方向,給你們以啓發,若是真的要一步一步指導操做的話,那至少須要一本書的厚度啦。git
本文所述的方法不必定適合全部人,若有錯誤敬請諒解。程序員
https://github.com/h2pl/Java-Tutorialgithub
【Java工程師面試複習指南】本倉庫涵蓋大部分Java程序員所須要掌握的核心知識,整合了互聯網上的不少優質Java技術文章,力求打造爲最完整最實用的Java開發者學習指南,若是對你有幫助,給個star告訴我吧,謝謝!面試
這一步咱們每每會直接跳過,但既然是面向小白的教程,這裏就提一下吧。首先你須要一臺電腦,而後安裝好JDK和JRE,JDK提供的是Java開發工具,也就是一些必備的jar包,JRE則是Java的運行環境組件,咱們熟悉的JVM就在這裏面。算法
安裝好這兩個東東以後,通常還要配置一下環境變量,不然有一些目錄可能沒法被正確找到。spring
IDE指的就是本地開發編輯器,沒有了它,你就只能直接在記事本這類工具裏敲代碼了。IDE最大的好處就是整合了大量的工具和功能模塊,讓你很是輕鬆地完成開發。docker
之前你們都用eclipse,不過eclipse已經不流行了,如今我推薦你直接用intellij idea做爲你的第一個代碼編輯器。若是是用過eclipse的同窗,基本上也能夠無痛切換。數據庫
intellij idea能夠直接在官網上下載,試用版30天,若是想要永久使用,網上也有一些辦法滴。
jar包是什麼,其實就是將一堆class格式文件打包,Java中把它稱爲jar包,這些jar包在編譯器中能被直接識別,讓開發者使用。
對於新手來講,可能只須要用到JDK自帶的一些API,可是若是你要引用外部jar包,可能就會遇到一些困難了。對於idea來講,導入外部jar包有兩種辦法,一種是手動導入jar包,一種是使用maven。後者會在Java Web相關的文章中講起。
手動導入jar包其實也不難,你須要先下載好jar包,而後在對應的項目下選擇導入jar包便可,具體的方法這裏就不展開說了,由於在網上都找獲得。
學習一門語言,最開始要作的事情就是學習它的語法。我最先學習Java語法是在Runoob,這個網站可讓你對任意一門語言完成最快速的語法入門,固然,這只是至關於你瀏覽了一遍基礎語法。
想要真正掌握Java語言基礎,光看基礎語法還遠遠不夠,我在大三第一次接觸Java課程,聽老師講面向對象三大特徵聽得一頭霧水,連數組的初始化方式都理不清楚,但這些內容都是咱們須要掌握的。因此,爲了學好Java基礎,咱們還須要看視頻或者看書進行學習。
視頻的話,能夠到極客學院或者慕課網聽Java基礎課程,固然也能夠看我分享的Java視頻課程。你們也都知道,如今Java的培訓班很是多,基本上學的東西也都大同小異,不過它們的有些課程還不錯,你們有渠道的話也能夠去看一看。
看視頻的好處是你能夠更好地接收知識,同時也會耗費你更多實踐,因此,有時候你也能夠選擇看書。
看書的話,對於小白來講不推薦太複雜的書,好比《Java編程思想》這種書,新手千萬不要看。我我的建議,你只須要先看看《Java入門到精通》這種類型的書就足夠了,由於這個部分的學習只是爲你後面的學習開個頭,你之後可能還要回過頭來從新研究這些內容。
如今市面上介紹Java基礎的書籍實在太多了,質量良莠不齊,內容同質化嚴重,筆者看過的其實也很少。給你們一個建議,你只須要挑一兩本書來看便可,這裏推薦兩本最簡單的吧,《head first java》和《Java從入門到精通》。
這裏再推薦另外一種學習方式,就是看博客,博客比起書籍來講,更適合對於某個技術點的學習,你能夠很容易地在網上找到這個知識點相關的原理,實現方法,以及代碼範例。
個人博客裏沒有講解特別基礎的東西,若是你看一些比較基礎的文章,能夠到Runoob等網站上查看。若是你有一個很明確的知識點想要學習,相信搜搜引擎會給你更好的答案。
除此以外,通常的Java書籍或者視頻課程都會要求你相應完成一些練習題,這部份內容你須要本身在電腦裏使用IDE完成。
在IDE裏,你能夠很好地熟悉Java語言的使用,基本代碼的實現,同時能夠嘗試各類各樣的API,而且測試一些語言特性,好比繼承,封裝,多態等等。
另外,這也是你熟悉IDE的一個好機會,由於在公司裏作開發可能要用到IDE各類各樣的功能,提早熟悉好IDE絕對是有益無害的。
在Java入門階段,你可能須要接觸到如下這部分知識,無論你是從經過哪一種方式學習,這些內容都是你學習Java基礎時繞不過的重點。
這部份內容是你必需要掌握的內容,在入門階段你須要把這些基礎打紮實,以便於在學習後面的內容時能夠更上一層樓。
如何把基礎打紮實呢,最好的辦法就是在IDE上把書上或者視頻上的每一個例子都實現一遍,固然有的時候你也能夠本身寫一些有意思的例子。
1 基本數據類型
好比int,double,char,以及其包裝類。
熟悉基本數據類型的使用,瞭解每種類型所佔的字節數,以及它們和包裝類之間的相互轉換。
2 流程控制
好比for循環,if else,while循環等等
若是是學過c語言的同窗,這部分能夠跳過了。
3 字符串類型String的使用
字符串類型是Java中很重要的類型,它不是基本數據類型,但卻很經常使用,熟悉和實踐String相關的api,開始你對字符串的學習吧。
4 數組
數組的初始化方式有哪些,二維數組應該怎麼寫,把數組當成方法參數又該怎麼處理?
5 類和對象
Java中最重要的兩個概念:類和對象,它們有什麼用呢,有什麼區別和聯繫呢,請在代碼中實踐它們吧。
對於這部份內容,我相信不少小白只能瞭解它們的基本使用方法,可是並不明白其背後的一些原理:好比爲何接口和抽象類有這些區別,多態的意義是什麼,爲何要有反射。
新手在學習這部份內容時,只須要知道怎麼用就能夠了。固然,你最好把這些特性都實現一遍,以加深印象。
至於爲何有這些特性,這些特性背後的原理是什麼,不是咱們如今討論的內容,這些內容咱們將在初級和中級篇中講述。由於,要了解這些原理,你得了解JVM,瞭解併發技術的基礎,瞭解網絡基礎,甚至更多。顯然,這不是你如今能作到的。
1 接口和抽象類
寫一些接口,同時寫一些實現類去實現這些接口,而且瞭解一下爲何咱們須要接口,爲何子類須要實現接口裏的方法。
同理,去實現一些抽象類吧。而後,看看它和接口有什麼不一樣。
2 繼承,封裝和多態
如何理解繼承,子類和父類之間有什麼聯繫呢。
封裝是一種保護代碼的方式,有哪些方式能夠實現封裝呢。
多態通常分爲重載和重寫,它們分別怎麼使用?
3 異常處理
Java中的異常處理主要用於捕獲和處理錯誤,請你寫一些try catch代碼塊去捕獲錯誤吧。
4 集合類
集合類是咱們常常須要打交道的東西,List,Map,Set等等,趕快去熟悉API,而後寫一些測試例子吧。
5 IO輸入流和輸出流
IO輸入流和輸出流能夠操做文件,網絡數據等內容,如何在Java代碼中完成這麼複雜的操做呢,其實只須要簡單的幾個api就能夠了。
6 多線程
爲了讓系統資源最合理地分配和調度,咱們須要多線程,多線程會讓程序變得有趣,也會帶來不少問題,使用Thread和相關API,去嘗試這些有趣的事情吧。
1 反射(瞭解便可,不是入門必須)
2 枚舉類型和泛型(瞭解便可,不是入門必須)
3 網絡通訊(瞭解基本的socket使用便可,須要網絡基礎)
4 數據庫操做(瞭解基本的JDBC便可,須要數據庫基礎)
總而言之,對於一個Java小白來講,入門Java能夠分爲這幾步:
1 首先搭建好Java開發環境 2 經過Runoob等一些網站熟悉Java的基本語法 3 經過看書看視頻等方式熟悉Java基礎知識,經過代碼實踐加深理解 4 經過看書看視頻等方式初步瞭解Java核心技術,經過代碼實踐加深理解。
本文主要是爲你們提供一個學習的思路,以及推薦一些學習方法,若是你可以按照這樣的步驟去學習,而且配合上一些適合你本身的學習方法來完成學習計劃,相信你能夠很好地完成對Java的入門。
在上一小節中,咱們主要討論的是如何作一個Java Web項目,以及前期須要哪些方面的基礎。
跟着視頻課程作完一個項目,你只是照葫蘆畫瓢又練習了一遍,可能其中有不少東西你並不太理解,好比你可能不知道爲何代碼要分層,爲何要用maven進行線上編譯,爲何Tomcat啓動時會輸出那麼多的日誌。
有疑問很正常,由於一個Java Web項目涉及的技術仍是不少的,若是要理解這些技術的原理,光靠一個項目課程是遠遠不夠的。因此,在你體驗了Java Web項目的開發流程之後,你應該花些時間去了解相關技術原理了,今天咱們要講的也是這部份內容。
對於即將參加校招的同窗來講,最重要的也是這部份內容,你須要瞭解JVM虛擬機原理,Java併發原理,而且熟悉JDK的部分源碼,瞭解這些API的底層實現。除此以外,還有不少,下面咱們分別來談一談。
https://github.com/h2pl/Java-Tutorial
【Java工程師面試複習指南】本倉庫涵蓋大部分Java程序員所須要掌握的核心知識,整合了互聯網上的不少優質Java技術文章,力求打造爲最完整最實用的Java開發者學習指南,若是對你有幫助,給個star告訴我吧,謝謝!
若是你不是計算機專業的同窗,那你可能要注意一下了。在學習下面這些內容以前,你最好要學習一下計算機基礎課程。
這裏咱們說的計算機課程是:數據結構,操做系統,計算機網絡。
數據結構:這門課應該算是三門課程比較簡單的一門了,推薦《大話數據結構》,看書結合代碼實踐,把基本的數據結構算法寫一寫就能夠了。
操做系統:關於操做系統我看了不少本書,可是沒有感受特別好的,因此若是有時間的話能夠先看另一本書《深刻理解計算機系統》,這本書講了不少計算機的基本概念,不侷限於操做系統。
而後能夠看一看《操做系統導論》或者大家學校的教材。
計算機網絡:網絡方面的書也很是多,推薦看一下《計算機網絡:自頂向下方法》,另外還有一本《TCP/IP 詳解:卷一》也是備受推崇的書。
除此以外,我還要推薦一下劉欣老師的書 《碼農翻身》,書中用一些有趣的故事來說解操做系統和計算網絡的一些複雜概念,有助於你們理解這部份內容。
爲何把JVM放在第一位,由於它是最基礎也最重要的一塊內容。全部的Java代碼都運行在JVM上,事實上,JVM在操做系統中只是一個進程。爲了瞭解Java代碼的運行方式,底層引擎的執行原理,以及內存的分配狀況,咱們必需要學習JVM虛擬機。
推薦資源:《深刻理解JVM虛擬機》個人技術博客專欄「深刻了解JVM虛擬機」
很高興地告訴大家,學習JVM你只須要把這本書吃透便可,固然,看一遍可不夠,筆者先後至少看了三遍,有條件的話最好把書中的實例都跑一跑。
另外,JVM也是面試必考的內容,因此,相應地去準備一些面試題也是頗有必要的,若是你基本掌握了這本書的內容,相信你不會害怕任何JVM面試題。
爲何在這裏提到設計模式呢,由於設計模式是Java編程規範的經典總結,而且在JDK源碼中常用,因爲咱們後面會講到JDK源碼方面的學習,因此對於設計模式,建議你們先學習一下,最好的學習方式就是看書結合實踐,把一些經常使用的設計模式本身實現一下。
推薦資源:《head first 設計模式》
接下來下場的選手是:JDK源碼。不過對於大部分人來講,只要可以掌握集合類,字符串這些源碼就能夠了,其餘部分的源碼主要集中在JUC併發包裏,而這些內容咱們會放在Java併發技術裏來說。
爲何咱們須要掌握集合類源碼呢,其一是由於面試喜歡考,其二是由於集合類的源碼實現都比較經典,難度也不算太大,而且運用了不少優化方法,因此瞭解它對於學習Java的同窗來講大有裨益。
推薦資源
個人技術博客專欄「spring和springmvc源碼解析」
市面上並無哪本書專門來說JDK源碼的,因此這部份內容的學習資源主要是兩個部分,一是JDK源碼自己,而是一些技術博客。
1 對於JDK源碼,直接看可能比較有難度,不推薦新手這麼作。
2 講解源碼的文章質量良莠不齊,比較優質的文章能夠到掘金和開發者頭條看看,另外【JavaDoop】和【芋道源碼】等幾位老哥的源碼文章也很好
說實話,Spring源碼的複雜度遠高於集合類的源碼,這也是由於Spring運用了不少的設計模式,而且有着很是繁雜的類關係。因此,我不建議你們直接去讀Spring源碼,由於即便是看Spring源碼解析的書籍,你也會感到很吃力。
因此,我推薦的方式是,看書+看一些比較好的源碼解析文章。另外要告訴你們的是,Spring的源碼不少,並非全部內容都須要你掌握的,你們都知道Spring最經常使用的特性就是IOC和AOP,因此看源碼解析時,最重要的也是這兩個部分了。
另外,看完Spring的源碼解析之後,別忘了看SpringMVC的源碼解析,學習方法也是同樣的,找重點內容看便可。
推薦閱讀,個人技術博客專欄「Java併發編程技術「
相信你爲了搞定集合類源碼和Spring源碼花了很多功夫了,接下來輪到Java併發技術出場了。咱們在入門篇其實已經談到了多線程,可是也僅僅停留在使用Thread或者Runnable實現簡單的多線程demo。
實際上,爲了理解Java併發技術的底層實現,咱們還須要知道JMM模型,瞭解synchronized和volatile的底層實現,同時還要明白Java中的多線程和操做系統的多線程和什麼聯繫和區別。除此以外,咱們常常談到的線程安全,有哪些實現方法,也是這部份內容的要點。
學習併發技術,我建議分爲三個步驟
1 首先熟悉Java的多線程基礎知識,好比Thread的使用,線程的狀態轉換,以及一些api的使用方式。
2 瞭解一些理論基礎,好比JMM,操做系統的多線程實現。這部份內容推薦經過看書和看博客來學習。
3 瞭解並使用JUC的一些API,而後開始看JUC的一些源代碼。這個階段是最重要也是最困難的。
推薦閱讀,個人技術博客專欄「分佈式系統理論與實踐」
在搞懂Java併發編程技術以後,相信這部份內容也難不倒你。固然,前提是你對計算機網絡有必定了解,由於網絡編程涉及到TCP和HTTP相關的知識點。
在學習這部份內容的時候,你首先要了解socket的使用以及原理,而後再去了解NIO的相關API,多寫一些客戶端和服務端通信的demo,以便熟悉這些內容。爲了更好地理解網絡編程,你還要去了解UNIX網絡編程模型。
除此以外,若是你想要更好地理解Java網絡編程,你還須要去了解Tomcat的實現原理。同時,Netty也是值得你去學習的一部份內容,固然這頁是比較進階的內容了,有機會的話能夠去用一用這一網絡編程框架,學有餘力的同窗還能夠考慮看看它的源碼(筆者沒有看)。
Java的版本一直在更新,但目前在用的主要仍是Java8和Java7,等再過幾年可能這部分的內容就過期了。可是目前看來,對Java8的學習和了解仍是很重要的,畢竟面試也喜歡考。
對這部份內容學習的最好方式就是:看文章+代碼實踐
今天的內容貌似有點多,你們會不會感受有點吃不消呢。不要緊,由於這部份內容確實須要花不少時間去學習。對於一個在校的Java學習者來講,可能沒有機會接觸到多麼高大上的項目,因此對內功的修煉顯得格外重要。
看書,寫demo,讀源碼,看似簡單的事情實際上須要花費大量時間和精力,這個過程是須要你靜下心來,慢慢沉澱的,在學習的過程當中你也能夠和筆者同樣,寫一些總結和博客,以便更好地回顧本身的學習歷程。
總結如下今天所講的內容吧:
1 計算機基礎課程:數據結構,網絡和操做系統 2 JVM基本原理 3 設計模式,JDK源碼,Spring源碼 4 Java併發技術,JUC源碼 5 Java網絡編程 6 Java8
之因此把這部分放在Java Web項目以後來說,是由於我以爲,一開始作項目的時候你不可能已經掌握好上述內容了,因此你徹底能夠帶着問題去作項目,再花時間去學習底層原理,這樣你能夠很好地結合你以前實踐過的代碼去理解那些底層技術了。
本期主要介紹的是Java後端技術比較「高端」的一些內容,也就是咱們常常聊的分佈式,架構,緩存,消息隊列等內容,另外咱們也會介紹一些大後端相關的技術,好比雲計算(OpenStack和docker),大數據(hadoop生態),以及一些經常使用的後端技術。
這些內容其實離咱們並不遠,只不過在平時的項目中可能用的比較少,因此做爲學生黨通常也只能經過一些文章或者書本去學習理論知識。那麼基於這麼一個狀況,咱們來談談怎麼學習這部分的內容吧。
https://github.com/h2pl/Java-Tutorial
【Java工程師面試複習指南】本倉庫涵蓋大部分Java程序員所須要掌握的核心知識,整合了互聯網上的不少優質Java技術文章,力求打造爲最完整最實用的Java開發者學習指南,若是對你有幫助,給個star告訴我吧,謝謝!
後端進階第一步,先把Web架構相關的技術學好吧,由於以前你們都作過Java Web項目,想必對這塊內容仍是比較熟悉的吧。咱們須要瞭解Web架構演化的歷史,瞭解爲何要作服務器集羣,爲何要用緩存,爲何要作拆分,作主從,以及爲何要有分佈式。
推薦資源:《深刻分析Java Web技術內幕》,《大型網站技術架構》
兩本都是阿里大佬出的書,兩位都是淘寶系的技術大牛。前一本書主要講述的Java Web的一些技術基礎,關於Web架構的內容比較少。
後一本則是李智慧大佬寫的架構科普書籍,用很是簡單易懂的語言寫出了大型Web項目架構之美,分別着眼於高可用,高性能,高擴展等方面講解了不少設計結構的原則和方法。這本書應該是Web架構小白最好的入門書籍了。
因爲下面的內容或多或少都會涉及到分佈式相關的知識,因此這一部分咱們主要介紹一下有關分佈式的基礎知識。筆者對分佈式的學習主要也停留在理論上,因此這裏講的也是一些理論的東西。
推薦資源:《從Paxos到zookeeper分佈式一致性原理與實踐》 個人技術博客專欄「分佈式系統理論與實踐」
這本書比較好地科普了分佈式基礎知識,也介紹了zookeeper的原理和使用。瞭解zookeeper是瞭解分佈式技術很重要的一個環節。
談分佈式就要談CAP,一致性,高可用,網絡分區容忍性爲什麼只能三選二,爲何網絡分區容忍性必需要被考慮。CAP在實際應用中真的可靠麼?
BASE出現的緣由,爲何BASE更容易實現,更適合實際應用,BASE能夠經過哪些技術去實現呢?
一致性協議也是分佈式理論的一個重點,2PC,3PC,分別指的是什麼,其中分別有什麼問題。3PC解決了2PC的一個問題,卻仍然不完美。
Paxos和Raft兩種一致性算法,顯然前者比後者複雜得多,可是Raft可能更加實用。爲何咱們須要一致性算法,它們又有什麼用呢。
分佈式事務是一個複雜的概念,主要指分佈式系統中須要強一致場景時所用到的事務。理解和實現它都不是簡單的事情。
若是咱們退而求其次,不要求強一致性,而選擇最終一致性,則能夠用更加靈活的方案,好比事務消息。
推薦資源:《從Paxos到zookeeper分佈式一致性原理與實踐》,《深刻理解Spring Cloud與微服務構建》,《分佈式服務框架原理與實踐》。
推薦閱讀個人技術博客專欄「分佈式系統理論與實踐」
上文說到zookeeper是分佈式技術很重要的一塊內容,這是由於zookeeper用於管理和協調分佈式組件,雖然它出自hadoop生態,卻用於不少應用當中,基本上有分佈式的地方就有zk的存在。
簡單說來,zk能夠提供全局統一的節點樹結構,經過節點來管理資源,同時zk自身是使用集羣方式部署的,因此保證本身是高可用的。根據這一特色,它能夠做爲服務註冊中心,還能夠實現分佈式鎖等功能。
分佈式服務是一個挺有意思的東西,也很經常使用,簡單來講,就是把服務組件部署在不一樣節點上,經過rpc的方式訪問,爲了實現這一功能,咱們須要考慮通訊協議,序列化方式,進一步來講,咱們還要了解如何作服務註冊和發現,以及如何作限流,作服務熔斷和降級,等等等等。
常見的分佈式服務框架有dubbo,以及Spring Cloud這類產品,學會使用他們,而後瞭解它們的底層實現原理,相信會是一個頗有趣的過程。
關於負載均衡,提及來其實很簡單,就是把一組請求分紅多組,按照某種規則分發到多臺服務器上。
可是負載均衡也涉及不少內容,包括負載均衡的算法,負載均衡的實現方式,咱們須要瞭解它究竟是在哪一層實現的。
通常來講,經常使用的負載均衡方式有nginx和lvs兩種,分別是7層和4層的負載均衡,一個基於域名進行負載均衡,一個基於端口號作負載均衡。瞭解它們的實現原理,會讓你更好地理解這部份內容。
這兩個組件也是分佈式項目中常常要用到的,瞭解它們的使用和實現原理,有助於之後在項目中的實踐。
分佈式session通常有多種實現方式,能夠存數據庫或者緩存,也能夠單獨部署成一個服務,總之最重要的一點就是,性能要好,而且要高可用。
分佈式鎖則用於一些須要一致性的場景中,好比訂單生成這種全局惟一的功能,分佈式鎖一般能夠用緩存或者數據庫來實現,但爲了保證高性能,而且避免死鎖,咱們通常採用Redis或者zookeeper來實現。
講到緩存,咱們說的最多的就是Redis,因此咱們要講的也是Redis。學習Redis,除了學會使用簡單的api以外,最好還要了解它的實現原理。
推薦閱讀:個人技術博客專欄「從新學習MySQL和Redis」,《Redis設計與實現》
這裏咱們主要介紹三部份內容,也是我我的認爲比較重要的三塊內容。
Redis的數據結構比較豐富,但更有意思的是這些數據結構背後的底層實現,也就是做者如何用c語言來實現這些結構的。其中會有你熟悉的數組,鏈表,還有一些有意思的結構好比跳錶,哈希表。
持久化方式主要分兩種,aof和rdb,前者基於追加日誌的方式來實現日誌持久化,後者則是使用備份數據的方式來實現持久化。
這是Redis最有趣也最複雜的部分。 首先,Redis可使用主從的方式部署,其中「哨兵」這一組件用於故障切換。
基於哨兵的主從部署後來發展爲Redis cluster的部署方式,也就是Redis集羣,經過分片的方式來部署Redis集羣,而且集羣中任一節點均可以用來對外提供服務。
固然,除了Redis集羣以外,還有codis的分佈式方案,codis基於代理的方式來實現,表面上仍是使用原來的Redis API,但實際上訪問的倒是一個Redis集羣。
消息隊列的做用通常來講就是削峯,控流,解耦合,目前業界也有不少的消息隊列產品,在不少公司都會使用,固然,它們各有各的優缺點,咱們也沒必要全都瞭解,這裏咱們大概介紹3種消息隊列,它們各自的特色都比較鮮明,值得你們去了解一番。
筆者剛開始接觸的消息隊列是rabbitmq,它的使用方法比較簡單。 RabbitMQ是一個由erlang開發的AMQP(Advanced Message Queue )的開源實現
Kafka是由Apache軟件基金會開發的一個開源流處理平臺,由Scala和Java編寫。Kafka是一種高吞吐量的分佈式發佈訂閱消息系統,它能夠處理消費者在網站中的全部動做流數據。 這種
RocketMQ是一個純java、分佈式、隊列模型的開源消息中間件,前身是Metaq,當 Metaq 3.0發佈時,產品名稱改成 RocketMQ。
它支持事務消息,讓分佈式事務的實現變得簡單
這裏說的分佈式」數據庫「,其實指的是數據庫的分佈式方案,更具體來講,主要指的是數據庫的主從部署,以及分庫,分表。
這是數據庫高可用的基礎。MySQL數據庫會使用日誌來完成主從複製,先寫主庫,而後再同步到從庫。讀寫分離則通常是指的是:從庫負責讀,主庫負責寫。
分庫分表是解決大表性能瓶頸的一種方法,固然也分爲橫向拆分和縱向拆分,橫向拆分指的就是減小單表的數據量,放到其餘表或者其餘庫中。縱向拆分則通常指按照業務來拆分,把沒必要要的字段放到其餘表中。
分庫分表能夠在應用層作,經過對id或者其餘字段進行hash以便映射到對應的表中。固然也能夠經過數據庫中間件來完成,例如mycat這種中間件,經過代理的方式實現分庫分表,很是方便。
推薦閱讀個人技術博客專欄「後端技術雜談」
這部分的內容筆者也只是略知一二,因此這裏只是拋磚引玉,作一個簡單的科普罷了。畢竟我們學技術的人都是先講深度再來談廣度。當你對以前的內容掌握得比較好的時候,再去看看大後端的一些其餘技術,也會感受挺有意思的。
下面這些技術主要是我本身學習路上接觸過的一些內容,因此比較熟悉,纔拿出來分享,至於適不適合你們的口味,可能就見仁見智了。
筆者以前參與過數據倉庫相關的項目,因此稍微瞭解了這方面的內容,感受hadoop生態仍是挺有意思的。
你們不妨去了解一下其中的基本組件,而後打一個集羣本身玩玩看。 常見的組件有:hdfs,hbase,hive,zookeeper,flume,sqoop,yarn。
推薦:《大數據技術原理與應用》
對於入門hadoop生態來講,這本書徹底足夠了,若是你要作大數據平臺開發或者是數據研發工程師,可能須要很是全面地瞭解這些組件的底層原理。
筆者以前參與過私有云相關的項目,因此稍微瞭解了這方面的內容,感受這方面的內容也蠻有趣的。
我在項目中主要接觸到的是OpenStack,docker以及kubenetes,OpenStack是一個私有云生態,內部結構對於咱們來講仍是比較複雜的,不過最根本的虛擬化技術仍是基於kvm虛擬化來實現的。
docker則是如今很是流行的一種容器,用於快速部署應用。
kubenetes也藉着docker的東風火了起來,能夠理解爲是基於容器的分佈式調度系統。
這些技術在企業中也是比較經常使用的,只不過對於研發同窗來講,更多時候扮演的是工具的角色。
除此以外,想必你們還了解過不少其餘的技術,只不過不一樣的業務用到的組件每每不同,因此並非每一個東西你都須要去了解。
好比搜索引擎技術Lucene,基於它的兩款產品solr和elasticsearch,一般出如今須要搜索功能的項目中。
再好比流式計算技術,如storm和spark streaming等等,一般都用於大數據部門,用做實時數據採集。
又如ELK實現的分佈式日誌系統,多用於分析和定位系統問題,常常會出如今一些比較重要的應用當中。
固然,也有如今大火的人工智能,還有太多的技術咱們沒機會去了解和使用,咱們能作的也就是在本身能力範圍內把須要作的東西作到最好了。
因此,這些內容並非每同樣你都須要知道,可是若是有時間去了解一下的話,仍是建議多瞭解一點的。
今天碼的字有點多,因此不免有些寫的不太好的地方,但願你們見諒。縱觀全文,咱們主要講了這些內容:
1 Web架構 2 分佈式基礎理論 3 常見分佈式技術 4 緩存 5 消息隊列 6 數據的分佈式方案
至此本系列文章就已經結束了,不知道你們有什麼問題或者建議想和筆者交流嗎?
寫本系列文章也是由於有不少朋友想要了解更加清晰的Java後端學習路線,因此我總結了以前本身的學習歷程,才創做出這四篇文章,但願可以對你們有所幫助~
更多內容請關注微信公衆號【Java技術江湖】
一位阿里 Java 工程師的技術小站。做者黃小斜,專一 Java 相關技術:SSM、SpringBoot、MySQL、分佈式、中間件、集羣、Linux、網絡、多線程,偶爾講點Docker、ELK,同時也分享技術乾貨和學習經驗,致力於Java全棧開發!(關注公衆號後回覆」Java「便可領取 Java基礎、進階、項目和架構師等免費學習資料,更有數據庫、分佈式、微服務等熱門技術學習視頻,內容豐富,兼顧原理和實踐,另外也將贈送做者原創的Java學習指南、Java程序員面試指南等乾貨資源)