恰好我之前寫了四篇Java工程師學(xué)習(xí)指南,就用前兩篇的內(nèi)容來回答一下這個問題吧。我寫過一個Java工程師學(xué)習(xí)指南,我把它分為了四個部分,第一步是打好Java基礎(chǔ),掌握J(rèn)ava核心技術(shù),第二步是掌握J(rèn)ava Web技術(shù)棧,能夠做一些項目,第三步是掌握J(rèn)ava方面的進(jìn)階技術(shù),包括網(wǎng)絡(luò)編程、并發(fā)編程、JVM等,第四步是掌握后端進(jìn)階技術(shù),比如分布式、緩存、消息隊列等技術(shù)。按照這樣的一個脈絡(luò),我覺得能夠掌握這里面的絕大部分內(nèi)容,并且有過相應(yīng)的一些實踐,那么可以算是學(xué)好了Java。當(dāng)然,學(xué)好Java只是一個開始,要真的干好活,做好項目,以及其他各方面的技術(shù)工作,則是在學(xué)好Java的基礎(chǔ)去延伸和展開的。接下來就是具體的文章,建議大家按順序閱讀,有點(diǎn)長,收藏的時候記得點(diǎn)贊或者評論哈。筆芯!文中也多次提到了我的博客,這里放下我的博客地址 https://blog.csdn.net/a724888Java工程師學(xué)習(xí)指南入門篇最近有很多小伙伴來問我,Java小白如何入門,如何安排學(xué)習(xí)路線,每一步應(yīng)該怎么走比較好。原本我以為之前的幾篇文章已經(jīng)可以解決大家的問題了,其實不然,因為我之前寫的文章都是站在Java后端的全局上進(jìn)行思考和總結(jié)的,忽略了很多小白們的感受,而很多朋友都需要更加基礎(chǔ),更加詳細(xì)的學(xué)習(xí)路線。所以,今天我們重新開一個新的專題,分別按照四篇文章講述Java的學(xué)習(xí)路線(分別是入門篇,初級篇,中級篇,高級篇),筆者也打算趁此機(jī)會,回憶一下自己的Java學(xué)習(xí)歷程。今天我們要講的是,小白同學(xué)如何入門Java。先聲明一點(diǎn),文章內(nèi)容不會詳細(xì)到每一步怎么操作,只會提供大致的思路和方向,給大家以啟發(fā),如果真的要一步一步指導(dǎo)操作的話,那至少需要一本書的厚度啦。本文所述的方法不一定適合所有人,如有錯誤敬請諒解。01 前期準(zhǔn)備工作開發(fā)環(huán)境搭建這一步我們往往會直接跳過,但既然是面向小白的教程,這里就提一下吧。首先你需要一臺電腦,然后安裝好JDK和JRE,JDK提供的是Java開發(fā)工具,也就是一些必備的jar包,JRE則是Java的運(yùn)行環(huán)境組件,我們熟悉的JVM就在這里面。安裝好這兩個東東之后,一般還要配置一下環(huán)境變量,否則有一些目錄可能無法被正確找到。IDE選擇和安裝IDE指的就是本地開發(fā)編輯器,沒有了它,你就只能直接在記事本這類工具里敲代碼了。IDE最大的好處就是整合了大量的工具和功能模塊,讓你非常輕松地完成開發(fā)。以前大家都用eclipse,不過eclipse已經(jīng)不流行了,現(xiàn)在我推薦你直接用intellij idea作為你的第一個代碼編輯器。如果是用過eclipse的同學(xué),基本上也可以無痛切換。intellij idea可以直接在官網(wǎng)上下載,試用版30天,如果想要永久使用,網(wǎng)上也有一些辦法滴。關(guān)于jar包jar包是什么,其實就是將一堆class格式文件打包,Java中把它稱為jar包,這些jar包在編譯器中能被直接識別,讓開發(fā)者使用。對于新手來說,可能只需要用到JDK自帶的一些API,但是如果你要引用外部jar包,可能就會遇到一些困難了。對于idea來說,導(dǎo)入外部jar包有兩種辦法,一種是手動導(dǎo)入jar包,一種是使用maven。后者會在Java Web相關(guān)的文章中講起。手動導(dǎo)入jar包其實也不難,你需要先下載好jar包,然后在對應(yīng)的項目下選擇導(dǎo)入jar包即可,具體的方法這里就不展開說了,因為在網(wǎng)上都找得到。02 學(xué)習(xí)Java基礎(chǔ)的幾種方法了解基礎(chǔ)語法學(xué)習(xí)一門語言,最開始要做的事情就是學(xué)習(xí)它的語法。我最早學(xué)習(xí)Java語法是在Runoob,這個網(wǎng)站可以讓你對任意一門語言完成最快速的語法入門,當(dāng)然,這只是相當(dāng)于你瀏覽了一遍基礎(chǔ)語法。想要真正掌握J(rèn)ava語言基礎(chǔ),光看基礎(chǔ)語法還遠(yuǎn)遠(yuǎn)不夠,我在大三第一次接觸Java課程,聽老師講面向?qū)ο笕筇卣髀牭靡活^霧水,連數(shù)組的初始化方式都理不清楚,但這些內(nèi)容都是我們需要掌握的。所以,為了學(xué)好Java基礎(chǔ),我們還需要看視頻或者看書進(jìn)行學(xué)習(xí)。看視頻視頻的話,可以到極客學(xué)院或者慕課網(wǎng)聽Java基礎(chǔ)課程,當(dāng)然也可以看我分享的Java視頻課程。大家也都知道,現(xiàn)在Java的培訓(xùn)班非常多,基本上學(xué)的東西也都大同小異,不過它們的有些課程還不錯,大家有渠道的話也可以去看一看。看視頻的好處是你可以更好地接收知識,同時也會耗費(fèi)你更多實踐,所以,有時候你也可以選擇看書。看書看書的話,對于小白來說不推薦太復(fù)雜的書,比如《Java編程思想》這種書,新手千萬不要看。我個人建議,你只需要先看看《Java入門到精通》這種類型的書就足夠了,因為這個部分的學(xué)習(xí)只是為你后面的學(xué)習(xí)開個頭,你以后可能還要回過頭來重新研究這些內(nèi)容。現(xiàn)在市面上介紹Java基礎(chǔ)的書籍實在太多了,質(zhì)量參差不齊,內(nèi)容同質(zhì)化嚴(yán)重,筆者看過的其實也不多。給大家一個建議,你只需要挑一兩本書來看即可,這里推薦兩本最簡單的吧,《head first java》和《Java從入門到精通》。看博客這里再推薦另一種學(xué)習(xí)方式,就是看博客,博客比起書籍來說,更適合對于某個技術(shù)點(diǎn)的學(xué)習(xí),你可以很容易地在網(wǎng)上找到這個知識點(diǎn)相關(guān)的原理,實現(xiàn)方法,以及代碼范例。我的博客里沒有講解特別基礎(chǔ)的東西,如果你看一些比較基礎(chǔ)的文章,可以到Runoob等網(wǎng)站上查看。如果你有一個很明確的知識點(diǎn)想要學(xué)習(xí),相信搜搜引擎會給你更好的答案。代碼實踐除此之外,一般的Java書籍或者視頻課程都會要求你相應(yīng)完成一些練習(xí)題,這部分內(nèi)容你需要自己在電腦里使用IDE完成。在IDE里,你可以很好地熟悉Java語言的使用,基本代碼的實現(xiàn),同時可以嘗試各種各樣的API,并且測試一些語言特性,比如繼承,封裝,多態(tài)等等。另外,這也是你熟悉IDE的一個好機(jī)會,因為在公司里做開發(fā)可能要用到IDE各種各樣的功能,提前熟悉好IDE絕對是有益無害的。03 Java入門必備知識點(diǎn)梳理在Java入門階段,你可能需要接觸到以下這部分知識,不管你是從通過哪種方式學(xué)習(xí),這些內(nèi)容都是你學(xué)習(xí)Java基礎(chǔ)時繞不過的重點(diǎn)。Java基礎(chǔ)知識這部分內(nèi)容是你必須要掌握的內(nèi)容,在入門階段你需要把這些基礎(chǔ)打扎實,以便于在學(xué)習(xí)后面的內(nèi)容時可以更上一層樓。如何把基礎(chǔ)打扎實呢,最好的辦法就是在IDE上把書上或者視頻上的每個例子都實現(xiàn)一遍,當(dāng)然有的時候你也可以自己寫一些有意思的例子。1 基本數(shù)據(jù)類型比如int,double,char,以及其包裝類。熟悉基本數(shù)據(jù)類型的使用,了解每種類型所占的字節(jié)數(shù),以及它們和包裝類之間的相互轉(zhuǎn)換。2 流程控制比如for循環(huán),if else,while循環(huán)等等如果是學(xué)過c語言的同學(xué),這部分可以跳過了。3 字符串類型String的使用字符串類型是Java中很重要的類型,它不是基本數(shù)據(jù)類型,但卻很常用,熟悉和實踐String相關(guān)的api,開始你對字符串的學(xué)習(xí)吧。4 數(shù)組數(shù)組的初始化方式有哪些,二維數(shù)組應(yīng)該怎么寫,把數(shù)組當(dāng)成方法參數(shù)又該怎么處理?5 類和對象Java中最重要的兩個概念:類和對象,它們有什么用呢,有什么區(qū)別和聯(lián)系呢,請在代碼中實踐它們吧。Java核心技術(shù)對于這部分內(nèi)容,我相信很多小白只能了解它們的基本使用方法,但是并不明白其背后的一些原理:比如為什么接口和抽象類有這些區(qū)別,多態(tài)的意義是什么,為什么要有反射。新手在學(xué)習(xí)這部分內(nèi)容時,只需要知道怎么用就可以了。當(dāng)然,你最好把這些特性都實現(xiàn)一遍,以加深印象。至于為什么有這些特性,這些特性背后的原理是什么,不是我們現(xiàn)在討論的內(nèi)容,這些內(nèi)容我們將在初級和中級篇中講述。因為,要了解這些原理,你得了解JVM,了解并發(fā)技術(shù)的基礎(chǔ),了解網(wǎng)絡(luò)基礎(chǔ),甚至更多。顯然,這不是你現(xiàn)在能做到的。1 接口和抽象類寫一些接口,同時寫一些實現(xiàn)類去實現(xiàn)這些接口,并且了解一下為什么我們需要接口,為什么子類需要實現(xiàn)接口里的方法。同理,去實現(xiàn)一些抽象類吧。然后,看看它和接口有什么不同。2 繼承,封裝和多態(tài)如何理解繼承,子類和父類之間有什么聯(lián)系呢。封裝是一種保護(hù)代碼的方式,有哪些方式可以實現(xiàn)封裝呢。多態(tài)一般分為重載和重寫,它們分別怎么使用?3 異常處理Java中的異常處理主要用于捕獲和處理錯誤,請你寫一些try catch代碼塊去捕獲錯誤吧。4 集合類集合類是我們經(jīng)常需要打交道的東西,List,Map,Set等等,趕快去熟悉API,然后寫一些測試?yán)影伞? IO輸入流和輸出流IO輸入流和輸出流可以操作文件,網(wǎng)絡(luò)數(shù)據(jù)等內(nèi)容,如何在Java代碼中完成這么復(fù)雜的操作呢,其實只需要簡單的幾個api就可以了。6 多線程為了讓系統(tǒng)資源最合理地分配和調(diào)度,我們需要多線程,多線程會讓程序變得有趣,也會帶來很多問題,使用Thread和相關(guān)API,去嘗試這些有趣的事情吧。可選內(nèi)容:1 反射(了解即可,不是入門必須)2 枚舉類型和泛型(了解即可,不是入門必須)3 網(wǎng)絡(luò)通信(了解基本的socket使用即可,需要網(wǎng)絡(luò)基礎(chǔ))4 數(shù)據(jù)庫操作(了解基本的JDBC即可,需要數(shù)據(jù)庫基礎(chǔ))04 總結(jié)總而言之,對于一個Java小白來說,入門Java可以分為這幾步:1 首先搭建好Java開發(fā)環(huán)境 2 通過Runoob等一些網(wǎng)站熟悉Java的基本語法 3 通過看書看視頻等方式熟悉Java基礎(chǔ)知識,通過代碼實踐加深理解 4 通過看書看視頻等方式初步了解Java核心技術(shù),通過代碼實踐加深理解。
本文主要是為大家提供一個學(xué)習(xí)的思路,以及推薦一些學(xué)習(xí)方法,如果你能夠按照這樣的步驟去學(xué)習(xí),并且配合上一些適合你自己的學(xué)習(xí)方法來完成學(xué)習(xí)計劃,相信你可以很好地完成對Java的入門。
更多內(nèi)容請關(guān)注微信公眾號【Java技術(shù)江湖】一位阿里 Java 工程師的技術(shù)小站。作者黃小斜,專注 Java 相關(guān)技術(shù):SSM、SpringBoot、MySQL、分布式、中間件、集群、Linux、網(wǎng)絡(luò)、多線程,偶爾講點(diǎn)Docker、ELK,同時也分享技術(shù)干貨和學(xué)習(xí)經(jīng)驗,致力于Java全棧開發(fā)!(關(guān)注公眾號后回復(fù)”Java“即可領(lǐng)取 Java基礎(chǔ)、進(jìn)階、項目和架構(gòu)師等免費(fèi)學(xué)習(xí)資料,更有數(shù)據(jù)庫、分布式、微服務(wù)等熱門技術(shù)學(xué)習(xí)視頻,內(nèi)容豐富,兼顧原理和實踐,另外也將贈送作者原創(chuàng)的Java學(xué)習(xí)指南、Java程序員面試指南等干貨資源)Java工程師學(xué)習(xí)指南初級篇最近有很多小伙伴來問我,Java小白如何入門,如何安排學(xué)習(xí)路線,每一步應(yīng)該怎么走比較好。原本我以為之前的幾篇文章已經(jīng)可以解決大家的問題了,其實不然,因為我之前寫的文章都是站在Java后端的全局上進(jìn)行思考和總結(jié)的,忽略了很多小白們的感受,而很多朋友都需要更加基礎(chǔ),更加詳細(xì)的學(xué)習(xí)路線。所以,今天我們重新開一個新的專題,分別按照四篇文章講述Java的學(xué)習(xí)路線(分別是入門篇,初級篇,中級篇,高級篇),筆者也打算趁此機(jī)會,回憶一下自己的Java學(xué)習(xí)歷程。今天我們要講的是,小白同學(xué)如何入門Java。先聲明一點(diǎn),文章內(nèi)容不會詳細(xì)到每一步怎么操作,只會提供大致的思路和方向,給大家以啟發(fā),如果真的要一步一步指導(dǎo)操作的話,那至少需要一本書的厚度啦。本文所述的方法不一定適合所有人,如有錯誤敬請諒解。01 Java Web項目指南jav在上一篇文章中,我們講到了入門Java的幾個步驟,先搭建好環(huán)境,然后熟悉基本語法,接著熟悉Java的一些核心技術(shù),并且在代碼中進(jìn)行實現(xiàn)。如果你已經(jīng)完成了這部分內(nèi)容的學(xué)習(xí),應(yīng)該會感覺自己對Java已經(jīng)有一定了解了,可以輕松地寫出一些Java代碼,比如實現(xiàn)多線程輸出數(shù)字,再如操作IO流等等。當(dāng)然,這些代碼通常只是一些demo,我們在實際的項目中可能并不會這么簡單地使用這些技術(shù),我們可能會同時使用集合類,多線程,以及操作數(shù)據(jù)庫的API。所以,在今天的初級篇中,我們就來談?wù)勗趺醋鲰椖堪伞ava Web項目對于大部分Java新手來說,最適合他們?nèi)腴T的項目就是Java Web了。因為Java天然適合做Web應(yīng)用,并且生態(tài)完善,更有很多開源的工具和框架去支撐這些應(yīng)用,比如Spring,Hibernate,SpringMVC等等。那么,如何開始著手做一個Java Web項目呢。個人認(rèn)為最好的方式就是看視頻了。因為,看書的話,很多內(nèi)容比較過時,并且一般不會提供源代碼。也有一些大佬喜歡推薦開源的項目(在GitHub上面的項目),但是對于小白來說,如果沒有很完整的文檔去指導(dǎo)他們,那也是毫無意義的。曾幾何時,Java Web的項目還在使用JSP + Servlet進(jìn)行開發(fā),后來出現(xiàn)了Struts2,再后來,出現(xiàn)了我們現(xiàn)在也一直在用的SpringMVC,說實話,不論使用哪種開發(fā)框架,你都需要先花一些時間去學(xué)習(xí)相關(guān)的技術(shù),否則你會發(fā)現(xiàn),即使是看視頻,你也不知道里面在講什么。要想做好一個JavaWeb項目,你不僅需要一個好的項目課程,還需要足夠的知識儲備,下面就讓我們來理一理這些內(nèi)容把。知識儲備Java基礎(chǔ)部分的內(nèi)容咱們上次說過了,這里就不再重復(fù)啦~下面我們分別來說說其他幾方面的知識儲備把02 前端知識推薦資源:在w3cschool學(xué)習(xí)html,css和js,支持在線測試代碼。既然是做Web,就難免要涉及到前端技術(shù),不過,現(xiàn)在前后端分離已經(jīng)是一種趨勢,所以,如果你對前端不感興趣,也沒必要花太多時間去學(xué)習(xí)。對于大部分同學(xué)來說,你最好要了解html的基本標(biāo)簽和格式,自己能夠?qū)懸恍┖唵雾撁妫珻SS的話,也可以稍微接觸一些。相對于前面兩個服務(wù)于樣式的技術(shù),我們倒是更應(yīng)該去學(xué)習(xí)一下JavaScript,了解它的一些基本語法,以及ajax的使用,因為在前后端交互時,ajax是非常重要的。所以,做一個Java Web項目,你不需要花太多時間在寫前端頁面上,如果有源代碼可以直接使用,當(dāng)然,對于一些需要修改的前端頁面,你得怎么去做修改它,因為有時候你需要使用JSP,JSP既包括前端代碼也包括Java代碼,如果你完全看不懂前端代碼的話,那就很尷尬了。03 Java Web常用技術(shù)JavaWeb的技術(shù)棧其實比較龐大,所以我們不要求面面俱到,只是希望你能夠熟悉一下項目中可能用到的技術(shù)。下面列舉一些常見的技術(shù),大家最好要了解一下。1 JSP和Servlet推薦資源:《JavaWeb入門到精通》,慕課網(wǎng)、極客學(xué)院等網(wǎng)站上的JavaWeb基礎(chǔ)課程這是Java Web開發(fā)最原始的形態(tài),現(xiàn)在很少直接使用了,但是后來的各種框架其實也是建立在servlet之上來做的。你們需要了解這兩個技術(shù)分別是用來干什么的,最好能寫一些demo來實踐。對于JSP,有時候你可能還要學(xué)習(xí)jstl等標(biāo)簽語言,因為這些標(biāo)簽可以讓你更方便地往JSP中插入Java代碼。2 Spring和SpringMVC推薦資源:《Spring實戰(zhàn)》,慕課網(wǎng)、極客學(xué)院等網(wǎng)站上的SpringMVC基礎(chǔ)課程。事實上,除了上述資源之外,你也可以直接到官網(wǎng)上查看快速開始文檔。Struts2早已被時代拋棄,Spring則是當(dāng)今的霸主,你需要了解Spring如何使用,以及SpringMVC如何使用,并且學(xué)會在項目中使用它。由于SpringBoot最近很火,并且搭建方式比SpringMVC更簡單,你也可以先學(xué)習(xí)SpringBoot,以便更快速地搭建起你的第一個Java Web項目。3 MySQL推薦資源:《Sql必知必會》,Runoob上的MySQL基礎(chǔ)教程,慕課網(wǎng)、極客學(xué)院等網(wǎng)站上的視頻課程一個JavaWeb應(yīng)用一定要有數(shù)據(jù)啊,所以我們需要用到數(shù)據(jù)庫,其實搭一個mysql數(shù)據(jù)庫是非常簡單的,但是對于初學(xué)者來說最麻煩的就是寫sql了,所以,先學(xué)會建表,熟悉sql,對你以后做項目也是大有裨益的。4 Hibernate和Mybatis推薦資源:Runoob上的Hibernate和Mybatis基礎(chǔ)教程,慕課網(wǎng)、極客學(xué)院等網(wǎng)站上的視頻課程當(dāng)你學(xué)會了使用sql去查詢數(shù)據(jù),可能還不足以讓你在項目中很方便地處理數(shù)據(jù),因為我們還需要一個步驟,就是把數(shù)據(jù)庫的數(shù)據(jù)轉(zhuǎn)化成Java里的對象。orm框架就是為了解決這一問題而出現(xiàn)的,它可以讓一張表和Java類一一對應(yīng),讓數(shù)據(jù)查詢變得非常方便。Hibernate和Mybatis都是orm框架,只不過現(xiàn)在mybatis越來越火了。所以,你需要了解這一技術(shù),因為它會廣泛地運(yùn)用到大部分Java Web項目中。5 Maven推薦資源:《maven實戰(zhàn)》,易百教程里的maven教程,慕課網(wǎng)、極客學(xué)院等網(wǎng)站上的視頻課程剛才咱們已經(jīng)說過了Spring,orm框架,以及MySQL等方面的技術(shù)了。實際上,一個簡單的Java Web項目也只需要這些東西了。但是,有一個問題,就是:一個項目里用到這么多技術(shù),所需要的jar包也會很多,我們?nèi)绾喂芾磉@些jar包呢。如果直接導(dǎo)入所需jar包,那當(dāng)jar包更新或者需要替換時,每次都要手動操作,非常麻煩。另外,當(dāng)jar包很多時,項目打包后的war格式文件也會很大,不利于傳輸。為了解決上述問題,maven應(yīng)運(yùn)而生了。maven通過pom.xml文件來指定所需的jar包,并且自帶了很多構(gòu)建相關(guān)的功能,比如編譯,打包,運(yùn)行單元測試等等,因為它本身就是一個構(gòu)建工具。當(dāng)然,新手可能還難以理解這些概念,你必須要知道的是,大部分Java Web項目需要用maven來管理,你需要學(xué)會maven的基本用法,最基本的用法就是:學(xué)會修改pom.xml文件。6 Tomcat推薦資源:慕課網(wǎng)、極客學(xué)院等網(wǎng)站上的視頻課程。對于小白來說,Tomcat相關(guān)的技術(shù)是非常復(fù)雜的,畢竟它是一個應(yīng)用服務(wù)器啊,事實上這個時候,你只需要學(xué)會如何安裝Tomcat即可。畢竟,它在項目中的作用就是提供一個運(yùn)行環(huán)境而已。正常來說,你只要下載解壓Tomcat的壓縮包即可。由于現(xiàn)在的IDE都支持集成Tomcat,所以一般情況下你都可以在IDE中配置好你的Tomcat路徑,然后設(shè)置好你的項目路徑,IDE會自動把你的工程代碼部署到Tomcat服務(wù)器上。如果你使用想跳過IDE直接部署工程到Tomcat上,也可以直接編譯工程并且打包得到war格式的文件(這個步驟可以使用maven來完成),然后拷貝war文件到Tomcat下的特定目錄即可。上述兩種部署方式的詳細(xì)步驟請到搜索引擎尋找答案。7 Git和GitHub推薦資源:廖雪峰的Git教程,GitHub官網(wǎng),慕課網(wǎng)、極客學(xué)院等網(wǎng)站上的視頻課程。既然要做項目,為什么不把它發(fā)布在GitHub上。當(dāng)你熟悉了Git指令之后,你可以很方便地發(fā)布你項目中的每一次更新,并且同步到GitHub上,這樣既可以讓你更好地管理項目版本,又可以讓你GitHub更加活躍,為你未來的面試加分。所以,趕緊學(xué)好Git指令,然后開啟你的項目之旅吧。04 其他常用組件除了上面幾種必備的技術(shù)之外,有時候我們在項目中還會用到其他東西,在這里我們把它們叫做組件。這里只做簡單的介紹,至于具體怎么使用,在網(wǎng)上都可以很容易地找到相關(guān)文章。1 日志系統(tǒng)當(dāng)項目代碼比較多的時候,容易發(fā)生錯誤,日志可以很好地記錄代碼運(yùn)行時的錯誤,常用的日志系統(tǒng)有l(wèi)og4j,logging等等,另外你還需要了解一下slf4j。2 單元測試日志系統(tǒng)可以記錄代碼問題,單元測試則是為了避免代碼出錯,常用的單元測試組件主要是JUnit,建議你找個文檔看一看,然后下載下來玩一下。3 JSONJSON逐漸成為前后端數(shù)據(jù)交互的標(biāo)準(zhǔn)格式,為了在項目中使用JSON的API,你也需要導(dǎo)入它的jar包,一般我們都會使用阿里提供的fastjson,趕快下載來玩一玩吧。當(dāng)然,常用的Java Web組件還有很多,比如HTTPClient,再比如一些加密工具,一些壓縮工具等等,這里就不再一一列舉了。5 總結(jié)今天的內(nèi)容就到這里了,與其說是初級篇,反而更像是“項目篇”呢。因為學(xué)完基礎(chǔ)內(nèi)容之后,做項目是最好的復(fù)習(xí)和實踐方式了。所以這篇文章圍繞著做項目來展開,也就不足為奇了。今天我們主要講的是,做好一個JavaWeb項目,需要哪些知識儲備,需要了解哪些技術(shù),并且我也推薦一些比較精品的視頻課程。后面我還會寫一篇文章,專門講一講怎么做項目,會更加詳細(xì),更加側(cè)重怎么去做,敬請期待吧。總結(jié)以下今天說的幾個要點(diǎn)吧:1 Java基礎(chǔ)知識儲備 2 前端知識儲備 3 了解和使用JavaWeb常用技術(shù) 4 JavaWeb常用組件介紹 5 視頻課程推薦俗話說的好,磨刀不誤砍柴工,相信你看了本文之后,可以更好地做好知識儲備,然后開始Java Web的項目實踐,希望你能夠順利地完成你的第一個項目。筆者在今年秋招中成功拿到BAT頭條網(wǎng)易等大廠的研發(fā)offer,期間總結(jié)了很多經(jīng)驗和技巧,我把它們寫成文字,做成專題,發(fā)表在公眾號上,希望讓更多有需要的朋友看到。關(guān)注微信公眾號【Java技術(shù)江湖】后,可以在后臺回復(fù)“資料”即可領(lǐng)取3T精品學(xué)習(xí)資源(不斷更新中,不止是Java方向哦),學(xué)習(xí)資源包括基礎(chǔ),實戰(zhàn)以及求職等內(nèi)容。我寫過一個Java工程師學(xué)習(xí)指南,我把它分為了四個部分,第一步是打好Java基礎(chǔ),掌握J(rèn)ava核心技術(shù),第二步是掌握J(rèn)ava Web技術(shù)棧,能夠做一些項目,第三步是掌握J(rèn)ava方面的進(jìn)階技術(shù),包括網(wǎng)絡(luò)編程、并發(fā)編程、JVM等,第四步是掌握后端進(jìn)階技術(shù),比如分布式、緩存、消息隊列等技術(shù)。按照這樣的一個脈絡(luò),我覺得能夠掌握這里面的絕大部分內(nèi)容,并且有過相應(yīng)的一些實踐,那么可以算是學(xué)好了Java。當(dāng)然,學(xué)好Java只是一個開始,要真的干好活,做好項目,以及其他各方面的技術(shù)工作,則是在學(xué)好Java的基礎(chǔ)去延伸和展開的。接下來就是具體的文章,建議大家按順序閱讀,有點(diǎn)長,收藏的時候記得點(diǎn)贊或者評論哈。筆芯!Java工程師學(xué)習(xí)指南入門篇最近有很多小伙伴來問我,Java小白如何入門,如何安排學(xué)習(xí)路線,每一步應(yīng)該怎么走比較好。原本我以為之前的幾篇文章已經(jīng)可以解決大家的問題了,其實不然,因為我之前寫的文章都是站在Java后端的全局上進(jìn)行思考和總結(jié)的,忽略了很多小白們的感受,而很多朋友都需要更加基礎(chǔ),更加詳細(xì)的學(xué)習(xí)路線。所以,今天我們重新開一個新的專題,分別按照四篇文章講述Java的學(xué)習(xí)路線(分別是入門篇,初級篇,中級篇,高級篇),筆者也打算趁此機(jī)會,回憶一下自己的Java學(xué)習(xí)歷程。今天我們要講的是,小白同學(xué)如何入門Java。先聲明一點(diǎn),文章內(nèi)容不會詳細(xì)到每一步怎么操作,只會提供大致的思路和方向,給大家以啟發(fā),如果真的要一步一步指導(dǎo)操作的話,那至少需要一本書的厚度啦。本文所述的方法不一定適合所有人,如有錯誤敬請諒解。01 前期準(zhǔn)備工作開發(fā)環(huán)境搭建這一步我們往往會直接跳過,但既然是面向小白的教程,這里就提一下吧。首先你需要一臺電腦,然后安裝好JDK和JRE,JDK提供的是Java開發(fā)工具,也就是一些必備的jar包,JRE則是Java的運(yùn)行環(huán)境組件,我們熟悉的JVM就在這里面。安裝好這兩個東東之后,一般還要配置一下環(huán)境變量,否則有一些目錄可能無法被正確找到。IDE選擇和安裝IDE指的就是本地開發(fā)編輯器,沒有了它,你就只能直接在記事本這類工具里敲代碼了。IDE最大的好處就是整合了大量的工具和功能模塊,讓你非常輕松地完成開發(fā)。以前大家都用eclipse,不過eclipse已經(jīng)不流行了,現(xiàn)在我推薦你直接用intellij idea作為你的第一個代碼編輯器。如果是用過eclipse的同學(xué),基本上也可以無痛切換。intellij idea可以直接在官網(wǎng)上下載,試用版30天,如果想要永久使用,網(wǎng)上也有一些辦法滴。關(guān)于jar包jar包是什么,其實就是將一堆class格式文件打包,Java中把它稱為jar包,這些jar包在編譯器中能被直接識別,讓開發(fā)者使用。對于新手來說,可能只需要用到JDK自帶的一些API,但是如果你要引用外部jar包,可能就會遇到一些困難了。對于idea來說,導(dǎo)入外部jar包有兩種辦法,一種是手動導(dǎo)入jar包,一種是使用maven。后者會在Java Web相關(guān)的文章中講起。手動導(dǎo)入jar包其實也不難,你需要先下載好jar包,然后在對應(yīng)的項目下選擇導(dǎo)入jar包即可,具體的方法這里就不展開說了,因為在網(wǎng)上都找得到。02 學(xué)習(xí)Java基礎(chǔ)的幾種方法了解基礎(chǔ)語法學(xué)習(xí)一門語言,最開始要做的事情就是學(xué)習(xí)它的語法。我最早學(xué)習(xí)Java語法是在Runoob,這個網(wǎng)站可以讓你對任意一門語言完成最快速的語法入門,當(dāng)然,這只是相當(dāng)于你瀏覽了一遍基礎(chǔ)語法。想要真正掌握J(rèn)ava語言基礎(chǔ),光看基礎(chǔ)語法還遠(yuǎn)遠(yuǎn)不夠,我在大三第一次接觸Java課程,聽老師講面向?qū)ο笕筇卣髀牭靡活^霧水,連數(shù)組的初始化方式都理不清楚,但這些內(nèi)容都是我們需要掌握的。所以,為了學(xué)好Java基礎(chǔ),我們還需要看視頻或者看書進(jìn)行學(xué)習(xí)。看視頻視頻的話,可以到極客學(xué)院或者慕課網(wǎng)聽Java基礎(chǔ)課程,當(dāng)然也可以看我分享的Java視頻課程。大家也都知道,現(xiàn)在Java的培訓(xùn)班非常多,基本上學(xué)的東西也都大同小異,不過它們的有些課程還不錯,大家有渠道的話也可以去看一看。看視頻的好處是你可以更好地接收知識,同時也會耗費(fèi)你更多實踐,所以,有時候你也可以選擇看書。看書看書的話,對于小白來說不推薦太復(fù)雜的書,比如《Java編程思想》這種書,新手千萬不要看。我個人建議,你只需要先看看《Java入門到精通》這種類型的書就足夠了,因為這個部分的學(xué)習(xí)只是為你后面的學(xué)習(xí)開個頭,你以后可能還要回過頭來重新研究這些內(nèi)容。現(xiàn)在市面上介紹Java基礎(chǔ)的書籍實在太多了,質(zhì)量參差不齊,內(nèi)容同質(zhì)化嚴(yán)重,筆者看過的其實也不多。給大家一個建議,你只需要挑一兩本書來看即可,這里推薦兩本最簡單的吧,《head first java》和《Java從入門到精通》。看博客這里再推薦另一種學(xué)習(xí)方式,就是看博客,博客比起書籍來說,更適合對于某個技術(shù)點(diǎn)的學(xué)習(xí),你可以很容易地在網(wǎng)上找到這個知識點(diǎn)相關(guān)的原理,實現(xiàn)方法,以及代碼范例。我的博客里沒有講解特別基礎(chǔ)的東西,如果你看一些比較基礎(chǔ)的文章,可以到Runoob等網(wǎng)站上查看。如果你有一個很明確的知識點(diǎn)想要學(xué)習(xí),相信搜搜引擎會給你更好的答案。代碼實踐除此之外,一般的Java書籍或者視頻課程都會要求你相應(yīng)完成一些練習(xí)題,這部分內(nèi)容你需要自己在電腦里使用IDE完成。在IDE里,你可以很好地熟悉Java語言的使用,基本代碼的實現(xiàn),同時可以嘗試各種各樣的API,并且測試一些語言特性,比如繼承,封裝,多態(tài)等等。另外,這也是你熟悉IDE的一個好機(jī)會,因為在公司里做開發(fā)可能要用到IDE各種各樣的功能,提前熟悉好IDE絕對是有益無害的。03 Java入門必備知識點(diǎn)梳理在Java入門階段,你可能需要接觸到以下這部分知識,不管你是從通過哪種方式學(xué)習(xí),這些內(nèi)容都是你學(xué)習(xí)Java基礎(chǔ)時繞不過的重點(diǎn)。Java基礎(chǔ)知識這部分內(nèi)容是你必須要掌握的內(nèi)容,在入門階段你需要把這些基礎(chǔ)打扎實,以便于在學(xué)習(xí)后面的內(nèi)容時可以更上一層樓。如何把基礎(chǔ)打扎實呢,最好的辦法就是在IDE上把書上或者視頻上的每個例子都實現(xiàn)一遍,當(dāng)然有的時候你也可以自己寫一些有意思的例子。1 基本數(shù)據(jù)類型比如int,double,char,以及其包裝類。熟悉基本數(shù)據(jù)類型的使用,了解每種類型所占的字節(jié)數(shù),以及它們和包裝類之間的相互轉(zhuǎn)換。2 流程控制比如for循環(huán),if else,while循環(huán)等等如果是學(xué)過c語言的同學(xué),這部分可以跳過了。3 字符串類型String的使用字符串類型是Java中很重要的類型,它不是基本數(shù)據(jù)類型,但卻很常用,熟悉和實踐String相關(guān)的api,開始你對字符串的學(xué)習(xí)吧。4 數(shù)組數(shù)組的初始化方式有哪些,二維數(shù)組應(yīng)該怎么寫,把數(shù)組當(dāng)成方法參數(shù)又該怎么處理?5 類和對象Java中最重要的兩個概念:類和對象,它們有什么用呢,有什么區(qū)別和聯(lián)系呢,請在代碼中實踐它們吧。Java核心技術(shù)對于這部分內(nèi)容,我相信很多小白只能了解它們的基本使用方法,但是并不明白其背后的一些原理:比如為什么接口和抽象類有這些區(qū)別,多態(tài)的意義是什么,為什么要有反射。新手在學(xué)習(xí)這部分內(nèi)容時,只需要知道怎么用就可以了。當(dāng)然,你最好把這些特性都實現(xiàn)一遍,以加深印象。至于為什么有這些特性,這些特性背后的原理是什么,不是我們現(xiàn)在討論的內(nèi)容,這些內(nèi)容我們將在初級和中級篇中講述。因為,要了解這些原理,你得了解JVM,了解并發(fā)技術(shù)的基礎(chǔ),了解網(wǎng)絡(luò)基礎(chǔ),甚至更多。顯然,這不是你現(xiàn)在能做到的。1 接口和抽象類寫一些接口,同時寫一些實現(xiàn)類去實現(xiàn)這些接口,并且了解一下為什么我們需要接口,為什么子類需要實現(xiàn)接口里的方法。同理,去實現(xiàn)一些抽象類吧。然后,看看它和接口有什么不同。2 繼承,封裝和多態(tài)如何理解繼承,子類和父類之間有什么聯(lián)系呢。封裝是一種保護(hù)代碼的方式,有哪些方式可以實現(xiàn)封裝呢。多態(tài)一般分為重載和重寫,它們分別怎么使用?3 異常處理Java中的異常處理主要用于捕獲和處理錯誤,請你寫一些try catch代碼塊去捕獲錯誤吧。4 集合類集合類是我們經(jīng)常需要打交道的東西,List,Map,Set等等,趕快去熟悉API,然后寫一些測試?yán)影伞? IO輸入流和輸出流IO輸入流和輸出流可以操作文件,網(wǎng)絡(luò)數(shù)據(jù)等內(nèi)容,如何在Java代碼中完成這么復(fù)雜的操作呢,其實只需要簡單的幾個api就可以了。6 多線程為了讓系統(tǒng)資源最合理地分配和調(diào)度,我們需要多線程,多線程會讓程序變得有趣,也會帶來很多問題,使用Thread和相關(guān)API,去嘗試這些有趣的事情吧。可選內(nèi)容:1 反射(了解即可,不是入門必須)2 枚舉類型和泛型(了解即可,不是入門必須)3 網(wǎng)絡(luò)通信(了解基本的socket使用即可,需要網(wǎng)絡(luò)基礎(chǔ))4 數(shù)據(jù)庫操作(了解基本的JDBC即可,需要數(shù)據(jù)庫基礎(chǔ))04 總結(jié)總而言之,對于一個Java小白來說,入門Java可以分為這幾步:1 首先搭建好Java開發(fā)環(huán)境 2 通過Runoob等一些網(wǎng)站熟悉Java的基本語法 3 通過看書看視頻等方式熟悉Java基礎(chǔ)知識,通過代碼實踐加深理解 4 通過看書看視頻等方式初步了解Java核心技術(shù),通過代碼實踐加深理解。本文主要是為大家提供一個學(xué)習(xí)的思路,以及推薦一些學(xué)習(xí)方法,如果你能夠按照這樣的步驟去學(xué)習(xí),并且配合上一些適合你自己的學(xué)習(xí)方法來完成學(xué)習(xí)計劃,相信你可以很好地完成對Java的入門。Java工程師學(xué)習(xí)指南初級篇最近有很多小伙伴來問我,Java小白如何入門,如何安排學(xué)習(xí)路線,每一步應(yīng)該怎么走比較好。原本我以為之前的幾篇文章已經(jīng)可以解決大家的問題了,其實不然,因為我之前寫的文章都是站在Java后端的全局上進(jìn)行思考和總結(jié)的,忽略了很多小白們的感受,而很多朋友都需要更加基礎(chǔ),更加詳細(xì)的學(xué)習(xí)路線。所以,今天我們重新開一個新的專題,分別按照四篇文章講述Java的學(xué)習(xí)路線(分別是入門篇,初級篇,中級篇,高級篇),筆者也打算趁此機(jī)會,回憶一下自己的Java學(xué)習(xí)歷程。今天我們要講的是,小白同學(xué)如何入門Java。先聲明一點(diǎn),文章內(nèi)容不會詳細(xì)到每一步怎么操作,只會提供大致的思路和方向,給大家以啟發(fā),如果真的要一步一步指導(dǎo)操作的話,那至少需要一本書的厚度啦。本文所述的方法不一定適合所有人,如有錯誤敬請諒解。01 Java Web項目指南jav在上一篇文章中,我們講到了入門Java的幾個步驟,先搭建好環(huán)境,然后熟悉基本語法,接著熟悉Java的一些核心技術(shù),并且在代碼中進(jìn)行實現(xiàn)。如果你已經(jīng)完成了這部分內(nèi)容的學(xué)習(xí),應(yīng)該會感覺自己對Java已經(jīng)有一定了解了,可以輕松地寫出一些Java代碼,比如實現(xiàn)多線程輸出數(shù)字,再如操作IO流等等。當(dāng)然,這些代碼通常只是一些demo,我們在實際的項目中可能并不會這么簡單地使用這些技術(shù),我們可能會同時使用集合類,多線程,以及操作數(shù)據(jù)庫的API。所以,在今天的初級篇中,我們就來談?wù)勗趺醋鲰椖堪伞ava Web項目對于大部分Java新手來說,最適合他們?nèi)腴T的項目就是Java Web了。因為Java天然適合做Web應(yīng)用,并且生態(tài)完善,更有很多開源的工具和框架去支撐這些應(yīng)用,比如Spring,Hibernate,SpringMVC等等。那么,如何開始著手做一個Java Web項目呢。個人認(rèn)為最好的方式就是看視頻了。因為,看書的話,很多內(nèi)容比較過時,并且一般不會提供源代碼。也有一些大佬喜歡推薦開源的項目(在GitHub上面的項目),但是對于小白來說,如果沒有很完整的文檔去指導(dǎo)他們,那也是毫無意義的。曾幾何時,Java Web的項目還在使用JSP + Servlet進(jìn)行開發(fā),后來出現(xiàn)了Struts2,再后來,出現(xiàn)了我們現(xiàn)在也一直在用的SpringMVC,說實話,不論使用哪種開發(fā)框架,你都需要先花一些時間去學(xué)習(xí)相關(guān)的技術(shù),否則你會發(fā)現(xiàn),即使是看視頻,你也不知道里面在講什么。要想做好一個JavaWeb項目,你不僅需要一個好的項目課程,還需要足夠的知識儲備,下面就讓我們來理一理這些內(nèi)容把。知識儲備Java基礎(chǔ)部分的內(nèi)容咱們上次說過了,這里就不再重復(fù)啦~下面我們分別來說說其他幾方面的知識儲備把02 前端知識推薦資源:在w3cschool學(xué)習(xí)html,css和js,支持在線測試代碼。既然是做Web,就難免要涉及到前端技術(shù),不過,現(xiàn)在前后端分離已經(jīng)是一種趨勢,所以,如果你對前端不感興趣,也沒必要花太多時間去學(xué)習(xí)。對于大部分同學(xué)來說,你最好要了解html的基本標(biāo)簽和格式,自己能夠?qū)懸恍┖唵雾撁妫珻SS的話,也可以稍微接觸一些。相對于前面兩個服務(wù)于樣式的技術(shù),我們倒是更應(yīng)該去學(xué)習(xí)一下JavaScript,了解它的一些基本語法,以及ajax的使用,因為在前后端交互時,ajax是非常重要的。所以,做一個Java Web項目,你不需要花太多時間在寫前端頁面上,如果有源代碼可以直接使用,當(dāng)然,對于一些需要修改的前端頁面,你得怎么去做修改它,因為有時候你需要使用JSP,JSP既包括前端代碼也包括Java代碼,如果你完全看不懂前端代碼的話,那就很尷尬了。03 Java Web常用技術(shù)JavaWeb的技術(shù)棧其實比較龐大,所以我們不要求面面俱到,只是希望你能夠熟悉一下項目中可能用到的技術(shù)。下面列舉一些常見的技術(shù),大家最好要了解一下。1 JSP和Servlet推薦資源:《JavaWeb入門到精通》,慕課網(wǎng)、極客學(xué)院等網(wǎng)站上的JavaWeb基礎(chǔ)課程這是Java Web開發(fā)最原始的形態(tài),現(xiàn)在很少直接使用了,但是后來的各種框架其實也是建立在servlet之上來做的。你們需要了解這兩個技術(shù)分別是用來干什么的,最好能寫一些demo來實踐。對于JSP,有時候你可能還要學(xué)習(xí)jstl等標(biāo)簽語言,因為這些標(biāo)簽可以讓你更方便地往JSP中插入Java代碼。2 Spring和SpringMVC推薦資源:《Spring實戰(zhàn)》,慕課網(wǎng)、極客學(xué)院等網(wǎng)站上的SpringMVC基礎(chǔ)課程。事實上,除了上述資源之外,你也可以直接到官網(wǎng)上查看快速開始文檔。Struts2早已被時代拋棄,Spring則是當(dāng)今的霸主,你需要了解Spring如何使用,以及SpringMVC如何使用,并且學(xué)會在項目中使用它。由于SpringBoot最近很火,并且搭建方式比SpringMVC更簡單,你也可以先學(xué)習(xí)SpringBoot,以便更快速地搭建起你的第一個Java Web項目。3 MySQL推薦資源:《Sql必知必會》,Runoob上的MySQL基礎(chǔ)教程,慕課網(wǎng)、極客學(xué)院等網(wǎng)站上的視頻課程一個JavaWeb應(yīng)用一定要有數(shù)據(jù)啊,所以我們需要用到數(shù)據(jù)庫,其實搭一個mysql數(shù)據(jù)庫是非常簡單的,但是對于初學(xué)者來說最麻煩的就是寫sql了,所以,先學(xué)會建表,熟悉sql,對你以后做項目也是大有裨益的。4 Hibernate和Mybatis推薦資源:Runoob上的Hibernate和Mybatis基礎(chǔ)教程,慕課網(wǎng)、極客學(xué)院等網(wǎng)站上的視頻課程當(dāng)你學(xué)會了使用sql去查詢數(shù)據(jù),可能還不足以讓你在項目中很方便地處理數(shù)據(jù),因為我們還需要一個步驟,就是把數(shù)據(jù)庫的數(shù)據(jù)轉(zhuǎn)化成Java里的對象。orm框架就是為了解決這一問題而出現(xiàn)的,它可以讓一張表和Java類一一對應(yīng),讓數(shù)據(jù)查詢變得非常方便。Hibernate和Mybatis都是orm框架,只不過現(xiàn)在mybatis越來越火了。所以,你需要了解這一技術(shù),因為它會廣泛地運(yùn)用到大部分Java Web項目中。5 Maven推薦資源:《maven實戰(zhàn)》,易百教程里的maven教程,慕課網(wǎng)、極客學(xué)院等網(wǎng)站上的視頻課程剛才咱們已經(jīng)說過了Spring,orm框架,以及MySQL等方面的技術(shù)了。實際上,一個簡單的Java Web項目也只需要這些東西了。但是,有一個問題,就是:一個項目里用到這么多技術(shù),所需要的jar包也會很多,我們?nèi)绾喂芾磉@些jar包呢。如果直接導(dǎo)入所需jar包,那當(dāng)jar包更新或者需要替換時,每次都要手動操作,非常麻煩。另外,當(dāng)jar包很多時,項目打包后的war格式文件也會很大,不利于傳輸。為了解決上述問題,maven應(yīng)運(yùn)而生了。maven通過pom.xml文件來指定所需的jar包,并且自帶了很多構(gòu)建相關(guān)的功能,比如編譯,打包,運(yùn)行單元測試等等,因為它本身就是一個構(gòu)建工具。當(dāng)然,新手可能還難以理解這些概念,你必須要知道的是,大部分Java Web項目需要用maven來管理,你需要學(xué)會maven的基本用法,最基本的用法就是:學(xué)會修改pom.xml文件。6 Tomcat推薦資源:慕課網(wǎng)、極客學(xué)院等網(wǎng)站上的視頻課程。對于小白來說,Tomcat相關(guān)的技術(shù)是非常復(fù)雜的,畢竟它是一個應(yīng)用服務(wù)器啊,事實上這個時候,你只需要學(xué)會如何安裝Tomcat即可。畢竟,它在項目中的作用就是提供一個運(yùn)行環(huán)境而已。正常來說,你只要下載解壓Tomcat的壓縮包即可。由于現(xiàn)在的IDE都支持集成Tomcat,所以一般情況下你都可以在IDE中配置好你的Tomcat路徑,然后設(shè)置好你的項目路徑,IDE會自動把你的工程代碼部署到Tomcat服務(wù)器上。如果你使用想跳過IDE直接部署工程到Tomcat上,也可以直接編譯工程并且打包得到war格式的文件(這個步驟可以使用maven來完成),然后拷貝war文件到Tomcat下的特定目錄即可。上述兩種部署方式的詳細(xì)步驟請到搜索引擎尋找答案。7 Git和GitHub推薦資源:廖雪峰的Git教程,GitHub官網(wǎng),慕課網(wǎng)、極客學(xué)院等網(wǎng)站上的視頻課程。既然要做項目,為什么不把它發(fā)布在GitHub上。當(dāng)你熟悉了Git指令之后,你可以很方便地發(fā)布你項目中的每一次更新,并且同步到GitHub上,這樣既可以讓你更好地管理項目版本,又可以讓你GitHub更加活躍,為你未來的面試加分。所以,趕緊學(xué)好Git指令,然后開啟你的項目之旅吧。04 其他常用組件除了上面幾種必備的技術(shù)之外,有時候我們在項目中還會用到其他東西,在這里我們把它們叫做組件。這里只做簡單的介紹,至于具體怎么使用,在網(wǎng)上都可以很容易地找到相關(guān)文章。1 日志系統(tǒng)當(dāng)項目代碼比較多的時候,容易發(fā)生錯誤,日志可以很好地記錄代碼運(yùn)行時的錯誤,常用的日志系統(tǒng)有l(wèi)og4j,logging等等,另外你還需要了解一下slf4j。2 單元測試日志系統(tǒng)可以記錄代碼問題,單元測試則是為了避免代碼出錯,常用的單元測試組件主要是JUnit,建議你找個文檔看一看,然后下載下來玩一下。3 JSONJSON逐漸成為前后端數(shù)據(jù)交互的標(biāo)準(zhǔn)格式,為了在項目中使用JSON的API,你也需要導(dǎo)入它的jar包,一般我們都會使用阿里提供的fastjson,趕快下載來玩一玩吧。當(dāng)然,常用的Java Web組件還有很多,比如HTTPClient,再比如一些加密工具,一些壓縮工具等等,這里就不再一一列舉了。5 總結(jié)今天的內(nèi)容就到這里了,與其說是初級篇,反而更像是“項目篇”呢。因為學(xué)完基礎(chǔ)內(nèi)容之后,做項目是最好的復(fù)習(xí)和實踐方式了。所以這篇文章圍繞著做項目來展開,也就不足為奇了。今天我們主要講的是,做好一個JavaWeb項目,需要哪些知識儲備,需要了解哪些技術(shù),并且我也推薦一些比較精品的視頻課程。后面我還會寫一篇文章,專門講一講怎么做項目,會更加詳細(xì),更加側(cè)重怎么去做,敬請期待吧。總結(jié)以下今天說的幾個要點(diǎn)吧:1 Java基礎(chǔ)知識儲備 2 前端知識儲備 3 了解和使用JavaWeb常用技術(shù) 4 JavaWeb常用組件介紹 5 視頻課程推薦俗話說的好,磨刀不誤砍柴工,相信你看了本文之后,可以更好地做好知識儲備,然后開始Java Web的項目實踐,希望你能夠順利地完成你的第一個項目。Java工程師學(xué)習(xí)指南中級篇最近有很多小伙伴來問我,Java小白如何入門,如何安排學(xué)習(xí)路線,每一步應(yīng)該怎么走比較好。原本我以為之前的幾篇文章已經(jīng)可以解決大家的問題了,其實不然,因為我寫的文章都是站在Java后端的全局上進(jìn)行思考和總結(jié)的,忽略了很多小白們的感受,而很多朋友都需要更加基礎(chǔ),更加詳細(xì)的學(xué)習(xí)路線。所以,今天我們重新開一個新的專題,分別按照四個部分講述Java的學(xué)習(xí)路線,筆者也打算趁此機(jī)會,回憶一下自己的Java學(xué)習(xí)歷程。今天我們要講的是第三部分,Java工程師學(xué)習(xí)指南(中級篇)。先聲明一點(diǎn),文章里面不會詳細(xì)到每一步怎么操作,只會提供大致的思路和方向,給大家以啟發(fā),如果真的要一步一步指導(dǎo)操作的話,那至少需要一本書的厚度啦。當(dāng)然,本文提到的大部分內(nèi)容都能在我的博客中找到對應(yīng)的一些文章。所以也歡迎大家去我博客找到你們需要的資源。本文中的方法不一定適合所有人,如有錯誤還請諒解。上期回顧在上一篇文章中,我們主要討論的是如何做一個Java Web項目,以及前期需要哪些方面的基礎(chǔ)。最后,我還推薦了幾個比較不錯的視頻課程,以便給大家參考。當(dāng)然,跟著視頻課程做完一個項目,你只是照葫蘆畫瓢又練習(xí)了一遍,可能其中有很多東西你并不太理解,比如你可能不知道為什么代碼要分層,為什么要用maven進(jìn)行線上編譯,為什么Tomcat啟動時會輸出那么多的日志。有疑問很正常,因為一個Java Web項目涉及的技術(shù)還是很多的,如果要理解這些技術(shù)的原理,光靠一個項目課程是遠(yuǎn)遠(yuǎn)不夠的。所以,在你體驗了Java Web項目的開發(fā)流程以后,你應(yīng)該花些時間去了解相關(guān)技術(shù)原理了,今天我們要講的也是這部分內(nèi)容。對于即將參加校招的同學(xué)來說,最重要的也是這部分內(nèi)容,你需要了解JVM虛擬機(jī)原理,Java并發(fā)原理,并且熟悉JDK的部分源碼,了解這些API的底層實現(xiàn)。除此之外,還有很多,下面我們分別來談一談。PS:文中多次提到我的博客,是因為我的博客里整理了多個技術(shù)專欄,基本上包含了下面所說的內(nèi)容。關(guān)注公眾號后,在公眾號后臺回復(fù)“練級”即可獲得我的技術(shù)博客地址,以及其他相關(guān)的資源。01 計算機(jī)基礎(chǔ)知識計算機(jī)基礎(chǔ)課程(非科班)如果你不是計算機(jī)專業(yè)的同學(xué),那你可能要注意一下了。在學(xué)習(xí)下面這些內(nèi)容之前,你最好要學(xué)習(xí)一下計算機(jī)基礎(chǔ)課程。這里我們說的計算機(jī)課程是:數(shù)據(jù)結(jié)構(gòu),操作系統(tǒng),計算機(jī)網(wǎng)絡(luò)。數(shù)據(jù)結(jié)構(gòu):這門課應(yīng)該算是三門課程比較簡單的一門了,推薦《數(shù)據(jù)結(jié)構(gòu)與算法(Java語言描述)》,看書結(jié)合代碼實踐,把基本的數(shù)據(jù)結(jié)構(gòu)算法寫一寫就可以了。操作系統(tǒng):關(guān)于操作系統(tǒng)我看了很多本書,但是沒有感覺特別好的,所以如果有時間的話可以先看另外一本書《深入理解計算機(jī)系統(tǒng)》,這本書講了很多計算機(jī)的基本概念,不局限于操作系統(tǒng)。然后可以看一看湯小丹寫的《操作系統(tǒng)》,或者你們學(xué)校的教材。計算機(jī)網(wǎng)絡(luò):網(wǎng)絡(luò)方面的書也非常多,推薦看一下《計算機(jī)網(wǎng)絡(luò):自頂向下方法》,另外還有一本《TCP/IP 詳解:卷一》也是備受推崇的書。除此之外,我還要推薦一下劉欣老師的書《碼農(nóng)翻身》,書中用一些有趣的故事來講解操作系統(tǒng)和計算網(wǎng)絡(luò)的一些復(fù)雜概念,有助于大家理解這部分內(nèi)容。02 JVM虛擬機(jī)JVM虛擬機(jī)為什么把JVM放在第一位,因為它是最基礎(chǔ)也最重要的一塊內(nèi)容。所有的Java代碼都運(yùn)行在JVM上,事實上,JVM在操作系統(tǒng)中只是一個進(jìn)程。為了了解Java代碼的運(yùn)行方式,底層引擎的執(zhí)行原理,以及內(nèi)存的分配情況,我們必須要學(xué)習(xí)JVM虛擬機(jī)。推薦資源:《深入理解JVM虛擬機(jī)》很高興地告訴你們,學(xué)習(xí)JVM你只需要把這本書吃透即可,當(dāng)然,看一遍可不夠,筆者前后至少看了三遍,有條件的話最好把書中的實例都跑一跑。另外,JVM也是面試必考的內(nèi)容,所以,相應(yīng)地去準(zhǔn)備一些面試題也是很有必要的,如果你基本掌握了這本書的內(nèi)容,相信你不會懼怕任何JVM面試題。03 設(shè)計模式與源碼閱讀設(shè)計模式為什么在這里提到設(shè)計模式呢,因為設(shè)計模式是Java編程規(guī)范的經(jīng)典總結(jié),并且在JDK源碼中經(jīng)常使用,由于我們后面會講到JDK源碼方面的學(xué)習(xí),所以對于設(shè)計模式,建議大家先學(xué)習(xí)一下,最好的學(xué)習(xí)方式就是看書結(jié)合實踐,把一些常用的設(shè)計模式自己實現(xiàn)一下。推薦資源:《head first 設(shè)計模式》JDK源碼(主要指集合類源碼)接下來下場的選手是:JDK源碼。不過對于大部分人來說,只要能夠掌握集合類,字符串這些源碼就可以了,其他部分的源碼主要集中在JUC并發(fā)包里,而這些內(nèi)容我們會放在Java并發(fā)技術(shù)里來講。為什么我們需要掌握集合類源碼呢,其一是因為面試喜歡考,其二是因為集合類的源碼實現(xiàn)都比較經(jīng)典,難度也不算太大,并且運(yùn)用了很多優(yōu)化方法,所以了解它對于學(xué)習(xí)Java的同學(xué)來說大有裨益。推薦資源市面上并沒有哪本書專門來講JDK源碼的,所以這部分內(nèi)容的學(xué)習(xí)資源主要是兩個部分,一是JDK源碼本身,而是一些技術(shù)博客。1 對于JDK源碼,直接看可能比較有難度,不推薦新手這么做。 2 講解源碼的文章質(zhì)量參差不齊,所以我只推薦幾個我自己比較熟悉的,一個是importnew。一個是我的博客。另外,我之前分享的一篇文章《你不可錯過的Java學(xué)習(xí)資源》中也推薦了很多大牛和博客,大家也可以去看看。Spring源碼說實話,Spring源碼的復(fù)雜度遠(yuǎn)高于集合類的源碼,這也是因為Spring運(yùn)用了很多的設(shè)計模式,并且有著非常繁雜的類關(guān)系。所以,我不建議大家直接去讀Spring源碼,因為即使是看Spring源碼解析的書籍,你也會感到很吃力。所以,我推薦的方式是,看書+看一些比較好的源碼解析文章。另外要告訴大家的是,Spring的源碼很多,并不是所有內(nèi)容都需要你掌握的,大家都知道Spring最常用的特性就是IOC和AOP,所以看源碼解析時,最重要的也是這兩個部分了。另外,看完Spring的源碼解析以后,別忘了看SpringMVC的源碼解析,學(xué)習(xí)方法也是一樣的,找重點(diǎn)內(nèi)容看即可。推薦資源:《Spring源碼深度》,我的博客專欄04 Java并發(fā)技術(shù)Java并發(fā)技術(shù)相信你為了搞定集合類源碼和Spring源碼花了不少功夫了,接下來輪到Java并發(fā)技術(shù)出場了。我們在入門篇其實已經(jīng)談到了多線程,但是也僅僅停留在使用Thread或者Runnable實現(xiàn)簡單的多線程demo。實際上,為了理解Java并發(fā)技術(shù)的底層實現(xiàn),我們還需要知道JMM模型,了解synchronized和volatile的底層實現(xiàn),同時還要明白Java中的多線程和操作系統(tǒng)的多線程和什么聯(lián)系和區(qū)別。除此之外,我們經(jīng)常談到的線程安全,有哪些實現(xiàn)方法,也是這部分內(nèi)容的要點(diǎn)。學(xué)習(xí)并發(fā)技術(shù),我建議分為三個步驟1 首先熟悉Java的多線程基礎(chǔ)知識,比如Thread的使用,線程的狀態(tài)轉(zhuǎn)換,以及一些api的使用方式。 2 了解一些理論基礎(chǔ),比如JMM,操作系統(tǒng)的多線程實現(xiàn)。這部分內(nèi)容推薦通過看書和看博客來學(xué)習(xí)。 3 了解并使用JUC的一些API,然后開始看JUC的一些源代碼。這個階段是最重要也是最困難的。推薦資源: 書籍:《Java并發(fā)編程藝術(shù)》,《Java并發(fā)編程實戰(zhàn)》 網(wǎng)站:我的博客專欄,并發(fā)編程網(wǎng),importnew,《你不可錯過的Java學(xué)習(xí)資源》05 Java網(wǎng)絡(luò)編程Java網(wǎng)絡(luò)編程在搞懂Java并發(fā)編程技術(shù)之后,相信這部分內(nèi)容也難不倒你。當(dāng)然,前提是你對計算機(jī)網(wǎng)絡(luò)有一定了解,因為網(wǎng)絡(luò)編程涉及到TCP和HTTP相關(guān)的知識點(diǎn)。在學(xué)習(xí)這部分內(nèi)容的時候,你首先要了解socket的使用以及原理,然后再去了解NIO的相關(guān)API,多寫一些客戶端和服務(wù)端通訊的demo,以便熟悉這些內(nèi)容。為了更好地理解網(wǎng)絡(luò)編程,你還要去了解UNIX網(wǎng)絡(luò)編程模型。除此之外,如果你想要更好地理解Java網(wǎng)絡(luò)編程,你還需要去了解Tomcat的實現(xiàn)原理。同時,Netty也是值得你去學(xué)習(xí)的一部分內(nèi)容,最好有機(jī)會去用一用這一網(wǎng)絡(luò)編程框架,學(xué)有余力的同學(xué)還可以考慮看看它的源碼(筆者沒有看)。推薦資源:我的技術(shù)博客,《Java網(wǎng)絡(luò)編程》,《你不可錯過的Java學(xué)習(xí)資源》05 Java8Java的版本一直在更新,但目前在用的主要還是Java8和Java7,等再過幾年可能這部分的內(nèi)容就過時了。但是目前看來,對Java8的學(xué)習(xí)和了解還是很重要的,畢竟面試也喜歡考。對這部分內(nèi)容學(xué)習(xí)的最好方式就是:看文章+代碼實踐推薦資源:《Java8實戰(zhàn)》06 總結(jié)今天的內(nèi)容貌似有點(diǎn)多,大家會不會感覺有點(diǎn)吃不消呢。沒關(guān)系,因為這部分內(nèi)容確實需要花很多時間去學(xué)習(xí)。對于一個在校的Java學(xué)習(xí)者來說,可能沒有機(jī)會接觸到多么高大上的項目,所以對內(nèi)功的修煉顯得格外重要。看書,寫demo,讀源碼,看似簡單的事情實際上需要花費(fèi)大量時間和精力,這個過程是需要你靜下心來,慢慢沉淀的,在學(xué)習(xí)的過程中你也可以和筆者一樣,寫一些總結(jié)和博客,以便更好地回顧自己的學(xué)習(xí)歷程。總結(jié)以下今天所講的內(nèi)容吧:1 計算機(jī)基礎(chǔ)課程:數(shù)據(jù)結(jié)構(gòu),網(wǎng)絡(luò)和操作系統(tǒng) 2 JVM基本原理 3 設(shè)計模式,JDK源碼,Spring源碼 4 Java并發(fā)技術(shù),JUC源碼 5 Java網(wǎng)絡(luò)編程 6 Java8如果你對上述內(nèi)容仍有疑問或者有一些建議,也可以和我交流。 關(guān)注公眾號后在后臺回復(fù)“少俠”可以獲得我的聯(lián)系方式。歡迎來撩。Java工程師學(xué)習(xí)指南完結(jié)篇先聲明一點(diǎn),文章里面不會詳細(xì)到每一步怎么操作,只會提供大致的思路和方向,給大家以啟發(fā),如果真的要一步一步指導(dǎo)操作的話,那至少需要一本書的厚度啦。因為筆者還只是一名在校生,所以寫的內(nèi)容主要還是針對Java初學(xué)者或者接觸Java后端不久的朋友,不適用于已經(jīng)工作多年的Java大佬們。所以本文中的方法不一定適合所有人,如有錯誤還請諒解。本期的內(nèi)容是系列文章的最后一部分內(nèi)容了。這個系列可能還有很多東西沒有說清楚,也有很多內(nèi)容被忽略了。但是這些內(nèi)容也確實是筆者結(jié)合自己經(jīng)驗總結(jié)而成的,希望能對大家有用 ~ 當(dāng)然如果有什么建議也可以隨時和筆者交流。上期回顧上期我們重點(diǎn)介紹了Java工程師進(jìn)階所需要掌握的一些技術(shù)內(nèi)容。特別對于即將參加校招的同學(xué)來說,最重要的也是這部分內(nèi)容,你需要了解JVM虛擬機(jī)原理,Java并發(fā)原理,并且熟悉JDK的部分源碼,了解這些API的底層實現(xiàn)。之所以把這部分放在Java Web項目之后來講,是因為我覺得,一開始做項目的時候你不可能已經(jīng)掌握好上述內(nèi)容了,所以你完全可以帶著問題去做項目,再花時間去學(xué)習(xí)底層原理,這樣你可以很好地結(jié)合你之前實踐過的代碼去理解那些底層技術(shù)了。本期主題本期主要介紹的是Java后端技術(shù)比較“高端”的一些內(nèi)容,也就是我們經(jīng)常聊的分布式,架構(gòu),緩存,消息隊列等內(nèi)容,另外我們也會介紹一些大后端相關(guān)的技術(shù),比如云計算(OpenStack和docker),大數(shù)據(jù)(hadoop生態(tài)),以及一些常用的后端技術(shù)。這些內(nèi)容其實離我們并不遠(yuǎn),只不過在平時的項目中可能用的比較少,所以作為學(xué)生黨一般也只能通過一些文章或者書本去學(xué)習(xí)理論知識。那么基于這么一個情況,我們來談?wù)勗趺磳W(xué)習(xí)這部分的內(nèi)容吧。01 Web后端架構(gòu)Web后端架構(gòu)后端進(jìn)階第一步,先把Web架構(gòu)相關(guān)的技術(shù)學(xué)好吧,因為之前大家都做過Java Web項目,想必對這塊內(nèi)容還是比較熟悉的吧。我們需要了解Web架構(gòu)演化的歷史,了解為什么要做服務(wù)器集群,為什么要用緩存,為什么要做拆分,做主從,以及為什么要有分布式。推薦資源:《深入分析Java Web技術(shù)內(nèi)幕》,《大型網(wǎng)站技術(shù)架構(gòu)》兩本都是阿里大佬出的書,兩位都是淘寶系的技術(shù)大牛。前一本書主要講述的Java Web的一些技術(shù)基礎(chǔ),關(guān)于Web架構(gòu)的內(nèi)容比較少。后一本則是李智慧大佬寫的架構(gòu)科普書籍,用非常簡單易懂的語言寫出了大型Web項目架構(gòu)之美,分別著眼于高可用,高性能,高擴(kuò)展等方面講解了很多設(shè)計結(jié)構(gòu)的原則和方法。這本書應(yīng)該是Web架構(gòu)小白最好的入門書籍了。02 分布式理論基礎(chǔ)由于下面的內(nèi)容或多或少都會涉及到分布式相關(guān)的知識,所以這一部分我們主要介紹一下有關(guān)分布式的基礎(chǔ)知識。筆者對分布式的學(xué)習(xí)主要也停留在理論上,所以這里講的也是一些理論的東西。推薦資源:《從Paxos到zookeeper分布式一致性原理與實踐》,我的技術(shù)博客專欄“分布式系統(tǒng)理論與實踐”這本書比較好地科普了分布式基礎(chǔ)知識,也介紹了zookeeper的原理和使用。了解zookeeper是了解分布式技術(shù)很重要的一個環(huán)節(jié)。1 CAP 和 BASE談分布式就要談CAP,一致性,高可用,網(wǎng)絡(luò)分區(qū)容忍性為何只能三選二,為什么網(wǎng)絡(luò)分區(qū)容忍性必須要被考慮。CAP在實際應(yīng)用中真的可靠么?BASE出現(xiàn)的原因,為什么BASE更容易實現(xiàn),更適合實際應(yīng)用,BASE可以通過哪些技術(shù)去實現(xiàn)呢?2 一致性協(xié)議和算法一致性協(xié)議也是分布式理論的一個重點(diǎn),2PC,3PC,分別指的是什么,其中分別有什么問題。3PC解決了2PC的一個問題,卻仍然不完美。Paxos和Raft兩種一致性算法,顯然前者比后者復(fù)雜得多,但是Raft可能更加實用。為什么我們需要一致性算法,它們又有什么用呢。3 分布式事務(wù)和最終一致性分布式事務(wù)是一個復(fù)雜的概念,主要指分布式系統(tǒng)中需要強(qiáng)一致場景時所用到的事務(wù)。理解和實現(xiàn)它都不是簡單的事情。如果我們退而求其次,不要求強(qiáng)一致性,而選擇最終一致性,則可以用更加靈活的方案,比如事務(wù)消息。03 常見分布式技術(shù)推薦資源:《從Paxos到zookeeper分布式一致性原理與實踐》,我的技術(shù)博客專欄“分布式系統(tǒng)理論與實踐”,《深入理解Spring Cloud與微服務(wù)構(gòu)建》,《分布式服務(wù)框架原理與實踐》。1 zookeeper上文說到zookeeper是分布式技術(shù)很重要的一塊內(nèi)容,這是因為zookeeper用于管理和協(xié)調(diào)分布式組件,雖然它出自hadoop生態(tài),卻用于很多應(yīng)用當(dāng)中,基本上有分布式的地方就有zk的存在。簡單說來,zk可以提供全局統(tǒng)一的節(jié)點(diǎn)樹結(jié)構(gòu),通過節(jié)點(diǎn)來管理資源,同時zk自身是使用集群方式部署的,所以保證自己是高可用的。根據(jù)這一特點(diǎn),它可以作為服務(wù)注冊中心,還可以實現(xiàn)分布式鎖等功能。2 分布式服務(wù)分布式服務(wù)是一個挺有意思的東西,也很常用,簡單來說,就是把服務(wù)組件部署在不同節(jié)點(diǎn)上,通過rpc的方式訪問,為了實現(xiàn)這一功能,我們需要考慮通信協(xié)議,序列化方式,進(jìn)一步來說,我們還要了解如何做服務(wù)注冊和發(fā)現(xiàn),以及如何做限流,做服務(wù)熔斷和降級,等等等等。常見的分布式服務(wù)框架有dubbo,以及Spring Cloud這類產(chǎn)品,學(xué)會使用他們,然后了解它們的底層實現(xiàn)原理,相信會是一個很有趣的過程。3 負(fù)載均衡關(guān)于負(fù)載均衡,說起來其實很簡單,就是把一組請求分成多組,按照某種規(guī)則分發(fā)到多臺服務(wù)器上。但是負(fù)載均衡也涉及很多內(nèi)容,包括負(fù)載均衡的算法,負(fù)載均衡的實現(xiàn)方式,我們需要了解它到底是在哪一層實現(xiàn)的。一般來說,常用的負(fù)載均衡方式有nginx和lvs兩種,分別是7層和4層的負(fù)載均衡,一個基于域名進(jìn)行負(fù)載均衡,一個基于端口號做負(fù)載均衡。了解它們的實現(xiàn)原理,會讓你更好地理解這部分內(nèi)容。4 分布式session和分布式鎖這兩個組件也是分布式項目中經(jīng)常要用到的,了解它們的使用和實現(xiàn)原理,有助于以后在項目中的實踐。分布式session一般有多種實現(xiàn)方式,可以存數(shù)據(jù)庫或者緩存,也可以單獨(dú)部署成一個服務(wù),總之最重要的一點(diǎn)就是,性能要好,并且要高可用。分布式鎖則用于一些需要一致性的場景中,比如訂單生成這種全局唯一的功能,分布式鎖通常可以用緩存或者數(shù)據(jù)庫來實現(xiàn),但為了保證高性能,并且避免死鎖,我們一般采用Redis或者zookeeper來實現(xiàn)。04 緩存講到緩存,我們說的最多的就是Redis,所以我們要講的也是Redis。學(xué)習(xí)Redis,除了學(xué)會使用簡單的api之外,最好還要了解它的實現(xiàn)原理。推薦資源:我的技術(shù)博客專欄“重新學(xué)習(xí)MySQL和Redis”,《Redis設(shè)計與實現(xiàn)》這里我們主要介紹三部分內(nèi)容,也是我個人認(rèn)為比較重要的三塊內(nèi)容。1 數(shù)據(jù)結(jié)構(gòu)和底層實現(xiàn)Redis的數(shù)據(jù)結(jié)構(gòu)比較豐富,但更有意思的是這些數(shù)據(jù)結(jié)構(gòu)背后的底層實現(xiàn),也就是作者如何用c語言來實現(xiàn)這些結(jié)構(gòu)的。其中會有你熟悉的數(shù)組,鏈表,還有一些有意思的結(jié)構(gòu)比如跳表,哈希表。2 持久化方式持久化方式主要分兩種,aof和rdb,前者基于追加日志的方式來實現(xiàn)日志持久化,后者則是使用備份數(shù)據(jù)的方式來實現(xiàn)持久化。3 分布式方案這是Redis最有趣也最復(fù)雜的部分。 首先,Redis可以使用主從的方式部署,其中“哨兵”這一組件用于故障切換。基于哨兵的主從部署后來發(fā)展為Redis cluster的部署方式,也就是Redis集群,通過分片的方式來部署Redis集群,并且集群中任一節(jié)點(diǎn)都可以用來對外提供服務(wù)。當(dāng)然,除了Redis集群之外,還有codis的分布式方案,codis基于代理的方式來實現(xiàn),表面上還是使用原來的Redis API,但實際上訪問的卻是一個Redis集群。05 消息隊列消息隊列的作用一般來說就是削峰,控流,解耦合,目前業(yè)界也有很多的消息隊列產(chǎn)品,在很多公司都會使用,當(dāng)然,它們各有各的優(yōu)缺點(diǎn),我們也不必全都了解,這里我們大概介紹3種消息隊列,它們各自的特點(diǎn)都比較鮮明,值得大家去了解一番。1 RabbitMQ筆者剛開始接觸的消息隊列是rabbitmq,它的使用方法比較簡單。 RabbitMQ是一個由erlang開發(fā)的AMQP(Advanced Message Queue )的開源實現(xiàn),主要有以下特點(diǎn):安裝部署簡單,上手門檻低,功能豐富,符合AMQP標(biāo)準(zhǔn);企業(yè)級消息隊列,經(jīng)過大量實踐考驗的高可靠;集群易擴(kuò)展,可以輕松的增減集群節(jié)點(diǎn);有強(qiáng)大的WEB管理頁面。2 Kafka與其他MQ相比較,Kafka有一些優(yōu)缺點(diǎn),主要如下優(yōu)點(diǎn):可擴(kuò)展。Kafka集群可以透明的擴(kuò)展,增加新的服務(wù)器進(jìn)集群。高性能。Kafka性能遠(yuǎn)超過傳統(tǒng)的ActiveMQ、RabbitMQ等,Kafka支持Batch操作。容錯性。Kafka每個Partition數(shù)據(jù)會復(fù)制到幾臺服務(wù)器,當(dāng)某個Broker失效時,Zookeeper將通知生產(chǎn)者和消費(fèi)者從而使用其他的Broker。缺點(diǎn):重復(fù)消息。Kafka保證每條消息至少送達(dá)一次,雖然幾率很小,但一條消息可能被送達(dá)多次。消息亂序。Kafka某一個固定的Partition內(nèi)部的消息是保證有序的,如果一個Topic有多個Partition,partition之間的消息送達(dá)不保證有序。復(fù)雜性。Kafka需要Zookeeper的支持,Topic一般需要人工創(chuàng)建,部署和維護(hù)比一般MQ成本更高。RocketMQRocketMQ是一個純java、分布式、隊列模型的開源消息中間件,前身是Metaq,當(dāng) Metaq 3.0發(fā)布時,產(chǎn)品名稱改為 RocketMQ。具有以下特點(diǎn):1、能夠保證嚴(yán)格的消息順序2、提供豐富的消息拉取模式3、高效的訂閱者水平擴(kuò)展能力4、實時的消息訂閱機(jī)制5、億級消息堆積能力除此之外,它還有一個優(yōu)點(diǎn),就是支持事務(wù)消息,讓分布式事務(wù)的實現(xiàn)變得簡單05 分布式數(shù)據(jù)庫這里說的分布式”數(shù)據(jù)庫“,其實指的是數(shù)據(jù)庫的分布式方案,更具體來說,主要指的是數(shù)據(jù)庫的主從部署,以及分庫,分表。1 主從復(fù)制和讀寫分離這是數(shù)據(jù)庫高可用的基礎(chǔ)。MySQL數(shù)據(jù)庫會使用日志來完成主從復(fù)制,先寫主庫,然后再同步到從庫。讀寫分離則一般是指的是:從庫負(fù)責(zé)讀,主庫負(fù)責(zé)寫。2 分庫分表方案分庫分表是解決大表性能瓶頸的一種方法,當(dāng)然也分為橫向拆分和縱向拆分,橫向拆分指的就是減少單表的數(shù)據(jù)量,放到其他表或者其他庫中。縱向拆分則一般指按照業(yè)務(wù)來拆分,把不必要的字段放到其他表中。分庫分表可以在應(yīng)用層做,通過對id或者其他字段進(jìn)行hash以便映射到對應(yīng)的表中。當(dāng)然也可以通過數(shù)據(jù)庫中間件來完成,例如mycat這種中間件,通過代理的方式實現(xiàn)分庫分表,非常方便。06 大后端相關(guān)技術(shù)這部分的內(nèi)容筆者也只是略知一二,所以這里只是拋磚引玉,做一個簡單的科普罷了。畢竟咱們學(xué)技術(shù)的人都是先講深度再來談廣度。當(dāng)你對之前的內(nèi)容掌握得比較好的時候,再去看看大后端的一些其他技術(shù),也會感覺挺有意思的。下面這些技術(shù)主要是我自己學(xué)習(xí)路上接觸過的一些內(nèi)容,所以比較熟悉,才拿出來分享,至于適不適合大家的口味,可能就見仁見智了。Hadoop生態(tài)筆者之前參與過數(shù)據(jù)倉庫相關(guān)的項目,所以稍微了解了這方面的內(nèi)容,感覺hadoop生態(tài)還是挺有意思的。大家不妨去了解一下其中的基本組件,然后打一個集群自己玩玩看。 常見的組件有:hdfs,hbase,hive,zookeeper,flume,sqoop,yarn。推薦資源:我的技術(shù)博客-個人分類-hadoop,《大數(shù)據(jù)技術(shù)原理與應(yīng)用》對于入門hadoop生態(tài)來說,這本書完全足夠了,如果你要做大數(shù)據(jù)平臺開發(fā)或者是數(shù)據(jù)研發(fā)工程師,可能需要非常全面地了解這些組件的底層原理。云計算初探筆者之前參與過私有云相關(guān)的項目,所以稍微了解了這方面的內(nèi)容,感覺這方面的內(nèi)容也蠻有趣的。我在項目中主要接觸到的是OpenStack,docker以及kubenetes,OpenStack是一個私有云生態(tài),內(nèi)部結(jié)構(gòu)對于我們來說還是比較復(fù)雜的,不過最根本的虛擬化技術(shù)還是基于kvm虛擬化來實現(xiàn)的。docker則是現(xiàn)在非常流行的一種容器,用于快速部署應(yīng)用。kubenetes也借著docker的東風(fēng)火了起來,可以理解為是基于容器的分布式調(diào)度系統(tǒng)。這些技術(shù)在企業(yè)中也是比較常用的,只不過對于研發(fā)同學(xué)來說,更多時候扮演的是工具的角色。推薦資源:《Docker技術(shù)入門與實戰(zhàn)》,《kubenetes權(quán)威指南》其他常見后端技術(shù)除此之外,想必大家還了解過很多其他的技術(shù),只不過不同的業(yè)務(wù)用到的組件往往不一樣,所以并不是每個東西你都需要去了解。比如搜索引擎技術(shù)Lucene,基于它的兩款產(chǎn)品solr和elasticsearch,通常出現(xiàn)在需要搜索功能的項目中。再比如流式計算技術(shù),如storm和spark streaming等等,通常都用于大數(shù)據(jù)部門,用作實時數(shù)據(jù)采集。又如ELK實現(xiàn)的分布式日志系統(tǒng),多用于分析和定位系統(tǒng)問題,經(jīng)常會出現(xiàn)在一些比較重要的應(yīng)用當(dāng)中。當(dāng)然,也有現(xiàn)在大火的人工智能,還有太多的技術(shù)我們沒機(jī)會去了解和使用,我們能做的也就是在自己能力范圍內(nèi)把需要做的東西做到最好了。所以,這些內(nèi)容并不是每一樣你都需要知道,但是如果有時間去了解一下的話,還是建議多了解一點(diǎn)的。07 總結(jié)總結(jié)今天碼的字有點(diǎn)多,所以難免有些寫的不太好的地方,希望大家見諒。縱觀全文,我們主要講了這些內(nèi)容:1 Web架構(gòu) 2 分布式基礎(chǔ)理論 3 常見分布式技術(shù) 4 緩存 5 消息隊列 6 數(shù)據(jù)的分布式方案 7 大后端相關(guān)技術(shù)至此本系列文章就已經(jīng)結(jié)束了,不知道大家有什么問題或者建議想和筆者交流嗎~趕緊加我的微信來聊聊吧。寫本系列文章也是因為有很多朋友想要了解更加清晰的Java后端學(xué)習(xí)路線,所以我總結(jié)了之前自己的學(xué)習(xí)歷程,才創(chuàng)作出這四篇文章,希望能夠?qū)Υ蠹矣兴鶐椭鷡