我的思路是这样子,
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,转化为新闻摘要显示即可
堆面试题:一个访问量非常大的新闻网站 将点击量排名 Top 10 的新闻摘要 滚动显示在网站首页 banner 上 并且每隔 1 小时更新一次。如果你是负责开发这个功能的工程师 你会如何来实现呢?