10
回答
这是网上流传的腾讯公司的面试题目设计题:约10亿qq用户,每个用户可以设定100字符以内的个人签名,请设计一个服务器如何高效支持用户对签名的查询,平均每秒有1000个用户请求
滴滴云服务器,限时包月0.9元,为开发者而生>>>   

希望腾讯公司的程序员,给出个答案,教育一下我们JAVA程序员,呵呵


用java语言实现,怎么做,思路是什么,加上注释,一起学习

 设计题:约10亿qq用户,每个用户可以设定100字符以内的个人签名,请设计一个服务器如何高效支持用户对签名的查询,平均每秒有1000个用户请求

<无标签>
举报
Baclk5
发帖于3年前 10回/2K+阅
共有10个答案 最后回答: 3年前

从地址的角度出发,只需要通过Key找到数据结构的起始点,然后修改一下对象的签名的堆内容。

相应的K/V就可以解决了。数量过大,就按一个比较平均的分片算法分布开,然后每个分片做好副本集和切换。

至于1000人同时修改,那跟本就不会修改到同一个地址上面去,也不需要锁。

read就更不用锁了,这种并不是很重要的数据,不需要实时,等修改了,再去读。

这种2B问题一般都是一些2B面试官问的,一点实际意义都没有。

--- 共有 4 条评论 ---
淡定的wo完全同意层主的思路,和我想的差不多。 本身只是读,直接kv的方式解决就是。没什么复杂的。 3年前 回复
回去干活回复 @thomas2 : 腾讯又怎么样,腾讯就都是人才了,2货一样也有. 3年前 回复
0x0001问题是查,不是写 3年前 回复
Baclk5居然这么骂,这是网上流传的腾讯公司的面试题目 3年前 回复
采用redis等nosql就可以解决,为什么是java,考察用java现场写一个优秀的hash算法构造一个k/V还是什么?觉得这种问题也不切实际,如果用于面试,平时写写还行。
--- 共有 2 条评论 ---
缪斯的情人BitSet? 3年前 回复
Baclk5关键是我是JAVA程序员,亲 3年前 回复
这个题目如果真的是腾讯的题目,那这个题目的意思应该不是查某一个用户的签名
如果是查某一个用户的签名,通过用户ID分片存储到不同的机器上,基本上没什么问题


真实的业务场景应该是这样的,一个用户修改了签名,所有加他为好友的用户都应该看到


遇到的问题将是: 假设好友列表中有2000好友,怎么查出这些用户的签名展示出来 (用数据分片方案,最坏的情况可能在2000个数据分片中,需要发起2000次查询)


假设使用每个用户都存一份好友的签名数据到自己的数据分片中,这样查询好友的签名只需要查询一次就可以查询到所有好友的签名列表


这样将遇到另外一个问题: 假设某个用户有10w用户加他为好友了,他修改一个签名,需要发送10w份相同的数据到不同的数据分片中,
这个问题基本上使用队列同步,但是队列的同步速度,存储的数据量将会是另外一个问题


这个问题我没有什么解决办法,期待各位大牛的指点

--- 共有 2 条评论 ---
首席的哥队长是否可以钻钻题目的空子,100字节10亿用户,算算100G不到,分不了几个片 3年前 回复
Baclk5感谢你的精彩评论,让我焕然大悟 3年前 回复

你说的查询时  什么查询  ?

是输入完整的一条签名  然后搜索出来 这条签名

还是只是输入关键字  搜索相关签名

同时问题又要分为  用户只查询自己的,还是查询所有用户的。(如果是后者 楼上说的 缓存能做到?)

 

面试只能说出解决问题的思路,具体怎么做中国有几个公司有过这样的经验?

估计是tentcent拿来压工资的工具,想来,好,解决了就给好工资,解决不了就少点吧?ok?

如果是通过用户名去查询,则mongodb解决这个需求,10亿数据,对用户的名称建立一个索引就OK。

如果需要模糊匹配查询签名,需要动用到lucence,这样的话可能要在前端使用内存缓存一些热数据,也是能解决的

PS:java只是语言,并不是思想吧。想来这个也是考察一些设计思路上的东西,看看用过哪些工具啊啥的

顶部