來自矽谷一線的IT公司程式設計師的經驗和體驗,匯集寶貴面試經驗,經典面試題分門別類、舉一反三地講解。
基本介紹
- 書名:程式設計師面試白皮書
- 作者:逸超,蝦米,笑笑,董飛
- ISBN:9787115401847
- 頁數:264
- 出版社:人民郵電出版社
- 出版時間:2015-11-01
- 裝幀:平裝
- 開本:16開
圖書簡介,作者簡介,圖書目錄,
圖書簡介
移動網際網路和網際網路+的浪潮,不僅催生了許多新興的IT企業,而且帶動了大批的傳統企業尋求應變,引入更多計算機人才,利用雲計算、大數據、機器學習等新手段與新興公司競爭。對IT專業人才的需求極速擴大,這為從業人員創造了更多的工作機會。
本書是程式設計師和IT從業人員的面試求職指南。本書遵從大多數面試參考圖書的組織方式,結合實例,按照常見的數據結構、算法以及計算機基礎知識進行章節劃分。每一章的“知識要點”部分介紹章節涉及的相關知識點,回顧重要的基礎知識點;“模式識別”部分給出一些例題,幫助大家總結解決相關問題的常見方法,並且通過分析問題中的關鍵信息,教授讀者如何從題目中分析題型和解題方法。程式設計師面試是對於面試者計算機知識的全面檢測,因此,本書設有專門的章節覆蓋了網路、作業系統、編譯器、算法和數據結構等等各個領域的知識。
本書作者來自矽谷一線的IT公司,書中包含了作者親身的經驗和體驗,書中收集的題目部分來自網際網路上分享的面試經驗、線上編程網站leetcode,以及一些面試參考資料。本書適合想要從事正規的程式設計師、架構師以及相關IT公司的專業人士和學生參考,尤其適合那些以一線IT外企或網際網路公司為求職目標的讀者閱讀。
本書是程式設計師和IT從業人員的面試求職指南。本書遵從大多數面試參考圖書的組織方式,結合實例,按照常見的數據結構、算法以及計算機基礎知識進行章節劃分。每一章的“知識要點”部分介紹章節涉及的相關知識點,回顧重要的基礎知識點;“模式識別”部分給出一些例題,幫助大家總結解決相關問題的常見方法,並且通過分析問題中的關鍵信息,教授讀者如何從題目中分析題型和解題方法。程式設計師面試是對於面試者計算機知識的全面檢測,因此,本書設有專門的章節覆蓋了網路、作業系統、編譯器、算法和數據結構等等各個領域的知識。
本書作者來自矽谷一線的IT公司,書中包含了作者親身的經驗和體驗,書中收集的題目部分來自網際網路上分享的面試經驗、線上編程網站leetcode,以及一些面試參考資料。本書適合想要從事正規的程式設計師、架構師以及相關IT公司的專業人士和學生參考,尤其適合那些以一線IT外企或網際網路公司為求職目標的讀者閱讀。
作者簡介
逸超
競賽保送國內Top2大學本科,畢業後前往加州大學攻讀碩士學位,期間獲得全額獎學金。畢業時獲得十多個知名科技公司offer,現在在矽谷就職於科技公司,從事軟體開發工作。擅長總結面試方法,樂於幫助朋友準備面試。
蝦米
國內TOP2高校畢業,赴美碩士畢業後跨專業應聘程式設計師工作,有一套自己的面試方法學。現於矽谷公司任軟體工程師,業餘時間開設面試講座,在圈內小有名氣。
笑笑
國內top2大學本科,UCSD計算機碩士。現蘋果公司軟體工程師。曾拿到多個矽谷軟體公司的offer,面試經驗相當豐富。
董飛
本科南開大學,碩士杜克大學計算機系畢業。在攻讀碩士期間,從事跟Hadoop大數據相關的研究項目,在VLDB,SOCC資料庫大會發表過論文, 先後在創業公司酷迅,百度基礎架構組,Amazon 雲計算部門,Linkedin擔任高級工程師,負責過垂直搜尋引擎,百度雲計算平台研發,廣告系統和線上教育平台的架構。在大數據領域業界研究多年,涉及Hadoop調優,分散式框架,Data Pipeline, 實時系統。
競賽保送國內Top2大學本科,畢業後前往加州大學攻讀碩士學位,期間獲得全額獎學金。畢業時獲得十多個知名科技公司offer,現在在矽谷就職於科技公司,從事軟體開發工作。擅長總結面試方法,樂於幫助朋友準備面試。
蝦米
國內TOP2高校畢業,赴美碩士畢業後跨專業應聘程式設計師工作,有一套自己的面試方法學。現於矽谷公司任軟體工程師,業餘時間開設面試講座,在圈內小有名氣。
笑笑
國內top2大學本科,UCSD計算機碩士。現蘋果公司軟體工程師。曾拿到多個矽谷軟體公司的offer,面試經驗相當豐富。
董飛
本科南開大學,碩士杜克大學計算機系畢業。在攻讀碩士期間,從事跟Hadoop大數據相關的研究項目,在VLDB,SOCC資料庫大會發表過論文, 先後在創業公司酷迅,百度基礎架構組,Amazon 雲計算部門,Linkedin擔任高級工程師,負責過垂直搜尋引擎,百度雲計算平台研發,廣告系統和線上教育平台的架構。在大數據領域業界研究多年,涉及Hadoop調優,分散式框架,Data Pipeline, 實時系統。
圖書目錄
第1章 簡歷、面試和Offer 1
1.1 簡歷 1
1.1.1 格式 2
1.1.2 內容安排 2
1.1.3 描述技巧 5
1.2 面試 6
1.2.1 HR 7
1.2.2 技術面試官 8
1.2.3 老闆 10
1.3 Offer 10
1.4 常見問題 12
1.5 工具箱 19
第2章 數組和字元串 27
2.1 知識要點 27
2.1.1 數組 27
2.1.2 哈希表 29
2.1.3 String 31
2.2 模式識別 31
2.2.1 使用哈希表 31
2.2.2 利用哈希表實現動態規劃的思想 35
2.2.3 String相關問題的處理技巧 39
2.3 工具箱 41
第3章 鍊表 49
3.1 知識要點 49
3.2 模式識別 50
3.2.1 鍊表的基本操作 50
3.2.2 啞節點 50
3.2.3 Runner和Chaser 52
3.2.4 遍歷並處理節點 56
3.2.5 交換節點的問題 57
3.2.6 同時操作兩個鍊表 59
3.2.7 倒序處理 60
3.3 工具箱 64
第4章 棧和佇列 67
4.1 知識要點 67
4.1.1 棧 67
4.1.2 佇列 68
4.2 模式識別 68
4.2.1 通過棧實現特殊順序的讀取 68
4.2.2 “Save for later”問題 72
4.2.3 用棧解決自上而下結構的問題 74
4.3 工具箱 79
第5章 樹和圖 83
5.1 知識要點 83
5.1.1 樹 83
5.1.2 字典樹 86
5.1.3 堆與優先佇列 88
5.1.4 圖 89
5.1.5 圖的遍歷 90
5.1.6 單源最短路徑問題 92
5.1.7 任意兩點之間的最短距離 93
5.2 模式識別 93
5.2.1 利用分而治之(D&C)策略判斷樹、圖的性質 93
5.2.2 樹的路徑問題 100
5.2.3 樹和其他數據結構的相互轉換 104
5.2.4 尋找特定節點 108
5.2.5 圖的訪問 113
5.3 工具箱 116
第6章 位操作 121
6.1 知識要點 121
6.2 模式識別 122
6.2.1 基本的位操作 122
6.2.2 位掩碼 125
6.3 工具箱 127
第7章 面向對象設計 129
7.1 知識要點 129
7.1.1 設計題解答要領 129
7.1.2 模擬面試 131
7.1.3 抽象、面向對象和解耦(Decoupling) 134
7.1.4 繼承/組合/參數化類型 137
7.1.5 設計模式 139
7.2 模式識別 144
7.3 工具箱 159
第8章 遞歸和動態規劃 167
8.1 知識要點 167
8.1.1 構建從子問題到最終目標的方法 167
8.1.2 遞歸的空間與時間成本 168
8.1.3 自底向上與自頂向下 169
8.1.4 算法策略 171
8.2 模式識別 172
8.2.1 用動態規劃(自底向上)解決收斂結構問題 172
8.2.2 最長子序列類型的問題 181
8.2.3 用Memorization(自頂向下)解決收斂結構問題 190
8.2.4 用回溯法(自上而下)解決發散結構問題 193
8.2.5 用D&C策略解決獨立子問題 201
第9章 排序和搜尋 203
9.1 知識要點 203
9.1.1 常見的內排序算法 203
9.1.2 常見的外排序算法 209
9.1.3 快速選擇算法 210
9.1.4 二分查找 211
9.2 模式識別 212
9.2.1 動態數據結構的維護 212
9.2.2 對於有序/部分有序容器的搜尋,用二分查找 216
9.2.3 數據範圍有限、離散的排序問題 228
9.2.4 Scalability & Memory Limits 問題 230
9.3 工具箱 233
第10章 測試 235
10.1 知識要點 235
10.1.1 測試現實世界的物體、軟體或函式 235
10.1.2 故障排除 236
10.2 模式識別 238
10.3 工具箱 242
第11章 網路 245
11.1 知識要點 245
11.1.1 網路分層 246
11.1.2 路由 246
11.1.3 常用網路統計指標 247
11.1.4TCP vs. UDP 248
11.2 模式識別 251
11.3 工具箱 254
第12章 計算機底層知識 257
12.1 知識要點 257
12.1.1 進程vs.執行緒 257
12.1.2 上下文切換 259
12.1.3 系統調用 259
12.1.4 Semaphore/Mutex 259
12.1.5 死鎖 260
12.1.6 生產者消費者 260
12.1.7 進程間通信 261
12.1.8 邏輯地址/物理地址/虛擬記憶體 261
12.1.9 檔案系統 263
12.1.10 實時vs.分時作業系統 263
12.1.11 編譯器 264
1.1 簡歷 1
1.1.1 格式 2
1.1.2 內容安排 2
1.1.3 描述技巧 5
1.2 面試 6
1.2.1 HR 7
1.2.2 技術面試官 8
1.2.3 老闆 10
1.3 Offer 10
1.4 常見問題 12
1.5 工具箱 19
第2章 數組和字元串 27
2.1 知識要點 27
2.1.1 數組 27
2.1.2 哈希表 29
2.1.3 String 31
2.2 模式識別 31
2.2.1 使用哈希表 31
2.2.2 利用哈希表實現動態規劃的思想 35
2.2.3 String相關問題的處理技巧 39
2.3 工具箱 41
第3章 鍊表 49
3.1 知識要點 49
3.2 模式識別 50
3.2.1 鍊表的基本操作 50
3.2.2 啞節點 50
3.2.3 Runner和Chaser 52
3.2.4 遍歷並處理節點 56
3.2.5 交換節點的問題 57
3.2.6 同時操作兩個鍊表 59
3.2.7 倒序處理 60
3.3 工具箱 64
第4章 棧和佇列 67
4.1 知識要點 67
4.1.1 棧 67
4.1.2 佇列 68
4.2 模式識別 68
4.2.1 通過棧實現特殊順序的讀取 68
4.2.2 “Save for later”問題 72
4.2.3 用棧解決自上而下結構的問題 74
4.3 工具箱 79
第5章 樹和圖 83
5.1 知識要點 83
5.1.1 樹 83
5.1.2 字典樹 86
5.1.3 堆與優先佇列 88
5.1.4 圖 89
5.1.5 圖的遍歷 90
5.1.6 單源最短路徑問題 92
5.1.7 任意兩點之間的最短距離 93
5.2 模式識別 93
5.2.1 利用分而治之(D&C)策略判斷樹、圖的性質 93
5.2.2 樹的路徑問題 100
5.2.3 樹和其他數據結構的相互轉換 104
5.2.4 尋找特定節點 108
5.2.5 圖的訪問 113
5.3 工具箱 116
第6章 位操作 121
6.1 知識要點 121
6.2 模式識別 122
6.2.1 基本的位操作 122
6.2.2 位掩碼 125
6.3 工具箱 127
第7章 面向對象設計 129
7.1 知識要點 129
7.1.1 設計題解答要領 129
7.1.2 模擬面試 131
7.1.3 抽象、面向對象和解耦(Decoupling) 134
7.1.4 繼承/組合/參數化類型 137
7.1.5 設計模式 139
7.2 模式識別 144
7.3 工具箱 159
第8章 遞歸和動態規劃 167
8.1 知識要點 167
8.1.1 構建從子問題到最終目標的方法 167
8.1.2 遞歸的空間與時間成本 168
8.1.3 自底向上與自頂向下 169
8.1.4 算法策略 171
8.2 模式識別 172
8.2.1 用動態規劃(自底向上)解決收斂結構問題 172
8.2.2 最長子序列類型的問題 181
8.2.3 用Memorization(自頂向下)解決收斂結構問題 190
8.2.4 用回溯法(自上而下)解決發散結構問題 193
8.2.5 用D&C策略解決獨立子問題 201
第9章 排序和搜尋 203
9.1 知識要點 203
9.1.1 常見的內排序算法 203
9.1.2 常見的外排序算法 209
9.1.3 快速選擇算法 210
9.1.4 二分查找 211
9.2 模式識別 212
9.2.1 動態數據結構的維護 212
9.2.2 對於有序/部分有序容器的搜尋,用二分查找 216
9.2.3 數據範圍有限、離散的排序問題 228
9.2.4 Scalability & Memory Limits 問題 230
9.3 工具箱 233
第10章 測試 235
10.1 知識要點 235
10.1.1 測試現實世界的物體、軟體或函式 235
10.1.2 故障排除 236
10.2 模式識別 238
10.3 工具箱 242
第11章 網路 245
11.1 知識要點 245
11.1.1 網路分層 246
11.1.2 路由 246
11.1.3 常用網路統計指標 247
11.1.4TCP vs. UDP 248
11.2 模式識別 251
11.3 工具箱 254
第12章 計算機底層知識 257
12.1 知識要點 257
12.1.1 進程vs.執行緒 257
12.1.2 上下文切換 259
12.1.3 系統調用 259
12.1.4 Semaphore/Mutex 259
12.1.5 死鎖 260
12.1.6 生產者消費者 260
12.1.7 進程間通信 261
12.1.8 邏輯地址/物理地址/虛擬記憶體 261
12.1.9 檔案系統 263
12.1.10 實時vs.分時作業系統 263
12.1.11 編譯器 264