国内国外都要考的系统设计到底咋得分?
都说系统设计面试就是让你“造火箭”!
没错,许多面试者都有种“高屋建瓴”的感觉。往往看完网上搜的资料,脑子更不清楚了,只能哀嚎:见了鬼的,谁能告诉我到底怎么答才得分?!
今天小编就用一道 Facebook 真题来举例:
Design a photo reference counting system at FB scale
令狐冲老师解答
《系统设计》《九章算法班》主讲老师; FLAG 资深工程师
这个题是我们在《系统设计班》第一节课讲过的内容。
首先,你先不要曲解题目,你直接把题目翻译为:设计 distributed counting system,就已经走偏了。
从这道题的题面来看,面试官只是要对每个 photo 有一个 counter。这个 counter 干嘛的呢?你可以理解为某个 photo 被 like 的数目。这和《系统设计班》第一节 Design a Twitter 里说的,某个 post 被 like,是一样的。
在这道题中,面试官主要考核你以下几个层面的东西:
[第一层]
你首先要知道是用 denormailze 的方法,和 photo 一起存在一起,这样不用去数据库里数 like 。所以可能考察的就是,数据库的存放方法,服务器端用 memcached 或者任何 cache 去存储,访问都是找 cache,实在是太大的数据量,才会考虑分布式。
+1 分
[第二层]
你知道这玩意儿不能每次去数据库查,得cache。
+0.5 分
[第三层]
这玩意儿一直在更新,被写很多次,你知道必须一直保持这个数据在 cache 里,不能 invalidate。
+0.5 分
[第四层]
你知道怎么让数据库和 cache 保持一致性
+2 分
[第五层]
你知道 cache 里如果没有了,怎么避免数据库被冲垮( memcache lease get)
+2 分
[第六层]
一个小的优化,如果这个数据很 hot,可以在 server 内部开一个小 cache,只存及其 hot 的数据。
+2 分
以上,看完后你是一脸懵逼
还是茅塞顿开、思路清晰?
通常面试者会遇到的共性问题有