如何用一個月的時間準備google的技術面試

yangxi_001發表於2014-06-17

最近google在我大陸又火了一把,谷歌不能用了,哎呀,尼瑪。還讓不讓程式設計師活了。在這個節骨眼上,我也來湊個熱鬧,對於廣大需要谷歌的程式猿們,送上兩個字:呵呵

昨天在csdn上看到一位兄臺的文章《給所有面試官》,吐槽了下極品面試經歷。對於這位兄臺所遇到的極品面試官,本人同樣送上兩個字:呵呵

我曾經也參加過一些大大小小的公司筆試、面試,牛掰如阿里百度騰訊,犀利如Google,Mircosoft,盛大研究院,無一例外,均將我秒殺。讓我一度懷疑自己是否是程式設計師的料,幼小的心靈從那時起,留下了巨大的陰影。當然,N次大公司的面試失敗以後,歸結成兩條經驗教訓:缺乏筆試面試的技巧,非科班出身(實質是計算機知識不成體系)。

關於面試筆試,就六個字:技巧+實力+運氣。本文只涉及四個字:技巧+實力。當然,本文的技巧,不同於一般意義的“技巧”。

面試筆試是需要技巧的

面試是需要技巧的,這一點沒有人否認。筆試、面試時有相當比例的題目的是跟程式設計師相關,但又沒那麼緊密相關的東西。比如考察邏輯思維能力、抽象思維能力的題目,大公司尤其注重這一點,感覺有點測試智商的味道。好吧,我承認,我的智商有時候不夠用。不可否認有極個別的聰明人存在,這些天才,思維活躍,面對一些極品難題,他們都能佛擋殺佛。但事實上大部分人的邏輯思維能力,都是通過平時有意識的鍛煉出來的,而不是與生俱來的。想看看自己的智商有多少漏洞,請點這裡:門薩-智商黑洞

我想說的是:只要你不笨,只要你有意識去鍛鍊自己這方面的能力,這個東西其實跟你的知識體系的建立是一樣的,得靠積累。如果你沒事只知道刷微博,刷朋友圈,你的“智商”也永遠是停留在那個水平。

曾遇到一個面試官問了這麼個題目,至今印象深刻,分享給大家,看看自己的腦袋還夠用不。

題目:

給你兩個一模一樣的玻璃球,已知這種玻璃球,從一棟總共有一百層樓的高樓的某一層樓X扔下來,剛好破碎(即在X層以下不會摔碎,在X層以上均會摔碎)。讓你用最少的次數找出這個臨界樓層。(注意:你只有兩個玻璃球,所以只有兩次蛋碎的機會。並假設,每扔一次球,如果球沒碎,它的堅硬程度不發生改變)。

最差答案:

一種最差的解法如下:從第一百層樓開始扔玻璃球,如果沒有摔碎,則跑到第99層樓扔,以此類推,最壞的情況是,在第一層樓扔的時候球才摔碎。因此最大需要扔100次才能找出臨界樓層。(這種解法,我們只用了一個玻璃球,另外一個玻璃球還沒用上啊!)

若有興趣,可以看看蘋果公司的這幾個面試題目:蘋果向求職者丟擲的8大難題

面試筆試是需要實力的

程式設計師面試筆試,考察的技術相關的東西主要有:程式語言、演算法、設計模式、作業系統、專案經驗等等。基本功紮實了,面試筆試就有底氣了,如果再多點實際工程經驗,那麼面試對你來說,就是五個字:那都不是事

===========華麗麗的分割線============

廢話說了這麼多,進入本文主題,如何用一個月的時間去準備google的技術面試??

這個問題已經被問過無數多遍,也被無數人回答過。我結合自身的經驗教訓,來梳理總結一下。

1.1過一遍常用的資料結構:連結串列、二叉樹、堆樹(Tree+Heap)、(紅黑樹、AVL)(可選)。佇列、堆、棧、hash表。

1.2 研究一下上述資料結構在你熟悉的程式語言中是如何實現的。例如,如果你熟悉Java,可以學習下HashMap、LinkedHashMap、TreeSet、HashSet等等這些常用資料結構的實現。

1.3自己動手編碼實現這些資料結構,而不是僅僅寫出虛擬碼就完事了。

2.1過一遍你課堂上學過的經典演算法:各種排序演算法、圖的遍歷演算法、最短路徑演算法等等。

2.2 知道怎麼求一個演算法的時間複雜度。

2.3 寫程式碼時,有意識的關注程式的空間複雜度,這點在實際工作中很有用。因為記憶體很多時候會不夠用。

3.1 用你熟悉的程式語言實現第一、第二兩部分。在編碼實現的過程中,試著不借助任何參考資料來完成。

3.2 在完成3.1所說的編碼後,試著從時間、空間兩個維度去優化你所寫的程式。

練習面試問題。選擇一本面試相關的書,例如《Cracking the coding interview》,親手練習一下書中的題目,在紙上書寫或在IDE中編寫都行。(PS:很多面試官都喜歡讓你在紙上寫程式,所以,有意識的練習練習吧,不要太依賴IDE了)。在解答相關面試題時,注意不斷改進、優化你的解法。例如,將時間複雜度從n*n優化到nlogn。

練習在白板上分析、解決問題,並能夠將你解決問題的思路清晰的表達出來。(這一點要求比較高,尤其對一些“羞射”的程式設計師們)。在解決某一個給定問題時,對於你給出的解決方案,你得有充分的理由。你為什麼選用這種資料結構,這種演算法來解決這個問題。

上述五大點是真的很重要,我自己曾經在這上面就犯了眼高手低的錯誤,只親手實現了其中的一部分。在只有一個月時間的情況下,時間安排如下:

1)最多用1.5周的時間完成第一點和第二點。

2 )至少花一週的時間徹底搞懂你尚未明白的問題。

3 )然後剩下的時間,在白板上編碼實現吧。

轉載請註明出處,本文連結:http://cricode.com/1942.html

相關文章