美國cs面試經(jīng)驗分享
美國cs面試經(jīng)驗分享(一)
過(guò)去的一年多里,參加了一些面試,雖然面過(guò)的公司不多,但都從頭一直走到尾。畢竟自己也是花了大量的時(shí)間和精力在這一場(chǎng)場(chǎng)的面試里。所以,就絮叨下自己的一些經(jīng)驗,希望能給在美國找實(shí)習找工作的同學(xué)們提供一點(diǎn)點(diǎn)幫助。
開(kāi)始前的一些說(shuō)明:
1. 筆者只是一介小本科,雖然留了學(xué),但是留了級,學(xué)識淺薄,目光短淺,文章若有不恰之處,懇請各位大牛不吝指正!
2. 筆者面試的崗位均為Software Engineer,俗稱(chēng)“程序猿”。如果讀者是非CS專(zhuān)業(yè)或沒(méi)有找此類(lèi)工作的需求,請ctrl + w。本文更多的傾向于CS技術(shù)層面,關(guān)于面試儀表妝容禮儀等等的其他問(wèn)題,請出門(mén)右拐。
3. 鑒于保密協(xié)議,本文只談面試準備材料和方法,不涉及任何具體面試題。(當然,你如果單獨請筆者吃飯,可以考慮)
4. 本文涉及的內容更多地適用于在美國本土的技術(shù)面試。美國的面試更加正式規范,國內同學(xué)可做適當參考。
5. 個(gè)人認為,面試的成功 = 60%的平時(shí)積累 + 30%的考前準備 + 10%的其他因素(如自信、談吐)。所以,面試的準備對于我們這類(lèi)凡人來(lái)說(shuō),異常重要;靠平時(shí)積累就能虐了面試官的大牛,不在本文考慮之列。
面試的公司
公司
時(shí)間
崗位
地點(diǎn)
過(guò)程
百度
2010年
實(shí)習
中關(guān)村總部
3輪onsite
Microsoft
2011上半年
實(shí)習
西雅圖總部
1輪on-campus + 4輪onsite
Bloomberg
2011上半年
實(shí)習
紐約總部
1輪網(wǎng)上答題 + 1輪電話(huà)面試 + 3輪onsite
2011下半年
全職
硅谷總部
2輪電話(huà)面試 + 5輪onsite
筆者運氣較好,除了在微軟敗在了最后一輪大manager的石榴裙下,其他三家都順利拿到了offer:先后在百度和Bloomberg實(shí)習,并將于2012年正式加入Google工作。
下面將分Behavior Question和Technical Question分別介紹個(gè)人的面試準備技巧:
I. Behavior Question
這類(lèi)問(wèn)題的特點(diǎn)是,易準備,好回答,必出現。所以一定要花幾個(gè)小時(shí)好好準備,寫(xiě)寫(xiě)提綱,面試前對著(zhù)鏡子說(shuō)幾次。
a. HR Question
最無(wú)聊的一類(lèi)問(wèn)題,比如“why Microsoft?”、“what’s your plan in 5 years? ” 一般為HR所喜歡。
推薦準備材料:http://hrinterviews.blogspot.com/。把這64道題刷一下,所有的HR問(wèn)題都不會(huì )是問(wèn)題了。準備的方法類(lèi)似于托?谡Z(yǔ),準備幾個(gè)段子,反復用,就很充分了。
另外,回答一定要真誠。比如,如果被問(wèn)到“what’s your weakness?”,你如果回答:我太追求完美太熱愛(ài)工作巴拉巴拉——太過(guò)時(shí)太惡心人了吧,親!
b. Talk about your project
一般會(huì )在面試的開(kāi)始被問(wèn)及,必然會(huì )被問(wèn)到的題目之一。把簡(jiǎn)歷上的項目好好地闡述,輔以畫(huà)圖更佳。一些經(jīng)典的Follow up是:What is the most challenging part? What will you do if you have opportunities to improve it?
百分一萬(wàn)的準備好這些問(wèn)題!面試官通常會(huì )刨根問(wèn)底。答的吭吭哧哧,幾乎是不誠信的表現。
c. Question for interviewer
一般會(huì )在面試的最后十分鐘里,面試官會(huì )請你提出問(wèn)題。這是你展現對公司的激情、個(gè)人的興趣、和面試官套近乎等等等等的大好機會(huì )。不要說(shuō)“no”或者僅僅問(wèn)“啥時(shí)知道結果啊,哥們”這類(lèi)的問(wèn)題。至少準備五個(gè)有深度的問(wèn)題。
個(gè)人經(jīng)驗來(lái)說(shuō),最好的方法還是隨機應變,根據之前面試的情況來(lái)合理提問(wèn)。比如,我在Google的一次面試里,面試官無(wú)意間提及他在設計一門(mén)新的編程語(yǔ)言。面試最后,我就滿(mǎn)臉好奇地說(shuō):“talk about your language, please”。然后我和他就編程語(yǔ)言的設計各方面進(jìn)行了一些小討論,他最后離開(kāi)時(shí)萬(wàn)分興奮。就這樣,對面試官的尊重,自身興趣和能力的展現,對技術(shù)的激情——一脈相承,水到渠成。
II. Technical Question
技術(shù)面試的最核心部分。
下面是一些筆者使用過(guò)的材料(請適當支持正版):
Programming Interviews Exposed
入門(mén)級書(shū)籍,可以了解一些基本概念。
Cracking the Coding Interview
中級書(shū)籍,經(jīng)典必備教材,重點(diǎn)推薦,重中之重!從頭到尾我做過(guò)五次。
Hacking a Google Interview
MIT的一門(mén)課程,教學(xué)Handout可作為中級題目練習。
mitbbs的JobHunt板塊
資料很多,水帖更多,可以尋找到很多戰友和第一手的面經(jīng)?梢灾攸c(diǎn)學(xué)習里面的精華貼。
http://www.sureinterview.com/
中高級的算法題。
http://www.leetcode.com/
高級算法題,難度偏難,可做適當了解。個(gè)人認為,如果不是面Google,里面的題目被面到的可能性不高。
Topcoder
知名的編程練習網(wǎng)站,有一些相關(guān)的材料和教材很經(jīng)典。
面經(jīng)來(lái)源:
mitbbs的JobHunt板塊,Glassdoor,CareerCup
C++ FAQ
非常有名的高級C++語(yǔ)言學(xué)習網(wǎng)站?邢聛(lái)會(huì )很有幫助。主要的目的是為了應付關(guān)于Object-Oriented的相關(guān)題目。
如果你準備用Java,也請至少把語(yǔ)言使用能力達到中階。
Object Oriented Analysis and Design (Oreilly Head First.)和
Design Patterns Oct.2004(Oreilly Head First)
兩本OOP的'經(jīng)典教材。據說(shuō)Design Pattern挺重要,但個(gè)人從未遇到過(guò)相關(guān)題目。但是大致了解一下,總不會(huì )錯。
Wikipedia/Google
仔細查閱每一個(gè)你所不知道的算法、數據結構和概念,做好筆記。等你在面試時(shí)發(fā)現一個(gè)名詞你見(jiàn)過(guò)卻不知道是什么,你會(huì )把腸子悔青的。
每個(gè)公司所關(guān)注的技術(shù)
這一點(diǎn)非常重要。比如面Google,就要把Distributed System和Information Retrieval的相關(guān)技術(shù)了解下,好好看看他家的經(jīng)典Paper:Map-Reduce和Google File System;比如面Bloomberg,對C++的了解和使用一定要啃到一定級別;比如面Amazon,要準備好OOP。
相信我,花六個(gè)月的時(shí)間,把上述的所有材料搞定,世界上沒(méi)有哪個(gè)技術(shù)公司你進(jìn)不去的。(You know I’m kidding… But it’s basically the fact. )
你可能會(huì )問(wèn),那如果我只有一周,或者兩天,甚至更短的時(shí)間去準備一場(chǎng)面試,該怎么辦?
我的回答是:第一,如果它是phone interview或者on-campus interview,那只是初級的篩選,難度不會(huì )很高,just relax;第二,拿下上述材料中的初級和中級部分(再次強調Cracking the Coding Interview這本書(shū)),然后根據公司來(lái)決定學(xué)習重點(diǎn),這樣就應該有不錯的發(fā)揮了。畢竟個(gè)人積累不同,盡力而為吧。
當你拿到on-site的邀請時(shí),不要去炫耀你的成就了,趕緊去準備之后的面試吧。On-site的難度深度都會(huì )有很大的提高。那才是真正的戰斗!過(guò)不了on-site,你什么也都不是!
下面我會(huì )分topic介紹一下準備重點(diǎn)。在你準備面試的過(guò)程中,你也應該有一份這樣類(lèi)似的word文檔,記錄你每天學(xué)習到的所有東西。
面試準備絕不是背誦和題海戰術(shù),而是能幫助你對CS知識的理解和運用提升到新高度的過(guò)程。
1.) Time Complexity分析
基礎中的基礎。絕大部分情況下,算法的時(shí)間復雜度能一眼看出來(lái)。
如果是面Google,需要掌握一些嚴密的時(shí)間復雜度的數學(xué)推導,有些算法不是一眼能看出時(shí)間復雜度的。
2.) Coding
廢話(huà)!
但是需要練習的是在紙上和在白板上寫(xiě)code。 (不要小看這件事!關(guān)掉愚蠢的Eclipse和VC吧)
更關(guān)鍵的是,寫(xiě)的代碼要一次成型,bug-free,即使多花點(diǎn)時(shí)間。如果你平時(shí)有寫(xiě)完代碼再慢慢debug的習慣,是很不利的。被面試官找出bug來(lái),你的分數會(huì )被大扣分!
語(yǔ)言選擇上,C++和Java,抑或 C#,都是無(wú)可挑剔的選擇——好比,孫權劉備曹操主;
Python,Ruby,Perl啥的也還行,在字符串處理上有奇效,但面試官未必買(mǎi)賬,因為有些問(wèn)題他需要你從底層實(shí)現起——貂蟬諸葛主;
啥,你說(shuō)匯編?——黃蓋主!還是開(kāi)局鞭撻至一血的!
3.) Data Structure
題目類(lèi)型大多是:給定一些實(shí)際需求,來(lái)設計相應的數據結構。所以,對每一種數據結構的特點(diǎn)、時(shí)間復雜度要非常熟悉,而且要有很敏銳的第一感。
a. Hashtables
可以說(shuō)是人類(lèi)發(fā)明的最重要的數據結構之一了。面試時(shí)的出現率極高!
保證你玩得轉Collision strategies和hash function。如果深入到如何設計具體的hash function,題目的難度也會(huì )是很大的。
b. Trees
BST,BFS,DFS,trie,Kruskal’s Algorithm ,Prim’s Algorithm
Balanced tree就沒(méi)什么研究必要了。
c. Graphs:
圖的幾種儲存形式,BFS/DFS,Dijkstra,A* algorithm
d. Linked List/Queue/Stack/Heap
相應操作的時(shí)間復雜度要了如指掌。保證你能輕松寫(xiě)出C++ STL或Java Library對應類(lèi)庫的API。
4.) Algorithm
重中之重的重中之重!
Sort,Recursion,Binary Search,Greedy Strategy等等等等要全面準備到。
Dynamic Programming的一些經(jīng)典題也要會(huì )。如果面Google,可能要準備一下DP的高級題目。
筆者認為,準備這類(lèi)題目毫無(wú)捷徑,只有不斷刷題,總結,刷題,總結。要培養出對題目的直覺(jué),這是一個(gè)漫長(cháng)的訓練過(guò)程。
在面試的時(shí)候,一般來(lái)說(shuō),要先給面試官提供一個(gè)暴力搜索的方法,然后計算復雜度。然后再慢慢做優(yōu)化。面試時(shí)一定要keep talking,提出自己的想法,展現自己的思路。如果你get stuck,面試官也會(huì )給出相應的hint(當然這是會(huì )被扣分的)。
5.) System Design
常見(jiàn)形式是:給定大數據量和N臺機器,解決一個(gè)特定的問(wèn)題。較開(kāi)放的題目。在網(wǎng)絡(luò )公司的面試中經(jīng)常出現。
解法有固定套路,可以參考Cracking the Coding Interview 相關(guān)章節,并自己做一些總結和應用。這類(lèi)題目看起來(lái)很難,掌握方法后,實(shí)際難度并不算很高,而且容易展現自身的分析能力,容易出彩。當然,面試官很可能會(huì )做適當的延伸,涉及到具體的技術(shù),這就靠自身平時(shí)的積累見(jiàn)招拆招了。
推薦的一些補充閱讀材料:
External Sort (http://en.wikipedia.org/wiki/External_sorting)
Web Crawler (http://nlp.stanford.edu/IR-book/html/htmledition/web-crawling-and-indexes-1.html)
Google MapReduce (http://labs.google.com/papers/mapreduce.html)
Google File System (http://labs.google.com/papers/gfs.html)
6.) Mathematics
重點(diǎn)在于組合數學(xué)和概率論。會(huì )有一些這類(lèi)的變體出現。稍微準備準備就可以了,相信國人的數學(xué)水平,絕對凌駕于世界巔峰,不管他面試官是阿三還是老美還是歐洲人。
7.) Operating Systems
Processes vs. Threads
Locks, mutexes and semaphores
Deadlock and livelock
Scheduling: FIFO, priority, shortest remaining time, round robin, and multi level.
不算特別重要。至少筆者從未遇過(guò)相關(guān)題目。
8.) Bit manipulation
兩個(gè)目的:應付該類(lèi)面試題(出現率不高,但是Google喜歡問(wèn));
用于自己的編程技巧——盡管有些silly,但是在代碼中整一點(diǎn)bit manipulation,是很geek的事。
9.) Design Pattern
了解這些:Observer Pattern, Decorator pattern, Factory Pattern, Singleton Pattern
美國cs面試經(jīng)驗分享(二)
在美國研究生申請中,大家都會(huì )收集一些研究生面試的經(jīng)驗和題目來(lái)進(jìn)行復習,對于計劃申請美國研究生的人來(lái)說(shuō),在美國研究生申請的面試環(huán)節,需要提前做好準備,下面就來(lái)看看Oregon cs面試經(jīng)驗。
cs@Oregon State University面試
教授很nice,而且是大牛。
之前發(fā)郵件說(shuō)主要談?wù)勊捻椖亢臀易约旱膒lan,interests and goal。外加測試一下你的算法,programming skills, data structure。用skype面的。剛開(kāi)始感覺(jué)可以,自己一邊說(shuō),教授一邊點(diǎn)頭,可是。。。
到后來(lái)。。。一個(gè)問(wèn)題老師說(shuō)了三遍才聽(tīng)懂。。?唇淌诘谋砬槎伎毂罎⒘。。。
記得問(wèn)的問(wèn)題是,
知道 recursive function?
學(xué)過(guò)概率?
工程數學(xué)和它有啥區別?
還有一個(gè)是我看你是軟工的,你怎么講軟工經(jīng)驗應用到實(shí)際學(xué)習中的?
還有一個(gè)就是知道高斯分布函數 ?
這個(gè)問(wèn)題教授還將函數發(fā)過(guò)來(lái)讓我瞅瞅?上γ嫔。
總之覺(jué)得面的不太好。整個(gè)過(guò)程自己狂說(shuō)yep, ok。。?谡Z(yǔ)太差了。。。。
最后教授說(shuō)了說(shuō)關(guān)于學(xué)校地理位置的事,small town。
我問(wèn)的問(wèn)題是要發(fā)幾篇paper才能畢業(yè)? 回答說(shuō)至少4篇。。。。。。
就這些,想起來(lái)再更新。。。。
通過(guò)上面對Oregon cs面試的分享,相信對于很多計劃申請美國研究生的人來(lái)說(shuō),在準備研究生面試材料的時(shí)候,可以參考上述的信息來(lái)做好準備。
【美國cs面試經(jīng)驗分享】相關(guān)文章:
分享面試經(jīng)驗12-04
最新關(guān)于美國簽證面試通過(guò)經(jīng)驗分享09-10
360面試經(jīng)驗分享12-17
面試的經(jīng)驗分享01-16
面試技巧經(jīng)驗分享12-28
建行面試經(jīng)驗分享12-21
小升初面試經(jīng)驗分享12-13
空姐面試經(jīng)驗分享11-12
MBA面試經(jīng)驗分享11-05
移動(dòng)面試經(jīng)驗分享10-16