场景题

179 阅读2分钟

1.4G的文件,里面是8位的手机号码,内存是200M,怎么实现去重?

大文件找中位数问题

  1. 将大文件划分为多个小文件,每个小文件都可以在内存中处理。
  2. 对于每个小文件,使用快速排序算法将其排序,并将排序后的结果写回磁盘。
  3. 对于每个排序后的小文件,读取并保存其中位数。如果有奇数个元素,中位数为中间的那个元素,如果有偶数个元素,则取中间两个元素的平均值作为中位数。
  4. 将所有小文件的中位数保存在一个数组中,并对其进行排序。
  5. 如果中位数数组的长度为偶数,则取中间两个元素的平均值作为中位数,如果长度为奇数,则取中间的那个元素作为中位数。

MySQL有2000千万数据, Redis里面只能存20W的数据, 你怎么保证存的都是热点数据呢?

引申到LFU算法。最近最不常使用的

使用logc记录访问频次(访问频率)

所以,Redis 在访问 key 时,对于 logc 是这样变化的:

  1. 先按照上次访问距离当前的时长,来对 logc 进行衰减;
  2. 然后,再按照一定概率增加 logc 的值

统计每个键值对在一段时间内被访问的频率,然后淘汰那些访问频率最低的键值对。具体实现过程中,Redis会维护一个从键值对到其访问频率的映射表,然后定期根据这个映射表来淘汰访问频率最低的键值对。

如果让你用Redis实现一个多人协作共享文档(就类似腾讯文档, excel那样)怎么办?