作者jimmy789lee (LEVEL_UP)
看板Soft_Job
标题[心得] Senior iOS 面试/分享
时间Sat Dec 18 15:27:20 2021
哈罗,大家好,版上已经很久没有 iOS 相关的分享了,而且好像没看过 Senior 的文章
我来分享最近这阵子找工作的经验抛砖引玉,看能不能吸引到各路大神来分享
先自我介绍一下,本人学历是 NTUEE 学硕,在亚东医院的系统/软体公司工作了四年,在
最後有升到 Senior,参与过的事项大概如下
1. 参与过多个 app 的维护,和新 app 开发
2. 帮忙从零开始架设内部的 Jenkins 和 fastlane
3. 从没有 framework 版控的情况导入 CocoaPods 和 SPM
搜寻职缺:
1. 求职网站:
Yourator, CakeResume, Meet.jobs 等等,大部分的职缺距离目标薪资还有一段距离,
不然就是接近上限才能达到,後来我没有从这边丢履历
2. LinkedIn Jobs:
这里比上一个方法好的是容易搜寻可远端的工作,找到感兴趣的职缺还满多的。但後来
都没有投,因为要针对公司来修改 CV 要花很多精力
3. Hunter:
後来先作了一个 CV 的样板,把 LinkedIn 的状态更改为积极求职中,就陆续有 hunter
来联络了。後来有去面试的公司都是从 hunter 来的
Hunter 推荐被拒绝:
9 Count-Wink:这家觉得我开 1.8M 太高了,他们的上限似乎是 1.4~1.5
有投还没结果:
Amazon Ring: 已经在 Ring 内部建档了,但都没消息
进到面试流程的公司:
(新公司), 17-Wave, Xendit, Omlet, Swag, Ubiquiti, Foodpanda
面试的过程都差不多:自我介绍、白板题、测验 iOS 知识、互相问问题
下面如果没有比较特别的事项就不再花篇幅介绍
底下针对每间公司顺序作介绍,新公司放到最後,因为特别想分享他们的面试题目
17-Wave:
第一部分要设计一个聊天室,包括 UI, Cache, DB, API 大概的组成。这部分都是透过口
述进行,所以没办法说得很清楚
如果可以重来的话,应该要开 draw.io 直接画出来,可以避免来回确认,也方便後续讨论
第二部分是前一部分的延伸,如果现在有高流量的讯息要怎麽处理?
UI 会不会卡(DB lock, main queue 更新时机)? API 怎麽变更设计? ...
这部分我应该就回答得不太好,因为我确实没有处理高流量的经验
结果:Wave 通知 hunter 结束面试
Xendit: (全英文面试)
有面试前的线上测验,十几题选择题和一题程式。
题目内容很广,除了 iOS 以外还有问一些网路、资料库方面的问题
除了有一题问 Http Auth 的完全看不懂以外,其他的我记得不会很困难
据 hunter 的回馈是他推荐的其他人选都没有通过测验就是了
通过测验之後与技术主管面试,刚好前一天去打疫苗,面试的时候头昏昏的
连我自己都觉得讲得很烂,不到半小时就结束面试QQ
结果:Xendit 通知 hunter 结束面试
Omlet:
这家的产品不太作宣传,但用户数量满惊人的,应该是满有潜力的公司
有面试前的作业,内容不能透漏,有测验到的技能是:
data decode, UICollectionView,还有一个加分项目
通过测验之後到现场面试,一次来四个面试官。面试过程没有比较特别的题目
考了两题演算法,和一个实作画面(怎麽拆 view, 比较复杂的 autolayout 设定)
另外公司有一定比例的外籍人士,有一段面试过程要求用英文回答
结果:隔天收到感谢函
Swag:
有两题面试前的题目,我判断难度应该都是 easy
通过测验之後到现场面试,问问题的过程中,感觉到特别注重 GCD 系列 api 的用法
sync, async, serial concurrent, semaphore, group 等等
履历的部分问得非常详细,是所有面试的公司问得最多的,应该是所有写到的东西都问了
像是我写到有 RxSwift 的经验,就问了导入的时候有遇到什麽困难、怎麽处理,另外问知
不知道 Rx 後面的原理(Observer),怎麽实作
另外我有提到 UI/Unit test, refactor,就问了是从专案的什麽方向切入开始作,策略是
什麽,怎麽兼顾 release 的时程
後面还问了很多以前团队运作的流程、怎麽协作分工,以及各式各样的问题。应该是把所
有能想到的东西都问了一遍,是所有面试里面耗时最长的,花了两个小时左右
*很重要的一点,这里以後的主力会是 Flutter 开发,不过团队偏小,我记得目前是5人
结果:等待中
Ubiquiti:
团队目前有这在开发的产品,IOT相关,我猜应该和 Amazon Ring 是类似的东西,但是
Ubiquiti 有网通产品,应该有比较深度的整合。进去之後会加入这个团队
没有问比较特别的问题
结果:收到其他 offer 了,通知 hunter 结束面试
Foodpanda: (全英文面试)
有两题面试前的题目,我判断难度也都是 easy。限时一小时,我19分钟完成 AC 100%
通过测验之後由新加坡的人资面是,根据资我介绍和履历的内容询问过去的经验
另外特别提到目前团队主要使用 MVVM, VIPER
结果:太晚开始这间的面试,加上我判断可能难以 compete offer,婉拒後续面试
新公司: (全英文面试)
第一关: mobile head - 问答 (一小时)
一开始介绍公司的产品,内部的开发流程、团队组成
接下来问了一些 iOS 相关的问题,没有太深入,不过有问到一些没那麽常用的 api
- frame, bounds 的区别
- 解释 autolayout 的 compress, hugging priority
第二关: iOS Developer - live coding (一小时)
第一大题是给一个截图实作目标画面,并且从指定的 api 拉资料
先用假资料来把画面建出来:UI 的部分是 CompositionalLayout, DiffableDataSource,
CellRegistration,资料部分是 Codable,这里应该都算基本功
再来是要从 url 下载图片显示到 cell 里,这里就注意 background 和 main 切换
再来问分页式的 api 要在什麽时机呼叫,让画面可以随着卷动载入更多资料
第二大题要实作一个 UIScrollView subclass,让他可以有好多个 delegate
有要求一个介面来新增 delegate ( addDelegate(_ delegate: UIScrollViewDelegate )
我的作法是这样
1. init 之後设定 self.delegate = self
2. 宣告一个容器来装所有 delegate (var delegates: [UIScrollViewDelegate])
3. 实作每个 delegate function,传给第二步容器内的每个元素
不过这里有个陷阱是 Swift 并没有 weak array,但又必须让 delegate 是 weak ref
这里有想了一下,在面试官稍微提示之後想出来
第三题问知不知道 Optional 的实作,是两个 Case 的 enum (应该是常识?)
第四题先要我解释一下 weak, strong ref,然後问怎麽实作一个像 ARC 的系统
这里的话就是先分析一下 ARC 的规则:
1. A ref B, B ref count +1
2. ref count 归零,物件 release
第一条规则就是系统需要记住 B 被哪些人 ref,这个关系和物件被持有的方向是反过来的
第二条规则就是 A 被 release 之後,需要类似 notification 的机制找到所有被 A ref
的物件,然後把 A 从 ref list 删除
这一关的面试应该算非常顺利,有被面试官称赞对 api 很熟悉,比较困难的部分也在一点
点提示之後就想出解法,面试官看起来很意外,一直被称赞
本来一小时的安排应该只有前两大题,因为前面比较顺利所以又多了後面的部分
第三关: iOS lead - live pseudo coding
考的是系统设计,题目是设计一个西洋棋的系统,让两个玩家可以进行游戏,不用考虑 AI
我的设计是分成 Player, protocol Piece, GameRunner
判断棋子移动和吃子规则写在十作 Piece 的 type 里面
GameRunner 会记录盘面,判断获胜条件等等的
follow up 问:如果现在有个新种类的棋子,是骑士和城堡的合体,要怎麽实作
这里就是用 composition 把新的类型实作出来
结果:offer get
薪资:>2M + RSU + sign on
最後结果是只拿到一个 offer,不过已经有达到期望,其他进行中的可能也比较难compete
不然就是要等很久,再加上密集面试也累了,就结束之後的面试
最後分享一些准备面试的心得
- 刷题?
我对白板题的看法是没有需要特别准备,除非你是新人或者要面 FAANG
我自己是刷个一两题 Easy, Medium,找一下解题的手感而已
虽然前公司也是以困难的白板题出名,但这可能是必要之恶
对新人来说,没有经历可以证明程度;对大公司来说,必须快速筛掉大量的履历
但是对 Senior 来说,对苹果生态的熟系度还有建立架构的能力我觉得比解题重要多了
工作中实际需要自己实作的可能也就 BFS, DFS,剩下的在 Foundation 都有了
- 英文能力
我认为有英文沟通的能力绝对是在职涯上更进一步的关键,但这并不表示英文能力是第一
顺位,有一定程度的实力再来加强英文可能是比较适当的做法
加强的办法我自己是多听一些 podcast 和 youtube,习惯一下各种语速和口音
准备面试的部分,可以把自我介绍的内容写成稿,然後务必要试着讲几遍
follow up 会被问的部分心里也要有大概的剧本
再来是回答的时候不要紧张,也不要太担心文法是否正确,慢慢讲,确保内容清楚就好
- 进修资源
等 Xcode compile 或是通勤的时候就可以多翻翻
1. twitter: 很多大佬都挂在上面,可以获得很多第一手踩 bug 的资讯
2. 大佬的网站,推荐几个
- General:
- John Sundell: 大佬中的大佬,特色是用不会太长的篇幅解释各种观念和语法
另外有经营 podcast,邀请各式各样的开发者上节目
- Hacking With Swift: 比较偏初学的资源,但偶尔还是会找到有趣的东西
- SwiftUI:
- Swift with Majid: 比较进阶的技巧,也许是奇技淫巧的范围,有点难拿捏
- Mark Moeykens: 有一些免费的电子书
3. 付费资源:
- PointFree: Composable Architecture 的作者,目前有几十小时的内容,除了介绍
TCA,我觉得更重要的是它引导 functional 观念的部分,大推
- Essential Developer: 处理架构和测试非常厉害,有在 youtube 直播 live
mentoring session,大推
4. 周报类:
- 13: 13 大大的周报
- 老司机周报: 简体中文。这里有时候混很多 Flutter 的玩意就是了,哭啊
- iOS Dev Weekly: 老字号英文周报
5. Swift 本身 Evolution, Proposal:
- 行有余力的话可以来这里看看,也可以翻翻看之前的 roadmap。了解一下大佬的思考
过程,也可以了解一下 Swift feature 是怎麽产生的
大家有什麽想讨论的,欢迎在下面留言
如果有什麽不方便公开讨论,或是想询问我的问题,可以站内信
或是想办法找到我在其他平台的帐号直接私讯我(应该没有很难找?)
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.171.101.163 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1639812442.A.433.html
1F:推 Raymond0710: 恭喜!推!好奇第一份工作怎麽会选择医院 12/18 15:33
2F:→ Cprimer: 楼上误会了 应该是群晖 12/18 15:40
3F:推 kyrie77: 推 12/18 15:43
4F:推 energyaup6: 强者一生推 <(_ _)> 12/18 16:41
5F:推 dapple: 感谢分享 12/18 16:45
6F:→ final01: 虽然看到後面会知道是群晖,不过前面也不用这样写吧... 12/18 16:58
7F:推 ID3238: 推一个 内容很扎实 好奇後续去哪边就职? 12/18 18:05
8F:推 tofuflower: 好奇问问你觉得现在资深 iOS 两百的职缺好找吗?web 12/18 18:48
9F:→ tofuflower: 後端我觉得现在资深那两百不会太难找(当然也不是随 12/18 18:48
10F:→ tofuflower: 便都有两百),不知道是不是自己同温层。 12/18 18:48
11F:推 asleisureto: 原来是群晖,本来还想说能从医院it直接跳2M很天生神 12/18 19:13
12F:→ asleisureto: 力XD 12/18 19:13
13F:推 Obama19: Wave有高流量? 12/18 19:13
14F:推 lonelymmm: 大推,祝楼主一生平安 12/18 19:19
15F:推 humanfly: 看了很久还想说学历这麽好跑去医院 12/18 19:30
16F:→ jimmy789lee: tofuflower,我觉得不太容易找,基本上只有hunter给 12/18 19:31
17F:→ jimmy789lee: 的缺才有达标的,可能我也需要精进一下怎麽在Linke 12/18 19:31
18F:→ jimmy789lee: dIn上找到好职缺的眼力吧 12/18 19:31
19F:推 x246libra: 厉害,英文真的是坎,好无力 12/18 19:32
20F:→ keyboard56: 看来200的缺真的凤毛麟角,大部分150比较多一点 12/18 19:35
21F:推 popcool: 从面试内容大概猜到新公司是哪家,没想到後面这麽硬,原p 12/18 19:38
22F:→ popcool: o真高手 12/18 19:38
23F:推 wei12f8158: 推强者 12/18 19:59
24F:推 Hack: 真强者 推 12/18 20:04
25F:推 WaterLengend: 资源整理推 12/18 21:10
26F:推 shiauji: 推分享 12/18 21:14
27F:推 ohmylove347: 推 12/18 21:19
28F:推 gragon: 我也以为在医院 12/18 23:06
29F:推 andy9595995: 大大太强,推分享 12/19 00:03
30F:推 holebro: 好想去群晖喔 12/19 00:05
31F:→ DrTech: NTU的找工作分享文都很有系统,个人想法,与逻辑啊。真的 12/19 00:12
32F:→ DrTech: 很欣赏有想法,有系统化找工作的人。 12/19 00:12
33F:推 eric111043: 推强者 12/19 01:21
34F:推 zmcx16: 推 12/19 01:44
35F:推 genius945: 推,强大的分享 12/19 11:15
36F:推 jj2564: 大推,感谢分享! 12/19 12:20
37F:推 MiracleShot: 恭喜升级了! 12/19 12:39
38F:推 bewitchsky: 推 12/19 15:49
39F:推 Funkshow: 跪了 12/19 16:07
40F:推 IhateOGC: 想去swag 12/19 19:56
41F:推 Mike1109: 推推 期待大神分享更多iOS相关心得 12/19 23:52
42F:推 jiujibye: 感谢分享 12/20 00:56
43F:推 kattte: 感谢分享 12/20 02:04
44F:推 hellomotogg: 推推 12/20 02:47
45F:推 worcdlo: 推,一直在想是否别急着出国,去贵司先待两年会更好 12/20 18:44
46F:推 kids1243: 推 12/20 19:21
47F:推 cacadeon: 感谢分享 12/20 20:05
48F:推 bewitchsky: 推 12/23 21:26
49F:推 mike8469: 大推! 12/25 11:57