锁定老帖子 主题:迅雷的一个面试题
精华帖 (8) :: 良好帖 (3) :: 新手帖 (0) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2012-02-28
最后修改:2012-02-28
看错了
|
|
返回顶楼 | |
发表时间:2012-02-28
根据ID划分,每一千万个记录做一个文件,ID加索引,排名=该表中的rowNum+表的排号,不就OK吗
|
|
返回顶楼 | |
发表时间:2012-02-28
我觉的应该做二分查找,既然他已经排好序了,那查找它排名为第1亿条的记录就肯定非常快,然后拿出来比较,这样做多比较30次,查找数据30,比较费I/O,这样应该比较快把,它题目没说让我们存储
|
|
返回顶楼 | |
发表时间:2012-02-29
zfcejb 写道 我觉的应该做二分查找,既然他已经排好序了,那查找它排名为第1亿条的记录就肯定非常快,然后拿出来比较,这样做多比较30次,查找数据30,比较费I/O,这样应该比较快把,它题目没说让我们存储
我觉得主要是划分后的排名 |
|
返回顶楼 | |
发表时间:2012-02-29
这样可以吗
1、首先根据用户表的积分分区id 找到分区表 对应的积分表名 2、再根据积分表名 查 积分 3、当积分表有插入/删除时 通过 触发器修改分区表的总记录数(或定期触发) 4、当积分表有变动自动修改用户表的积分分区id 问题: 1、刚注册用户没有积分分区id,可以认为是0,排名的话就是 select sum(总记录数) from 分区表 2、其他用户的排名: 之前分区的排名(从) + 当前分区的排名 3、缓存用户的排名,设置过期时间 4、可以定期的计算排名设置到用户表 5、用户表的分区再另行考虑 |
|
返回顶楼 | |
发表时间:2012-02-29
没想到好办法,但感觉还是要充分利用他给的条件:分数已排序
|
|
返回顶楼 | |
发表时间:2012-02-29
为什么一定要一次加载1000W呢,一次加载100万内存就可以放下了。
|
|
返回顶楼 | |
发表时间:2012-02-29
我觉得其实就是操作系统的思想,内存分页
|
|
返回顶楼 | |
发表时间:2012-02-29
我也觉着二分查找比较好
|
|
返回顶楼 | |
发表时间:2012-02-29
分区思路肯定没错
比较奇怪的是,实际情况中,他表中的数据怎么可能是排好序的? |
|
返回顶楼 | |