Behavior question如何準備以及技術複習重點

下面將分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 your weakness?”,你如果回答:我太追求完美太熱愛工作巴拉巴拉——太過時太噁心人了吧,親!

 

b.     Talk about your project

一般會在面試的開始被問及,必然會被問到的題目之一。把簡歷上的項目好好地闡述,輔以畫圖更佳。一些經典的Follow up是:What is the most challenging part? What will you do if you have opportunities to improve it?

百分一萬的準備好這些問題!面試官通常會刨根問底。答的吭吭哧哧,幾乎是不誠信的表現。

 

c.     Question for interviewer

一般會在面試的最後十分鐘裏,面試官會請你提出問題。這是你展現對公司的激情、個人的興趣、和面試官套近乎等等等等的大好機會。不要說“no”或者僅僅問“啥時知道結果啊,哥們”這類的問題。至少準備五個有深度的問題。

個人經驗來說,最好的方法還是隨機應變,根據之前面試的情況來合理提問。比如,我在Google的一次面試裏,面試官無意間提及他在設計一門新的編程語言。面試最後,我就滿臉好奇地說:“talk about your language, please”。然後我和他就編程語言的設計各方面進行了一些小討論,他最後離開時萬分興奮。就這樣,對面試官的尊重,自身興趣和能力的展現,對技術的激情——一脈相承,水到渠成。

 

 

 

    II.         Technical Question

技術面試的最核心部分。

下面是一些筆者使用過的材料(請適當支持正版):

  • 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和Information  Retrieval的相關技術瞭解下,好好看看他家的經典Paper:Map-Reduce和Google File System;比如面Bloomberg,對C++的瞭解和使用一定要啃到一定級別;比如面Amazon,要準備好OOP。

 

 

相信我,花六個月的時間,把上述的所有材料搞定,世界上沒有哪個技術公司你進不去的。(You know I’m kidding… But it’s basically the fact. )

你可能會問,那如果我只有一週,或者兩天,甚至更短的時間去準備一場面試,該怎麼辦?

我的回答是:第一,如果它是phone interview或者on-campus interview,那只是初級的篩選,難度不會很高,just relax;第二,拿下上述材料中的初級和中級部分(再次強調Cracking the Coding Interview這本書),然後根據公司來決定學習重點,這樣就應該有不錯的發揮了。畢竟個人積累不同,盡力而爲吧。

當你拿到on-site的邀請時,不要去炫耀你的成就了,趕緊去準備之後的面試吧。On-site的難度深度都會有很大的提高。那纔是真正的戰鬥!過不了on-site,你什麼也都不是!

 

 

下面我會分topic介紹一下準備重點。在你準備面試的過程中,你也應該有一份這樣類似的word文檔,記錄你每天學習到的所有東西。

面試準備絕不是背誦和題海戰術,而是能幫助你對CS知識的理解和運用提升到新高度的過程。

 

1.)  Time Complexity分析

基礎中的基礎。絕大部分情況下,算法的時間複雜度能一眼看出來。

如果是面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。如果深入到如何設計具體的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的一些經典題也要會。如果面Google,可能要準備一下DP的高級題目。

筆者認爲,準備這類題目毫無捷徑,只有不斷刷題,總結,刷題,總結。要培養出對題目的直覺,這是一個漫長的訓練過程。

在面試的時候,一般來說,要先給面試官提供一個暴力搜索的方法,然後計算複雜度。然後再慢慢做優化。面試時一定要keep talking,提出自己的想法,展現自己的思路。如果你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 multi level.

不算特別重要。至少筆者從未遇過相關題目。

 

8.)  Bit manipulation

兩個目的:應付該類面試題(出現率不高,但是Google喜歡問);

用於自己的編程技巧——儘管有些silly,但是在代碼中整一點bit manipulation,是很geek的事。

 

9.)  Design Pattern

瞭解這些:Observer Pattern, Decorator pattern, Factory Pattern, Singleton Pattern

  

 

面試是一個很吃經驗的考試。不要顧忌前幾次的失敗,那都是必要的練級。

最後,送上我篤信的一句話:"Success is just like being pregnant. Everybody congratulates you but nobody knows how many times you were fucked"。

謹以此祝願所有的童鞋都能獲得自己Dream Company的offer

發佈了95 篇原創文章 · 獲贊 13 · 訪問量 25萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章