5-1 你们项目中签到为什么要使用bitmap
因为bitmap是以二进制0、1来表示数据的,用0表示未签到,用1表示已签到,这样就能计算出某一个月份的签到记录放到一条记录里边,大大减少空间。
5-2 你们项目中积分功能是如何实现的
积分微服务是一个独立的、通用的微服务,获取积分的方式有:课程学习,每日签到,课程问答,课程笔记,课程评价等。
首先,编写程序监听MQ,消费消息,消息主要包括: 用户id,增加的积分,类型。
其次,判断是否为每日签到,不是每日签到类型每日积分都有上限
如果不是每日签到,则查询数据库中用户今天某种方式已经获得的积分,如果该积分大于等于该类型每日积分的上限,直接返回,如果该积分加上增加的积分大于等于该类型每日积分的上限,那么就把增加的积分改为上限减去查询的积分。
最后,是不是每日签到都直接在数据库插入一条数据。在可以获取积分的微服务对应的方法里,向MQ投递消息,在积分微服务的监听聚里加入对应的监听即可。
5-3 Redis三大新面试点: 跳表、pipeline、bitmap
跳表是一种用于有序数据的数据结构,它在链表的基础上增加了多级索引来提高查询效率,跳表的核心思想,是通过跳跃式的方式快速定位到日标节点,从而减少查找所票的以较次数。Redis中ZSe就是根跳表实现的,se可以存诸成员及其对应的分数,并支持按分数范用或成员值范围进行快速的查找、插入和删除操作。
pipeline是Redis中的一种优化技术,允许客户端在一次通信中发送多个命令,并在接收响应时一次性获取所有结果。这种批量操作可以减少网络开销和延迟,提高系统吞吐量。通过使用pipeline,客户端可在不同命令间建立依赖关系,实现更复杂的操作。
bitmap是Redis中提供的一种数据结构,底层是以二进制为单位进行储存的,bitmap是基于字符串类型实现的,因此它可以进行基本的字符串操作,比如分片存诸、持久化和备份,bimap通常用于实现一些特定的应用场景,例如在线统计、用户在线状态的记录、布隆过滤器等。