第五天业务题

文章讨论了在项目中使用Bitmap存储签到数据以节省空间和提高效率的方法,介绍了积分功能的实现,以及Redis中的跳表、pipeline技术在提高数据处理速度和空间利用方面的优势和局限性。
摘要由CSDN通过智能技术生成

5-1 你们项目中签到为什么要使用bitmap

是这样的,因为bitmap是使用二进制01表示数据的,我们用1表示签到,用0表示未签到,这样就可以把一个人在某个月份的签到记录放到一条数据中,大大节省了我们的空间,并且计算速度非常高效


5-2 你们项目中积分功能是如何实现的

在我们的项目中,用户签到,学习,参与互动问答等都可以产生积分,所以需要让所有可以产生积分的业务都可以发送MQ消息,再编写对应消息的监听器将积分信息保存到数据库中,接下来我给您具体介绍一下:

  1. 首先由可以产生业务的服务向MQ发送积分消息代码
  2. 监听器监听到对应服务的消息,调用添加积分服务
  3. 添加积分服务会先判断产生积分的服务是否有积分上限,若没有则直接保存积分记录
  4. 如果有则会先查询今日以获得的积分数,判断是否超过上限,如果没有超过则会保存积分记录
  5. 如果超过了则会直接结束

以上就是我们项目中的积分功能


5-3 Redis三大新面试点: 跳表、pipeline、bitmap

一,跳表

        跳表是一种有序元素的数据结构,它通过在每个元素中维护多个指针,使得查找、插入和删除操作的时间复杂度为O(log n),其中n是元素的数量。

        在跳表中,元素按照从小到大的顺序排序,并且每个元素可能具有多个指针,跳表通过维护多个层级来加快查找速度

        跳表的查询操作从最顶层开始,逐层向下查找,当查找某个元素时,它可以跳过一些层级,从而加速查找过程

        跳表相对于其他数据结构的优势在于其简单性和较低的空间复杂度,但,跳表的实现相对复杂,而且对于频繁的插入删除操作,可能需要维护多级指针,导致性能下降

二,pipeline

        pipeline是一种将任务分解为多个阶段并且这些阶段可以并行执行的技术,每个阶段都是一个独立的计算单元,他们按顺序连接起来,形成一个流水线

        在数据处理中,流水线通常被用于将大型的任务分解为多个小的子任务并行处理。每个子任务负责处理特定的数据,然后将处理结果传递给下一阶段。这种分解和并行执行的方式可以提高整体的计算速度和效率

        总的来说,流水线是一种有效的并行计算技术,可以提高任务处理的效率和速度。但在设计和使用流水线时,需要考虑到任务分解、数据依赖、资源管理等因素,以优化整体性能。

三,Bitmap

        Bitmap是一种数据结构,用于表示一个集合,其中每个元素的取值为布尔值(通常是0和1)。

        一个位图通常由一系列二进制位组成,其中每个位代表集合中的一个元素。如果某个元素在集合中,则对应位置为1,否则为0。通过这种方式可以高效的表示大型的集合,并进行高效的集合操作。

位图的优点:

  1. 节省空间:位图中每个元素仅占用一个位,相比于其他数据结构,可以大大减少内存的使用
  2. 高效的集合操作:通过位运算,可以高效的进行集合的交集、并集、差集等操作
  3. 快速的查找和判断:可以通过索引直接访问位图中的元素,无需遍历整个集合

位图的缺点:

  1. 位图的大小受限:位图的大小通常由计算机的字长决定,因此对于大规模的集合,可能需要使用多个位图进行表示
  2. 不适合稀疏集合:如果集合中的元素仅占用总元素的一小部分,位图的空间利用率会比较低
  3. 插入和删除相对较慢:由于需要进行位运算,插入和删除操作可能需要更多的时间。

综上所述,位图是一种高效的数据结构,适合表示和操作大规模的集合。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值