每一次面試都是對技術的提高(上)


工作已經有一個半月了,一直想要寫寫有關找工作面試的一些事情,但是又沒有寫。其實我並沒有像身邊的一些朋友那樣,有很多的面試機會,經歷了很多不同公司的面試過程,好像整個研究生的最后一個學期里面,我主要就面了Amazon和Facebook兩家公司,當然還有畢業后面試的現在進了的公司。所以我主要也只是想寫寫我面試Amazon的整個過程,因為整個過程最漫長也最深刻。雖然最后並沒有拿到他們家的offer,但是為了准備面試也做了很多准備,而隨着面試的一步步跟進,也能明顯的感覺到自己相關的能力在不斷地提高。

 

概覽

關於我,這是我的基本資料。也算是以前為找實習用的網絡簡歷吧。

關於Amazon面試,整個面試從他們2011年11月第一次聯系我,到2012年2月第一次面試我,到2012年6月他們發來拒信並且近期不再給面試機會的,總得說來差不多經歷了半年時間。期間一共接受了4次Phone-screen面試和2次Onsite面試。而Onsite面試里面,每次又有4個人分別面試。

其實對於這些大公司來說,基本流程都是需要很長時間進行的,一般是郵件來往進行電話面試的時間預約,然后回復他們合適的時間,從邀約到確定一般也要一周時間,然后面試一般會在約定時間的下一周。面試之后,又會至少登上一周時間等待他們的答復。如果對方願意進行下一步,又會開始下一輪時間安排。所以基本上,一個面試流程通常就要3-4周左右來完成。

雖然很漫長,但是也能給我更多的時間在期間進行准備和調整。這也是讓我能一步步提高,並且有時間糾正之前面試犯下錯誤的重要因素。

 

第一次電話面試

回想起第一次Amazon的電話面試,真得非常糟糕。一來剛剛從國內飛回到學校,還有嚴重的時差;二來寒假在家一個多月都沒怎么寫過代碼也沒有准備過算法。所以當對方打電話進來的時候,腦子一片空洞。

已經記不清具體問了些什么問題,但是至少記得一個關於排序算法的簡單問題,我都沒有答好的。那個問題涉及的排序算法是“歸並排序(Merge sort)”,可是當時我連基本的實現都說不出來。

好在面試官是中國人(從他的郵件名字看出來),他也很友好的一點點提示我,從怎么分數組,再到怎么將有序的數組合並。最后關於時間復雜度問題上,我也憑記憶答出是 O(n log n)。

 

結束電話面試之后,我已經基本不抱希望,完全感覺是不可能有希望了。而且因為還有一個學期,本身也想到還沒有准備好,也還有時間去繼續准備。

不過可能真的是本命年運氣好,Amazon還是給了我第二次電話面試的機會。之前也講過,每次面試之間基本要一個月時間。另外最后一個學期,我也沒有什么課,所以在這一個月里面,我也做了更多的學習和准備。

看完了MIT Introduction to Computer Science and Programming公開課 ,當然最主要的是聽了前半部分關於基本算法的內容,對於Python我倒沒有什么學習的傾向。一直都是用C++來應對面試。

也一直保持跟已畢業學長的聯系,詢問工作的機會,也在他的指點下開始做InterviewStreetLeetcode的題目。經過幾個題目的練習,一下子就領會了Binary Search的操作和巨大用處

其實上邊的題目對於參加過ACM的人來說,並不算什么吧。可惜本科的學校沒有ACM的隊伍,專業也是軟硬件皆有而偏向硬件,導致算法課成了專業選修課。這也是我選擇留學繼續提高的一個原因吧。好在大二數據結構課碰上了很好的老師,當時學得也十分扎實,所以雖然現在有些遺忘,但是撿回來也很快。

 

第二次電話面試

一個月后,我又上了電話面試的戰場,這次的表現明顯要比之前好了很多。雖然有幾次答得不流暢,但是已經好了很多。

先被問了一個關於樹的問題,雖然在之前的練習中還沒有做過樹和圖的題目,但是依然知道肯定是深度優先或者廣度優先的遍歷。但是我個人有點抵觸遞歸,所以在解答關於樹的問題時,我總是喜歡自建queue進行廣度優先的遍歷(這讓我在之后的面試吃到一些苦頭)。中間碰到了一些阻礙,面試官也提示說可以用遞歸。不過我還是解決了。

之后又問了一個很經典的Two Sum的題目。不過在當時,我還沒有做過這個題目,所以給出了一個先排序再找的方法,復雜度自然是 O(n log n)。然后面試官提示問,你會用HashTable嗎?我便明白了過來,用HashTable實現了O(n)的算法。也自此以后,HashTable在過的面試過程中經常被使用到。

不過因為C++標准庫中並沒有HashTable和HashSet,所以我也一直都盡量避免去使用他們。

 

這次面試,自我感覺要比上次好,也覺得應該能夠繼續進行下去。不過其實感覺並不是靠譜的東西,他們說不給可能就不給了。我朋友就是明明沒一道題目都答得很好,可惜還是直接被拒了。

