個人美國(北美)計算機CS實習面試經驗分享

過去的一年多裏,參加了一些面試,雖然面過的公司很少,但都從頭一直走到尾。畢竟本身也是花了大量的時間和精力在這一場場的面試裏。因此,就絮叨下本身的一些經驗,但願能給在美國找實習找工做的同窗們提供一點點幫助,也算是個人北美計算機實習面試總結了。
開始前的一些說明:
1. 筆者只是一介小本科,雖然留了學,可是留了級,學識淺薄,目光短淺,文章如有不恰之處,懇請各位大牛不吝指正!
2. 筆者面試的崗位均爲Software Engineer,俗稱「程序猿」。若是讀者是非CS專業或沒有找此類工做的需求,請ctrl +w。本文更多的傾向於CS技術層面,關於面試儀表妝容禮儀等等的其餘問題,請出門右拐。
3. 鑑於保密協議,本文只談面試準備材料和方法,不涉及任何具體面試題。(固然,你若是單獨請筆者吃飯,能夠考慮)
4. 本文涉及的內容更多地適用於在美國本土的技術面試。美國的面試更加正式規範,國內同窗可作適當參考。
5. 我的認爲,面試的成功 = 60%的平時積累 + 30%的考前準備 +10%的其餘因素(如自信、談吐)。以前有同窗告訴我北美計算機CS實習面試須要的硬實力。因此,面試的準備對於咱們這類凡人來講,異常重要;靠平時積累就能虐了面試官的大牛,不在本文考慮之列。
我面過的公司:########php

筆者運氣較好,除了在微軟敗在了最後一輪大manager的石榴裙下,其餘三家都順利拿到了offer:前後在百度和Bloomberg實習,並將於2012年正式加入Google工做。Google的Offer下來後,也就是至關於我在美國(北美)計算機CS實習面試的一個暫時結束。
下面將分Behavior Question和Technical Question分別介紹我的的面試準備技巧:
I.         Behavior Question
這類問題的特色是,易準備,好回答,必出現。因此必定要花幾個小時好好準備,寫寫提綱,面試前對着鏡子說幾回。
a.     HR Question
最無聊的一類問題,好比「why Microsoft?」、「what’s your plan in 5 years? 」 通常爲HR所喜歡。
推薦準備材料:http://hrinterviews.blogspot.com/。把這64道題刷一下,全部的HR問題都不會是問題了。準備的方法相似於託福口語,準備幾個段子,反覆用,就很充分了。
另外,回答必定要真誠。好比,若是被問到「what’s yourweakness?」,你若是回答:我太追求完美太熱愛工做巴拉巴拉——太過期太噁心人了吧,親!
b.     Talk about your project
通常會在面試的開始被問及,必然會被問到的題目之一。把簡歷上的項目好好地闡述,輔以畫圖更佳。一些經典的Follow up是:What is the mostchallenging part? What will you do if you have opportunities to improve it?
百分一萬的準備好這些問題!面試官一般會刨根問底。答的吭吭哧哧,幾乎是不誠信的表現。
c.     Question for interviewer
通常會在面試的最後十分鐘裏,面試官會請你提出問題。這是你展示對公司的激情、我的的興趣、和麪試官套近乎等等等等的大好機會。不要說「no」或者僅僅問「啥時知道結果啊,哥們」這類的問題。至少準備五個有深度的問題。
我的經驗來講,最好的方法仍是隨機應變,根據以前面試的狀況來合理提問。好比,我在Google的一次面試裏,面試官無心間說起他在設計一門新的編程語言。面試最後,我就滿臉好奇地說:「talkabout your language,please」。而後我和他就編程語言的設計各方面進行了一些小討論,他最後離開時萬分興奮。就這樣,對面試官的尊重,自身興趣和能力的展示,對技術的激情——一脈相承,水到渠成。
    II.         Technical Question
技術面試的最核心部分。
下面是一些筆者使用過的材料(請適當支持正版):html

  • Programming Interviews Exposed

入門級書籍,能夠了解一些基本概念。
  • Cracking the Coding Interview

中級書籍,經典必備教材,重點推薦,重中之重!從頭至尾我作過五次。
  • Hacking a Google Interview

MIT的一門課程,教學Handout可做爲中級題目練習。
資料不少,水帖更多,能夠尋找到不少戰友和第一手的面經。能夠重點學習裏面的精華貼。
中高級的算法題。
高級算法題,難度偏難,可作適當瞭解。我的認爲,若是不是面Google,裏面的題目被面到的可能性不高。
知名的編程練習網站,有一些相關的材料和教材很經典。
  • 面經來源:

mitbbs的JobHunt板塊GlassdoorCareerCup
很是有名的高級C++語言學習網站。啃下來會頗有幫助。主要的目的是爲了應付關於Object-Oriented的相關題目。
若是你準備用Java,也請至少把語言使用能力達到中階。
  • Object Oriented Analysis and Design (Oreilly Head First.)和

Design Patterns Oct.2004(Oreilly Head First)
兩本OOP的經典教材。聽說Design Pattern挺重要,但我的從未遇到過相關題目。可是大體瞭解一下,總不會錯。
  • Wikipedia/Google

仔細查閱每個你所不知道的算法、數據結構和概念,作好筆記。等你在面試時發現一個名詞你見過殊不知道是什麼,你會把腸子悔青的。
  • 每一個公司所關注的技術

