面试奇奇怪怪的问题

13次阅读
没有评论

100M 内存怎么读取 1G 文件并统计重复数据

传统方式是使用一个 Map,将数据的值存储到 key 上,出现的次数存储到 value 上,但是现在数据量大可能没有重复就会出现内存不足。

解决方式

将数据切片成 1024*1024 的 1M 大小,这样解决了大小问题。然后遍历将切片数据,将出现的数据和值的 key 和 value 存储到磁盘上,每次对比变更刷新磁盘数据。当然性能一定比在内存计算要慢

订单延迟取消

  • 定时轮询取消
    • 定时任务轮询查询数据库要取消的订单
    • 简单、适合小公司的单体业务
    • 加大了服务器的压力、延时不准确、业务量大不推荐
  • 采用时间轮询机制
    • 将要取消的订单放到时间轮上,时间轮执行任务的适合会处理时间轮上的任务
    • 相比上面方案提升性能
    • 没办法持久化,服务重启要重新录入需要放到时间轮上订单数据
  • MQ
    • 采用 MQ 的消息延迟机制处理任务,底层采用的也是上面的时间轮询
    • 销峰填谷,提升服务器性能
    • 需要而外的服务

为什么 MySQL 使用 B + 树,Mongodb 使用 B 树

  • MySQL(关系型数据库)用 B + 树:核心适配 范围查询、排序 需求,B + 树所有数据存于叶子节点,且叶子节点按顺序链表连接,范围查询 / 排序高效;非叶子节点仅存索引(不存数据),单节点能容纳更多索引,减少磁盘 IO 次数,契合关系型数据的结构化查询场景。
  • MongoDB(文档型数据库)用 B 树:核心适配 随机读写、灵活文档查询,B 树每个节点既存索引也存数据,找到索引节点即可获取完整文档,随机读写更快;且 B 树节点空间利用率高,能更好适配 MongoDB 中文档(可能体积较大、结构灵活)的存储需求,减少跨节点查询开销。
正文完
 0
评论(没有评论)
验证码