Java 入門進階

Java 入門進階

發表於 2015-04-16前端

http://xielong.me/2015/04/16/%E6%9C%8D%E5%8A%A1%E7%AB%AF%E5%B7%A5%E7%A8%8B%E5%B8%88%E5%85%A5%E9%97%A8%E4%B8%8E%E8%BF%9B%E9%98%B6Java%E7%89%88/git

 

前言

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

  • 儘可能用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,至少學會搜索/替換/代碼補全。
    • 掌握 JDK 之外的經常使用類庫和工具包。JDK 原生 API 在不少場景下使用並不方便。你須要掌握社區貢獻的優秀類庫和工具包,好比 apache commons、google guava 等,具體能夠翻閱《技術選型手冊》的Utility 篇。
    • 掌握 Web 開發框架。咱們使用 Spring(或Rose) + Ibatis(或Jade) 開發 web 服務,你須要熟練掌握它們。
    • 學習代碼規範。咱們大體上遵循 oracle 的 Java 語言編碼規範,你能夠先閱讀並熟悉它。Code Formatting 文件在 git@git.x.xx.com:xiaomi-commons/coding-standard.git,在編寫代碼以前,請把它導入到 IDE 中。另外,確認 IDE 已經安裝 Findbugs 和 CheckStyle 插件。
    • 熟悉開發流程。咱們的開發流程大體以下:功能開發->單元測試->功能測試->Code Review->集成測試->發佈。確保你熟悉其中的每一個環節。
    • 其餘。須要熟練使用版本控制工具 Git(閱讀:《Git 權威指南》),以及項目構建工具 Maven(閱讀:《Maven實戰》)。另外,在這個階段能夠嘗試 TDD 開發。

進階(2-6 個月)

  • 目標:獨立負責某個服務端項目。
  • 技能:
    • 掌握 web 開發最佳實踐,掌握 Restful API 設計,理解 Spring 原理。推薦閱讀《Spring 揭祕》。掌握項目分層、子模塊劃分。推薦閱讀:《J2EE 核心模式》。
    • 掌握 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 併發編程實戰》,並翻翻併發編程網的文章。

深刻(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版)》。

 

 

服務端技術選型

發表於 2015-04-17web

來源 http://xielong.me/2015/04/17/%E6%9C%8D%E5%8A%A1%E7%AB%AF%E6%8A%80%E6%9C%AF%E9%80%89%E5%9E%8B/shell

 

服務框架

MVC Framework:Rose 框架簡單易用,而且我米內部服務和工具都優先支持 Rose 項目,默認使用 Rose 框架是很好的選擇。文藝一點想作個異步化 web 服務,能夠選擇 Spring MVC 3.2 以上版本,並搭配高版本 Resin/Jetty 服務器,該方案已有線上服務使用,只是搭項目時會稍複雜些。數據庫

RPC:咱們線上使用的是 Apache Thrift,是 0.5.0 版本。咱們計劃下一步升級並完善他。具體能夠訪問咱們的 Thrift RoadMap 頁面。apache

Javascript Library:隨大流用 JQuery,也能夠申請前端支持。編程

CSS Framework:用 Bootstrap。設計模式

Database

ORM Framwork:天然是 paoding-rose-jade,成熟好用,不管是簡單的數據表操做,或者是「高大上」的分表分庫都不在話下。更集成了 perfcouter 功能,能夠實時查看和監控 MySQL 語句執行效率。緩存

數據庫鏈接池:jade 使用 Apache DBCP。Tomcat JDBC 聲稱更快更強,還沒測試過,暫時仍是繼續 Apache DBCP 吧。

No SQL:Hadoop, Hive, HBase。

Cache:本地 cache 使用 Ehcache,Guava 的 cache 也可使用。中央式緩存,用 Memcached。

傳統數據庫:MySQL。線上業務先和 DBA 確認服務器磁盤是不是 SSD。

Utilizes

General:Apache Commons 必備。必須使用 3.0 以上版本。Guava 是 Google 推出的產品,新鮮的功能更多一些。

JSONJackon功能強大。

XML:聽說 JDK 自帶的 JAXB 就很好。

Email:直接用 Spring 的封裝。

Logging:Slf4j + Log4j + Scribe + Kafka。新同窗掌握 Slf4j 和 Log4j 就好。

Schedule:使用 Spring 的 Schedule。Spring Cook Book 部分有演示代碼。

時間日期:JodaTime。請看咱們的代碼示例自學。

io:簡單的文件 io 用 apache commons 或者 google guava。zip 文件處理用 zip4j。

讀取命令行參數JCommander是一個簡單好用的命令行參數解析框架。

Test

Spring測試框架:Spring Test 配合 JUnit 很是順暢,須要確認項目中使用 Spring 版本 3.0 以上版本。

Mock:Mockito 是如今最優雅簡潔的 mock 框架了,強烈推薦使用。Mockito 搞不定的部分,好比static 函數,搭配 PowerMock。

數據庫測試:使用 H2 Database 內存數據庫。仍是怕慢?用 maven-surefire-plugin 多線程執行測試任務。

功能測試:在 onebox 環境測試,一遍遍發佈部署太麻煩,使用 jetty-maven-plugin,一鍵就能夠把服務啓動起來。

Performance/Stability Test:Jmeter 是成熟的工具。

Development Environment

JDK:線上大多數項目使用 JDK6,JDK8 版本會從離線服務開始用,Maven 編譯的包須要保證 JDK6 源碼與二進制兼容。

版本控制:用 Git,先閱讀咱們的 Git 文檔。若是想深刻了解Git,推薦閱讀《Git權威指南》。

構建工具:用 Maven。須要熟練掌握如下技巧:1.使用 Maven 打包,好比 Jar、War、Jar with dependency、distribution 包;2.使用 Maven 發佈包;3.熟知 Maven依賴管理原理。推薦閱讀《Maven權威指南》。

應用服務器:Nginx + Resin,Nginx 做爲反向代理,Resin 承擔應用服務器和 Java 容器的角色。須要注意,線上服務記得要調優 JVM,線程數等參數。測試環境用 Jetty 插件就好。

 

============= End

相關文章
相關標籤/搜索