【Java项目】如何设计一个用户签到系统?并且这个签到系统支持7天,14天等不同天数的连续签到功能?

简介: 【Java项目】如何设计一个用户签到系统?并且这个签到系统支持7天,14天等不同天数的连续签到功能?

问题

这个问题是我再面试阿里的时候遇到的,他问的是:

如果我现在有一个需求,就是我要做一个用户的签到系统,这个签到系统要求做到能为系统业务提供不同签到天数服务的功能,比如我要签到7天,14天,30天等等,我都能直接用这个服务来完成,你能和我说说你的思路嘛?

这道题我是给了三种方案。

Redis的Bitmap

对于签到的场景,我们可以使用bitmap来完成,我们知道bitmap是Redis提供的一种基于二进制位的一种数据结构,我们可以通过设定每一个二进制位为1,来代表当天用户已经签到了,如果没有签到那么不设定,默认为0即可。

MySQL实现

这种实现方式和第一种差不多,我说的是直接存储一个30位的varchar类型,然后如果用户登录了,就把这个对应位置设定为1。

特殊实现思路

我说,如果说要做一个连续签到判定的功能的话,我是这样子想的:

我们可以设定一个字段叫做 last-signed-date,也就是上一次签到的日期,以及一个bit类型的state位,用来判断是否进行了连续签到。

假设我们从周一开始进行签到判断,每周日来判断是否连续签到了一周,那么我们可以如此,在第一天进行签到的时候,我们设定state=1,然后last-signed-date就设定为签到的那一天日期,然后如果第二天没有签到,那么last-signed-date不变,打算state=0,之后即使第三天签到了,state也依旧为0,这样子我们就能知道是否连续签到了一周或者一个月,当然,这样子做的话可能就不太方便展示那天签到那天没签到了,还是需要类似于二进制位的方式来保存是否签到了。

不过,面试官刚刚好就是对这第三种方式最满意。


相关文章
|
5天前
|
前端开发 Java 编译器
【前端学java】java基础练习缺少项目?看这篇文章就够了!(完结)
【8月更文挑战第11天】java基础练习缺少项目?看这篇文章就够了!(完结)
14 0
|
6天前
|
SQL Java 数据库连接
java连接数据库加载驱动到java项目
该博客文章介绍了如何在Java项目中通过代码加载数据库驱动并连接SQL Server数据库,包括具体的加载驱动和建立数据库连接的步骤,以及如何将驱动包添加到Java项目的构建路径中。
|
5天前
|
前端开发 Java 编译器
【前端学java】java基础练习缺少项目?看这篇文章就够了!(17)
【8月更文挑战第11天】java基础练习缺少项目?看这篇文章就够了!
11 0
【前端学java】java基础练习缺少项目?看这篇文章就够了!(17)
|
5天前
|
Java Spring
Java SpringBoot Bean InitializingBean 项目初始化
Java SpringBoot Bean InitializingBean 项目初始化
12 0
|
5天前
|
Java 网络安全 开发工具
新手入门Java。如何下载Eclipse、写出最基本的“Hello word”以及如何连接github并且上传项目。
新手入门Java。如何下载Eclipse、写出最基本的“Hello word”以及如何连接github并且上传项目。
16 0
|
6天前
|
jenkins Java 持续交付
自动化魔法:用Jenkins打造Java项目的持续部署流水线
【8月更文挑战第13天】在软件开发中,自动化部署是提高效率与减少错误的关键。Jenkins作为一款强大的持续集成工具,支持Java项目的自动化构建、测试与部署。通过配置Jenkins及其丰富的插件生态(如Git和Maven插件),可实现从代码提交到上线的全自动化流程。此流程包括从GitHub自动拉取代码、使用Maven构建项目,并通过如`mvn clean install`命令执行构建,最后利用插件如“Publish Over SSH”将制品部署至远程服务器。此外,还可配置邮件通知等后处理动作确保发布的稳定可靠。借助Jenkins,开发者能显著加速软件交付周期,同时减少手动操作带来的风险。
21 0
|
6天前
|
JavaScript 前端开发 网络协议
WebSocket在Java Spring Boot+Vue框架中实现消息推送功能
在现代Web应用中,实时消息提醒是一项非常重要的功能,能够极大地提升用户体验。WebSocket作为一种在单个TCP连接上进行全双工通信的协议,为实现实时消息提醒提供了高效且低延迟的解决方案。本文将详细介绍如何在Java Spring Boot后端和Vue前端框架中利用WebSocket实现消息提醒功能。
20 0
|
8天前
|
Java Shell
Java Sprintboot jar 项目启动、停止脚本
Java Sprintboot jar 项目启动、停止脚本
16 0
java中获取当前系统日期
java中获取当前系统日期
JAVA 获取系统日期时间
JAVA 获取系统日期时间
277 0