Java學習路線以及資料
阿新 • • 發佈:2018-12-25
先說明一下,雖然問題是“一年內如何全職學習”,實際上,如果時間安排合理的話,大概需要六個月左右,有些基礎好,自學能力強的朋友,甚至在四個月左右就開始找工作了。
和樓主有些相似,大三的時候,我萌生了放棄本專業的念頭,斷斷續續學 Java Web 累計一年半左右,總算是學完了,找工作對你來說或許還有些距離,而我已經有了自己喜歡的工作,從一個自學狂人的角度,我只能給你比較實用但有限的建議:
1. Java SE
2. 資料庫
3.1 學習 JQuery
3.2 EasyUI
5. 輕量級 JavaEE 開發(所謂的 SSH)
此時,基本企業開發技術都學過了,可以試著找工作,實習沒問題的,只是缺點專案經驗罷了
6. 工作中的加分項(急著找工作的話,可以先找工作,然後工作中補補)
<img src="https://pic2.zhimg.com/82032e4f9c9e3cc798c69931509885b9_b.jpg" data-rawwidth="1343" data-rawheight="604" class="origin_image zh-lightbox-thumb" width="1343" data-original="https://pic2.zhimg.com/82032e4f9c9e3cc798c69931509885b9_r.jpg">補充-2:偶爾我會看到入門的人問如下幾個問題,如果你問了,該好好反省。
問題:誰有 CSDN 賬號啊,幫忙下個資料?
點評:CSDN 上能有什麼好東西呢,竟然有人問我找 Spring 的幫助文件,說是隻有 CSDN 上有中文版本,我都無語了,你既然選擇了 Java 就不要逃避英文,任何時候都要首選英文文件,而且,CSDN 上的東西翻譯質量亂七八糟,本來國外免費提供的東西它卻要積分下載,不必理會,直接去官網即可。
問題:這個問題怎麼回事啊,求大神幫助。。最好遠端。。
點評:大神沒空搭理你,沒人願意免費為你解答一個連描述都讓人看不懂的問題,甚至幫你遠端,再有,大神這個詞會讓老手覺得很彆扭,讓人感覺你很慫,不適合做軟體。
問題:百度找不到答案,誰能給個 Demo 啊
點評:做技術用 Google, 不解釋,另外,別以為有 Demo 你就能快速學會什麼東西,那隻能讓你快速黏貼過來應付差事,留下的是亂七八糟的體系和原理不清楚,所以,請自己有個度。
補充-3:關於筆記
寫程式的如果不會記筆記,就真的效率很低了,別告訴我你是用 Word 記筆記的,現在一般都使用 Markdown 記筆記(Sublime + MarkdownExtended),不知道的自己去 Google, 具體效果如下圖:
這麼寫筆記:
<img src="https://pic3.zhimg.com/7da179eb490636c97fe8a81fb4049fe2_b.jpg" data-rawwidth="1242" data-rawheight="560" class="origin_image zh-lightbox-thumb" width="1242" data-original="https://pic3.zhimg.com/7da179eb490636c97fe8a81fb4049fe2_r.jpg">預覽如下:預覽如下:
<img src="https://pic2.zhimg.com/a73c1f7f58cbe2bd10ab3b21a79e91cd_b.jpg" data-rawwidth="873" data-rawheight="529" class="origin_image zh-lightbox-thumb" width="873" data-original="https://pic2.zhimg.com/a73c1f7f58cbe2bd10ab3b21a79e91cd_r.jpg">
補充-4:自學 V.S 報班
很多人私信我,希望得到幫助,我也從未想到自學 Java 的人這麼多,因此提供幫助如下
除中文教程,我也提供英文教程(質量更佳),簡單展示如下:
<img src="https://pic4.zhimg.com/9df7354b5955e11d2dfd1fa427153333_b.jpg" data-rawwidth="1155" data-rawheight="654" class="origin_image zh-lightbox-thumb" width="1155" data-original="https://pic4.zhimg.com/9df7354b5955e11d2dfd1fa427153333_r.jpg">
<img src="https://pic4.zhimg.com/9398cb4b450f1119f60c723bf145b06f_b.png" data-rawwidth="1246" data-rawheight="697" class="origin_image zh-lightbox-thumb" width="1246" data-original="https://pic4.zhimg.com/9398cb4b450f1119f60c723bf145b06f_r.png">
我的其他回答:
和樓主有些相似,大三的時候,我萌生了放棄本專業的念頭,斷斷續續學 Java Web 累計一年半左右,總算是學完了,找工作對你來說或許還有些距離,而我已經有了自己喜歡的工作,從一個自學狂人的角度,我只能給你比較實用但有限的建議:
- 如果 .Net 你是剛入門, 建議轉學 JavaWeb 或 Android, 我對學習何種平臺並無偏見,而是自學需要大量的參考資料, Java 的學習資料,無論是視訊還是電子書都要遠多於 .Net,這是個很實際的問題,你可以去百度一下(當年都是在電驢搜,現在已成死驢),對比便見分曉。
- 自學所需的視訊教程一定要成體系,而且每部分最好是完整的,否則,你可能學到某個階段發現剩下的視訊還沒有釋出(萬惡的培訓機構都愛玩兒這個伎倆),也可能某個階段只學了一般發現沒有後續視訊了,在選擇視訊教程前,你需要 .Net 或 JavaWeb 完整的學習流程圖(培訓機構官網都會提供學習路線圖,大同小異)
- 如果你的英文足夠好,在看視訊教程的時候一定要搭配英文電子書(文字版的,方便搜尋),為什麼這麼做? 在我看過的多達 50G 的視訊教程裡,講課的老師就算技術再牛,也有講的模糊的地方,甚至講錯的地方,甚至是忽悠你的地方!!這時候,你需要的可能不只是 Google 和 StackOverflow, 你需要與此配套的英文電子書, 首推 Manning 和 O'Reilly 出版的書。
- 報班的人一般有兩個考慮:
- 基本上四個月速成,省心,不用操心軟體、文件、路線、課程等等(培訓班學生常有不知道 eclipse 去哪裡下載的,太依賴老師了)
- 有老師帶著做專案,最後還能推薦工作。
1. Java SE
- 參考視訊:傳智畢向東、尚學堂馬士兵、聖思園張龍的 JavaSE 視訊教程
- 參考書籍:
- 《Thinking in Java》 ,只適合參考,但不適合做入門書,作者在官網提供了免費電子版,連結我就不放了,自己找
- 《Head First Java》,生動有趣,入門階段時間充足的話,建議翻翻
- 《Java All-In-One for Dummies》,見名知意,就是給新手看的書,自然特別囉嗦特別厚,建議用作參考,很詳細
2. 資料庫
- 參考視訊:
- 傳智劉道成的 MySQL 視訊教程
- 傳智韓忠康的 MySQL 視訊教程
- 以上兩個課程的講師都是講 PHP 的,所以視訊教程中會提到一些 PHP 內容,忽略就是了
- 參考書籍:
- 《MySQL Cookbook》,僅適合做參考
- 《SQL All-In-One for Dummies》,延續了 Dummies 系列一貫的風格,冗餘而詳盡,適合查閱
- 建議:
- 先學 MySQL,然後對比學習 SQL Server 和 Oracle
- 畢竟主流資料庫都實現了 SQL 標準,區別只體現在各自提供的功能上
- 參考視訊:
- 傳智李勇的(其他老師的忽略)JDBC 視訊教程, 這部分講的很全,基本不用看書
- 參考書籍:
- 《Core Java》 的 JDBC 章節還不錯
- 參考視訊:
- 傳智韓順平的《輕鬆搞定網頁設計(html+css+js)》,講的一般,做入門湊合
- 妙味課堂的 HTML + CSS + JS,國內算講的不錯的,當然內容有點多,需要花更多時間
- 參考書籍:
- DOM 部分可以參考《DOM 程式設計藝術》
- 深入 JS 建議參考《Javascript 權威指南》,原版更好,即:《Javascript: The Definitive Guide》,經典的犀牛書:
3.1 學習 JQuery
- 參考視訊
- 北風網李炎恢講的不錯,通俗易懂,貼近實戰
- 聖思園張龍講的也不錯,更多原理,例如:JS 的繼承和作用域鏈等等,很少有培訓班能講到
- 參考書籍
- JQuery 多參考官方 API,google 關鍵詞 "jquery documentation" 即可
- JQuery 的作者 John Resig 寫過一本 javascript 書,質量很好,有興趣的可以參考下:
3.2 EasyUI
- 這部分可以先不看,javascript 和 jquery 學的好,學這個沒難度,一天的事兒
- EasyUI 國內使用特別廣泛,但國外似乎沒見過用這個的,可能是因為 UI 比較醜吧。。
- EasyUI 官方文件和 Demo 基本足夠,但官網經常被牆,請自備梯子
- 對 javascript 的基礎要求比較高,我不建議初學就接觸,可以在深入 JS 的機制後再學習
- 參考書籍:《ExtJS in Action》
- 參考視訊:傳智王興魁老師的視訊教程
- 之前提到的 javascript 和 jquery 課程裡,也都提到了 ajax 的內容
- 必要的話,請自行搜尋 JQuery 對 Ajax 的支援
- 參考視訊:傳智播客方立勳的 JavaWeb 視訊教程
- 參考書籍:《Head First: Servlet and JSP》
- 很形象的一本書,圖示很多,理解起來很舒服
- 雖然 08 年出版的,但並不過時
5. 輕量級 JavaEE 開發(所謂的 SSH)
- Struts2
- 參考視訊:傳智黎活明、尚學堂馬士兵、聖思園張龍的 Struts2 視訊教程
- 參考書籍:
- 《Struts in Action》
- 《Apache Struts 2 Web Application Development - Dave Newton》 質量略低,做參考挺不錯的,按照知識點劃分的,查閱起來也很方便
- 中文版好像有《Struts 權威指南》之類的書
- Spring
- 參考視訊:動力節點王勇、傳智黎活明的 Spring 視訊教程
- 培訓班講的都是 Spring 基礎,更多內容需要參照 Spring 官方的 reference,寫的比書還好
- 參考書籍:《Spring in Practice》
- Hibernate
- 參考視訊:傳智湯陽光(推薦)、尚學堂馬士兵(經典但太老)的 Hibernate 視訊教程
- 參考書籍:
- 《Hibernate in action》
- 《Java Persistence with Hibernate 1st Edition 2006》,Hibernate 作者主編,雖然是 2006 年出版的,但核心內容講的很全面,非常值得參考
- 《Java Persistence with Hibernate 2nd Edition 2015.10》,最近到 Manning 官網發現第二版已釋出,粗略看了下,全書以 JPA 為主線,Hibernate 特色做補充,隨書案例也是很不錯的,可能是為 hibernate 5 做的更新,畢竟是個大版本,挺多變化的
此時,基本企業開發技術都學過了,可以試著找工作,實習沒問題的,只是缺點專案經驗罷了
6. 工作中的加分項(急著找工作的話,可以先找工作,然後工作中補補)
- WebService,兩種規範:JAX-WS 和 JAX-RS
- 建議先學規範的標準實現,再反向瞭解規範含義
- JAX-WS,俗稱 WebService
- 參考書籍:《Java Web Services: Up and Running》瞭解 WebService 的歷史、體系及各種實現的大概介紹,對應中文版本是《Java Web 服務 -構建與執行》
- 參考視訊:尚矽谷張曉飛、傳智趙慶軒的 webservice 視訊教程
- 學習使用 CXF(推薦) 或 Axis2 ,參考《Apache CXF Web Service Development》
- Apache CXF 的文件有點亂,所以學習起來可能會困難些,沒辦法,Apache 的文件總是看著很難受,費點兒勁還是能學到不少東西的
- JAX-RS,俗稱 Restul WebService,時間多的話,建議把兩種主流的框架都熟悉下:
- Jersey,SUN 對 JAX-RS 的官方參考實現
- 參考書籍:《Developing RESTful Web Services with Jersey 2.0》
- Restlet,早於 JAX-RS 規範出現,後來也提供了對 JAX-RS 的支援
- 參考書籍:《Restlet in Action》
- WebService 的測試,一般使用 SoapUI(為主流 IDE 提供了外掛)
- 參考書籍:《Web Services Testing with SoapUI》
- 實際開發時,為了提高開發效率,可能需要使用 curl 這樣的工具來快速訪問服務,如果你安裝了 Git, 那麼 curl 已經自帶了,開啟 git bash 即可呼叫
- JPA,J2EE 中的一個持久化規範
- 標準實現有:Hibernate / OpenJPA / EclipseLink
- 之前提到的 hibernate 已經實現了 JPA,學過 hibernate 後,建議學習下 hibernate 和 JPA 註解的混搭使用,其他的 JPA 實現,瞭解即可
- 參考書籍:《Java Persistence with JPA - Daoqi Yang》,是位美籍華人寫的英文書,簡潔易懂,對照這本書裡的案例,理解起來不是很難
- MyBatis,只是 JDBC 的簡易封裝
- 很簡單,花三兩天時間看看其官網文件就可以搞定
- 常見構建工具: Maven / Gradle / Ant + Ivy 等
- Gradle 可以參考 《Gradle in Action - Benjamin Muschko 2014》
- Maven 可以參考《Maven 實戰》,沒錯,是為數不多寫的也不錯的國產書
- Ant 常常和 Ivy 搭配使用,但現在一般使用 Maven 就足夠了,所以可以不學習,想了解的可以參考官方文件
- 在培訓班講課的老師們,當年也都是自學過來的(他們那個年代還沒有軟體培訓班呢),從這個角度說,自學並非那麼不現實,和人有關,和學習環境關係不大
- 如果你決心花一年時間學習,那就沒必要報班了, 因為自學最大的挑戰不是技術,而是解決問題過程中的煩躁、絕望和質疑
- 不要以為英文的書會浪費你的時間,事實上,當你習慣看英文資料後,你會節省很多時間,至少不會找亂七八糟的中文資料還搞不清楚怎麼回事
- 工作中多參考官方文件,不要以為學過了就會用了,好多細節不是老師能夠教給你的
- 例如 Spring Reference, 裡面有很多原理性的東西,能讓你使用起來更有自信
- 熟悉 Spring 的,可以參考我的另一回答:spring有什麼缺點嗎?
- 多熟悉 J2EE 的規範,如 CDI,適當瞭解規範的其他實現及其規範之外的特色
- Spring
- Guice
- 工作中不要什麼都去自己從頭做,有些功能完全可以使用第三方類庫實現,例如
- Guava ,支援泛型和函數語言程式設計,原始碼也值得學習
- Apache Commons,這個太常見了,有很多功能不同的元件
- 對新技術要敏感一些,但不要一味追新,因為你永遠追不上,語言層面的 New Feature 要多少會用,也能說得上來優劣, 此外,JVM 上還有 Scala 和 Groovy 之類的語言,可以適當瞭解下
- 重要的永遠都是底層和基礎,大牛永遠都是這麼說,站著說話不腰疼,不過確實如此,工作之餘,瞭解一下常用的演算法和理論,你不能指望自己不懂 TCP、HTTP、Socket 就直接使用 Netty 那種高度抽象的框架來實現很好的併發。
<img src="https://pic2.zhimg.com/82032e4f9c9e3cc798c69931509885b9_b.jpg" data-rawwidth="1343" data-rawheight="604" class="origin_image zh-lightbox-thumb" width="1343" data-original="https://pic2.zhimg.com/82032e4f9c9e3cc798c69931509885b9_r.jpg">補充-2:偶爾我會看到入門的人問如下幾個問題,如果你問了,該好好反省。
問題:誰有 CSDN 賬號啊,幫忙下個資料?
點評:CSDN 上能有什麼好東西呢,竟然有人問我找 Spring 的幫助文件,說是隻有 CSDN 上有中文版本,我都無語了,你既然選擇了 Java 就不要逃避英文,任何時候都要首選英文文件,而且,CSDN 上的東西翻譯質量亂七八糟,本來國外免費提供的東西它卻要積分下載,不必理會,直接去官網即可。
問題:這個問題怎麼回事啊,求大神幫助。。最好遠端。。
點評:大神沒空搭理你,沒人願意免費為你解答一個連描述都讓人看不懂的問題,甚至幫你遠端,再有,大神這個詞會讓老手覺得很彆扭,讓人感覺你很慫,不適合做軟體。
問題:百度找不到答案,誰能給個 Demo 啊
點評:做技術用 Google, 不解釋,另外,別以為有 Demo 你就能快速學會什麼東西,那隻能讓你快速黏貼過來應付差事,留下的是亂七八糟的體系和原理不清楚,所以,請自己有個度。
補充-3:關於筆記
寫程式的如果不會記筆記,就真的效率很低了,別告訴我你是用 Word 記筆記的,現在一般都使用 Markdown 記筆記(Sublime + MarkdownExtended),不知道的自己去 Google, 具體效果如下圖:
這麼寫筆記:
<img src="https://pic3.zhimg.com/7da179eb490636c97fe8a81fb4049fe2_b.jpg" data-rawwidth="1242" data-rawheight="560" class="origin_image zh-lightbox-thumb" width="1242" data-original="https://pic3.zhimg.com/7da179eb490636c97fe8a81fb4049fe2_r.jpg">預覽如下:預覽如下:
<img src="https://pic2.zhimg.com/a73c1f7f58cbe2bd10ab3b21a79e91cd_b.jpg" data-rawwidth="873" data-rawheight="529" class="origin_image zh-lightbox-thumb" width="873" data-original="https://pic2.zhimg.com/a73c1f7f58cbe2bd10ab3b21a79e91cd_r.jpg">
補充-4:自學 V.S 報班
- 自學者的疑慮:
- 如果是上班族一天三、四個小時的學習時間要多久才能達到可以就業的水平?
- 就你看來,自學和報班這兩種方式的優勢與劣勢各是什麼?
- 上班族自學時間必然很長,從時間、機會成本考慮,值不值?
- 我的看法:
- 我當初自學,在學校和家裡分別學了一段時間,如果連續起來的話,差不多六個月學完了,每天大概五小時左右敲碼看視訊。這期間,有一部分時間浪費在了尋找教程上,因為我學習那時,網上的教程沒有能夠連續看下來的,想買都沒有,都需要自己一個一個找,每個階段的老師也不一樣,內容也雜,所以花的時間多了些。從我的體會來看,如果辭職在家學習,心裡會覺得很漫長,我很推薦邊工作邊學習。至少你不用擔心自己的生計,如果每天三個小時,大概得七個月。
- 你得知道,培訓班都是從早到晚給你灌輸,抓緊在四個月內給你快速講完讓你走人,所以留給學生的時間不多,沒有多少自己思考的時間,這恰巧是自學最大的優勢,因為自己思考出來的和別人告訴你的絕對不一樣,這也是日後區分你和培訓班學生的一點。培訓班的學生依賴性太強,掌握新事物的能力太差,速度也慢,就是因為在培訓班裡他們學不會自己找資料,自己找答案,自己摸索新技術的能力。自學的話, 現在和以前不一樣了,你可以弄套視訊教程連貫地看下來,跟下來,培訓班裡講什麼,你也學什麼,他們不學的,你也有時間去學,他們沒有時間琢磨的,你有時間,因為,自學的時間是你自己安排的。另外,自學最大的缺點不是技術的難度,而是你自己對自己的懷疑,因為有些問題時長要一兩天才能想明白,那會動搖你的信心,這也是我為什麼推薦邊工作邊學習的原因。至少你每天不只是敲程式碼,還有別的事情做。
- 報培訓班,要想學好,好的培訓班,你得花費兩萬左右(食宿還不包括),而且你還得辭掉現有的工作,在異地也同樣孤獨,這半年你花的錢你確定你能再一年內掙得出來?我告訴你,除去自己的食宿,剛入行的,一年留不下什麼錢,這樣的話,自學為什麼不是一種好的出路?就因為沒人陪?就因為沒人教?可是,現在不都有了嗎,有教程,有學習群,有網路,有你的信心,還缺什麼?
很多人私信我,希望得到幫助,我也從未想到自學 Java 的人這麼多,因此提供幫助如下
- 如果你有自學的困惑,可以和我私聊交流(加Q或知乎私信),如果希望得到我的收費指導,請先說明如下資訊,否則一律拒絕。
- 學過什麼技術,如 J2SE, MySQL...
- 學過什麼專業課,如:作業系統、網路、資料結構...
- 學到什麼程度了,如:未開始,剛入門,剛學完 JavaSE...
- 是否科班,在職還是在校,有無程式設計經歷,有無培訓經歷
- 有無學習路線,有的話,是什麼
- 有無就業方向,有的話,是什麼
- 有無自學困惑,有的話,是什麼
- 如果你不想浪費時間蒐集教程,或者不滿足於之前給出的免費教程列表,我可以為你提供全套教程(入門到就業全套,非拼湊,不免費,價格上百),不喜勿噴,文章開頭已給出免費列表。
- 我Q: 237951606(非誠勿擾)
- 諮詢問題請註明:諮詢問題,來自知乎
- 購買教程請註明:購買教程,來自知乎
- 尋求指導請註明:購買指導,來自知乎
- JAVA 交流群,群號:151280557,二維碼如下,(非自學勿擾)
<img src="https://pic4.zhimg.com/266fcaff77067e39b219ac3cfe324fdf_b.jpg" data-rawwidth="302" data-rawheight="302" class="content_image" width="302">關於群的說明: - 長期以來,本群飽受各種培訓機構、群宣水軍、拿來主義者侵擾,為保持本群的技術氛圍,本群入群方式修改為付費入群
- 已經在群內的各位成員,請珍惜這個平臺,一旦違反群規總是討論和 Java 無關話題的,將被清理出群,再次進群,你只能付費,不守規矩是有代價的
- 新入群的朋友,請先查閱群公告,瞭解下群規,入群后,歡迎有準備的提問,拒絕拿來主義
- 入群所需費用,會被充當群費
- 如果有朋友覺得本群/本篇文章幫到了你,也可以聯絡我(Q或知乎私信),為本群捐贈群費,我會在公告裡向大家公示數額及用途
- 群費用途:為大家合購教程、為群續費、由我牽頭做一些特定的事情(投票決定)等等
- 再次重申:培訓機構、群宣水軍、拿來主義者,請自覺遠離
除中文教程,我也提供英文教程(質量更佳),簡單展示如下:
- Lynda - Java 8 新特性
- LiveLessons - 深入 Spring 框架
<img src="https://pic4.zhimg.com/9df7354b5955e11d2dfd1fa427153333_b.jpg" data-rawwidth="1155" data-rawheight="654" class="origin_image zh-lightbox-thumb" width="1155" data-original="https://pic4.zhimg.com/9df7354b5955e11d2dfd1fa427153333_r.jpg">
- InfiniteSkills - GIT 實戰
- Pluralsight - Angular JS 基礎教程
- Pluralsight - C# 基礎教程
- Tutsplus - 谷歌地圖接入
- Frontend Masters(前端大師) - Advanced JS Fundamentals to jQuery and Pure DOM Scripting
- CodeSchool - GitHub 基礎教程
<img src="https://pic4.zhimg.com/9398cb4b450f1119f60c723bf145b06f_b.png" data-rawwidth="1246" data-rawheight="697" class="origin_image zh-lightbox-thumb" width="1246" data-original="https://pic4.zhimg.com/9398cb4b450f1119f60c723bf145b06f_r.png">
我的其他回答: