微軟面試雜談

學識都 人氣:1.27W

(摘自《編程之美微軟技術面試心得》)

微軟面試雜談

背景

每年從金秋九月起,校園裏的廣告欄中、BBS上的招聘信息就逐漸多了起來。小飛是一名普通高校的應屆計算機碩士畢業生,他勤奮好學、成績中上,愛好廣泛。他看到身邊的同學都在準備精美的簡歷,參加各種各樣的招聘會,筆試、面試,他也坐不住了。他在BBS上看了各式各樣的“面經”,也擠過招聘會上的人潮,他長嘆:“行路難,行路難,好工作,今安在?”

小飛從網上了解到了有關招聘的各種術語,他整理了一個列表:

名詞

解釋

面經

面試的經歷。

默拒

投了簡歷,進行了面試,但是公司從此再也沒有消息,詢問也不回答。

Offer

公司給學生髮的入職邀請。

羣毆

通常指一羣人一起參加面試,一般以多對多的形式同時進行,最後總是會有人被不幸淘汰,這一過程就叫做“羣毆”。

聽霸

凡校內招聘演講會都出席旁聽的。

投霸

凡公司招人都投簡歷的。

筆霸

凡投出簡歷都能得到筆試機會的。

麪霸

凡參加筆試都有面試通知的。

巨無霸

在招聘過程屢屢被拒、機會全無的,江湖人稱“巨無霸”!

霸王面

“霸王面”指沒有獲得面試資格,卻主動找用人單位,要求面試的人,源自吃飯不給錢的“霸王餐”,即“沒機會面,創造機會也要面”。

小飛獲得了一個在微軟亞洲研究院實習的機會,在工作中認識了一位有豐富招聘經驗的研發經理。他對經理進行了非正式的採訪,希望能得到第一手的“內幕”消息。下面就是小飛整理出來的問答。小飛的問題用Q來標註;經理的回答用A標註。

典型面試

備註:在本文中,應聘者(英文爲:candidate, interviewee)指應聘公司職位的學生,或其他社會人士;面試者(英文爲:interviewer)指公司裏進行招聘和麪試的人員

Q:經理,您好。我就開門見山,您能否分享一下當年您第一次去面試的故事?

A:好,大學畢業後,我進入了學校“產業辦”開的公司。有一天,一家美國公司(我們姑且叫它H公司)要來招人,這是我的第一次面試。那個公司的代表和我寒暄之後,遞給我一道題目,題目大意是“寫一個函數,返回一個數組中所有元素被第一個元素除的結果”。我當時還問了一些問題,以確保理解無誤,所謂 clarification是也。那位面試者簡單地解釋了一下,然後就在電腦上敲敲打打,也不理我了。我想這也不難,如何能顯示我的功力呢?於是我就把循環倒着寫 for (i=n; i>=0; i--),因爲我當時看到一本Unix書上是這麼寫的。

代碼大概是這樣的:

void DivArray(int * pArray, int size)

{

for (int i = size-1; i >= 0; i--)

{

pArray /= pArray[0];

}

}

寫完之後,他看了看就問我,你爲什麼要這麼寫循環?如果不這麼寫可以麼?我說,也可以呀。他問了兩遍,如果正着寫循環會出現什麼問題。我想,能有啥問題?就把循環正着寫。噢,原來陷阱在這裏!你知道這個陷阱是什麼嗎?

Q:讓我想一想,知道了,如果循環從數組的第一個元素開始,並且不用其他變量的話,在循環的第一步,第一個元素就變成了1,然後再用它去除以其他元素,就不符合題目要求了。

A:對,同時還有另一個陷阱看看你是否會檢查除數爲零的情況,以及對參數的檢查,等等。

Q:這不是很簡單麼?一會兒就寫完了。

A: 面試題大多數不難,但是通過觀察應聘者寫程序的實際過程,面試者可以看出應聘者的思維、分析、編程能力。面試者一般還會有後面幾招留着。比如,如果你要測試剛纔寫的這個函數,你的測試用例有多少?或者改變一些條件,能否做得出來?

