5-1 你们项目中签到为什么要使用bitmap
是这样的,因为bitmap是使用二进制01表示数据的,我们用1表示签到,用0表示未签到,这样就可以把一个人在某个月份的签到记录放到一条数据中,大大节省了我们的空间,并且计算速度非常高效
5-2 你们项目中积分功能是如何实现的
在我们的项目中,用户签到,学习,参与互动问答等都可以产生积分,所以需要让所有可以产生积分的业务都可以发送MQ消息,再编写对应消息的监听器将积分信息保存到数据库中,接下来我给您具体介绍一下:
- 首先由可以产生业务的服务向MQ发送积分消息代码
- 监听器监听到对应服务的消息,调用添加积分服务
- 添加积分服务会先判断产生积分的服务是否有积分上限,若没有则直接保存积分记录
- 如果有则会先查询今日以获得的积分数,判断是否超过上限,如果没有超过则会保存积分记录
- 如果超过了则会直接结束
以上就是我们项目中的积分功能
5-3 Redis三大新面试点: 跳表、pipeline、bitmap
一,跳表
跳表是一种有序元素的数据结构,它通过在每个元素中维护多个指针,使得查找、插入和删除操作的时间复杂度为O(log n),其中n是元素的数量。
在跳表中,元素按照从小到大的顺序排序,并且每个元素可能具有多个指针,跳表通过维护多个层级来加快查找速度
跳表的查询操作从最顶层开始,逐层向下查找,当查找某个元素时,它可以跳过一些层级,从而加速查找过程
跳表相对于其他数据结构的优势在于其简单性和较低的空间复杂度,但,跳表的实现相对复杂,而且对于频繁的插入删除操作,可能需要维护多级指针,导致性能下降
二,pipeline
pipeline是一种将任务分解为多个阶段并且这些阶段可以并行执行的技术,每个阶段都是一个独立的计算单元,他们按顺序连接起来,形成一个流水线
在数据处理中,流水线通常被用于将大型的任务分解为多个小的子任务并行处理。每个子任务负责处理特定的数据,然后将处理结果传递给下一阶段。这种分解和并行执行的方式可以提高整体的计算速度和效率
总的来说,流水线是一种有效的并行计算技术,可以提高任务处理的效率和速度。但在设计和使用流水线时,需要考虑到任务分解、数据依赖、资源管理等因素,以优化整体性能。
三,Bitmap
Bitmap是一种数据结构,用于表示一个集合,其中每个元素的取值为布尔值(通常是0和1)。
一个位图通常由一系列二进制位组成,其中每个位代表集合中的一个元素。如果某个元素在集合中,则对应位置为1,否则为0。通过这种方式可以高效的表示大型的集合,并进行高效的集合操作。
位图的优点:
- 节省空间:位图中每个元素仅占用一个位,相比于其他数据结构,可以大大减少内存的使用
- 高效的集合操作:通过位运算,可以高效的进行集合的交集、并集、差集等操作
- 快速的查找和判断:可以通过索引直接访问位图中的元素,无需遍历整个集合
位图的缺点:
- 位图的大小受限:位图的大小通常由计算机的字长决定,因此对于大规模的集合,可能需要使用多个位图进行表示
- 不适合稀疏集合:如果集合中的元素仅占用总元素的一小部分,位图的空间利用率会比较低
- 插入和删除相对较慢:由于需要进行位运算,插入和删除操作可能需要更多的时间。
综上所述,位图是一种高效的数据结构,适合表示和操作大规模的集合。