《Java工程師修煉之道》
打造後端技術棧新高度 底層提升系統架構能力
杭建 著
ISBN 978-7-121-33501-3
2018年3月出版
定價:89.00元
404頁
16開
基本介紹
- 書名:Java工程師修煉之道
- 作者:杭建
- ISBN:978-7-121-33501-3
- 頁數:404
- 定價:89
- 出版社:電子工業出版社
- 出版時間:2018-3
- 開本:16
編輯推薦
√ 直面學院教學與產業實踐的嚴重脫節,針砭缺乏系統性認識、技能點不足的工程師弱項,認真解答如何學習Java後端技術。
√ 結合當前主流前沿技術,串聯實踐必不可少的高頻技能,幫助初學者遠離彎路,為專業人群查漏補缺,提高解決問題能力。
√ 隨翻隨用,常讀常新,一舉點亮Java技能樹,深層理解Java語言特性,拓展Java框架|生態,以及後端工程思想|全局觀念。
√ 強化實踐|重視產出,面向技術創造|產品輸出|業務升級;永久記憶|內化技能,從學生|小工一路修煉,成長為骨幹|專家。
內容提要
Java 開發一直是當前網際網路領域最火熱的開發技能之一,Java 工程師也一直是需求量非常大的開發職位。本書主要針對一名合格的Java 工程師的必備技能做了大綱性的總結和闡述。本書內容包括了工程化、常用開發框架、數據存儲、數據傳輸、Java 編程高級知識、性能最佳化、安全技術等內容,基本涵蓋了Java 工程師需要掌握的絕大部分技能點。
《Java工程師修煉之道》可以看作一本Java 工程師的入職指南,也可以看作一本串聯Java 後端技能點的參考手冊。通過精心編排的內容,剛入門的Java 工程師能夠體系化地學習相關開發技能,有經驗的Java 工程師能夠查漏補缺,鞏固自己的相關開發技能,進一步完善自身的Java 技術體系。
目錄
第1章 後端技術導言
1.1後端基礎設施
1.1.1 請求統一入口——API網關
1.1.2 業務套用和後端基礎框架
1.1.3 快取、資料庫、搜尋引擎、訊息佇列
1.1.4 檔案存儲
1.1.5 統一認證中心
1.1.6 單點登錄系統
1.1.7 統一配置中心
1.1.8 服務治理框架
1.1.9 統一調度中心
1.1.10 統一日誌服務
1.1.11 數據基礎設施
1.1.12 故障監控
1.2 Java後端技術概覽
1.2.1 軟體開發的核心原則
1.2.2 軟體開發的軟體過程
1.2.3 日常開發常用工具
1.2.4 套用的運行環境
1.2.5 常用第三方服務
1.2.6 計算機基礎科學知識
1.2.7 數據處理相關技能
1.2.8 Java編程知識
1.2.9 系統架構演化
1.2.10 典型的部署架構
1.3 如何學習後端技術
1.3.1 紮實的計算機基礎知識
1.3.2 知其然更要知其所以然
1.3.3 動手實踐
1.3.4 頻繁練習
1.3.5 持續學習
1.3.6 自我總結
1.3.7 如何學習一門新技術
1.3.8 總結
第2章 Java項目與工程化
2.1 項目構建
2.1.1 傳統構建工具——Ant
2.1.2 主流構建工具——Maven
2.1.3 新興構建工具——Gradle
2.2 代碼版本控制
2.2.1 集中式代碼版本管理——SVN
2.2.2 分散式代碼版本管理——Git
2.2.3 提交日誌的規範
2.3 代碼質量保證
2.3.1 使用單元測試保證代碼質量
2.3.2 衡量單元測試的標準
2.3.3 開發規範與建議
第3章 開發框架
3.1 依賴注入
3.1.1 JSR-330依賴注入規範
3.1.2 Guice
3.1.3 PicoContainer
3.1.4 Dagger
3.1.5 Spring Framework
3.1.6 循環依賴問題
3.2 對象關係映射
3.2.1 表元數據的映射
3.2.2 CRUD以及屬性的查詢
3.2.3 查詢快取的使用
3.2.4 結果的映射
3.2.5 規範SQL書寫的語句構建器
3.2.6 使用提示
3.3 日誌
3.3.1 JDK Logging
3.3.2 Log4j
3.3.3 Log4j2
3.3.4 Logback
3.3.5 統一日誌API的門面框架
3.3.6 統一日誌框架的使用
3.4 Web MVC
3.4.1 為什麼是Spring MVC
3.4.2 Spring MVC的請求處理流程
3.4.3 典型的配置方式
3.4.4 無XML的配置方式
3.4.5 對MVC套用做單元測試
3.4.6 驗證Web請求的參數
3.4.7 使用異步Servlet
3.4.8 使用提示
第4章 Spring
4.1 Spring核心組件
4.1.1 Spring的雙親上下文機制
4.1.2 Spring中的事件機制
4.1.3 Bean的初始化和銷毀
4.1.4 Bean的動態構造
4.1.5 注入集合、枚舉、類的靜態欄位
4.1.6 面向方面編程——AOP
4.1.7 進階XML的配置
4.1.8 無XML的配置方式
4.2 Spring數據操作框架
4.2.1 Spring JDBC
4.2.2 Spring Data Redis
4.2.3 Spring Data MongoDB
4.3 Spring Boot
4.3.1 Spring Boot使用示例
4.3.2 Spring Boot的運行原理
4.3.3 Spring Boot的組成模組
4.3.4 小結
4.4 Spring常用組件
4.4.1 表達式引擎——Spring Expression Language
4.4.2 遠程過程訪問的支持——Spring Remoting
4.4.3 Spring與JMX的集成
4.4.4 定時任務的支持——Spring Quartz
4.4.5 跨域請求的支持——Spring CORS
4.5 總結
第5章 數據存儲
5.1 關係型資料庫——MySQL
5.1.1 存儲引擎
5.1.2 字元集和校對規則
5.1.3 索引的使用
5.1.4 查詢快取的使用
5.1.5 數據同步中的Binlog
5.1.6 事務機制
5.1.7 大表最佳化
5.1.8 高可用支持
5.1.9 使用提示
5.2 非關係型資料庫
5.2.1 KV資料庫
5.2.2 文檔資料庫——MongoDB
5.2.3 列資料庫——HBase
5.3 快取
5.3.1 本地快取
5.3.2 分散式快取——Redis
5.3.3 快取設計的典型方案
5.4 搜尋引擎——Elasticsearch
5.4.1 開源全文檢索庫——Apache Lucene
5.4.2 關鍵概念
5.4.3 查詢的最佳化
5.4.4 記憶體的使用最佳化
5.4.5 開源日誌管理方案——ELK
第6章 數據通信
6.1 RESTful架構風格
6.1.1 支持的操作
6.1.2 返回碼
6.1.3 資源概念
6.1.4 數據的安全保障
6.1.5 請求的限流
6.1.6 超文本API
6.1.7 編寫文檔
6.1.8 RESTful API實現
6.2 遠程過程調用——RPC
6.2.1 JDK自帶的RPC——RMI
6.2.2 Hessian
6.2.3 Thrift
6.2.4 Dubbo
6.2.5 數據的序列化機制
6.2.6 使用提示
6.3 訊息中間件
6.3.1 簡單訊息中間件——ActiveMQ
6.3.2 通用訊息中間件——RabbitMQ
6.3.3 日誌訊息中間件——Kafka
6.3.4 本地訊息佇列
第7章 Java編程進階
7.1 Java記憶體管理
7.1.1 JVM虛擬機記憶體
7.1.2 垃圾回收理論
7.1.3 常用垃圾回收器
7.2 Java網路編程
7.2.1 常見網路I/O模型
7.2.2 Java網路編程模型
7.3 Java並發編程
7.3.1 並發原理
7.3.2 並發思路
7.3.3 並發工具
7.3.4 並發編程建議
7.4 Java開發利器
7.4.1 Apache工具庫——Apache Commons
7.4.2 Google工具庫——Guava
7.4.3 最好用的時間庫——Joda Time
7.4.4 高效JSON處理庫——FastJson
7.4.5 高效Bean映射框架——Orika
7.5 Java新版本的特性
7.5.1 Java 7
7.5.2 Java 8
7.5.3 Java 9
7.6 總結
第8章 性能調優
8.1 調優準備
8.1.1 HotSpot虛擬機體系結構
8.1.2 作業系統的性能調優
8.1.3 系統常用診斷工具
8.1.4 JDK常用診斷工具
8.2 性能分析
8.2.1 CPU分析
8.2.2 記憶體分析
8.2.3 I/O分析
8.2.4 其他分析工具
8.3 性能調優
8.3.1 CPU調優
8.3.2 記憶體調優
8.3.3 I/O調優
8.3.4 其他最佳化建議
8.3.5 JVM參數配置
8.3.6 JVM性能增強
第9章 安全技術
9.1 Java加密
9.1.1 單向加密算法
9.1.2 對稱加密算法
9.1.3 非對稱加密算法
9.2 安全HTTP——HTTPS
9.2.1 安全協定——SSL/TLS
9.2.2 證書中心——CA
9.2.3 請求互動過程
9.2.4 性能最佳化
9.3 Web安全
9.3.1 跨站點腳本攻擊
9.3.2 跨站點請求偽造
9.3.3 SQL注入攻擊
9.3.4 基於約束條件的SQL攻擊
9.3.5 分散式拒絕服務攻擊——DDOS
9.3.6 會話固定攻擊——Session fixation
附錄A 代碼構建常用命令
附錄B Git常用命令
附錄C MySQL常用命令
附錄D MongoDB常用命令
附錄E Java調優常用命令
推薦序一
Hey!新來的讀者,為了吸引你的注意力我真是煞費苦心,但最終還是沒能寫出一句特別吸引眼球的話來,畢竟寫序的我不是標題黨出身。此刻我真的非常能理解你拿到新書之後那渴望知識的心情,所以你恨不得一個字的“序”也不要看到,直接到達“最有價值”的知識點。但作為一名資深轉業碼農(對!你沒看錯,是“轉業”,不是“專業”)還是想說一句,你先看完序,5分鐘後到達知識的戰場,會更穩!
相信你已經在看“序”了,那么我們來說點正經事。
你的知識體系的養成有3個關鍵階段:看山是山,看山不是山,看山還是山。本書的適用人群是“看山不是山”的那些人,如果你恰好處於這個階段,恭喜你!書錢沒白花。
Java是一門非常容易入門的語言,初學者經過初期的學習之後基本能掌握DEMO級別的編程套用。相信讀者你已經度過了這個階段,但是Java龐大的體系可能會把你繞暈,又或者你還沒看到Java的生態系統有多么複雜。此時,你需要本書。從事程式設計師這個工作,到比較高階的時候,其實是不挑語言的,語言只是工具,而你可以在紛繁複雜中遊刃有餘。但幾乎每一位高手都是先深入一個領域,再橫向發展的。你可以不用著急後續的橫向發展,先堅定自己學習Java的信心!因為,從廣泛的套用場景、頂級的開源生態、未來可期的薪水和職位來說,Java都是非常不錯的選擇。
敲黑板,畫重點!下面來解釋一下,為什麼本書面向的是“看山不是山”的人群。在度過Java的入門期之後,會有一個煩惱,那就是面對Java這么龐大的體系,我們究竟應該學習什麼?選擇方向,往往比努力更重要!是使用J2SE編寫桌面程式?是使用J2ME編寫嵌入式套用?還是使用J2EE編寫企業級套用?這些是我們那個泛黃的年代特有的煩惱。而現在的煩惱可能是學Android?還是學Java後端?即便大方向你已經十分堅定,而且選擇了Java後端編程,但因為複雜的知識體系和Google發布的各種教程文檔,眼前看到的已經不再是清晰的山脈,而是一片迷霧。此時,你需要本書,因為它給你指明了努力的方向。
本書的結構、闡述的方式和大部分的“指南”書籍有較大的區別,本書是以筆記和要點的形式進行呈現的,用現在的話說就是撈乾貨。本書涵蓋的知識,是以現代工程實踐中的實際案例出發來組織的,所以知識點範圍非常廣泛,每一個點都對最關鍵的“Best Practice”簡明扼要地進行了說明。你在閱讀本書的時候需要一些相關經驗,不然無法跟上作者的節奏,建議在有一定的知識準備後再閱讀本書,這樣你會受益匪淺。從另外一個角度看,在你有了一定的基礎積累之後,本書可以幫助你全面地了解一個現代化的最先進的工程實踐是怎樣的。本書講述了目前行業中最常用的,經過了實踐的工程方案,這將是你快速進階的最佳指引。
——孫建,隨身雲(中華萬年曆)聯合創始人& CEO
推薦序二
2013年,我和本書作者的接觸是從基於網易的一個大型網際網路套用合作開始的,我見證了從第一行代碼到整個系統服務於億級用戶的過程,並且相信這種經歷對開發者來說是一筆巨大的財富,其中大量的開發和實戰經驗都會在本書中得到充分的體現,相信讀者能從書中直接領略到豐富的實戰知識。在與本書作者的合作過程中,其對Java技術的熱愛與追求,對問題刨根問底,直到理解透徹、靈活套用,這些都令我印象深刻。這些年,我與本書作者一直保持溝通交流、相互學習,他將近十年的實戰經驗沉澱於本書以實現對後端技術的探索、布道,非常值得開發者與近高窗臥聽秋。
後端技術涉及內容非常廣泛,Java語言也是網際網路開發行業使用的主流語言,相信後續也將繼續流行很長一段時間,而本書作者也一直從事Java後端開發工作。在本書中作者比較系統地從總體上描述了後端技術相關的理論知識,包括基礎設施、網關服務及框架選型等基本原則,然後以實際經驗進行示例說明,接著詳細梳理了Java的後端技術,相信讀者讀完本書後會更全面地理解後端技術。網際網路的業務建設需要不同角色的開發者共同協作完成,因此,系統工程化是開發者首先要共同遵守的規範或約定,包括代碼規範、版本管理和代碼質量檢查等。
開發框架的選型進一步地為工程化提供了基礎,也能加速推進網際網路開發,儘管是否重複造輪子是一個恆久的話題,但是沒有永遠的銀彈,只要在合適的時間裡根據團隊的能力選擇合適的技術框架就好。一般來講,目前常用的框架包括基本的依賴注入、AOP、事務管理、連線池管理、數據操作、日誌服務等,在眾多的框架中,本書作者選用目前在Java領域使用最廣泛的Spring做深入的分析,詳細地說明各組件的基礎知識、基本原理和實際使用案例,最難得的是把較多開發者遇到的坑都用真實的示例進行了說明,可以幫助開發者快速地跳過這些傷心地帶,同時也把最佳實踐畫龍點睛地帶給開發者。
數據存儲無疑是所有系統套用中非常重要的一環,套用的場景用例也和資料庫的選型有著極其重要的關係,開發者選擇關係型資料庫還是非關係型資料庫是需要根據軟體成本與人力成本來進行權衡的,比如選擇MySQL、Oracle等開源或商業的資料庫。本書重點從資料庫的基礎知識、索引和表最佳化等方面以詳盡的示例為更好地選擇資料庫的存儲類型提供了更多的知識。
早期的關係型資料庫一般能滿足數據達到一定規模的企業的需求,而在網際網路業務領域,特別是移動網際網路領域內的元數據或者日誌數據等,達到億數量級別是很常見的,這時通常使用非關係型資料庫,在非關係型資料庫里使用非常多的有MongoDB、HBase等分散式資料庫系統。作者在自身的企業開發實踐中,得到了大量的使用經驗和最佳實踐。為了加速後端套用,快取熱數據是加速業務、提高業務性能、提升用戶體驗的重要手段,通過使用本地快取、遠程快取進行數據加速、數據預熱或提高數據的命中率,是開發者在套用開發的過程中常會遇到的場景。
“路漫漫其修遠兮,吾將上下而求索”,後端技術每年都在不斷發展,所用技術也有變化,近些年Java語言的發展速度不那么快了,但是總體是在不斷前進發展的,本書作者帶領的團隊一直深耕此領域並希望通過本書為技術開發人員帶來更多幫助。
——堯飄海,網易雲基礎服務(蜂巢)首席架構師
作者簡介
杭建,重度Java使用者,具有近10年的Java後端開發經驗,一直專注於Java EE、系統架構、大數據等後端技術。現任隨身雲(中華萬年曆)技術總監,負責公司的技術培訓、系統架構、研發管理等工作,帶領研發團隊完成了大數據平台、推薦系統、廣告平台、傳媒平台等系統,以及分散式調度、套用性能監測等基礎框架的開發,支撐起了中華萬年曆、微歷、牛嗶的對話等高達三億多用戶訪問量的套用。作者之前曾就職於網易杭州研究院從事基礎平台、雲計算相關技術的開發工作,參與了易信公眾平台、網易雲計算動態負載均衡等項目的研發。
媒體評論
紮實的基礎理論知識是內功底子,豐富的實踐經驗是招式。如本書作者所說,精妙的招式決定了你的武功下限,而深厚的內功底蘊會承載你所能企及的高度。那么,在後端技術棧中,內功與招式之間如何關聯起來,本書作者以其多年的鑽研與實踐結合心得,通過本書為你一一梳理。
——闕杭寧,網易雲信CTO
作者是一位技術人,有多年的Java技術積累,是極少數真正熱愛技術的人。在隨身雲的架構師工作讓他有機會站在更高的層次進行系統架構相關工作,這些實踐經驗和平時感悟都沉澱在作者的著作和部落格中,相信每位Java工程師都能從中獲取幫助。
——秦緒震,十露盤科技聯合創始人,技術負責人
本書作者根據自身多年的Java後台開發經驗,提綱挈領地總結了Java後台開發的各個關鍵技術點,這些知識點都是一名合格的Java工程師必須掌握的技能。它既可以作為新人的技術學習指南,也可以幫助老手對於自己的知識面進行查漏補缺,是一本非常好的技術圖書。
——饒洵(蜚天),阿里巴巴技術專家
作為一名在後端摸爬多年的Java開發工程師,這本書讓我溫故而知新。書中介紹的Java相關知識技能樹,不僅涵蓋了我個人多年的Java開發技術知識點,也對我感到陌生的一些知識點進行了詳解,讓我突然有一種繼續學習的衝動。
一名Java開發工程師,不僅要對Java語言及其特性有深層次的理解,而且需要掌握與Java相關的框架、生態及後端開發知識。這本書正是總結了後端開發工程師需要掌握的技能,對於提高開發能力很有幫助。
這本書,對於具有一定Java基礎和後端開發知識的讀者來說,不僅具有仔細學習的價值,同時也是一本可以經常翻閱的工具書,對於Java開發工程師的成長和進階都有很好的指導作用。
一本好的技術書籍,不僅要仔細閱讀、學習理解,還需要進行實踐,從而加深知識點印象,形成永久的記憶和技能。希望各位讀者能夠通過學習和掌握書中的知識和技能,逐步成長為技術骨幹和專家,從而創造更多的技術輸出、產品輸出,創造更多的財富。
——張小川,網易考拉海購架構師,供應鏈技術主管
前言
目前網際網路行業如火如荼,進入這個行業的技術人員也越來越多。對於研發來說,從工程角度其主要分為前端工程師、客戶端工程師(又分為iOS和Android工程師)、後端工程師、算法工程師等職位。本書所說的Java工程師指的是以Java作為主要開發語言的後端工程師。
筆者從2008年還未畢業時做一些小的項目至今,做後端開發已經有差不多10年時間。經歷過剛學Java時的迷茫,第一次寫出Java程式時的激動,第一次寫出一個Web系統的醍醐灌頂,一直到接觸Java更底層的東西,總的來說對Java有了系統性的認識,對後端技術體系有了巨觀的感受。這期間,筆者用過各種各樣的程式語言,嘗試過各種開源軟體,挖過各種坑,也填過各種坑。針對後端技術來說,筆者認為自己的這些知識體系,還是有一定價值的。
此外,還記得當筆者畢業後進入第一家公司時,入職培訓的課程雖然不難,但確實有種恍然大悟的感覺。業界的最佳實踐和自己在學校里學到的、使用到的知識,差別還是非常大的。直到後來加入現在的這家公司,給新老員工做過一系列後端技術的培訓課程,在校招的筆試和面試過程中深刻體會到學校與業界脫節之嚴重,在平時的社招中遇到很多對後端技術缺乏系統性認識、技能點不足的工程師,並且也經常被人問起如何學習Java後端技術,於是就打算將目前後端工程師一些比較主流、前沿的技術以及實際工作中會用到的技能串聯起來,給剛上大學以後打算以Java後端為職業的學生、剛畢業入職的應屆生以及初學者們一些入門的指引,使其少走彎路。另外也希望給一些有經驗的工程師提供一個參考手冊,將零散的知識點串起來,減少在解決某些實際問題時無頭緒搜尋帶來的時間成本,同時也是對自己的一個階段性總結和查漏補缺。需要注意的一點是,像數據結構、計算機網路等計算機科學基礎知識以及Java SE的基本用法,筆者認為是從事程式開發工作的Java工程師應該必備的知識,因此並不包括在內。
本書會針對Java後端開發工作中經常用到的關鍵技能點做闡述,會儘量覆蓋實際工作中需要的所有技能。但由於很多技能並非一兩個章節就能完整講述,因此本書僅做一些實踐性的經驗總結和闡述,更加詳細和深入的學習則需要參考專門的書籍或者官方文檔。
本書的大部分內容都來自筆者的部落格以及平時工作、學習中的一些自我總結和筆記,記錄了筆者進入這個行業以來的一些經驗教訓和思考。
面向讀者
未入門或者剛入門的Java工程師
包括未來以Java後端開發為職業方向的在校學生、剛畢業入職的Java工程師以及未形成知識體系的Java工程師。這類讀者通過閱讀本書能夠對Java工程師的必備技能有一個全局認識,逐步形成自己的Java技術體系。
有經驗的Java工程師
有經驗的Java工程師可以通過本書查漏補缺,鞏固自己的開發技能,進一步完善自身的Java技術體系。
對Java後端開發感興趣的非Java工程師
非Java工程師可以通過本書了解Java工程師的技能體系,尤其對於其他語言的後端工程師來說,本書的很多內容也是通用的,並不局限於Java開發。
內容概覽
第1章 後端技術導言
本章主要從總體上描述後端技術的概念、組成、作用、需要的知識點,並給出了學習後端技術的建議。
第2章 Java項目與工程化
本章主要講述Java項目與工程化需要掌握的軟體、技能等。
第3章 開發框架
本章主要講述Java後端開發中的一些主流框架的使用方法。
第4章 Spring
本章主要講述Spring核心、數據操作以及一些常用組件的使用。
第5章 數據存儲
本章主要講述Java套用中數據存儲上使用的一些軟體、服務等。
第6章 數據通信
本章主要講述Java套用中數據傳輸、通信上使用的一些軟體、服務等。
第7章 Java編程進階
本章主要介紹一些Java開發中的高級特性以及在Java開發中非常流行的類庫。
第8章 性能調優
本章主要講述如何對Java套用的性能進行分析和調優,並給出了開發建議。
第9章 安全技術
本章主要對Java開發中常用的加密技術、HTTPS以及防範各種攻擊的方案做了闡述。