2 Star 65 Fork 54

柳诗妍 / Java-Interview-Advanced

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
147.md 2.87 KB
一键复制 编辑 原始数据 按行查看 历史

147、假设让你来负责微信朋友圈这样的社交系统,应该如何设计?(上)

朋友圈设计

你自己可以发朋友圈,刷朋友,看到你自己发的朋友圈以及你的好友发的朋友圈,你可以对朋友圈进行点赞,进行评论,你可以去设置权限,你不看某些人的朋友圈,不让某些人看你的朋友圈,拉黑或者删除某个好友再也不用看到他的朋友圈了

首先你发送朋友圈的时候,一般是9张图片配合一些文字,组成了一条朋友前,文字还好说,但是图片就会稍微有点大了,也可以是一个短视频配合一些文字,点击发送,假设你要同步发送,可能会导致你点击发送按钮之后,弹出一个旋转框,告诉你发送中,持续好几秒种中,用户体验是比较差的

有一个好一点的办法,可以把这些数据在客户端本地暂存一下,然后直接让你发送成功返回,走一个异步发送状态,然后立马让你自己在刷朋友圈的时候,可以把你客户端本地的刚发的朋友圈加载出来看到

仅仅是这样,就会变成,发朋友圈成了你自己的自娱自乐,因为你的朋友圈并没有发送出去让你的好朋友看到,可以走一个异步的模式,把你的朋友圈里的图片或者视频+文字,花费几秒钟的时间传送到你的后台服务器上去存储

之后,你的朋友就可以从后台服务器上加载你的朋友圈里的图片和视频,可以看到了

你的那些视频和图片,是不是可以就都直接就近上传到CDN(content delivery network),不是直接到朋友圈系统的后台,这样速度是很快的;接着就是发送请求到朋友圈后端系统,请求包括图片的地址,你配的文字,发朋友圈的时候可以选择开放给谁看,这些数据写入到朋友圈发布表里去

然后需要在相册表里写入索引数据,里面存放的是对你的发布表里的数据引用,这样你以后浏览相册的时候,都是根据相册里的索引数据到发布表里找实际对应的数据的

接着就走一个离线批处理,通过批处理程序把这条朋友圈写入到你所有好友的时间线表里去,你好友的时间线表里就是存放了他刷朋友圈的时候,可以按照时间线刷到的所有好友的朋友圈

你有3个好朋友,每个好朋友都在时间线表里有一个朋友圈的时间线,按照时间顺序排列了他可以查看的所有朋友圈,包括了他自己发的朋友圈以及他的好友发的朋友圈允许他看的那些,都会在这里

然后你的好朋友刷朋友圈的时候,就会知道自己的时间线表里有个新的变化,就是有好友发了朋友圈,此时就会提示你一个红色的圆点,你就开始刷,刷的时候就根据图片url地址,去cdn拉取的

Java
1
https://gitee.com/th_520/Java-Interview-Advanced.git
git@gitee.com:th_520/Java-Interview-Advanced.git
th_520
Java-Interview-Advanced
Java-Interview-Advanced
master

搜索帮助