由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 问一道FB design
相关主题
问个snapchat的设计题三连击
[zynga面经] backend software engineer问一道G家系统设计题
求牛人 解答 一个Amazon 设计问题a system design question
求问一道用新语言写wordcount的题get Top 1million most frequent entries in past 24 hour
dropbox一道题问一道GOOGLE有点像设计题的题
最近公司onsite 都喜欢一个较难的pythpn输出函数运行信息的project.
问一道FB design之后续贴一道take home的面试题
一道面试题外行问一句,生统怎么这么多女性?
相关话题的讨论汇总
话题: 朋友话题: friend话题: user话题: fb话题: list
进入JobHunting版参与讨论
1 (共1页)
n*********y
发帖数: 41
1
刚面FB onsite, 问了一道design题。privacy setting. 说是每个user有一个friend
list, user可以发Post, 问如何设计friends可见。
后来follow up 问如何设计user朋友的朋友也可见,我说先找user的朋友,再找user朋
友的朋友,他说这样就O(N^2)了,问有没有O(N)来设计friend of friend可见的方法?
不知道怎么答了。。
大家有什么好方法吗?
t******c
发帖数: 348
2
Make the user's friend list as a hash map?
j**********r
发帖数: 3798
3
这东西其实要看N有多大。N不大,读可以,N大,靠写。这是典型的Twitter设计题。
多一层就多给你一个选择,全读,全写,写朋友。选啥要靠实测。

【在 n*********y 的大作中提到】
: 刚面FB onsite, 问了一道design题。privacy setting. 说是每个user有一个friend
: list, user可以发Post, 问如何设计friends可见。
: 后来follow up 问如何设计user朋友的朋友也可见,我说先找user的朋友,再找user朋
: 友的朋友,他说这样就O(N^2)了,问有没有O(N)来设计friend of friend可见的方法?
: 不知道怎么答了。。
: 大家有什么好方法吗?

n*********y
发帖数: 41
4

假设FB的情况,N=200,每个User200个friend. 请问如果是写的话是用HashMap的意思
吗?写到cache里面?
这东西其实要看N有多大。N不大,读可以,N大,靠写。这是典型的Twitter设计题。

【在 j**********r 的大作中提到】
: 这东西其实要看N有多大。N不大,读可以,N大,靠写。这是典型的Twitter设计题。
: 多一层就多给你一个选择,全读,全写,写朋友。选啥要靠实测。

n*********y
发帖数: 41
5
请问HashMap的话是不是要放在cache里面,否则跟N^2次DB read得到friend的friend
list也没多大差别了吧?cache能放下这么大hashMap吗?需要sharding?会不会有
overhead啥的?

【在 t******c 的大作中提到】
: Make the user's friend list as a hash map?
d****n
发帖数: 12461
6
经典题。
每个人有一个帖子的timeline,里面只包含朋友的发帖的signature。
发帖子的时候,你直接写帖子的signature到所有朋友的timeline里面。
看帖子的时候,就是把所有朋友的帖子signature翻一遍(里面也包含了自己发的帖子
),全部去重按时间线逆序合并起来再把帖子读出来。
帖子本身存在按时间分区的数据库里面,而且只用在每个数据中心留一份。假设你所有
朋友都在一个地区的话,其实都是内存操作。

【在 n*********y 的大作中提到】
: 刚面FB onsite, 问了一道design题。privacy setting. 说是每个user有一个friend
: list, user可以发Post, 问如何设计friends可见。
: 后来follow up 问如何设计user朋友的朋友也可见,我说先找user的朋友,再找user朋
: 友的朋友,他说这样就O(N^2)了,问有没有O(N)来设计friend of friend可见的方法?
: 不知道怎么答了。。
: 大家有什么好方法吗?

n*********y
发帖数: 41
7
你说的是friends可见吧,怎么实现friends的friends可见,而且O(N)?

【在 d****n 的大作中提到】
: 经典题。
: 每个人有一个帖子的timeline,里面只包含朋友的发帖的signature。
: 发帖子的时候,你直接写帖子的signature到所有朋友的timeline里面。
: 看帖子的时候,就是把所有朋友的帖子signature翻一遍(里面也包含了自己发的帖子
: ),全部去重按时间线逆序合并起来再把帖子读出来。
: 帖子本身存在按时间分区的数据库里面,而且只用在每个数据中心留一份。假设你所有
: 朋友都在一个地区的话,其实都是内存操作。

