程式設計師面試金典(第6版)

程式設計師面試金典(第6版)

《程式設計師面試金典(第6版)》是2019年9月人民郵電出版社出版的圖書,作者是[美]蓋爾·拉克曼·麥克道爾(Gayle Laakmann McDowell)。

基本介紹

  • 書名:程式設計師面試金典(第6版)
  • 作者:[美]蓋爾·拉克曼·麥克道爾(Gayle Laakmann McDowell)
  • ISBN:9787115517197
  • 頁數:594頁
  • 定價:149元
  • 出版社:人民郵電出版社
  • 出版時間:2019年9月
  • 裝幀:平裝
  • 開本:16開
內容簡介,圖書目錄,

內容簡介

本書是原谷歌面試官的經驗之作,層層緊扣程式設計師面試的每一個環節,全面而詳盡地介紹了程式設計師應當如何應對面試,才能在面試中脫穎而出。內容主要涉及面試流程解析,面盛抹盼試官的幕後決策及可能提出的問題,面試前的準備工作,對面試結果的處理,以及出自微軟、蘋果、谷歌等多家知名公司的189道編程面試題及詳細解決方案。第6版修訂了上一版中一些題戒駝目的解法,為各章新增了介紹性內容,加入了更多的算法策略,並增添了對所有題目的提示信息。

圖書目錄

第 1 章 面試流程 1
1.1 為什麼 1
1.1.1 錯過了優秀人才是可以的 2
1.1.2 解決問題的技能很寶貴 2
1.1.3 基礎數據結構和算法知識很有用 櫃匪笑2
1.1.4 白板讓你專注於重要的事情 2
1.1.5 但這並不適用於每個人、每家公司、每種場合 3
1.2 面試問題的來源 3
1.3 一切都是相對的 3
1.4 常見問題 4
1.4.1 面試結束後沒有立即收到回復,我是被拒了嗎 4
1.4.2 被拒之後我還能重新申請嗎 4
第 2 章 面試堡乘才揭秘 5
2.1 微軟面試 6
2.1.1 必備項 6
2.1.2 獨特之處 6
2.2 亞馬遜面試 6
2.2.1 必備項 7
2.2.2 獨特之處 7
2.3 谷歌面試 7
2.3.1 必備項 8
2.3.2 獨特之處 8
2.4 蘋果面試 8
2.4.1 必備項 9
2.4.2 獨特之處 9
2.5 Facebook面試 9
2.5.1 必備項 9
2.5.2 獨特之處 10
2.6 Palantir面試 10
2.6.1 必備項 10
2.6.2 獨特之處 10
第 3 章 特殊情況 11
3.1 有工作經驗的求職者 11
3.2 測試人員和軟體開發測試工程師 11
3.3 產品經理(項目經理) 12
3.4 開發主管與部門經理 13
3.5 創業公司 13
3.5.1 職位申請 14
3.5.2 簽證與工作許可 14
3.5.3 簡歷篩選因素 14
3.5.4 面試流程 14
3.6 收購與“人才收購” 14
3.6.1 哪些創業公司需要進行併購面試,為什麼 14
3.6.2 這些面試有多重要 15
3.6.3 哪些員工需要面試 15
3.6.4 如果面試表現不好會怎么樣 15
3.6.5 最優秀和最差的員工或許會令你吃驚 16
3.6.6 被全凶滲收購方的員工與一般求職者的標準一樣嗎 16
3.6.7 被收購員工對於收購、人才收購會如何反應 16
3.6.8 收購後的團隊會經歷什麼 16
3.6.9 怎樣為你的團隊準備收購面試 16
3.7 面試官 17
3.7.1 不要問與本書完全相同的題目 17
3.7.2 問中等難題或者高難度題 17
3.7.3 使用多重障礙的題目 17
3.7.4 使用高難度題目,而不是艱深的基礎知識 18
3.7.5 避免“嚇人”的問題 18
3.7.6 提供正面鼓勵 19
3.7.7 深究行為面試題 19
3.7.8 輔導求職者 19
3.7.9 如果求職者想保持安靜,請滿足 20
3.7.10 了解你的模式:完整性測試、質量測試、專業知識和代理知識 20
第 4 章 面試之前 22
4.1 積累相關經驗 22
4.2 寫好簡歷 23
4.2.1 簡歷篇幅長度適中 23
4.2.2 工作經歷 23
4.2.3 項目經歷 23
4.2.4 軟體和程式語言 24
4.2.5 給母語為煮朽迎廈非英語的人及國際人士的建議 24
4.2.6 提防(潛在的)污名 24
4.3 準備流程圖 25
第 5 章 行為面試題 28
5.1 面試準備清單 28
5.1.1 你有哪些缺點 28
5.1.2 你應該問面試官哪些問題 28
5.2 掌握項目所用的技術 29
5.3 如何應對 29
5.3.1 力求具體,切忌自大 29
5.3.2 省略細枝末節 30
5.3.3 多談自己 30
5.3.4 回答條理清晰 30
5.3.5 行動是關鍵 31
5.3.6 故事的意義 31
5.4 自我介紹 32
5.4.1 結構 32
5.4.2 興趣愛好 32
5.4.3 展示成功的點點滴滴 33
第 6 章 大Ο 34
6.1 打個比方 34
6.2 時間複雜度 34
6.2.1 大Ο、大θ和大Ω 35
6.2.2 最優、最壞和期望情況 35
6.3 空間複雜度 36
6.4 刪除常量 36
6.5 丟棄付船循鑽不重要的項 37
6.6 多項式算法:加與乘 38
6.7 分攤時間 38
6.8 Log N運行時間 39
6.9 遞歸的運行時間 39
6.10 示例和習題 40
第 7 章 技術面試題 53
7.1 準備事項 53
7.2 必備的基礎知識 53
7.2.1 核心數據結構、算法及概念 53
7.2.2 2的冪表 54
7.3 解題步驟 54
7.4 最佳化和解題技巧 1:尋找BUD 58
7.4.1 瓶頸 59
7.4.2 無用功 59
7.4.3 重複性工作 60
7.5 最佳化和解題技巧 2:親力親為 61
7.6 最佳化和解題技巧 3:化繁為簡 62
7.7 最佳化和解題技巧 4:由淺入深 62
7.8 最佳化和解題技巧 5:數據結構頭腦風暴法 63
7.9 可想像的極限運行時間 63
7.10 處理錯誤答案 66
7.11 做過的面試題 66
7.12 面試的“完美”語言 67
7.12.1 流行度 67
7.12.2 語言可讀性 67
7.12.3 潛在問題 67
7.12.4 冗長 67
7.12.5 易用性 68
7.13 好代碼的標準 68
7.13.1 多多使用數據結構 68
7.13.2 適當代碼復用 69
7.13.3 模組化 70
7.13.4 靈活性和通用性 70
7.13.5 錯誤檢查 71
7.14 不要輕言放棄 71
第 8 章 錄用通知及其他注意事項 72
8.1 如何處理錄用與被拒的情況 72
8.1.1 回復期限與延長期限 72
8.1.2 如何拒絕錄用通知 72
8.1.3 如何處理被拒 72
8.2 如何評估錄用待遇 73
8.2.1 薪酬待遇的考量 73
8.2.2 職業發展 73
8.2.3 公司穩定性 73
8.2.4 幸福指數 74
8.3 錄用談判 74
8.4 入職須知 75
8.4.1 制定時間表 75
8.4.2 打造堅實的人際網路 75
8.4.3 向經理尋求幫助 75
8.4.4 保持面試狀態 75
第 9 章 面試題目 76
9.1 數組與字元串 76
9.1.1 散列表 76
9.1.2 ArrayList與可變長度數組 77
9.1.3 StringBuilder 77
9.2 鍊表 79
9.2.1 創建鍊表 79
9.2.2 刪除單向鍊表中的節點 80
9.2.3 “快行指針”技巧 80
9.2.4 遞歸問題 81
9.3 棧與佇列 82
9.3.1 實現一個棧 82
9.3.2 實現一個佇列 83
9.4 樹與圖 85
9.4.1 樹的類型 85
9.4.2 二叉樹的遍歷 87
9.4.3 二叉堆(小頂堆與大頂堆) 88
9.4.4 單詞查找樹(前序樹) 89
9.4.5 圖 90
9.4.6 圖的搜尋 91
9.5 位操作 94
9.5.1 手工位操作 95
9.5.2 位操作原理與技巧 95
9.5.3 二進制補碼與負數 95
9.5.4 算術右移與邏輯右移 96
9.5.5 常見位操作:獲取與設定數位 97
9.6 數學與邏輯題 99
9.6.1 素數 99
9.6.2 機率 101
9.6.3 大聲說出你的思路 102
9.6.4 總結規律和模式 102
9.6.5 略作變通 103
9.6.6 觸類旁通 104
9.7 面向對象設計 105
9.7.1 如何解答 105
9.7.2 設計模式 106
9.8 遞歸與動態規劃 108
9.8.1 解題思路 109
9.8.2 遞歸與疊代 109
9.8.3 動態規劃及記憶法 109
9.9 系統設計與可擴展性 114
9.9.1 處理問題 114
9.9.2 循環漸進的設計 114
9.9.3 逐步構建的方法:循序漸進 116
9.9.4 關鍵概念 116
9.9.5 系統設計要考慮的因素 118
9.9.6 人無完人,系統亦然 119
9.9.7 實例演示 119
9.10 排序與查找 121
9.10.1 常見的排序算法 121
9.10.2 查找算法 124
9.11 測試 126
9.11.1 面試官想考查什麼 126
9.11.2 測試現實生活中的事物 127
9.11.3 測試一套軟體 127
9.11.4 測試一個函式 129
9.11.5 調試與故障排除 129
9.12 C和C++ 131
9.12.1 類和集成 131
9.12.2 構造函式和析構函式 131
9.12.3 虛函式 132
9.12.4 虛析構函式 133
9.12.5 默認值 134
9.12.6 操作符重載 134
9.12.7 指針和引用 134
9.12.8 模板 135
9.13 Java 136
9.13.1 如何處理 137
9.13.2 重載與重寫 137
9.13.3 集合框架 138
9.14 資料庫 139
9.14.1 SQL語法及各類變體 139
9.14.2 規範化資料庫和非規範化資料庫 139
9.14.3 SQL語句 140
9.14.4 小型資料庫設計 141
9.14.5 大型資料庫設計 142
9.15 執行緒與鎖 143
9.15.1 Java執行緒 143
9.15.2 同步和鎖 145
9.15.3 死鎖及死鎖的預防 148
9.16 中等難題 149
9.17 高難度題 152
第 10 章 題目解法 156
10.1 數組與字元串 156
10.2 鍊表 170
10.3 棧與佇列 186
10.4 樹與圖 197
10.5 位操作 229
10.6 數學與邏輯題 240
10.7 面向對象設計 254
10.8 遞歸與動態規劃 286
10.9 系統設計與可擴展性 313
10.10 排序與查找 332
10.11 測試 350
10.12 C和C++ 354
10.13 Java 363
10.14 資料庫 370
10.15 執行緒與鎖 375
10.16 中等難題 388
10.17 高難度題 450
第 11 章 進階話題 539
11.1 實用數學 539
11.1.1 整數1至N的和 540
11.1.2 2的冪的和 540
11.1.3 對數的底 542
11.1.4 排列 541
11.1.5 組合 541
11.1.6 歸納證明 541
11.2 拓撲排序 542
11.3 Dijkstra算法 543
11.4 散列表衝突解決方案 545
11.4.1 使用鍊表連線數據 545
11.4.2 使用二叉搜尋樹連線數據 546
11.4.3 使用線性探測進行開放定址 546
11.4.4 平方探測和雙重散列 546
11.5 Rabin-Karp子串查找 546
11.6 AVL樹 547
11.6.1 性質 547
11.6.2 插入操作 547
11.7 紅黑樹 548
11.7.1 性質 549
11.7.2 為什麼這樣的樹是平衡的 549
11.7.3 插入操作 549
11.8 MapReduce 551
11.9 補充學習內容 553
附錄 A 代碼庫 554
附錄 B 提示 560
3.6.8 收購後的團隊會經歷什麼 16
3.6.9 怎樣為你的團隊準備收購面試 16
3.7 面試官 17
3.7.1 不要問與本書完全相同的題目 17
3.7.2 問中等難題或者高難度題 17
3.7.3 使用多重障礙的題目 17
3.7.4 使用高難度題目,而不是艱深的基礎知識 18
3.7.5 避免“嚇人”的問題 18
3.7.6 提供正面鼓勵 19
3.7.7 深究行為面試題 19
3.7.8 輔導求職者 19
3.7.9 如果求職者想保持安靜,請滿足 20
3.7.10 了解你的模式:完整性測試、質量測試、專業知識和代理知識 20
第 4 章 面試之前 22
4.1 積累相關經驗 22
4.2 寫好簡歷 23
4.2.1 簡歷篇幅長度適中 23
4.2.2 工作經歷 23
4.2.3 項目經歷 23
4.2.4 軟體和程式語言 24
4.2.5 給母語為非英語的人及國際人士的建議 24
4.2.6 提防(潛在的)污名 24
4.3 準備流程圖 25
第 5 章 行為面試題 28
5.1 面試準備清單 28
5.1.1 你有哪些缺點 28
5.1.2 你應該問面試官哪些問題 28
5.2 掌握項目所用的技術 29
5.3 如何應對 29
5.3.1 力求具體,切忌自大 29
5.3.2 省略細枝末節 30
5.3.3 多談自己 30
5.3.4 回答條理清晰 30
5.3.5 行動是關鍵 31
5.3.6 故事的意義 31
5.4 自我介紹 32
5.4.1 結構 32
5.4.2 興趣愛好 32
5.4.3 展示成功的點點滴滴 33
第 6 章 大Ο 34
6.1 打個比方 34
6.2 時間複雜度 34
6.2.1 大Ο、大θ和大Ω 35
6.2.2 最優、最壞和期望情況 35
6.3 空間複雜度 36
6.4 刪除常量 36
6.5 丟棄不重要的項 37
6.6 多項式算法:加與乘 38
6.7 分攤時間 38
6.8 Log N運行時間 39
6.9 遞歸的運行時間 39
6.10 示例和習題 40
第 7 章 技術面試題 53
7.1 準備事項 53
7.2 必備的基礎知識 53
7.2.1 核心數據結構、算法及概念 53
7.2.2 2的冪表 54
7.3 解題步驟 54
7.4 最佳化和解題技巧 1:尋找BUD 58
7.4.1 瓶頸 59
7.4.2 無用功 59
7.4.3 重複性工作 60
7.5 最佳化和解題技巧 2:親力親為 61
7.6 最佳化和解題技巧 3:化繁為簡 62
7.7 最佳化和解題技巧 4:由淺入深 62
7.8 最佳化和解題技巧 5:數據結構頭腦風暴法 63
7.9 可想像的極限運行時間 63
7.10 處理錯誤答案 66
7.11 做過的面試題 66
7.12 面試的“完美”語言 67
7.12.1 流行度 67
7.12.2 語言可讀性 67
7.12.3 潛在問題 67
7.12.4 冗長 67
7.12.5 易用性 68
7.13 好代碼的標準 68
7.13.1 多多使用數據結構 68
7.13.2 適當代碼復用 69
7.13.3 模組化 70
7.13.4 靈活性和通用性 70
7.13.5 錯誤檢查 71
7.14 不要輕言放棄 71
第 8 章 錄用通知及其他注意事項 72
8.1 如何處理錄用與被拒的情況 72
8.1.1 回復期限與延長期限 72
8.1.2 如何拒絕錄用通知 72
8.1.3 如何處理被拒 72
8.2 如何評估錄用待遇 73
8.2.1 薪酬待遇的考量 73
8.2.2 職業發展 73
8.2.3 公司穩定性 73
8.2.4 幸福指數 74
8.3 錄用談判 74
8.4 入職須知 75
8.4.1 制定時間表 75
8.4.2 打造堅實的人際網路 75
8.4.3 向經理尋求幫助 75
8.4.4 保持面試狀態 75
第 9 章 面試題目 76
9.1 數組與字元串 76
9.1.1 散列表 76
9.1.2 ArrayList與可變長度數組 77
9.1.3 StringBuilder 77
9.2 鍊表 79
9.2.1 創建鍊表 79
9.2.2 刪除單向鍊表中的節點 80
9.2.3 “快行指針”技巧 80
9.2.4 遞歸問題 81
9.3 棧與佇列 82
9.3.1 實現一個棧 82
9.3.2 實現一個佇列 83
9.4 樹與圖 85
9.4.1 樹的類型 85
9.4.2 二叉樹的遍歷 87
9.4.3 二叉堆(小頂堆與大頂堆) 88
9.4.4 單詞查找樹(前序樹) 89
9.4.5 圖 90
9.4.6 圖的搜尋 91
9.5 位操作 94
9.5.1 手工位操作 95
9.5.2 位操作原理與技巧 95
9.5.3 二進制補碼與負數 95
9.5.4 算術右移與邏輯右移 96
9.5.5 常見位操作:獲取與設定數位 97
9.6 數學與邏輯題 99
9.6.1 素數 99
9.6.2 機率 101
9.6.3 大聲說出你的思路 102
9.6.4 總結規律和模式 102
9.6.5 略作變通 103
9.6.6 觸類旁通 104
9.7 面向對象設計 105
9.7.1 如何解答 105
9.7.2 設計模式 106
9.8 遞歸與動態規劃 108
9.8.1 解題思路 109
9.8.2 遞歸與疊代 109
9.8.3 動態規劃及記憶法 109
9.9 系統設計與可擴展性 114
9.9.1 處理問題 114
9.9.2 循環漸進的設計 114
9.9.3 逐步構建的方法:循序漸進 116
9.9.4 關鍵概念 116
9.9.5 系統設計要考慮的因素 118
9.9.6 人無完人,系統亦然 119
9.9.7 實例演示 119
9.10 排序與查找 121
9.10.1 常見的排序算法 121
9.10.2 查找算法 124
9.11 測試 126
9.11.1 面試官想考查什麼 126
9.11.2 測試現實生活中的事物 127
9.11.3 測試一套軟體 127
9.11.4 測試一個函式 129
9.11.5 調試與故障排除 129
9.12 C和C++ 131
9.12.1 類和集成 131
9.12.2 構造函式和析構函式 131
9.12.3 虛函式 132
9.12.4 虛析構函式 133
9.12.5 默認值 134
9.12.6 操作符重載 134
9.12.7 指針和引用 134
9.12.8 模板 135
9.13 Java 136
9.13.1 如何處理 137
9.13.2 重載與重寫 137
9.13.3 集合框架 138
9.14 資料庫 139
9.14.1 SQL語法及各類變體 139
9.14.2 規範化資料庫和非規範化資料庫 139
9.14.3 SQL語句 140
9.14.4 小型資料庫設計 141
9.14.5 大型資料庫設計 142
9.15 執行緒與鎖 143
9.15.1 Java執行緒 143
9.15.2 同步和鎖 145
9.15.3 死鎖及死鎖的預防 148
9.16 中等難題 149
9.17 高難度題 152
第 10 章 題目解法 156
10.1 數組與字元串 156
10.2 鍊表 170
10.3 棧與佇列 186
10.4 樹與圖 197
10.5 位操作 229
10.6 數學與邏輯題 240
10.7 面向對象設計 254
10.8 遞歸與動態規劃 286
10.9 系統設計與可擴展性 313
10.10 排序與查找 332
10.11 測試 350
10.12 C和C++ 354
10.13 Java 363
10.14 資料庫 370
10.15 執行緒與鎖 375
10.16 中等難題 388
10.17 高難度題 450
第 11 章 進階話題 539
11.1 實用數學 539
11.1.1 整數1至N的和 540
11.1.2 2的冪的和 540
11.1.3 對數的底 542
11.1.4 排列 541
11.1.5 組合 541
11.1.6 歸納證明 541
11.2 拓撲排序 542
11.3 Dijkstra算法 543
11.4 散列表衝突解決方案 545
11.4.1 使用鍊表連線數據 545
11.4.2 使用二叉搜尋樹連線數據 546
11.4.3 使用線性探測進行開放定址 546
11.4.4 平方探測和雙重散列 546
11.5 Rabin-Karp子串查找 546
11.6 AVL樹 547
11.6.1 性質 547
11.6.2 插入操作 547
11.7 紅黑樹 548
11.7.1 性質 549
11.7.2 為什麼這樣的樹是平衡的 549
11.7.3 插入操作 549
11.8 MapReduce 551
11.9 補充學習內容 553
附錄 A 代碼庫 554
附錄 B 提示 560

相關詞條

熱門詞條

聯絡我們