開啟主選單

求真百科

程序員面試金典

程序員面試金典

150個編程題問答 從二叉樹到二分查找,該部分涵蓋了關於數據結構和算法的最常見、最有用的面試題以及最為精巧的解決方案。 應對棘手算法題的5種行之有效的方法 通過這5種方法,你可以學會如何處理並攻克算法難題,包括那些最棘手的算法題。 面試者最容易犯的10個錯誤 不要因為這些常見的錯誤而與成功失之交臂。要了解面試者常犯的一些錯誤,學會如何避免這些問題。 面試準備的若干策略 不要因為沉溺在無窮無盡的面試題中而錯過了最重要的求職建議。這些策略和步驟可以讓你更有效地準備面試。

目錄

基本內容

書名:程序員面試金典

作者:麥克道爾 (Gayle Laakmann McDowell)

類型:計算機與互聯網

出版日期:2013年11月1日

語種:簡體中文

ISBN:9787115332912

譯者:李琳驍

出版社:人民郵電出版社

頁數:359頁

開本:16

品牌:人民郵電出版社

內容簡介

本書作者Gayle Laakmann McDowell是著名的軟件從業者,曾擔任谷歌資深面試官和招聘委員會成員,深諳世界頂尖科技公司的面試之道,與數百名求職者有過「交鋒」,洞悉面試成敗的關鍵所在。

本書融萃了作者在世界頂尖科技公司長期從事相關工作所積累的面試經驗,涉及與面試相關的每個環節——大到剖析面試流程、詳解經典的技術面試題,小到如何製作簡歷及面試時的着裝規範,你都能在書中找到錦囊妙計。

對源自微軟蘋果谷歌等IT名企的150道面試題進行深入解析,是本書的重頭戲,這些面試題數量眾多、質量上乘、解析深入,是目前市面上同類圖書均無法比肩的。對於希望衝擊IT名企、期望大展宏圖的程序員來說,本書是不可或缺的含金量極高的面試秘籍。

作者簡介

Gayle Laakmann McDwell

美國求職諮詢網站CareerCup.cm創始人兼CE,是一位著名軟件工程師,曾在微軟、蘋果與谷歌任職。早先,她自己就是一位十分成功的求職者,成功通過了微軟、谷歌、亞馬遜、蘋果、IBM、高盛等多家最著名企業極其嚴苛的面試過程。工作以後,她又成為一位出色的面試官。在谷歌任職期間,她還是該公司資深面試官及招聘委員會成員,期間閱人無數,積累了相當豐富的面試經驗。除此書外,還著有《金領簡歷:敲開蘋果、微軟、谷歌的大門》。

譯者簡介

李琳驍

從事嵌入式Linux內核/驅動開發,關注IT、開放源碼和安防監控等領域。業餘時以技術翻譯為樂,時而客串編輯,好為愛書挑錯,渴求完美,卻也常因「小」失大,不得讀書要領。翻譯或參與翻譯了《Linux命令詳解手冊》《編程人生》《編程大師訪談錄》等圖書。網絡ID為leal,管理Vim、Andrid等豆瓣小組,個人站點:http://linxia.net。

漆犇

畢業於中國地質大學,擁有十餘年軟件開發、測試及流程管理經驗,曾翻譯出版了《Linux/Unix設計思想》《金領簡歷 : 敲開蘋果、微軟、谷歌的大門》等書。目前定居於美國西雅圖,在微軟Windws Phne開發中心從事與WP應用開發者相關的項目管理事務。

媒體推薦

「如果你正打算參加技術面試,我極力推薦你閱讀此書。這本書匯總了諸多你不可不知的決勝於技術面試的問題、策略和方法。」

——Ginnie,亞馬遜評論者

圖書目錄

第1章 面試流程 1

1.1 概述 1

1.2 面試題的來源 2

1.3 準備時間表與注意事項 3

1.4 面試評估流程 4

1.5 答題情況 5

1.6 着裝規範 6

1.7 十大常見錯誤 6

1.8 常見問題解答 8

第2章 面試揭秘 9

2.1 微軟面試 10

2.2 亞馬遜面試 10

2.3 谷歌面試 11

2.4 蘋果面試 12

2.5 Facebook面試 13

2.6 雅虎面試 14

第3章 特殊情況 15

3.1 有工作經驗的求職者 15

3.2 測試人員及SDET 15

3.3 項目經理與產品經理 16

3.4 技術主管與部門經理 17

3.5 創業公司的面試 18

第4章 面試之前 19

4.1 積累相關經驗 19

4.2 構建人際網絡 20

4.3 寫好簡歷 21

第5章 行為面試題 23

5.1 準備工作 23

5.2 如何應對 25

第6章 技術面試題 27

6.1 技術準備 27

6.2 如何應對 29

6.3 算法題的五種解法 31

6.4 怎樣才算好代碼 34

第7章 錄用通知及其他 39

7.1 如何處理錄用與被拒的情況 39

7.2 如何評估錄用待遇 40

7.3 錄用談判 41

7.4 入職須知 42

第8章 面試考題 44

8.1 數組與字符串 45

8.2 鍊表 47

8.3 棧與隊列 49

8.4 樹與圖 51

8.5 位操作 54

8.6 智力題 57

8.7 數學與概率 59

8.8 面向對象設計 64

