当前位置: 首页 > news >正文

面试经历(一)雪花算法

uid生成方面

1:为什么用雪花算法

分布式ID的唯一性需要保证,同时需要做到

1:单调递增

2:确保安全,一个是要能体现出递增的单号,二一个不能轻易的被恶意爬出订单数量

3:含有时间戳

4:高可用,低延迟

5:高QPS

2:雪花算法构成

0(符号位)41位(bits)的时间戳10位机器码12位序列号,可以根据时间戳长短调整。

时间戳记录的是毫秒数,最多表示69年。机器码可以确保在多个服务器上生成ID的唯一性,如果跨机房部署,可以把10位拆成5位机房id+5位机器id。10个比特最多1024个机器。序列号是在时间相同是生成不同标识的,同一毫秒可以产生4096的ID。

3:时间回拨问题

没问到,但是可以了解。

回拨时间小的时候,不生成ID,循环等待时间点到达。

或者给拓展位+1,或者在序列号中腾出一部分位置来标识。

美团和百度有解决的方案吗,美团的leaf-snowflake:以“1+41+10+12”的方式组装ID号,改动点为:将SnowFlake从本地jar包变成了独立服务,并引入了Zookeeper来解决时钟回拨问题

4:别的算法

百度UidGenerator是Java实现的,基于Snowflake算法的唯一ID生成器。UidGenerator以组件形式工作在应用项目中, 支持自定义workerId位数和初始化策略。

UUID:通用唯一识别码。标准是32位的16进制数字,本地生成不依赖别的。但是不易存储,长度太长,同时uuid无序,信息生成的时候基于MAC地址生成也可能暴露使用者的位置。

数据库自增:设置步长

Redis实现:提供INCR或INCRBY这种自增原子命令,通过Redis单线程保证唯一性

MD5算法:用加盐算法实现,加盐算法意思是每个人在做菜的时候都会放不同的盐,因此代表不重复的标识,可以通过UUID来实现,然后MD5算法就可以通过UUID+密码来生成。

但MD5一是不支持分布式,同时已经在04年被破解了,可以采用更好的sha-256算法

http://www.xdnf.cn/news/105931.html

相关文章:

  • gem5 笔记01 gem5 基本应用流程
  • 【敏矽微ME32G030系列】介绍、环境搭建、工程测试
  • 2022 年 9 月青少年软编等考 C 语言六级真题解析
  • 基于PaddleOCR对图片中的excel进行识别并转换成word(一)
  • 第50讲:AI+农业金融与风险预测场景实战
  • 【QT】信号与槽中多个按钮(pushbutton)共用一个槽函数的两种实现方式
  • 解决 Spring Boot + MyBatis 项目迁移到 PostgreSQL 后的数据类型不匹配问题
  • 全面解析 classification_report:评估分类模型性能的利器
  • 模型 观测者效应
  • 11、认识redis的sentinel
  • 程序员思维体操:TDD修炼手册
  • [LangGraph教程]LangGraph03——为聊天机器人添加记忆
  • 大模型评估方法与工程实践指南:从指标设计到全链路优化
  • NHANES指标推荐:CTI
  • 熊海CMS Cookie脆弱
  • MySQL数据库精研之旅第十期:打造高效联合查询的实战宝典(一)
  • cJSON
  • 【泊松过程和指数分布】
  • Leetcode刷题记录17——三数之和
  • AIGC的商业化路径:哪些公司正在领跑赛道?
  • 2025.04.23【Treemap】树状图数据可视化指南
  • DasViewer软件显示设置
  • C# AutoResetEvent 详解
  • 2025.04.23【探索工具】| STEMNET:高效数据排序与可视化的新利器
  • windows端远程控制ubuntu运行脚本程序并转发ubuntu端脚本输出的网页
  • VTK-8.2.0源码编译(Cmake+VS2022+Qt5.12.12)
  • 数据预处理:前缀和算法详解
  • 23种设计模式-结构型模式之享元模式(Java版本)
  • Apache Flink 深度解析:流处理引擎的核心原理与生产实践指南
  • 邮件被标记为垃圾邮件怎么办