day06业务题

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

HashMap和CurrentHashMap的区别是:
1.线程安全:HashMap是非线程安全的,而ConcurrentHashMap是线程安全的。
2.并发性能:ConcurrentHashMap在并发情况下比HashMap具有更好的性能。在多线程环境下,ConcurrentHashMap采用了分段式锁机制,将整个Map分成多个Segment,每个Segment独立地加锁,不同的线程可以他是防问不同的Segment,从而提高了并发性能。
3.迭代器的弱一致性:ConcurrentHashMap中的迭代器是弱一致的,即迭代器的内容可能不完全准确,因为在迭代器遍历的过程中,可能会出现其他线程对Map进行修改的情况。而HashMap扥迭代器是强一致的,在迭代器遍历过程中,如果其他线程对HashMap进行了修改,迭代器会抛出ConcurrentModificationException异常
4,初始容器和扩容方式:ConcurrentHashMap的初始容量和扩容方式与HashMap不同,ConcurrentHashMap采用了动态的初始化容量和扩容方式,可以更加灵活地适应并发场景下的数据变化。

总的来说就是: 如果需要在段线程环境下使用Map,并且对并发性能有要求,建议使用ConcurrentHashMap,如果单线程环境下使用Map,可以使用HashMap。

CurrentHashMap底层结构在1.7和1.8的不同是:
1.底层原理不同:在1.7是数组+链表,在1.8是数组+链表/红黑树
2.数据结构不同:在1.7是segment(数组)+HashEntry(节点),在1.8是Node(节点)
3.锁不同:在1.7是分段锁,默认并发是16,一旦初始化,Segment数组大小就固定了,后面不能扩容,在1.8是CAS+synchronized来保证并发的
4.释放锁不同:1.7是需要调用unlock释放锁的,但是在1.8之后不需要释放锁了

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

在有大量数据需要储存到MySQL时我会先想到使用分片广播
因为分片广播在分布式系统中可以提高系统的性能、可靠性和扩展性,同时还可以保证数据的一致性
实现步骤是:
1.现在有十个实例
2.确定redis中有多少数据
3.比如有三千万条数据
4.把这三千万条数据均匀分配给这十个实例
实现原因是:因为在实例调用的时候会先给每个实例安排一个固定的分片id,每个实例根据分片id的不同来处理同一份数据它们自己要处理的部分

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

将Redis中将一段时间内的每个用户积分进行统计,统计完后排序放入一个新的Zset表。历史赛季积分榜会存在数据库中

当保存用户积分记录时也根据时间段保存用户这一个时间段的总积分。

查询当前时间段积分排行时,会分开查询当前用户的排名和当前赛季排行榜

查询历史积分排行榜时会直接查询保存在数据库的历史赛季排行榜。

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

将存储在Redis的数据定时持久化到数据库中,查询时再从数据库查询。

先生成一个历史赛季榜单,再从Redis中读取历史赛季积分,将排名为主键存入表中,再将Redis缓存清除

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值