day5题目

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

       使用bitmap可以节省大量的存储空间. 因为bitmap是用二进制0和1存储数据的,用0表示未签到,1表示已签到,这样就可以把一个人在一个月内的签到记录保存在一条数据中,节省存储空间;使用原有的数据库字段保存一个签到记录,会占用很大的空间.所以采用bitmap.

在Redis中,bitmap底层还是基于String类型实现的, 存储数据是以二进制(bit位)为单位进行存储的

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

积分功能涉及到两个微服务: 学习微服务和问答微服务

1. 用户在学习时可以通过签到或者问答获取积分.

2. 学习微服务中的签到功能 和 问答微服务中的问答功能 分别会向MQ投递消息.

3. 学习微服务会监听消息,监听到消息之后,执行积分保存操作. 

        积分保存操作: 先根据积分的上限来判断获取的积分是哪种类型,签到没有积分上限,但是问答有积分上限.

        一. 签到获取的积分,直接保存;

        二. 问答获取的积分则需要进行判断,

        1. 先查询用户根据问答方式获取了多少积分.

        2. 如果查询的分数已经>=问答方式的积分上限,则直接返回.

        3. 如果查询的分数 + 本次通过问答方式将要获取的积分>=问答方式的积分上限,要获取能加多少分(积分上限-查询的分数).

        4. 如果查询的分数 + 本次通过问答方式将要获取的积分< 问答方式的积分上限,直接加上传入的分数.

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

一. 跳表

跳表: zset底层的数据结构,建立多层索引,实现快速查找.

跳表 (SkipList) 首先是链表,但与传统的链表相比有几点差异:
  • 跳表结合了链表和二分查找的思想
  • 元素按照升序排列存储
  • 节点可能包含多个指针,指针跨度不同
  • 查找时从顶层向下,不断缩小搜索范围
  • 整个查询的复杂度为 O ( log n )

二. Pipeline(管道)

Pipeline(管道): Redis的批量操作.

Pipeline优点: 提高应用程序的性能和响应速度。通过一次性发送多个请求,减少了与服务器之间的通信次数,从而减少了网络延迟。

Pipeline缺点: 无法提供原子性或事务保障这意味着在执行命令时,如果某个命令失败了,后面的命令也无法执行。

        在Redis中,Pipeline是一种技术,允许客户端将多个请求依次发送给服务器,而不需要等待每个请求的回复。在Redis的客户端库中,例如Jedis,可以很方便地使用Pipeline。通过创建一个Pipeline对象,可以将多个命令添加到Pipeline中,然后一次性执行。这样可以提高批量操作的效率。

Jedis中的pipeline使用方式

redis提供了mset、mget方法,但没有提供mdel方法,可以借助pipeline实现。

Jedis中的pipeline使用步骤:

  1. 获取jedis对象(一般从连接池中获取)
  2. 获取jedis对象的pipeline对象
  3. 添加指令
  4. 执行指令

三. bitmap(位图)

使用二进制0和1存储数据,节省大量空间

适用场景:

1 签到

在线社交平台:在在线社交平台中,记录用户的在线状态。可以创建一个Bitmap来追踪每个用户的在线状态,例如,1表示该用户在线,0表示该用户离线。

数据去重:使用Bitmap可以快速地实现数据去重。例如,在处理用户提交的数据时,可以使用Bitmap来检查数据是否已经存在,避免重复处理。

4 网站日志分析:网站日志中包含用户访问的记录,可以使用Bitmap来分析用户访问的行为。例如,可以创建一个Bitmap,其中每个位对应一个URL地址,位的值表示用户是否访问过该URL。这样可以快速地查询、统计和分析用户访问过的URL。

你可能感兴趣的:(业务题,java)