d****n
发帖数: 12461
8
你写和读的都是朋友圈啊。
你和小A是朋友,小A和小B是朋友。你的发帖就发到小A那里去了,然后小B读到小A的帖
子里面就有你的。
O(N)是近似,就是假设每个人平均每小时发5个贴,然后每个人平均有20个朋友,然后
每次给你看3小时历史,那就是~N*5*20*3,其中N是你的朋友数。

【在 n*********y 的大作中提到】
: 你说的是friends可见吧,怎么实现friends的friends可见,而且O(N)?
j**********r
发帖数: 3798
9
写就是直接把帖子写到朋友的timeline里。这样对读优化。这么做的原因就是写可以异
步,对延迟要求不高,而读不行。
牺牲存储可以提高Scalability,避免hot row. 反过来N小读不是问题,就可以对存储优
化。

【在 n*********y 的大作中提到】
: 你说的是friends可见吧,怎么实现friends的friends可见,而且O(N)?
p******a
发帖数: 130
10
能不能维护一个 friend of friend list?post 的时候根据 privacy 给这个list上的
人发。
[在 neverlandly (neverlandly) 的大作中提到:]
:刚面FB onsite, 问了一道design题。privacy setting. 说是每个user有一个friend
:list, user可以发Post, 问如何设计friends可见。
:后来follow up 问如何设计user朋友的朋友也可见,我说先找user的朋友,再找user
朋友的朋友,他说这样就O(N^2)了,问有没有O(N)来设计friend of friend可见的方法
? 不知道怎么答了。。
:大家有什么好方法吗?
相关主题
最近公司onsite 都喜欢三连击
问一道FB design之后续问一道G家系统设计题
一道面试题a system design question
进入JobHunting版参与讨论
d****n
发帖数: 12461
11
结论是不可行。
例如你和小D是小C的朋友,所以你们俩是FoF。但是如果你删了C,C删了你,C删了D,D
删了C,都会造成你刚刚po给D的帖子必须删掉。
如果考虑到你和D也可以是直接朋友,所以上面当中其中有几个是做不到的。

friend
user

【在 p******a 的大作中提到】
: 能不能维护一个 friend of friend list?post 的时候根据 privacy 给这个list上的
: 人发。
: [在 neverlandly (neverlandly) 的大作中提到:]
: :刚面FB onsite, 问了一道design题。privacy setting. 说是每个user有一个friend
: :list, user可以发Post, 问如何设计friends可见。
: :后来follow up 问如何设计user朋友的朋友也可见,我说先找user的朋友,再找user
: 朋友的朋友,他说这样就O(N^2)了,问有没有O(N)来设计friend of friend可见的方法
: ? 不知道怎么答了。。
: :大家有什么好方法吗?

p******a
发帖数: 130
12
每个人按远近程度有不同的 frends list, 假如D也是我的直接朋友,那我的f有 C和D
,然后f of f也有C 和 D。如果我和C删除好友,C从我的f list上消失,D从我的f of
f list上消失;接着C 和 D删除好友,C 从我的 f of f list上消失。最后我的 f
list 上有D,f of f list 空着。这样貌似也可行?
[在 dynkin (化神奇为腐朽) 的大作中提到:]
:结论是不可行。
:例如你和小D是小C的朋友,所以你们俩是FoF。但是如果你删了C,C删了你,C删了D,
D删了C,都会造成你刚刚po给D的帖子必须删掉。
:如果考虑到你和D也可以是直接朋友,所以上面当中其中有几个是做不到的。
:friend
:user
j**********r
发帖数: 3798
13
当然是可以的,timeline这种东西是不recall的。我封了你我不见得想让你知道,我之
前的帖子你可能已经看过了,拿掉反而让你知道我封了你。

,D

