-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

瘋狂Java面試講義——數據結構、算法與技術素養

( 簡體 字)
作者:李剛類別:1. -> 程式設計 -> JAVA -> Java
   2. -> 程式設計 -> 面試指南
譯者:
出版社:電子工業出版社瘋狂Java面試講義——數據結構、算法與技術素養 3dWoo書號: 54486
詢問書籍請說出此書號!

有庫存
NT售價: 540

出版日:4/1/2021
頁數:452
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787121409370
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

Java語言擁有的開發人群越來越龐大,大量程序員已經進入或正打算進入Java編程領域。這當然和Java語言本身的優秀不無關系,卻也和Java編程入門簡單有關。很多Java初學者,往往只通過快餐式的方式學了一下SSM或Spring Boot,說不定就可以找到一份Java編程的工作了。
問題是:這種“快餐式”的程序員、“突擊式”的程序員真的滿足要求嗎?如果僅僅滿足于一些簡單的、重復式的開發工作,也許他們沒有太多的問題,但他們可能很少有突破的機會,工作內容總停留在簡單的CRUD層次,求職面試的工作崗位也總停留在初中級階段。每當他們試圖找一些大廠職位或面試一些更高級的職位時,往往得到的結果就是“回家等消息”。對他們而言,與其說Java是一種面向對象的語言,不如說更像一種腳本;他們從源代碼層次來看程序運行(甚至只會從IntelliJ IDEA或Eclipse等集成開發環境中看程序運行),完全無法從底層內存管理的角度來看程序運行;他們天天在用Java類庫、用SSM、用Spring Boot,但對這些東西的源代碼實現知之甚少——這又如何突破自己、獲得職業提升呢?
本書則致力于補齊“快餐式”的程序員、“突擊式”的程序員的技術短板,針對Java開發偏底層的內存管理知識、常用算法實現、實際開發中的各種“坑”,以及軟件開發的實踐經驗進行系統的歸納和整理。
這些內容其實就是我多年在軟件行業積累的經驗和總結,希望通過將這些經驗、心得表達出來,把自己走過的彎路“標”出來,讓后來者盡量少走彎路。
這些經驗、心得不僅能幫開發者迅速補齊技術短板、提升實際項目的開發實力,還能讓開發者更加從容地面對技術面試,敲開通往大廠職位的大門。
本書內容
本書第一部分主要介紹Java內存管理相關知識。內存管理既是Java程序員容易忽視的地方,也是Java編程的重點,這部分內容也是不少大廠面試的必考知識點。此外,有一定編程經驗的Java開發者,自然而然就會關心垃圾回收、內存管理、性能優化等相關內容。無論學習哪種語言,只有真正從程序運行的底層機制、內存分配細節、內存回收細節把握程序運行過程,才能有豁然開朗的感覺。本書第一部分正是旨在幫助大家更好地掌握Java內存管理相關知識。
本書第二部分則來自無數Java學習者和工作者所踩過的“坑”。如果你曾經被一個“莫名其妙”的Bug折騰了很久,最后解決時卻有一種想爆粗的沖動,這部分內容會幫你解決此類痛點,因為這部分知識都是廣大開發者踩過的“坑”。這部分內容既是Java程序員的避“坑”指南,也是爬“坑”手冊。
本書第三部分介紹Java算法知識。這部分內容介紹如何用Java實現各種數據結構,以及常用排序算法的Java實現,這部分也是大廠面試的常考內容,完全可稱為大廠面試的敲門磚。此外,掌握這些內容也能極好地訓練自己的編程思維,提升開發者在實際開發中解決問題的把控能力。
本書第四部分則是Java開發的實用心法,包括程序開發、調試的經驗,比如如何分析軟件的組件模型,如何創建數據模型,如何厘清程序的實現流程,以及程序出現錯誤后的調試思路,具體Bug的調試方法等,這些內容可能并不是某個具體的知識點,卻會讓軟件開發者終身受益;這也是開發者具有良好工作經驗的有效證明,若你在面試中能自信、從容地介紹這些內容,一定會讓面試官對你刮目相看。這部分內容也包括Eclipse和IntelliJ IDEA兩個主流IDE工具的使用說明,但介紹這兩個IDE工具的用法不是主要目的,主要目的是通過這種方式讓大家明白所有IDE工具的通用功能,從而做到“一法通、萬法通”。這部分內容還包括軟件測試和JUnit 5.x的內容,都是學習者容易忽略,但對實際開發非常重要的基本技能。
本書有什么特點
歸納來說,本書具有以下兩個特點。
1. 針對技術痛點,補齊面試短板
本書第一部分的Java內存管理和第三部分的Java算法實現,可以說是絕大多數初中級程序員以前注意不夠的地方,也是限制其職業提升的主要短板,認真掌握這兩部分內容,不僅能有效地解決技術痛點,也能迅速提高面試成功率,敲開進入大廠的大門。
2.從實踐中來,回歸實踐本身
無論是本書第二部分的避“坑”指南,還是本書第四部分的實用心法,它們都是實踐性非常強的內容,并不是某個具體的理論知識點,這些內容不僅能讓開發者終身受益,而且,如果開發者能在面試中自信、從容地介紹它們,一定會讓面試官刮目相看。
本書寫給誰看
如果你想從零開始學習Java編程,本書不適合你。如果你已經學會了Java編程,找工作時卻屢屢被回復“回去等消息”,本書歸納的知識點將可幫你突破面試關;或者你已經是一個Java程序員了,在實際開發中卻感覺力不從心,本書將非常適合你。本書會幫助你找出并補齊自己的Java編程的技術短板。
內容簡介:

