第1章 麵試的流程 1
1.1 麵試官談麵試 1
1.2 麵試的三種形式 2
1.2.1 電話麵試 2
1.2.2 共享桌麵遠程麵試 3
1.2.3 現場麵試 4
1.3 麵試的三個環節 5
1.3.1 行為麵試環節 5
應聘者的項目經驗 6
應聘者掌握的技能 7
迴答“為什麼跳槽” 8
1.3.2 技術麵試環節 10
紮實的基礎知識 10
高質量的代碼 11
清晰的思路 14
優化效率的能力 15
優秀的綜閤能力 16
1.3.3 應聘者提問環節 17
1.4 本章小結 18
第2章 麵試需要的基礎知識 20
2.1 麵試官談基礎知識 20
2.2 編程語言 22
2.2.1 C++ 22
麵試題1:賦值運算符函數 24
經典的解法,適用於初級程序員 25
考慮異常安全性的解法,高級程序員必備 26
2.2.2 C# 27
麵試題2:實現Singleton模式 31
不好的解法一:隻適用於單綫程 31
不好的解法二:可用於多綫程但效率不高 32
可行的解法:同步鎖前後兩次判斷 33
推薦的解法一:利用靜態構造函數 34
推薦的解法二:按需創建實例 34
解法比較 35
2.3 數據結構 36
2.3.1 數組 36
麵試題3:二維數組中的查找 38
2.3.2 字符串 42
麵試題4:替換空格 44
O(n2)的解法,不足以拿到Offer 45
O(n)的解法,搞定Offer就靠它 46
2.3.3 鏈錶 49
麵試題5:從尾到頭打印鏈錶 51
2.3.4 樹 53
麵試題6:重建二叉樹 55
2.3.5 棧和隊列 58
麵試題7:用兩個棧實現隊列 59
2.4 算法和數據操作 62
2.4.1 查找和排序 63
麵試題8:鏇轉數組的最小數字 66
2.4.2 遞歸和循環 71
麵試題9:斐波那契數列 73
效率很低的解法,麵試官不會喜歡 73
麵試官期待的實用解法 74
O(logn)但不夠實用的解法 74
解法比較 75
2.4.3 位運算 77
麵試題10:二進製中1的個數 78
可能引起死循環的解法 79
常規解法 79
能給麵試官帶來驚喜的解法 80
2.5 本章小結 82
第3章 高質量的代碼 84
3.1 麵試官談代碼質量 84
3.2 代碼的規範性 86
3.3 代碼的完整性 87
從3方麵確保代碼的完整性 87
3種錯誤處理的方法 88
麵試題11:數值的整數次方 90
自以為題目簡單的解法 90
全麵但不夠高效的解法,離Offer已經很近瞭 90
全麵又高效的解法,確保能拿到Offer 92
麵試題12:打印1到最大的n位數 94
跳進麵試官陷阱 94
在字符串上模擬數字加法 94
把問題轉換成數字排列 97
麵試題13:在O(1)時間刪除鏈錶結點 99
麵試題14:調整數組順序使奇數位於偶數前麵 102
隻完成基本功能的解法,僅適用於初級程序員 102
考慮可擴展性的解法,能秒殺Offer 104
3.4 代碼的魯棒性 106
麵試題15:鏈錶中倒數第k個結點 107
麵試題16:反轉鏈錶 112
麵試題17:閤並兩個排序的鏈錶 114
麵試題18:樹的子結構 117
3.5 本章小結 121
第4章 解決麵試題的思路 123
4.1 麵試官談麵試思路 123
麵試題19:二叉樹的鏡像 125
4.2 畫圖讓抽象問題形象化 125
麵試題20:順時針打印矩陣 127
4.3 舉例讓抽象問題具體化 131
麵試題21:包含min函數的棧 132
麵試題22:棧的壓入、彈齣序列 134
麵試題23:從上往下打印二叉樹 137
麵試題24:二叉搜索樹的後序遍曆序列 140
麵試題25:二叉樹中和為某一值的路徑 143
4.4 分解讓復雜問題簡單化 146
麵試題26:復雜鏈錶的復製 147
麵試題27:二叉搜索樹與雙嚮鏈錶 151
麵試題28:字符串的排列 154
4.5 本章小結 158
第5章 優化時間和空間效率 160
5.1 麵試官談效率 160
5.2 時間效率 162
麵試題29:數組中齣現次數超過一半的數字 163
基於Partition函數的O(n)算法 163
利用數組特點的O(n)算法 165
解法比較 166
麵試題30:最小的k個數 167
O(n)的算法,隻當可以修改輸入數組時可用 167
O(nlogk)的算法,適閤處理海量數據 168
解法比較 169
麵試題31:連續子數組的最大和 171
舉例分析數組的規律 171
應用動態規劃法 173
麵試題32:從1到n整數中1齣現的次數 174
不考慮效率的解法,想拿Offer有點難 174
明顯提高效率的解法,讓麵試官耳目一新 175
麵試題33:把數組排成最小的數 177
5.3 時間效率與空間效率的平衡 181
麵試題34:醜數 182
逐個判斷整數是不是醜數的解法 182
創建數組保存已經找到的醜數的解法 183
麵試題35:第一個隻齣現一次的字符 186
麵試題36:數組中的逆序對 189
麵試題37:兩個鏈錶的第一個公共結點 193
5.4 本章小結 196
第6章 麵試中的各項能力 198
6.1 麵試官談能力 198
6.2 溝通能力和學習能力 200
溝通能力 200
學習能力 200
善於學習、溝通的人也善於提問 201
6.3 知識遷移能力 203
麵試題38:數字在排序數組中齣現的次數 204
麵試題39:二叉樹的深度 207
重復遍曆結點的解法,不足以打動麵試官 209
隻遍曆結點一次的解法,正是麵試官喜歡的 209
麵試題40:數組中隻齣現一次的數字 211
麵試題41:和為s的兩個數字VS和為s的連續正數序列 214
麵試題42:翻轉單詞順序 VS左鏇轉字符串 218
6.4 抽象建模能力 222
麵試題43:n個骰子的點數 223
基於遞歸求骰子點數,時間效率不夠高 223
基於循環求骰子點數,時間性能好 224
麵試題44:撲剋牌的順子 226
麵試題45:圓圈中最後剩下的數字 228
經典的解法,用循環鏈錶模擬圓圈 229
創新的解法,拿到Offer不在話下 230
6.5 發散思維能力 232
麵試題46:求1+2+…+n 233
利用構造函數求解 234
利用虛函數求解 234
利用函數指針求解 235
利用模闆類型求解 236
麵試題47:不用加減乘除做加法 237
麵試題48:不能被繼承的類 239
常規的解法:把構造函數設為私有函數 239
新奇的解法:利用虛擬繼承 240
6.6 本章小結 241
第7章 兩個麵試案例 243
7.1 案例一:(麵試題49)把字符串轉換成整數 244
7.2 案例二:(麵試題50)樹中兩個結點的最低公共祖先 252
第8章 英文版新增麵試題 261
8.1 數組 261
麵試題51:數組中重復的數字 261
麵試題52:構建乘積數組 263
8.2 字符串 265
麵試題53:正則錶達式匹配 265
麵試題54:錶示數值的字符串 267
麵試題55:字符流中第一個不重復的字符 269
8.3 鏈錶 270
麵試題56:鏈錶中環的入口結點 270
麵試題57:刪除鏈錶中重復的結點 273
8.4 樹 275
麵試題58:二叉樹的下一個結點 275
麵試題59:對稱的二叉樹 277
麵試題60:把二叉樹打印成多行 278
麵試題61:按之字形順序打印二叉樹 280
麵試題62:序列化二叉樹 283
麵試題63:二叉搜索樹的第k個結點 285
麵試題64:數據流中的中位數 286
8.5 棧和隊列 290
麵試題65:滑動窗口的最大值 290
8.6 迴溯法 294
麵試題66:矩陣中的路徑 294
麵試題67:機器人的運動範圍 296
· · · · · · (
收起)