※ 引述《Brussels (這東西也要寫?)》之銘言:
: 小弟最近有幸通過北京某A外商公司的面試,現在進入要與HR談package的階段,想問一下不知有沒有人知道當地薪資狀況(職位是軟體工程師)?好讓我有個依據。
: 另外,不知有沒有一起通過的同伴可寄站內信認識一下。
這事情總算是塵埃落定,所以,依照當初對板友的約定,需回心得(還願一下,哈)。
這次與Amazon公司面試的過程有四道關卡。
第一關是 online programming test。
兩個小時,不限程式語言解兩個問題。
第一個問題是求「1 的補數」。
第二個問題是「給予若干數字,能否湊成要求數字,若可以,則回傳如何達成。」舉例,如給予2,3,5三個數字,能否湊成11這個數字?
當完成後,系統會給予若干 testing input, 然後跟你說 pass or fail。 第一題比較簡單,第二題我有三個 testing case,是time exceed,但我已經山窮水盡,想不到怎樣可以更快了,所以管他的,我就submit了。
約莫隔了一兩週,對方才回覆給我,說通過了,然後約 phone interview 時間。
第二關依舊是 programming test,只不過特別地是他要我在電話中敘述程式給他聽,要把程式每個keyword唸給他聽。所以,我就像白痴一樣念了以下類似的句子...
for a in tmp_array:
if a < b:
....
念了一堆 for, in , if , < ... etc 我到現在還是覺得怪,哈。
另外,對方問的都是關於電子商務得問題。
第一題,給予訂單 format, 如 UserA buy Item1, Item2, Item 54.... 你要怎樣設計資料結構儲存。
第二題,請利用你所設計的資料結構,找出當 User 買了 Item1, 你也可以推薦什麼商品?
第三題,請找出有相同興趣的User。
最後結束後,請你寫下今天你所敘述得程式,並包含 testing case,於24 hrs寄回去。
又約莫一兩週後,我才又收到第三關得面試通知。
接下來於某日炎熱得午後,我到了某飯店參加面試。
到達當場時,發現有三個同道人,然後對方有四人,你需要單獨與每人面談一小時。(聽完HR說明面試過成,我超想要轉頭就走,想說這面試從一開始到現在怎麼都這麼硬阿!)
面試我的第一個人是台灣人,但他已經在 China Amazon 工作約五年。
他問我說「你還記得 online programming test嘛?實際上,這系統我覺得有個缺陷,就是只能從這系統得到每個人是 pass or fail 對於這測試,他目前沒有辦法有推薦得功能,所以若你可以重新設計,你會怎樣設計這系統?」
「靠!」我心裡暗罵一聲,這是什麼鬼問題阿!於是,我回說:「讓我想一下,等下回覆你。」
幾分鐘後,我就開始亂掰,說:「我會怎樣對『code』做『概念式』的分類,因為我想你們是要找想法或者邏輯有成長性的人,而不是全然要100分的人,因為,這樣子你們大可去每間學校找最會念書與都有做功課得人就好。」
他就點點頭。(其實,我也不知道他在點個什麼屁,他應該知道我在唬爛才對。)但他接著說:「那你可以在那面透明玻璃寫一下 prototype 是關於你剛剛所說的『對code做概念式』的文件分類嘛?」
.....我無言了,但幾分鐘後,我依舊厚著臉皮就所學與這幾年經驗,寫了一些。於是第一個人就在我寫完後,與我討論了一下,就換第二個人進來了。
(馬的!真的有夠累,也很恨自己是不是太會掰了!)
第二個人是大陸人,劈頭就問。
我現在有個程式,他需要將資料寫入DB,但在DB那台機器上,其 I/O值卻一直都很高,只有偶爾有不定時的空檔,那你要如何設計寫入DB的機制?
這題幸好我在工作上有設計過類似的東西,所以回答比較沒有問題,但這考官卻看地很細,連 try except, thread 都會問為什麼需要這樣設計,然後可能會有什麼問題?最後的時間,是問我在原公司感到最有成就的事情是什麼?因為,我在原公司有兩個專利,所以,問這可能對我來說是加分。
第三個人是大陸人。
他問我:「給予一個已經排序好的數列,若我要搜尋某個數,你會怎樣搜尋?」
我當下楞了一下,現在是終於有簡單的題目可以回答了嘛?我不假思索地回答:「Binary Search.」
他接著問:「那時間複雜度是?」
我也馬上回:「Log(n)..」
那他又問:「若數列做一些變化,如 56, 78, 99, 100, 1, 8, 19, 11, 21, 42, 43,那你又會怎樣搜尋?」
「果然!事情不是我想地那麼簡單,這人果然又藏了難題在後面!」我心裡暗暗地這樣想,但說道:「那讓我思考地幾分鐘。」
他說:「請便!於是他在透明玻璃上,用白板筆自顧自個兒地解著莫名的問題。」
當幾分鐘後,我回答後,他擦掉白板,請我在透明玻璃上實現我的想法。
第四個人是香港人,他一進門就說:「May I speak in English?」
我當然不甘示弱地說:「Of course, you can.」
於是,他就還是問我幾個程式問題,然後請我在他的 NB 上寫 code 然後他特別說明要有 testing case inputs
問題有二,一是「.....我忘了。」二是「1, 7, 6, 7, 19, 21, 3, 5, 19, 12, 21, 45, 54, 66...」假設這是某家公司過去一年的股票價值,我該在哪天買哪天賣可以得到最大獲益?
我想了一下子,回答說,可以這樣找,他說還有更快的,我就再想了一下,那可以這樣子找,他說接近了,但是需要點小修改...
呼~終於結束了,而這也是我唯一一個人可以閒話一下,我問他說:「請問這些面試問題,都是你們自己設計的嘛?」
那香港人回說:「不,我們公司有提供題庫,也列出了幾項重點...blabla」
我心理就想說:「對咩~這合理些!我還以為你們都這麼厲害!不過,這確實是一個好方法,這跟我之前在台灣軟體公司被面試的方法與概念都不一樣,而且我覺得這些問題比較能反應一個人的思考邏輯,否則每次我都被問寫這程式需要注意什麼?寫執行緒時又要注意什麼?那乾脆就找個最有經驗地就好,不是嘛?」
約莫,兩週後,對方人資才終於回電跟我說通過,然後接下來就是薪資問題。(靠..從結果來看,我覺得第一次我就答應的話,我跟個白痴沒兩樣。)
他第一通電話問我期望薪資,我回答:「兩百以上。」對方直劈:「不可能!」然後他開始解釋你不能只用薪資來衡量這份工作...etc
然後幾天後,他寄了一份 offer proposal...果然是「不可能!」
我隔天想了一下,回說「我不能接受!」(當然不是這麼短,但也是言簡意賅。)然後我就不理他了。
....(一個星期過了)
....(又過了三天)
都沒有回信,我想說那就沒了,算了!反正,我也不是想換工作,只是有這機會試試看。沒想到,某天,那HR又打電話給我,說:「雖然,我們怎樣怎樣...但還是決定提高對你的待遇,希望你能考慮!」
最後我接受了,已經跟預期差不了多少了。
於是,小弟我這月底就要往北京報到,期望若干年後,這份履歷在我人生中是有幫助的。