回复: 36
跳转到指定楼层
上一主题 下一主题
收起左侧

林荫昂塞

全局:

2018(1-3月) 码农类General 博士 全职@linkedin - 猎头 - Onsite  | | Other | 在职跳槽

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x



您好!
本帖隐藏的内容需要积分高于 66 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 66 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies


面完到今天还没有回信。感觉多半是凉了。还是发一下面经回报下地里顺便攒个RP。
心得体会:虽然他家系统设计就那么几道很容易撞上,但是就算准备了也不一定能答好。建议大家最好自己从头到尾所有细节写一遍,有条件的话找个朋友来mock一下比较好。


补充内容 (2018-2-27 09:52):
修正一下KV store设计那道题。只是说random写会很慢要避免,顺序写会很快,random读没问题。。

补充内容 (2018-2-28 07:17):
因为有其他offer在等,所以催了一下recruiter,今天通知说已经过了HC开始准备team match啦,谢谢各位的祝福。

评分

参与人数 2大米 +6 收起 理由
pwh + 3 很有用的信息!
weiliango + 3 给你点个赞!

查看全部评分


上一篇:palatir 电面大全
下一篇:为了我们全部 电面一

本帖被以下淘专辑推荐:

推荐
 楼主| juritan 2018-2-27 09:50:57 | 只看该作者
全局:
hyliu0000 发表于 2018-2-25 04:05
额 白打那么多字。都没打出来。好吧再发一遍。
楼主 几个问题探讨下。kv设计 能实现顺序读吗? 还有每个文 ...

“kv设计 能实现顺序读吗? ”这个我原题里没说清楚。。应该是random写会很慢要避免,读的话就还好。所以就根据内存中的hashtable找到某个key对应在disk上的文件是哪个,并且offset在哪里,就可以读到相应的value了。

“还有每个文件大小多少? 太大太小都会有影响。这里面trade off楼主是怎么考虑的? ”
这里当时没有仔细讨论。。我只说了太大的话bakcup和recovery会比较难。所以要分成小文件,就假设大概4GB一个文件这样。面试官没有问什么。

“第二个设计单机实现应该不难,难的是如何scale? ”
我当时想说如果有多个consumer怎么办但是面试官就说假设只有一个consumer。。但是producer可以是多个的。主要还是在考多线程的理解和使用吧?

“第三个设计不需要每个host每个指数一个queue吧;只需要每个message里面声明node和指数的信息就好。另外 load balancer是没法帮你找到需要的queue吧。”


但是用户到时候是要求具体某个host的某个指数的。如果所有host的message放在一起,那query的时候还要再进行一轮filter呀。既然如此为什么不直接就分开。
software load balancer应该可以做这件事的。。以前看到某个系统设计题就是在software load balancer中保存一个hashtable之类的结构可以寻找某些message需要redicrect到哪个server。
所以我是想的用类似的用法。不过在这里用的对不对就不知道了。。。
回复

使用道具 举报

推荐
 楼主| juritan 2018-2-28 07:32:15 | 只看该作者
全局:
hyliu0000 发表于 2018-2-27 12:20
KV设计确实比较难,你答得不错了。

c++写多线程确实蛮蛋疼的。。 java的话 你就可以直接调用blocking ...

我当时的想法是使用不同的queue并不算是提前filter,而是利用LB直接在各个server把message传进来的时候就分配到各个queue里了;如果只用一个queue,当数据很多的时候还是需要把queue分成多个partition,还是需要LB来转发message。这样分成不同的queue并不会增加复杂度,还能节省query的overhead。
但是我觉得你说的也很有道理。主要是我没有实际用过kafka,就想当然的以为应该可以比较efficient的支持大量topic。。。这样的话需要确实需要考量多个topic的tradeoff。
不过当时面试官似乎没有太纠结scalability的问题,后面主要在问消息丢失后的处理,着重在问failure resilience了。
回复

使用道具 举报

推荐
ws775901 2018-2-27 13:31:33 | 只看该作者
全局:
最后一轮那个题,我觉得可以用raft算法来处理在服务器不稳定的情况下数据一致性问题。比如一开始有5个server. 我们通过leader election 选出一个leader来作为master和用户交互,同时和其它server交互保持数据一致性。当客户端发送msg给leader, leader会先确保大多数servers都收到了这个msg才会commit这个msg到自己的state machine上。 当leader挂了, 其他server会因为超时而自动选择一个新leader, 所以即使msg没发出去,新leader没有收到这个msg,可以考虑让用户重发。而且这种情况,即使后来那个server恢复了,数据一致性依然维持,它挂之前处理的msg会由于太老了而被弃掉,同时它也会根据新leader发过来的数据来更新自己的state machine.
回复

使用道具 举报

🔗
xljob 2018-2-25 01:13:45 | 只看该作者
全局:
感觉infra设计轮好长好难啊。。
回复

使用道具 举报

🔗
hyliu0000 2018-2-25 03:52:29 | 只看该作者
全局:
回复

使用道具 举报

🔗
hyliu0000 2018-2-25 04:05:06 | 只看该作者
全局:
额 白打那么多字。都没打出来。好吧再发一遍。
楼主 几个问题探讨下。kv设计 能实现顺序读吗? 还有每个文件大小多少? 太大太小都会有影响。这里面trade off楼主是怎么考虑的? 第二个设计单机实现应该不难,难的是如何scale? 第三个设计不需要每个host每个指数一个queue吧;只需要每个message里面声明node和指数的信息就好。另外 load balancer是没法帮你找到需要的queue吧。
回复

使用道具 举报

🔗
hyliu0000 2018-2-25 04:05:58 | 只看该作者
全局:
另外 感谢楼主发这么详细的设计面经。点赞
回复

使用道具 举报

🔗
hyliu0000 2018-2-26 07:13:08 | 只看该作者
全局:
其实KV设计是最考验分布式系统设计的一种题。 比什么设计个tinyurl什么的要复杂的多。
回复

使用道具 举报

🔗
hyliu0000 2018-2-27 12:20:46 | 只看该作者
全局:
juritan 发表于 2018-2-27 09:50
“kv设计 能实现顺序读吗? ”这个我原题里没说清楚。。应该是random写会很慢要避免,读的话就还好。所以 ...

KV设计确实比较难,你答得不错了。

c++写多线程确实蛮蛋疼的。。 java的话 你就可以直接调用blocking queue了。。。

至于第三个设计, 我觉得你想的还是有点问题的。 你的这些data point不管怎么样都是要存到数据库里面的。 你提前filter的话,又能有什么性能上的优势呢?到时query的时候是一样的, 要by host, by time, by指数。 另外你这么设计是有瓶颈的。 你的host越多,指数越多,你的kafka的topic就越多。 但是kafka得topic也不能无限增长啊。 主要是zookeeper也是有上限的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表