天天看點

Java的前景如何,好不好自學?(2)

第二本,《Java 核心技術卷一》

《Java核心技術卷一》是唯一可以和《Java程式設計思想》媲美的一本 Java 入門書。單從技術的角度來看,前者更好一些。但上升到思想層面嘛,自然後者更好,兩者的偏重點不同。

思想不會變,是以《Java程式設計思想》還停留在第 4 版(2007 年);而技術是要更新疊代的,是以《Java核心技術卷一》來到了第十版(2016 年)。

我們來看一下《Java核心技術卷一》第十版的大綱。

第三本,《Java 程式設計思想》

這本書在豆瓣的評分高達 9.1 分,但我總覺得有點虛高。

記得剛上大學那會,就在某寶上買了一本影印版的《Java 程式設計思想》,但由于初學 Java,對程式設計極度缺乏信心,導緻看這本書有一種看天書的感覺。後來,去蘇州參加工作的時候把它作為最寶貴的紀念品帶了過去。

2014 年回洛陽的時候把它送給了一位關系還不錯的同僚,權當是分别的禮物吧。2016 年的時候,我又重新買了一本,希望自己能夠夯實一下基礎。但事與願違,它被我束之高閣了,讀起來無比的枯燥。2018 年的時候,我重新捧起它讀了一遍,總覺得有一種莫名的負罪感。

《Java程式設計思想》無疑一直都會被大力推薦,可是第四版的出版時間竟然早在 2007 年,全書大部分的代碼是基于 JDK 1.5 完成的。如今什麼年代了?

告訴你一個好消息,《Java程式設計思想》的作者 Bruce Eckel 在 2017 年的時候釋出了第五版,沒想到吧?為什麼在網上都看不到這本書的消息呢?因為改名了,而且隻有電子版。

這本書的所有源代碼已經開源在 GitHub,傳送門:

https://github.com/BruceEckel/OnJava8-Examples

如果英語水準像我一樣菜,看英文版比較費勁,可以在 GitHub 上檢視大嬸們的譯本,傳送門:

https://github.com/LingCoder/OnJava8

如果英語水準還不錯,可以自行購買電子版的《On Java 8》,雖然比較貴。

第四本,《Effective Java》

《Effective Java》除了翻譯讓衆多 Java 程式員诟病之外,再沒有任何缺點了(有讀者戲稱:“這本書為翻譯們作出了傑出的表率”)。其目标是幫助 Java 程式員更加有效地使用 Java 程式設計語言及其基本類庫,主要涉及到 java.lang、java.util、 java.io 包下面的類。

《Effective Java》第三版一共包含了 90 條極具實用價值的經驗規則,每條規則都值得 Java 程式員在實戰中去參照。這本書不需要按部就班地從頭到尾讀,可以随意挑選任意小節進行閱讀,因為每條規則相對都是獨立的,盡管它們之間會交叉引用,但并不妨礙我們随心所欲地閱讀。

作者 Josh Bloch 非常的牛逼,曾是 Google 的首席 Java 架構師,《Java開發者雜志》将他列為世界上最頂尖的四十名軟體人物之一。Java 之父詹姆斯·高斯林對《Effective Java》的評價也非常的高。

第五本,《Java網絡程式設計》

《Java網絡程式設計》全面介紹了如何使用 Java 開發網絡程式。網絡程式設計是指編寫運作在多個裝置(計算機)上的程式,這些裝置可以通過網絡連接配接起來。這也是 Java 基礎學習完後必須要學習的一大塊内容,包括:Internet 底層協定(TCP/IP 和 UDP/IP)、網絡輸入和輸出、DNS 互動、定位、識别和下載下傳網絡資源、HTTP 協定(REST、HTTP 頭部和 Cookie)、Socket 通信等等。

這本書的整體評價并不算高,吐槽的反而更多。但是,對于學習 Java 網絡程式設計的基礎知識非常的有用。

第六本,《Java 并發程式設計實戰》

《Java并發程式設計實戰》深入淺出地介紹了 Java 線程和并發程式設計,是一本還算不錯的 Java 并發程式設計參考手冊。本書從并發和線程安全性的基本概念出發,介紹了如何使用類庫來提供基本的并發方案,包括如何利用線程來提高并發應用程式的吞吐量、如何識别可并發執行的任務、如何提高單線程子系統的響應性、如何確定并發程式執行預期的任務,如何提高并發代碼的性能和可伸縮性等等内容。

但我必須要說的是,《Java并發程式設計實戰》這本書并沒有擺脫翻譯枯燥的老毛病,讀起來很需要耐住性子,不然就很難把這本書吃透。當然了,并發程式設計本身就很難,大家要做好心理準備。

第七本《深入了解Java虛拟機》

《深入了解 Java 虛拟機:JVM 進階特性與最佳實踐(第 2 版)》是唯一一本我們國内程式員寫的經典書,可以媲美《Java 程式設計思想》。

這本書牛逼到什麼程度,幾乎所有寫 Java 虛拟機方面的文章,沒有一個不在文章最後注明:本文參考字周志明老師的《深入了解 Java 虛拟機》。假如這篇文章最後沒有注明的話,那保不準是不尊重版權。

第 1 版兩年内印刷近 10 次,好評(五星)如潮,是整個 Java 圖書領域公認的經典著作和暢銷書。

第 2 版共分為 5 大部分,圍繞記憶體管理、執行子系統、程式編譯與優化、高效并發等核心主題對 JVM 進行了全面深入的分析,深刻揭示了 JVM 的工作原理。

第一部分主要介紹了 Java 的技術體系、Java 和 JVM 的發展曆程。

第二部分主要介紹了 JVM 的自動記憶體管理,包括虛拟機的記憶體區域劃分原理,記憶體溢出産生的原因、常見的垃圾收集算法、垃圾收集器的工作原理等等。

第三部分主要介紹了類檔案結構、虛拟機類加載機制、虛拟機位元組碼執行引擎。

第四部分主要介紹了程式的編譯和代碼的優化,闡述了泛型、自動裝箱拆箱、條件編譯等文法糖的原理;還有 HotSpot 的即時編譯器。

第五部分主要介紹了 Java 實作高效并發的原理,包括 JVM 記憶體模型等。

作者周志明更成為了廣大 Java 程式員心目中的大神級人物,厲害厲害了!有讀者曾這樣感歎道:“國内程式員很難再寫出這麼經典的書了!”

如果大家想要成為一名優秀的 Java 程式員,本書不得不讀啊!并且是細細品味的那種。

第八本,《Java性能權威指南》

市面上專注于 Java 性能的書不多,《Java性能權威指南》算是一本很不錯的。通過閱讀本書,我們可以運用 4 個基本原則最大程度地提升性能測試的效果、使用 JDK 自帶的工具收集程式的性能資料、了解 JIT(即時編譯器)編譯器的優缺點、調優 JVM 垃圾收集器、最大程度優化多線程等等。

第九本,《代碼整潔之道》

我可以這麼肯定地說:《代碼整潔之道》值得所有的程式員讀一讀。軟體的品質,不僅依賴于架構,更與代碼品質息息相關。而代碼的品質與其整潔度成正比關系,越整潔的代碼,其品質毫無疑問的就會越高。由于本書中的例子是由 Java 實作的,是以 Java 程式員在讀這本書的時候有着天然的優勢。

如何寫出整潔的代碼呢?Keep It Simple Stupid:代碼簡單直接,不僅能夠提高代碼的效率,還能夠讓閱讀代碼的人賞心悅目。

本書的第一章,對整潔代碼下了一個定義,每個程式員都應該銘記在心。

1、整潔的代碼力求專注,每個方法、每個類都應該全神貫注于一件事;命名更要給人一種“顧名思義”的感覺。

2、整潔的代碼簡單直接,從不隐藏設計者的意圖。

3、整潔的代碼應當有單元測試。

4、整潔的代碼拒絕重複,其表達力直擊人的心靈。

第十本,《設計模式之禅》

《設計模式之禅(第 2 版)》是設計模式領域公認的 3 本經典著作之一,也是我們國内程式員寫的一本書,趣味化十足,讀起來也非常容易了解。這本書值得所有的程式員讀一讀,但 Java 程式員讀起來更容易上手,因為源碼是 Java 完成的。作者名叫秦小波,和我最喜歡的作家王小波同名。

本書可以分為五個部分:

第一部分(第 1~6 章),包含有單一職責原則、裡氏替換原則、依賴倒置原則、接口隔離原則、迪米特法則、開閉原則等内容,對面向對象程式員設計的 6 大原則進行了深刻解讀。

第二部分(第 7~29 章)通過大量生動的案例講解了 23 種最常用的設計模式。包含單例模式、工廠方法模式、抽象工廠模式、模闆方法模式、建造者模式、代理模式、原型模式、中介者模式、指令模式、責任鍊模式、裝飾模式、政策模式、擴充卡模式、疊代器模式、組合模式、觀察者模式、門面模式、備忘錄模式、通路者模式、狀态模式、解釋器模式、享元模式、橋梁模式。

大家都聽說過,學習設計模式非常的重要,那麼為什麼這麼重要呢,設計模式到底是什麼?打個比喻學程式設計就像學武功一樣。

武功要練得很牛逼,有兩樣東西不能丢。第一,是内功;第二,是武功秘籍。内功對應到程式設計就是我們程式設計基礎能力,那程式設計的設計模式就可以想象成國術中的武功秘籍。

設計模式就是根據不同類型場景,設計優雅的(編碼)解決方案。學好設計模式有很多好處,比如,容易看懂經典代碼中的邏輯(很多優秀的開源架構大量使用了設計模式);應對面試時對答如流(設計模是面試重點);可以編寫出優雅的解決方案(或者代碼)。

第十一本,《Java開發手冊》

《Java開發手冊》是每個 Java 程式員都值得擁有的一本參考指南。該手冊涵蓋了程式設計規約、異常日志、單元測試、安全規約、MySQL 資料庫、工程結構、設計規約燈 7 個部分,參考價值極大。

《Java 開發手冊》作為阿裡官方的 Java 代碼規範标準,是行業内領先的開發規範文檔。如果能夠認真踐行該手冊中提到的規約,絕壁能夠幫助 Java 程式員養成良好的程式設計習慣,并且提高代碼的品質和降低項目維護的難度。

據說,這本手冊在阿裡内部打磨了很久很久才對外開放的,是以傾注了很多大佬們的心血。況且,阿裡作為一個大廠,拿出來一份有瑕疵的手冊,多少會丢臉,是以這本手冊絕對值得讀一讀。

本手冊的作者孤盡曾說:

代碼規範這事情,它是一個吃力不讨好,短期沒結果,費心又費力的事情。唯有自己内心的技術情懷。

第十二本,《重構——改善既有的代碼設計》

這本書在業界的名聲也非常的響,隻不過看起來就需要一些精力和耐力,上面這些書看完後,可以看這一本,對于重新審視現有代碼有極大的幫助。

第十三本,《算法》

說起資料結構和算法,我就覺得不好意思,臉上泛起難為情的紅暈。但為什麼我還要說呢?

因為我深受其苦。

我是一個農村走出來的娃,體會過其中的酸甜苦辣,是以我會奉勸各位,以後碰上什麼知識分子上山下鄉的活動,千萬不要去。那不叫體驗生活,那叫體驗“艱苦”生活。

那在敲代碼的過程中,我就經常遇到一些實際的問題,由于無法充分利用資料結構,将資料之間的關系通過合适的算法政策進行有效地存儲轉換,就導緻程式的性能很低。

是以我勸各位新人,趁有大把的時間和精力,多投入一點到資料結構和算法上面去。基礎知識就像是一座大樓的地基,它決定了我們的技術高度。資料結構和算法就是最重要的基礎知識,學習它們的過程就像是在打地基。

上面這張思維導圖提到的資料結構在工作當中太經常使用了,頻率高得就像隔三差五會看到隔壁老王這個詞一樣。

對于算法,如果覺得《算法》這本鴻篇巨制太過枯燥的話,可以選擇《趣學算法》、《啊哈算法》等一些非譯作的,相對趣味化的入門書。

可能很多人會存在這樣一個誤區:算法在工作當中很少會用到,需要的時候面向搜尋引擎解決一下就行了。

但我想說的是,跳槽的時候很有用,因為一些大廠就喜歡考算法。除此之外,算法對閱讀源碼也很有幫助;況且,誰不想做一名程式設計的藝術家呢?長期來看,大腦思考能力是一個人最重要的核心競争力,而算法是為數不多的能夠有效訓練大腦思考能力的途徑之一。

建議四:有哪些優質的 Java 學習視訊

推薦老九門的零基礎學 Java

建議五:有哪些優質的 Java 實戰項目

聽過王陽明先生倡導的“知行合一”吧?我們學習,除了關注網站、部落格、書籍、視訊,最重要的還是要實戰,總不能紙上談兵。那麼優質的 Java 實戰項目就顯得至關重要了。這裡不推薦太多,隻推薦兩個。

1、mall :mall 項目是一套電商系統,包括前台商城系統及背景管理系統,基于 SpringBoot+MyBatis 實作。 前台商城系統包含首頁門戶、商品推薦、商品搜尋、商品展示、購物車、訂單流程、會員中心、客戶服務、幫助中心等子產品。 背景管理系統包含商品管理、訂單管理、會員管理、促銷管理、營運管理、内容管理、統計報表、财務管理、權限管理、設定等子產品。

作者我們線上聊過,人很親切。他的 GitHub 位址:

https://github.com/macrozheng/mall

2、vhr :微人事是一個前後端分離的人力資源管理系統,項目采用SpringBoot+Vue開發。

這是我的好朋友「江南一點雨」自己維護的一個項目,目标星标 12.3k。

GitHub 位址:

https://github.com/lenve/vhr

GitHub 上還有很多不錯的開源項目,但活不在多,而在精。把這兩個實戰項目搞透徹,自學的道路上就已經成功了 70%。