硅谷Python工程師面試指南:數(shù)據(jù)結(jié)構(gòu)、算法與系統(tǒng)設(shè)計(jì) 任建峰 全書學(xué)
定 價:89 元
- 作者:任建峰 全書學(xué)
- 出版時間:2024/5/1
- ISBN:9787111750680
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TP312PY
- 頁碼:
- 紙張:膠版紙
- 版次:
- 開本:16開
本書是一本全面的Python技術(shù)及面試指南,旨在幫助讀者深入理解Python編程語言的核心概念,并掌握在技術(shù)面試中取得成功的關(guān)鍵技巧。全書分為4個部分。
第*部分 面試流程。這一部分詳細(xì)介紹了硅谷公司的面試流程,包括非技術(shù)電話面試、技術(shù)電話面試(包括閑談、技術(shù)溝通和提問環(huán)節(jié))以及現(xiàn)場面試的準(zhǔn)備和策略,既為讀者提供了面試前的全面準(zhǔn)備指導(dǎo),也幫助讀者在面試中展現(xiàn)出良好狀態(tài)。
第二部分 數(shù)據(jù)結(jié)構(gòu)。從基礎(chǔ)的列表、堆棧、隊(duì)列、優(yōu)先隊(duì)列、字典和集合,到更復(fù)雜的鏈表、二叉樹、其他樹結(jié)構(gòu)(如前綴樹、線段樹、二叉索引樹)和圖的表示與應(yīng)用,每一章都通過豐富的實(shí)例來展示如何巧妙應(yīng)用這些數(shù)據(jù)結(jié)構(gòu)。
第三部分 算法。這一部分覆蓋了二分搜索、雙指針法、動態(tài)規(guī)劃、深度優(yōu)先搜索、回溯、廣度優(yōu)先搜索、并查集等核心算法。結(jié)合面試真題,通過逐步分析,引導(dǎo)讀者掌握每種算法的思想及其在解決實(shí)際問題中的應(yīng)用。
第四部分 系統(tǒng)設(shè)計(jì)。理論知識部分,從設(shè)計(jì)需求分析到高層構(gòu)建,然后到具體組件設(shè)計(jì),再到擴(kuò)展設(shè)計(jì),幫助讀者理解如何構(gòu)建可擴(kuò)展、高效的系統(tǒng)架構(gòu)。實(shí)戰(zhàn)案例部分,包括分布式緩存系統(tǒng)、網(wǎng)絡(luò)爬蟲系統(tǒng)、TinyURL加密與解密、自動補(bǔ)全功能、新聞動態(tài)功能、社交媒體應(yīng)用和出行應(yīng)用的設(shè)計(jì),涵蓋系統(tǒng)設(shè)計(jì)的關(guān)鍵技術(shù)。此外,這一部分涵蓋了多線程編程與設(shè)計(jì)機(jī)器學(xué)習(xí)系統(tǒng)的知識,既幫助讀者理解并行處理的概念和應(yīng)用,又?jǐn)U展機(jī)器學(xué)習(xí)的重要知識和面試技巧,并提供設(shè)計(jì)搜索排名系統(tǒng)和推薦系統(tǒng)的實(shí)例。
(1)內(nèi)容權(quán)威:谷歌面試官和OPPO高級研究總監(jiān)聯(lián)手打造。作者基于親身經(jīng)驗(yàn),有的放矢地解析數(shù)據(jù)結(jié)構(gòu)、算法和系統(tǒng)設(shè)計(jì)3大核心技能面,篩選硅谷及國內(nèi)科技巨頭面試真題
(2)質(zhì)量可靠:西北工業(yè)大學(xué)教授、美國喬治亞大學(xué)教授、華為專家、谷歌專家推薦。本書不僅透徹講解常見的Python技術(shù)核心,還強(qiáng)調(diào)了重要而易被忽視的系統(tǒng)設(shè)計(jì)類題目,
用豐富實(shí)例打造硅谷科技企業(yè)的Python面試秘籍。
(3)收獲切實(shí):通過閱讀本書,你將:1)了解硅谷高科技公司以及國內(nèi)科技大廠面試的流程;2)利用真題訓(xùn)練來鞏固面試所需的基本技能;3)更好地準(zhǔn)備科技大廠的面試,從而爭取更高的待遇條件。
Preface?前 言
筆者目前就職于谷歌,擔(dān)任軟件工程師。與很多開發(fā)人員一樣,筆者在面試前也進(jìn)行了充分的準(zhǔn)備,其中“刷題”似乎格外令人痛苦和感到疲憊。然而筆者發(fā)現(xiàn),雖然刷題的過程很痛苦,但也有很多收獲。首先,現(xiàn)在寫出來的代碼更加簡潔,編程也更高效。其次,提升了自己的系統(tǒng)設(shè)計(jì)能力,在面對實(shí)際問題時更有思路。最后,因?yàn)闇?zhǔn)備充分、發(fā)揮平穩(wěn),最終拿到了比一般軟件工程師更高的待遇。
在準(zhǔn)備面試的過程中,筆者總結(jié)了一些經(jīng)驗(yàn),現(xiàn)在把自己的經(jīng)驗(yàn)寫出來,分享給廣大
讀者。
有一點(diǎn)需要說明:為什么本書使用Python語言呢?Python與C++相比更加簡潔,可以方便地調(diào)用很多函數(shù)。使用Python“刷題”,可以不必糾結(jié)煩瑣的細(xì)節(jié)。
本書分為四個部分,第一部分介紹硅谷公司面試流程,第二~四部分對應(yīng)一般面試需要考查的三個基本技能。
數(shù)據(jù)結(jié)構(gòu):主要介紹關(guān)于列表、堆棧、隊(duì)列、優(yōu)先隊(duì)列、字典、集合、鏈表,以及樹和圖的一些基本應(yīng)用。
算法:主要介紹二分搜索、雙指針法、動態(tài)規(guī)劃、深度優(yōu)先搜索、回溯、廣度優(yōu)先搜索等算法,并提供了面試真題的實(shí)戰(zhàn)訓(xùn)練。
系統(tǒng)設(shè)計(jì):包括系統(tǒng)設(shè)計(jì)理論和實(shí)戰(zhàn),介紹了多線程編程設(shè)計(jì),也介紹了機(jī)器學(xué)習(xí)的系統(tǒng)設(shè)計(jì)案例,包括搜索排名系統(tǒng)和Netflix電影推薦系統(tǒng)等。
本書具有以下特色。
內(nèi)容新穎:大多數(shù)案例都是目前大公司經(jīng)常面試的實(shí)戰(zhàn)題目。
免費(fèi)代碼:附有大量經(jīng)過測試的代碼。
經(jīng)驗(yàn)總結(jié):全面歸納和整理筆者積累的面試經(jīng)驗(yàn)。
內(nèi)容實(shí)用:結(jié)合大量實(shí)例進(jìn)行講解。
本書的完成離不開恩師蔣立源教授的鼓勵,雖然他已經(jīng)離開了這個世界,但是沒有他,筆者不會產(chǎn)生寫書的念頭。謹(jǐn)以此書獻(xiàn)給敬愛的蔣老師!
感謝師妹杜亞勤博士,她在百忙之中閱讀了全書并做了修改。
任建峰
于美國圣地亞哥
任建峰,分別于2005年和2009年獲得西北工業(yè)大學(xué)博士學(xué)位和德州大學(xué)達(dá)拉斯分校博士學(xué)位。先后在美國高通、華為工作多年,從事計(jì)算機(jī)影像學(xué)/計(jì)算機(jī)視覺的芯片開發(fā)工作。目前在谷歌主要復(fù)雜計(jì)算影像方面的開發(fā)。發(fā)表論文30多篇,擁有30多項(xiàng)專利
Contents?目 錄
前 言
第一部分 面試流程
第1章 硅谷公司面試流程 2
1.1 非技術(shù)電話面試 2
1.2 技術(shù)電話面試 3
1.2.1 閑談環(huán)節(jié) 3
1.2.2 技術(shù)溝通環(huán)節(jié) 3
1.2.3 提問環(huán)節(jié) 4
1.3 現(xiàn)場面試 4
1.3.1 準(zhǔn)備好閑談素材 5
1.3.2 保持積極溝通 6
第二部分 數(shù)據(jù)結(jié)構(gòu)
第2章 列表 8
2.1 列表的基礎(chǔ)知識 8
2.1.1 創(chuàng)建列表 8
2.1.2 向列表中添加元素 9
2.1.3 刪除列表中的元素 11
2.2 實(shí)例1:最長連續(xù)1的個數(shù) 12
2.3 實(shí)例2:二進(jìn)制相加 13
2.4 實(shí)例3:查詢范圍和 15
2.4.1 利用一維數(shù)組求解 16
2.4.2 利用二維數(shù)組求解 16
2.5 實(shí)例4:隨機(jī)索引 18
2.6 實(shí)例5:下一個更大排列 19
2.7 實(shí)例6:驗(yàn)證有效數(shù)字 21
2.8 實(shí)例7:遞歸小數(shù) 23
第3章 堆!25
3.1 堆棧的基礎(chǔ)知識 25
3.1.1 堆棧操作及時間復(fù)雜度 25
3.1.2 3種實(shí)現(xiàn)方式 26
3.1.3 堆棧的應(yīng)用 29
3.2 實(shí)例1:通過最小移除操作
得到有效的括號 29
3.3 實(shí)例2:函數(shù)的專用時間 30
第4章 隊(duì)列 33
4.1 隊(duì)列的3種實(shí)現(xiàn)方式 33
4.2 實(shí)例1:設(shè)計(jì)循環(huán)隊(duì)列 36
4.3 實(shí)例2:求和大于K的最短
非空連續(xù)子數(shù)組的長度 38
第5章 優(yōu)先隊(duì)列 40
5.1 優(yōu)先隊(duì)列的3種實(shí)現(xiàn)方式 40
5.2 實(shí)例1:雇用K個工人的最低
成本 42
5.3 實(shí)例2:判斷數(shù)組是否可以
拆分為連續(xù)的子序列 43
第6章 字典 45
6.1 字典的基礎(chǔ)知識 45
6.1.1 創(chuàng)建字典 45
6.1.2 向字典中添加元素 46
6.1.3 訪問字典中的元素 48
6.1.4 從字典中刪除元素 49
6.2 實(shí)例1:和等于K的連續(xù)子
數(shù)組的總數(shù) 50
6.3 實(shí)例2:標(biāo)簽中的最大值 51
6.4 實(shí)例3:以平均時間復(fù)雜度
O(1)實(shí)現(xiàn)插入、刪除和獲取
隨機(jī)值 52
6.5 實(shí)例4:最近最少使用緩存 54
第7章 集合 57
7.1 集合的基礎(chǔ)知識 57
7.2 集合的基本操作 58
7.2.1 添加元素 58
7.2.2 刪除元素 59
7.2.3 并集 59
7.2.4 交集 60
第8章 鏈表 61
8.1 雙指針技術(shù) 61
8.2 實(shí)例1:判斷鏈表是否有循環(huán) 62
8.3 實(shí)例2:兩個鏈表的交集 62
8.4 實(shí)例3:克隆隨機(jī)鏈表 64
8.5 實(shí)例4:反轉(zhuǎn)鏈表 65
第9章 二叉樹 66
9.1 層次順序遍歷 66
9.1.1 前序遍歷 66
9.1.2 中序遍歷 67
9.1.3 后序遍歷 68
9.1.4 層序遍歷 69
9.2 遞歸方法用于樹的遍歷 69
9.2.1 自上而下的解決方案 70
9.2.2 自下而上的解決方案 70
9.3 實(shí)例1:二叉樹的最低共同
祖先 72
9.4 實(shí)例2:序列化和反序列化
二叉樹 73
9.5 實(shí)例3:求二叉樹的最大
路徑和 74
9.6 實(shí)例4:將二叉樹轉(zhuǎn)換為
雙鏈表 75
第10章 其他樹結(jié)構(gòu) 77
10.1 前綴樹 77
10.1.1 前綴樹節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu) 78
10.1.2 在前綴樹中插入單詞 78
10.1.3 在前綴樹中搜索單詞 80
10.2 線段樹 82
10.3 二叉索引樹 86
10.3.1 二叉索引樹的表示 87
10.3.2 getSum操作 87
10.3.3 update操作 88
10.3.4 二叉索引樹的工作原理 89
10.4 實(shí)例1:范圍和的個數(shù) 90
10.4.1 利用線段樹求解 90
10.4.2 利用二叉索引樹求解 94
10.4.3 利用二分搜索求解 96
10.5 實(shí)例2:計(jì)算后面較小數(shù)字的
個數(shù) 97
10.5.1 二叉索引樹解法 97
10.5.2 二分搜索解法 98
10.5.3 線段樹解法 99
第11章 圖 100
11.1 圖的表示 100
11.1.1 鄰接矩陣 100
11.1.2 鄰接表 101
11.2 實(shí)例1:克隆圖 103
11.3 實(shí)例2:圖驗(yàn)證樹 104
11.3.1 深度優(yōu)先搜索解法 104
11.3.2 廣度優(yōu)先搜索解法 106
11.3.3 并查集解法 107
第三部分 算法
第12章 二分搜索 110
12.1 實(shí)例1:求平方根 110
12.2 實(shí)例2:在旋轉(zhuǎn)排序數(shù)組中
搜索 111
12.3 案例3:會議室預(yù)訂問題 112
12.3.1 問題1:如何優(yōu)化 112
12.3.2 問題2:如何預(yù)訂多個
房間 113
第13章 雙指針法 114
13.1 實(shí)例1:稀疏向量的點(diǎn)積 114
13.2 實(shí)例2:最小窗口子字符串 115
13.3 實(shí)例3:間隔列表相交 116
13.4 實(shí)例4:最長連續(xù)1的個數(shù) 119
13.5 實(shí)例5:查找字符串中的所有
字母 121
第14章 動態(tài)規(guī)劃 123
14.1 動態(tài)規(guī)劃的基礎(chǔ)知識 123
14.2 實(shí)例1:買賣股票的最佳
時間 124
14.3 實(shí)例2:硬幣找零 124
14.4 實(shí)例3:計(jì)算解碼方式
總數(shù) 125
第15章 深度優(yōu)先搜索 127
15.1 深度優(yōu)先搜索的應(yīng)用 127
15.2 實(shí)例1:太平洋和大西洋的
水流問題 128
15.3 實(shí)例2:預(yù)測獲勝者 129
15.4 實(shí)例3:表達(dá)式加運(yùn)算符 130
第16章 回溯 132
16.1 實(shí)例1:數(shù)獨(dú)求解 132
16.2 實(shí)例2:掃地機(jī)器人 135
第17章 廣度優(yōu)先搜索 137
17.1 廣度優(yōu)先搜索的應(yīng)用 138
17.2 實(shí)例1:墻和門 139
17.3 實(shí)例2:課程表 141
17.4 實(shí)例3:公交路線 142
17.5 實(shí)例4:判斷二分圖 143
17.6 實(shí)例5:單詞階梯 145
第18章 并查集 147
18.1 并查集的基礎(chǔ)知識 147
18.2 實(shí)例:朋友圈 150
18.2.1 廣度優(yōu)先搜索解法 150
18.2.2 深度優(yōu)先搜索解法 151
18.2.3 并查集解法 152
第19章 數(shù)據(jù)結(jié)構(gòu)與算法面試
真題實(shí)戰(zhàn) 153
19.1 實(shí)例1:文件系統(tǒng) 153
19.1.1 關(guān)于數(shù)據(jù)結(jié)構(gòu)的探討 154
19.1.2 面試題考查點(diǎn) 156
19.1.3 完整代碼 156
19.2 實(shí)例2:最長有效詞 157
19.2.1 找到更快的解決方案 158
19.2.2 基于存儲/緩存的解決
方案 159
19.2.3 面試題考查點(diǎn) 161
19.3 實(shí)例3:圓圈組 161
19.3.1 圓圈組的個數(shù) 163
19.3.2 最大的k個圓圈組 163
第四部分 系統(tǒng)設(shè)計(jì)
第20章 系統(tǒng)設(shè)計(jì)理論 166
20.1 設(shè)計(jì)步驟 166
20.1.1 描述使用場景、約束和
假設(shè) 166
20.1.2 構(gòu)建高層設(shè)計(jì) 166
20.1.3 設(shè)計(jì)核心組件 167
20.1.4 擴(kuò)展設(shè)計(jì) 169
20.2 域名系統(tǒng) 171
20.3 負(fù)載均衡器 172
20.4 分布式緩存系統(tǒng) 173
20.5 哈希一致性 176
第21章 系統(tǒng)設(shè)計(jì)實(shí)戰(zhàn) 178
21.1 設(shè)計(jì)分布式緩存系統(tǒng) 178
21.1.1 緩存無效 178
21.1.2 緩存逐出策略 179
21.1.3 設(shè)計(jì)分布式鍵值緩存
系統(tǒng) 180
21.2 設(shè)計(jì)網(wǎng)絡(luò)爬蟲系統(tǒng) 181
21.2.1 架構(gòu)設(shè)計(jì) 181
21.2.2 爬蟲服務(wù) 181
21.2.3 處理重復(fù)鏈接 183
21.2.4 更新爬網(wǎng)結(jié)果 184
21.2.5 可擴(kuò)展性設(shè)計(jì) 184
21.3 TinyURL的加密與解密 185
21.3.1 系統(tǒng)的要求和目標(biāo) 185
21.3.2 容量估算和約束 185
21.3.3 系統(tǒng)API 186
21.3.4 核心算法設(shè)計(jì) 187
21.3.5 數(shù)據(jù)庫設(shè)計(jì) 187
21.3.6 數(shù)據(jù)分區(qū)和復(fù)制 188
21.3.7 緩存 188
21.3.8 負(fù)載均衡器 189
21.4 設(shè)計(jì)自動補(bǔ)全功能 189
21.4.1 基本系統(tǒng)設(shè)計(jì)與算法 190
21.4.2 主數(shù)據(jù)結(jié)構(gòu) 191
21.4.3 優(yōu)化設(shè)計(jì) 192
21.5 設(shè)計(jì)新聞動態(tài)功能 195
21.6 設(shè)計(jì)X(Twitter)應(yīng)用 198
21.7 設(shè)計(jì)Uber/Lyft應(yīng)用 203
第22章 多線程編程 206
22.1 多線程面試問題 206
22.2 實(shí)例1:形成水分子 207
22.3 實(shí)例2:打印零、偶數(shù)、
奇數(shù) 208
第23章 設(shè)計(jì)機(jī)器學(xué)習(xí)系統(tǒng) 210
23.1 機(jī)器學(xué)習(xí)的基礎(chǔ)知識 210
23.1.1 什么是機(jī)器學(xué)習(xí) 210
23.1.2 為什么使用機(jī)器學(xué)習(xí) 211
23.1.3 監(jiān)督學(xué)習(xí)和無監(jiān)督學(xué)習(xí) 212
23.1.4 分類模型和回歸模型 213
23.1.5 轉(zhuǎn)換問題 214
23.1.6 關(guān)鍵數(shù)據(jù) 214
23.1.7 機(jī)器學(xué)習(xí)工作流程 215
23.1.8 欠擬合和過擬合 216
23.1.9 偏差和方差 217
23.2 機(jī)器學(xué)習(xí)的進(jìn)階知識 220
23.2.1 處理不平衡的二進(jìn)制
分類 220
23.2.2 高斯混合模型和K均值
的比較 221
23.2.3 梯度提升 221
23.2.4 決策樹的約束 223
23.2.5 加權(quán)更新 223
23.2.6 隨機(jī)梯度提升 223
23.2.7 懲罰性學(xué)習(xí) 224
23.3 機(jī)器學(xué)習(xí)面試 224
23.3.1 機(jī)器學(xué)習(xí)面試考查點(diǎn) 224
23.3.2 機(jī)器學(xué)習(xí)面試的思路 226
23.4 實(shí)例1:搜索排名系統(tǒng) 227
23.4.1 題目解讀 227
23.4.2 指標(biāo)分析 228
23.4.3 架構(gòu) 229
23.4.4 結(jié)果選擇 231
23.4.5 訓(xùn)練數(shù)據(jù)生成 237
23.4.6 排名 238
23.4.7 篩選結(jié)果 240
23.5 實(shí)例2:Netflix電影推薦
系統(tǒng) 242
23.5.1 題目解讀 242
23.5.2 指標(biāo)分析 244
23.5.3 架構(gòu) 246
23.5.4 特征工程 247
23.5.5 候選電影的產(chǎn)生 250
23.5.6 訓(xùn)練數(shù)據(jù)生成 252
23.5.7 排名 253