【大学四年自学Java的学习路线】写了一个月,这是一份最适合普通大众、非科班的路线,祝你零基础快速找到一份满意的工作
零基礎(chǔ)自學(xué) Java,大概多久可以找到工作?
最近又有一個(gè)讀者“在你的世界各地”向我提了上面這個(gè)問題。但說實(shí)話,這個(gè)問題并不太好問答。因?yàn)?Java 是一門“歷史悠久”的編程語言,它的學(xué)習(xí)資料多到令人眼花繚亂。
但不能為自己找借口啊,畢竟讀者就是上帝。于是我花了一個(gè)月的時(shí)間,精心為你準(zhǔn)備了一份萬字長文,史上最佳的 Java 自學(xué)指南,保證你能找到一份滿意的工作。
先來梳理一下讀者強(qiáng)調(diào)的關(guān)鍵詞,有 3 個(gè),分別是“零基礎(chǔ)”、“自學(xué)”、“找到工作”。
1)“零基礎(chǔ)”意味著我提供的學(xué)習(xí)路線不能太難,或者說應(yīng)該是循序漸進(jìn)的。
2)“自學(xué)”意味著我提供的學(xué)習(xí)素材不能太枯燥,或者說應(yīng)該是幽默風(fēng)趣的。
3)“找到工作”意味著學(xué)習(xí)周期要盡可能的短,但還要學(xué)有所成。
01、為什么要學(xué) Java
因?yàn)?Java 是世界第一的編程語言啊!誰給的底氣?大概是 TIOBE 這個(gè)編程語言排行榜吧。
TIOBE 是編程語言流行趨勢的一個(gè)指標(biāo),每月更新,基于互聯(lián)網(wǎng)上有經(jīng)驗(yàn)的程序員、課程和第三方廠商的數(shù)量。排名使用著名的搜索引擎(Google、Bing、Wikipedia)進(jìn)行計(jì)算。
上面這幅圖是幾個(gè)熱門編程語言(Java、C、Python、JavaScript 等等)近些年來的增長趨勢。可以看得出,Java 霸占這份榜單很多年,并且還會(huì)持續(xù)更久。
1)簡單易學(xué),老少咸宜。Java 繼承了 C++ 語言面向?qū)ο蟮暮诵募夹g(shù),舍棄了容易引起錯(cuò)誤的指針,移除了運(yùn)算符重載和多重繼承等難以理解的概念,增加了垃圾回收機(jī)制,這些大大簡化了程序員的開發(fā)成本。
2)跨平臺(tái)。任何平臺(tái)只要安裝了 JVM(Java 虛擬機(jī)),就能運(yùn)行 Java 程序。真正實(shí)現(xiàn)了“Write once, run anywhere”。
3)豐富的類庫。全球約有 900 萬名 Java 開發(fā)人員,創(chuàng)造了一個(gè)充滿活力和積極進(jìn)取的 Java 社區(qū),開源類庫非常豐富。借助這些類庫可以讓開發(fā)者避免重復(fù)造輪子,不用去關(guān)注 Java 底層的開發(fā),只關(guān)注業(yè)務(wù)的實(shí)現(xiàn)。
4)廣泛使用。據(jù)估計(jì),全球范圍內(nèi)有超過 30 億部設(shè)備運(yùn)行 Java,超過其他任何一種語言。Java 被用于眾多全球知名的網(wǎng)站中,包括 eBay.com、Linkedin.com、Amazon.com 和 Facebook.com。這一點(diǎn)應(yīng)該是 Java 屹立不倒的深層次原因吧,大家都在用,才是真的強(qiáng)啊。
5)薪資可觀。很多企業(yè)都需要 Java 方面的人才,這是一個(gè)非常現(xiàn)實(shí)的原因,為了生計(jì)著想,學(xué)習(xí) Java 這個(gè)方向不會(huì)有錯(cuò)!
02、哪些 Java 知識(shí)不需要再學(xué)了
張無忌在學(xué)太極拳的時(shí)候,他爹的師父張三豐告誡他一定要把之前所學(xué)習(xí)的武功全部忘掉,忘得越多就會(huì)學(xué)得越快。
同樣的,自學(xué) Java 的時(shí)候一定要先知道哪些 Java 知識(shí)不需要再學(xué)了,畢竟技術(shù)的更新迭代就好像火箭一樣快,Java 的一些知識(shí)點(diǎn)早已經(jīng)過時(shí)了。如果不懂得斷舍離,那學(xué)起來就不免太痛苦了。
1)AWT 和 Swing
真不知道為什么,有些書籍還在介紹 AWT 和 Swing,這就好像不知道大清朝早已經(jīng)亡了幾百年一樣。已經(jīng) 9102 了,誰還會(huì)用 AWT 和 Swing 去開發(fā)桌面應(yīng)用呢?
就我所知,C++ 程序員會(huì)用 MFC,C# 程序員會(huì)用 Winform 和 WPF。甚至還可以用一種更時(shí)髦的技術(shù)(比如 Electron)把 Web 網(wǎng)頁裹一層華麗的外衣,變成可執(zhí)行文件。
2)Applet
作為網(wǎng)頁插件技術(shù),Applet 壓根就沒流行起來,就連曾經(jīng)的熱門 Flash 也要淘汰了。
3)XML
XML 還沒有被淘汰,應(yīng)用的地方還有不少。但是作為一種數(shù)據(jù)傳輸格式,它正在被 JSON 替代。
4)JDBC
我個(gè)人不建議再學(xué)習(xí)偏底層的 JDBC 了,尤其是對(duì)于時(shí)間寶貴的自學(xué)程序員來說。與其花這點(diǎn)時(shí)間,不如把精力投入到 MyBatis 的學(xué)習(xí)上。
5)Struts
Struts 是早年一個(gè)優(yōu)秀的 MVC 框架,單從技術(shù)的角度來看,還是蠻不錯(cuò)的。但是自從有了 SpringMVC 后,Struts 就被拍死在沙灘上了。
6)Hibernate
在我剛參加工作那會(huì)(2010 年的時(shí)候),持久層框架用的正是 Hibernate。但時(shí)過境遷,Hibernate 太重量級(jí)了,學(xué)習(xí)成本太高,取而代之的是輕量級(jí)的 MyBatis(支持定制化 SQL、存儲(chǔ)過程以及高級(jí)映射)。
7)JSP
說起來慚愧,我現(xiàn)在維護(hù)的一個(gè)項(xiàng)目,視圖層用的依然是 JSP。但如今流行的是“前后端分離”,JSP 就顯得不合時(shí)宜了。
03、學(xué)習(xí) Java 需要安裝的軟件
工欲善其事必先利其器,戰(zhàn)斗之前我們要先配備好武器。
1)JDK
JDK 是 Java Development ToolKit 的簡稱,也就是 Java 開發(fā)工具包。JDK 是整個(gè) Java 的核心,包括 Java 運(yùn)行環(huán)境(Java Runtime Envirnment,簡稱 JRE),Java 工具(比如 javac、java、javap 等等),以及 Java 基礎(chǔ)類庫(比如 rt.jar)。
2)IDE
集成開發(fā)環(huán)境(IDE,Integrated Development Environment )是用于提供程序開發(fā)環(huán)境的應(yīng)用程序,一般包括代碼編輯器、編譯器、調(diào)試器和圖形用戶界面工具。集成了代碼編寫功能、分析功能、編譯功能、調(diào)試功能等一體化的開發(fā)軟件服務(wù)套。
在我初學(xué) Java 的時(shí)候,老師竟然告誡我們不要使用 IDE(當(dāng)時(shí)是 MyEclipse 風(fēng)靡的年代),而要使用文本編輯工具,比如說 Editplus、Nodepad++。
老師說的有一定的道理,比如說,在沒有代碼提醒的幫助下,我們能夠通過不停的手敲記住一些 Java 的常見名詞。但在我看來也就僅此而已。
沒有 IDE 的幫助,讓初學(xué)者對(duì)編程望而生畏,因?yàn)槟切┟~實(shí)在是太多了。我們班當(dāng)時(shí)很多同學(xué)就是因?yàn)橛X得太痛苦了,就放棄編程了。
我到現(xiàn)在也不太會(huì)敲 extends、implements(在 Eclipse 中復(fù)制出來的),不會(huì)敲又怎樣呢?有好的工具,我們就應(yīng)該利用,不應(yīng)該受苦。
下面是最為受歡迎的 IDE 的榜單。
對(duì)于我來說,一直喜歡的是 Eclipse,這可能是一種情懷吧。
據(jù)說,喜歡 IntelliJ IDEA 的 Java 程序員越來越多了。
3)JAD
將源代碼轉(zhuǎn)換成二進(jìn)制執(zhí)行代碼的過程叫做“編譯”,一般指的是將 Wanger.java 編譯成 Wanger.class 字節(jié)碼文件;而將字節(jié)碼文件轉(zhuǎn)換成源代碼的過程叫做“反編譯”,比如將 Wanger.class 轉(zhuǎn)成 Wanger.java。
JAD 是一款老牌的、經(jīng)典的 Java 反編譯工具。更重要的是,JAD 能夠讓我們深入的了解 Java 代碼的工作機(jī)制。
比如說有這樣一段代碼:
String chenmo = "沉默"; String wanger = "王二";System.out.println(chenmo + wanger);它的“廬山真面目”是下面這樣子的。
String chenmo = "\u6C89\u9ED8"; // 沉默 String wanger = "\u738B\u4E8C"; // 王二 System.out.println((new StringBuilder(String.valueOf(chenmo))).append(wanger).toString());4)Maven
Maven 是一個(gè)項(xiàng)目管理和自動(dòng)化構(gòu)建工具,基于項(xiàng)目對(duì)象模型(POM)的概念,可以管理項(xiàng)目的構(gòu)建、報(bào)告以及文檔。作為 Apache 組織中的一個(gè)頗為成功的開源項(xiàng)目,Maven 主要服務(wù)于基于 Java 的項(xiàng)目構(gòu)建、依賴管理和項(xiàng)目信息管理。
04、推薦一些優(yōu)質(zhì)的 Java 學(xué)習(xí)網(wǎng)站
經(jīng)常有一些讀者問我:“二哥,學(xué)習(xí) Java 應(yīng)該關(guān)注哪些網(wǎng)站?”,我之前的態(tài)度一直是上知乎、上搜索引擎搜一下不就知道了。但讀者對(duì)我這個(gè)態(tài)度很不滿意,他們說,“我在問你,又不是問知乎,問搜索引擎。”你還別說,讀者說得有道理。
于是我想,那就推薦一些吧。先說我心目中的前三名,但不局限于 Java 學(xué)習(xí)者。
1)Google
啥都不說了,說多了都是淚,可氣的是 Robin 李的搜索引擎實(shí)在是不爭氣。說句良心話,Google 的搜索結(jié)果比前者的質(zhì)量高出一百(零一)倍。
Google 也算是網(wǎng)站?必須算啊。只要你想要學(xué)習(xí),它會(huì)給你所有。
2)Stack Overflow
Stack Overflow 可以說是解決問題的殺手锏。下面這些問題是不是都很常見?
如果英語能力不太好的話,可以借助一下 Chrome 瀏覽器的自動(dòng)翻譯功能。
3)GitHub
GitHub 是一個(gè)擁有數(shù)十億行代碼的網(wǎng)站,每天有數(shù)百萬開發(fā)者聚集在一起,研究開源軟件中存在的問題。
對(duì)于普通的程序員來說,如果不想重復(fù)造輪子,就必須要站在巨人的肩膀上,那么巨人是誰呢?就是 GitHub。那些牛逼的開源軟件庫,99% 的情況下會(huì)在 GitHub 上找到它。
對(duì)于成功的程序員來說,如果想要被別人膜拜,最好能在 GitHub 上貢獻(xiàn)一個(gè)開源庫,如果星標(biāo)超過 1W,那可是相當(dāng)?shù)呐1?#xff0c;在業(yè)界應(yīng)該算是響當(dāng)當(dāng)?shù)娜宋铩?/p>
然后,我再推薦一些 Java 程序員必須要關(guān)注的網(wǎng)站。
4)IBM Developer
IBM developerWorks 提供了中文版,里面的文章都屬于非常高質(zhì)量的。
5)Java SE 技術(shù)文檔,https://docs.oracle.com/javase/8/docs/api/
即使是 Java 編程的大牛 , 也離不開這份文檔。中文版的 API 可以參照:http://tool.oschina.net/apidocs/apidoc?api=jdk-zh
6)Java World
這個(gè)網(wǎng)站包含了大量的 Java 教程 , 涉及各種各樣的話題。其中很多文章都寫的很好 , 并且有圖片、插圖進(jìn)行說明。它可以被用來當(dāng)作深度學(xué)習(xí)的教科書。英文能力有限的話,可以使用谷歌翻譯。
7)Program Creek
Program Creek 在維護(hù)方面做的很好 , 文章讀起來也比較有趣。在這里 , 你可以找到其他任何網(wǎng)站都不曾涉及到的話題 , 而且?guī)缀趺科恼露及恋牟鍒D或者示例代碼。
8)LeetCode
備戰(zhàn)技術(shù)面試?力扣提供了海量技術(shù)面試資源,幫助你高效提升編程技能,輕松拿下世界 IT 名企 Dream Offer。
刷題的話,還有一個(gè)牛客網(wǎng)值得推薦,里面各個(gè)公司的面試題和面經(jīng)分享,找工作前認(rèn)真刷一刷,一定會(huì)大有所獲。這里強(qiáng)調(diào)一下刷題的重要性:
- 可以讓思維保持活躍
- 強(qiáng)化對(duì)基本知識(shí)的理解
- 要想找到工作,就要過面試,不刷題怎么能行
9)CSDN,https://www.csdn.net/
網(wǎng)站很多,重要的是挑幾個(gè)自己喜歡的關(guān)注,持續(xù)不斷地學(xué)習(xí),就能夠取得顯著的進(jìn)步。
05、推薦一些優(yōu)質(zhì)的 Java 書籍
不知不覺,我已經(jīng)接觸 Java 11 年了——從 2008 年北京奧運(yùn)會(huì)那年開始,到現(xiàn)在;未來還會(huì)更久。
這期間我讀了不少 Java 方面的書籍,紙質(zhì)版的少說有三十來本吧,更何況還有不少的電子書。萬事都有好壞,書也一樣。有的是精神糧食,有的純粹是浪費(fèi)時(shí)間。
這里就分享一些我精挑細(xì)選后的優(yōu)質(zhì)書籍,希望能幫大家少走點(diǎn)彎路。
1)《Java 編程思想》
這本書在豆瓣的評(píng)分高達(dá) 9.1 分,但我總覺得有點(diǎn)虛高。
記得剛上大學(xué)那會(huì),就在某寶上買了一本影印版的《Java 編程思想》,但由于初學(xué) Java,對(duì)編程極度缺乏信心,導(dǎo)致看這本書有一種看天書的感覺。后來,去蘇州參加工作的時(shí)候把它作為最寶貴的紀(jì)念品帶了過去。
2014 年回洛陽的時(shí)候把它送給了一位關(guān)系還不錯(cuò)的同事,權(quán)當(dāng)是分別的禮物吧。2016 年的時(shí)候,我又重新買了一本,希望自己能夠夯實(shí)一下基礎(chǔ)。但事與愿違,它被我束之高閣了,讀起來無比的枯燥。2018 年的時(shí)候,我重新捧起它讀了一遍,總覺得有一種莫名的負(fù)罪感。
《Java 編程思想》是個(gè)大部頭,足足 880 頁,文字更是密密麻麻。我不建議大家一個(gè)字一個(gè)字的讀,知曉其中的精華就可以了。如果你覺得這本書讀起來很痛苦,不妨來讀一讀我加工潤色后分享博文,足足 25 篇,每一篇都很精彩。
先來通過思維導(dǎo)圖看一下這 25 篇 Java 博文涉及到的知識(shí)點(diǎn)。
下面是這 25 篇 Java 技術(shù)博文對(duì)應(yīng)的鏈接。
Java 的核心目的和并發(fā)編程
Java:程序不過是幾行代碼的集合
什么是面向?qū)ο缶幊?#xff08;OOP)?
如何理解 Java 中的繼承?
吃人的那些 Java 名詞:對(duì)象、引用、堆、棧
Java 的操作符——“=”號(hào)
害死人的自動(dòng)遞增,不償命的自動(dòng)遞減
Java 流程控制語句
Java是通過什么機(jī)制來確保對(duì)象初始化呢?
Java 訪問權(quán)限控制:public、private、protected
Java代碼復(fù)用的三種常用方式:繼承、組合和代理
Java:多態(tài)乃幸福本源
Java 抽象類和接口,看這一篇就夠了
Java內(nèi)部類
Java String,看這篇就夠了
Java 數(shù)組,看這一篇就夠了
Java 集合類入門篇
HashMap,難的不在Map,而在Hash
Java泛型的重要目的:別讓貓別站在狗隊(duì)里
Java異常處理:給程序罩一層保險(xiǎn)
如果有人再問你 Java 的反射,把這篇文章扔給他
Java枚舉:小小enum,優(yōu)雅而干凈
Java注解(Annotation):請(qǐng)不要小看我!
Java I/O 入門篇
Java:并發(fā)不易,先學(xué)會(huì)用
《Java編程思想》無疑一直都會(huì)被大力推薦,可是第四版的出版時(shí)間竟然早在 2007 年,全書大部分的代碼是基于 JDK 1.5 完成的。如今什么年代了?
告訴你一個(gè)好消息,《Java編程思想》的作者 Bruce Eckel 在 2017 年的時(shí)候發(fā)布了第五版,沒想到吧?為什么在網(wǎng)上都看不到這本書的消息呢?因?yàn)楦拿?#xff0c;而且只有電子版。
這本書的所有源代碼已經(jīng)開源在 GitHub,傳送門:
https://github.com/BruceEckel/OnJava8-Examples
如果英語水平像我一樣菜,看英文版比較費(fèi)勁,可以在 GitHub 上查看大嬸們的譯本,傳送門:
https://github.com/LingCoder/OnJava8
如果英語水平還不錯(cuò),可以自行購買電子版的《On Java 8》,雖然比較貴。
2)《Java 核心技術(shù)卷一》
《Java核心技術(shù)卷一》是唯一可以和《Java編程思》媲美的一本 Java 入門書。單從技術(shù)的角度來看,前者更好一些。但上升到思想層面嘛,自然后者更好,兩者的偏重點(diǎn)不同。
思想不會(huì)變,所以《Java編程思想》還停留在第 4 版(2007 年);而技術(shù)是要更新迭代的,所以《Java核心技術(shù)卷一》來到了第十版(2016 年)。
我們來看一下《Java核心技術(shù)卷一》第十版的大綱。
前九章:包括 “Java 程序設(shè)計(jì)概述”、“Java 程序設(shè)計(jì)環(huán)境”、“Java 的基本程序設(shè)計(jì)結(jié)構(gòu)”、“對(duì)象與類”、“繼承”、“接口”、“l(fā)ambda 表達(dá)式與內(nèi)部類”、“異常”、“斷言和日志”、“泛型程序設(shè)計(jì)”、“集合”。這九章講述的是 Java 基礎(chǔ)知識(shí)點(diǎn),是 Java 程序員必須要掌握的內(nèi)容,所以必看。
第十到第十二章:講的是 AWT 和 Swing,個(gè)人感覺這部分內(nèi)容屬于不需要再學(xué)的 Java 知識(shí)點(diǎn)。當(dāng)然了,窗口編程涉及到的“事件驅(qū)動(dòng)-監(jiān)聽-方法回調(diào)”的機(jī)制蠻重要的,需要掌握,但和 AWT 和 Swing 的關(guān)聯(lián)度不大。就好像,我們?nèi)″X直接去招商銀行,沒必要把招商銀行的錢轉(zhuǎn)到工商銀行再取出來。
第十三章:講的是應(yīng)用部署和 Applet,顯然 Applet 也沒必要學(xué)了。出版社沒有把這部分內(nèi)容刪掉,純粹是為了讓這本書變得更笨重(定價(jià)就高了)。
第十四章:并發(fā)編程。這也是 Java 學(xué)習(xí)過程中最難的一塊之一,另外一難是 Java 虛擬機(jī)。但這是初級(jí)程序員邁向高手的必經(jīng)之路。
整體上來講,《Java核心技術(shù)卷一》非常值得一讀,廣度和深度都恰到好處。強(qiáng)烈推薦。
我知道,有些同學(xué)因?yàn)楣ぷ鲿r(shí)間的原因,一直沒有時(shí)間讀書。像《Java核心技術(shù)卷一》這樣厚得像特朗普的臉皮一樣的書,更是沒有時(shí)間讀了。不過,不要擔(dān)心,二哥替大家解決了這個(gè)煩惱,我用了一個(gè)月的時(shí)間把這本書完整地讀了一遍,并寫了 9 篇高質(zhì)量且通俗易懂的文章,供大家作為參考。
先來通過思維導(dǎo)圖看一下這 9 篇 Java 核心技術(shù)博文涉及到的內(nèi)容。
下面是這 9 篇 Java 核心技術(shù)博文對(duì)應(yīng)的鏈接。
Java面試官:兄弟,你確定double精度比float低嗎?
請(qǐng)用面向?qū)ο蟮乃枷?#xff0c;談一談這次面試的過程
再談 Java 的繼承和超類 Object
Java:接口和抽象類,傻傻分不清楚?
Java生成二維碼分享海報(bào)
Java:優(yōu)雅地處理異常真是一門學(xué)問啊!
教妹學(xué) Java:晦澀難懂的泛型
教妹學(xué)Java:大有可為的集合
教妹學(xué) Java:難以駕馭的多線程
3)《Head First Java》
在我遇到《Head First Java》之前,如果你要我推薦 Java 技術(shù)書,我會(huì)毫不猶豫地推薦《Java 編程思想》和《Java 核心技術(shù)卷》,因?yàn)榇蠹叶颊f好嘛,我只能“同流合污”了(強(qiáng)顏歡笑);但換成是現(xiàn)在的話,我會(huì)優(yōu)先推薦《Head First Java》。
盡管《Head First Java》也非常的厚,至少比我的臉皮后,但趣味性就要甩前面兩本好幾條街了。這年頭,大家都沒時(shí)間讀枯燥的技術(shù)書,尤其是厚的。上一張圖大家感受一下《Head First Java》的調(diào)皮吧。
就沖著這張圖,我覺得《Head First Java》的作者就足夠的大膽。作者挑選的圖片可以說張張經(jīng)典,真正實(shí)現(xiàn)了“圖文并茂”的需求,搞得你感覺有點(diǎn)不好意思,仿佛不是在讀一本 Java 技術(shù)書,而是在讀一本《知音》。
不止是圖片,還有游戲、拼圖、解謎題以及意想不到的內(nèi)容。真的是一點(diǎn)都不“正經(jīng)”,正因?yàn)槿绱?#xff0c;閱讀起來才感覺興趣盎然。
第一章主要介紹了 Java 的工作原理、發(fā)展簡史、程序結(jié)構(gòu)。
第二章主要介紹了 Java 的面向?qū)ο?#xff0c;包括繼承、覆蓋等內(nèi)容。
什么是面向?qū)ο缶幊?#xff08;OOP)?
第三章主要介紹了 Java 的變量。關(guān)鍵點(diǎn):引用變量存儲(chǔ)的是對(duì)象的地址(儲(chǔ)存方式)、數(shù)組也是對(duì)象。
為什么要將局部變量的作用域最小化?
第四章主要介紹了 Java 的方法。關(guān)鍵點(diǎn):實(shí)參和形參、值傳遞和引用傳遞、== 和 equals()。
Java到底是值傳遞還是引用傳遞?
如何比較 Java 的字符串?
第五章主要介紹了程序設(shè)計(jì)與實(shí)現(xiàn)的步驟。
第六章主要介紹了 Java 的 API。關(guān)鍵點(diǎn):ArrayList。
第七章主要介紹了繼承和多態(tài)。關(guān)鍵點(diǎn):覆蓋和重載。
第八章主要介紹了接口和抽象類。關(guān)鍵點(diǎn):超類 Object。
再談 Java 的繼承和超類 Object
第九章主要介紹了構(gòu)造器與垃圾收集器。關(guān)鍵點(diǎn):對(duì)象存儲(chǔ)在堆中,對(duì)象引用在棧中;當(dāng)對(duì)象失去最后一個(gè)引用變量時(shí),它會(huì)被回收。
第十章主要介紹了靜態(tài)類、靜態(tài)方法、靜態(tài)變量。關(guān)鍵點(diǎn):final、常量、數(shù)字格式化、日期表示法。
第十一章主要介紹了異常處理。
第十二章和第十三章,主要介紹了 GUI 和 Swing。關(guān)鍵點(diǎn):事件處理機(jī)制。
第十四章主要介紹了序列化和文件輸入/輸出。關(guān)鍵點(diǎn):Serializable接口。
Java Serializable:明明就一個(gè)空的接口嘛
第十五章主要介紹了網(wǎng)絡(luò) Socket 和多線程。
Java Socket:飛鴿傳書的網(wǎng)絡(luò)套接字
Java 網(wǎng)絡(luò)編程:必知必會(huì)的 URL 和 URLConnection
第十六章主要介紹了集合和泛型。
第十七章主要介紹了程序的打包和發(fā)布。
第十八章主要介紹了遠(yuǎn)程服務(wù)調(diào)用。
4)《Effective Java》
《Effective Java》除了翻譯讓眾多 Java 程序員詬病之外,再?zèng)]有任何缺點(diǎn)了(有讀者戲稱:“這本書為翻譯們作出了杰出的表率”)。其目標(biāo)是幫助 Java 程序員更加有效地使用 Java 編程語言及其基本類庫,主要涉及到 java.lang、java.util、 java.io 包下面的類。
《Effective Java》第三版一共包含了 90 條極具實(shí)用價(jià)值的經(jīng)驗(yàn)規(guī)則,每條規(guī)則都值得 Java 程序員在實(shí)戰(zhàn)中去參照。這本書不需要按部就班地從頭到尾讀,可以隨意挑選任意小節(jié)進(jìn)行閱讀,因?yàn)槊織l規(guī)則相對(duì)都是獨(dú)立的,盡管它們之間會(huì)交叉引用,但并不妨礙我們隨心所欲地閱讀。
作者 Josh Bloch 非常的牛逼,曾是 Google 的首席 Java 架構(gòu)師,《Java開發(fā)者雜志》將他列為世界上最頂尖的四十名軟件人物之一。Java 之父詹姆斯·高斯林對(duì)《Effective Java》的評(píng)價(jià)也非常的高。
這里有一份第三版的中文在線翻譯文檔,大家可以參照一下。
https://github.com/sjsdfg/effective-java-3rd-chinese/tree/master/docs/notes
我在讀這本書的時(shí)候,曾寫過兩篇文章,大家也可以閱讀一下。
為什么要將局部變量的作用域最小化?
面試官:兄弟,說說基本類型和包裝類型的區(qū)別吧
5)《Java網(wǎng)絡(luò)編程》
《Java網(wǎng)絡(luò)編程》全面介紹了如何使用 Java 開發(fā)網(wǎng)絡(luò)程序。網(wǎng)絡(luò)編程是指編寫運(yùn)行在多個(gè)設(shè)備(計(jì)算機(jī))上的程序,這些設(shè)備可以通過網(wǎng)絡(luò)連接起來。這也是 Java 基礎(chǔ)學(xué)習(xí)完后必須要學(xué)習(xí)的一大塊內(nèi)容,包括:Internet 底層協(xié)議(TCP/IP 和 UDP/IP)、網(wǎng)絡(luò)輸入和輸出、DNS 交互、定位、識(shí)別和下載網(wǎng)絡(luò)資源、HTTP 協(xié)議(REST、HTTP 頭部和 Cookie)、Socket 通信等等。
這本書的整體評(píng)價(jià)并不算高,吐槽的反而更多。但是,對(duì)于學(xué)習(xí) Java 網(wǎng)絡(luò)編程的基礎(chǔ)知識(shí)非常的有用。
6)《Java 并發(fā)編程實(shí)戰(zhàn)》
《Java并發(fā)編程實(shí)戰(zhàn)》深入淺出地介紹了 Java 線程和并發(fā)編程,是一本還算不錯(cuò)的 Java 并發(fā)編程參考手冊(cè)。本書從并發(fā)和線程安全性的基本概念出發(fā),介紹了如何使用類庫來提供基本的并發(fā)方案,包括如何利用線程來提高并發(fā)應(yīng)用程序的吞吐量、如何識(shí)別可并發(fā)執(zhí)行的任務(wù)、如何提高單線程子系統(tǒng)的響應(yīng)性、如何確保并發(fā)程序執(zhí)行預(yù)期的任務(wù),如何提高并發(fā)代碼的性能和可伸縮性等等內(nèi)容。
但我必須要說的是,《Java并發(fā)編程實(shí)戰(zhàn)》這本書并沒有擺脫翻譯枯燥的老毛病,讀起來很需要耐住性子,不然就很難把這本書吃透。當(dāng)然了,并發(fā)編程本身就很難,大家要做好心理準(zhǔn)備。
7)《深入理解Java虛擬機(jī)》
《深入理解 Java 虛擬機(jī):JVM 高級(jí)特性與最佳實(shí)踐(第 2 版)》是唯一一本我們國內(nèi)程序員寫的經(jīng)典書,可以媲美《Java 編程思想》。
這本書牛逼到什么程度,幾乎所有寫 Java 虛擬機(jī)方面的文章,沒有一個(gè)不在文章最后注明:本文參考字周志明老師的《深入理解 Java 虛擬機(jī)》。假如這篇文章最后沒有注明的話,那保不準(zhǔn)是不尊重版權(quán)。
第 1 版兩年內(nèi)印刷近 10 次,好評(píng)(五星)如潮,是整個(gè) Java 圖書領(lǐng)域公認(rèn)的經(jīng)典著作和暢銷書。
第 2 版共分為 5 大部分,圍繞內(nèi)存管理、執(zhí)行子系統(tǒng)、程序編譯與優(yōu)化、高效并發(fā)等核心主題對(duì) JVM 進(jìn)行了全面深入的分析,深刻揭示了 JVM 的工作原理。
第一部分主要介紹了 Java 的技術(shù)體系、Java 和 JVM 的發(fā)展歷程。
第二部分主要介紹了 JVM 的自動(dòng)內(nèi)存管理,包括虛擬機(jī)的內(nèi)存區(qū)域劃分原理,內(nèi)存溢出產(chǎn)生的原因、常見的垃圾收集算法、垃圾收集器的工作原理等等。
第三部分主要介紹了類文件結(jié)構(gòu)、虛擬機(jī)類加載機(jī)制、虛擬機(jī)字節(jié)碼執(zhí)行引擎。
第四部分主要介紹了程序的編譯和代碼的優(yōu)化,闡述了泛型、自動(dòng)裝箱拆箱、條件編譯等語法糖的原理;還有 HotSpot 的即時(shí)編譯器。
第五部分主要介紹了 Java 實(shí)現(xiàn)高效并發(fā)的原理,包括 JVM 內(nèi)存模型等。
作者周志明更成為了廣大 Java 程序員心目中的大神級(jí)人物,厲害厲害了!有讀者曾這樣感嘆道:“國內(nèi)程序員很難再寫出這么經(jīng)典的書了!”
如果大家想要成為一名優(yōu)秀的 Java 程序員,本書不得不讀啊!并且是細(xì)細(xì)品味的那種。
8)《Java性能權(quán)威指南》
市面上專注于 Java 性能的書不多,《Java性能權(quán)威指南》算是一本很不錯(cuò)的。通過閱讀本書,我們可以運(yùn)用 4 個(gè)基本原則最大程度地提升性能測試的效果、使用 JDK 自帶的工具收集程序的性能數(shù)據(jù)、理解 JIT(即時(shí)編譯器)編譯器的優(yōu)缺點(diǎn)、調(diào)優(yōu) JVM 垃圾收集器、最大程度優(yōu)化多線程等等。
9)《代碼整潔之道》
我可以這么肯定地說:《代碼整潔之道》值得所有的程序員讀一讀。軟件的質(zhì)量,不僅依賴于架構(gòu),更與代碼質(zhì)量息息相關(guān)。而代碼的質(zhì)量與其整潔度成正比關(guān)系,越整潔的代碼,其質(zhì)量毫無疑問的就會(huì)越高。由于本書中的例子是由 Java 實(shí)現(xiàn)的,因此 Java 程序員在讀這本書的時(shí)候有著天然的優(yōu)勢。
如何寫出整潔的代碼呢?Keep It Simple Stupid:代碼簡單直接,不僅能夠提高代碼的效率,還能夠讓閱讀代碼的人賞心悅目。
本書的第一章,對(duì)整潔代碼下了一個(gè)定義,每個(gè)程序員都應(yīng)該銘記在心。
1、整潔的代碼力求專注,每個(gè)方法、每個(gè)類都應(yīng)該全神貫注于一件事;命名更要給人一種“顧名思義”的感覺。
2、整潔的代碼簡單直接,從不隱藏設(shè)計(jì)者的意圖。
3、整潔的代碼應(yīng)當(dāng)有單元測試。
4、整潔的代碼拒絕重復(fù),其表達(dá)力直擊人的心靈。
10)《設(shè)計(jì)模式之禪》
《設(shè)計(jì)模式之禪(第 2 版)》是設(shè)計(jì)模式領(lǐng)域公認(rèn)的 3 本經(jīng)典著作之一,也是我們國內(nèi)程序員寫的一本書,趣味化十足,讀起來也非常容易理解。這本書值得所有的程序員讀一讀,但 Java 程序員讀起來更容易上手,因?yàn)樵创a是 Java 完成的。作者名叫秦小波,和我最喜歡的作家王小波同名。
本書可以分為五個(gè)部分:
第一部分(第 1~6 章),包含有單一職責(zé)原則、里氏替換原則、依賴倒置原則、接口隔離原則、迪米特法則、開閉原則等內(nèi)容,對(duì)面向?qū)ο蟪绦騿T設(shè)計(jì)的 6 大原則進(jìn)行了深刻解讀。
第二部分(第 7~29 章)通過大量生動(dòng)的案例講解了 23 種最常用的設(shè)計(jì)模式。包含單例模式、工廠方法模式、抽象工廠模式、模板方法模式、建造者模式、代理模式、原型模式、中介者模式、命令模式、責(zé)任鏈模式、裝飾模式、策略模式、適配器模式、迭代器模式、組合模式、觀察者模式、門面模式、備忘錄模式、訪問者模式、狀態(tài)模式、解釋器模式、享元模式、橋梁模式。
第三部分(第 30~33 章)對(duì)同類型和相關(guān)聯(lián)的模式進(jìn)行了比較,旨在說明它們之間的差別。
第四部分(第 34~36 章)探討了如何在實(shí)際開發(fā)中將各種設(shè)計(jì)模式混合起來使用的可能性,以發(fā)揮設(shè)計(jì)模式的最大功效。
第五部分(第 37~38 章)主要講解了 5 種新的設(shè)計(jì)模式的原理、意圖和最佳實(shí)踐。
大家都聽說過,學(xué)習(xí)設(shè)計(jì)模式非常的重要,那么為什么這么重要呢,設(shè)計(jì)模式到底是什么?打個(gè)比喻學(xué)編程就像學(xué)武功一樣。
武功要練得很牛逼,有兩樣?xùn)|西不能丟。第一,是內(nèi)功;第二,是武功秘籍。內(nèi)功對(duì)應(yīng)到編程就是我們編程基礎(chǔ)能力,那編程的設(shè)計(jì)模式就可以想象成武術(shù)中的武功秘籍。
設(shè)計(jì)模式就是根據(jù)不同類型場景,設(shè)計(jì)優(yōu)雅的(編碼)解決方案。學(xué)好設(shè)計(jì)模式有很多好處,比如,容易看懂經(jīng)典代碼中的邏輯(很多優(yōu)秀的開源框架大量使用了設(shè)計(jì)模式);應(yīng)對(duì)面試時(shí)對(duì)答如流(設(shè)計(jì)模是面試重點(diǎn));可以編寫出優(yōu)雅的解決方案(或者代碼)。
11)《Java開發(fā)手冊(cè)》
《Java開發(fā)手冊(cè)》是每個(gè) Java 程序員都值得擁有的一本參考指南。該手冊(cè)涵蓋了編程規(guī)約、異常日志、單元測試、安全規(guī)約、MySQL 數(shù)據(jù)庫、工程結(jié)構(gòu)、設(shè)計(jì)規(guī)約燈 7 個(gè)部分,參考價(jià)值極大。
《Java 開發(fā)手冊(cè)》作為阿里官方的 Java 代碼規(guī)范標(biāo)準(zhǔn),是行業(yè)內(nèi)領(lǐng)先的開發(fā)規(guī)范文檔。如果能夠認(rèn)真踐行該手冊(cè)中提到的規(guī)約,絕壁能夠幫助 Java 程序員養(yǎng)成良好的編程習(xí)慣,并且提高代碼的質(zhì)量和降低項(xiàng)目維護(hù)的難度。
據(jù)說,這本手冊(cè)在阿里內(nèi)部打磨了很久很久才對(duì)外開放的,所以傾注了很多大佬們的心血。況且,阿里作為一個(gè)大廠,拿出來一份有瑕疵的手冊(cè),多少會(huì)丟臉,所以這本手冊(cè)絕對(duì)值得讀一讀。
本手冊(cè)的作者孤盡曾說:
代碼規(guī)范這事情,它是一個(gè)吃力不討好,短期沒結(jié)果,費(fèi)心又費(fèi)力的事情。唯有自己內(nèi)心的技術(shù)情懷。
06、推薦一些優(yōu)質(zhì)的 Java 學(xué)習(xí)視頻
我知道,有些同學(xué)更喜歡看視頻教學(xué),那么我也為大家精心準(zhǔn)備了一些。這些視頻我已經(jīng)分門別類了,大家可以按需下載。
這些視頻分為兩大類,Java 基礎(chǔ)和 Java 高級(jí),先來看一下清單。
| Java 基礎(chǔ)語法 | javaboy4096 |
| Java 面向?qū)ο?/td> | javaboy6148 |
| 深入面向?qū)ο蠛蛿?shù)組 | javaboy8200 |
| Java 常用類詳解 | javaboy4105 |
| Java 集合與數(shù)據(jù)結(jié)構(gòu) | javaboy2062 |
| Java 數(shù)據(jù)結(jié)構(gòu)和算法 | javaboy6184 |
| Java IO 流全解析 | javaboy8209 |
| Java 網(wǎng)絡(luò)編程 | javaboy6166 |
| Java 異常機(jī)制解析 | javaboy6157 |
| 深入理解 Java 多線程 | javaboy4114 |
| 手動(dòng)開發(fā)一個(gè) Web 服務(wù)器 | javaboy2071 |
| 獨(dú)立開發(fā) SORM 框架 | javaboy8227 |
| 深入理解 Java 注解+反射 | javaboy8218 |
| Java 23 種設(shè)計(jì)模式 | javaboy4123 |
| 學(xué)會(huì) Java 正則表達(dá)式 | javaboy6175 |
| JDBC 詳解 | javaboy2080 |
| 深入理解 Java 虛擬機(jī) | javaboy2089 |
| Java 解析XML文件 | javaboy8236 |
| IntelliJIDEA 視頻教程 | javaboy4285 |
| Java 編程規(guī)范 | javaboy4222 |
| Java 高并發(fā)秒殺方案 | javaboy8299 |
| 高并發(fā)編程與線程池 | javaboy2170 |
| Java 并發(fā)編程與高并發(fā)實(shí)戰(zhàn) | javaboy6256 |
| Activiti 工作流實(shí)戰(zhàn)解析 | javaboy4204 |
| ActiveMQ 消息中間詳解 | javaboy8326 |
| Dubbo 詳解 | javaboy8335 |
| Linux 快速入門 | javaboy2161 |
| Linux 基本操作 | javaboy6328 |
| Linux 基本命令 | javaboy6409 |
| Maven 詳解 | javaboy8308 |
| Maven 實(shí)戰(zhàn)視頻 | javaboy8443 |
| Git 應(yīng)用詳解 | javaboy4213 |
| Gradle 從入門到精通 | javaboy6391 |
| Svn 入門教程 | javaboy6265 |
| 系統(tǒng)優(yōu)化與 JVM 調(diào)優(yōu) | javaboy8317 |
| JVM 虛擬機(jī)優(yōu)化 | javaboy2224 |
| AIO、BIO、NIO 詳解 | javaboy6274 |
| Netty 高級(jí)視頻教程 | javaboy2179 |
| 單點(diǎn)登錄視頻教程 | javaboy4231 |
| Redis緩存詳解 | javaboy6319 |
| Redis全解析 | javaboy4240 |
| Redis 內(nèi)存數(shù)據(jù) | javaboy4402 |
| Nginx 視頻教程 | javaboy4267 |
| VSFTPD+Nginx 視頻教程 | javaboy6292 |
| Nginx 和高并發(fā) | javaboy2323 |
| MyBatis 視頻教程 | javaboy2197 |
| Hibernate4 視頻教程 | javaboy8353 |
| Spring4 視頻教程 | javaboy8344 |
| SpringMVC 視頻教程 | javaboy4249 |
| MySQL 基礎(chǔ) | javaboy2107 |
| MySQL 高級(jí)教程 | javaboy2305 |
| MySQL 優(yōu)化 | javaboy6211 |
| SSM 框架整合視頻教程 | javaboy6301 |
| Jfinal 視頻教程 | javaboy4258 |
| Shiro 視頻教程 | javaboy6310 |
| Solr 視頻教程 | javaboy2215 |
| Struts2 視頻教程 | javaboy8362 |
| Zookeeper 詳解視頻 | javaboy8371 |
| JUC 視頻教程 | javaboy6400 |
| Java 郵件開發(fā)教程 | javaboy8452 |
| 自己 DIY 一個(gè) Tomcat | javaboy4339 |
| 架構(gòu)師面試攻略(文檔) | javaboy2233 |
| 架構(gòu)師面試攻略(視頻) | javaboy8380 |
學(xué)完這些視頻,可以再把之前推薦的書籍結(jié)合起來讀一讀,一定會(huì)大有所獲!要不,你來揍我😜!
07、推薦一些優(yōu)質(zhì)的 Java 實(shí)戰(zhàn)項(xiàng)目
聽過王陽明先生倡導(dǎo)的“知行合一”吧?我們學(xué)習(xí),除了關(guān)注網(wǎng)站、博客、書籍、視頻,最重要的還是要實(shí)戰(zhàn),總不能紙上談兵。那么優(yōu)質(zhì)的 Java 實(shí)戰(zhàn)項(xiàng)目就顯得至關(guān)重要了。這里不推薦太多,只推薦兩個(gè)。
1、mall :mall 項(xiàng)目是一套電商系統(tǒng),包括前臺(tái)商城系統(tǒng)及后臺(tái)管理系統(tǒng),基于 SpringBoot+MyBatis 實(shí)現(xiàn)。 前臺(tái)商城系統(tǒng)包含首頁門戶、商品推薦、商品搜索、商品展示、購物車、訂單流程、會(huì)員中心、客戶服務(wù)、幫助中心等模塊。 后臺(tái)管理系統(tǒng)包含商品管理、訂單管理、會(huì)員管理、促銷管理、運(yùn)營管理、內(nèi)容管理、統(tǒng)計(jì)報(bào)表、財(cái)務(wù)管理、權(quán)限管理、設(shè)置等模塊。
作者我們線上聊過,人很親切。他的 GitHub 地址:https://github.com/macrozheng/mall
2、vhr :微人事是一個(gè)前后端分離的人力資源管理系統(tǒng),項(xiàng)目采用SpringBoot+Vue開發(fā)。
這是我的好朋友「江南一點(diǎn)雨」自己維護(hù)的一個(gè)項(xiàng)目,目標(biāo)星標(biāo) 12.3k。
GitHub 地址:https://github.com/lenve/vhr
GitHub 上還有很多不錯(cuò)的開源項(xiàng)目,但活不在多,而在精。把這兩個(gè)實(shí)戰(zhàn)項(xiàng)目搞透徹,自學(xué)的道路上就已經(jīng)成功了 70%。
08、推薦一份不錯(cuò)的 Java 面試題
自學(xué)了這么長時(shí)間,我相信大家已經(jīng)躍躍欲試了,能不能一舉拿下 offer,就需要面試題來測試一下了。
我們是 Java 程序員,那么有沒有掌握整個(gè) Java 知識(shí)體系就顯得尤為重要了。很多小伙伴苦于沒有合適的資料來回顧整個(gè) Java 知識(shí)體系,或者不知道從哪開始復(fù)習(xí)。
我找「純潔的微笑」要了一份資料,這份不論是從整個(gè) Java 知識(shí)體系,還是從面試的角度來看,都是一份含技術(shù)量很高的資料。
至于出處,好像是一份美團(tuán)的大佬整理的,這里表示感謝。我截了幾張圖,大家感受一下。
經(jīng)過這一輪面試題的洗禮,我相信大家在面試官前面就不會(huì)再戰(zhàn)戰(zhàn)兢兢了,而是自信滿滿。
09、技術(shù)沒有終點(diǎn)
我記得,讀者“在你的世界各地”向我提問的時(shí)候是 1 個(gè)月前,不過,我沒有讓他失望,終于把這份 20000+ 字的指南整理完畢,其中花費(fèi)了我大量的時(shí)間和精力,但我總覺得這份付出是值得的。我也相信,大家按照我制定的這份學(xué)習(xí)路線學(xué)習(xí)之后,肯定能夠在最短的時(shí)間內(nèi)找到工作!那么現(xiàn)在,我為你送上最真誠的祝福,加油!
當(dāng)然了,技術(shù)這條路是沒有終點(diǎn)的,即便是找到了工作,我們依然需要奮力前行,做最好的自己!
05、肯定會(huì)有很多讀者問我以上推薦的書籍、視頻、面試資料怎么獲取,那我干脆全部分享出來:
你可以在我的原創(chuàng)微信公眾號(hào)『沉默王二』回復(fù)「Java」獲取書單電子書;回復(fù)「免費(fèi)視頻」獲取 500G 視頻資料,超高清的,并且是分門別類的,你按照口令清單想看哪個(gè)看哪個(gè);回復(fù)「面試」獲取價(jià)值連城的面試資料。
有收獲?希望老鐵們來個(gè)三連擊,給更多的同學(xué)看到這篇文章
1、老鐵們,關(guān)注我的原創(chuàng)微信公眾號(hào)「沉默王二」,專注于有趣有益的程序人生,保證你看完有所收獲,不信你打我。
2、給二哥點(diǎn)個(gè)贊唄,可以讓更多的人看到這篇文章,順便激勵(lì)下我,嘻嘻。
作者info
作者:沉默王二,CSDN 2019 年度博客之星,《Web全棧開發(fā)進(jìn)階之路》作者
原創(chuàng)公眾號(hào):『沉默王二』,已寫了 250 多篇文章,專注于有趣的 Java 技術(shù)和有益的程序人生,期待你的關(guān)注。
轉(zhuǎn)載說明:務(wù)必注明來源(注明:來源于公眾號(hào):沉默王二, 作者:沉默王二)
總結(jié)
以上是生活随笔為你收集整理的【大学四年自学Java的学习路线】写了一个月,这是一份最适合普通大众、非科班的路线,祝你零基础快速找到一份满意的工作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 初中计算机软件课后反思,初中信息技术总结
- 下一篇: 从苏宁电器到卡巴斯基第01篇:我的本科时