欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > 面试经历(一)雪花算法

面试经历(一)雪花算法

2025/4/30 21:59:38 来源:https://blog.csdn.net/m0_74640766/article/details/147460454  浏览:    关键词:面试经历(一)雪花算法

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算法

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词