堆面试题:一个访问量非常大的新闻网站,将点击量排名 Top 10 的新闻摘要,滚动显示在网站首页 banner 上,并且每隔 1 小时更新一次。如果你是负责开发这个功能的工程师,你会如何来实现呢?

我的思路是这样子,
1,对每篇新闻摘要计算一个hashcode,并建立摘要与hashcode的关联关系,使用map存储,以hashCode为key,新闻摘要为值
2,按每小时一个文件的方式记录下被点击的摘要的hashCode
3,当一个小时结果后,上一个小时的文件被关闭,开始计算上一个小时的点击top10
4,将hashcode分片到多个文件中,通过对hashCode取模运算,即可将相同的hashCode分片到相同的文件中
5,针对每个文件取top10的hashCode,使用Map<hashCode,int>的方式,统计出所有的摘要点击次数,然后再使用小顶堆(大小为10)计算top10,
6,再针对所有分片计算一个总的top10,最后合并的逻辑也是使用小顶堆,计算top10
7,如果仅展示前一个小时的top10,计算结束
8,如果需要展示全天,需要与上一次的计算按hashCode进行合并,然后在这合并的数据中取top10
9,在展示时,将计算得到的top10的hashcode,转化为新闻摘要显示即可

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值