由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - Uber 电面 (已挂)
相关主题
【Fulltime】西雅图 天使轮 startup 招工程师面试官总是倾向于招志同道合的
王者荣耀 系统设计一个电面
bloomberg已挂电面,真tmd犯贱,大家引以为戒!
G家电面(已挂)下午电面MS
发bloomberg面经 [电面,目测已挂,赞人品]回馈社会发amaz电面面经攒rp
startup电面被恶心了电面完忘记要interviewer的contact information了。。
如何回答follow-up问题: 如何线程安全,如何scale?有谁电面过Google User Experience Research 职位的intern吗?
系统设计题怎么准备电面后被拒,帮忙看看
相关话题的讨论汇总
话题: server话题: user话题: 设备话题: message话题: 登录
进入JobHunting版参与讨论
1 (共1页)
a***u
发帖数: 383
1
首先感谢本版mitbbsfanfan的热情内推才能得到这个机会。
之前已经面过2轮拿到了on site,但最初面的那个组招满了。HR说换个组,要加一轮电
面。面试官是国人manager。
电面题目是system design, 设计Imessage. 具体点就是说 如果A 给 B 发一个
message, B如果分别在iphone和mac或其他apple设备上登录,这些设备都可以收到
message。message的数量可以很大,单个message本身也可以很大。
我system design问题准备不足,之前也没想到电面会考这个,说得磕磕巴巴。当时的
想法是先构造3个类,user(client),server,message。user之间通过server传递
message。user(client)有一个client用来接收收到的信息。如果同一个uer有多个设
备登录,这些设备可以在server端的user帐户里注册,然后server把信息分别发给每个
设备。
user类里面东西也没想太多,一个记录contacts的hashmap 一个message queue, send
,receive function。
message类里面就是sender and receiver的user id,还有一个Sting 表示text
面试官提问如果server 挂了怎么办? 言外之意是不用server这个类,如何实现通信。
这个问题问得我有点蒙,因为我觉得如果server挂了,A怎么才能知道B在几个设备上登
录?犹豫了一会儿,想到以前看过一个设计facebook news feed的题,应该是一个user
登录设备后,通知所有他的contacts,我登录了这个设备。
之前我想的事contacts的hashmap key是string代表名字,value是个int表示id就行了
,按现在的情况要单独设计一个联系人类,里面至少要存放哪些设备登录了。因为
contact也需要有user name, id这些东西,于是我傻B呵呵的把hashmap的 value改成
了user类。然后一想,不对啊,user累里面还有message queue呢,contacts不用这个
。电话那边应该是听不下去了,让我别在电脑上敲了,直接说就思路就行了。
然后又问,如果message很多超出你的memory怎么办。我说那就给每个message queue设
定一个size,超出就接受不了,同时提醒user清空收件箱。如果可以有server的话,
server给每个user在云端分配大一点的空间。还可以在mesage里面加date参数,收件箱
满了,删最早的。
接下来让我问问题,然后挂了。
希望板上各位大牛能否讨论一下这题。虽然这次挂了,但我还挺想把这个搞明白的。
l*****a
发帖数: 14598
2
报一下组名吧

【在 a***u 的大作中提到】
: 首先感谢本版mitbbsfanfan的热情内推才能得到这个机会。
: 之前已经面过2轮拿到了on site,但最初面的那个组招满了。HR说换个组,要加一轮电
: 面。面试官是国人manager。
: 电面题目是system design, 设计Imessage. 具体点就是说 如果A 给 B 发一个
: message, B如果分别在iphone和mac或其他apple设备上登录,这些设备都可以收到
: message。message的数量可以很大,单个message本身也可以很大。
: 我system design问题准备不足,之前也没想到电面会考这个,说得磕磕巴巴。当时的
: 想法是先构造3个类,user(client),server,message。user之间通过server传递
: message。user(client)有一个client用来接收收到的信息。如果同一个uer有多个设
: 备登录,这些设备可以在server端的user帐户里注册,然后server把信息分别发给每个

a***u
发帖数: 383
3
补充一下,当时自己作死。本来面试官没让我在 coderpad上编写,让我直接说就好了
,我怕说不明白,就要求用coderpad。结果发现,写一个类吧,如果不写constructor
显得太山寨,如果写constructor那要敲的字实在太多了。
因为当时在想无server条件下的设备通信花了好多时间,最后每个类写的都不完整。
a***u
发帖数: 383
4
growth

【在 l*****a 的大作中提到】
: 报一下组名吧
d******e
发帖数: 2265
5
这个你怎么可能写类。
都是用现有工具。简单的redis,或者其他kv storage存信息。不要效率数据库好了。
B上线握手后,服务端一个actor开始push信息到设备上。结束。

【在 a***u 的大作中提到】
: 首先感谢本版mitbbsfanfan的热情内推才能得到这个机会。
: 之前已经面过2轮拿到了on site,但最初面的那个组招满了。HR说换个组,要加一轮电
: 面。面试官是国人manager。
: 电面题目是system design, 设计Imessage. 具体点就是说 如果A 给 B 发一个
: message, B如果分别在iphone和mac或其他apple设备上登录,这些设备都可以收到
: message。message的数量可以很大,单个message本身也可以很大。
: 我system design问题准备不足,之前也没想到电面会考这个,说得磕磕巴巴。当时的
: 想法是先构造3个类,user(client),server,message。user之间通过server传递
: message。user(client)有一个client用来接收收到的信息。如果同一个uer有多个设
: 备登录,这些设备可以在server端的user帐户里注册,然后server把信息分别发给每个

e******0
发帖数: 291
6
有做个messgae的解疑吗?user 和user之间通信应该首次握手之后可以不走server了吧
s*****m
发帖数: 8094
7
不能同意你更多,绝对是装逼作死啊!!
没事,下次吸取教训就好:没事别自己请缨写code。

constructor

【在 a***u 的大作中提到】
: 补充一下,当时自己作死。本来面试官没让我在 coderpad上编写,让我直接说就好了
: ,我怕说不明白,就要求用coderpad。结果发现,写一个类吧,如果不写constructor
: 显得太山寨,如果写constructor那要敲的字实在太多了。
: 因为当时在想无server条件下的设备通信花了好多时间,最后每个类写的都不完整。

s*****m
发帖数: 8094
8
不要这么残忍吧大牛!

【在 e******0 的大作中提到】
: 有做个messgae的解疑吗?user 和user之间通信应该首次握手之后可以不走server了吧
z*******o
发帖数: 4773
9
电面设计太难,画一个图就搞定的事要说半天能说清楚就不错了。
觉得可以写写类名什么关键地方,确认讲清楚了。
a***u
发帖数: 383
10
没太懂,能不能具体说一下握手后的actor,面试官的条件是server is dead,而且b可
以多个设备登录的。

【在 d******e 的大作中提到】
: 这个你怎么可能写类。
: 都是用现有工具。简单的redis,或者其他kv storage存信息。不要效率数据库好了。
: B上线握手后,服务端一个actor开始push信息到设备上。结束。

相关主题
startup电面被恶心了面试官总是倾向于招志同道合的
如何回答follow-up问题: 如何线程安全,如何scale?一个电面
系统设计题怎么准备电面,真tmd犯贱,大家引以为戒!
进入JobHunting版参与讨论
a***u
发帖数: 383
11
那如果其中一个user又登录了一个设备,怎么办?

【在 e******0 的大作中提到】
: 有做个messgae的解疑吗?user 和user之间通信应该首次握手之后可以不走server了吧
d******e
发帖数: 2265
12
真实场景:比如twitter又数千台redis。做consistent hashing.一台坏了还有其他的。
又有很多台connection server比如说websocket活着其他tcp, udp,如果它们都跪了,
你也没办法。
而且server当了,数据还在,等重启再说呗。
设备1 of B登录后,通知server,我拿到第n条信息, server就起一个worker,可以是
一个erland actor,活着一个thread, 开始push信息到serve.活着pull也可以。
设备2 of B同理。
你可以想象一下weixin怎么做的。

【在 a***u 的大作中提到】
: 没太懂,能不能具体说一下握手后的actor,面试官的条件是server is dead,而且b可
: 以多个设备登录的。

z*******3
发帖数: 13709
13

