[心得] 硅谷 Sr. Android 面试心得

楼主: ray3226 (邦)   2020-11-25 07:25:11
网页好读版:https://aillynotes.com/android-interview/
【背景简介】
目前在Square当Senior Android Engineer,今年在职即将满四年,当年入职签约拿的
股票即将领完,想说出来试试看自己的身价,也顺便挑战一下自己。这次很幸运拿到6
个offer: Facebook, TikTok, Snapchat, Uber, Lyft, Instacart,下面来分享一下
一些心得,希望可以对未来找工作的人有帮助。
【心态】
我觉得心态其实很重要,不要把面试结果看得太重,搞得自己患得患失的。刚毕业的
时候,每次面试完都赶紧给recruiter发个感谢信。几天后没消息,又整天忐忑不安的
胡思乱想是不是哪里没面好。收到recruiter要约时间给update,但是信里又没说是好
还是坏又再那惴惴不安。其实后来想想都不是很必要,面试的结果,在你挂完电话或
是走出房间的同时,就已经决定了。你寄不寄感谢信,面完有没有催recruiter给你结
果,其实都不会影响结果。
四年前因为被裁员的关系,学生身份被迫要在90天内找到工作,压力山大。这次在心
态上比四年前轻松许多,因为在职跳槽,没有找不到工作就会失业的压力,表现得比
四年前更好。建议大家还是把心态调整好,面完了就赶紧准备下一家的面试,抓紧时
间,不要纠结在自己无法控制的事情上。
(当年失业心得:https://aillynotes.com/every-cloud-has-a-silver-lining/)
【策略】
比较没经验的人,或是对自己比较没把握的人,我建议先从比较不想去的公司开始面
,把想去的公司排在最后面面。如果一开始就面dream company,假使被拒了,后面很
可能心态就崩了。心态崩了面试也很难成功,导致负向的循环。先拿不怎么想去的公
司练手,可以先练习手感和节奏,心态上也比较没有压力。如果拿到offer了,还可以
增强自己的自信心。
有offer在手的气场去面试,跟跪求你给我offer的气场去面试,两者的表现是差很多
;就算没拿到offer也无所谓,反正本来就不想去。不管结果如何,每场面试都要虚心
检讨,被问倒的地方、回答起来不是很有把握的地方、写起来卡卡的地方等等,面完
就赶紧去补强自己不足的部分。
【准备】
Coding
刷题这招已经被讲烂了,要怎么刷网上很多资讯可以参考。比较没经验的建议刚开始
可以照题目类别来刷,这样比较好做系统性地整理复习。做到最后通常会发现:比较
不熟的都是某些特定的类别,譬如说我觉得DP特别难,我就针对DP类型的题目多加练
习。等复习的差不多即将开始面试的时候,就可以开始针对不同公司的tag开始刷高频
题,从最高频的一路往下刷,这样做会比较有效率。
LC现在1600多题,一般普通人是没有时间刷完的,刷太多也很容易刷后面忘前面,或
是导致自己错乱,而且面试要遇到原题的机率其实不算太高,大多数都会有些变形,
所以就算你全部刷完也不保证你coding会过关。
我认为掌握每个类型的考点是比较重要的,把类似的题目一起刷,就可以发现解法都
是类似的,归纳出方法后,遇到这类的题目就可以有一个比较清晰的思路。
Design
Design 的面试主要考核的是你对 large scale mobile app 架构的理解,通常会考你
design 一个大家常用的 app,例如 Instagram、Whatsapp、Robinhood、Airbnb、Gmail
等等。大家有空不妨打开手机,看看自己常用哪些 app,试着想想看如果是自己来写
这个 app,会怎么设计,哪边自己不清楚怎么做,可以网上查一下资料,对增加自己
的深度广度很有帮助。
在 Design 面试中,你可以想像你的角色是一个 tech lead,你要带领你的团队打造
一个全新的 app,所以你要在台上解释给底下的人听,这个 app 要怎么建,需要哪些
component,要用到哪些 library,有哪些 trade off,跟 server 要怎么沟通等等。
你可以假设你有一个完美的 backend 团队,可以做出任何你需要的 endpoints 来提
供你资料。
Design 面试最重的点就是,你是主导者,要 drive 整个 communication,面试官在
讲完 app 的需求后,剩下超过九成的时间都是听你讲解,如何有条理地把整个 app
的架构完整的分析一遍,是这个面试的重点。
Mobile development 上有很多种 design pattern,最常见的三种就是 MVC、MVP 以
及 MVVM,建议先把这三种的优缺点先复习一遍。面试的时候可以挑自己喜欢的一套出
来用,一步一步地把每个 component 串起来然后讲解它的功能,看你要 bottom-up
从 server 取资料讲到 UI,或者 top-down 从 UI 讲回如何从 server 取资料都可以。
整个架构画完之后就会有一个清晰的 data flow,也就有了基本分。
后面面试官会针对特别的情况展开讨论。例如:
- 资料如何存储?有哪些存储资料的方法?
- Device offline 或者 network 很慢无法从 server 取资料了怎么办?
- App 被 system kill 了 cache 都不见了怎么办?
- 资料太多了一次传太慢了要怎么办?
- 图片和影片要怎么存?图片要太大 load 很久要怎么处理?
- Real time communication 要怎么建?
- RecyclerView 很卡的原因可能是什么?要怎么优化?
- etc.
以上这些都是我面试中实际被问过的问题,每个问题可能都有不同的解法或 libaray
可以用(广度),你要能分析各种解法的优缺点 (深度),然后根据这些分析说明你为
什么选了这个解法。如果这些 follow up 都能答上来的话,design 这轮基本就稳了。
Behavioral / Leadership
Behavioral 的面试比较不像是面试,像是在闲聊,面试你的人通常会比较资深。这轮
面试的重点在于你过往的经验,例如:
- 你做过最具有挑战性的 project 是什么?
- 你做过最自豪的 project 是什么?
- 你最近一个与其他组合作的 project 是什么?
- 你收到最 critical 的 feedback 是什么?收到后你做了什么改变?
- 你怎么 lead 一个 project?
- 底下的人意见不合你怎么处理?
- 你跟主管或其他人意见不合你怎么处理?
- 你怎么 mentor 新来的人?
- etc.
过往经验一定要是真实的经验,最好不要凭空捏造,不然很容易几个深入 follow up
就把你问倒了。经验只能经年累月而得,没办法速成,回答的方式最好可以搭配一个
过往经验来举例,再搭配 SOAR 法回答:
- Situation: 背景介绍,事件如何发生。
- Obstacle: 遇到了什么困难。
- Action: 做了什么解决上述的困难。
- Result: 结果如何,有什么 impact。
用这个方法回答问题可以让整个回答非常有条理,面试官可以迅速地抓到重点。练习
的时候可以把常见的高频问题先写下来,想想看过往经验中有什么例子可以往上套,
然后再把例子用 SOAR 法说出来。同个问题可以有好几种例子,每个例子也可以通用
于不同问题,练习久了之后你就会建立自己的一套例子库,遇到问题就从例子库里拿
出回答就行了。
【结语】
网上关于 mobile 面试的资料很多,但是少有人去整理,这篇就当作抛砖引玉,希望
可以帮助到正在找工作的人!
作者: golang (Gopher)   2020-11-25 07:32:00
感谢分享
作者: drajan (EasoN)   2020-11-25 07:39:00
作者: black2575 (说的也是)   2020-11-25 07:54:00
作者: KingSteven (HHung)   2020-11-25 08:19:00
Ray哥必推
作者: xpasser   2020-11-25 08:47:00
感谢分享
作者: kotorichan (kotorichan)   2020-11-25 09:16:00
推推
作者: anandydy529 (AndyAWD)   2020-11-25 10:08:00
作者: SPower (微光)   2020-11-25 10:51:00
作者: freedls (阿嬤覺得你冷)   2020-11-25 11:05:00
分享推
作者: purpleboy01 (紫喵)   2020-11-25 11:21:00
作者: siriusu (かがみは俺の嫁。)   2020-11-25 11:27:00
推~
作者: eju901677 (诚)   2020-11-25 11:39:00
作者: tswperfect (tsw)   2020-11-25 12:25:00
棒棒
作者: bug2 (bug)   2020-11-25 13:46:00
谢谢分享!!
作者: quickey (色肥宅)   2020-11-25 14:51:00
感谢分享,想知道问题您都怎么回答的XD
作者: owo99 (洋洋)   2020-11-25 15:18:00
感谢
作者: adam0806 (adam)   2020-11-25 16:38:00
感谢Ray,很有用!
作者: zhuzii (UsualMan)   2020-11-25 17:45:00
赞 很多问题其实平常就可以思考 这边对没面试的人也很有帮助 谢谢分享这边(x)这篇(o)对没面试的人也很有帮助
作者: Aliceni   2020-11-25 17:56:00
推,感谢分享!
作者: yojiamhippo (yoj10393zzz)   2020-11-25 19:04:00
推推
作者: fantasychese (林阿宅)   2020-11-25 20:07:00
作者: matrixki (New Season)   2020-11-25 20:14:00
四年股票领完,难道SQ没有发refreshers 吗?
作者: dream1124 (全新开始)   2020-11-25 20:25:00
推经验分享
作者: evo1994 (Evo)   2020-11-25 20:44:00
推 所以你有参与squre third party的开发囉!
作者: angusyu (〒△〒)   2020-11-25 23:48:00
没想到app也要刷题
作者: ptthao (优文保证)   2020-11-25 23:56:00
作者: touurtn (vv)   2020-11-26 00:55:00
疴 哪种coding不用算法的?
作者: kangan987 (Jon.Snow)   2020-11-26 07:58:00
感谢分享
作者: matrixki (New Season)   2020-11-26 10:31:00
回原PO,我的refreshers还不少,所以可能看公司跟职位了硅谷大家跳槽未必是因为薪水啦
作者: apiggy0204 (老赵)   2020-11-26 10:36:00
好帅 <3
作者: seal0903 (喜宝ouo)   2020-11-26 10:36:00
神串,收藏收藏!
作者: uopsdod (pcman)   2020-11-27 04:23:00
推分享
作者: peterchen302 (Cyuan)   2020-11-27 10:48:00
推推
作者: icerush (No 哥)   2020-12-01 22:32:00
感谢分享

Links booklink

Contact Us: admin [ a t ] ucptt.com