8.9 遞歸和動態規劃 66

8.10 擴展性與存儲限制 69

8.11 排序與查找 73

8.12 測試 78

8.13 C和C++ 83

8.14 Java 89

8.15 數據庫 93

8.16 線程與鎖 98

8.17 中等難題 104

8.18 高難度題 105

第9章 解題技巧 107

9.1 數組與字符串 108

9.2 鍊表 117

9.3 棧與隊列 131

9.4 樹與圖 146

9.5 位操作 163

9.6 智力題 175

9.7 數學與概率 179

9.8 面向對象設計 192

9.9 遞歸和動態規劃 221

9.10 擴展性與存儲限制 241

9.11 排序與查找 255

9.12 測試 269

9.13 C和C++ 274

9.14 Java 284

9.15 數據庫 290

9.16 線程與鎖 296

9.17 中等難題 306

9.18 高難度題 331

索引 358

序言

【前言】

招聘中的問題

討論完招聘事宜,我們又一次沮喪地走出會議室。那天,我們重新審查了十位「過關」的求職者,但是全都不堪錄用。我們很納悶,是我們太過苛刻了嗎?

我尤為失望的是,我推薦的一名求職者也被拒了。他是我以前的學生,以高達3.73的平均分(GPA)畢業於華盛頓大學,這可是世界上最棒的計算機專業院校之一。此外,他還完成了大量的開源項目工作。他精力充沛、富於創新、踏實能幹、頭腦敏銳,不論從哪方面來看,他都堪稱真正的極客。

但是,我不得不同意其他招聘人員的看法:他還是不夠格。就算我的強力推薦可以讓他僥倖過關,在後續的招聘環節還是會失利,因為他的硬傷太多了。

儘管面試官都認為他很聰明,但他答題總是磕磕絆絆的。大多數成功的求職者都能輕鬆搞定第一道題(這一題廣為人知,我們只是略作調整而已),可他卻沒能想出合適的算法。雖然他後來給出了一種解法,但沒有提出針對其他情形進行優化的解法。最後,開始寫代碼時,他草草地採用了最初的思路,可這個解法漏洞百出,最終還是沒能搞定。他算不上表現最差的求職者,但與我們的「錄用底線」卻相去甚遠,結果只能是鎩羽而歸。

幾個星期後,他給我打電話詢問反饋意見,我很糾結,不知該怎麼跟他說。他需要變得更聰明些嗎?不,他其實智力超群。做個更好的程序員?不,他的編程技能和我見過的一些最出色的程序員不相上下。

跟許多積極上進的求職者一樣,他準備得非常充分。他研讀過Brian W. Kernighan和Dennis M. Ritchie合著的《C程序設計語言》,麻省理工學院出版的《算法導論》等經典著作。他可以細數很多平衡樹的方法,也能用C語言寫出各種花哨的程序。 我不得不遺憾地告訴他:光是看這些書還遠遠不夠。這些經典學院派著作教會了人們錯綜複雜的研究理論,對程序員的面試卻助益不多。為什麼呢?容我稍稍提醒你一下:即使從學生時代起,你的面試官們其實都沒怎麼接觸過所謂的紅黑樹(Red-Black Trees)算法。

要順利通過面試,就得「真槍實彈」地做準備。你必須演練真正的面試題,並掌握它們的解題模式。

這本書就是我根據自己在頂尖公司積累的第一手面試經驗提煉而成的精華。我曾經與數百名求職者有過「交鋒」,本書可以說是我面試幾百位求職者的結晶。同時,我還從成千上萬求職者與面試官提供的問題中精挑細選了一部分。這些面試題出自許多知名的高科技公司。可以說,這本書囊括了150道世界上最好的程序員面試題,都是從數以千計的好問題中挑選出來的。

我的寫作方法

本書重點關注算法、編碼和設計問題。為什麼呢?儘管面試中也會有「行為問題」,但是答案會隨個人的經歷而千變萬化。同樣,儘管許多公司也會考問細節(例如,「什麼是虛函數?」),但通過演練這些問題而取得的經驗非常有限,更多地是涉及非常具體的知識點。本書只會述及其中一些問題,以便你了解它們「長」什麼樣。當然,對於那些可以拓展技術技能的問題,我會給出更詳細的解釋。

我的教學熱情

我特別熱愛教學。我喜歡幫助人們理解新概念,並提供一些學習工具,從而充分激發他們的學習熱情。

我第一次「正式」的教學經驗是在美國賓夕法尼亞大學就讀期間,那時我才大二,擔任本科計算機科學課程的助教(TA)。我後來還在其他一些課程中擔任過助教,最終在大學裡推出了自己的計算機科學課程,也就是給大家教授一些實際的「動手」技能。

在谷歌擔任工程師時,培訓和指導「Nooglers」(意指谷歌新員工。沒錯,他們就是這麼稱呼新人的!)是我最喜歡的工作之一。後來,我還利用「20%自由支配時間」在華盛頓大學教授計算機科學課程。

《程序員面試金典》、《金領簡歷》和CareerCup.com網站都能充分體現我的教學熱情。即便是現在,你也會發現我經常出現在CareerCup.com上為用戶答疑解惑。

請加入我們的行列吧![1]

參考文獻

  1. 程序員面試金典(第5版)道客巴巴網,2014-08-23