【在 d****n 的大作中提到】
: 结论是不可行。
: 例如你和小D是小C的朋友,所以你们俩是FoF。但是如果你删了C,C删了你,C删了D,D
: 删了C,都会造成你刚刚po给D的帖子必须删掉。
: 如果考虑到你和D也可以是直接朋友,所以上面当中其中有几个是做不到的。
:
: friend
: user

d****n
发帖数: 12461
14
然后面试官就可以问你以下的问题:
我和c已经是好友,然后e加我为好友,你就要把c之前发的帖子全部拷贝一份给e?
我和f原先是好友,然后我删掉了f,你就要在f那里把所有c的帖子删掉,然后在c那里
把所有f的帖子也删掉?
如果我是大v,我有2000个朋友,是不是每次我加减一个好友你都要对我目前所有的好
友之间做一样的操作?
假如我没有加减好友,只是c修改了帖子,是不是对我所有的好友要把之前的旧帖子删
掉或者修改?你觉得数据库怎么设计才可以实现这样随机修改的功能?

D
of

【在 p******a 的大作中提到】
: 每个人按远近程度有不同的 frends list, 假如D也是我的直接朋友,那我的f有 C和D
: ,然后f of f也有C 和 D。如果我和C删除好友,C从我的f list上消失,D从我的f of
: f list上消失;接着C 和 D删除好友,C 从我的 f of f list上消失。最后我的 f
: list 上有D,f of f list 空着。这样貌似也可行?
: [在 dynkin (化神奇为腐朽) 的大作中提到:]
: :结论是不可行。
: :例如你和小D是小C的朋友,所以你们俩是FoF。但是如果你删了C,C删了你,C删了D,
: D删了C,都会造成你刚刚po给D的帖子必须删掉。
: :如果考虑到你和D也可以是直接朋友,所以上面当中其中有几个是做不到的。
: :friend

d****n
发帖数: 12461
15
这个属于没搞清楚需求。
面试官肯定会问你这个问题:你在fb上加了一个朋友,你觉得是不是想马上可以看到他
朋友圈的帖子?你删了一个朋友,你是不是马上不想看到他所有的朋友圈帖子?
无论你回答是或者否,一般接下来面试官都会按照这个需求来让你设计。

【在 j**********r 的大作中提到】
: 当然是可以的,timeline这种东西是不recall的。我封了你我不见得想让你知道,我之
: 前的帖子你可能已经看过了,拿掉反而让你知道我封了你。
:
: ,D

s****3
发帖数: 270
16
这个time line 是都存在内存里吗? 因为就算内存crash 似乎也不用重建 history 看
不到就看不到了呗

【在 d****n 的大作中提到】
: 经典题。
: 每个人有一个帖子的timeline,里面只包含朋友的发帖的signature。
: 发帖子的时候,你直接写帖子的signature到所有朋友的timeline里面。
: 看帖子的时候,就是把所有朋友的帖子signature翻一遍(里面也包含了自己发的帖子
: ),全部去重按时间线逆序合并起来再把帖子读出来。
: 帖子本身存在按时间分区的数据库里面,而且只用在每个数据中心留一份。假设你所有
: 朋友都在一个地区的话,其实都是内存操作。

s****3
发帖数: 270
17
大牛能说说这怎么设计吗.....thanks

【在 d****n 的大作中提到】
: 然后面试官就可以问你以下的问题:
: 我和c已经是好友,然后e加我为好友,你就要把c之前发的帖子全部拷贝一份给e?
: 我和f原先是好友,然后我删掉了f,你就要在f那里把所有c的帖子删掉,然后在c那里
: 把所有f的帖子也删掉?
: 如果我是大v,我有2000个朋友,是不是每次我加减一个好友你都要对我目前所有的好
: 友之间做一样的操作?
: 假如我没有加减好友,只是c修改了帖子,是不是对我所有的好友要把之前的旧帖子删
: 掉或者修改?你觉得数据库怎么设计才可以实现这样随机修改的功能?
:
: D

j**********r
发帖数: 3798
18
timeline都是做成immutable, 这才是scalability的关键。朋友圈帖子在前,删朋友在
后,完全没有收回的必要。收回反而显得不自然。微信你要recall,也就给你很短时间。

