[心得] Agoda - Senior iOS Developer @ Bangkok

作者: B1ack3y3 (B1ack3y3)   2017-08-31 16:08:48
※ [本文轉錄自 Oversea_Job 看板 #1PfyEDLO ]
作者: B1ack3y3 (B1ack3y3) 看板: Oversea_Job
標題: [亞洲] Agoda - Senior iOS Developer @ Bangkok
時間: Thu Aug 31 16:06:34 2017
Agoda - Senior iOS Developer 面試心得
原文是用 Markdown 寫的, 複製貼上後格式整個爛掉, 我已經盡量修改了。
但如果還是有奇怪的地方請見諒。
版上應該也有目前公司同事在看,如果被你猜出來我是誰的話請不要透露:)
如果你最近也在台北找 iOS 的缺,然後面試的時候有被問到類似的問題,
也請不要問面試官是不是這篇文的作者,否則會被 reject (開玩笑的XD),
但真的不要問。
本文有點長,但重點在最後面的
「有沒有在荷蘭 / 德國工作的鄉民願意幫我介紹工作」 XD
— 以下正文開始 —
剛完成在曼谷 Agoda 的 on-site interview,現場拿到 offer。
幾個小時前才回到台北家中,趁現在記憶猶新的時候來分享一下這次的經驗。
(但明天早上好像還要回公司上班耶...夭壽)
如標題,我應徵的職位是 Senior iOS Developer。
一開始是 Agoda 的 HR 在 LinkedIn 上面找到我問我有沒有興趣應徵該職位,
加上老婆鼓勵我嘗試看看,於是就在幾天內把一個有點破爛的英文履歷趕出來
並寄給 Agoda 的 HR,接者就開始了整個流程。
我自己是將履歷審核當作是面試流程的第一關,所以在整個面試流程上我分成下面六關:
1. 履歷審核
2. 線上技術測驗
3. Skype Interview #1
4. iOS Code Challenge
5. Skype Interview #2
6. On-Site Interview
下面大概說明一下每一關:
1. 履歷審核
其實沒什麼好講的,主要就是從履歷來看你的經歷跟他們找的人有沒有正相關
(經驗是否符合他們對 Senior 的期許?)
2. 線上技術測驗
採用的平台是 HackerRank,限時30分鐘左右(忘記確切時間);
題型方面多半都是選則題;採用的語言則是 Swift & Objective-C 都有;
內容方面則牽涉到 iOS 開發上的各個面向的基本觀念,如:
* sync & async,
* threading (GCD, OperationQueue, UI thread, background thread),
* 記憶體管理 (strong, weak, assign, unsafe_unretained, unowned,
印象中好像還有考到 MRC,有點忘了)
* retain cycle
* value type & reference type
* var & let
* Objective-C & Swift Generic
* Objective-C Category & Protocol
內容其實不難,主要應該是要確認應徵者符合他們對於 Senior iOS Developer
的低標吧?
3. Skype Interview #1
原為 Video Interview,但因為網路問題,開始沒幾分鐘就改成
Phone Interview了(看不到對方的臉我反而不會緊張)。
面試官是美國人,口音好懂,講話速度慢。
這關的內容大致上就是在問你目前在公司主要的工作內容以及有哪些經驗,
然後如果沒有經驗的話有沒有概念,如:
* A/B Testing
* Unit Testing
* UI Automation Testing
* Dependency Injection
* Protocol-Oriented Programming
* Architecture Pattern (比較常聽到的就 MVC, MVP, MVVM, VIPER,
如果對 Flux 或 Redux 概念熟悉的話也是可以講)
* 目前的產品採用什麼樣的 Architecture Pattern以及
是否有與其他 Pattern 比較過優缺點
** 以及確認在技術上的英文溝通能力沒問題(這應該是主要目的吧)**
大概是這樣,有想到再補。這次面試尾聲時,說接下來要請我做一個
iOS Code Challenge,我一開始以為是要線上直接做,就開始緊張了,
後來對方才說那是個作業,有一個禮拜的時間可以寫。
4. iOS Code Challenge
原則上就是一個用 VIPER 架構"惡搞"出來的簡易 iOS App(Objective-C
和 Swift 都有用到),README 裡面還寫說他們極盡可能的在惡搞這個作業
而且惡搞得很開心。受試者的任務就是:
1. 想盡辦法重構、改善這個 App,並確保這個 App 符合 VIPER 的架構
2. 確定你所使用的語法符合現代的Objective-C
3. 每個 commit 只能包含一項主要改變(粒度怎麼切就看個人了)
4. 加上 Unit Test
這個作業我寫了兩次,第一次寫到一半覺得哪裡怪怪的但又說不上來
(畢竟對 VIPER 只懂理論,鮮少有實務經驗),就決定砍掉重練。
結果最後是在 deadline 的前一天晚上十點前才完成全部的東西,
並打包成 zip 上傳。另外值得一提的點大概是:
1. 加上 UI Automation Test (這不在原本的作業需求清單中,
我是看到他們有把 UI Test 的 target也加進去,所以就額外寫了)
2. 我有額外加一個 VersionHistory 用來記錄我在每個 git tag 完成
了哪些事情。
上傳完成之後,大概等一週左右,Agoda 就通知我約下一關線上面試。
一開始約的時間跟我收到信的時間只隔三天,我自己是覺得時間太近,
所以將時間往後延了一週。
5. Skype Interview #2
這關的面試者是**俄國人**,而且是位俄國腔很重的俄國人,講話速度一
快起來根本聽不懂在講啥。一開始簡單的自我介紹之後一樣開始問我過去
的一些經驗,也有問到我對 Code Challenge 的看法,並問我花了多久時
間做。我很老實的說因為我對 VIPER 不熟,我每天大概花上三四個小時
在玩弄那個東西。另外我也主動提說其實那個作業我拿到的第二天就做完了,
但就是哪裡說不上的怪,所以我決定砍掉重練。
接下來開始進行 Online Coding,平台依然是 HackerRank,
但我們兩個可以直接在上面寫 Code、改對方的 Code
(大概就是CodePad吧,但老實說我沒用過CodePad)。
這邊我主要被問了兩個問題:
1. 如何實作 -[NSArray enumerateObjectsUsingBlock:],
然後從這個實作衍伸出如何對 Primitive Type 做 call by address、
__block、Stack & Heap memory
2. Unit Testing,給你兩個相依性綁很緊的Swift class,
如何修改來提升可測試性(不能使用第三方 Library)
這題其實跟 Code Challenge 的 Unit Test 部分有關
第二題主要問的觀念其實是:
D.I. + Protocol-Oriented Programming + Mock + Stub,
平心而論也算是一個滿基本的題目,但因為我過去沒有太多寫測試的經驗,
沒有很快的想出解法。中間被問了一題是:如何在不使用第三方套件的情況
下寫一個 Stub 物件,我就很沒用的當機了 Orz。
但其實就是先用 D.I + Protocol 將相依性解開之後,就可以在測試的
swift 檔中寫一個 class 來實作你切出來的 protocol,並給予固定的
response 就好....
不過第二題其實是跟 Code Challenge 的 Unit Test 部分有關,
照理來說如果好好寫的話第二題不應該回答不出來
(我就是那個回答不出來的白痴...)。
不過當對方給我提示並告訴我做法的時候我,我很本能反應的叫了一聲 Fuck
(是的,對方有聽到) 然後我馬上接者說:「我怎麼沒想到,我在 Code
challenge 裡面就是這樣寫的」,然後我開始講我在公司產品裡面做了類似
的事情,然後目的就是為了方便測試怎樣怎樣的,試圖掩蓋我沒回答出來的
事實(遮臉)
當第二題卡住之後我就想說我應該掰了,Agoda 面試到此為止了 Orz。
結果對方冷不防的說了一句:接下來我們的 HR 會跟你安排 On-Site 的
時間跟細節,公司會提供參加面試的機票、住宿(含早餐)、機場接送,
並且在我預期之外的問我期望薪水,好險之前有稍微想過這問題,
但事後證明想的不夠周全,畢竟是第一次面試國外的公司。
6. On-Site Interview
免責聲明:這段廢話有點多
原本 Agoda 提供的行程是三天二夜的行程:
1. Day1 — 飛曼谷,休息
2. Day2 — 一整個下午的面試
3. Day3 — 飛回台北
此時你還不知道你面試當天的行程跟面試官的姓名,
這要等機票開票之後 Agoda 的 HR 才會寄一封信跟你說。
我老婆在知道我拿到 On-Site的機會之後就很興奮,而且很想跟我一起去
順便找大學同學聚聚。於是乎我就寫信問 Agoda 可不可以多幫我訂兩個
晚上的飯店,多出來的費用我會自己負擔,隔天收到 Agoda 的回信說他們
最多可以提供給我四個晚上的免費住宿。
此外,我也請他們確認航班跟座位之後跟我說好讓我可以幫我老婆訂機票,
他們也很貼心的幫我選了有雙人空位的座位,所以我老婆很輕鬆的就買到
我旁邊的機票....。
對了,住的是 Courtyard by Marriot Bangkok,台灣叫萬豪還是萬怡我忘記了。
最後行程就變成五天四夜:
1. Day1 — 早班泰航飛曼谷
2. Day2 — 自由時間
3. Day3 — 上半天在曼谷參觀,下半天準備面試
4. Day4 — 原定三個面試 session ,從下午三點一路到六點
(之前有位Andre大大的分享他的on-site有四個session)
5. Day5 — 原訂整天去放鬆吃吃喝喝,傍晚飛台北
但在 Day3 的時候 Agoda 突然寄了一封信將原本Day 4 的
3 個 session 的其中一個移到 Day 5 上午。
我想說沒問題(實際上也沒得選),這樣我比較不會精神渙散。於是就變成:
Day 4 — 下午共兩個面試 session (1hr per session)
Day 5 — 上午一個面試 session
結果 Day 4 下午原定三點開始的面試,我等到了三點四五十 HR 才出現......
整個面試 Delay,但這也沒辦法,只能當作有人偷偷在旁邊觀察你的反應。
(我確實覺得櫃檯小姐一直往我的方向看就是了,但絕對不可能是因為我是帥宅)
—以下才是面試內容—
1. Session 1
這關的面試者就是我第二關 Skype Interview 的俄國人,口音一樣很重。
主要的討論內容就是給我一個畫面,問我會如何設計這個畫面的架構。
2. Session 2
這關的面試者是一位在倫敦長大的德國人,講話沒有英國腔,
反而比較接近美國腔,但講快的時候會覺得對方在講德文。
這關一開始有問我平常主要使用的語言是Objective-C還是Swift?
我回Objective-C之後就開始問我Swift...好在今年4宣布之後我
也是把官方的 The Swift Programming Language 近乎整本啃完,
所以沒有太困難的地方,此外也問到像是:
* Reader - Writer Problem以及如何解
* 針對 NSDateFormatter輸出的結果做測試要考量哪些前置設定條件。
NSDateFormatter的測試我很廢的被問倒了,因為平常要用的時候都是去
copy-paste...雖然都知道有哪些設定因該要考慮,但被問到的時候卻講
不出來。
* Frame & Bounds 的差異
* NSInteger 的長度
3. Session 3
這關的面試者是一位俄國搬到以色列再從以色列來到曼谷的俄國人,
腔調比第一位好,但講話速度超快,要非常專心才能免強跟上。
同時這位也是 Mobile App 部門的大主管。
內容一樣是關於View - VIPER Module 的架構設計、A/B 測試的架構設計、
A/B 測試的回報機制的架構設計。
結論:
其實 On-Site Interview 中,幾乎每一個問題都是申論題,沒有最佳解。
但必須要為自己所做的每個決定說出原因。
譬如說你是依據什麼什麼原則,所以才做出這樣的決定,這點是非常重要的。
尤其是當你知道理論後,你也要有一個例子來說明理論,代表你真的有理解
而不是背下來。
至於為什麼我被問的問題幾乎都是跟架構有關,有可能是因為當他們問我
未來的目標是什麼的時候,我都說我想往架構師這條路前進吧。
作者: fir131 (李大威)   2017-08-31 16:18:00
想知道Offer 大概落在什麼區間 可以透露一下嗎XDD
作者: dreamnook (亞龍)   2017-08-31 16:31:00
猜測1.5m
作者: Eos (美麗時光)   2017-08-31 17:09:00
好累的面試 沒2M都要考慮一下
作者: Boston (Boston)   2017-08-31 17:14:00
推 用心! 但也滿好奇薪資能談到多少 XD
作者: B1ack3y3 (B1ack3y3)   2017-08-31 17:15:00
薪資的部分老實說我不知道該不該透露,畢竟A家裡面也有很多的臺灣人。不知道這樣好不好..(汗
作者: drak4dd (drak4dd)   2017-08-31 17:17:00
前幾個禮拜有一篇AMS 2.4M他是說跟glassdoor差不多所以這樣推測好奇agoda跟glassdoor 上寫的差不多嗎
作者: franklyOAO (Fiiight)   2017-08-31 17:28:00
好奇大大背景與offer內容,可以讓後輩們參考一下XD
作者: Y78 (Y78)   2017-08-31 17:32:00
作者: B1ack3y3 (B1ack3y3)   2017-08-31 17:47:00
@drak4dd 可以提供 glassdoor 的連結嗎?我之前找不到@@我找到了,但上面沒有App相關 Q_Q
作者: drak4dd (drak4dd)   2017-08-31 18:57:00
https://goo.gl/mgQq7u 如果是這頁,看起來跟台灣差不多
作者: EraKing (防禦率王)   2017-08-31 19:00:00
看了agoda各地的薪資,有些失望
作者: mshang (Mike)   2017-08-31 20:57:00
看 glassdoor 上,七到九年經驗九萬多泰銖感覺在台灣有相同經驗的要超過不是很難如果是真的,很好奇這樣怎麼跟歐洲的薪水競爭
作者: robler (章魚丸)   2017-08-31 21:31:00
三小 九萬泰銖 真的假的
作者: mshang (Mike)   2017-08-31 21:52:00
對阿,B87k - B94k/mo,senior software engineermanager 是有破十萬泰銖
作者: gs8613789 (Shang6029)   2017-09-01 02:25:00
強者推
作者: xczh (XC)   2017-09-01 03:39:00
薪資沒多很多,如果為了增廣見聞是可以去
作者: ntddt (滅頂,降公投罷免門檻)   2017-09-01 09:08:00
推挑戰海外工作!
作者: bug147123 (HowDoYouTurnThisOn)   2017-09-01 10:01:00
感謝分享
作者: ownlai (旺來)   2017-09-01 10:01:00
我認為你在計算薪資成長時,不要用台灣雙薪去跟曼谷單薪比,畢竟去曼谷你老婆就算沒上班時間也是多出來。另外你再下一份工作談薪時,也會以你當下薪水為基準,所以可以看跟想遠一點。
作者: leutk (下雨天)   2017-09-01 11:05:00
曼谷市區住起來比台北貴 但是相對成長也比較快 外商也多如果這薪水跟家庭背景 是不太建議去以後小孩光是讀好一點的學校可能學費就負擔不起了
作者: leavefly (leavefly)   2017-09-01 11:15:00
interview跟一線軟體有得拚1xW鎂不過分吧往上一看..給那什麼香蕉..去找猴子去local package要求跟recruiting process搞得像一線大廠那不就是給2個香蕉請大金剛嗎
作者: chankeye (chankeye)   2017-09-01 15:59:00
稅前不到2m,又沒有任何補助,面試還這麼硬...有點誇張,不曉得有沒有機會內轉去別的國家
作者: viper9709 (阿達)   2017-09-01 23:50:00
推~感謝分享
作者: Ghosso (居關)   2017-09-02 00:13:00
推!VIPER!!
作者: hellomotogg (你好機車)   2017-09-03 03:40:00
作者: ringo543 (雷龍出國了~~帳號代管中)   2017-09-03 18:36:00
這樣的薪水太少了 單身就算了 成家的人真的不夠你的考量很正確的 另外priceline集團還是一樣薪水不高booking.com 也是一樣給低薪 但是面試用10w美起跳的規格我幾年前面試到第三關 on site前主管老實跟我說薪水範圍我就取消後面了 因為浪費一堆時間package卻讓人失望
作者: B1ack3y3 (B1ack3y3)   2017-09-03 18:43:00
似乎priceline集團旗下的都差不多啊……
作者: NAMESTANLY (Stanley~ New life)   2017-09-05 01:22:00
這條件 在台灣薪水也不差吧

Links booklink

Contact Us: admin [ a t ] ucptt.com