作者B1ack3y3 (B1ack3y3)
看板Soft_Job
标题Fw: [亚洲] Agoda - Senior iOS Developer @ Bangkok
时间Thu Aug 31 16:08:48 2017
※ [本文转录自 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://webptt.com/cn.aspx?n=bbs/Oversea_Job/M.1504166797.A.558.html
※ 发信站: 批踢踢实业坊(ptt.cc)
※ 转录者: B1ack3y3 (114.32.32.253), 08/31/2017 16:08:48
1F:推 fir131: 想知道Offer 大概落在什麽区间 可以透露一下吗XDD 08/31 16:18
2F:→ dreamnook: 猜测1.5m 08/31 16:31
※ 编辑: B1ack3y3 (114.32.32.253), 08/31/2017 16:38:10
3F:推 Eos: 好累的面试 没2M都要考虑一下 08/31 17:09
税前确实没有到2M
4F:推 Boston: 推 用心! 但也满好奇薪资能谈到多少 XD 08/31 17:14
5F:→ B1ack3y3: 薪资的部分老实说我不知道该不该透露,毕竟A家里面也有 08/31 17:15
6F:→ B1ack3y3: 很多的台湾人。不知道这样好不好..(汗 08/31 17:15
7F:推 drak4dd: 前几个礼拜有一篇AMS 2.4M 08/31 17:17
8F:→ drak4dd: 他是说跟glassdoor差不多所以这样推测 08/31 17:18
9F:→ drak4dd: 好奇agoda跟glassdoor 上写的差不多吗 08/31 17:19
10F:推 franklyOAO: 好奇大大背景与offer内容,可以让後辈们参考一下XD 08/31 17:28
我的话, 从 iOS 3.1.3 开始写iOS一路到现在, 虽然不是非常的厉害,
但应该也算累积了不少经验。
至於offer内容, 我只能说我原本预期的 package 有包含租屋津贴、保险、回台机票
租屋津贴与回台机票没有我可以接受, 因为毕竟不是公司外派到其他国家。但连保险
都得自己处理我就觉得比较奇怪了, 毕竟一个月也才六七千台币。
至少我认识的几位之前在台湾外商当过主管的都觉得这点不OK,
甚至直接说这间公司有点血汗。
11F:推 Y78: 推 08/31 17:32
12F:→ B1ack3y3: @drak4dd 可以提供 glassdoor 的连结吗?我之前找不到@@ 08/31 17:47
13F:→ B1ack3y3: 我找到了,但上面没有App相关 Q_Q 08/31 17:57
15F:推 EraKing: 看了agoda各地的薪资,有些失望 08/31 19:00
16F:推 mshang: 看 glassdoor 上,七到九年经验九万多泰铢 08/31 20:57
17F:→ mshang: 感觉在台湾有相同经验的要超过不是很难 08/31 20:58
18F:→ mshang: 如果是真的,很好奇这样怎麽跟欧洲的薪水竞争 08/31 21:02
我个人是觉得没竞争力, Agoda的缺最早有一位欧洲的HH找我谈,
资料上是写European Level Package, 所以我一直都还满期待的,
而面试的过程中也一直强调Agoda在package上面非常的大方,
没想到结果是这样....
19F:→ robler: 三小 九万泰铢 真的假的 08/31 21:31
20F:→ mshang: 对阿,B87k - B94k/mo,senior software engineer 08/31 21:52
21F:→ mshang: manager 是有破十万泰铢 08/31 21:53
薪资的详细数字我不好说, 但我拿到的没有像Glassdoor上的少。
甚至以曼谷本地人的薪水来说, 算是非常高的了。
但以我的状况来说, 税後月薪转换成台币
比我和我老婆在台湾的税後月薪总和多一两万而已, 如果再把
曼谷当地的房租考虑进去, 薪资成长反而是负的。
(当然, 房租要不要考虑进去是看个人)
※ 编辑: B1ack3y3 (111.250.159.129), 09/01/2017 01:46:15
22F:推 gs8613789: 强者推 09/01 02:25
23F:推 xczh: 薪资没多很多,如果为了增广见闻是可以去 09/01 03:39
原先的目的确实是为了增广见闻没有错, 但结了婚有家庭要顾
加上在台湾并没有累积太多积蓄, 所以得考虑的面向有点多
如果我目前仍然单身的话当然就冲了
24F:推 ntddt: 推挑战海外工作! 09/01 09:08
25F:推 bug147123: 感谢分享 09/01 10:01
26F:推 ownlai: 我认为你在计算薪资成长时,不要用台湾双薪去跟曼谷单薪 09/01 10:01
27F:→ ownlai: 比,毕竟去曼谷你老婆就算没上班时间也是多出来。另外你再 09/01 10:01
28F:→ ownlai: 下一份工作谈薪时,也会以你当下薪水为基准,所以可以看 09/01 10:01
29F:→ ownlai: 跟想远一点。 09/01 10:01
我老婆没上班我就得当她的ATM了 Q_Q
30F:推 leutk: 曼谷市区住起来比台北贵 但是相对成长也比较快 外商也多 09/01 11:05
31F:→ leutk: 如果这薪水跟家庭背景 是不太建议去 09/01 11:06
32F:→ leutk: 以後小孩光是读好一点的学校可能学费就负担不起了 09/01 11:06
我老婆的朋友有带我们在市区绕绕, 顺便看一下住的地方。
我跟我老婆比较能够接受的房子月租也要至少两万五起跳...
33F:→ leavefly: interview跟一线软体有得拚1xW镁不过分吧 09/01 11:15
34F:→ leavefly: 往上一看..给那什麽香蕉..去找猴子去 09/01 11:16
毕竟算是 local package 吧?
※ 编辑: B1ack3y3 (111.250.159.129), 09/01/2017 12:24:38
35F:推 leavefly: local package要求跟recruiting process搞得像一线大厂 09/01 13:42
36F:→ leavefly: 那不就是给2个香蕉请大金刚吗 09/01 13:43
37F:推 chankeye: 税前不到2m,又没有任何补助,面试还这麽硬...有点夸张 09/01 15:59
38F:→ chankeye: ,不晓得有没有机会内转去别的国家 09/01 15:59
39F:→ viper9709: 推~感谢分享 09/01 23:50
40F:推 Ghosso: 推!VIPER!! 09/02 00:13
41F:推 hellomotogg: 推 09/03 03:40
42F:推 ringo543: 这样的薪水太少了 单身就算了 成家的人真的不够 09/03 18:36
43F:→ ringo543: 你的考量很正确的 另外priceline集团还是一样薪水不高 09/03 18:38
44F:→ ringo543: booking.com 也是一样给低薪 但是面试用10w美起跳的规格 09/03 18:38
45F:→ ringo543: 我几年前面试到第三关 on site前主管老实跟我说薪水范围 09/03 18:39
46F:→ ringo543: 我就取消後面了 因为浪费一堆时间package却让人失望 09/03 18:39
47F:→ B1ack3y3: 似乎priceline集团旗下的都差不多啊…… 09/03 18:43
48F:推 NAMESTANLY: 这条件 在台湾薪水也不差吧 09/05 01:22