本書歸納了Java學習者、工作者在工作和面試中最容易遭遇的技術短板和算法基礎,本書把Java編程中的要點、難點和Java程序員必備的算法基礎知識收集在一起,旨在幫助讀者有針對性地提高這些看似“司空見慣”的基本功。本書內容分為四個部分,其中第一部分主要介紹Java內存管理,這部分是大多數Java程序員最容易忽略的地方——因為Java不像C語言,而且Java提供了垃圾回收機制,因此導致許多Java程序員對內存管理重視不夠;第二部分主要介紹Java編程過程中各種常見的陷阱,這些陷阱有的來自李剛老師早年的痛苦經歷,有的來自他的眾多學生的痛苦經歷,都是Java程序員在編程過程中的“前車之鑒”,希望讀者能引以為戒;第三部分主要介紹學習Java必備的算法基礎知識,包括常用數據結構的各種算法實現,這部分內容是大多數Java程序員重視不夠的地方,也是大廠面試的常考面試題;第四部分主要介紹Java程序開發的方法、經驗等,它們是李剛老師多年的實際開發經驗、培訓經驗的總結,符合初學者的習慣,更能滿足初學者的需要,因此掌握這些開發方法、經驗可以更有效地進行開發。
目錄:

第1章 數組及其內存管理 1
1.1 數組初始化 2
1.1.1 Java數組是靜態的 2
1.1.2 數組一定要初始化嗎 5
1.1.3 基本類型數組的初始化 6
1.1.4 引用類型數組的初始化 8
1.2 使用數組 11
1.2.1 數組元素就是變量 11
1.2.2 沒有多維數組 13
1.3 本章小結 18

第2章 對象及其內存管理 19
2.1 實例變量和類變量 20
2.1.1 實例變量和類變量的屬性 21
2.1.2 實例變量的初始化時機 24
2.1.3 類變量的初始化時機 27
2.2 父類構造器 29
2.2.1 隱式調用和顯式調用 29
2.2.2 訪問子類對象的實例變量 31
2.2.3 調用被子類重寫的方法 34
2.3 父、子實例的內存控制 36
2.3.1 繼承成員變量和繼承方法的區別 36
2.3.2 內存中子類實例 38
2.3.3 父、子類的類變量 43
2.4 final修飾符 44
2.4.1 final修飾的變量 44
2.4.2 執行“宏替換”的變量 48
2.4.3 final方法不能被重寫 53
2.4.4 內部類中的局部變量 54
2.5 本章小結 58

