Agoda - Senior iOS Developer @ Bangkok - offer

Wallis avatar
By Wallis
at 2017-08-31T16:06

Table of Contents

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 為免隱私問題,移除部分日期

--

All Comments

Brianna avatar
By Brianna
at 2017-09-04T02:41
好詳細
Rebecca avatar
By Rebecca
at 2017-09-08T17:11
曼谷offer多少?荷蘭德國薪資也不高,稅超高!
Zenobia avatar
By Zenobia
at 2017-09-09T04:08
Agoda開多少?荷蘭和德國稅後薪資不高喔,你為什麼想去
歐洲
Kyle avatar
By Kyle
at 2017-09-12T17:45
想去歐洲是著眼在環境,曼谷的稅後薪資其實跟我和我老婆
Lauren avatar
By Lauren
at 2017-09-13T02:32
在台灣的稅後薪資加總後沒高多少,但必須多負擔房租費用
所以去曼谷的話反而還比在台灣賺的少...
BTW, 環境指的是生活環境
Jacky avatar
By Jacky
at 2017-09-17T23:22
那如果你在意稅後薪資歐洲一定會讓你失望...
Dorothy avatar
By Dorothy
at 2017-09-22T19:40
軟體工程師年薪glassdoor有, 存的錢會比在台灣領百萬年
Connor avatar
By Connor
at 2017-09-23T10:46
薪少. 如果你老婆非理工不會德語或荷語, 大概也找不到
Brianna avatar
By Brianna
at 2017-09-26T04:44
工作, 你們總收入更比不上台灣, 只贏在環境跟工時.
Hedy avatar
By Hedy
at 2017-09-27T12:49
抱歉...不知道有沒有修到你的推文
Hedy avatar
By Hedy
at 2017-09-29T21:39
工時也是一個重點
Jake avatar
By Jake
at 2017-10-04T07:00
荷蘭工作需要會荷語嗎? 最近才完成一個和荷蘭人的合
作,他們英文超好的,德國的話不會德語大概是很難找工
Ingrid avatar
By Ingrid
at 2017-10-05T11:49
作...
Belly avatar
By Belly
at 2017-10-08T19:24
之前面Berlin的AMZN有經驗也面不錯,也才談到7萬...稅40
%...房租一個月1500
Megan avatar
By Megan
at 2017-10-09T03:22
普通軟體公司都在4-6W之間而已
Andy avatar
By Andy
at 2017-10-13T17:13
不會荷語非理工, 如果你在臺灣能進得去一線外商還有機會
Victoria avatar
By Victoria
at 2017-10-14T13:46
當地大部分公司還是需要荷語, 不會講第一關就刷掉了
Agatha avatar
By Agatha
at 2017-10-15T05:15
原來如此...德國的話我妹有很不錯的學歷但是德語沒到
C1 然後沒有工作經驗大公司也幾乎都不要就是了
Emily avatar
By Emily
at 2017-10-17T12:36
有看有推長知識
Puput avatar
By Puput
at 2017-10-21T15:55
我來歐洲旅行多次,每次來的感想就是,好漂亮,好好玩,
但東西好難吃,很多地方很髒亂,所以來旅行很ok,要我長
住還要拿低薪那真的是免了
Rachel avatar
By Rachel
at 2017-10-26T13:35
我覺得東西很好吃耶XD... 我反而不習慣台灣的食物了
添加物太多, 但是歐洲真的稅很高, 稅後薪水剩沒多少
在台灣沒房貸的話, 其實可能可以存比較多
Damian avatar
By Damian
at 2017-10-28T04:25
台北租出去補貼就好,成家上班族,能出去還是跑一跑

美國失業補助疑問

Rosalind avatar
By Rosalind
at 2017-08-31T13:18
大家好~ 原PO目前狀態為有身分並任職於南加, 但因目前還在攻讀碩士學位, 蠟燭兩頭燒的狀態實在沒辦法兩者兼顧。 關於EDD相關資料已爬文, 但似 ...

台灣資產美國報稅

Audriana avatar
By Audriana
at 2017-08-31T13:01
我去年4月拿到綠卡,但今年報稅時並沒有申報台灣的資產 現在跟會計師file 1040x, 有以下幾個問題 1. 因為外公的公司廠房去年10月出售, 我持有因母親過� ...

9/20 TEiUK分享會 我到英國工作學到的事

Elizabeth avatar
By Elizabeth
at 2017-08-30T20:28
【9/20 TEiUK 分享會: 那些年,我們到英國工作學到的事】 Hello 各位科技圈的朋友, 我是 Aaron,目前在倫敦 Old Street 附近的一家新創公司擔任前端工程�� ...

代po 亞洲vs歐洲

Mason avatar
By Mason
at 2017-08-29T23:43
如題 如果回亞洲(香港.新加坡.中國) 職涯有比較大的發展性 可以賺比較多的$ 或是留在歐洲 比較少$ 但是生活上比較沒那麼緊湊 不知道大家會選 ...

香港紅磡找室友

Andrew avatar
By Andrew
at 2017-08-28T01:29
果然來PTT找室友是對的! 我已經找到室友了 講沒幾句話就能說台語的感覺好自在XDDD 班上一位我媽擠北京妹很喜歡台灣 跟我一樣同住在海韻軒 不過她� ...