Java工程師學習指南

java學習指南-四個部分:分別是入門篇,初級篇,中級篇,高級篇前端

第一步是打好Java基礎,掌握Java核心技術,                                               ---入門篇
java

第二步是掌握Java Web技術棧,可以作一些項目,                                       ---初級篇
mysql

第三步是掌握Java方面的進階技術,包括網絡編程、併發編程、JVM等,     ---中級篇
nginx

第四步是掌握後端進階技術,好比分佈式、緩存、消息隊列等技術。              ---高級篇
面試

 

Java基礎知識:

1 基本數據類型算法

好比int,double,char,以及其包裝類。sql

熟悉基本數據類型的使用,瞭解每種類型所佔的字節數,以及它們和包裝類之間的相互轉換。docker

2 流程控制數據庫

好比for循環,if else,while循環等等編程

若是是學過c語言的同窗,這部分能夠跳過了。

3 字符串類型String的使用

字符串類型是Java中很重要的類型,它不是基本數據類型,但卻很經常使用,熟悉和實踐String相關的api,開始你對字符串的學習吧。

4 數組

數組的初始化方式有哪些,二維數組應該怎麼寫,把數組當成方法參數又該怎麼處理?

5 類和對象

Java中最重要的兩個概念:類和對象,它們有什麼用呢,有什麼區別和聯繫呢,請在代碼中實踐它們吧

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便可,須要數據庫基礎)

04 總結

對於一個Java小白來講,入門Java能夠分爲這幾步:

1 首先搭建好Java開發環境
2 經過Runoob等一些網站熟悉Java的基本語法
3 經過看書看視頻等方式熟悉Java基礎知識,經過代碼實踐加深理解 4 經過看書看視頻等方式初步瞭解Java核心技術,經過代碼實踐加深理解。

Java Web項目

Java Web經常使用技術

JavaWeb的技術棧其實比較龐大,因此咱們不要求面面俱到,只是但願你可以熟悉一下項目中可能用到的技術。下面列舉一些常見的技術,你們最好要了解一下。

1 JSP和Servlet

推薦資源:《JavaWeb入門到精通》,慕課網、極客學院等網站上的JavaWeb基礎課程

這是Java Web開發最原始的形態,如今不多直接使用了,可是後來的各類框架其實也是創建在servlet之上來作的。大家須要瞭解這兩個技術分別是用來幹什麼的,最好能寫一些demo來實踐。

對於JSP,有時候你可能還要學習jstl等標籤語言,由於這些標籤可讓你更方便地往JSP中插入Java代碼。

2 Spring和SpringMVC

推薦資源:《Spring實戰》,慕課網、極客學院等網站上的SpringMVC基礎課程。

事實上,除了上述資源以外,你也能夠直接到官網上查看快速開始文檔。

Struts2早已被時代拋棄,Spring則是當今的霸主,你須要瞭解Spring如何使用,以及SpringMVC如何使用,而且學會在項目中使用它。

因爲SpringBoot最近很火,而且搭建方式比SpringMVC更簡單,你也能夠先學習SpringBoot,以便更快速地搭建起你的第一個Java Web項目。

3 MySQL

推薦資源:《Sql必知必會》,Runoob上的MySQL基礎教程,慕課網、極客學院等網站上的視頻課程

一個JavaWeb應用必定要有數據啊,因此咱們須要用到數據庫,其實搭一個mysql數據庫是很是簡單的,可是對於初學者來講最麻煩的就是寫sql了,因此,先學會建表,熟悉sql,對你之後作項目也是大有裨益的。

4 Hibernate和Mybatis

推薦資源:Runoob上的Hibernate和Mybatis基礎教程,慕課網、極客學院等網站上的視頻課程

當你學會了使用sql去查詢數據,可能還不足以讓你在項目中很方便地處理數據,由於咱們還須要一個步驟,就是把數據庫的數據轉化成Java裏的對象。orm框架就是爲了解決這一問題而出現的,它可讓一張表和Java類一一對應,讓數據查詢變得很是方便。Hibernate和Mybatis都是orm框架,只不過如今mybatis愈來愈火了。

因此,你須要瞭解這一技術,由於它會普遍地運用到大部分Java Web項目中。

5 Maven

推薦資源:《maven實戰》,易百教程裏的maven教程,慕課網、極客學院等網站上的視頻課程

剛纔已經說過了Spring,orm框架,以及MySQL等方面的技術了。實際上,一個簡單的Java Web項目也只須要這些東西了。

可是,有一個問題,就是:一個項目裏用到這麼多技術,所須要的jar包也會不少,咱們如何管理這些jar包呢。若是直接導入所需jar包,那當jar包更新或者須要替換時,每次都要手動操做,很是麻煩。另外,當jar包不少時,項目打包後的war格式文件也會很大,不利於傳輸。

爲了解決上述問題,maven應運而生了。maven經過pom.xml文件來指定所需的jar包,而且自帶了不少構建相關的功能,好比編譯,打包,運行單元測試等等,由於它自己就是一個構建工具。

固然,新手可能還難以理解這些概念,你必需要知道的是,大部分Java Web項目須要用maven來管理,你須要學會maven的基本用法,最基本的用法就是:學會修改pom.xml文件。

6 Tomcat

推薦資源:慕課網、極客學院等網站上的視頻課程。

對於小白來講,Tomcat相關的技術是很是複雜的,畢竟它是一個應用服務器啊,事實上這個時候,你只須要學會如何安裝Tomcat便可。畢竟,它在項目中的做用就是提供一個運行環境而已。

正常來講,你只要下載解壓Tomcat的壓縮包便可。因爲如今的IDE都支持集成Tomcat,因此通常狀況下你均可以在IDE中配置好你的Tomcat路徑,而後設置好你的項目路徑,IDE會自動把你的工程代碼部署到Tomcat服務器上。

若是你使用想跳過IDE直接部署工程到Tomcat上,也能夠直接編譯工程而且打包獲得war格式的文件(這個步驟可使用maven來完成),而後拷貝war文件到Tomcat下的特定目錄便可。

上述兩種部署方式的詳細步驟請到搜索引擎尋找答案。

7 Git和GitHub

推薦資源:廖雪峯的Git教程,GitHub官網,慕課網、極客學院等網站上的視頻課程。

既然要作項目,爲何不把它發佈在GitHub上。當你熟悉了Git指令以後,你能夠很方便地發佈你項目中的每一次更新,而且同步到GitHub上,這樣既可讓你更好地管理項目版本,又可讓你GitHub更加活躍,爲你將來的面試加分。

因此,趕忙學好Git指令,而後開啓你的項目之旅吧。

04 其餘經常使用組件

除了上面幾種必備的技術以外,有時候咱們在項目中還會用到其餘東西,在這裏咱們把它們叫作組件。這裏只作簡單的介紹,至於具體怎麼使用,在網上均可以很容易地找到相關文章。

1 日誌系統

當項目代碼比較多的時候,容易發生錯誤,日誌能夠很好地記錄代碼運行時的錯誤,經常使用的日誌系統有log4j,logging等等,另外你還須要瞭解一下slf4j。

2 單元測試

日誌系統能夠記錄代碼問題,單元測試則是爲了不代碼出錯,經常使用的單元測試組件主要是JUnit,建議你找個文檔看一看,而後下載下來玩一下。

3 JSON

JSON逐漸成爲先後端數據交互的標準格式,爲了在項目中使用JSON的API,你也須要導入它的jar包,通常咱們都會使用阿里提供的fastjson,趕快下載來玩一玩吧。

固然,經常使用的Java Web組件還有不少,好比HTTPClient,再好比一些加密工具,一些壓縮工具等等,這裏就再也不一一列舉了。

5 總結

今天的內容就到這裏了,與其說是初級篇,反而更像是「項目篇」呢。由於學完基礎內容以後,作項目是最好的複習和實踐方式了。因此這篇文章圍繞着作項目來展開,也就不足爲奇了。

今天主要講的是,作好一個JavaWeb項目,須要哪些知識儲備,須要瞭解哪些技術,而且我也推薦一些比較精品的視頻課程。

1 Java基礎知識儲備 2 前端知識儲備 3 瞭解和使用JavaWeb經常使用技術 4 JavaWeb經常使用組件介紹
計算機基礎知識

JVM虛擬機

爲何把JVM放在第一位,由於它是最基礎也最重要的一塊內容。全部的Java代碼都運行在JVM上,事實上,JVM在操做系統中只是一個進程。爲了瞭解Java代碼的運行方式,底層引擎的執行原理,以及內存的分配狀況,咱們必需要學習JVM虛擬機。

推薦資源:《深刻理解JVM虛擬機》

很高興地告訴大家,學習JVM你只須要把這本書吃透便可,固然,看一遍可不夠,筆者先後至少看了三遍,有條件的話最好把書中的實例都跑一跑。

另外,JVM也是面試必考的內容,因此,相應地去準備一些面試題也是頗有必要的,若是你基本掌握了這本書的內容,相信你不會害怕任何JVM面試題。

03 設計模式與源碼閱讀

設計模式

爲何在這裏提到設計模式呢,由於設計模式是Java編程規範的經典總結,而且在JDK源碼中常用,因爲咱們後面會講到JDK源碼方面的學習,因此對於設計模式,建議你們先學習一下,最好的學習方式就是看書結合實踐,把一些經常使用的設計模式本身實現一下。

推薦資源:《head first 設計模式》

JDK源碼(主要指集合類源碼)

接下來下場的選手是:JDK源碼。不過對於大部分人來講,只要可以掌握集合類,字符串這些源碼就能夠了,其餘部分的源碼主要集中在JUC併發包裏,而這些內容咱們會放在Java併發技術裏來說。

爲何咱們須要掌握集合類源碼呢,其一是由於面試喜歡考,其二是由於集合類的源碼實現都比較經典,難度也不算太大,而且運用了不少優化方法,因此瞭解它對於學習Java的同窗來講大有裨益。