好在這次我的運氣沒有那么差,但是也算不上好。因為一般兩次電面之后應該是直接Onsite到Amazon總部去面試的,但是要我第三次電話面試。

還是一個月的空隙,我繼續着算法的練習,指因為差零點幾秒種而不能通過InterviewStreet的測試案例,我也開始不停地尋找優化的空間和應該注意的事項(比如 scanf比std::cin快)。也開始逐漸體會到CS(Computer Science)和CE(Computer Engineering)之間應該有的差別。

接着我也開始重新加強操作系統方面的知識,開始看UC Berkeley的Operating Systems and System Programming公開課。雖然面試很多時候並不會問OS方面的東西,但是對我這個學期期末考試卻有了幫助。那是關於計算機組成的一門課,寫MIPS指令。而Berkeley那門公開課用來做實驗是叫Nacho的系統,正好也是基於MIPS指令的一個系統。

 

第三次電話面試

經過了2多月的准備和練習,很多基本的題目都已經能夠熟練編碼。於是,第三次電話面試,我都已經學會“搶答”了。

什么叫“會搶答”?一般情況下,面試的時候,面試官會出一道題目,然后會解釋一下題目的意思,並舉出一些例子來進一步解釋。比如“檢測回文數”,那么就會闡述什么叫“回文數”。但是因為他題目我都已經做到過了,所以不太需要他做詳細解釋,甚至聽到一兩個詞就知道是什么題目了。

所以,不到30分鍾,基本就把純算法類的三道題目給回答完了。之后他又出了一個設計類的題目,我回答的並不是很好,因為一直沒有准備過這類問題。不過面試官好像也沒有對這個題目要求提別高,似乎只是因為時間還很多,只好又出了這一題。對於我那沒有邏輯性的答案,他也欣然接受。

 

這一次的面試表現顯然要好很多,於是很快就得到了Onsite的機會。

在Onsite之前,我就繼續做IntervewStreet上邊的題目。之前IntervewStreet提供完成相應數量的題目之后,可以申請上邊的一些公司。所以我就拼命做題往那個數目上接近,還真讓我達成了目標。在上邊投了Facebook等公司。不過當時我也沒有報什么希望, 只是覺得有機會就試試,因為像Facebook我在其官網上投一直都沒有消息。

期間,我也看了不少有關面試技巧方面的書籍,比如《The Google Resume》,《Programming Interviews Exposed》。讓我注意到了不少之前沒有注意到的細節。同時也讓我對簡歷方便做了更多的修改。

 

第一次Onsite面試

過了不久,我就來到了Amazon總部,開始了4輪面對面的面試。

似乎已經習慣了電話面試,而且之前一直在電腦上用鍵盤敲代碼。突然要在白板上做題有些不太適應。上來第一題,我就出了錯,雖然后邊把問題改正了,但是也不是最優解。所以45分鍾里面,我答了一道題目,還沒有答完整。

第二個面試官是個中國人,他一進來就用中文問了我幾個背景問題,所以整個面試過程都是中文替代了英文。面得也很流暢,差不多回答了4個問題,不只是編程,還有SQL和Linux指令。不過SQL和指令我都沒有答上來,SQL是因為很久沒有用,一時沒有想起來;Linux指令是真的不會。

第三個面試官應該是一個Leader,拿了一支筆和一個本子,很多淡定的坐在那里開始了解了一些我做的項目,然后問了一個經典的DP問題。當時我雖然知道DP,也能看出一個題目是否會用到DP,但是我卻還沒有掌握DP的精髓。一開始只用了遞歸回溯,復雜度自然是指數級別的。后來雖然想要改成DP,但是依然沒有順利完成。

第四個面試官問的是一個設計類的問題,要我設計“Key Ask”(音譯)。我不是很懂那是什么,糾結了半天。后來他拼寫給我才知道叫“Kiosk”,然后解釋了是機場用的查詢航班,自動打印票的那個機器。雖然我靠着大四實習時留下的一些基於Asp.net的設計經驗,從數據庫到訪問層到業務邏輯,瞎講了一通。但是畢竟不是做設計,答的自然比較糟糕。之后他又問了一個算法上的問題,那個題目我會做,但是因為之前耗費了過多時間,所以只把思路講述了一番,沒有把代碼完成。

 

就這樣,第一個完整的面試流程就算結束了。雖然很期望能夠拿到Offer,但是也很清楚能力上還差上一些。所以只是抱着中立的心情去等待着。

在去面試的時候,通過InterviewStreet的推薦,意外獲得了跟Facebook的交流機會,之后也得到了面試的機會並進入了Onsite的流程。不過這個是另一個過程了,這里還是着重記錄Amazon的吧。

過了一個星期,Amazon終於打電話過來了,並不是婉拒的消息,但是也沒有接受的意思。而是讓我另一個部門的經理聯系交流一下。后來那個經理打來了電話,表示願意給我新一次的機會。我把它分開記錄在了《每一次面試都是對技術的提高(下)》里。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM