許多Java開發人員都希望通過某種Java成長路線圖,來解答有關:該學習哪些技術,使用哪些工具以及架構之類的問題。
在此,我将向大家展示一張根據自己多年經驗總結出的路線圖。該路線圖在保持簡單可行的基礎上,介紹了各種具有業界标準、且友善多數人遵循的工具和程式庫。
該路線圖如下所示,希望能夠對您起到指導和借鑒的作用。

如圖不清晰,可以關注微信公衆号Java技術棧,在背景回複關鍵字 "19javamap" 擷取高清版。
Java開發人員的必備技能
下面,我們将根據上述Java路線圖,來一起探讨那些開發人員必須學習和掌握的工具、架構、程式庫、以及API。
1、工具
在路線圖中,工具部分主要分為兩塊。
第一部分是作為主要工具的IDE。它能夠起到編譯、運作、調試、分析、測試、比較檔案與代碼、以及重構等作用。
第二部分是建構工具。您需要使用例如Maven和Gradle之類的工具,來建構和部署項目。當然,您也可以選擇使用比較傳統甚至有些老舊的ANT。不過,在處理所有新的Java項目時,我個人更偏好使用Maven或Gradle。
2、JDK API
JDK API是其次需要學習和掌握的方面。根據它對于大多數Java開發人員的重要程度,我将Java集合架構(Collections Framework)、Java并發性(Concurrency)、Java IO與Java 8 API等核心領域都歸納到了此類之中。下面我們逐一進行讨論:
2.1 Java集合架構
這是每個Java開發人員都應該認真學習的Java重要API之一。該API提供了Java中标準資料結構的實作,例如:連結清單、集合、堆棧、隊列、哈希表、以及優先級隊列等。
您至少應該了解的正常對象包括:ArrayList、HashMap、HashSet、LinkedHashSet、以及TreeSet等。它們都有各自不同的屬性。
例如:ArrayList是一個可以增長的動态數組;HashMap是一種哈希表的标準實作,可以被用于存儲各種鍵值對;而HashSet則是一套實作類的集合,它不允許有重複元素的出現。
2.2 Java并發性
在Java集合之後,另一個關鍵的Java API便是多線程與并發性。我個人認為:如果您想成為一名合格的Java開發人員,那麼就必須對Java Concurrency API具有紮實的了解和掌握。
您不僅應該對Thread、Runnable、對象鎖定(Object locking)、以及同步等基本概念有深入的了解,而且還應該熟悉死鎖、活動鎖(livelock)、競争條件、以及如何處理等相關概念。
同時,您也應該了解一些進階的Java概念,例如:如何在Java 5及其後續版本中添加各種同步器,包括:CyclicBarrier、CountDownLatch、Phaser、CompleteableFuture等,以及如何通過Futures在Java中執行異步操作等方面。
2.3 Java IO
通過采訪了100多名Java程式員,我注意并發現到:相比Java集合和Java多線程API,他們對于Java IO和NIO API的了解真是少之又少。雖然多數人已經将大量時間花費在了學習前面兩個API上,但是我們絲毫不應該忽略其他關鍵的API。
有過編寫核心Java應用程式的讀者應該體會到:經常需要使用java.io包中的File、InputStream、OutputStream、Reader和Writer等類。它們都是Java IO API的核心。
同理,如果您想編寫基于套接字的應用程式,那麼就需要通過java.nio API來了解ByteBuffer、FileChannel、Selector和其他關鍵類。
不過在網上,有關傳授Java IO和Java NIO API的資源并不多,你可以通過The Complete Java Masterclass課程資源,來全面掌握此類API。當然,該課程也會涉及到Java API的許多其他基本概念。
2.4 Java 8的各項功能
Java程式員應該學習并掌握的下一個重要API是Java 8的各項功能。可以毫不誇張地說,這些功能徹底改變了如今Java的程式設計方式。
是以,作為一名Java開發人員,您不應該錯過了解與使用Lambda表達式、Stream API、Optional類、以及全新Date and Time API的機會。
Java 8已經釋出5年多了,如今大多數庫都已停止了支援低于Java 8的版本。是以如果您想順利地實作Java應用程式的編寫與調試的話,請趕快抓緊時間學習Java 8的各項新功能。
關注微信公衆号:Java技術棧,在背景回複:Java,可以擷取我整理的 N 篇最新 Java 8-12 新特性教程,都是幹貨。
3、架構
Java的魅力在于它擁有一個充滿活力的生态系統,這意味着其許多架構和程式庫能夠被用于幾乎所有的領域。
目前,被Java開發人員經常使用到的架構和程式庫包括:Spring、Spring Boot、Hibernate、Log4j、以及JUnit等。
3.1 Spring架構
Spring Framework是最流行的Java架構之一。實際上過去五年裡,我在幾乎所有工作過的Java應用程式中,都使用了該架構。推薦:Spring 常犯的十大錯誤!
Spring Framework不但能夠讓開發人員編寫出簡潔的代碼,而且還能夠通過依賴注入(Dependency Injection)和控制反轉(Inversion of Control)等功能,輕松地測試與維護代碼。它擁有豐富API,可适用于大多數日常任務,恐怕這也就是為什麼Java開發人員應該學習Spring架構的原因。
3.2 Hibernate
在我的路線圖中,第二個推薦給Java開發人員學習的架構是Hibernate。它是基于Java持久性的API(JPA,Java Persistence API)。更準确地說,Hibernate早于JPA,但是由于JPA是在Java中實作了持久層的标準API,是以Hibernate也能夠實作它。
由于大多數Java應用程式都需要與資料庫進行互動,是以開發人員可以通過Java Hibernate之類的架構,使用JDBC來處理Java中的資料庫相關操作。另外,由于Hibernate提供了開箱即用的緩存和事務等基本功能,是以開發人員能夠擁有更多的時間,去專注于應用程式的邏輯,而不用考慮如何去實作緩存。顯然,Hibernate大幅提高了Java應用程式的性能。
3.3 Spring Boot
我在此推薦的第三個架構是Spring Boot。就像Spring能夠使得建立Java應用程式更加容易那樣,延續了Spring簡化化理念的Spring Boot,通過自動配置之類的功能,消除了建立和配置基于Spring的Java應用程式的各種麻煩步驟。
另外,其入門級的POM功能,将常用的依賴項分組成為了多個簡單且可重用的POM。
關注微信公衆号:Java技術棧,在背景回複:boot,可以擷取我整理的 N 篇最新 Spring Boot 教程,都是幹貨。
4、測試
測試,尤其是單元測試、內建測試和自動化測試,是任何Java開發人員必修的一項基本技能。其中,JUnit和Mockito是兩種被Java開發人員最為熟悉、且歡迎的單元測試和模拟庫。
當然,您也可以去學習一下更進階的程式庫,例如:用于業務驅動測試的Cucumber,用于內建測試的Robot Framework,以及您肯定“繞不開”的JUnit。
在常見的PowerMock、Mockito和EasyMock三種模拟庫中,我強烈建議您學習Mockito。由于目前有許多Java開發人員和公司都在使用它,是以它已逐漸成為了在Java中建立模拟對象的标準庫。
5、實用程式庫
一直以來,Java都擁有着豐富的開源程式庫,它們可以幫助開發人員實作從日志記錄到機器學習,從發送HTTP請求到解析JSON等,幾乎所有的工作。
值得一提的是:Apache Commons和Google Guava這兩個實用程式庫,它們是Java JDK庫的有效補充。
希望該清單能夠幫助您編寫出更加優秀,運作效率更高的Java程式代碼。