第3章 常見Java集合的實現細節 59
3.1 Set和Map 60
3.1.1 Set和Map的關系 60
3.1.2 HashMap和HashSet 65
3.1.3 TreeMap和TreeSet 75
3.2 Map和List 81
3.2.1 Map的values()方法 81
3.2.2 Map和List的關系 86
3.3 ArrayList和LinkedList 87
3.3.1 Vector和ArrayList的區別 89
3.3.2 ArrayList和LinkedList的實現差異 92
3.3.3 ArrayList和LinkedList的性能分析及適用場景 96
3.4 Iterator迭代器 97
3.4.1 Iterator實現類與迭代器模式 97
3.4.2 迭代時刪除指定元素 98
3.5 本章小結 101

第4章 Java的內存回收 102
4.1 Java引用的種類 103
4.1.1 對象在內存中的狀態 103
4.1.2 強引用 106
4.1.3 軟引用 106
4.1.4 弱引用 109
4.1.5 虛引用 112
4.2 Java的內存泄漏 113
4.3 垃圾回收機制 116
4.3.1 垃圾回收的基本算法 117
4.3.2 堆內存的分代回收 118
4.3.3 與垃圾回收相關的附加選項 120
4.3.4 常見的垃圾回收器 120
4.4 內存管理小技巧 123
4.4.1 盡量使用直接量 123
4.4.2 使用StringBuilder和StringBuffer
進行字符串連接 123
4.4.3 盡早釋放無用對象的引用 123
4.4.4 盡量少用靜態變量 124
4.4.5 避免在經常調用的方法、循環中
創建Java對象 124
4.4.6 緩存經常使用的對象 125
4.4.7 避免使用finalize方法 125
4.4.8 考慮使用SoftReference 125
4.5 本章小結 126

第5章 表達式中的陷阱 127
5.1 關于字符串的陷阱 128
5.1.1 JVM對字符串的處理 128
5.1.2 不可變的字符串 131
5.1.3 字符串比較 133
5.2 表達式類型的陷阱 134
5.2.1 表達式類型的自動提升 135
5.2.2 復合賦值運算符的陷阱 136
5.2.3 二進制整數的陷阱 137
5.3 輸入法導致的陷阱 138
5.4 注釋字符必須合法 139
5.5 轉義字符的陷阱 139
5.5.1 慎用字符的Unicode轉義形式 139
5.5.2 中止行注釋的轉義字符 140
5.6 泛型可能引起的錯誤 141
5.6.1 原始類型變量的賦值 141
5.6.2 原始類型帶來的擦除 143
5.6.3 創建泛型數組的陷阱 145
5.7 正則表達式的陷阱 147
5.8 多線程的陷阱 148
5.8.1 不要調用run方法 148
5.8.2 靜態的同步方法 149
5.8.3 靜態初始化塊啟動新線程執行初始化 152
5.8.4 注意多線程執行環境 156
5.9 本章小結 160

第6章 流程控制的陷阱 161
6.1 switch語句的陷阱 162
6.1.1 default分支永遠會執行嗎 162
6.1.2 break的重要性 163
6.1.3 switch支持的數據類型 164
6.2 標簽引起的陷阱 166
6.3 if語句的陷阱 166
6.3.1 else隱含的條件 167
6.3.2 小心空語句 169
6.4 循環體的花括號 171
6.4.1 什么時候可以省略花括號 171
6.4.2 省略花括號的危險 171
6.5 for循環的陷阱 173
6.5.1 分號惹的禍 173
6.5.2 小心循環計數器的值 175
6.5.3 浮點數作為循環計數器 176
6.6 foreach循環的循環計數器 178
6.7 流式編程的陷阱 179
6.7.1 map與flatMap的區別 179
6.7.2 collect與map的區別 182
6.8 本章小結 186