【在 d****n 的大作中提到】
: 这个属于没搞清楚需求。
: 面试官肯定会问你这个问题:你在fb上加了一个朋友,你觉得是不是想马上可以看到他
: 朋友圈的帖子?你删了一个朋友,你是不是马上不想看到他所有的朋友圈帖子?
: 无论你回答是或者否,一般接下来面试官都会按照这个需求来让你设计。

d****n
发帖数: 12461
19
前面有。

【在 s****3 的大作中提到】
: 大牛能说说这怎么设计吗.....thanks
p******a
发帖数: 130
20
谢谢指点!有一点不太明白的是为什么要在朋友(或者朋友的朋友)的timeline中主动
删之前的post,是不是跟pull/push方式的选择有关?假定我们使用pull模式,用户登
录或者刷新后,根据自己的friend list 和 f of f list 去pull有权限的posts;此后
若任何朋友关系变动,只更新这两个lists;直到下次再登陆或者刷新的时候,根据改
动后的lists去pull。大v的问题是不是可以特殊处理:对大v不考虑 f of f 关系?

【在 d****n 的大作中提到】
: 然后面试官就可以问你以下的问题:
: 我和c已经是好友,然后e加我为好友,你就要把c之前发的帖子全部拷贝一份给e?
: 我和f原先是好友,然后我删掉了f,你就要在f那里把所有c的帖子删掉,然后在c那里
: 把所有f的帖子也删掉?
: 如果我是大v,我有2000个朋友,是不是每次我加减一个好友你都要对我目前所有的好
: 友之间做一样的操作?
: 假如我没有加减好友,只是c修改了帖子,是不是对我所有的好友要把之前的旧帖子删
: 掉或者修改?你觉得数据库怎么设计才可以实现这样随机修改的功能?
:
: D

相关主题
get Top 1million most frequent entries in past 24 hour贴一道take home的面试题
问一道GOOGLE有点像设计题的题外行问一句,生统怎么这么多女性?
一个较难的pythpn输出函数运行信息的project.刚和Amazon电话面试完
进入JobHunting版参与讨论
w**z
发帖数: 8232
21
fanout 一般都是在写的时候做的。 immutable 确实是关键。如果能把 post 做到能改
的就太牛了。

timeline都是做成immutable, 这才是scalability的关键。朋友圈帖子在前,删朋
友在
间。

【在 j**********r 的大作中提到】
: timeline都是做成immutable, 这才是scalability的关键。朋友圈帖子在前,删朋友在
: 后,完全没有收回的必要。收回反而显得不自然。微信你要recall,也就给你很短时间。

F*********0
发帖数: 602
22
上路了已经

【在 p******a 的大作中提到】
: 谢谢指点!有一点不太明白的是为什么要在朋友(或者朋友的朋友)的timeline中主动
: 删之前的post,是不是跟pull/push方式的选择有关?假定我们使用pull模式,用户登
: 录或者刷新后,根据自己的friend list 和 f of f list 去pull有权限的posts;此后
: 若任何朋友关系变动,只更新这两个lists;直到下次再登陆或者刷新的时候,根据改
: 动后的lists去pull。大v的问题是不是可以特殊处理:对大v不考虑 f of f 关系?

a****o
发帖数: 6612
23
大牛,我想了一天,终于明白你的解释了。
这个应该算O(N)的算法。

【在 d****n 的大作中提到】
: 经典题。
: 每个人有一个帖子的timeline,里面只包含朋友的发帖的signature。
: 发帖子的时候,你直接写帖子的signature到所有朋友的timeline里面。
: 看帖子的时候,就是把所有朋友的帖子signature翻一遍(里面也包含了自己发的帖子
: ),全部去重按时间线逆序合并起来再把帖子读出来。
: 帖子本身存在按时间分区的数据库里面,而且只用在每个数据中心留一份。假设你所有
: 朋友都在一个地区的话,其实都是内存操作。

n*********y
发帖数: 41
24
大牛你好,我今天跟FB一专门搞privacy的美国大牛又谈到了这个问题,把post时候写
到朋友timeline这个思路跟他说了一遍,想不到他是这样回复的:
This can be done simpler, without any extra writes.
A hint: You are thinking about the problem as "How to check if C is a friend
of friends of A". But it is possible to rephrase the question in an other
way which will make the problem much simpler to solve.
竟然还有更好的办法,any idea?

