童话说说技术创业美文职业
投稿投诉
职业母婴
职场个人
历史治疗
笔记技能
美文纠纷
幽默家庭
范文作文
乐趣解密
创业案例
社会工作
新闻家居
心理安全
技术八卦
仲裁思考
生活时事
运势奇闻
说说企业
魅力社交
安好健康
传统笑话
童话初中
男女饮食
周易阅读
爱好两性

腾讯微信产品经理面试题,你也来答答?

7月11日 九阙忬投稿
  “小道消息”的Fenng前几天发了三道产品经理的面试题,题目是关于微信的,如下:
  其中第二题是一道偏技术的问题,出现在产品经理的面试中确实有点意外,但这题不失为一道很好的产品设计与系统分析的题目。系统分析也是我们“产品经理学技术”系列文章规划中的一个部分,也是将我们所讲的技术进行“升华”的一部分内容。
  下面我们尝试回答一下这个问题,算是抛砖引玉了,大家有好的答案也可以给我们留言进行讨论。
  朋友圈的基本数据结构设计是怎样的?既能做到完美阅读权限设置,又能兼顾性能?
  关于消息的基础数据,比如文字、图片、时间、位置等这些咱就不表了。这些数据基本上与权限和性能没有多大关系,可以理解为单独存储,纯技术活。这里只讨论权限与性能相关的数据结构。
  而在权限管理上,微信采用了给用户打“标签”来进行分组,这个标签的分组与微信通讯录一致。在数据上,就是给每个关系增加一个“标签”标记。这里需要注意的是,虽然微信的关系在产品使用上给用户是双向的(即互相关注),但是在存储的时候,是给互相关的两个用户分别建立了关系数据,也就是每个人独有自己的一份“通讯录”。这通过删除了自己的好友之后,自己并不从别人的通讯录删除就可以看得出来。标签分组的基础数据就是这样了,这也是后面朋友圈权限管理的基础。
  对于个人朋友圈timeline所能看到的消息,按照一般的逻辑是先获取所有朋友的消息,然后剔除掉没有授权给自己看的消息、剔除掉自己屏蔽的用户消息,然后才得到自己当前看到的timeline。如果是这样的逻辑的话,等于每次刷新朋友圈,都要跑到所有的消息池里面去找到上述通讯录中朋友们的消息,还要对找到的每条消息去判断用户是否有权限阅读。这显然是效率低下的方式,更何况微信是这么大的一个访问量和数据量。所以,这种数据结构设计是行不通的了。
  一般逻辑下朋友圈每次读取的过程
  解决这种性能问题一般的思路就是把需要大计算量的过程分散到平时零散的时间去做。在这里的思路就是:平时就把每个用户需要的timeline数据按照权限设置准备好,等到用的时候(刷新朋友圈)就直接读取准备好的内容。那么答案就出来了:除了存储一份上面讲到的文字,图片等基本信息外,还需要给每个用户存储一份timeline数据,注意,是每个用户一份。当然,这里的“每份”不需要存储完整信息,只需要存储消息的ID和时间(可能需要)。每个人刷新自己的朋友圈时,读取自己的那份数据就行了,既不用去消息池子里面筛选,也不用判断用户权限。
  那是怎么实现权限控制呢?
  当一个用户发布一条消息时会按照上面讲的标签设置相关的权限,服务器就会给每个有权限接收这条消息的用户的timeline中写入这条消息。也就是在用户发布的这一刻,就做好了权限安排,而不是等到读取的时候。这样就自然减少了读取的时候的计算量,提高了效率。
  发布时进行权限控制(示意图,实际比这复杂)
  至于分库分表这些就不展开了,知道有这么回事就行。有时候这种技术上的设计也是会限制产品的设计。
  那怎么证明上面说的合理呢?
  感兴趣的同学可以去测试下:先发一条带阅读权限的消息,比如允许某个标签的人看。然后再给这个标签添加一个新人。结果是这个新人是看不到这条消息的,因为权限划分是在发布的时候就划分好了,新人加入标签的时间是在发布之后,所以没法获得这条消息的权限分配机会,虽然他后来在标签组中,但是仍然没有办法看到这条消息。
  这就是上面问题的答案,其实主要考察的是在产品设计时是否能够考虑到技术方案的限制。我把上面的答案贴在知乎上,有人就问了:微信产品团队是在一开始设计就考虑到了这个问题,还是经过不断的迭代成现在这样的?这是个好问题,好的产品经理应该在设计的时候就考虑到这种情况,或者至少应该有相应的预案,而不至于在出现问题或者被研发发难时束手无策。在这个案例中,微信是一开始考虑到了还是迭代过来的并不重要,对于微信“朋友圈”来说,本来就是一个迭代产品,最早的权限管理是单独于通讯录的,那个时候是纯插件的模式,现在才与通讯录共用了分组模式进行权限管理。
  如果对于上面的技术对产品设计的影响还不是很清晰的话,那么就再跟两个问题(好的产品经理除了能回答问题外,还要能提出问题):
  1、朋友圈的消息为啥不能编辑,只能删除?
  我理解这是产品设计和技术实现平衡的结果。编辑功能对于主要以发布照片和即时消息的朋友圈来说,并不是刚性的需求。但是在上面的技术框架下,编辑功能在技术上,就不好实现。具体来说就是:前面我们讲了,权限的控制是在发布的时候确定了,如果增加编辑功能的话,意味着一旦用户在编辑的时候调整了阅读权限的话,就需要将之前写入到有权限的用户timeline的数据删除掉,重新写入一遍,这对于技术实现来说,也是一个很大的成本,需要更新的数据很多(该条消息所有涉及到的用户的timeline数据都要更新)。所以,平衡的结果是宁愿让用户删除了重新发布,也不提供编辑的功能。你可能又要问了,删除时就不用更新相关人的timeline吗?首先删除比写入简单多了,第二个是用户timeline的数据可能还真不用删除。具体原因就不解释了,想知道的给我们留言单独解释。
  2、上述发布时的权限分配规则中会考虑屏蔽的人吗?也就是问,如果一个用户A屏蔽了某个人B的朋友圈,B发布的消息会进入A的timeline的准备数据中吗(不是指用户微信里看到的)?
  先说一下我的答案:在发布时的权限控制是不会考虑屏蔽的人的。前面我们讲了,在消息发布的时候,服务器会根据用户设置的权限信息,将消息有选择的放到有权限阅读人的timeline中。如果这个时候需要考虑屏蔽的人的话,那就还要去读取每个有权限阅读的人的屏蔽人清单,然后根据每个人的清单去决定是不是放到这个人的timeline中,显然这又会增加多大的计算量。那么有人就要问了,那怎么实现屏蔽的功能呢?两种方法实现,一种是在这个用户刷新朋友圈时,将读取到的自己的那份timeline数据(含屏蔽人的消息),在服务器端过滤掉屏蔽人的消息;另外一种则是读取的时候,服务器端按照原样下发给客户端,客户端根据存储的屏蔽清单来过滤,被屏蔽的则不显示给用户。两种方法在实现效率上几乎没有差别,通过对于微信的使用体验来看,我倾向于这个是由客户端来过滤的。实际这也可以有方法去验证,这里就不做了。这种屏蔽方案也是基于上面提到的“把需要大计算量的过程分散到平时零散的时间去做”。
  那么怎么验证上述关于屏蔽的逻辑是对的呢?上面我们在验证“发布时进行权限分配”中讲到了,后添加标签分组的人,是看不到之前发布的分组权限消息的。这里我们也可以通过类似的方法验证:把用户屏蔽后,该用户的消息全部看不到,但是取消屏蔽之后,又立即能在朋友圈中看到,包括之前发布的消息但没有看过的消息。
  最后要说的是,作为一个微信设计的旁观者,以上答案是作为一个用户从系统分析的角度去考虑的,并不代表微信确实是这样的一个设计思路,但答案中的方案已经尽可能做到了可以验证。答案中也没有涉及到具体的技术,仅仅是一个系统分析的思路。
  很高兴看到越来越多的产品经理招聘开始注重技术能力了。前段时间各大互联网公司的产品经理校招也出现了不少“技术”相关的试题,说明业内开始意识到技术能力对于产品设计的辅助作用。还是那句话,技术并不是产品设计必须的,但是能有的话效率会提升很多。
投诉 评论 转载

豆瓣的商业救赎:“产品”联盟在《广东互联网大会分享(一):怎么做好产品》一文中,彭晋杰曾言:豆瓣,它是一个成功的产品,但也是一个不成功的产品。其成功在于:豆瓣将用户体验度、用户流量、使用人群做的非常……艺术在产品设计中扮演的角色小编推荐:很多人觉得设计是艺术在生活中的应用,但是具体应该怎么应用呢,本文给了集中可行性建议,不妨一试哦很多人将视觉艺术与设计混为一谈,就因为它们有诸多相似点。艺术与设计……腾讯微信产品经理面试题,你也来答答?“小道消息”的Fenng前几天发了三道产品经理的面试题,题目是关于微信的,如下:其中第二题是一道偏技术的问题,出现在产品经理的面试中确实有点意外,但这题不失为一道很好的产……〔转译〕低保真原型初级指南原文作者:LauraB文章来源:Smashingmagazine前言:设计师PaulRand曾……Google说:少年,看你移动鼠标的手法,就知道你一定是机器当阿兰图灵在1947年第一次构想图灵测试的时候,他提出了一个很重要的点:有着和人类智能相近的计算程序,通过回答一系列问题,可以被区分究竟是程序还是人类。在大约70年之后,Goo……聊聊五个最常见的设计思维错误编者按:Facebook产品设计总监JulieZhuo的个人私货!光修炼视觉功夫是技,想跃升总监,得有些心法,今天总监级人物出马,分享五个最常见的设计思维错误,小编特……产品细节中的情感化设计原研哉在他的《设计中的设计》中有介绍过这样一个案例:日本机场原来是用一个圆圈和一个方块表示出入的区别,形式简单并且好用,但设计师佐藤雅彦却用一个更“温暖”的方式来重新设计了出入……下载功能中的逻辑思考下载功能属于手机的基础模块,手机App的使用都需要预先下载和安装。在下载中,一些逻辑值得细细思考。下载个数逻辑对比了几款下载软件,发现默认下载的文件个数一般是2个或……聊聊WebApp、HybridApp与NativeApp的设目前主流应用程序大体分为三类:WebApp、HybridApp、NativeApp。一、WebApp、HybridApp、NativeApp纵向对比首先,我们来看看……10步大幅提升网站可访问性10步大幅提升网站可访问性。每一步都可以在20分钟内完成。这篇文章也可以在20分钟内看完。第一步,检查,不允许空,不允许过长,简洁明了。是第一个可以访问到内容的元素……【App】从“下厨房”开始作为一个吃货,在现金流处于窘迫的情况下,终于被逼着下厨房。计划每个周学一个新菜,这是我和下厨房这款app的开始,从下厨房上面我收藏我每一个周要学的新菜谱,然后下厨房会帮用户提供……为AppleWatch进行设计的五点原则在为AppleWatch进行设计时,以下五点是设计师们需要注意的:1。AppleWatch是个人化的设备AppleWatch是面向穿戴而设计的,它不是一种一直被放在……
如何设计更好的个性推荐UI设计:配色方案的选取,是使用深色系较好,还是浅色系合适?交互设计:如何避免业务需求的遗漏产品设计师:对于软件来说,美感到底有多重要?分析师BenThompson:为了更好的用户体验,谷歌拿出了如何规范移动应用交互设计?UIUX设计师须知的11个小技巧用户体验是玄学吗?限时促销的奥秘:如何在UX设计中制造“饥饿感”?用户体验和可用性之间的联系和差异,你可知?线框在banner设计中的应用总结消费电子人机交互浅谈设计实战健身应用Mannva的UXUI设计流程是怎样的
未解之谜徐福东渡寻找长生药的三大谜团过去12年,微软产品有七成漏洞是内存安全问题order什么意思(ordinary是什么意思)儒林外史鲁编修是怎样的人性格特点分析微信现象冲击新西兰帮助新西兰与中国互通夜寂寞的象一本情书爱情诗歌皓镧传中吕不韦在真实的历史上是怎样的一个人烤红薯的几大危害感恩母亲征文演讲稿大学生应该选择什么方式理财鸠酒和鸩酒的关系:史书上仅有记载鸩酒(毒酒的代名词)社会基因,用这三招超越父母

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找作文动态热点娱乐育儿情感教程科技体育养生教案探索美文旅游财经日志励志范文论文时尚保健游戏护肤业界