论坛首页 Java企业应用论坛

迅雷的一个面试题

浏览 54755 次
精华帖 (8) :: 良好帖 (3) :: 新手帖 (0) :: 隐藏帖 (1)
作者 正文
   发表时间:2012-02-28   最后修改:2012-02-28

 

 

看错了

 

 

 

0 请登录后投票
   发表时间:2012-02-28  
根据ID划分,每一千万个记录做一个文件,ID加索引,排名=该表中的rowNum+表的排号,不就OK吗
0 请登录后投票
   发表时间:2012-02-28  
我觉的应该做二分查找,既然他已经排好序了,那查找它排名为第1亿条的记录就肯定非常快,然后拿出来比较,这样做多比较30次,查找数据30,比较费I/O,这样应该比较快把,它题目没说让我们存储
0 请登录后投票
   发表时间:2012-02-29  
zfcejb 写道
我觉的应该做二分查找,既然他已经排好序了,那查找它排名为第1亿条的记录就肯定非常快,然后拿出来比较,这样做多比较30次,查找数据30,比较费I/O,这样应该比较快把,它题目没说让我们存储


我觉得主要是划分后的排名
0 请登录后投票
   发表时间:2012-02-29  
这样可以吗





1、首先根据用户表的积分分区id 找到分区表 对应的积分表名

2、再根据积分表名 查 积分

3、当积分表有插入/删除时 通过 触发器修改分区表的总记录数(或定期触发)

4、当积分表有变动自动修改用户表的积分分区id

问题:
   1、刚注册用户没有积分分区id,可以认为是0,排名的话就是 select sum(总记录数) from 分区表

   2、其他用户的排名: 之前分区的排名(从) + 当前分区的排名

   3、缓存用户的排名,设置过期时间

   4、可以定期的计算排名设置到用户表 

   5、用户表的分区再另行考虑
  • 大小: 42.3 KB
0 请登录后投票
   发表时间:2012-02-29  
没想到好办法,但感觉还是要充分利用他给的条件:分数已排序
0 请登录后投票
   发表时间:2012-02-29  
为什么一定要一次加载1000W呢,一次加载100万内存就可以放下了。
0 请登录后投票
   发表时间:2012-02-29  
我觉得其实就是操作系统的思想,内存分页
0 请登录后投票
   发表时间:2012-02-29  
我也觉着二分查找比较好
0 请登录后投票
   发表时间:2012-02-29  
分区思路肯定没错
比较奇怪的是,实际情况中,他表中的数据怎么可能是排好序的?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics