1. 程式人生 > >Java 服務端入門和進階指南

Java 服務端入門和進階指南

作者:謝龍
連結:https://www.zhihu.com/question/29581524/answer/44872235
來源:知乎
著作權歸作者所有,轉載請聯絡作者獲得授權。

現在網際網路上資源豐富,Java 學習並不難。貼個 Java 服務端入門和進階指南,是給我們組新人入門用的,包括了學習目標、需要掌握的技能和參考資料,並規劃了學習階段和時間,希望幫助到題主。
前言

歡迎加入我們。這是一份針對實習生/畢業生的服務端開發入門與進階指南。遇到問題及時問你的 mentor 或者直接問我。 建議:

  • 儘量用 google 查詢技術資料。
  • 有問題在 stackoverflow 找找,大部分都已經有人回答。
  • 多看官方的技術文件。
  • ibm developerworkers 的文章質量整體上有保障。
  • 平時花一些時間在 github 上閱讀優秀專案原始碼。

入門(1-2 個月)

  1. 目標:參與簡單的專案開發。
  2. 技能:
    • 掌握 Java。經典的《Java 核心技術:卷1 基礎知識》(或者《Java 程式設計思想》)必看,跳過其中的圖形和 applet 章節。習慣查閱 Java API Doc。為了保證程式碼的質量,《Effective Java》、《Clean Code》和《重構 改善既有程式碼的設計》也需要至少通讀一遍。
    • 熟悉 Linux 開發環境和 bash shell。Linux 是我們的開發和部署環境,你最好儘快熟練它。Linux 的基本使用可以通過《鳥哥的Linux私房菜:基礎學習篇(第三版)》學習,開發 bash shell 指令碼可以參考《Linux Shell指令碼攻略》。
    • 掌握開發工具
      • 熟練使用一種 IDE。Intellij IDEA或者 Eclipse 都可以,推薦使用前者。至少熟悉常用的快捷鍵,會 debug(包括遠端 debug)專案。
      • 熟悉一種編輯器。比如 Vim/Emacs/Sublime Text,至少學會搜尋/替換/程式碼補全。
    • 掌握 JDK 以外的常用類庫和工具包。JDK 原生 API 在很多場景下使用並不方便。你需要掌握社群貢獻的優秀類庫和工具包,比如 apache commons、google guava 等,具體可以翻閱服務端技術選型 的Utility 篇。http://xielong.me/2015/04/17/服務端技術選型/
    • 掌握 Web 開發框架。我們使用 Spring(或Rose) + Ibatis(或Jade) 開發 web 服務,你需要熟練掌握它們。
    • 學習程式碼規範。我們大致上遵循 oracle 的 Java 語言編碼規範,你可以先閱讀並熟悉它。Code Formatting 檔案在 [email protected]/coding-standard.git,在編寫程式碼之前,請把它匯入到 IDE 中。另外,確認 IDE 已經安裝 Findbugs 和 CheckStyle 外掛。
    • 熟悉開發流程。我們的開發流程大致如下:功能開發->單元測試->功能測試->Code Review->整合測試->釋出。確保你熟悉其中的每個環節。
    • 其他。需要熟練使用版本控制工具 Git(閱讀:《Git 權威指南》),以及專案構建工具 Maven(閱讀:《Maven 實戰》)。另外,在這個階段可以嘗試 TDD 開發。

進階(2-6 個月)

  • 目標:獨立負責某個服務端專案。
  • 技能:
    • 掌握 web 開發最佳實踐,掌握 Restful API 設計,理解 Spring 原理。推薦閱讀《Spring揭祕》。掌握專案分層、子模組劃分。推薦閱讀:《J2EE 核心模式》。
    • 學習Web框架時,時間夠的話,建議先學習 Servlet:《Head First Servlet & Jsp》,再學習Spring:《Spring 揭祕》,更底層的純框架原理可以看《How Tomcat Works》。市面上也有其他口碑不錯的書,不過沒怎麼看過,就不推薦了。
    • 掌握 web 架構設計。包括 Http 反向代理,資料快取,負載均衡,水平擴充套件和垂直擴充套件。推薦閱讀:《分散式 Java 應用:基礎與實踐》。
    • 掌握關係型資料庫。包括設計 MySQL 表結構,根據業務特點分表分庫,基於執行計劃的 SQL 分析優化,以及資料庫容量規劃。推薦閱讀:《MySQL 必知必會》、《高效能 MySQL》。
    • 瞭解 NoSQL。我們大規模使用 Hadoop、HBase、Hive,同時部分專案使用 Redis、Storm。你需要學會這些工具最基本的使用。
    • 學習 web 安全知識。瞭解 web 前端安全問題。設計安全 web 服務,包括加解密、防偽造、防重放攻擊等。
    • 掌握 Http (推薦閱讀:《圖解Http》、《http權威指南》)、Thrift 等協議。
    • 掌握服務容量規劃,效能調優,可靠性保證,以及故障處理。學習容量規劃和效能調優知識,梳理業務監控點,熟練使用我們的監控報警系統。推薦閱讀:《深入理解 Java 虛擬機器》。
    • 其他。設計模式:從專案中學習,有時間可以看看《深入淺出設計模式》、《JDK 裡的設計模式》。學習Java Socket 程式設計與多執行緒知識,可以看看《Java 併發程式設計實戰》,並翻翻併發程式設計網的文章。
    •  NIO 網路程式設計 和執行緒:兩本書:《Java 多執行緒設計模式》結城浩,《java併發程式設計實踐》。然後看 netty 原始碼看原始碼前先通讀文件,也可以找網上的程式碼分析。分析原始碼可以從專案的單元測試入手,另外有一個技巧是關注專案的 roadmap,release notes 和 issues 討論,生看原始碼有時候效果不是很好。

深入(6 個月-)

  • 目標:分散式系統和中介軟體開發。
  • 構建知識體系:《大型網站系統與 Java 中介軟體實踐》、《大型網站技術架構:核心原理與案例分析》。
  • 原理與設計:《大規模儲存式系統》、《UNIX 網路程式設計 卷1:套接字聯網 API》、《How Tomcat Works》。
  • 學習開源專案:Apache Thrift、Zipkin、Netty、Rose、Jade、淘寶 RPC 系統 Dubbo 等。分析專案中的設計思路。比如,同樣是RPC框架,Finagle 和 Dubbo 有什麼異同。
  • 其他。根據參與的專案加深學習吧。比如,如果需要寫 DSL,可以讀一下《領域特定語言》,對 Redis 感興趣推薦讀一下:《Redis 設計與實現》。有兩本書,無論做什麼專案,都推薦讀:《Unix 程式設計藝術》、《UNIX 環境高階程式設計(第3版)》。