《編程之美》小組 著
適讀人群 :本科或研究生應(yīng)屆畢業(yè)生 同時(shí)也適用本科大三以上對(duì)編程有興趣的同學(xué)
夢想改變世界,據(jù)說編程的人都懷揣著一個(gè)改變世界的夢想:編程神奇而充滿力量。無數(shù)的年輕人投身其中,用夢想和思考改變世界?!毒幊讨溃何④浖夹g(shù)面試心得》是來自微軟技術(shù)人員的杰作,他們和你有同樣的夢想。
《編程之美:微軟技術(shù)面試心得》收集了約60道算法和程序設(shè)計(jì)題目。作者試圖從書中各種有趣的問題出發(fā),引導(dǎo)讀者發(fā)現(xiàn)問題,分析問題,解決問題,尋找更優(yōu)的解法?!毒幊讨溃何④浖夹g(shù)面試心得》的內(nèi)容分為下面幾個(gè)部分:
游戲之樂:從游戲和其他有趣問題出發(fā),化繁為簡,分析總結(jié)。
數(shù)字之魅:編程的過程實(shí)際上就是和數(shù)字及字符打交道的過程。這一部分收集了一些好玩的對(duì)數(shù)字進(jìn)行處理的題目。
結(jié)構(gòu)之法:匯集了常見的對(duì)字符串、鏈表、隊(duì)列,以及樹等進(jìn)行操作的題目。
數(shù)學(xué)之趣:列舉了一些不需要寫具體程序的數(shù)學(xué)問題,鍛煉讀者的抽象思維能力。書中絕大部分題目都提供了詳細(xì)的解說。 每道題目后面還有一至兩道擴(kuò)展問題,供讀者進(jìn)一步鉆研。書中還回答了讀者關(guān)于IT業(yè)面試,招聘,職業(yè)發(fā)展的疑問。這《編程之美:微軟技術(shù)面試心得》的很多題目會(huì)出現(xiàn)在IT 行業(yè)的各種筆試、面試中,但這《編程之美:微軟技術(shù)面試心得》更深層的意義在于引導(dǎo)讀者思考,和讀者共享思考之樂,編程之美。
鄒欣,現(xiàn)任微軟亞洲研究院技術(shù)創(chuàng)新組研發(fā)主管。他從1996年起在微軟Outlook產(chǎn)品團(tuán)隊(duì)從事開發(fā)工作,2003年到2005年,在微軟VisualStudioTeamSystem產(chǎn)品團(tuán)隊(duì)負(fù)責(zé)軟件質(zhì)量管理工具的開發(fā)。加入微軟前,鄒欣從事過商用Unix系統(tǒng)、GPS/GIS軟件開發(fā)以及軟件測試工作。2007年出版了《移山之道——VSTS軟件開發(fā)指南》一書。他1991年獲北京大學(xué)計(jì)算機(jī)軟件專業(yè)學(xué)士學(xué)位。1996年獲美國WayneStateUniversity(韋恩州立大學(xué))計(jì)算機(jī)軟件專業(yè)碩士學(xué)位。
面試雜談XVII
第1章游戲之樂——游戲中碰到的題目1
1.1讓CPU占用率曲線聽你指揮4
1.2中國象棋將帥問題13
1.3一摞烙餅的排序19
1.4買書問題29
1.5快速找出故障機(jī)器38
1.6飲料供貨43
1.7光影切割問題48
1.8小飛的電梯調(diào)度算法53
1.9高效率地安排見面會(huì)57
1.10雙線程高效下載62
1.11NIM(1)一排石頭的游戲67
1.12NIM(2)“拈”游戲分析70
1.13NIM(3)兩堆石頭的游戲75
1.14連連看游戲設(shè)計(jì)88
1.15構(gòu)造數(shù)獨(dú)93
1.1624點(diǎn)游戲100
1.17俄羅斯方塊游戲108
1.18挖雷游戲115
第2章數(shù)字之魅——數(shù)字中的技巧117
2.1求二進(jìn)制數(shù)中1的個(gè)數(shù)119
2.2不要被階乘嚇倒125
2.3尋找發(fā)帖“水王”129
2.41的數(shù)目132
2.5尋找最大的K個(gè)數(shù)139
2.6精確表達(dá)浮點(diǎn)數(shù)147
2.7最大公約數(shù)問題150
2.8找符合條件的整數(shù)155
2.9斐波那契(Fibonacci)數(shù)列160
2.10尋找數(shù)組中的最大值和最小值165
2.11尋找最近點(diǎn)對(duì)170
2.12快速尋找滿足條件的兩個(gè)數(shù)176
2.13子數(shù)組的最大乘積180
2.14求數(shù)組的子數(shù)組之和的最大值183
2.15子數(shù)組之和的最大值(二維)189
2.16求數(shù)組中最長遞增子序列194
2.17數(shù)組循環(huán)移位199
2.18數(shù)組分割202
2.19區(qū)間重合判斷205
2.20程序理解和時(shí)間分析209
2.21只考加法的面試題211
第3章結(jié)構(gòu)之法——字符串及鏈表的探索213
3.1字符串移位包含的問題215
3.2電話號(hào)碼對(duì)應(yīng)英語單詞218
3.3計(jì)算字符串的相似度223
3.4從無頭單鏈表中刪除節(jié)點(diǎn)226
3.5最短摘要的生成229
3.6編程判斷兩個(gè)鏈表是否相交233
3.7隊(duì)列中取最大值操作問題236
3.8求二叉樹中節(jié)點(diǎn)的最大距離241
3.9重建二叉樹246
3.10分層遍歷二叉樹252
3.11程序改錯(cuò)258
第4章數(shù)學(xué)之趣——數(shù)學(xué)游戲的樂趣263
4.1金剛坐飛機(jī)問題265
4.2瓷磚覆蓋地板269
4.3買票找零272
4.4點(diǎn)是否在三角形內(nèi)276
4.5磁帶文件存放優(yōu)化281
4.6桶中取黑白球284
4.7螞蟻爬桿288
4.8三角形測試用例292
4.9數(shù)獨(dú)知多少296
4.10數(shù)字啞謎和回文303
4.11挖雷游戲的概率310
索引311
創(chuàng)作后記315
推薦序
我在卡內(nèi)基梅隆大學(xué)畢業(yè)找工作的時(shí)候,經(jīng)常和其他同學(xué)一起交流面試的經(jīng)驗(yàn)。當(dāng)時(shí)令求職者“聞面色變”的公司有微軟,研究所有DEC的SRC。每次有同學(xué)去微軟或SRC面試,回來的時(shí)候都會(huì)被其他同學(xué)追問有沒有什么有趣的面試題。我也是那時(shí)第一次聽說“下水道井蓋為什么是圓的”這一問題。
我自己申請(qǐng)加入微軟美國研究院時(shí)被面試了兩天,見了15個(gè)人,感覺壓力很大。至今還記得當(dāng)有一位面試者不斷追問我論文中一個(gè)算法的收斂性時(shí),我們進(jìn)行了熱烈討論。在微軟工作的十幾年中,我自己也面試了非常多的新員工。特別在微軟亞洲研究院的9年,經(jīng)常感覺很多剛剛畢業(yè)的優(yōu)秀學(xué)生基礎(chǔ)很好,但面試的準(zhǔn)備不足。我非常欣慰地看到鄒欣工程師和微軟亞洲研究院其他同事們努力編寫了這本好書,和大家一起分享微軟的面試心得和編程技巧。相信更多的同學(xué)會(huì)因此成為“筆霸”、“面霸”,甚至“offer霸”。
程序雖然很難寫,卻很美妙。要想把程序?qū)懞?,需要學(xué)好一定的基礎(chǔ)知識(shí),包括編程語言、數(shù)據(jù)結(jié)構(gòu)和算法。程序?qū)懙煤玫娜送ǔ6加锌b密的邏輯思維能力和良好的數(shù)理基礎(chǔ),而且熟悉編程環(huán)境和編程工具。古人說“見文如見人”,我覺得程序同樣也能反映出一個(gè)人的功力和風(fēng)格,好的程序讀來非常賞心悅目。我以前常出的一道面試題是“展示一段自己覺得寫過的最好的程序”。
編程很艱苦,但是很有趣。本書的作者們從游戲中遇到的編程問題談起,介紹了數(shù)字和字符串中的很多技巧,探索了數(shù)據(jù)結(jié)構(gòu)的竅門,還發(fā)掘了數(shù)學(xué)游戲的樂趣。我希望讀者在閱讀本書時(shí)能找到編程的快樂,欣賞到編程之美。本書適合計(jì)算機(jī)學(xué)院、軟件學(xué)院、信息學(xué)院高年級(jí)本科生、研究生作為軟件開發(fā)的參考教材,也是程序員繼續(xù)進(jìn)修的優(yōu)秀閱讀材料,更是每位申請(qǐng)微軟公司和其他公司軟件工程師之職的面試必讀秘笈。
人類的生活因?yàn)閮?yōu)秀的程序員和美妙的程序而變得更加美好。
沈向洋
微軟公司杰出工程師
微軟公司全球資深副總裁
2008年春節(jié)于香港
序
一位應(yīng)聘者(interviewee)在我面前寫下了這樣的幾行程序:
while(true){
if(busy)i++;
else
}
然后就陷入了沉思,良久,她問道:“那else怎么辦?怎么能讓電腦不做事情呢?”
我說:“對(duì)呀,怎么才能讓電腦閑下來?你平時(shí)上課、玩電腦的時(shí)候有沒有想過?這樣吧,你可以上網(wǎng)查查資料?!?
她很快地在搜索引擎中輸入“50%CPU占用率”等關(guān)鍵字,但是搜索并沒有返回什么有用的結(jié)果。
在她忙著搜索的時(shí)候,我又看了一遍她的簡歷,從簡歷上可以看到她的成績不錯(cuò),她學(xué)習(xí)了很多程序設(shè)計(jì)語言,也研究過“設(shè)計(jì)模式”“架構(gòu)”“SOA”等,她對(duì)Windows、Linux也很熟悉。我的面試問題是:“如何寫一個(gè)短小的程序,讓W(xué)indows的任務(wù)管理器顯示CPU的占用率為50%?”這位應(yīng)聘者嘗試了一些方法,但是始終沒有寫出一個(gè)完整的程序。面試的時(shí)間到了,她看起來比較遺憾,我也一樣,因?yàn)槲疫€有一系列的后續(xù)問題沒有機(jī)會(huì)問她:
?如何能通過命令行參數(shù),讓CPU的使用率保持在任意位置,如90%?
?如何能讓CPU的使用率表現(xiàn)為一條正弦曲線?
?如果你的電腦是雙核(dual-coreCPU)的,那么你的程序會(huì)有什么樣的結(jié)果?為什么?
自從2005年回到微軟亞洲研究院后,我面試過不少應(yīng)聘者,作為面試者,我最希望看到應(yīng)聘者給出獨(dú)具匠心的回答,這樣我也能從中學(xué)到一些“妙招”。遺憾的是看到“妙招”的時(shí)候并不多。
我也為微軟校園招聘出過考題,走訪過不少軟件學(xué)院,還為員工和實(shí)習(xí)生做過培訓(xùn)。我了解到不少同學(xué)認(rèn)為軟件開發(fā)的工作沒意思,是“IT民工”“軟件藍(lán)領(lǐng)”。我和其他同事也聽到一些抱怨,說一些高校計(jì)算機(jī)科學(xué)的教育只停留在原理上,忽視了對(duì)原理和技術(shù)的理解和運(yùn)用。
寫程序真的沒有意思嗎?為什么許多微軟的員工和軟件業(yè)界的牛人樂此不疲?我和一些喜歡編程的同事和實(shí)習(xí)生創(chuàng)作編寫了這本書,我們希望通過分析微軟面試中經(jīng)常出現(xiàn)的題目,來展示編程的樂趣。編程的樂趣在于探索,而不是在于背答案。面試的過程就是展現(xiàn)分析能力、探索能力的過程,在面試中展現(xiàn)出來的巧妙的思路、簡明的算法、嚴(yán)謹(jǐn)?shù)臄?shù)學(xué)分析就是我們這本書要談的“編程之美”。
有時(shí)候會(huì)有同學(xué)問:“你們是不是有面試題庫?”言下之意是每個(gè)應(yīng)聘者都是從“庫”中隨機(jī)抽出一道題目,如果答對(duì)了,就中了;如果答錯(cuò)了,就bye-bye了。書中有一些關(guān)于面試的問答,我想它們可以回答這樣一些疑惑。
本書的題目,一部分源自各位作者平時(shí)想出來的,例如,有一次一位應(yīng)聘者滔滔不絕地講述自己如何在某大型項(xiàng)目中進(jìn)行CPU的壓力測試,聽上去水分不少,我一邊聽一邊琢磨“怎樣才能考察一個(gè)人是否真正懂了CPU,任務(wù)調(diào)度……”,后來就有了上面提到的“CPU使用率”的面試題。有些題目來自于平時(shí)的實(shí)踐和討論,比如一些和游戲相關(guān)的題目。有些題目是隨手拈來,比如我看到朋友的博客上有一道面試題,自己做了一下,發(fā)現(xiàn)自己的解法并不是最優(yōu)的,但是,倒是可以作為一個(gè)面試題的題目,第2章的“程序理解和時(shí)間分析”就是這么得來的。書中有些題目在網(wǎng)上流傳較廣,但是網(wǎng)上流傳的解法并不是正解,我們在書中加上了詳細(xì)的分析,并提出了一些擴(kuò)展問題。還有一些題目在教科書和專業(yè)書籍中有更深入的分析和解答,讀者可以參考。
書中的大多數(shù)題目都能在45分鐘內(nèi)解決,這也是微軟一次技術(shù)面試的時(shí)間。本書不是一個(gè)“答案匯編”,很多題目并沒有給出完整的答案,有些題目還有更多的問題要讀者去解答,這是本書和其他書籍不一樣的地方。面試不是閉卷考試,如果大家都背好了“井蓋為什么是圓的”的答案來面試,但是卻不會(huì)變通,那結(jié)果肯定是令人失望的。
為了方便讀者評(píng)估自己的水平,我們還按照每道題目的難度制定了相應(yīng)的“星級(jí)”:
一顆星:不用查閱資料,在20分鐘內(nèi)完成;
兩顆星:可以在40分鐘內(nèi)完成;
三顆星:需要查閱一些資料,在60分鐘內(nèi)完成。
由于每個(gè)人的專業(yè)背景、經(jīng)歷、興趣不一樣,這種“星級(jí)”僅僅是一種參考。
作者們水平有限,書中的題目并不能代表程序設(shè)計(jì)各個(gè)方面的最新進(jìn)展,雖然經(jīng)過幾輪審核,不少解法仍可能有漏洞或錯(cuò)誤,希望廣大讀者能給我們指正。我們已在微軟亞洲研究院的門戶網(wǎng)站(www.msra.cn)上開辟專欄(www.msra.cn/bop)和讀者交流——初學(xué)者和高手都非常歡迎!
本書的內(nèi)容分為下面幾個(gè)部分。
游戲之樂:電腦上的游戲是給人玩的,CPU也可以讓人“玩”。這一部分的題目從游戲和作者平時(shí)遇到的有趣問題出發(fā),展現(xiàn)一些并不為人重視的問題,并且加以分析和總結(jié)。希望其中化繁為簡的思路能夠?qū)ψx者解決其他復(fù)雜問題有所幫助。
數(shù)字之魅:編程的過程實(shí)際上就是和數(shù)字及字符打交道的過程。如何提高掌控這些數(shù)字和字符的能力對(duì)提高編程能力至關(guān)重要。這一部分收集了一些好玩的對(duì)數(shù)字進(jìn)行處理的題目。
結(jié)構(gòu)之法:對(duì)字符及常用數(shù)據(jù)結(jié)構(gòu)的處理幾乎是每個(gè)程序必然會(huì)涉及的問題,這一部分匯集了對(duì)常用的字符串、鏈表、隊(duì)列以及樹等進(jìn)行操作的題目。
數(shù)學(xué)之趣:書中還列了一些不需要寫具體程序的數(shù)學(xué)問題,但是其中顯示的原理和解決問題的思路對(duì)于提高思維能力還是很重要的,我們把它們單獨(dú)列出來。
關(guān)于筆試、面試、職業(yè)選擇的一些問答:微軟的面經(jīng),各種技術(shù)職位的介紹是很多學(xué)生所關(guān)心的內(nèi)容,因此我們把一些相關(guān)的介紹和討論也收錄了進(jìn)來。
我們希望《編程之美》的讀者是:
1.大學(xué)計(jì)算機(jī)系、軟件學(xué)院或相關(guān)專業(yè)的大學(xué)生、研究生,可以把這本書當(dāng)作一個(gè)習(xí)題集;
2.面臨求職筆試、面試的IT從業(yè)人員,不妨把這本書當(dāng)作“面試真題”,演練一下;
3.編程愛好者,平時(shí)可以隨便翻翻,重溫?cái)?shù)學(xué)和編程技能,開拓思路,享受思考的樂趣。
《編程之美》由下面幾位作者協(xié)同完成,如果把這本書的寫作比作一個(gè)軟件項(xiàng)目,它有下面的各個(gè)階段,每個(gè)階段則有不同的目標(biāo)和角色。
1.構(gòu)想階段:鄒欣。
2.計(jì)劃階段:鄒欣、劉鐵鋒、莫瑜。
3.實(shí)現(xiàn)階段/里程碑(一):上述全部人員,加上李東、張曉、陳遠(yuǎn)、高霖(負(fù)責(zé)封面設(shè)計(jì))。
4.實(shí)現(xiàn)階段/里程碑(二):上述全部人員,加上梁舉、胡睿。
5.穩(wěn)定階段:上述全部人員,加上博文視點(diǎn)的編輯們。
6.發(fā)布階段:鄒欣、劉鐵鋒和博文視點(diǎn)的編輯們。
這本書從2007年2月開始構(gòu)思,到2007年11月底交出完整的第一稿,花費(fèi)的時(shí)間比每一位作者預(yù)想的要長得多,一方面是大家都有日常的工作和學(xué)習(xí)任務(wù)要完成;更重要的是,美的創(chuàng)造和提煉,是一個(gè)漫長和痛苦的過程。要把“編程之美”表達(dá)出來,不是一件容易的事,需要?jiǎng)?chuàng)造力、想象力和持久的艱苦勞作。就像沈向洋博士經(jīng)常講的一句話——Nothingreplaceshardwork。
這本書的各位作者,都是利用自己的業(yè)余時(shí)間參與這個(gè)項(xiàng)目的,他們的創(chuàng)造力、熱情、執(zhí)著和專業(yè)精神讓這本書從一個(gè)模糊的構(gòu)想變成了現(xiàn)實(shí)。通過這次合作,我從他們那里學(xué)到了很多,借此機(jī)會(huì),我對(duì)所有參與這個(gè)項(xiàng)目的同仁們說一聲:謝謝!
在本書編寫過程中,作者們得到了微軟亞洲研究院的許多同事的幫助,具體請(qǐng)參見“致謝”。
我們希望書中展現(xiàn)的題目和分析,能像海灘上美麗的石子和漂亮的貝殼那樣,反映出造化之美,編程之美。
鄒欣
2007年11月于北京
補(bǔ)記
一晃《編程之美》已經(jīng)出版10年了,在10年之后的今天,仍然有機(jī)會(huì)再次更新序言,唯有感謝和榮幸!
重讀自己10年前寫的文章(http://www.broadview.com.cn/33782),“簡化、持續(xù)挑戰(zhàn)、開拓”,這三個(gè)觀點(diǎn)依然在持續(xù)踐行……在過去的10年中,我已離開微軟亞洲研究院、創(chuàng)辦海豚瀏覽器、并購?fù)顺?,并即將開始第二次創(chuàng)業(yè)旅程。每一次重大決定,都代表著我的不斷挑戰(zhàn)和開拓。
回想起當(dāng)年“痛不欲生”地在鄒老師的“摧殘”之下,一次次迭代改進(jìn),似乎暗無天日、永遠(yuǎn)沒有盡頭……這段經(jīng)歷,已經(jīng)成為我用來實(shí)證“堅(jiān)持努力,做足過程,成果自現(xiàn)”的案例。
感謝讀者的認(rèn)可,感謝出版社和編輯的不懈努力,才有機(jī)會(huì)讓這本書再次出發(fā)!
祝每一位讀者都能挑戰(zhàn)自己的極限,開拓一片天地!
劉鐵鋒
2018年8月
致謝
《編程之美》這本書從構(gòu)思、編寫到最后的出版,得到了許多同事和朋友的幫助。在此作者們要特別感謝以下人士。
微軟亞洲研究院的多位同事熱情地與我們分享了他們覺得有意思的題目,他們分別是:鄧科峰、宋京民、宋江云、劉曉輝、趙爽、李勁宇、李愈勝和MattScott。
感謝微軟亞洲研究院技術(shù)創(chuàng)新組的同事梁瀟、殷秋豐,他們認(rèn)真審閱了所有的題目和解答,找出了不少bug1。技術(shù)創(chuàng)新組的另外幾位優(yōu)秀工程師李愈勝、魏顥、趙婧還幫助我們解決了書中的幾個(gè)難題。
感謝研究院的同事、著名技術(shù)作家潘愛民對(duì)我們的鼓勵(lì),他審閱了全部稿件,并且提出了不少意見。
本書的封面和插圖都出自研究院的實(shí)習(xí)生高霖之手,他在10余個(gè)構(gòu)圖都被否定的情況下,堅(jiān)持不懈,最后拿出了“九連環(huán)”的封面設(shè)計(jì),得到作者和出版方的一致認(rèn)同。
在本書寫作的過程中,作者們各自的“老板”——楊曉松、姚麒、田江森和劉激揚(yáng)都給予了不少支持,在此特表示感謝。
作者們的“老板的老板”,研究院前任院長,微軟公司資深副總裁沈向洋博士,現(xiàn)任院長洪小文博士對(duì)本書一直很關(guān)心和支持。沈向洋博士在百忙之中還親自為本書寫了序。
1本書殘留的bug都是作者們的責(zé)任。
微軟亞洲研究院市場部的金俊女士、葛瑜女士對(duì)本書的推廣提供了很大幫助。負(fù)責(zé)www.msra.cn網(wǎng)站的徐鵬、馬小寧、黃賢俊為本書設(shè)計(jì)了專欄。
感謝博文視點(diǎn)編輯團(tuán)隊(duì)。感謝在本書寫作前期與我們合作過的編輯方舟,在寫作后期參與合作的編輯徐定翔和李滟波。特別感謝自始至終和作者們一起工作的編輯周筠、楊繡國。他們和作者們一同構(gòu)思,耐心修改,沒有他們的不懈努力,以及細(xì)致的編輯和推廣工作,就沒有《編程之美》的成功上市。
作者
2007年11月
面試雜談
背景
每年從金秋九月起,校園里的廣告欄中、BBS上的招聘信息就逐漸多了起來。小飛是一名普通高校的應(yīng)屆計(jì)算機(jī)專業(yè)碩士畢業(yè)生,他勤奮好學(xué),成績中上,愛好廣泛??吹缴磉叺耐瑢W(xué)都在準(zhǔn)備精美的簡歷,參加各種各樣的招聘會(huì),筆試、面試,他也坐不住了。他在BBS上看了各式各樣的“面經(jīng)”,也擠過招聘會(huì)上的人潮,長嘆:“行路難,行路難,好工作,今安在?”
小飛從網(wǎng)上了解到了有關(guān)招聘的各種術(shù)語,他整理了一個(gè)列表:
名詞解釋
面經(jīng)面試的經(jīng)歷。
默拒投了簡歷,進(jìn)行了面試,但是公司從此再也沒有消息,詢問也不回答。
Offer公司給學(xué)生發(fā)的入職邀請(qǐng)。
群毆通常指一群人一起參加面試,一般以多對(duì)多的形式同時(shí)進(jìn)行,最后總是會(huì)有人被不幸淘汰,這一過程就叫做“群毆”。
聽霸凡校內(nèi)招聘演講會(huì)都出席旁聽的。
投霸凡公司招人都投簡歷的。
筆霸凡投出簡歷都能得到筆試機(jī)會(huì)的。
面霸凡參加筆試都有面試通知的。
巨無霸在招聘過程屢屢被拒、機(jī)會(huì)全無的,江湖人稱“巨無霸”!
霸王面“霸王面”指沒有獲得面試資格,卻主動(dòng)找用人單位,要求面試的人,源自吃飯不給錢的“霸王餐”,即“沒機(jī)會(huì)面,創(chuàng)造機(jī)會(huì)也要面”。
小飛獲得了一個(gè)在微軟亞洲研究院實(shí)習(xí)的機(jī)會(huì),在工作中認(rèn)識(shí)了一位有豐富招聘經(jīng)驗(yàn)的研發(fā)經(jīng)理。他對(duì)經(jīng)理進(jìn)行了非正式的采訪,希望能得到第一手的“內(nèi)幕”消息。下面就是小飛整理出來的問答。小飛的問題用Q來標(biāo)注,經(jīng)理的回答用A標(biāo)注。
典型面試
備注:在本文中,應(yīng)聘者(英文為:candidate,interviewee)指應(yīng)聘公司職位的學(xué)生或其他社會(huì)人士;面試者(英文為:interviewer)指公司里進(jìn)行招聘和面試的人員。
Q:經(jīng)理,您好。我就開門見山,能否分享一下當(dāng)年您第一次去面試的故事?
A:好,大學(xué)畢業(yè)后,我進(jìn)入了學(xué)?!爱a(chǎn)業(yè)辦”開的公司。有一天,一家美國公司(我們姑且叫它H公司)來招人,這是我的第一次面試。那個(gè)公司的代表和我寒暄之后,遞給我一道題目,題目大意是“寫一個(gè)函數(shù),返回一個(gè)數(shù)組中所有元素被第一個(gè)元素除的結(jié)果”。我當(dāng)時(shí)還問了一些問題,以確保理解無誤,所謂clarification是也。那位面試者簡單地解釋了一下,然后就在電腦上敲敲打打,也不理我了。我想這也不難,如何能顯示我的功力呢?于是我就把循環(huán)倒著寫for(i=n;i>=0;i--),因?yàn)槲耶?dāng)時(shí)看到一本UNIX書上是這么寫的。
代碼大概是這樣的:
voidDivArray(int*pArray,intsize)
{
for(inti=size-1;i>=0;i--)
{
pArray[i]/=pArray[0];
}
}
寫完之后,他看了看就問我,你為什么要這么寫循環(huán)?如果不這么寫可以嗎?我說,也可以呀。他問了兩遍,如果正著寫循環(huán)會(huì)出現(xiàn)什么問題。我想,能有啥問題?就把循環(huán)正著寫。噢,原來陷阱在這里!你知道這個(gè)陷阱是什么嗎?
Q:讓我想一想,知道了,如果循環(huán)從數(shù)組的第一個(gè)元素開始,并且不用其他變量的話,在循環(huán)的第一步,第一個(gè)元素就變成了1,然后再用它去除以其他元素,就不符合題目要求了。
A:對(duì),同時(shí)還有另一個(gè)陷阱——看看你是否會(huì)檢查除數(shù)為零的情況,以及對(duì)參數(shù)的檢查,等等。
Q:這不是很簡單嗎?一會(huì)兒就寫完了。
A:面試題大多數(shù)不難,但是通過觀察應(yīng)聘者寫程序的實(shí)際過程,面試者可以看出應(yīng)聘者的思維、分析、編程能力。面試者一般還會(huì)有后面幾招留著。比如,如果你要測試剛才寫的這個(gè)函數(shù),你的測試用例有多少?或者改變一些條件,能否做得出來?
Q:很多人說,面試是一個(gè)不公平的游戲,因?yàn)樾畔⒉粚?duì)稱。比如:面試者知道問題的答案,而應(yīng)聘者不知道,面試者知道今年公司要招幾個(gè)人,而應(yīng)聘者不知道。
A:但是,應(yīng)聘者手頭有幾個(gè)Offer,面試者也不知道。應(yīng)聘者是否喜歡公司提供的職位和薪酬,面試者也不知道。一方面,應(yīng)聘者在“求”職,另一方面,面試者也在“求”才。面試也是一個(gè)增進(jìn)雙方互相了解的有效途徑。
既然扯到了“信息不對(duì)稱”,我再講一個(gè)我的故事。當(dāng)年H公司來我校面試的時(shí)候,我對(duì)H公司的了解僅限于H公司捐贈(zèng)給我們計(jì)算機(jī)系的一個(gè)有些過時(shí)的小型機(jī)系統(tǒng)。我想,這個(gè)H公司是不是還有一些新東西?那時(shí)候還沒有互聯(lián)網(wǎng),于是我就托人借了幾本原版的Byte雜志來看,那是很厚的一本雜志,非常多的廣告,看了半天,夾在雜志中的小廣告掉了一地。我只看到雜志對(duì)H公司新出的一個(gè)桌面管理軟件“NewWave”的評(píng)價(jià),我琢磨了半天,大概搞懂了這是一個(gè)什么東西,市場上還有什么競爭對(duì)手,等等。
過了兩天,面試開始了,對(duì)方端坐在沙發(fā)里問“你對(duì)我們H公司有何了解?”我先說了H公司的小型機(jī)系統(tǒng),然后說,“Bytheway,我還了解了NewWave”。于是我把看到的東西復(fù)述了一下。沒想到對(duì)方坐直了身子,說這個(gè)NewWave就是他曾經(jīng)領(lǐng)導(dǎo)的項(xiàng)目。于是我就根據(jù)雜志上的描述問,“您怎么看某某競爭產(chǎn)品?”他很興奮地跟我談了NewWave是如何的領(lǐng)先,等等。后來我們又聊了不少相關(guān)的東西。
最后所有人面試結(jié)束之后,我們的領(lǐng)導(dǎo)說,美方覺得我很突出,知道不少東西,包括NewWave,口語也很好。領(lǐng)導(dǎo)就要求我給所有人都介紹一下NewWave,我只好把看到的東西又復(fù)述了一次。不久,H公司過來面試的另一個(gè)經(jīng)理不解地對(duì)我們領(lǐng)導(dǎo)說:“為什么你們這么多人知道NewWave?”
前不久,我在面試的時(shí)候問一位同學(xué),“你對(duì)微軟亞洲研究院有什么了解?”他說,“沒啥了解,昨天打電話叫我來面試,我就來了……”對(duì)于這樣的同學(xué),信息的確是非常不對(duì)稱,那他吃虧也是難免的了。還有一位在面試中發(fā)揮得很不好的同學(xué)跟我說,他特地沒有做任何準(zhǔn)備,因?yàn)樗腼@示他的“rawtalent”……
Q:關(guān)于Test(測試)的職位,有沒有一些典型的題目呢?
A:有哇,典型的題目如給你一支筆,讓你說說你如何測試——據(jù)說要測試12個(gè)方面;再比如判斷一個(gè)三角形的特性(直角、鈍角、銳角、等腰)——據(jù)說有20多個(gè)測試用例,這是要考察大家思考問題的全面程度和邏輯分析能力(測試用例見4.8節(jié)“三角形測試用例”)。
Q:網(wǎng)上有些非常流行的問題,都號(hào)稱是從大公司流傳出去的,是真的嗎?
A:對(duì),是有一些題目比較常見,例如“下水道的井蓋為什么是圓的”,還有一個(gè)問題一度非常流行,據(jù)說早期應(yīng)聘PM(ProgramManager程序經(jīng)理)職位的應(yīng)聘者大多曾碰到這個(gè)題目:
房間里有三盞燈,屋外有三個(gè)開關(guān),分別控制這三盞燈,只有進(jìn)入房間,才能看到哪一個(gè)電燈是亮的。請(qǐng)問如何只進(jìn)入房間一次,就能指明哪一個(gè)開關(guān)控制哪一個(gè)燈?傳說在晚上,微軟一些會(huì)議室的燈忽明忽滅,就是一些還沒有搞懂的同事們在實(shí)地鉆研。
Q:我大概了解了Dev/PM/Test這三種工作的典型面試題,那么這些題目的答案別人都知道了,還怎么面試呢?
A:對(duì),會(huì)有不少題目流傳出去,這本來無妨。但是一些人知道答案之后,就開始背誦,或者原封不動(dòng)地拿它去面試應(yīng)聘者,忘了“知道答案”和“能做一個(gè)好員工”的關(guān)系。知道了題目的答案,就能做一個(gè)好的開發(fā)人員、項(xiàng)目經(jīng)理,或者銷售經(jīng)理嗎?一個(gè)極端的情況會(huì)是:公司里每一個(gè)人都知道哪盞燈是由哪一個(gè)開關(guān)控制的,如何測試三角形的類別等,但是這個(gè)公司真能從此開發(fā)出更好的軟件嗎?
一句話:關(guān)鍵不在于答案,而在于思考問題的方法,這也是我們沒有“題庫”的原因。
研發(fā)職位的選擇
Q:微軟及很多其他軟件公司都有不少研發(fā)職位,名稱不盡相同,而且還是縮寫,能不能講解一下?
A:不少同學(xué)對(duì)微軟公司的各種研發(fā)職位(Discipline)并不太了解,我們在面試進(jìn)行到一半的時(shí)候,經(jīng)常發(fā)現(xiàn)一個(gè)應(yīng)聘者其實(shí)更適合做其他類型的工作。當(dāng)然這時(shí)我們可以調(diào)換面試的方向,但是對(duì)應(yīng)聘者來說總不是一件好事。我剛好在BBS上看到了一篇文章,這篇文章從個(gè)人的角度出發(fā),非正式地講了R&D各個(gè)方向的特點(diǎn),雖然并非完全正確,介紹也不一定全面,但是我們不妨看看。
aR:AssistantResearcher,助理研究員,也可以叫研究員助理,主要在“R&D”的“R”這一端,工作是讀論文,提想法,被否決后再提想法(如此反復(fù)N次),趕在截止時(shí)間之前提交論文。aR的想法得到初步驗(yàn)證之后,還要跟其他部門推銷自己的想法,爭取把想法變成產(chǎn)品。aR的樂趣是能在一個(gè)領(lǐng)域中深入研究,發(fā)表論文,申請(qǐng)專利,每個(gè)專利申請(qǐng)(無論是否批準(zhǔn))都能讓自己得一塊黑色立方體石頭(如圖1所示)。好多人的桌面上堆了不少石頭,好像他們沒什么苦惱。aR有時(shí)做的事情和RSDE差不多。aR以后會(huì)成長為AssociateResearcher(副研究員)、Researcher(研究員)、高級(jí)研究員,等等。總之,最后就成了大家小時(shí)候特別夢想做的“科學(xué)家”。
圖1申請(qǐng)專利得到的石頭
Dev:正式的名稱叫SDE(SoftwareDevelopmentEngineer),這個(gè)職位和aR相對(duì),是在“R&D”的“D”這一端。他們在一個(gè)產(chǎn)品團(tuán)隊(duì)中,按照嚴(yán)格的流程開發(fā)產(chǎn)品。MS的一個(gè)產(chǎn)品發(fā)布之后,所有成員會(huì)得到一小塊鐵皮(學(xué)名叫“Ship-itAward”,如圖2所示),上面寫著產(chǎn)品的名字和發(fā)布日期,資深的Dev會(huì)收集到不少,他們會(huì)認(rèn)真地把這些小鐵皮整齊地貼起來,擺在辦公桌最高的位置上。Dev的樂不少,這里就不列舉了。但是苦也有不少,比如產(chǎn)品的周期有時(shí)非常長,過程定義得非常完備(有時(shí)不免覺得太完備了);比如要維護(hù)老版本;比如要用比較成熟的技術(shù),而不是用最時(shí)髦的東西來開發(fā)產(chǎn)品。另外,Dev要負(fù)責(zé)一個(gè)或幾個(gè)模塊,這些模塊不一定和最終用戶打交道,未必是整個(gè)產(chǎn)品的核心模塊。做一個(gè)好的Dev要生活在代碼中,對(duì)代碼和平臺(tái)的各種細(xì)節(jié)要非常熟悉,掌握非常底層的技術(shù),有些人以此為樂,有些人則未必。Dev的職業(yè)發(fā)展道路很多,如果只想鉆研技術(shù),不樂意做很多管理工作,Dev可以成為非常高級(jí)的工程師,直到杰出工程師(DistinguishedEngineer)。當(dāng)然,Dev也可以成長為開發(fā)主管(DevLead),開發(fā)總經(jīng)理(DevManager),等等。
Test:正式名稱是SoftwareDevelopmentEngineerinTes(tSDET),簡稱為Test或SDET(讀作S-DET)。這個(gè)職位看似沒有Dev和aR酷,但是很有前途,首先中國的同學(xué)由于種種原因(不了解,看不起,做不來)不太愿意做這種工作,因此,公司找人非常急迫,相對(duì)容易進(jìn)入。這一職位所謂的苦(也反映了一些人的偏見和誤解)從傳統(tǒng)意義上說,SDET得等著上家(PM/Dev)給你東西,你才能“測試”。然而,現(xiàn)代軟件工程要求TEST從項(xiàng)目一開始就積極參與項(xiàng)目的規(guī)劃,了解客戶需求,制定測試計(jì)劃,設(shè)計(jì)測試架構(gòu),實(shí)現(xiàn)測試自動(dòng)化,等等。事實(shí)上這些都是開發(fā)的工作,所以他們叫SDEinTest。而且SDET能更深入地了解產(chǎn)品的各個(gè)模塊是如何合作,如何在實(shí)際情況下被用戶使用的。從代碼之外理解程序,這是測試之樂。那種“產(chǎn)品發(fā)布前一個(gè)星期讓測試人員來測一下”的情況在微軟是不會(huì)發(fā)生的。而做軟件的功能測試,并報(bào)告bug的人員被稱為SoftwareTestEngineer(STE)。用足球比賽作比喻,Test就是最后一道防線,如果你沒有防守好bug,bug就會(huì)跑到顧客那里去,因此Test工作非常重要。Test的職業(yè)發(fā)展和Dev類似,一直到有專門管Test工作的副總裁(VP)。
PM:這恐怕是外界誤解最多的行當(dāng),簡而言之,ProgramManager(程序經(jīng)理)做的是開發(fā)和測試之外的所有事情。有些同學(xué)會(huì)問“我寫程序都不用測試,那么除了開發(fā)和測試之外還有什么事兒?”在公司里開發(fā)商業(yè)軟件可沒有那么簡單,比如有10個(gè)Dev和5個(gè)Test要在一起開發(fā)下一個(gè)版本的MSNMessenger,那我們到底要做多長時(shí)間才能完成?什么事情先做,什么事情后做?項(xiàng)目進(jìn)行到一半的時(shí)候,領(lǐng)導(dǎo)說我們改名叫LiveMessenger吧,那這一改名意味著什么?如何調(diào)整進(jìn)度?最后還剩下兩個(gè)月的時(shí)候,看起來我們的確完不成全部任務(wù),那要怎么辦?你又不是Dev和Test的老板,他們憑什么聽你的呢?這也是PM的苦。PM的樂看起來在于,他們可以全盤掌控一個(gè)產(chǎn)品,廣泛了解一個(gè)行業(yè),和用戶打交道,代表團(tuán)隊(duì)出席各種會(huì)議,在公司內(nèi)部的曝光度也比較高。Dev/Test/PM在產(chǎn)品開發(fā)中各負(fù)其責(zé),互相協(xié)助,為共同的目標(biāo)努力。產(chǎn)品成功發(fā)布之后,他們都會(huì)得到Ship-it小鐵片兒。
RSDE:好了,我們最后看看RSDE(ResearchSDE),這是微軟亞洲研究院一個(gè)比較特殊的隊(duì)伍。RSDE的樂趣在于可以接觸到各種最新的研究成果,并用它來解決挑戰(zhàn)性的問題。RSDE的苦在于項(xiàng)目都是V0.1版,而且做得成功的項(xiàng)目大多數(shù)會(huì)轉(zhuǎn)化(Transfer)到產(chǎn)品組中,由別人推向市場。RSDE在和研究部門合作的時(shí)候,就要負(fù)起aR和PM(甚至Test)的責(zé)任。剛開始,RSDE既沒有R的黑石頭,又沒有D的Ship-it小鐵片。RSDE參與的項(xiàng)目有比較大的風(fēng)險(xiǎn),經(jīng)常會(huì)不如預(yù)期,或者會(huì)失?。ㄟ@也是科學(xué)研究的特點(diǎn))。項(xiàng)目失敗后,RSDE掩埋了項(xiàng)目的尸體,擦干自己的血跡,又得找新的領(lǐng)域和新的項(xiàng)目。RSDE還有“創(chuàng)新”的任務(wù),這個(gè)詞人人都會(huì)說,但是要做出來就不是那么容易了,全世界有這么多人在琢磨計(jì)算機(jī),你能在什么地方做得比其他任何人都更進(jìn)一步呢?這也是RSDE的樂趣吧。有些同學(xué)能力很強(qiáng),興趣廣泛,但是一時(shí)也拿不準(zhǔn)自己要深入研究哪一個(gè)領(lǐng)域,這時(shí)不妨來做RSDE。做得好的RSDE,他們的工作成果推進(jìn)了研究,又走向了市場,這樣就既可以拿到黑石頭,又可以拿到Ship-it小鐵片兒。我個(gè)人認(rèn)為能有機(jī)會(huì)做RSDE是很令人自豪的事情,相當(dāng)于參軍當(dāng)上了特種兵,很好,很強(qiáng)大。
Q:看起來真是眼花繚亂……
A:總之,每類職位都很重要,都有存在的理由,都有不錯(cuò)的發(fā)展前景,都有自己的苦和樂。微軟很大,微軟中國研發(fā)集團(tuán)(CRD)內(nèi)部有很多不同的機(jī)構(gòu)和部門,這也意味著有許多機(jī)會(huì),讓有能力的同學(xué)嘗試aR、Dev、Test、RSDE、PM的職位。
求職攻略之筆試答疑
微軟中國每年都會(huì)舉行幾次技術(shù)筆試,2006年的筆試結(jié)束后,主持筆試的經(jīng)理回答了學(xué)生提出的很多問題,小飛把這些問答整理如下(下文的“我們”指的是策劃并批改試卷的技術(shù)人員)。
Q:筆試的難度是不是有些太高了?
A:從分?jǐn)?shù)看,參加筆試的同學(xué)普遍得分較低,這說明不少同學(xué)大大低估了試題的難度,或者說低估了我們對(duì)答案的期望。一言以蔽之,我們希望看到接近“職業(yè)”水平的答案。
Q:為什么有些人筆試得了負(fù)分呢?
A:這是因?yàn)槲覀儗?duì)選擇題采用了“不做得零分,做錯(cuò)倒扣分”的判卷策略。公司的大部分同事們認(rèn)為倒扣分是比較有效的甄別方法。而且我們盡量避免非常偏僻的知識(shí)點(diǎn)和有爭議的答案。
Q:你們是不是只選取了其中一些卷子判分?
A:我們對(duì)大多數(shù)的卷子全部判分,每個(gè)部門都會(huì)抽調(diào)不少工程師加班判卷,同學(xué)們寫的每一行文字都會(huì)被看到,對(duì)于一些很難讀通的程序,我們還會(huì)一起分析,不會(huì)因?yàn)橐谎劭床欢徒o個(gè)0分。對(duì)于單項(xiàng)題答得非常好的同學(xué),我們會(huì)特別標(biāo)記。像這樣的無絕對(duì)標(biāo)準(zhǔn)答案的試卷,判卷是相當(dāng)累人的活兒。至于是否全部判分,會(huì)不會(huì)把所有分?jǐn)?shù)都全部告知考生,這由各個(gè)部門決定。
Q:筆試題目全是英語,這究竟是考英語還是考技術(shù)?為什么不用中文出題呢?
A:微軟公司的工作語言是英語,公司在中國的各個(gè)部門(研究院,工程院等)都是如此。我們注意在考卷中不用很生僻的詞匯,以免影響同學(xué)們的發(fā)揮。在有些題目中,我們還增加了一些注釋,并且有一些小題目注明可以用中文回答。有些考生英語寫得不錯(cuò),起承轉(zhuǎn)合,很像GRE/TOEFL的作文,可惜只有結(jié)構(gòu),實(shí)質(zhì)內(nèi)容不多,得分也不多。
Q:筆試的題量為什么這么大?很多人根本沒有足夠的時(shí)間做完!
A:每次開發(fā)新的軟件,我們的時(shí)間也不夠,這就是做軟件項(xiàng)目的特點(diǎn)。我們看到很多同學(xué)有些大題一個(gè)字也沒有寫,感到很可惜。其實(shí),如果時(shí)間安排得當(dāng),至少應(yīng)該每一道題試著回答一些基本問題。我們的很多監(jiān)考人員也會(huì)提示大家注意時(shí)間分配。況且,如何在有壓力的情況下最有效地分配時(shí)間,這也是一個(gè)人非常重要的能力。
Q:我覺得我回答得不錯(cuò),每道題目都差不多做出來了,為什么分?jǐn)?shù)很低?
A:有必要解釋一下,我們的評(píng)分標(biāo)準(zhǔn)可能和學(xué)校里不一樣。比如說有一道程序改錯(cuò)題,正確的回答要糾正全部5個(gè)錯(cuò)誤。我們的評(píng)分標(biāo)準(zhǔn)是:
如果5個(gè)錯(cuò)誤全部改正,滿分。
如果找到4個(gè)錯(cuò)誤,只能得一半分。
如果只找到3個(gè)錯(cuò)誤,得1/3分。
如果只找到2個(gè)錯(cuò)誤,得1/4分。
我們的評(píng)分標(biāo)準(zhǔn)要拉開“滿分”和其他“差不多”的答案的距離。如果你每一道題目都“差不多”,那你的總分將是全部分?jǐn)?shù)的一半以下。
Q:我會(huì)C#、VB.NET,為什么微軟的筆試偏偏要求用C語言答題?
A:對(duì)于微軟的工程師來說,C語言是基本功。
Q:為什么我投一個(gè)技術(shù)支持的職位也要用這么難的題來折磨我?
A:因?yàn)橥锻粋€(gè)位置的人太多了。大家的簡歷都很優(yōu)秀,所以只好用筆試來進(jìn)行一次篩選。
Q:考題包羅萬象,甚至包括我不熟悉的知識(shí)領(lǐng)域,難道微軟需要的是“全才”嗎?
A:我們的考試是想考察在實(shí)戰(zhàn)中的基本知識(shí)和基本技能??荚嚥皇侨f能的,筆試總分很高的同學(xué),也有在面試中表現(xiàn)得很不如人意的。如果有人在某些題目中有優(yōu)異的表現(xiàn),即使總分不高,我們也會(huì)考慮的。
Q:我申請(qǐng)的職位比較特別,自己的專長沒有能夠顯露,通過這樣的一個(gè)考試不能真實(shí)反映出個(gè)人特點(diǎn),有什么辦法呢?
A:這一點(diǎn)我們同意,我們考試的主要目的是把所有考生中的優(yōu)秀學(xué)生選出,并安排他們進(jìn)入下一輪。至于在某一方面有專長的同學(xué),他們應(yīng)該直接和有關(guān)部門聯(lián)系,或者我們的有關(guān)部門應(yīng)該直接聯(lián)系這些同學(xué),例如在某些研究領(lǐng)域發(fā)表過高水平文章的同學(xué)。
Q:筆試通不通過是不是還有些運(yùn)氣成分在里面?
A:當(dāng)然有,大家也都知道,一次筆試不能夠反映一個(gè)人完全的、真實(shí)的水平。同學(xué)們寒窗十多年,經(jīng)歷了無數(shù)閉卷考試,作為一個(gè)過來人,我覺得職業(yè)生涯和人生不是一次兩小時(shí)的閉卷考試能決定的,希望這樣的筆試是大家人生中倒數(shù)第幾次的閉卷考試之一。人生是更加開闊、充滿更多變數(shù)的開卷考試。不管是開卷、閉卷,都是一分耕耘,一分收獲。
求職攻略之決勝面試
經(jīng)歷了筆試、電話面試之后,許多同學(xué)接到了微軟公司的邀請(qǐng)——來公司進(jìn)行面對(duì)面的考察。
Q:既然微軟這么重視實(shí)際的能力,每一個(gè)人都會(huì)經(jīng)過幾輪面試的考察,在學(xué)校時(shí)的學(xué)習(xí)成績是否就不重要了?
A:也不一定。同樣,關(guān)鍵不是在于靜態(tài)的成績,而是通過成績了解成績?nèi)〉玫倪^程,了解一個(gè)人的特質(zhì)。曾經(jīng)有一個(gè)面試者詳細(xì)詢問了一個(gè)應(yīng)聘者在學(xué)校里的各種表現(xiàn),最后在面試報(bào)告中寫道:“我詳細(xì)詢問了她從中學(xué)到大學(xué)、研究生的情況,她在學(xué)校里沒有一科的成績是非常拔尖的,也沒有太壞的成績。她從來沒有做過出格的事情,如逃課、自己寫一些程序、打工等。我在她身上看不到對(duì)卓越的追求,也沒有看到她有實(shí)現(xiàn)自身價(jià)值的想法……所以我認(rèn)為本公司不應(yīng)該雇用她。”
Q:雖然我沒什么想法,但我覺得微軟太有名了,我也不用多想了,我就是要進(jìn)這樣的公司,你叫我干什么都可以!
A:我們恰恰不太需要沒什么想法的人,這也許和企業(yè)文化有一些關(guān)系。在中國一些企業(yè)的文化中,往往是領(lǐng)導(dǎo)安排你做什么,你就做什么。在微軟,我們認(rèn)為每個(gè)人都是獨(dú)立的個(gè)體,我們希望雇員能夠“在其位,謀其事”,同時(shí)能考慮到自己三五年后的發(fā)展,并且能自己制定計(jì)劃去實(shí)現(xiàn)事業(yè)目標(biāo),這是公司的文化。
Q:面試的時(shí)候要穿什么衣服?
A:在沒有特別規(guī)定的情況下,穿你覺得舒服的衣服就行。我們看到不少應(yīng)聘者穿著明顯不舒服的西裝來面試,這樣不會(huì)給自己加分,當(dāng)然也不會(huì)減分。但是自己太不舒服,會(huì)影響發(fā)揮。
Q:不舒服沒關(guān)系,只要你們公司覺得舒服,我就舒服。
A:我們剛剛說過,微軟更看重的是“你”是否覺得舒服,“你”要做什么,以及“你”有什么創(chuàng)意。
Q:有沒有在面試中作弊的呢?
A:說起來,還真有。有一天,我在微軟外面的一個(gè)中餐館吃晚飯,這個(gè)餐館很小,大家坐得比較擠,我不得不聽到鄰座的高談闊論。原來是一個(gè)剛剛在微軟面試過的學(xué)生在和幾個(gè)同學(xué)聚餐,他很興奮地談著當(dāng)天面試的經(jīng)歷——
“他問了那個(gè)在鏈表中找回路的問題了嗎?”
“問了,我假裝思考了一下,稍稍試了試別的解法,然后就把你說的那個(gè)解法講了出來……”
對(duì)于這種人,我們內(nèi)部叫“Poser”——擺姿勢的人。如果你在面試時(shí)恰好被問到了一道知道答案的題目,你可以向面試者提出來。擺姿勢的話,萬一被戳破,會(huì)比較難堪。既然你已經(jīng)花了時(shí)間了解解法,不妨和面試者深入地探討一下。
Q:大家發(fā)表在BBS上的面經(jīng),公司看不看?
A:公司的一些員工也在看,有一次,HR在某BBS上看到一篇很詳細(xì)的面經(jīng),文筆生動(dòng),此文章從他看到HRJJ的那一刻寫起,直到做了什么題目、怎么做的、說了什么話、最后如何走出了公司大門他都做了詳細(xì)記錄。從描述上看,我們很容易就能推斷出這是哪一位應(yīng)聘者。他似乎發(fā)揮得很不錯(cuò),可惜他忘了在開始面試的時(shí)候,HRJJ給他講的,他也簽了自己大名的保密協(xié)定。對(duì)于這樣的同學(xué),我們只能遺憾地放棄了。
Q:整個(gè)面試過程中我覺得自己答得很不錯(cuò)了,面試者指出的問題我大部分都能回答出來,為什么我還是沒有通過?
A:一個(gè)原因是有比你更厲害的應(yīng)聘者,另一個(gè)大家容易忽略的原因是,應(yīng)聘者和面試者對(duì)于“不錯(cuò)”的定義是不一樣的(參見對(duì)筆試問題的回答)。
對(duì)于在校學(xué)生,覺得自己寫的程序,涂涂改改,大概邏輯能通過就行了,面試者指出的問題能答出來一些就行了。但是對(duì)于將來的公司員工,我們要考察:程序設(shè)計(jì)的思路如何?編程風(fēng)格如何?細(xì)節(jié)是否考慮到?程序是否有內(nèi)存泄露?是否采用了最優(yōu)算法?是否能對(duì)程序進(jìn)行修改以滿足不斷變化的需求?是否能舉一反三?另外,除了專業(yè)技巧,我們在面試中還會(huì)考察應(yīng)聘者的職業(yè)技巧(professionalskills,也有人稱為softskills)。這個(gè)人的交流能力、合作能力如何,對(duì)自己的評(píng)價(jià)和期望是什么?在有壓力的情況下,能否發(fā)揮水平?是否追求卓越?這些“非技術(shù)”的因素相當(dāng)重要。
Q:很多有名的企業(yè)面試只要求談?wù)劸涂梢粤?,為什么微軟一定要寫代碼?
A:我們的絕大部分工作,都是通過代碼而來,很大一部分的問題,也是由代碼所導(dǎo)致的。所以我們不能不重視寫代碼這件事。當(dāng)然有很多其他工作不需要寫代碼,但這不在我們的討論范圍內(nèi)。
…………
完整前言請(qǐng)見本書。
更多建議: