第六天业务题

6-1 HashMap和CurrentHashMap的区别是什么?  CurrentHashMap底层结构在1.7和1.8有什么不同?

HashMap和ConcurrentHashMap是Java集合框架中的两种不同的实现。

一,HashMap和CurrentHashMap的区别:
  • 线程安全性:HashMap是非线程安全的,而ConcurrentHashMap是线程安全的
  • 并发性能:HashMap在多线程下可能引发并发修改异常,而ConcurrentHashMap通过使用分段锁来支持多线程的并发访问,因此在并发环境下性能更好。        
二,CurrentHashMap底层结构在1.7和1.8的不同:
  • 在1.7版本中,底层结构是由多个SegMent组成的数组,每个Segment持有一个锁,并且每个Segment维护了一个哈希表。每个线程在操作CurrentHashMap是只需要锁住对应的Segment,不会对整个数据结构进行锁定
  • 在1.8版本中,底层结构是由数组+链表+红黑树组成,将哈希冲突的元素以链表的形式存储在同一个桶中。随着链表长度的增加,当链表长度超过某个阈值的时候,会将链表转化为红黑树,这种结构提高了CurrentHashMap在高并发环境下的性能


6-2 假设你有一批历史积分数据要存储,数量在kw条左右 存入mysql 你的方案是什么

如果有一批数量在千万条左右的历史积分数据数据要存储,我会使用分库分表的方式进行存储

  • 首先,我会以年为单位对其进行分库,再根据月份对其进行分表
  • 然后,根据制定好的策略创建数据库实例和表结构
  • 最后,将历史积分数据插入到对应分表中


6-3 请你说一说你的排行榜功能是如何实现的

排行榜分为实时排行榜和历史排行榜

1.实时排行榜由于查询量非常大,我们将他存在了redis中,使用了redis中的ZSet结构,使用当前时间做key,用户id作为value,用户当月的积分作为score,实现了自动排行

2.历史排行榜虽然数据量也比较大,但是他的查询量不是很高,因此我们将他存在了Mysql中,但是由于他单表数据量过多,我们采用了分表的设计方案,我们将一个赛季的数据放到了一张表里,在查询时我们只需要查一张表即可


6-4 历史赛季积分是如何生成的

历史赛季积分生成主要分为三大步,核心就是把redis中上一个赛季的完整数据保存到mysql中

1.创建历史赛季表(一个赛季一张表)

2.从redis中将数据保存到mysql中对应的赛季表中

3.删除redis中历史赛季的数据

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值