第7章 面向對象的陷阱 187
7.1 instanceof運算符的陷阱 188
7.2 構造器的陷阱 191
7.2.1 構造器之前的void 191
7.2.2 構造器創建對象嗎 192
7.2.3 無限遞歸的構造器 197
7.3 持有當前類的實例 198
7.4 到底調用哪個重載的方法 199
7.5 方法重寫的陷阱 202
7.5.1 重寫private方法 202
7.5.2 重寫其他訪問權限的方法 202
7.6 非靜態內部類的陷阱 203
7.6.1 非靜態內部類的構造器 203
7.6.2 非靜態內部類不能擁有靜態成員 206
7.6.3 非靜態內部類的子類 206
7.7 static關鍵字 207
7.7.1 靜態方法屬于類 207
7.7.2 靜態內部類的限制 209
7.8 native方法的陷阱 210
7.9 本章小結 211

第8章 異常處理的陷阱 212
8.1 正確關閉資源的方式 213
8.1.1 傳統關閉資源的方式 213
8.1.2 使用自動關閉資源的try語句 216
8.2 finally塊的陷阱 217
8.2.1 finally的執行規則 217
8.2.2 finally塊和方法返回值 219
8.3 catch塊的用法 220
8.3.1 catch塊的順序 220
8.3.2 不要用catch代替流程控制 222
8.3.3 應該只catch可能拋出的異常 223
8.3.4 做點實際的修復 226
8.4 繼承得到的異常 228
8.5 本章小結 229

第9章 線性表 230
9.1 線性表概述 231
9.1.1 線性表的定義及邏輯結構 231
9.1.2 線性表的基本操作 232
9.2 順序存儲結構 232
9.3 鏈式存儲結構 237
9.3.1 單鏈表上的基本運算 237
9.3.2 循環鏈表 243
9.3.3 雙向鏈表 244
9.4 線性表的分析 250
9.4.1 線性表的實現分析 250
9.4.2 線性表的功能 250
9.5 本章小結 251

第10章 棧和隊列 252
10.1 棧 253
10.1.1 棧的基本定義 253
10.1.2 棧的常用操作 254
10.1.3 棧的順序存儲結構及實現 254
10.1.4 棧的鏈式存儲結構及實現 258
10.1.5 Java集合中的棧 261
10.2 隊列 262
10.2.1 隊列的基本定義 262
10.2.2 隊列的常用操作 262
10.2.3 隊列的順序存儲結構及實現 263
10.2.4 循環隊列 266
10.2.5 隊列的鏈式存儲結構及實現 270
10.2.6 Java集合中的隊列 273
10.3 雙端隊列 273
10.4 本章小結 275

第11章 樹和二叉樹 276
11.1 樹的概述 277
11.1.1 樹的定義和基本術語 277
11.1.2 樹的基本操作 278
11.1.3 父節點表示法 278
11.1.4 子節點鏈表示法 282
11.2 二叉樹 286
11.2.1 二叉樹的定義和基本概念 286
11.2.2 二叉樹的基本操作 287
11.2.3 二叉樹的順序存儲 288
11.2.4 二叉樹的二叉鏈表存儲 291
11.2.5 二叉樹的三叉鏈表存儲 294
11.3 遍歷二叉樹 298
11.3.1 先序遍歷 298
11.3.2 中序遍歷 299
11.3.3 后序遍歷 299
11.3.4 廣度優先(按層)遍歷 300
11.4 轉換方法 301
11.4.1 森林、樹和二叉樹的轉換 301
11.4.2 樹的鏈表存儲 302
11.5 哈夫曼樹 302
11.5.1 哈夫曼樹的定義和基本概念 303
11.5.2 創建哈夫曼樹 303
11.5.3 哈夫曼編碼 306
11.6 排序二叉樹 307
11.7 紅黑樹 314
11.7.1 插入操作 315
11.7.2 刪除操作 317
11.8 本章小結 327

