高级农民
- 积分
- 1037
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2020-4-21
- 最后登录
- 1970-1-1
|
2029(7-9月)-CS硕士+3-5年 | Other| 码农类General全职@不重要
注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号
x
LZ在中大厂在产品组待了几年,senior title,面试因为年限+自己也没觉得到了staff就target senior。平时工作基本business logic+吹水。对behavior和coding挺有自信的(可以详见我以前的帖子顺便送点米),但是对design毫无概念。面试前对design的认知仅限于shadow了几回design面试。一开始非常焦虑,觉得自己毫无出路,感觉超级崩溃。但还好最后结果还可以,想给一样焦虑的人一些经验分享和鼓励! ..
先说结果吧。拿了几家pre-ipo和post-ipo的senior offer,挂了一家pre-ipo的公司。有几家面试明显面试官感到很满意,一直说good job;有一家问我是不是有这方面的经验(当然没有,只是好好准备了)。表现欠佳的面试主要感觉是面试中间没有察言观色,说的东西面试官不是特别感兴趣,没有得到加分,其实我应该换方向的。
如何准备
早起rampup:了解基础知识和对system design有个整体的概念。刷了地里的一些经验帖,然后我看了grokking和三哥哥们的youtube,看完了整体知道了一些常见的词儿和套路,我比较喜欢的youtuber是这两个:
- https://www.youtube.com/channel/UCRPMAqdtSgd0Ipeef7iFs
- https://www.youtube.com/channel/UCn1XnDWhsLS5URXTi5wtFTA
中期深入学习:把DDIA一些部分翻了两遍左右。大家都说这个是神书,我倒觉得其实里面的知识能在面试真的用得上的很少,但是最好还是看一看有了解,毕竟面试就是准备100分,表现10分。切忌因为学了这些在面试里面疯狂吹,要注意察言观色看看面试官到底能不能听得懂。
后期接近实战:这个我按照了知识点类型和题目进行了深度整理。
- 知识点类型包括databse,cache,message queue等等进行了整理和归纳,看了一些常用的技术和设计原理,比如看了Cassandra到底怎么搞的,kafka怎么设计的等等。最后总结了在什么场景下用什么,然后如果用这个要讨论什么,怎么展开讨论。比如说cache,就要讨论怎么时候update cache,什么时候evict,以及不同cache之间的选择,etc. 1point 3acres
- 题目是常见题目类型进行了准备和练习,比如newsfeed,chat system,payment,etc. 基本上自己画了high-level的design和每个component具体做什么。
冲刺阶段:强化面经题
- 刷面经找到所有的题目和followup question,总结不同公司会有不同的侧重点(abb喜欢考database,robinhood喜欢考fault tolerance,etc). Waral dи,
- 找到相关的blog研读一下。我发现其实很多中文的blog挺不错的,比如我在看chat system的时候我看了很多国内的文章,讲如何让message不丢不重复。虽然一般来说面试不会聊到这么深,但是有机会聊到了就很加分,以及聊到了并不会又很减分。
- 自己设计一遍,写下exploration question,functional/non-functional requirement,画design图,data flow,如何回答各个followup question,自己想想每个component崩了如何处理,各种edge case如何处理。
- Practice & mock interview
一些Tips. Waral dи,
- 一定要专门点出tradeoff。很多人喜欢说这里用技术A因为它巴拉巴拉。为了让面试官感受到你在做tradeoff,更好的说法是这里有option A和option B,A的好处坏处是***,B的好处坏处是***,我们这里的情况是***,所以我们选A/B。不用整个面试都这样来说,浪费时间,但是面试中间一定要有一两个地方来这样展现自己的tradeoff能力。
- 一定要完成面试官给的requirement,这是我mock interview发现很多candidate的问题。就自己毫无边界地聊但是忘了题目要求,要是让面试官来guide你完成requirement肯定是有点减分的。
- 宏观分析一下问题。比如在面试一开始就说出来,这个系统最关键的地方在于*** (比如security,latency等等),我们要时刻把这个东西keep in mind。然后在设计的时候经常callback。
- 注意time management,有的家的面试只有45min非常紧,其实1h也挺短的,一定要在最短的时间里面提供最strong的signal。有一些没有那么重要的东西可以省略,比如算数这种,要么就不算了要么keep it very simple。
- 自信自信自信!!!如果自己不是一个很自信的人,找方法让自己变得自信。LZ是只要准备的很好就会非常自信,上面的准备也可以看到了LZ有很努力在做准备,真的是准备好了everything under my radar,就算有些没有touch到的新问题在自信的状态下也会发挥的很好。
- 我觉得system design里面,knowledge和communication都很重要,像LZ这样knowledge只有20分的人剩下的只能靠communication来凑。平时可以观察一下PM/EM, 非常senior的人都是怎么说话的。
- 开发一下自己的长处。LZ知道自己design的能力很差,没有什么经验,但是LZ知道自己product sense还可以所以我会有机会的时候稍微展示一下,比如考虑一下用户体验,考虑一下如何从产品角度解决一些问题,目前看下来很多面试官还是value这个的,加点小分。
.--
Try to avoid. ----
- 不要因为自己很懂某一块或者因为准备了而拼命showoff。注意观察面试官,如果发现面试官对这里一点不感兴趣,最好不要花太多时间,说差不多就得了,赶紧moveon到别的地方。我感觉在面试官不熟的地方疯狂表现加分其实没有太多。最好的还是聊到了面试官的心坎儿里。
- 不要轻易放弃自己的观点。面试官challenge candidate是正常操作,不要因为面试官的challenge就觉得自己错了,冷静思考一下为啥面试官这么说,可以defend也可以结合面试官说的evolve一下solution。当然也不要特别犟。。展示一下自己drive consensus的能力。
- 不要纠结于完美的solution,学会真的”make tradeoff“学会舍弃。很多人很纠结自己的提出的solution总有缺点,比如可以解决A的case但是不能解决B的cas。其实不用太纠结,尤其不要在自己脑子里纠结。我觉得比较好的办法是说出来自己的思考过程,比如说:我觉得有这个solution,她availability非常好,但是consistency会有问题,我觉得这个要看我们的requirement更看重什么,我觉得这里最重要的是availability因为用户体验很重要什么什么的,所以我觉得这个solution可以,然后我们可以用别的什么什么方法来mitigate consistency的问题。
暂时想起来这么多,希望可以帮助和我一样在design上面struggle的人吧!
写在最后
在准备system design的过程中学习了很多东西,也意识到了自己能力上非常严重的gap。能够混过面试拿到offer只是lucky而已,以后要走得更远还是得靠真材实料。加油!
补充内容 (2021-04-03 10:58 +08:00):
第一个youtuber是这个:https://youtube.com/c/GauravSensei |
上一篇:朋友(绝对不是本人)的尴尬处境,求建议! 下一篇:2021 summer research intern面试总结
|