Q:很多人說,面試是一個不公平的遊戲,因爲信息不對稱。比如:面試者知道問題的答案,而應聘者不知道,面試者知道今年公司要招幾個人,而應聘者不知道。

A:但是,應聘者手頭有幾個Offer,面試者也不知道。應聘者是否喜歡公司提供的職位和薪酬,面試者也不知道。一方面,應聘者在“求”職,另一方面,面試者也在“求”才。面試也是一個增進雙方互相瞭解的有效途徑。

既然扯到了“信息不對稱”,我再講一個我的故事,當年H公司來我校面試的時候,我對H公司的瞭解僅限於H公司捐贈給我們計算機系的一個有些過時的小型機系統。我想,這個H公司是不是還有一些新東西?那時候還沒有互聯網,於是我就託人借了幾本原版的Byte雜誌來看,這是很厚的一本雜誌,非常多的廣告,看了半天,夾在雜誌中的小廣告掉了一地。我只看到雜誌對H公司新出的一個桌面管理軟件“NewWave”的評價,我琢磨了半天,大概搞懂了這是一個什麼東西,市場上還有什麼競爭對手,等等。

過了兩天,面試開始了,對方端坐在沙發裏問“你對我們H公司有何瞭解?”我先說了H公司的小型機系統,然後說,“By the way,我還了解了NewWave”。於是我把看到的東西複述了一下。沒想到對方坐直了身子,說這個NewWave就是他曾經領導的項目。於是我就根據雜誌上的描述問,“您怎麼看某某競爭產品?”他很興奮地跟我談了NewWave 是如何的領先,云云。後來我們又聊了不少相關的東西。

最後所有人面試結束之後,我們的領導說,美方覺得我很突出,知道不少東西,包括NewWave,口語也很好。領導就要求我給所有人都介紹一下 NewWave,我只好把看到的東西又複述了一次。不久,H公司過來面試的另一個經理不解地對我們領導說,爲什麼你們這麼多人知道NewWave?

前 不久,我在面試的.時候問一位同學,“你對微軟亞洲研究院有什麼瞭解?”他說,“沒啥瞭解,昨天打電話叫我來面試,我就來了……”對於這樣的同學,信息的確是非常不對稱,那他吃虧也是難免的了。還有一位在面試中發揮得很不好的同學跟我說,他特地沒有做任何準備,因爲他想顯示他的“raw talent”……

Q:關於Test(測試)的職位,有沒有一些典型的題目呢?

A:有哇,典型的題目如給你一支筆,讓你說說你如何測試據說要測試12個方面;再比如判斷一個三角形的特性(直角、鈍角、銳角、等腰)據說有20多個測試用例,這是要考察大家思考問題的全面程度和邏輯分析能力(測試用例見4.8節“三角形測試用例”)。

Q:網上有些非常流行的問題,都號稱是從大公司流傳出去的,是真的麼?

A:對,是有一些題目比較常見,例如“下水道的井蓋爲什麼是圓的”,還有一個問題一度非常流行,據說早期面試PM(Program Manager程序經理)職位的應聘者大多曾碰到這個題目:

房間裏有三盞燈,屋外有三個開關,分別控制這三盞燈,只有進入房間,才能看到哪一個電燈是亮的。請問如何只進入房間一次,就能指明哪一個開關控制哪一個燈?

傳說在晚上,微軟一些會議室的燈忽明忽滅,那就是一些還沒有搞懂的同事們在實地鑽研。

Q:我大概瞭解了Dev/PM/Test 這三種工作的典型面試題,那麼這些題目的答案別人都知道了,還怎麼面試呢?

A: 對,會有不少題目流傳出去,這本來無妨。但是一些人知道答案之後,就開始背誦,或者原封不動地拿它去面試應聘者,忘了“知道答案”和“能做一個好員工”的關係。大家都知道了答案,就能做一個好的開發人員、項目經理,或者銷售經理麼?一個極端情況會是:公司裏每一個人都知道哪盞燈是由哪一個開關控制的,如何 測試三角形的類別等,但是這個公司真能從此開發出更好的軟件麼?

一句話:關鍵不在於答案,而在於思考問題的方法,這也是我們沒有“題庫”的原因。