原帖:學(xué)習(xí)JAVA,有什么書籍推薦尤揣?學(xué)習(xí)的方法和過(guò)程是怎樣的搔啊?(知乎)
現(xiàn)在互聯(lián)網(wǎng)上資源豐富,Java 學(xué)習(xí)并不難北戏。貼個(gè) Java 服務(wù)端入門和進(jìn)階指南负芋,是給我們組新人入門用的,包括了學(xué)習(xí)目標(biāo)嗜愈、需要掌握的技能和參考資料旧蛾,并規(guī)劃了學(xué)習(xí)階段和時(shí)間,希望幫助到題主蠕嫁。
前言
這是一份針對(duì)實(shí)習(xí)生/畢業(yè)生的服務(wù)端開發(fā)入門與進(jìn)階指南锨天。
建議
- 盡量用 google 查找技術(shù)資料。
- 有問(wèn)題在 stackoverflow 找找剃毒,大部分都已經(jīng)有人回答病袄。
- 多看官方的技術(shù)文檔。
- ibm developerworkers 的文章質(zhì)量整體上有保障赘阀。
- 平時(shí)花一些時(shí)間在 github 上閱讀優(yōu)秀項(xiàng)目源碼益缠。
入門(1-2 個(gè)月)
- 目標(biāo):參與簡(jiǎn)單的項(xiàng)目開發(fā)。
- 技能:
- 掌握 Java基公。經(jīng)典的《Java 核心技術(shù):卷1 基礎(chǔ)知識(shí)》(或者《Java 編程思想》)必看幅慌,跳過(guò)其中的圖形和 applet 章節(jié)。習(xí)慣查閱 Java API Doc轰豆。為了保證代碼的質(zhì)量胰伍,《Effective Java》、《Clean Code》和《重構(gòu)》也需要至少通讀一遍秒咨。
- 熟悉 Linux 開發(fā)環(huán)境和 bash shell喇辽。Linux 是我們的開發(fā)和部署環(huán)境,你最好盡快熟練它雨席。Linux 的基本使用可以通過(guò)《鳥哥的Linux私房菜:基礎(chǔ)學(xué)習(xí)篇(第三版)》學(xué)習(xí)菩咨,開發(fā) bash shell 腳本可以參考《Linux Shell腳本攻略》。
- 掌握開發(fā)工具
· 熟練使用一種 IDE陡厘。Intellij IDEA或者 Eclipse 都可以抽米,推薦使用前者。至少熟悉常用的快捷鍵糙置,會(huì) debug(包括遠(yuǎn)程 debug)項(xiàng)目云茸。
· 熟悉一種編輯器。比如 Vim/Emacs/Sublime Text谤饭,至少學(xué)會(huì)搜索/替換/代碼補(bǔ)全标捺。 - 掌握 JDK 以外的常用類庫(kù)和工具包懊纳。JDK 原生 API 在很多場(chǎng)景下使用并不方便。你需要掌握社區(qū)貢獻(xiàn)的優(yōu)秀類庫(kù)和工具包亡容,比如 apache commons嗤疯、google guava 等,具體可以翻閱 服務(wù)端技術(shù)選型 的Utility 篇闺兢。
- 掌握 Web 開發(fā)框架茂缚。我們使用 Spring(或Rose) + Ibatis(或Jade) 開發(fā) web 服務(wù),你需要熟練掌握它們屋谭。
- 學(xué)習(xí)代碼規(guī)范脚囊。我們大致上遵循 oracle 的 Java 語(yǔ)言編碼規(guī)范,你可以先閱讀并熟悉它桐磁。Code Formatting 文件在 git@xxx/coding-standard.git悔耘,在編寫代碼之前,請(qǐng)把它導(dǎo)入到 IDE 中所意。另外淮逊,確認(rèn) IDE 已經(jīng)安裝 Findbugs 和 CheckStyle 插件。
- 熟悉開發(fā)流程扶踊。我們的開發(fā)流程大致如下:功能開發(fā)->單元測(cè)試->功能測(cè)試->Code Review->集成測(cè)試->發(fā)布泄鹏。確保你熟悉其中的每個(gè)環(huán)節(jié)。
- 其他秧耗。需要熟練使用版本控制工具 Git(閱讀:《Git 權(quán)威指南》)备籽,以及項(xiàng)目構(gòu)建工具 Maven(閱讀:《Maven 實(shí)戰(zhàn)》)。另外分井,在這個(gè)階段可以嘗試 TDD 開發(fā)车猬。
進(jìn)階(2-6 個(gè)月)
- 目標(biāo):獨(dú)立負(fù)責(zé)某個(gè)服務(wù)端項(xiàng)目。
- 技能:
- 掌握 web 開發(fā)最佳實(shí)踐尺锚,掌握 Restful API 設(shè)計(jì)珠闰,理解 Spring 原理。推薦閱讀《Spring揭秘》瘫辩。掌握項(xiàng)目分層伏嗜、子模塊劃分。推薦閱讀:《J2EE 核心模式》伐厌。
- 掌握 web 架構(gòu)設(shè)計(jì)承绸。包括 Http 反向代理,數(shù)據(jù)緩存挣轨,負(fù)載均衡军熏,水平擴(kuò)展和垂直擴(kuò)展。推薦閱讀:《分布式 Java 應(yīng)用:基礎(chǔ)與實(shí)踐》卷扮。
- 掌握關(guān)系型數(shù)據(jù)庫(kù)荡澎。包括設(shè)計(jì) MySQL 表結(jié)構(gòu)均践,根據(jù)業(yè)務(wù)特點(diǎn)分表分庫(kù),基于執(zhí)行計(jì)劃的 SQL 分析優(yōu)化摩幔,以及數(shù)據(jù)庫(kù)容量規(guī)劃浊猾。推薦閱讀:《MySQL 必知必會(huì)》、《高性能 MySQL》热鞍。
- 了解 NoSQL。我們大規(guī)模使用 Hadoop衔彻、HBase薇宠、Hive,同時(shí)部分項(xiàng)目使用 Redis艰额、Storm澄港。你需要學(xué)會(huì)這些工具最基本的使用。
- 學(xué)習(xí) web 安全知識(shí)柄沮。了解 web 前端安全問(wèn)題回梧。設(shè)計(jì)安全 web 服務(wù),包括加解密祖搓、防偽造狱意、防重放攻擊等。
- 掌握 Http (推薦閱讀:《圖解Http》拯欧、《http權(quán)威指南》)详囤、Thrift 等協(xié)議。
- 掌握服務(wù)容量規(guī)劃镐作,性能調(diào)優(yōu)藏姐,可靠性保證,以及故障處理该贾。學(xué)習(xí)容量規(guī)劃和性能調(diào)優(yōu)知識(shí)羔杨,梳理業(yè)務(wù)監(jiān)控點(diǎn),熟練使用我們的監(jiān)控報(bào)警系統(tǒng)杨蛋。推薦閱讀:《深入理解 Java 虛擬機(jī)》兜材。
- 其他。設(shè)計(jì)模式:從項(xiàng)目中學(xué)習(xí)六荒,有時(shí)間可以看看《深入淺出設(shè)計(jì)模式》护姆、《JDK 里的設(shè)計(jì)模式》。學(xué)習(xí)Java Socket 編程與多線程知識(shí)掏击,可以看看《Java 并發(fā)編程實(shí)戰(zhàn)》卵皂,并翻翻并發(fā)編程網(wǎng)的文章。
深入(6 個(gè)月-)
- 目標(biāo):分布式系統(tǒng)和中間件開發(fā)砚亭。
- 技能:
- 構(gòu)建知識(shí)體系:《大型網(wǎng)站系統(tǒng)與 Java 中間件實(shí)踐》灯变、《大型網(wǎng)站技術(shù)架構(gòu):核心原理與案例分析》殴玛。
- 原理與設(shè)計(jì):《大規(guī)模存儲(chǔ)式系統(tǒng)》、《UNIX 網(wǎng)絡(luò)編程 卷1:套接字聯(lián)網(wǎng) API》添祸、《How Tomcat Works》滚粟。
- 學(xué)習(xí)開源項(xiàng)目:Apache Thrift、Zipkin刃泌、Netty凡壤、Rose、Jade耙替、淘寶 RPC 系統(tǒng) Dubbo 等亚侠。分析項(xiàng)目中的設(shè)計(jì)思路。比如俗扇,同樣是RPC框架硝烂,F(xiàn)inagle 和 Dubbo 有什么異同。
- 其他铜幽。根據(jù)參與的項(xiàng)目加深學(xué)習(xí)吧滞谢。比如,如果需要寫 DSL除抛,可以讀一下《領(lǐng)域特定語(yǔ)言》狮杨,對(duì) Redis 感興趣推薦讀一下:《Redis 設(shè)計(jì)與實(shí)現(xiàn)》。有兩本書到忽,無(wú)論做什么項(xiàng)目禾酱,都推薦讀:《Unix 編程藝術(shù)》、《UNIX 環(huán)境高級(jí)編程(第3版)》绘趋。