這一點很是重要。好比面Google,就要把Distributed System和InformationRetrieval的相關技術瞭解下,好好看看他家的經典Paper:Map-Reduce和Google FileSystem;好比面Bloomberg,對C++的瞭解和使用必定要啃到必定級別;好比面Amazon,要準備好OOP。
相信我,花六個月的時間,把上述的全部材料搞定,世界上沒有哪一個技術公司你進不去的。(You know I’m kidding… But it’sbasically the fact. )
你可能會問,那若是我只有一週,或者兩天,甚至更短的時間去準備一場面試,該怎麼辦?
個人回答是:第一,若是它是phone interview或者on-campus interview,那只是初級的篩選,難度不會很高,justrelax;第二,拿下上述材料中的初級和中級部分(再次強調 Cracking the CodingInterview這本書),而後根據公司來決定學習重點,這樣就應該有不錯的發揮了。畢竟我的積累不一樣,盡力而爲吧。
當你拿到on-site的邀請時,不要去炫耀你的成就了,趕忙去準備以後的面試吧。On-site的難度深度都會有很大的提升。那纔是真正的戰鬥!過不了on-site,你什麼也都不是!
下面我會分topic介紹一下準備重點。在你準備面試的過程當中,你也應該有一份這樣相似的word文檔,記錄你天天學習到的全部東西。
面試準備毫不是背誦和題海戰術,而是能幫助你對CS知識的理解和運用提高到新高度的過程。
1.)  TimeComplexity 分析
基礎中的基礎。絕大部分狀況下,算法的時間複雜度能一眼看出來。
若是是面Google,須要掌握一些嚴密的時間複雜度的數學推導,有些算法不是一眼能看出時間複雜度的。
2.)  Coding    
廢話!
可是須要練習的是在紙上和在白板上寫code。 (不要小看這件事!關掉愚蠢的Eclipse和VC吧)
更關鍵的是,寫的代碼要一次成型,bug-free,即便多花點時間。若是你平時有寫完代碼再慢慢debug的習慣,是很不利的。被面試官找出bug來,你的分數會被大扣分!
語言選擇上,C++和Java,抑或 C#,都是無可挑剔的選擇——比如,孫權劉備曹操主;
Python,Ruby,Perl啥的也還行,在字符串處理上有奇效,但面試官未必買帳,由於有些問題他須要你從底層實現起——貂蟬諸葛主;
啥,你說彙編?——黃蓋主!仍是開局鞭撻至一血的!
3.)  Data Structure
題目類型大可能是:給定一些實際需求,來設計相應的數據結構。因此,對每一種數據結構的特色、時間複雜度要很是熟悉,並且要有很敏銳的第一感。
a.   Hashtables
能夠說是人類發明的最重要的數據結構之一了。面試時的出現率極高!
保證你玩得轉Collision strategies和hash function。若是深刻到如何設計具體的hashfunction,題目的難度也會是很大的。
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的一些經典題也要會。若是面Google,可能要準備一下DP的高級題目。
筆者認爲,準備這類題目毫無捷徑,只有不斷刷題,總結,刷題,總結。要培養出對題目的直覺,這是一個漫長的訓練過程。
在面試的時候,通常來講,要先給面試官提供一個暴力搜索的方法,而後計算複雜度。而後再慢慢作優化。面試時必定要keeptalking,提出本身的想法,展示本身的思路。若是你get stuck,面試官也會給出相應的hint(固然這是會被扣分的)。
5.)  System Design
常見形式是:給定大數據量和N臺機器,解決一個特定的問題。較開放的題目。在網絡公司的面試中常常出現。
解法有固定套路,能夠參考 Cracking the Coding Interview相關章節,並本身作一些總結和應用。這類題目看起來很難,掌握方法後,實際難度並不算很高,並且容易展示自身的分析能力,容易出彩。固然,面試官極可能會作適當的延伸,涉及到具體的技術,這就靠自身平時的積累見招拆招了。
推薦的一些補充閱讀材料:
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
重點在於組合數學和機率論。會有一些這類的變體出現。稍微準備準備就能夠了,相信國人的數學水平,絕對凌駕於世界巔峯,無論他面試官是阿三仍是老美仍是歐洲人。
7.)  Operating Systems
Processes vs. Threads
Locks, mutexes and semaphores
Deadlock and livelock
Scheduling: FIFO, priority, shortest remaining time, round robin, and multilevel.
不算特別重要。至少筆者從未遇過相關題目。
8.)  Bit manipulation
兩個目的:應付該類面試題(出現率不高,可是Google喜歡問);
用於本身的編程技巧——儘管有些silly,可是在代碼中整一點bit manipulation,是很geek的事。
9.)  Design Pattern
瞭解這些:Observer Pattern, Decorator pattern, Factory Pattern, SingletonPattern
面試是一個很吃經驗的考試。不要顧忌前幾回的失敗,那都是必要的練級。
最後,送上我篤信的一句話:"Success is just like being pregnant. Everybody congratulatesyou but nobody knows how many times you were fucked"。
謹以此祝願全部的童鞋都能得到本身Dream Company的offer!以上就是個人北美計算機CS實習面試經驗!
碼農社區技術留學移民板塊 http://w3croom.com/read.php?tid-3579.html
相關文章
相關標籤/搜索