24年夏跳槽经历 及经验分享

来自其他站点
如果有人几个月前和我说有人能拿到这些offer,我一定觉得全是胡扯。
希望准备system design的经验能帮到一些人,至于offer如果大家觉得不可信就当故事看吧。(不卖课也不骗米)。

  • Instacart L6 offer
  • Snowflake IC3 offer
  • Databricks senior offer
  • Linkedin staff offer
  • Amazon L6/senior offer
  • Datadog senior offer,电面完target staff,面完onsite给的senior
  • Reddit IC4/senior offer,投的senior,电面完target IC5/staff,面完onsite给的IC4
  • Snap L5 offer,一开始target L4,电面完重新phone target L5
  • Lyft T6/staff offer,面T5/senior,面完和manager chat又加了一轮principal面的leveler
  • Stripe L4/staff,开始target L3,电面完重新phone target L4,design+manager电面,再onsite

剩下一些onsite取消的Pinterest, Airbnb, Pure storage, Rippling, DoorDash, Citadel
面挂的只有D E Shaw onsite。

我对于system design的感受这个帖子instant.1point3acres.cn一样,基本就是题目出来以后drive整个design,包括该问什么问题该focus在哪。绝大部分时间面试官应该是不讲话的。我的套路基本如下

  1. 列举functional requirements。这个地方我会先列举一些基本的,然后想一些附加的要求。比如说design YouTube/netflix的时候可以考虑monetization/membership,这些附加的大部分时候都不会仔细讨论。然后我会选几个作为MVP在这场面试里讨论,有时候面试官会想讨论一下我没选到的,那就按面试官的意思来。
  2. 列举non functional requirements,这个很经典了,就是consistency, availability, fault tolerance, durability, scalability, latency, correctness和idempotency。最重要的就是一定要分清主次,有时候strong consistency很重要,有时候consistency没latency/availability重要,一定要按重要性排列
  3. capacity estimation,这个没什么好多说的,大部分面试官会给数字或者直接说assume more than 1 node,一般不是重点,实在不行旁边放个计算机就好了。
  4. API design,绝大部分时间都是restful API。很偶尔会用到RPC或者web socket,这个稍微看一眼就好。我一般只会写一两个最重要的,比如上传video和search for video。剩下的略过就好,没有遇到面试官每个都要写出来的。self intro + 说完这几个点的时间应该 < 20分钟。这个很重要,time management一定要做好,如果超了就少讲点self intro。
  5. high level design,这个地方基本就是画图,记得边画每个decision都要说为什么及alternative为什么不好,都是一样的套路。在这里我会稍微讲一下compute和network layer。有时候面试官会问一下细节的问题再展开讲。
  6. 然后讲database选择,先从functional requirement的角度说access pattern,然后相对应的来选择sql/no sql/time series。我一般会定好大概类型,然后挑2-3个来讨论,比如timeseries的话Cassandra,influx和Prometheus各有什么特点,根据这个system应该怎么选。然后讨论具体schema design,怎么预防hotspot(这点非常重要),需要哪些column,primary key的各个part是什么。有时候如果用mysql/postgresql会讨论怎么做sharding怎么预防distributed transaction。这里要考虑data存多少年,organic growth rate以及怎么scale。
  7. 最后讲cache,怎么populate,invalidate cache。怎么保证freshness等等。然后讨论怎么scale cache/redis cluster怎么搞。讲到这里应该50分钟左右。有时候面试官会问一两个问题这个时候刚好够回答。


剩下的和原帖里一样,如果面试官有问题一定先回答,如果面试官有自己的套路就跟着走。有时候一轮面试里还有bq什么的就要自己控制好时间。如果发现有什么忘说了补上就行,我经常说到一半才发现有non functional requirement没说,再回头加上。

下面讲一下我个人是如何准备system design的,
  • 先看了遍DDIA,要做到对每个知识都理解而不是只看过。
  • 然后看Alex Xu的两本书,这两本书alternative和tradeoff讲的太少。我一般就看high level design和里面的reference,基本把每篇reference的文章都看了能弥补很多。那里面的detail design我觉得根本用不着。面试里除非面试官主动问,不然不会讲怎么细。
  • 接下来我觉得帮助最大的就是infoq,engineering blog,paper。这些地方有很多非常经典的文章讨论了非常经典的问题,个人认为uber blog和pinterest blog质量最高。另外经典的paper也很有帮助。做design时候讨论一下现在/过去业界A和B公司的做法是什么样的以及在这个design里需不需要变化。
  • 我把网上的经典db都了解一边,各种nosql/sql/timeseris/kv,包括小众的couchdb/cockroach/yugabyte等等。他们的architecture是什么样的,适合什么样的workload。然后看了一下kafka/spark/redis的architecture和各种use case。比如redis的各种data structure。
  • 然后网上的system design视频我看了一些,感觉除了infoq没有特别有用的后来就不看了。
  • 最后参照上述帖子的推荐做了三场付费模拟,第一场是senior的,feedback是hire,后两场是staff+的。


补充内容 (2024-09-17 13:38 +08:00):

4.9 yoe, infra方向

补充内容 (2024-09-17 14:04 +08:00):

还请能认出我的朋友们替我保密。。。

补充内容 (2024-09-23 23:16 +08:00):

现在是大厂E5。

补充内容 (2024-09-24 12:44 +08:00):

最后接了一个钱少级别低但是感兴趣的offer。具体是哪就不说了。
62条回复