【在 d****n 的大作中提到】
: 经典题。
: 每个人有一个帖子的timeline,里面只包含朋友的发帖的signature。
: 发帖子的时候,你直接写帖子的signature到所有朋友的timeline里面。
: 看帖子的时候,就是把所有朋友的帖子signature翻一遍(里面也包含了自己发的帖子
: ),全部去重按时间线逆序合并起来再把帖子读出来。
: 帖子本身存在按时间分区的数据库里面,而且只用在每个数据中心留一份。假设你所有
: 朋友都在一个地区的话,其实都是内存操作。

m******3
发帖数: 346
25
mark!!!
a****i
发帖数: 1182
26
这个意思是A写的时候写到朋友B那儿
然后B的朋友C从B那儿读?
然后复杂度,写是A的朋友个数;读是C的朋友个数?

【在 a****o 的大作中提到】
: 大牛,我想了一天,终于明白你的解释了。
: 这个应该算O(N)的算法。

s*****p
发帖数: 30
27

我知道我来的很晚了, 但是 我还是有个疑惑想问问,不知道你看不看得到。
就是读帖子的时候从朋友那里度, 写的时候也全部写到朋友那里,
那么这样就有个问题就是你自己的朋友的post你怎么读到呢?
比如你和A是好友, A发一个帖子到你的 timeline去了, 但是你看帖的时候只会从你
的朋友的timeline里面去找, 这样是找不到A的帖子的啊? 除了这一个疑惑, 我觉得
您的思路很好的解决了friends of friends的问题,很棒!

【在 d****n 的大作中提到】
: 经典题。
: 每个人有一个帖子的timeline,里面只包含朋友的发帖的signature。
: 发帖子的时候,你直接写帖子的signature到所有朋友的timeline里面。
: 看帖子的时候,就是把所有朋友的帖子signature翻一遍(里面也包含了自己发的帖子
: ),全部去重按时间线逆序合并起来再把帖子读出来。
: 帖子本身存在按时间分区的数据库里面,而且只用在每个数据中心留一份。假设你所有
: 朋友都在一个地区的话,其实都是内存操作。

s********k
发帖数: 6180
28
所有人的post都进一个大immutable hash table,key 是user id, value是内容,你
每次读只需要本地搞定friend,FoF或者其他隐私,算出来一个读user的list,然后去
table把内容都读出来
scalability再扩展慢慢来,

friend

【在 n*********y 的大作中提到】
: 大牛你好,我今天跟FB一专门搞privacy的美国大牛又谈到了这个问题,把post时候写
: 到朋友timeline这个思路跟他说了一遍,想不到他是这样回复的:
: This can be done simpler, without any extra writes.
: A hint: You are thinking about the problem as "How to check if C is a friend
: of friends of A". But it is possible to rephrase the question in an other
: way which will make the problem much simpler to solve.
: 竟然还有更好的办法,any idea?

f*****n
发帖数: 2126
29
难道就是某章的pull push那个办法么?
f*****n
发帖数: 2126
30
终于看到个聊正经事情的帖子了
相关主题
贡献两个Amazon的电话面试题[zynga面经] backend software engineer
C++: does post-increment always create a temp obj?求牛人 解答 一个Amazon 设计问题
问个snapchat的设计题求问一道用新语言写wordcount的题
进入JobHunting版参与讨论
d******v
发帖数: 801
31
mark一下
1 (共1页)
进入JobHunting版参与讨论
相关主题
外行问一句,生统怎么这么多女性?dropbox一道题
刚和Amazon电话面试完最近公司onsite 都喜欢
贡献两个Amazon的电话面试题问一道FB design之后续
C++: does post-increment always create a temp obj?一道面试题
问个snapchat的设计题三连击
[zynga面经] backend software engineer问一道G家系统设计题
求牛人 解答 一个Amazon 设计问题a system design question
求问一道用新语言写wordcount的题get Top 1million most frequent entries in past 24 hour
相关话题的讨论汇总
话题: 朋友话题: friend话题: user话题: fb话题: list