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