业务题05
5-1 你们项目中签到为什么要使用bitmap
因为使用bitmap的话,它是以二进制的0和1来表示数据的。
在我们项目的签到业务中,用0去表示未签到,用1去表示已签到。
这样的话我们就可以把一个人在某一个月份的签到记录放在一条记录中,大大节省了空间。
用bitmap保存签到记录之后,数据表中的签到表就没用了。
5-2 你们项目中积分功能是如何实现的
在我们项目中,积分微服务是一个独立的、通用的微服务。
用户可以通过签到、学习课程、课程问答、课程笔记、课程评价五种方式获取积分。
获取积分的业务使用了RabbitMQ,学习微服务和签到微服务会向积分微服务投递消息,积分微服务监听MQ,监听到消息后对积分进行增加。
5-3 Redis三大新面试点: 跳表、pipeline、bitmap
跳表,是一种用于有序数据的数据结构,它在链表的基础上增加了多级索引来提高查询效率。跳表的核心思想,是通过跳跃式的方式快速定位到目标节点,从而减少查找所需的比较次数。
Redis中的有序集合(Sorted Set)就是通过跳表实现的,可以快速( 在O(long n)的时间复杂度内 )完成插入、删除和查找操作。
Pipeline(管道)是Redis中的一种优化技术,允许客户端在一次通信中发送多个命令,并在接收响应时一次性获取所有结果。这种批量操作可以减少网络开销和延迟,提高系统吞吐量。通过使用Pipeline,客户端可在不同命令间建立依赖关系,实现更复杂的操作。
Bitmap(位图)是一种紧凑的数据结构,用来存储一系列二进制值,每个比特位可以表示某个元素是否存在 或 某个属性是否成立。
在Redis中,Bitmap可用来统计用户的在线状态、记录用户的活跃度、进行数据过滤等。Bitmap支持对位图进行逻辑运算,如并集、交集和差集,使得在需要处理大规模数据的场景下具备高效的计算能力。