今日总结:雪花算法,拉取在线用户
雪花算法:
public class SnowflakeIdGenerator {private final long epoch = 1626804000000L; // 定义起始时间戳,这里设置为2021-07-21 00:00:00 UTCprivate final long workerIdBits = 5L; // 机器ID所占的位数private final long sequenceBits = 10L; // 序列号所占的位数private final long maxWorkerId = -1L ^ (-1L << workerIdBits); // 最大的机器ID,用于做位运算private final long sequenceMask = -1L ^ (-1L << sequenceBits); // 序列号的掩码,用于取低位private long workerId; // 机器IDprivate long sequence = 0L; // 序列号private long lastTimestamp = -1L; // 上次生成ID的时间戳/*** 构造函数* @param workerId 机器ID*/public SnowflakeIdGenerator(long workerId) {if (workerId > maxWorkerId || workerId < 0) {throw new IllegalArgumentException(String.format("Worker ID must be between 0 and %d", maxWorkerId));}this.workerId = workerId;}/*** 生成下一个唯一ID* @return long 类型的唯一ID*/public synchronized long nextId() {long timestamp = System.currentTimeMillis(); // 获取当前时间戳// 如果当前时间小于上次ID生成的时间戳,则说明系统时钟回退过,抛出异常if (timestamp < lastTimestamp) {throw new RuntimeException("Clock moved backwards. Refusing to generate id");}// 如果是同一时间生成的,则进行序列号累加if (lastTimestamp == timestamp) {sequence = (sequence + 1) & sequenceMask; // sequence自增,并通过sequenceMask防止溢出if (sequence == 0) {timestamp = tilNextMillis(lastTimestamp); // 如果sequence溢出,则阻塞到下一个毫秒,获取新的时间戳}} else {sequence = 0L; // 如果是新的时间戳,则将序列号置为0}lastTimestamp = timestamp; // 更新上次生成ID的时间戳// 使用位运算生成最终的ID,并返回return ((timestamp - epoch) << (workerIdBits + sequenceBits))| (workerId << sequenceBits)| sequence;}/*** 阻塞到下一个毫秒,直到获得新的时间戳* @param lastTimestamp 上次生成ID的时间戳* @return 当前时间戳*/private long tilNextMillis(long lastTimestamp) {long timestamp = System.currentTimeMillis();while (timestamp <= lastTimestamp) {timestamp = System.currentTimeMillis();}return timestamp;}/*** 主函数,用于测试生成ID* @param args 参数*/public static void main(String[] args) {SnowflakeIdGenerator idGenerator = new SnowflakeIdGenerator(1); // 设置机器IDfor (int i = 0; i < 10; i++) {long id = idGenerator.nextId(); // 生成新的IDSystem.out.println("Generated Id: " + id); // 打印生成的ID}}
}
拉取在线用户的思路:登录过后开启线程这就是在线用户,将其线程放入集合中管理,key为ID,遍历集合则可以获取到所有的在线用户
获取在线用户的部分代码:
// 集合遍历,遍历hashmap的key
Iterator<String> iterator = hm.keySet().iterator();
String onlineUserList = "";
while (iterator.hasNext()) {onlineUserList += iterator.next() + " ";
}
return onlineUserList;
-
Iterator<String> iterator = hm.keySet().iterator();:这行代码通过hm.keySet().iterator()获取了HashMaphm的所有键的迭代器(iterator)。hm.keySet()返回HashMap中所有键的集合,然后iterator()方法返回这个集合的迭代器,用于逐个访问集合中的元素。 -
String onlineUserList = "";:这行代码定义了一个空字符串onlineUserList,用来存储遍历得到的所有键。 -
while (iterator.hasNext()) {:这是一个 while 循环,它的条件是iterator.hasNext(),即迭代器中是否还有下一个元素。如果有,进入循环体。 -
onlineUserList += iterator.next() + " ";:在循环体内部,iterator.next()方法返回迭代器的下一个键,并将其添加到onlineUserList字符串后面,同时在每个键之间添加一个空格。 -
return onlineUserList;:最后,当迭代器遍历完所有键后,退出循环,并返回拼接好的onlineUserList字符串,其中包含了HashMap中所有键的列表。
查找数据库某个字段的所有数据:
try {// 加载并注册JDBC驱动Class.forName("com.mysql.cj.jdbc.Driver");// Class.forName("com.mysql.jdbc.Driver");// 建立数据库连接conn = DriverManager.getConnection(URL, USER, PASSWORD);} catch (ClassNotFoundException e) {throw new RuntimeException(e);} catch (SQLException e) {throw new RuntimeException(e);}//遍历数据库// 创建Statement对象//这个也是个接口,用于执行不带参的,PreparedStatement pstmt是其子接口,执行带参的语句Statement stmt = null;try {stmt = conn.createStatement();} catch (SQLException e) {throw new RuntimeException(e);}try {// 执行查询String sql = "SELECT userId FROM account";ResultSet rs = stmt.executeQuery(sql);String onlineUserList="";// 处理查询结果while (rs.next()) {// 假设userId是整型,根据实际情况调整String userId = rs.getString("userId");onlineUserList+=userId+" ";}return onlineUserList;} catch (SQLException e) {throw new RuntimeException(e);} finally {try {if(rs!=null){rs.close();}if(stmt!=null){stmt.close();}} catch (SQLException e) {throw new RuntimeException(e);}}
相关文章:
今日总结:雪花算法,拉取在线用户
雪花算法: public class SnowflakeIdGenerator {private final long epoch 1626804000000L; // 定义起始时间戳,这里设置为2021-07-21 00:00:00 UTCprivate final long workerIdBits 5L; // 机器ID所占的位数private final long sequenceBits 10L; /…...
前瞻断言与后瞻断言:JavaScript 正则表达式的秘密武器
JavaScript 中的前瞻断言(lookahead)和后瞻断言(lookbehind)相信用过的小伙伴就知道它的威力了,在一些特定的需求场景下,可以做到四两拨千斤的作用,今天让我们来盘点一下在 JavaScript 正则表达…...
昇思MindSpore学习总结十六 —— 基于MindSpore的GPT2文本摘要
1、mindnlp 版本要求 !pip install tokenizers0.15.0 -i https://pypi.tuna.tsinghua.edu.cn/simple # 该案例在 mindnlp 0.3.1 版本完成适配,如果发现案例跑不通,可以指定mindnlp版本,执行!pip install mindnlp0.3.1 !pip install mindnlp …...
React Router 6笔记
一个路由就是一个映射关系 key为路径,value可能是function或component 路由分类 后端路由(node) value是function,用来处理客户端提交的请求注册路由:router.get(path, function(req, res))工作过程:当…...
Android init 中的wait_for_property指令
Android开机优化系列文档-CSDN博客 Android 14 开机时间优化措施汇总-CSDN博客Android 14 开机时间优化措施-CSDN博客根据systrace报告优化系统时需要关注的指标和优化策略-CSDN博客Android系统上常见的性能优化工具-CSDN博客Android上如何使用perfetto分析systrace-CSDN博客A…...
智能合约语言(eDSL)—— 并行化方案——调度算法
3、调度算法 处理区块的时候,我们会同时启动多个线程去执行多个交易,这个时候我们需要一个良好的调度策略,来决定当前的线程是应该执行交易还是验证交易、提前结束还是立刻重新执行交易等,只有有一个良好调度策略才能保证所有交易都稳定有序的执行; 线程数量 这是一个不…...
vue2.0中如何实现数据监听
vue2中实现数据监听的原理 在Vue 2中,数据监听是通过ES5的Object.defineProperty实现的。Vue在初始化数据对象时,会遍历data对象,并使用Object.defineProperty为每个属性设置getter和setter。当你尝试读取或修改数据属性时,这些g…...
kafka开启kerberos和ACL
作者:恩慈 一、部署kafka-KB包 1.上传软件包 依次点击 部署中心----部署组件----上传软件包 选择需要升级的kafka版本并点击确定 2.部署kafka 依次点击部署中心----部署组件----物理/虚拟机部署----选择集群----下一步 选择手动部署-…...
QT+winodow 代码适配调试总结(三)
问题描述: 1、开发测试环境为: A: window10 64位 B: QT版本为4.8.6 C:采用VS2017 C++ Compiler 9.0 (x86)编译器版本 根据总结(二)经验,开发环境的可执行程序显示正常; 2、新的环境运行的时候显示乱码; 经过查阅资料,还是代码环境编码配置的问题,下面为解…...
Linux之旅:常用的指令,热键和权限管理
目录 前言 1. Linux指令 (1) ls (2) pwd 和 cd (3)touch 和 mkdir (4) rmdir 和 rm (5)cp (6)mv (7)…...
简单实用的企业舆情安全解决方案
前言:企业舆情安全重要吗?其实很重要,尤其面对负面新闻,主动处理和应对,可以掌握主动权,避免股价下跌等,那么如何做使用简单实用的企业舆情解决方案呢? 背景 好了,提取词…...
【中项】系统集成项目管理工程师-第2章 信息技术发展-2.1信息技术及其发展-2.1.1计算机软硬件与2.1.2计算机网络
前言:系统集成项目管理工程师专业,现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试,全称为“全国计算机与软件专业技术资格(水平)考试”&…...
SpringBoot集成Sharding-JDBC-5.3.0实现按月动态建表分表
Sharding-JDBC系列 1、Sharding-JDBC分库分表的基本使用 2、Sharding-JDBC分库分表之SpringBoot分片策略 3、Sharding-JDBC分库分表之SpringBoot主从配置 4、SpringBoot集成Sharding-JDBC-5.3.0分库分表 5、SpringBoot集成Sharding-JDBC-5.3.0实现按月动态建表分表 前言 …...
ubuntu 上安装中文输入法
在Ubuntu上安装中文输入法,通常有以下几种方法: 方法一:使用Fcitx输入法框架和搜狗输入法 安装Fcitx: sudo apt update sudo apt install fcitx fcitx-bin fcitx-table-all 安装搜狗输入法: 首先,从搜狗…...
Postman导出excel文件
0 写在前面 在我们后端写接口的时候,前端页面还没有出来,我们就得先接口测试,在此记录下如何使用postman测试导出excel接口。 如果不会使用接口传参可以看我这篇博客如何使用Postman 1 方法一 2 方法二 3 写在末尾 虽然在代码中写入文件名…...
你还在手动构建Python项目吗?PyBuilder让一切自动化!
在 Python 项目开发中,构建和管理项目是一项繁琐但必不可少的工作。你可能需要处理依赖项、运行测试、生成文档等。这时候,PyBuilder 出场了。它是一个强大的构建自动化工具,可以帮助你简化项目管理,让你更专注于编写代码。 什么…...
WebRTC音视频-前言介绍
目录 效果预期 1:WebRTC相关简介 1.1:WebRTC和RTC 1.2:WebRTC前景和应用 2:WebRTC通话原理 2.1:媒体协商 2.2:网络协商 2.3:信令服务器 效果预期 1:WebRTC相关简介 1.1&…...
centos/rocky容器中安装xfce、xrdp记录
最近需要一台机器来测试rdp连接,使用容器linuxxfcexrdp来实现,在此记录下主要步骤 启动rockylinux容器(其他linux发行版步骤应该相似) docker run -it -p 33891:3389 rockylinux:9.3 bash容器内操作 # 省略替换软件源步骤 ...# …...
实战:Eureka的概念作用以及用法详解
概叙 什么是Eureka? Netflix Eureka 是一款由 Netflix 开源的基于 REST 服务的注册中心,用于提供服务发现功能。Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件的一部分,基于 Netflix Eureka 进行了二次封装,主要负责…...
jupyter_contrib_nbextensions安装失败问题
目录 1.文件路径长度问题 2.jupyter不出现Nbextensions选项 1.文件路径长度问题 问题: could not create build\bdist.win-amd64\wheel\.\jupyter_contrib_nbextensions\nbextensions\contrib_nbextensions_help_item\contrib_nbextensions_help_item.yaml: No su…...
通信工程毕业论文(毕设)2024开题思路
【单片机毕业设计项目分享系列】 🔥 这里是DD学长,单片机毕业设计及享100例系列的第一篇,目的是分享高质量的毕设作品给大家。 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的单片机项目缺少创新和亮点…...
避坑 3:Docker 致命大坑!容器一删,业务数据全没了?3 套解决方案,直接抄,不翻车
文章目录避坑 3:Docker 致命大坑!容器一删,业务数据全没了?3 套解决方案,直接抄,不翻车方案一:根治方案!命名数据卷持久化(生产 / 测试环境通用,官方首选&…...
导师又让重写?千笔写作工具,一键生成论文神器
你是否曾为论文选题而发愁?是否在深夜面对空白文档无从下笔?是否反复修改却总对表达不满意?论文写作不仅是学术能力的考验,更是时间和精力的挑战。对于大多数本科生来说,从开题到定稿,每一步都充满焦虑与压…...
基于微信小程序的大学生社会实践平台[小程序]-计算机毕业设计源码+LW文档
摘要:大学生社会实践是高校人才培养的重要环节,对于提升学生的综合素质、增强社会适应能力具有重要意义。本文设计并实现了一个基于微信小程序的大学生社会实践平台,该平台涵盖系统用户管理、公告信息管理、变幻图设置、教师管理、学生管理、…...
keepalived vs 手动配置:多虚拟IP方案选型及性能对比实测
多虚拟IP部署方案深度评测:Keepalived与手动配置的实战抉择 在分布式系统架构中,虚拟IP(VIP)作为服务入口的统一抽象层,其稳定性和性能直接影响整个系统的可用性表现。当业务需要部署多个虚拟IP时,技术团队…...
避坑指南:Jenkins+Git仓库配置时遇到的‘fatal: not in a git directory‘错误全解析
Jenkins与Git集成实战:深度解析fatal: not in a git directory错误解决方案 当Jenkins的构建日志突然抛出fatal: not in a git directory错误时,许多开发者会陷入反复检查仓库配置却找不到根源的困境。这个看似简单的报错背后,可能隐藏着从权…...
开源六自由度机械臂:双MCU异构架构与闭环步进控制实现
1. 项目概述CERT_Robot_Arm 是一款面向嵌入式开发者与机器人教育场景设计的六自由度(6-DOF)开源机械臂平台。其核心设计目标是在严格控制BOM成本的前提下,完整实现工业级机械臂的基础运动控制能力——包括关节空间点位控制(MoveJ&…...
效率提升秘籍:借助快马AI自动生成高可用视频播放记忆模块
最近在优化一个视频网站项目,遇到了一个很实际的需求:用户希望下次打开页面时,能“继续播放上次观看的短片内容”。听起来简单,但真要自己从头实现一个健壮、高效的播放记忆模块,需要考虑的细节还真不少。比如…...
电磁兼容性(EMC)设计与实践
现代工业自动化与智能制造领域,串口屏作为人机交互(HMI)的核心组件,其稳定性直接决定了设备的控制精度与用户体验。面对复杂的电磁环境,电磁兼容性(EMC)设计成为确保淘晶驰串口屏稳定运行的关键…...
MessagePack-CSharp未来发展方向:终极路线图与功能规划指南
MessagePack-CSharp未来发展方向:终极路线图与功能规划指南 【免费下载链接】MessagePack-CSharp 项目地址: https://gitcode.com/gh_mirrors/mes/MessagePack-CSharp MessagePack-CSharp作为高效的二进制序列化库,正通过持续的技术创新和功能优…...