actor是erlang, akka的东西,他说复杂了
你要是有兴趣,看看akka,vert.x这些就知道了,vert.x里面的verticle就是actor
server挂了之后,问问能不能启新的node,假设你用的是cloud
如果可以的话,新的node需要从persistence中读出之前的数据来
所以用redis就比较合理,因为redis可以做到persistence
如果是纯内存计算的server的话,就不行了
或者前面说的,多个设备之间自己做一个copy
第一次登陆了之后,server把多个设备的信息反馈给每一个client
然后每一个client本地做备份,然后就可以不用经过server了
就像qq聊天,大多数时候都是client -> client
但是你也可以选择client -> server -> client

【在 a***u 的大作中提到】
: 没太懂,能不能具体说一下握手后的actor,面试官的条件是server is dead,而且b可
: 以多个设备登录的。

z*******3
发帖数: 13709
14

的。
wechat

【在 d******e 的大作中提到】
: 真实场景:比如twitter又数千台redis。做consistent hashing.一台坏了还有其他的。
: 又有很多台connection server比如说websocket活着其他tcp, udp,如果它们都跪了,
: 你也没办法。
: 而且server当了,数据还在,等重启再说呗。
: 设备1 of B登录后,通知server,我拿到第n条信息, server就起一个worker,可以是
: 一个erland actor,活着一个thread, 开始push信息到serve.活着pull也可以。
: 设备2 of B同理。
: 你可以想象一下weixin怎么做的。

q******8
发帖数: 848
15
怎么会直接说到类设计呢,这个是system层面的东西。楼主加油,补充一些系统方面的
知识
h*******0
发帖数: 270
16
我觉得system design从类开始设计就是错误得
d******e
发帖数: 2265
17
whatsup就是 erlang. 典型案例啊。akka倒是还没人用。

【在 z*******3 的大作中提到】
:
: 的。
: wechat

N*****i
发帖数: 74
18
感觉是Aws 的SNS和SQS. 这个自己弄infrastructure太难处理了。
k******a
发帖数: 44
19
消息肯定要用一个队列管理,每一个消息有一个id,id按照时间排序。
各个设备维护一个本地当前消息id,每次从队列取比当前id更新的消息。
服务器端需要cluster,就是多台服务器共同处理。消息本身以id为key保存在
distribute key value map里,并利用memcached类的东西加速。如果一台服务器crash
,其他服务器继续工作。distributed key value map可以保证数据的availability。
当数据太大的时候,将一个消息分为多个部分,每个部分看做一个消息,只要消息的id
是顺序正确的就可以。
用cluster的horizontal scale解决消息数量巨大的问题,以及availability问题。具
体的技术,可以使用erlang, scala,nodejs这些支持高并发的技术。
感觉面试官可能关心的系统架构设计,而不是OO设计。
a***u
发帖数: 383
20
多谢解答,有点懂了。感觉这个题目对我这么一个new grads来说好难啊,

crash
id

【在 k******a 的大作中提到】
: 消息肯定要用一个队列管理,每一个消息有一个id,id按照时间排序。
: 各个设备维护一个本地当前消息id,每次从队列取比当前id更新的消息。
: 服务器端需要cluster,就是多台服务器共同处理。消息本身以id为key保存在
: distribute key value map里,并利用memcached类的东西加速。如果一台服务器crash
: ,其他服务器继续工作。distributed key value map可以保证数据的availability。
: 当数据太大的时候,将一个消息分为多个部分,每个部分看做一个消息,只要消息的id
: 是顺序正确的就可以。
: 用cluster的horizontal scale解决消息数量巨大的问题,以及availability问题。具
: 体的技术,可以使用erlang, scala,nodejs这些支持高并发的技术。
: 感觉面试官可能关心的系统架构设计,而不是OO设计。

1 (共1页)
进入JobHunting版参与讨论
相关主题
电面后被拒,帮忙看看发bloomberg面经 [电面,目测已挂,赞人品]
发现好多中国人面中国人都tough啊!!startup电面被恶心了
电面后 面试官 这样的回复有戏没?如何回答follow-up问题: 如何线程安全,如何scale?
电面时间太短是不是没戏了系统设计题怎么准备
【Fulltime】西雅图 天使轮 startup 招工程师面试官总是倾向于招志同道合的
王者荣耀 系统设计一个电面
bloomberg已挂电面,真tmd犯贱,大家引以为戒!
G家电面(已挂)下午电面MS
相关话题的讨论汇总
话题: server话题: user话题: 设备话题: message话题: 登录