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