推薦資源

市面上並無哪本書專門來說JDK源碼的,因此這部份內容的學習資源主要是兩個部分,一是JDK源碼自己,而是一些技術博客。

1 對於JDK源碼,直接看可能比較有難度,不推薦新手這麼作。 2 講解源碼的文章質量良莠不齊,因此我只推薦幾個我本身比較熟悉的,一個是importnew。一個是個人博客。另外,我以前分享的一篇文章《你不可錯過的Java學習資源》中也推薦了不少大牛和博客,你們也能夠去看看。

Spring源碼

說實話,Spring源碼的複雜度遠高於集合類的源碼,這也是由於Spring運用了不少的設計模式,而且有着很是繁雜的類關係。因此,我不建議你們直接去讀Spring源碼,由於即便是看Spring源碼解析的書籍,你也會感到很吃力。

因此,我推薦的方式是,看書+看一些比較好的源碼解析文章。另外要告訴你們的是,Spring的源碼不少,並非全部內容都須要你掌握的,你們都知道Spring最經常使用的特性就是IOC和AOP,因此看源碼解析時,最重要的也是這兩個部分了。

另外,看完Spring的源碼解析之後,別忘了看SpringMVC的源碼解析,學習方法也是同樣的,找重點內容看便可。

推薦資源:《Spring源碼深度》

04 Java併發技術

Java併發技術

相信你爲了搞定集合類源碼和Spring源碼花了很多功夫了,接下來輪到Java併發技術出場了。咱們在入門篇其實已經談到了多線程,可是也僅僅停留在使用Thread或者Runnable實現簡單的多線程demo。

實際上,爲了理解Java併發技術的底層實現,咱們還須要知道JMM模型,瞭解synchronized和volatile的底層實現,同時還要明白Java中的多線程和操做系統的多線程和什麼聯繫和區別。除此以外,咱們常常談到的線程安全,有哪些實現方法,也是這部份內容的要點。

學習併發技術,我建議分爲三個步驟

1 首先熟悉Java的多線程基礎知識,好比Thread的使用,線程的狀態轉換,以及一些api的使用方式。 2 瞭解一些理論基礎,好比JMM,操做系統的多線程實現。這部份內容推薦經過看書和看博客來學習。 3 瞭解並使用JUC的一些API,而後開始看JUC的一些源代碼。這個階段是最重要也是最困難的。

推薦資源: 書籍:《Java併發編程藝術》,《Java併發編程實戰》 網站:個人博客專欄,併發編程網,importnew,《你不可錯過的Java學習資源》

05 Java網絡編程

Java網絡編程

在搞懂Java併發編程技術以後,相信這部份內容也難不倒你。固然,前提是你對計算機網絡有必定了解,由於網絡編程涉及到TCP和HTTP相關的知識點。

在學習這部份內容的時候,你首先要了解socket的使用以及原理,而後再去了解NIO的相關API,多寫一些客戶端和服務端通信的demo,以便熟悉這些內容。爲了更好地理解網絡編程,你還要去了解UNIX網絡編程模型。

除此以外,若是你想要更好地理解Java網絡編程,你還須要去了解Tomcat的實現原理。同時,Netty也是值得你去學習的一部份內容,最好有機會去用一用這一網絡編程框架,學有餘力的同窗還能夠考慮看看它的源碼(筆者沒有看)。

推薦資源:《Java網絡編程》,《你不可錯過的Java學習資源》

05 Java8

Java的版本一直在更新,但目前在用的主要仍是Java8和Java7,等再過幾年可能這部分的內容就過期了。可是目前看來,對Java8的學習和了解仍是很重要的,畢竟面試也喜歡考。

對這部份內容學習的最好方式就是:看文章+代碼實踐

推薦資源:《Java8實戰》

06 總結

今天的內容貌似有點多,你們會不會感受有點吃不消呢。不要緊,由於這部份內容確實須要花不少時間去學習。對於一個在校的Java學習者來講,可能沒有機會接觸到多麼高大上的項目,因此對內功的修煉顯得格外重要。

看書,寫demo,讀源碼,看似簡單的事情實際上須要花費大量時間和精力,這個過程是須要你靜下心來,慢慢沉澱的,在學習的過程當中你也能夠和筆者同樣,寫一些總結和博客,以便更好地回顧本身的學習歷程。

總結如下今天所講的內容吧:

1 計算機基礎課程:數據結構,網絡和操做系統 2 JVM基本原理 3 設計模式,JDK源碼,Spring源碼 4 Java併發技術,JUC源碼 5 Java網絡編程 6 Java8

完結篇

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 )的開源實現,主要有如下特色:

 
  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生態

 常見的組件有:hdfs,hbase,hive,zookeeper,flume,sqoop,yarn。

推薦資源:《大數據技術原理與應用》

對於入門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 大後端相關技術
相關文章
相關標籤/搜索