《瘋狂Java面試講義——數據結構、算法與技術素養》是2021年電子工業出版社出版的圖書,作者是李剛。
基本介紹
- 書名:瘋狂Java面試講義——數據結構、算法與技術素養
- 作者:李剛
- 譯者:李剛
- 出版社:電子工業出版社
- 出版時間:2021年4月
- 頁數:452 頁
- 定價:108 元
- 開本:16 開
- ISBN:9787121409370
內容簡介,圖書目錄,作者簡介,
內容簡介
本書歸納了Java學習者、工作者在工作和面試中最容易遭遇的技術短板和算法基礎,本書把Java編程中的要點、難點和Java程式設計師必備的算法基礎知識收集在一起,旨在幫助讀者有針對性地提高這些看似“司空見慣”的基本功。本書內容分為四個部分,其中第一部分主要介紹Java記憶體管理,這部分是大多數Java程式設計師最容易忽略的地方——因為Java不像C語言,而且Java提供了垃圾回收機制,因此導致許多Java程式設計師對記憶體管理重視不夠;第二部分主要介紹Java編程過程中各種常見的陷阱,這些陷阱有的來自李剛老師早年的痛苦經歷,有的來自他的眾多學生的痛苦經歷,都是Java程式設計師在編程過程中的“前車之鑑”,希望讀者能引以為戒;第三部分主要介紹學習Java必備的算法基礎知識,包括常用數據結構的各種算法實現,這部分內容是大多數Java程式設計師重視不夠的地方,也是大廠面試的常考面試題;第四部分主要介紹Java程式開發的方法、經驗等,它們是李剛老師多年的實際開發經驗、培訓經驗的總結,符合初學者的習慣,更能滿足初學者的需要,因此掌握這些開發方法、經驗可以更有效地進行開發。
圖書目錄
第1章 數組及其記憶體管理
1.1 數組初始化
1.1.1 Java數組是靜態的
1.1.2 數組一定要初始化嗎
1.1.3 基本類型數組的初始化
1.1.4 引用類型數組的初始化
1.2 使用數組
1.2.1 數組元素就是變數
1.2.2 沒有多維數組
1.3 本章小結
第2章 對象及其記憶體管理
2.1 實例變數和類變數
2.1.1 實例變數和類變數的屬性
2.1.2 實例變數的初始化時機
2.1.3 類變數的初始化時機
2.2 父類構造器
2.2.1 隱式調用和顯式調用
2.2.2 訪問子類對象的實例變數
2.2.3 調用被子類重寫的方法
2.3 父、子實例的記憶體控制
2.3.1 繼承成員變數和繼承方法的區別
2.3.2 記憶體中子類實例
2.3.3 父、子類的類變數
2.4 final修飾符
2.4.1 final修飾的變數
2.4.2 執行“宏替換”的變數
2.4.3 final方法不能被重寫
2.4.4 內部類中的局部變數
2.5 本章小結
第3章 常見Java集合的實現細節
3.1 Set和Map
3.1.1 Set和Map的關係
3.1.2 HashMap和HashSet
3.1.3 TreeMap和TreeSet
3.2 Map和List
3.3 ArrayList和LinkedList
3.3.1 Vector和ArrayList的區別
3.3.2 ArrayList和LinkedList的實現差異
3.3.3 ArrayList和LinkedList的性能分析及適用場景
3.4 Iterator疊代器
3.4.1 Iterator實現類與疊代器模式
3.4.2 疊代時刪除指定元素
3.5 本章小結
第4章 Java的記憶體回收
4.1 Java引用的種類
4.1.1 對象在記憶體中的狀態
4.1.2 強引用
4.1.3 軟引用
4.1.4 弱引用
4.1.5 虛引用
4.2 Java的記憶體泄漏
4.3 垃圾回收機制
4.3.1 垃圾回收的基本算法
4.3.2 堆記憶體的分代回收
4.3.3 與垃圾回收相關的附加選項
4.3.4 常見的垃圾回收器
4.4 記憶體管理小技巧
4.4.1 儘量使用直接量
4.4.2 使用StringBuilder和StringBuffer進行字元串連線
4.4.3 儘早釋放無用對象的引用
4.4.4 儘量少用靜態變數
4.4.5 避免在經常調用的方法、循環中創建Java對象
4.4.6 快取經常使用的對象
4.4.7 避免使用finalize方法
4.4.8 考慮使用SoftReference
4.5 本章小結
第5章 表達式中的陷阱
5.1 關於字元串的陷阱
5.1.1 JVM對字元串的處理
5.1.2 不可變的字元串
5.1.3 字元串比較
5.2 表達式類型的陷阱
5.2.1 表達式類型的自動提升
5.2.2 複合賦值運算符的陷阱
5.2.3 二進制整數的陷阱
5.3 輸入法導致的陷阱
5.4 注釋字元必須合法
5.5 轉義字元的陷阱
5.5.1 慎用字元的Unicode轉義形式
5.5.2 中止行注釋的轉義字元
5.6 泛型可能引起的錯誤
5.6.1 原始類型變數的賦值
5.6.2 原始類型帶來的擦除
5.6.3 創建泛型數組的陷阱
5.7 正則表達式的陷阱
5.8 多執行緒的陷阱
5.8.1 不要調用run方法
5.8.2 靜態的同步方法
5.8.3 靜態初始化塊啟動新執行緒執行初始化
5.8.4 注意多執行緒執行環境
5.9 本章小結
第6章 流程控制的陷阱
6.1 switch語句的陷阱
6.1.1 default分支永遠會執行嗎
6.1.2 break的重要性
6.1.3 switch支持的數據類型
6.2 標籤引起的陷阱
6.3 if語句的陷阱
6.3.1 else隱含的條件
6.3.2 小心空語句
6.4 循環體的花括弧
6.4.1 什麼時候可以省略花括弧
6.4.2 省略花括弧的危險
6.5 for循環的陷阱
6.5.1 分號惹的禍
6.5.2 小心循環計數器的值
6.5.3 浮點數作為循環計數器
6.6 foreach循環的循環計數器
6.7 流式編程的陷阱
6.7.1 map與flatMap的區別
6.7.2 collect與map的區別
6.8 本章小結
第7章 面向對象的陷阱
7.1 instanceof運算符的陷阱
7.2 構造器的陷阱
7.2.1 構造器之前的void
7.2.2 構造器創建對象嗎
7.2.3 無限遞歸的構造器
7.3 持有當前類的實例
7.4 到底調用哪個重載的方法
7.5 方法重寫的陷阱
7.5.1 重寫private方法
7.5.2 重寫其他訪問許可權的方法
7.6 非靜態內部類的陷阱
7.6.1 非靜態內部類的構造器
7.6.2 非靜態內部類不能擁有靜態成員
7.6.3 非靜態內部類的子類
7.7 static關鍵字
7.7.1 靜態方法屬於類
7.7.2 靜態內部類的限制
7.8 native方法的陷阱
7.9 本章小結
第8章 異常處理的陷阱
8.1 正確關閉資源的方式
8.1.1 傳統關閉資源的方式
8.1.2 使用自動關閉資源的try語句
8.2 finally塊的陷阱
8.2.1 finally的執行規則
8.2.2 finally塊和方法返回值
8.3 catch塊的用法
8.3.1 catch塊的順序
8.3.2 不要用catch代替流程控制
8.3.3 應該只catch可能拋出的異常
8.3.4 做點實際的修復
8.4 繼承得到的異常
8.5 本章小結
第9章 線性表
9.1 線性表概述
9.1.1 線性表的定義及邏輯結構
9.1.2 線性表的基本操作
9.2 順序存儲結構
9.3 鏈式存儲結構
9.3.1 單鍊表上的基本運算
9.3.2 循環鍊表
9.3.3 雙向鍊表
9.4 線性表的分析
9.4.1 線性表的實現分析
9.4.2 線性表的功能
9.5 本章小結
第10章 棧和佇列
10.1 棧
10.1.1 棧的基本定義
10.1.2 棧的常用操作
10.1.3 棧的順序存儲結構及實現
10.1.4 棧的鏈式存儲結構及實現
10.1.5 Java集合中的棧
10.2 佇列
10.2.1 佇列的基本定義
10.2.2 佇列的常用操作
10.2.3 佇列的順序存儲結構及實現
10.2.4 循環佇列
10.2.5 佇列的鏈式存儲結構及實現
10.2.6 Java集合中的佇列
10.3 雙端佇列
10.4 本章小結
第11章 樹和二叉樹
11.1 樹的概述
11.1.1 樹的定義和基本術語
11.1.2 樹的基本操作
11.1.3 父節點表示法
11.1.4 子節點鍊表示法
11.2 二叉樹
11.2.1 二叉樹的定義和基本概念
11.2.2 二叉樹的基本操作
11.2.3 二叉樹的順序存儲
11.2.4 二叉樹的二叉鍊表存儲
11.2.5 二叉樹的三叉鍊表存儲
11.3 遍歷二叉樹
11.3.1 先序遍歷
11.3.2 中序遍歷
11.3.3 後序遍歷
11.3.4 廣度優先(按層)遍歷
11.4 轉換方法
11.4.1 森林、樹和二叉樹的轉換
11.4.2 樹的鍊表存儲
11.5 哈夫曼樹
11.5.1 哈夫曼樹的定義和基本概念
11.5.2 創建哈夫曼樹
11.5.3 哈夫曼編碼
11.6 排序二叉樹
11.7 紅黑樹
11.7.1 插入操作
11.7.2 刪除操作
11.8 本章小結
第12章 常見的內部排序
12.1 排序的基本概念
12.1.1 排序概述
12.1.2 內部排序的分類
12.2 選擇排序法
12.2.1 直接選擇排序
12.2.2 堆排序
12.3 交換排序
12.3.1 冒泡排序
12.3.2 快速排序
12.4 插入排序
12.4.1 直接插入排序
12.4.2 折半插入排序
12.4.3 Shell排序
12.5 歸併排序
12.6 桶式排序
12.7 基數排序
12.8 本章小結
第13章 程式開發經驗談
13.1 紮實的基本功
13.1.1 快速的輸入能力
13.1.2 編程實現能力
13.1.3 快速排錯
13.2 程式開發之前
13.2.1 分析軟體的組件模型
13.2.2 建立軟體的數據模型
13.3 釐清程式的實現流程
13.3.1 各組件如何通信
13.3.2 人機互動的實現
13.3.3 複雜算法的分析
13.4 編寫開發文檔
13.4.1 繪製建模圖、流程圖
13.4.2 提供簡要說明
13.4.3 編寫偽碼實現
13.5 編碼實現和開發心態
13.5.1 開發是複雜的
13.5.2 開發過程是漫長的
13.6 本章小結
第14章 程式調試經驗談
14.1 程式的可調試性
14.1.1 增加注釋
14.1.2 使用日誌
14.2 程式調試的基本方法
14.2.1 藉助於編譯器的代碼審查
14.2.2 跟蹤程式執行流程
14.2.3 斷點調試
14.2.4 隔離調試
14.2.5 錯誤重現
14.3 記錄常見錯誤
14.3.1 常見異常可能的錯誤原因
14.3.2 常見運行時異常可能的錯誤原因
14.4 程式調試的整體思路
14.4.1 分段調試
14.4.2 分模組調試
14.5 調試心態
14.5.1 誰都會出錯
14.5.2 調試比寫程式更費時
14.6 本章小結
第15章 IDE工具心法談
15.1 何時開始利用IDE工具
15.2 IDE工具概述
15.2.1 IDE工具的基本功能
15.2.2 常見的Java IDE工具
15.3 項目管理
15.3.1 建立項目
15.3.2 自動編譯
15.3.3 自動部署、運行
15.4 代碼管理
15.4.1 代碼生成器
15.4.2 代碼提示
15.4.3 自動代碼補齊
15.4.4 實時錯誤提示
15.5 項目調試
15.5.1 設定斷點
15.5.2 單步調試
15.5.3 步入、步出
15.6 團隊協作功能
15.7 本章小結
第16章 軟體測試經驗談
16.1 軟體測試概述
16.1.1 軟體測試的概念和目的
16.1.2 軟體測試的分類
16.1.3 開發活動和測試活動
16.1.4 常見的Bug管理工具
16.2 單元測試
16.2.1 單元測試概述
16.2.2 單元測試的邏輯覆蓋
16.2.3 JUnit介紹
16.2.4 JUnit 5.x的用法
16.3 系統測試和自動化測試
16.3.1 系統測試概述
16.3.2 自動化測試
16.3.3 常見的自動化測試工具
16.4 性能測試
16.4.1 性能測試概述
16.4.2 性能測試相關概念
16.4.3 常見的性能測試工具
16.5 本章小結
作者簡介
李剛,十餘年軟體開發從業經驗,瘋狂軟體教育中心教學總監。瘋狂Java實訓營創始人,瘋狂Java體系原創圖書作者。CSDN特邀講師。培訓的學生已在騰訊、阿里、華為、IBM、網易等名企就職。國內知名高端IT技術圖書作家,已出版《瘋狂Java講義》《瘋狂Python講義》《瘋狂Android講義》《輕量級Java EE企業套用實戰》《瘋狂前端開發講義》《瘋狂HTML5/CSS3/JavaScript講義》等著作。其中瘋狂Java體系圖書均已沉澱多年,贏得極高的市場認同,多次重印,多部著作印刷數量超過10萬冊,並被多所“985”“211”院校選作教材,部分圖書已被翻譯成繁體中文版,授權到寶島台灣。