[心得] Agoda - Senior iOS Developer @ Bangkok

看板Soft_Job (軟體人)作者 (B1ack3y3)時間8年前 (2017/08/31 16:08), 8年前編輯推噓21(21027)
留言48則, 24人參與, 最新討論串1/1
※ [本文轉錄自 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 中,幾乎每一個問題都是申論題,沒有最佳解。 但必須要為自己所做的每個決定說出原因。 譬如說你是依據什麼什麼原則,所以才做出這樣的決定,這點是非常重要的。 尤其是當你知道理論後,你也要有一個例子來說明理論,代表你真的有理解 而不是背下來。 至於為什麼我被問的問題幾乎都是跟架構有關,有可能是因為當他們問我 未來的目標是什麼的時候,我都說我想往架構師這條路前進吧。 ---- 結果: Offer Get,基本底薪也跟我開出去的一樣,但因 package 內容與預期不符, 現在正試著重談薪水。 如果沒有談成功,應該就不會接 offer 了,畢竟結了婚要考慮的人事物變多了.. 另一方面,其實我最想去的地方是歐洲(荷蘭 / 德國), 有沒有鄉民願意幫我介紹工作 Q_Q 本文起始於:2017 / 08 / 31 03:00 AM 第一版完成於:2017 / 08 / 31 02:40 PM 第二版修改於:2017 / 08 / 31 為免隱私問題,移除部分日期 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.32.32.253 ※ 文章網址: https://www.ptt.cc/bbs/Oversea_Job/M.1504166797.A.558.html ※ 發信站: 批踢踢實業坊(ptt.cc) ※ 轉錄者: B1ack3y3 (114.32.32.253), 08/31/2017 16:08:48

08/31 16:18, , 1F
想知道Offer 大概落在什麼區間 可以透露一下嗎XDD
08/31 16:18, 1F

08/31 16:31, , 2F
猜測1.5m
08/31 16:31, 2F
※ 編輯: B1ack3y3 (114.32.32.253), 08/31/2017 16:38:10

08/31 17:09, , 3F
好累的面試 沒2M都要考慮一下
08/31 17:09, 3F
稅前確實沒有到2M

08/31 17:14, , 4F
推 用心! 但也滿好奇薪資能談到多少 XD
08/31 17:14, 4F

08/31 17:15, , 5F
薪資的部分老實說我不知道該不該透露,畢竟A家裡面也有
08/31 17:15, 5F

08/31 17:15, , 6F
很多的臺灣人。不知道這樣好不好..(汗
08/31 17:15, 6F

08/31 17:17, , 7F
前幾個禮拜有一篇AMS 2.4M
08/31 17:17, 7F

08/31 17:18, , 8F
他是說跟glassdoor差不多所以這樣推測
08/31 17:18, 8F

08/31 17:19, , 9F
好奇agoda跟glassdoor 上寫的差不多嗎
08/31 17:19, 9F

08/31 17:28, , 10F
好奇大大背景與offer內容,可以讓後輩們參考一下XD
08/31 17:28, 10F
我的話, 從 iOS 3.1.3 開始寫iOS一路到現在, 雖然不是非常的厲害, 但應該也算累積了不少經驗。 至於offer內容, 我只能說我原本預期的 package 有包含租屋津貼、保險、回台機票 租屋津貼與回台機票沒有我可以接受, 因為畢竟不是公司外派到其他國家。但連保險 都得自己處理我就覺得比較奇怪了, 畢竟一個月也才六七千台幣。 至少我認識的幾位之前在台灣外商當過主管的都覺得這點不OK, 甚至直接說這間公司有點血汗。

08/31 17:32, , 11F
08/31 17:32, 11F

08/31 17:47, , 12F
@drak4dd 可以提供 glassdoor 的連結嗎?我之前找不到@@
08/31 17:47, 12F

08/31 17:57, , 13F
我找到了,但上面沒有App相關 Q_Q
08/31 17:57, 13F

08/31 18:57, , 14F
https://goo.gl/mgQq7u 如果是這頁,看起來跟台灣差不多
08/31 18:57, 14F

08/31 19:00, , 15F
看了agoda各地的薪資,有些失望
08/31 19:00, 15F

08/31 20:57, , 16F
看 glassdoor 上,七到九年經驗九萬多泰銖
08/31 20:57, 16F

08/31 20:58, , 17F
感覺在台灣有相同經驗的要超過不是很難
08/31 20:58, 17F

08/31 21:02, , 18F
如果是真的,很好奇這樣怎麼跟歐洲的薪水競爭
08/31 21:02, 18F
我個人是覺得沒競爭力, Agoda的缺最早有一位歐洲的HH找我談, 資料上是寫European Level Package, 所以我一直都還滿期待的, 而面試的過程中也一直強調Agoda在package上面非常的大方, 沒想到結果是這樣....

08/31 21:31, , 19F
三小 九萬泰銖 真的假的
08/31 21:31, 19F

08/31 21:52, , 20F
對阿,B87k - B94k/mo,senior software engineer
08/31 21:52, 20F

08/31 21:53, , 21F
manager 是有破十萬泰銖
08/31 21:53, 21F
薪資的詳細數字我不好說, 但我拿到的沒有像Glassdoor上的少。 甚至以曼谷本地人的薪水來說, 算是非常高的了。 但以我的狀況來說, 稅後月薪轉換成台幣 比我和我老婆在台灣的稅後月薪總和多一兩萬而已, 如果再把 曼谷當地的房租考慮進去, 薪資成長反而是負的。 (當然, 房租要不要考慮進去是看個人) ※ 編輯: B1ack3y3 (111.250.159.129), 09/01/2017 01:46:15

09/01 02:25, , 22F
強者推
09/01 02:25, 22F

09/01 03:39, , 23F
薪資沒多很多,如果為了增廣見聞是可以去
09/01 03:39, 23F
原先的目的確實是為了增廣見聞沒有錯, 但結了婚有家庭要顧 加上在台灣並沒有累積太多積蓄, 所以得考慮的面向有點多 如果我目前仍然單身的話當然就衝了

09/01 09:08, , 24F
推挑戰海外工作!
09/01 09:08, 24F

09/01 10:01, , 25F
感謝分享
09/01 10:01, 25F

09/01 10:01, , 26F
我認為你在計算薪資成長時,不要用台灣雙薪去跟曼谷單薪
09/01 10:01, 26F

09/01 10:01, , 27F
比,畢竟去曼谷你老婆就算沒上班時間也是多出來。另外你再
09/01 10:01, 27F

09/01 10:01, , 28F
下一份工作談薪時,也會以你當下薪水為基準,所以可以看
09/01 10:01, 28F

09/01 10:01, , 29F
跟想遠一點。
09/01 10:01, 29F
我老婆沒上班我就得當她的ATM了 Q_Q

09/01 11:05, , 30F
曼谷市區住起來比台北貴 但是相對成長也比較快 外商也多
09/01 11:05, 30F

09/01 11:06, , 31F
如果這薪水跟家庭背景 是不太建議去
09/01 11:06, 31F

09/01 11:06, , 32F
以後小孩光是讀好一點的學校可能學費就負擔不起了
09/01 11:06, 32F
我老婆的朋友有帶我們在市區繞繞, 順便看一下住的地方。 我跟我老婆比較能夠接受的房子月租也要至少兩萬五起跳...

09/01 11:15, , 33F
interview跟一線軟體有得拚1xW鎂不過分吧
09/01 11:15, 33F

09/01 11:16, , 34F
往上一看..給那什麼香蕉..去找猴子去
09/01 11:16, 34F
畢竟算是 local package 吧? ※ 編輯: B1ack3y3 (111.250.159.129), 09/01/2017 12:24:38

09/01 13:42, , 35F
local package要求跟recruiting process搞得像一線大廠
09/01 13:42, 35F

09/01 13:43, , 36F
那不就是給2個香蕉請大金剛嗎
09/01 13:43, 36F

09/01 15:59, , 37F
稅前不到2m,又沒有任何補助,面試還這麼硬...有點誇張
09/01 15:59, 37F

09/01 15:59, , 38F
,不曉得有沒有機會內轉去別的國家
09/01 15:59, 38F

09/01 23:50, , 39F
推~感謝分享
09/01 23:50, 39F

09/02 00:13, , 40F
推!VIPER!!
09/02 00:13, 40F

09/03 03:40, , 41F
09/03 03:40, 41F

09/03 18:36, , 42F
這樣的薪水太少了 單身就算了 成家的人真的不夠
09/03 18:36, 42F

09/03 18:38, , 43F
你的考量很正確的 另外priceline集團還是一樣薪水不高
09/03 18:38, 43F

09/03 18:38, , 44F
booking.com 也是一樣給低薪 但是面試用10w美起跳的規格
09/03 18:38, 44F

09/03 18:39, , 45F
我幾年前面試到第三關 on site前主管老實跟我說薪水範圍
09/03 18:39, 45F

09/03 18:39, , 46F
我就取消後面了 因為浪費一堆時間package卻讓人失望
09/03 18:39, 46F

09/03 18:43, , 47F
似乎priceline集團旗下的都差不多啊……
09/03 18:43, 47F

09/05 01:22, , 48F
這條件 在台灣薪水也不差吧
09/05 01:22, 48F
文章代碼(AID): #1PfyGIcN (Soft_Job)
文章代碼(AID): #1PfyGIcN (Soft_Job)