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

jopen 10年前發布 | 37K 次閱讀 Google

題圖:正在滴血的谷歌

        最近 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 )然后剩下的時間,在白板上編碼實現吧。

來自: cricode.com
                    <span id="shareA4" class="fl">                            
                        </span>
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!