第12章 常見的內部排序 328
12.1 排序的基本概念 329
12.1.1 排序概述 329
12.1.2 內部排序的分類 330
12.2 選擇排序法 330
12.2.1 直接選擇排序 330
12.2.2 堆排序 334
12.3 交換排序 338
12.3.1 冒泡排序 338
12.3.2 快速排序 340
12.4 插入排序 342
12.4.1 直接插入排序 342
12.4.2 折半插入排序 344
12.4.3 Shell排序 346
12.5 歸并排序 348
12.6 桶式排序 352
12.7 基數排序 354
12.8 本章小結 356

第13章 程序開發經驗談 357
13.1 扎實的基本功 358
13.1.1 快速的輸入能力 358
13.1.2 編程實現能力 360
13.1.3 快速排錯 360
13.2 程序開發之前 360
13.2.1 分析軟件的組件模型 361
13.2.2 建立軟件的數據模型 364
13.3 厘清程序的實現流程 364
13.3.1 各組件如何通信 365
13.3.2 人機交互的實現 366
13.3.3 復雜算法的分析 368
13.4 編寫開發文檔 371
13.4.1 繪制建模圖、流程圖 371
13.4.2 提供簡要說明 373
13.4.3 編寫偽碼實現 373
13.5 編碼實現和開發心態 373
13.5.1 開發是復雜的 374
13.5.2 開發過程是漫長的 374
13.6 本章小結 374

第14章 程序調試經驗談 375
14.1 程序的可調試性 376
14.1.1 增加注釋 376
14.1.2 使用日志 376
14.2 程序調試的基本方法 377
14.2.1 借助于編譯器的代碼審查 377
14.2.2 跟蹤程序執行流程 380
14.2.3 斷點調試 381
14.2.4 隔離調試 382
14.2.5 錯誤重現 384
14.3 記錄常見錯誤 385
14.3.1 常見異常可能的錯誤原因 385
14.3.2 常見運行時異常可能的錯誤原因 387
14.4 程序調試的整體思路 388
14.4.1 分段調試 388
14.4.2 分模塊調試 390
14.5 調試心態 390
14.5.1 誰都會出錯 390
14.5.2 調試比寫程序更費時 390
14.6 本章小結 391

第15章 IDE工具心法談 392
15.1 何時開始利用IDE工具 393
15.2 IDE工具概述 394
15.2.1 IDE工具的基本功能 394
15.2.2 常見的Java IDE工具 396
15.3 項目管理 399
15.3.1 建立項目 399
15.3.2 自動編譯 406
15.3.3 自動部署、運行 407
15.4 代碼管理 408
15.4.1 代碼生成器 408
15.4.2 代碼提示 409
15.4.3 自動代碼補齊 410
15.4.4 實時錯誤提示 410
15.5 項目調試 411
15.5.1 設置斷點 411
15.5.2 單步調試 413
15.5.3 步入、步出 414
15.6 團隊協作功能 414
15.7 本章小結 417

第16章 軟件測試經驗談 418
16.1 軟件測試概述 419
16.1.1 軟件測試的概念和目的 419
16.1.2 軟件測試的分類 420
16.1.3 開發活動和測試活動 421
16.1.4 常見的Bug管理工具 421
16.2 單元測試 422
16.2.1 單元測試概述 422
16.2.2 單元測試的邏輯覆蓋 424
16.2.3 JUnit介紹 427
16.2.4 JUnit 5.x的用法 427
16.3 系統測試和自動化測試 438
16.3.1 系統測試概述 438
16.3.2 自動化測試 439
16.3.3 常見的自動化測試工具 440
16.4 性能測試 441
16.4.1 性能測試概述 441
16.4.2 性能測試相關概念 442
16.4.3 常見的性能測試工具 442
16.5 本章小結 443
序: