Google面試的經(jīng)驗(yàn). 下面把自己的經(jīng)驗(yàn)和大家分享一下:
很多非技術(shù)的因素在這里就不說了...
技術(shù)方面的準(zhǔn)備包括:
1. 仔細(xì)鉆研一本數(shù)據(jù)結(jié)構(gòu)和算法的書.每個(gè)程序員都知道數(shù)據(jù)結(jié)構(gòu)和算法的重 要性, 可是為什么呢?最主要的原因就在于經(jīng)典的數(shù)據(jù)結(jié)構(gòu)和算法是對常見計(jì)算機(jī)問題的歸納和總結(jié). 如果你精通數(shù)據(jù)結(jié)構(gòu)和算法, 當(dāng)你遇到新問題時(shí),你就 很容易將問題進(jìn)行定位,比如說這是一個(gè)圖的問題還是樹的問題, 然后在運(yùn)用系統(tǒng)的知識進(jìn)行分析. 從而找到解決問題的方法. 例如:如果面試官問你最少可以用多少種顏色來填充中國地圖中的各個(gè)省的問題, 你就應(yīng)該想到這是???
所以說,如果當(dāng)你遇到一個(gè)問題時(shí)馬上能夠定位到該用什么數(shù)據(jù)結(jié)構(gòu)/算法來解決, 著就是面試官首先想要看到的.
1) 算法復(fù)雜性分析. 你必須知道如何使用Big O來分析算法的復(fù)雜性. 如果你不知道這個(gè),你肯定過不了面試. 如果不知道, 仔細(xì)讀一下相關(guān)的那章. 你完全可以搞定的!
2) 排序算法. 你需要知道排序算法. 不要提冒泡排序法. 真正開發(fā)時(shí)沒人用. 你至少要知道一種n*log(n)的排序算法. 比如: 快速排序法.
3) Hashtables. 你必須要知道如何使用哈希表的使用. 你應(yīng)該知道如何用你擅長的編程語言來實(shí)現(xiàn)一個(gè)哈希表.
4) Trees: 你需要了解樹型結(jié)構(gòu), 二叉樹, BFS, DFS等遍歷算法.
5) Maps: 圖非常非常非常非常非常重要.就算你已經(jīng)覺得圖已經(jīng)很重要了.但實(shí)際上,它比你想的還要重要. 你應(yīng)該了解圖在內(nèi)存中的幾種表示法, 比如使用對象和指針, 使用距陣等. 同時(shí)你還需要了解圖的遍歷算法, 以及它們的算法復(fù)雜度, 還有如何在代碼中實(shí)現(xiàn).
6) 其它的數(shù)據(jù)結(jié)構(gòu). 盡量學(xué)習(xí)書中的其它數(shù)據(jù)結(jié)構(gòu)和算法.
2. 數(shù)學(xué). 有些Google的面試官很喜歡問一些離散數(shù)學(xué)方面的東西.所以也需要做一些準(zhǔn)備.
3. 操作系統(tǒng). 你總要了解一些操作系統(tǒng)方面的基礎(chǔ)知識. 比如線程和進(jìn)程,進(jìn)程間的通信等.