1. 程式人生 > >Java工程師學習指南

Java工程師學習指南

你在 方便 手動 負載均衡。 str 分布式服務 虛擬 3pc openstac

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

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

第二步是掌握Java Web技術棧,能夠做一些項目, ---初級篇

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

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

Java基礎知識:

1 基本數據類型

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

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

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. 1、能夠保證嚴格的消息順序
  2. 2、提供豐富的消息拉取模式
  3. 3、高效的訂閱者水平擴展能力
  4. 4、實時的消息訂閱機制
  5. 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 大後端相關技術

Java工程師學習指南