宣傳語
歷經第1版、第2版不斷完善,前後十多次重印,數年各大圖書排行榜頂尖榮耀
第2版榮獲中國書刊發行業協會“2009年度全行業優秀暢銷品種”獎!
揭開知名IT企業面試、筆試的核心機密
數十萬IT專業畢業生與程式設計師的求職寶典
內 容 簡 介
本書是《程式設計師面試寶典》的第三版,在保留第二版的數據結構、面向對象、程式設計等主幹的基礎上,使用各大IT公司及相關企業最新面試題替換和補充原內容,以反映自第二版以來近幾年時間所發生的變化。
本書取材於各大公司面試真題(筆試、口試、電話面試、英語面試,以及邏輯測試和智商測試),詳細分析了應聘程式設計師(含網路、測試等)職位的常見考點。本書不僅對傳統的C系語言考點做了詳盡解說,還根據外企出題最新特點,新增加了對友元、Static、圖形/音頻、樹、棧、ERP等問題的深入講解。最後本書著力講述了如何進行英語面試和電話面試,並對求職中簽約、毀約的注意事項及群體面試進行了解析。本書的面試題除了有詳細解析和答案外,對相關知識點還有擴展說明。真正做到了由點成線,舉一反三,對讀者從求職就業到提升計算機專業知識都有顯著幫助。
本書適合計算機相關專業應屆畢業生閱讀,也適合作為正在應聘軟體行業的相關就業人員和計算機愛好者的參考書。
序
首先,我要感謝本書的作者能夠選擇這樣一個備受大家關注的話題作為題材,同時也要感謝電子工業出版社能夠將此書大力推廣。要知道,程式設計師和面試可能是現在網際網路上大家最為關心的字眼之一了——不,應該是之二。正好,本書詳盡地描述了程式設計師應該學些什麼、做些什麼,然後應該如何面對煩人的但又必不可少的面試過程。當然,如果您不是程式設計師,我依然認為本書會對您的職業生涯有所幫助,相信我吧。
喔,忘了介紹我自己了。我是孔文達,畢業於北京某某大學材料系,現任微軟(中國)有限公司顧問。咦?怎么讀材料的從事上IT工作了?這說來可話長了。但其實一句概括的話,就是:努力加機遇。當然,我並不想長篇大論應該如何努力及如何把握機遇,我想說的是和本書密切相關的話題——面試。
其實,無論是程式設計師還是其他任何行業的任何職位,面試過程都大同小異,無非就是提交簡歷、電話面試、面談、得到Offer等這一系列過程。當然,這其中每一步都很重要!簡歷要寫得得體、漂亮,儘量突出自己的優勢,禁止自己的劣勢。電話面試還好一些,因為只是電話交談,所以您也許會更好地把握自己的語言。面談是最關鍵的一步,而且如果您準備不充分的話,一定會緊張。緊張,就有可能出現錯誤。不過還好,大多數面試官都可以接受面試者的緊張,只要不是太過分,問題就不大了。一般來說,中型或大型企業的面試都不止一輪,有些甚至有十幾輪。就拿微軟來說吧,官方渠道需要12輪面試,內部推薦也需要4輪,而且是一票否決式。就是說,有一個面試官說你不行,你就沒戲了。怎么搞定所有的面試官呢?當然有很多技巧,但最重要的一條就是:面試官是個活生生的人,他/她一定有個人偏好,在你見到面試官時,儘可能在最短的時間內——最好是在他/她了解你之前——了解他/她,合乎時宜地與他/她展開對話。最後一點,最好不要極其地、非常地、十分地想得到某個職位,這有可能會使你失態,抱著平常心有時會得到意想不到的效果。
這本書寫得非常好,它非常詳盡地描述了作為一名程式設計師應該為面試準備些什麼和注意些什麼。也許您現在還用不到它,先看看吧,指不定什麼時候就用上了呢!這不是杞人憂天,而是未雨綢繆!
孔文達
技術顧問 微軟全國TOP3講師
[ 在正式加入微軟(中國)有限公司前,
曾任微軟外聘顧問及特約講師7年,並在
北京中達金橋科技開發有限公司
(微軟在國內最大的技術及培訓合作夥伴)
任人力資源部總監及副總裁。]
第二屆微軟十佳金牌講師
首屆微軟十佳金牌講師
MLC認證講師
微軟護航專家
CIW認證講師(CIW CI)
CIW網路安全分析大師(CIW)
華為網路工程師(HCNE)
HP-UNIX系統及網路管理員(HP-UX Administrator)
Cisco認證網路專家(CCNA)
微軟認證講師(MCT)
微軟認證資料庫管理員(MCDBA)
微軟認證系統工程師(MCSE)
微軟認證專家(MCP)
微軟銷售專員(MSS)
……
前 言
本書是程式設計師面試寶典的第三版。
第三版主要是更新,在保留原書數據結構、面向對象、程式設計等主幹的基礎上,大量地更新了程式設計例題。以反映自第一版上市以來近幾年時間內所發生的變化,幫助求職者們更好地處理一些新問題、新變化。
本書相對上一版的新變化主要有以下幾點:
針對求職過程這一章,在原書3節(筆試、電話面試、面試)的基礎上添加了2節(簽約、違約),以更好地幫助求職者應對求職過程中出現一些細節的麻煩。
針對C/C++程式設計這一塊,更新了絕大部分的例題。如原書中循環佇列問題在面試時被反覆提及,而近兩年如反循環佇列、zigzag問題在面試中也經常出現;又如遞歸面試已經很少出現過於常見的菲波那契問題,而代之以構造多叉樹遞歸、對角線取值等問題,這些我們都在第三版中進行了擴充與重寫。
針對面試中的新題型,本書補充了新的章節:與非或、友元、Static、圖形/音頻、樹、棧、ERP、群體面試,等等。相比前一版而言,第三版的內容更加貼近市場的變化,更加與時俱進。
《程式設計師面試寶典》不同於同類書籍的主要特點是:
細
中國軟體企業比較小,面試涉及的方面比較多,比較基礎,比如常會考到一些編程基礎性的面試例題,而原有的面試書籍對此方面鮮有觸及。本書把面試國內公司最易考到的基礎考點,放在第二部分C++基礎程式設計裡面,希望能切切實實地解決實際面試問題。
專
面試題是通過一道題考查一個專類的能力,比如關鍵字volatile的面試例題是考查嵌入式編程。從面試官的角度來講,一個測試也許能從多方面揭示應試者的素質及水平。正因為如此,本書將考點細緻分類(嵌入式編程類、基礎代碼類、面向對象類、模板類等),通過面試例題提升讀者對這些方面的掌握能力,達到有的放矢、舉一反三的效果。
廣
求職者應聘的職位,一般有3種:網路工程師、測試工程師、軟體開發人員。諸如趨勢科技、華為3COM、思科等公司,對程式、網路方面的考題日趨增加;此外,隨著全球五百強企業的進入,外企對設計模式、軟體度量等方面試題的喜愛有增無減,而市面上的書籍卻鮮有綜述。本書結合大量考題分析其特點並詳述應試方案,以適應市場需求。
真
第三版在保留原書主幹的基礎上,內容非常新,可以算做面試者求職前的一份全真模擬。同時作者將求職中的細節問題(簡歷、招聘、簽約、違約),以及筆試、面試中的感悟融會在書中,給求職者以最真切的人文關懷。真情實感,娓娓道來,指引讀者走上理想的工作崗位。本書不是一本萬能書籍,但卻肯定是您工作與求職的好助手、好夥伴!
本書主要由歐立奇編著,其他參與編寫的人員有劉洋、段韜、秦曉東、李啟高、馬雪、馬煜、胥虎軍、李富星、牛永潔等。
編 著 者
目 錄
第1部分 求職過程
求職的過程就是一個提高和認識自我的過程,最後的成功根植於你本人一絲一毫的努力當中。也許真的像電影《肖申克的救贖》裡面說的那樣:“得救之道,就在其中。”
第1章 應聘求職 2
1.1 渠道 2
1.2 流程 3
第2章 簡曆書寫 4
2.1 簡歷注意事項 4
2.2 簡歷模板 8
第3章 求職五步曲 11
3.1 筆試 11
3.2 電話面試 14
3.3 面試 15
3.4 簽約 16
3.5 違約 20
第4章 職業生涯發展規劃 22
4.1 缺乏工作經驗的應屆畢業生 22
4.2 更換工作的程式設計師們 24
4.3 快樂的工作 25
第2部分 C/C++程式設計
為什麼要選擇C系的語言呢?這是因為各大公司的程式語言絕大多數是C系的語言,雖然Java也占很大的比重,可是C++相對於Java來說更有區分度—C++是那種為每一個問題提供若干個答案的語言,遠比Java靈活。
第5章 程式設計基本概念 29
作為一個求職者或應屆畢業生,公司除了對你的項目經驗有所問詢之外,最好的考量辦法就是你的基本功,包括你的編程風格,你對賦值語句、遞增語句、類型轉換、數據交換等程式設計基本概念的理解。
5.1 賦值語句 29
5.2 i++ 31
5.3 編程風格 33
5.4 類型轉換 34
5.5 運算符問題 38
5.6 a、b交換 39
5.7 C和C++的關係 41
5.8 程式設計的其他問題 41
第6章 預處理、const與sizeof 45
6.1 宏定義 45
6.2 const 46
6.3 sizeof 48
6.4 內聯函式和宏定義 59
第7章 指針與引用 61
指針是C系語言的特色,是C和C++的精華所在,也是C和C++的一個十分重要的概念。
7.1 指針基本問題 61
7.2 傳遞動態記憶體 63
7.3 函式指針 72
7.4 指針數組和數組指針 74
7.5 迷途指針 77
7.6 指針和句柄 79
第8章 循環、遞歸與機率 82
8.1 遞歸基礎知識 82
8.2 典型遞歸問題 83
8.3 循環與數組問題 86
8.4 螺旋佇列問題 89
8.5 機率 92
第9章 STL模板與容器 93
9.1 向量容器 94
9.2 泛型編程 98
9.3 模板 99
第10章 面向對象 103
有這樣一句話:“編程是在計算機中反映世界”,我覺得再貼切不過。面向對象(Object-
Oriented)對這種說法的體現也是最優秀的。
10.1 面向對象的基本概念 103
10.2 類和結構 104
10.3 成員變數 106
10.4 構造函式和析構函式 108
10.5 拷貝構造函式和賦值函式 111
10.6 多態的概念 117
10.7 友元 120
第11章 繼承與接口 122
整個C++程式設計全面圍繞面向對象的方式進行。類的繼承特性是C++的一個非常重要的機制。這一章的內容是C++面向對象程式設計的關鍵。
11.1 覆蓋 123
11.2 私有繼承 125
11.3 虛函式繼承和虛繼承 130
11.4 多重繼承 134
11.5 檢測並修改不適合的繼承 137
11.6 純虛函式 139
11.7 運算符重載與RTTI 141
第12章 位運算與嵌入式編程 149
12.1 位制轉換 149
12.2 嵌入式編程 159
12.3 static 165
第3部分 數據結構和設計模式
隨著外企研發機構大量內遷我國,在外企的面試中,軟體工程的知識,包括設計模式、UML、敏捷軟體開發,以及.NET技術和完全面向對象語言C#的面試題目將會有增無減。
第13章 數據結構基礎 167
面試時間一般有2小時,其中至少有約20~30分鐘是用來回答數據結構相關問題的。鍊表、數組的排序和逆置是必考的內容之一。
13.1 單鍊表 167
13.2 雙鍊表 172
13.3 循環鍊表 173
13.4 佇列 174
13.5 棧 175
13.6 堆 178
13.7 樹、圖、哈希表 187
13.8 排序 196
13.9 時間複雜度 209
第14章 字元串 201
14.1 整數字元串轉化 201
14.2 字元數組和strcpy 218
14.3 數組初始化和數組越界 222
14.4 數字流和數組聲明 224
14.5 字元串其他問題 225
14.6 字元子串問題 230
第15章 設計模式與軟體測試 232
“地上本沒有路,走的人多了也就成了路”。設計模式如同此理,它是經驗的傳承,並非體系。它是被前人發現,經過總結形成的一套某一類問題的一般性解決方案,而不是被設計出來的定性規則。
15.1 設計模式 233
15.2 軟體測試基礎 239
15.3 黑盒測試 241
15.4 白盒測試 247
第4部分 作業系統、資料庫和網路
本部分主要介紹求職面試過程中出現的第三個重要的板塊—作業系統、資料庫和網路知識。這些內容雖不是面試題目中的主流,但仍然具有重要的意義。
第16章 作業系統 253
16.1 進程 253
16.2 執行緒 256
16.3 記憶體管理 258
第17章 資料庫與SQL語言 260
17.1 資料庫理論 260
17.2 SQL語言 264
17.3 SQL語言客觀題 266
17.4 SQL語言主觀題 270
第18章 計算機網路及分散式系統 275
18.1 網路結構 275
18.2 網路協定問題 277
18.3 網路安全問題 279
18.4 網路其他問題 281
第5部分 綜合面試題
英語面試、電話面試和智力測試,是除技術面試之外另外的大模組。本部分教你如何精心地為這些內容做好準備,以讓你在整個面試過程中的表現更加完美。
第19章 英語面試 288
這裡的英語面試不同於普通的英語面試。就一個程式設計師而言,最好能夠做到用英文流利地介紹自己的求職經歷,這是進外企非常重要的一步。有些問題即便是中文你都很難回答,更何況是用英文去回答。但是求職過程本身就是一個準備的過程,精心地準備等待機會,機會總是垂青於那些精心準備的人。
19.1 面試過程和技巧 288
19.2 關於工作(About Job) 290
19.3 關於個人(About Person) 293
19.4 關於未來(About Future) 295
第20章 電話面試 297
20.1 電話面試之前的準備工作 297
20.2 電話面試交流常見問題 298
第21章 智力測試 307
智力測試是企業招聘時有可能出現的一個環節,事實上,IT企業求職招聘還是主要以基本的程式設計及數據結構為主。智力測試是考驗人的綜合智商、邏輯能力的過程,本身是很難複習和準備的。這些年來,智力測試的一個新的趨勢是和編程及算法結合起來。
21.1 關於數字的智力測試 307
21.2 關於推理的智力測試 309
21.3 關於時間的智力測試 314
21.4 關於綜合的智力問題 318
21.5 關於群體面試 321
21.6 關於表格的智力測試 323
附錄A 面試經歷總結 328