免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: 侧面bt
打印 上一主题 下一主题

来看看真正有技术含量的面试题! [复制链接]

论坛徽章:
0
21 [报告]
发表于 2010-04-06 15:55 |只看该作者
你看LZ提的这些题目,在那种压力的情况下面,有必要这么搞吗?

这不是一种操蛋行为吗?
不同的压力,到算法难道都是一成不变?

论坛徽章:
0
22 [报告]
发表于 2010-04-06 16:01 |只看该作者
不过, benjiam 同志,你估计没有做过内存数据库的应用..
速度比你想象中的快得多,而且又有数据库的特性...
如果业务刚好适合,为啥不用?

论坛徽章:
0
23 [报告]
发表于 2010-04-06 16:49 |只看该作者
对于问题1, 一个笨拙的设计思路:

1)为所有的用户建立一张非常大的HASH表(大小为所有用户数),HASH函数直接选择userID,第一个元素存储的是其用户本身,后面的结点存储的是其好友;
2)如果把C添加为A的好友,就以A为index,将C添加到A的桶中;
3)如果要判断B是否是A的二维好友,则依次遍历A的所有好友,对于每一个A的好友buddy[i],用它的userID做HASH,得到buddy[i]的HASH桶,然后遍历此HASH桶,看能否找到B,如果找到则返回B是A的二维好友,否则不是。

由于需要遍历两个HASH桶,所以需要的时间是O(n^2);

空间是1000万乘以50.

论坛徽章:
0
24 [报告]
发表于 2010-04-06 17:48 |只看该作者
不过, benjiam 同志,你估计没有做过内存数据库的应用..
速度比你想象中的快得多,而且又有数据库的特性. ...
hansion3406 发表于 2010-04-06 16:01


我讨论的是一个比较实用的例子。不是简单的面试题。 这种依靠db的方案,在扩展性上问题很大。所以不是很好的方案

论坛徽章:
0
25 [报告]
发表于 2010-04-06 21:12 |只看该作者
这几个问题都是国内最大的那几个互联网公司正在解决的问题,没几年相关工作经验还真答不好。基本属于传统数据库目前解决不了的成本和线性扩展的问题。

论坛徽章:
0
26 [报告]
发表于 2010-04-06 23:59 |只看该作者
简单想了一下思路,抛砖引玉一下:
1:可以自己设计数据结构也可以使用数据库,自己设计数据结构的话,我会先设计一个hash表,用户id的哈希值为表索引,每个槽后面跟一个平衡二叉树,二叉树节点为好友id。简单估算之后发现总存储量为1000w*(4+50*12)=5.6G,大于4G,或者采用64位操作系统,或者采用多个32位服务器(选3个,按大小hash一下就行)。只说64位单台服务器的(多台服务器仅多一层hash),查找二维好友需要先找到用户的槽,对平衡树中的每个用户再找他的好友。由于找到槽需要O(1)的时间,平衡树中平均有50个节点,从平衡树中查找好友需要lg(50)的时间,故而查找时间为1+50*lg(50)=283;插入/删除的话比较简单了,都是O(1+lg(50))。
   如果采用数据库设计的话,一种表,两个字段,用户id和好友id,根据我们的数据量1000w*50=5亿应该分表。假设用mysql的话,根据之前的经验,每个db下数据表保持在300以下,每个表数据量保持在100w以下速度比较平稳,分成103个表,每个表大概49w数据量。查询二维好友的话,也是先查出所有一维好友,然后对每个一维好友再查一遍好友,时间跟上面的类似。
2:方式为数据库+文件。数据库中存url,创建时间,网页文件目录名,而文件中存真实网页内容。考虑到会按时间批量获取网页,则将网页按(年/月/日)的日期目录存放,每个目录下文件量也不会太大。
3:两个关系表,用户和分类关系表,分类和文章关系表,两个关系表都做分表。
4:还是用数据库吧,三种表,歌曲表,url表,歌曲与url关系表,这三个表都可以hash。歌曲表按歌曲id哈希,url表按url的id哈希,歌曲与url关系表按歌曲id哈希,将URL_ID置为不可用时仅在url表中设置状态,而下次查询歌曲对应的url时检查一下url的可用状态,不可用则删除此条url记录和歌曲与url关系表中的对应记录。

怎么感觉这些题目都是考数据库设计呢?至于存储量大了,访问量大了怎么办,只能是分而治之了。^_^

论坛徽章:
0
27 [报告]
发表于 2010-04-07 00:04 |只看该作者
第一道很有难度啊! 如果将情况考虑成qq 的服务器,而不是1000w 人, 50个好友这个数量。

关键是实时的实 ...
benjiam 发表于 2010-04-06 09:28

qq的上下线一般不用自己维护吧,他只需要把上线消息推送给用户的好友就可以了,自己想统计的话几个日志就可以了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP