我自己在FB做過面試官,面試過200多個人,對FLG那套面試模式還是比較熟悉的。
另外很多人只回答了題主第一個問題,後面還有一連串問題啊喂(都不審題,就教人做題了,狗頭)
國內應屆生是不是把Leetcode刷的滾瓜爛熟就能進google了?
這個大家意見挺統一的,我僅從不同角度來說下爲什麼不能。
因爲Google面試出的題目你大多不能在LeetCode/LintCode上找到原題。
Google算法面試的一大特點就是喜歡出新題或者變種題,你可以去翻翻面經,基本上很少會有原題出現。所以LC刷得再熟練,沒有真正理解的話,可能換個馬甲就不會做了。
另外算法面試的時候,如果你很快秒掉一題,面試官可能會再出一道題或者各種follow up。無腦刷題背答案是沒用的。
大家水平都差不多,那最後會以什麼標準區分呢?
像Google這樣的大廠,面試評價體系已經很標準了。這裏我們只講算法面試,實際上還有系統設計和行爲問題面試。
來看一道題,結合具體例子來感受下吧
最長迴文子串 Longest Palindromic Substring
對於這道題,面試評價從高到低如下
Strong Hire
使用 O(n) 或者 O(nlogn) 的算法實現出來 (Manacher’s Algorithm or Suffix Array),並且代碼優秀,無 Bug 或者有很小的bug,但是能自己發現並解決,無需太多提示
Hire
能夠分別使用枚舉法和動態規劃實現時間複雜度 O(n^2) 的算法。並且代碼質量合格,無Bug,無重複代碼,無需面試官給提示。
Weak Hire
只使用了其中一種 O(n^2) 的算法實現出來,代碼質量還不錯,可以有一些小 Bug,面試官可以給一些小提示。
No Hire
只能想出一種 O(n^2) 的算法,但是 Bug 太多,或者需要很多提示。
Strong No Hire
連一種 O(n^2) 的算法都想不到
4-5輪面試下來
有 >= 1 個 Strong No Hire => No offer
有 >= 2 個 No hire => No offer
有 1 個 No Hire + 1 個 Weak Hire => No Offer
有 1 個 No Hire,其他都是 Hire => Offer or 加面(取決於公司招人多不多,門檻高不高)
有 1 個 Weak Hire => Offer or 加面
一種極端情況是: 一個 Strong Hire + 一個 Strong No Hire => 開個會一起討論一下,通常結果是加面或者No Offer。
總結一下,就是**面試不一定會要求你用最優複雜度的算法來解決問題。**而只刷LC的話,會容易讓你產生一定要用最優解來做題的誤區。
還有代碼不是寫出來就可以過的,代碼質量同樣很重要。
好的代碼質量包括:Bug free,良好的Coding Style(包括變量名命名規範有意義,合理的使用空格,善用空行等),容易讓人讀懂的邏輯,沒有冗餘代碼,有邊界檢測和異常處理。
先實習再轉正是不是很容易?
這個得看公司,很不巧,**G家實習轉正很不容易。**至少在北美是如此,國內的話競爭應該會更大,不要說轉正了,實習就很難拿。
說下北美這邊Google實習要怎樣才能轉正。
谷歌實習轉正需要4個feedback,一次實習可以從host和co-host那裏各收集1個feedback。
剩下2個有兩種方法獲得:再實習一次,或者通過兩輪面試。
所以如果要拿兩次谷歌實習,至少要提前一年就做準備。並且第一次實習的表現決定了會不會給第二年的實習offer。一般大部分人時間只夠一次實習,再加兩輪面試纔有機會轉正。
關於算法面試的方方面面,我在《九章算法班》裏面講得很多了,除了怎樣正確高效地刷題,和麪試官如何溝通,如何提升代碼質量,大廠的面試風格等等都有所涉及。最新一期正在招生中,有3節免費體驗課,可以領取九章算法精選100道算法面試題哦。