活跃农民
积分 960
大米 颗
鳄梨 个
水井 尺
蓝莓 颗
萝卜 根
小米 粒
学分 个
注册时间 2017-12-20
最后登录 1970-1-1
注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号
x
Timeline
楼主2YOE, 9月初的时候升职,然而包只涨了10%,叠加上其余的种种不满,于是决定另谋出路,当天充值leetcode premeium, 买回来了2本书:Design Data Intensive Application 和System Design Interview By Alex Xu ,然后开始了长达2个月的准备
初期从leetcode的top interview questions开始刷起,刷完了以后刷Facebook,amazon,google的tag题,然后每天1-2小时左右读DDIA
9月下旬开始大规模投简历以及找人内推,同时更改了linkedin状态以及充值了linkedin premium
10月中上旬基本都是店面
10月25开始连续3周onsite
11月19决定签roblox(我的SAO梦),因为visa的原因估计赶不上11月入职了,不过12月入职也不差太多就是了
.--
面试结果
HR call以后没下文的:
Lyft:隔了3周HR发来邮件称family issue一直在休假,然而我已经onsite过半了
Confluent: 前期看到4年的要求没投,后来投了聊过后发现timeline不match,于是没有move forward
店面挂掉/推掉onsite的:
Plaid: 题目都做出来了,followup全答上来了,不知道挂点在哪
Coupang:同上,题目全做出来了,followup全答上来了,不知道挂点在哪
Uber:没写出来optimal solution,面试官一开始也没指引我往这个方向去想,于是挂了
Snap: 题虽然做出来了,可能面试官觉得给的提示太多了吧,虽然只有1处提示是我自己真有点没想出来的
Rivian:题太简单了,感觉enginner水平一般,也不看好他们家估值,于是没约onsite
AirTable: timeline来不及了,于是withdraw了onsite
Onsite挂掉的:
Affirm:feedback是move forward with other candidates, 可能我只是个陪跑吧
Doordash: 估计挂在了design,非常规面经题,然后面试官一直问product features以及API层面的东西,丝毫看不出来这是个system design
Amazon:不知道挂在哪,可能BQ吧,毕竟我也没怎么仔细准备过,就是预备几个故事,然后想到哪说到哪
Stripe:最后一天面得,手里拿了不少offer了,没有看过面经直接上,挂在integration了,只写出第一问,不太会用他们给的library,还一直以为library是stripe自己写的尝试去读source code无果
2sigma:没准备面经,第一轮没写出来optimal solution挂了
Onsite过了的: . 1point 3 acres
Google:4轮题目都不难,面之前一个周末把地里最近1个月的google VO帖子全看了一遍,看了可能150题左右,绝大部分题都能很快有思路,只有大概不到5题想了很久,看了回复也毫无头绪 . Χ
Rubrik: 拿来练手的,没看过面经,想着system coding那轮必挂,结果这轮最后没怎么考concurrency。这家的system design聊得挺舒服的,看起来面试官很knowledgeable
Coinbase:全是面经题,面之前扫了一眼没有做,只是大概思考了一下我会怎么做。面试的时候感觉题目还挺简单的,Connect4那轮的国人小姐姐给了strong hire,十分感谢
Verily:也是裸面拿来练手的,不知道是巧合还是怎么回事,连店面带4轮VO全是tree的题,最后一轮问面试官咋回事,面试官表示感谢你的feedback
Square: 严格意义上来说,3轮 pair programming有2轮都没写完,最后有bug没找出来,估计是communication不错,所以给过了
Roblox:这家流程真的长,technical轮其实不难,system design还拿了strong hire, bar rasier还挺有意思的,问怎么从spammer/malicious user手里保护平台和普通用户,我借用了dota2的behavior score以及最近看到的国内新闻65岁老太凌晨3点赵云5杀疯狂和面试官吹比,这轮似乎就是看你脑洞有多大
Linkedin: coding有一轮烙印问了word break,15分钟不到写完后开始各种云里雾里的followup直到结束。 design轮也有好几次被问住了,感觉答的不是很好,隔天通知了offer,给了个feedback是我design轮strong,我也不知道说啥是好 . ----
Asana:全是面经题,画图那道题自己提前准备过,部分细节和原题有出入,稍微修改后就好了。解释环节面试官提出了另一种思路,我给了个可以优化部分细节的解法就结束了,这轮面试官很满意
Robinhood: 准备了3道算法面经题,结果onsite出了个新题,好在题很简单,写完加答完followup还剩15分钟左右。design也是面经题设计job scheduler,照着dropbox的blog答就完事
Facebook:没啥好说的,全是tag题,比较有趣的是第二轮coding的大哥上来就你做过记得和我说,我有好多题可以换,然后给了个best time to buy stock 1,我思考了一会决定看看他还有啥有意思的题,于是说我做过了,结果他让我描述了一下算法,然后问了几个和production相关的问题后这题就过去了,也没换题,于是下一题我还是老老实实的演戏,最后写完了聊天发现是大我好几届的校友
Dropbox: 没有准备过直接上,算法题还好,design是message queue,疯狂追问各种细节,不停的challenge,搞得我都差点想直接挂机了
. Waral dи,
包裹总结
虽然这次挂了不少家,还有好几家(databricks, airbnb,pinterest,snowflake)投了没反应,不过收集到了mid level薪资水平的大量数据点,这里做个总结:
T0:Amazon(湾区L5上限40万顶包),Snap(L4 37-38万标准包),stripe(L4 35万左右,需要面得好)
T1:Facebook, Linkedin, Robinhood, pinterest, airbnb, dropbox(IC3),lyft, uber, databricks, roblox, affirm, doordash 这些基本可以给到300-310K,注意有的需要compete才能拿顶包
T2:Asana, square, coinbase, google(L3顶包,L4正常包), dropbox(IC2)这里的list太长,更多的靠评论区补充了,这一级别基本240-260K
各家的级别对应的年限都基本fixed,通过levels.fyi和大厂levels对比以及问recruiter基本可以确定自己targeted的level,然后可以去搜对应level的expected tc来判断自己是否继续流程。
有些厂的级别比较tricky,3年可以senior,4-5年可以staff,所以希望包裹最大化的也可以看厂下菜来决定面哪家。
我自己是Linkedin上来给了recruiter口里的顶包,差不多300K,然后拿去compete FB, FB也出了近乎顶包(177,400,75),然后robinhood给了初始数字(185,320, 50),说是如果愿意签可以申请顶包在300K+,最后用这几家compete roblox,拿到了roblox IC2理论顶包(184, 490000, 据说在这个级别上还有exceptional offer,不知道有人拿过没) . 1point3acres.com
算法经验
因为种种原因(18年没拿到Linkedin return,20年Quora layoff),最近3年一直在刷leetcode,也积攒了不少经验,在此分享一下。
常规的各种套路我就不提了,leetcode本身也发展出了很多容易上手的一些刷题教程/流程,我主要分享一下我自己学到的别的经验
经常看到地里有人说500-600题才能拿到offer,这其实是一个常见谬论,我个人的感觉常见题目(medium, hard)刷个300左右就基本的套路都见过了,一味的刷新题不如总结已有的套路,我这次面试见过了几十道题,真正的hard就1题,还是常见的trap rain water 1,刷好常见题型并总结套路比一味的刷新题有效率的多 一定不要做完了就过了,AC不代表你的算法就是optimal的,养成好习惯对比一下标准答案,记得有一道题千辛万苦DP写出来了,打开discussion看到了lee215的monotonic stack solution直接双膝跪地,泪流满面,太tm神了 一些官方答案的提供者可能拥有顶尖的逻辑思维,但不一定是顶尖的programmer,一些答案naming/逻辑十分随意,读起来很费劲,这时候不要犹豫,不是你太菜了,而是老师不会教,赶紧去discussion看高赞答案 部分题(eg, best time to buy stock, common ancestor node, calculator, parenthsis)有好多种变形的,建议把每个变形都做一遍,不仅可以对整个系列有更深刻的认识,对于某些刁钻的followup也可以做到更有把握 不太常见的算法不要死磕,我自己直接放弃了binary index tree和segment tree,我的判断是要搞懂这俩可能要花上我大半天的时间,同样的时间我可以刷好多道别的题,如果问到非得这俩才能做得题,面试官摆明了就是为难人,这种人做同事不去也罢,最后实际面试中我也没有碰过这类型的题 开始做题前一定要大量问clarifying questions,很多时候面试官都不会把所有的requirements, input format一股脑给你,这时候就需要你通过问题来判断什么样的input/output是合理的,这个习惯对于非leetcode题尤为有效,因为这种公司/面试官自己出的题没有经受过很多人的校验,一些input/ouput format以及部分edge case极有可能面试官自己都没有想到过,我自己就有好几次问的问题面试官自己都愣住了,然后告诉我暂时不用考虑这些case 当你propose一个solution或者data structure的时候,一定要justify你的选择,我在自己公司也是面试官,我通常问reverse polish notation, 这是一道烂大街的题,所有人都知道要用stack,却极少有人解释过为什么要用stack做,当然,并不是说你不解释就一定会挂,但这个magic behavior本身会导致面试官一些negative的看法,虽然我本人没有因为这个挂过人,但别的面试官就真的说不准了,有可能你不解释来历他也不会打断你,笑眯眯的看你做完,然后feedback写一个背答案把你挂掉,这都是有可能的 边写边时不时和面试官沟通你当前的想法,当然不需要每一个变量名字,for loop, if condition都去解释一遍,不过关键的逻辑上可以边写边说你为什么要这样做,这样做有什么效果。有时候面试官会和你interact,大部分情况下他们都只会默默的看着你,但不要因为面试官没有反馈就停止交流,单方面的交流也至少可以向面试官传达你的思维,可以帮助面试官理解你在思考什么,你是不是还在right track上,我自己经历过大量的面试后这个行为已经成了习惯,交流起来非常自然,如果不习惯的朋友建议多找人mock 提前set up好local IDE, 如果code signal/hack rank debug有困难,早点问面试官可不可以上IDE用break point,种种经验得来的教训就是IDE debug起来快很多,靠print statement有时候真的是很难 实在没思路的时候,比起脑子里空想,试试看play around with input然后记录一下各种不同的combination,这样不仅有助于自己获得思路,面试官也可以更容易理解你的思考过程并且及时引导你
System Design 经验 . 1point 3 acres
由于这次准备时间很充足,我直接上手了DDIA,不得不说这确实是一本神书,transaction那章启发了我不少思考,我组里正好在做一个database migration,我直接运用DDIA里学到的知识指出了design里的一个漏洞,并且提出了解决方案。11,12,13章也像是打开了新世界的大门,有些东西我都从没想过还能这么做。
在经历过这么场system design后,我意识到了其实和算法题一样,system design也是有套路的,只不过算法题基于的算法极为有限,基本翻来覆去就那十几二十几种,leetcode更是提供了大量的题目供你反复练习,算法题结果也比较二元(要么对要么错),所以很多人觉得算法题有套路,而system design没有. 其实不然,system design的套路就在于你对于基础distributed system知识的熟练度(replication, partition, concurrency/transaction, consensus, batch/stream processing etc),如果你能熟练掌握这些基础知识,那么即使没有看过grokking 或者system design interview by alex xu 的套路,也能跟着面试官的要求一步一步设计出符合需求的system。我第一个system design面试是roblox的HM店面,略微有点措不及手(那会还没看过各种套路),不过最后还是有惊无险的通过了。
我个人推荐的学习方案是:DDIA -> system design by alex xu -> 地里好多人推荐过的俄罗斯大叔的视频
DDIA能武装你的知识储备,system design by alex xu 能教给你step by step approach一个problem的套路,俄罗斯大叔的视频能从面试官的视角带你了解system design (他自己的几个视频有一些观点我不是很赞同,不过见仁见智了),我自己也买了grokking ,不过不是很推荐,第一是grokking上虽然也讲了一些知识,不过都是点到为止,很多细节都没深入,然后具体的example很多时候都是直接上结论,什么trade off都不谈,有些时候的approach甚至是过时错误的(chat app还在用long polling),说实话这个50刀我觉得花的很亏,想了解套路的话,system design interview by alex xu 真的是讲的很全面了。
当你掌握了基础知识和基本套路了以后,剩下的就是看各种面经以及通过面经寻找可能的tech blog (airbnb的payment idempotency, dropbox的job scheduler)来强化自己的知识储备,很多system design interview除了基本框架外往往会侧重一两个点期待你能deep dive (比如handle high concurrency with high performance, 通过transaction lock row是最简单也最蠢的做法,其余还可以用matrialized view或者通过snapshot searlizable isolation实现optimistic locking, 实现 deleyed task, 可以用quartz定时poll,可以用delayed queue,可以用rabbitmq dead queue,也可以直接通过 cache ttl加lambda实现)这些细节只能通过自己不断钻研,到处查找资料才能熟练掌握。
最后大力推荐一下中文资料,一开始我只搜索英文资料,很多时候都找不到我想要的topic或者是文章本身的水平不太行,后来在一个面经里的回复看到一个中文link,点进去看了后感觉打开了新世界的大门,这边很多经典的system design面试题国内都已经玩烂了,各种各样现成的套路只等你去借鉴。
从我个人的感受来说,system design只要你花足够多的时间,也能轻松应对mid level甚至senior的面试,我自己这次面试大多数design轮都过了,部分design轮strong hire
总结
在地里看面经的时候经常看到有人po大米不够看不了,或者发面经为了大米看别的面经,我都觉得很可惜,很有可能你离offer只差1道面经题的距离。我自己在准备期间,能开的会员都开了(leetcode, linkedin, medium),这些本来也不是很贵,哪怕只能提高0.1%的可能性那也是值得的,相比一个offer带来的收益,这些付出都是微不足道的。还有一点很重要的就是韧性,我自己属于做什么事都会衡量cost和outcome的人,如果cost太高我会选择放弃,但一旦我选择去做,为了让自己不后悔,我会选择100% commit,这次准备期间,每周上班加学习基本都在80小时以上,一直坚持到了开始onsite,我理解有的人选择佛系,不过每个人都要为自己的选择负责,做了什么样的选择就要接受随之而来的outcome。
面试一旦过了就不要去细想了,从小到大你听过的考一门丢一门的经验是真理,上学的时候还有同学来找你对答案,考完了只要你自己放得下,没人能强迫你去回忆。隔三差五就能在地里看到各种帖子追问面试这里没做好,那里没做好怎么办,我只想说过去的就让他过去吧,既然无论如何你也改变不了过去,纠结于已经发生的事也于事无补,不如多放松下然后思考下一步怎么走 . .и
插个题外话,去年年初跳槽的时候roblox其实有reach out过,不过我没有选择走完和他们的流程,现在想来是有点可惜,不过我并不后悔我的选择,因为我做了在当时情况下对我来说最好最稳妥的选择,经常在地里看到有帖子后悔错失暴富的机会,其实这种事每时每刻都在发生,未来的事谁也无法判断,只要你根据有限的信息做了当下你能做的最好的选择就应该无需后悔你的选择,人是永远无法赚到认知以外的钱的
最后,附上YOASOB的群青与各位共勉,希望还在路上的各位都能早日破茧成蝶
补充内容 (2021-11-21 01:54 +8:00):
楼里很多求中文资料link的,其实没有说一个site就能包含所有的资料,大部分时候都是我想知道啥,去谷歌百度直接搜对应的中文资料,然后打开前几个看,比如秒杀系统
这里贴一个我个人曾经在地里看的一个好的SQL vs NOSQL的总结帖:https://www.cnblogs.com/xrq730/p/11039384.html
上一篇:
Meta/FB infra 组 下一篇:
请问Microsoft Azure AI Cognitive services这个组怎么样?回复加米!!