上一篇說了一下面試準備和 behavior question 的準備方式,這篇說一下面試過程當中各個階段的準備方法,git
這些是第一輪 HR 給你說的,沒法就是你對他們公司有什麼瞭解,爲何想換工做,若是 relocate,會不會把家人帶過來。我以爲最重要的一點就是你的動機,也就是你爲何要來面試?如下是幾點千萬不能說的面試
1. 由於大家是大公司,我就想來大公司。我面試 facebook 的時候就這麼說過,HR 直接說不但願你來只是由於咱們的平臺。算法
2. 我就想出國。。。數組
每一個人的狀況都不同,可是必定要想個好的說辭,反正能夠反覆用的。ide
這個算是一個比較大的障礙了,由於確實工做中不多用到算法,雖然去刷題有應試之嫌,可是這就是遊戲規則。刷題的話,我通常都是去 www.leetcode.com,刷題的方式沒我的都不同,有人喜歡按照 topic 刷,有人喜歡按照難度刷,個人方式是 easy 和 medium 所有寫完(hard 級別的由於我不是去硅谷的公司,因此就放棄了),如下是個人建議:函數
0. 總結出經常使用的模板,例如這個帖子就是一個用雙指針來解字符子串題目的模板,https://discuss.leetcode.com/topic/30941/here-is-a-10-line-template-that-can-solve-most-substring-problems。這樣的模板還有不少,多看看 leetcode 上每一個題目的 discussion 版塊,看看其餘人的思路。單元測試
1. focus,有人寫題的時候,還聽歌,時不時刷刷朋友圈。可是實際面試的時候,會有壓力,也有時間的限制,因此最好要有在高壓狀態下解題的能力。leetcode 上有個 mock 的功能挺好的,推薦試試。測試
2. 不要用 ide,有時候的面試是要求你的 code 能 compile 的,因此最好有徒手寫代碼的能力。優化
3. 注意代碼格式。網站
4. 對於題目千萬不要記代碼,要記住原理。我曾經面試一個公司,on screen 的時候,出了一道原題,我取巧,就把以前寫過的答案給敲上去了。可是面試官問我爲何這樣解是對的,我忽然就想不起來了,結果面試掛了。若是你要記錄代碼,還不如記錄這個題目的思路,之後碰到了把思路想起來,現寫代碼,都比記代碼強。
5. 注意和麪試官的溝通,考察算法題目,其實不是考察你會不會這個算法,更多的是關注你去解決問題的能力,即便你對這個題目已經心知肚明,也要按照這個「套路」走一遍,一來把面試時間給耗完,二來也顯示你不是背答案。基本上的「套路」是這樣:
一: 面試官給你一個問題,這個問題多是已經用程序描述好的,好比從一個有序的整形數組中找到一個特定的值。有些是須要你對於一個現實的問題去建模,映射成一個方法或者函數,例若有從地圖上從 A 到 B 點如何距離最短,這個狀況下就須要你本身定義輸入輸出,而且和麪試官溝通好,好比我用二維數組表明這個地圖,最後用返回一個整形值表示路徑長度。
二: 明確一些邊界條件,這個和重要。有些面試甚至特地給你一些模糊的描述,而後看你如何明確需求的。例如上面的兩個問題,你能夠問面試官的問題有:
三:明肯定義了問題之後,你還不能着急寫代碼,你要跟面試官說我準備這樣這樣作,把你的思路給說出來,若是有白板,就畫出來。關鍵是要 think out loud。
四:這個時候,就到你寫代碼的時候了。若是解法不是最優的也沒有關係,關鍵是有個能 work 的 solution。
五:寫完之後,主動說要測試一下,若是是在線代碼的話,就寫幾個單元測試,若是是白板,就說須要測試哪幾種輸入。我通常會關注 邊界值,空值,Null 值等等。
六:面試官會問你算法的時間複雜度和空間複雜度是多少,而後會問你能不能優化。這個時候,你就能夠試着優化一下。優化不了也沒有關係,其實就是看你的能力邊界值在哪裏。
特別推薦一個 youtube 的視頻, How to: Work at Google — Example Coding/Engineering Interview,一個典型的算法面試流程。
除去算法面試,還會有些技術問題,例如什麼是 SOLID 原則,ACID 之類的,如何使用 git 去作大家的版本控制。這個就純靠平時積累了,值得注意的有些關於軟件工程的最佳實踐,國外公司很看重,可是這是國內工程師會比較少涉及到的,推薦看看《clean code》,《重構,改善既有代碼的設計》,《代碼大全》等書。
對於系統設計,要注意的是可能會讓你設計一個 電梯,動物園,停車場之類的,面對這種問題,仍是看看《GOF》吧。
有些公司沒有 onsite,有些有。我建議若是有 onsite 的機會仍是能夠去看看,一來看看這個城市是否是你想生活的,二來看看這個公司的環境怎麼樣。我 onsite 過一次,公司還挺好的。能到 onsite 的話,基本上拿到 offer 的機會很大了。基本上和 on screen 的流程同樣,不過現場面試的時候,請必定注意交流,我很喜歡開玩笑,因此他們都以爲我很 funny。這是很好的,誰不但願和一個有意思的人一塊兒工做呢?因此 onsite 的時候是展現你的我的魅力的時候,可是感受國外的人不是很 care 客戶第一,鞠躬盡瘁那一套。若是你們都不加班,你說你很努力,能夠加班,做爲面試官你但願你和這樣的人工做嗎?
其實出國工做也只是換一個環境工做而已,作的事情都同樣,不要想的那麼難,可是困難也會有一點。好比說語言,面試機會少,對於國外公司的評價標準不清楚等等。但願我這篇文章能有所幫助。