当前位置: 首页 > 面试题库 >

谈一谈,id全局唯一且自增,如何实现?

惠志
2023-03-14
本文向大家介绍谈一谈,id全局唯一且自增,如何实现?相关面试题,主要包含被问及谈一谈,id全局唯一且自增,如何实现?时的应答技巧和注意事项,需要的朋友参考一下

考察点:SnowFlake雪花算法

参考回答;

SnowFlake雪花算法

雪花ID生成的是一个64位的二进制正整数,然后转换成10进制的数。64位二进制数由如下部分组成:

snowflake id生成规则

1位标识符:始终是0,由于long基本类型在Java中是带符号的,最高位是符号位,正数是0,负数是1,所以id一般是正数,最高位是0。

41位时间戳:41位时间截不是存储当前时间的时间截,而是存储时间截的差值(当前时间截 - 开始时间截 )得到的值,这里的的开始时间截,一般是我们的id生成器开始使用的时间,由我们程序来指定的。

10位机器标识码:可以部署在1024个节点,如果机器分机房(IDC)部署,这10位可以由 5位机房ID + 5位机器ID 组成。

12位序列:毫秒内的计数,12位的计数顺序号支持每个节点每毫秒(同一机器,同一时间截)产生4096个ID序号

优点

简单高效,生成速度快。

时间戳在高位,自增序列在低位,整个ID是趋势递增的,按照时间有序递增。

灵活度高,可以根据业务需求,调整bit位的划分,满足不同的需求。

缺点

依赖机器的时钟,如果服务器时钟回拨,会导致重复ID生成。

在分布式环境上,每个服务器的时钟不可能完全同步,有时会出现不是全局递增的情况。

 类似资料:
  • 问题内容: 是否可以定义每个日志语句中包含的唯一请求ID,而无需将记录器交给每个方法/函数调用? 使用的技术:NodeJS,Express,Winston 问题答案: 已编辑 最后,我创建了一个库,可以完成所有工作。 https://github.com/davicente/express-logger-unique-req- id 它是Winston库的包装,因此您可以以相同的方式使用它。 让我

  • 本文向大家介绍谈一谈,JDBC中如何进行事务处理?相关面试题,主要包含被问及谈一谈,JDBC中如何进行事务处理?时的应答技巧和注意事项,需要的朋友参考一下 考察点:数据库   Connection提供了事务处理的方法,通过调用setAutoCommit(false)可以设置手动提交事务;当事务完成后用commit()显式提交事务;如果在事务处理过程中发生异常则通过rollback()进行事务回滚。

  • 本文向大家介绍请谈一谈,系统如何提高并发性?相关面试题,主要包含被问及请谈一谈,系统如何提高并发性?时的应答技巧和注意事项,需要的朋友参考一下 考察:操作系统综合性 1、提高CPU并发计算能力 (1)多进程&多线程 (2)减少进程切换,使用线程,考虑进程绑定CPU (3)减少使用不必要的锁,考虑无锁编程 (4)考虑进程优先级 (5)关注系统负载 2、改进I/O模型 (1)DMA技术 (2)异步I/

  • 本文向大家介绍谈一谈 Kafka 的再均衡相关面试题,主要包含被问及谈一谈 Kafka 的再均衡时的应答技巧和注意事项,需要的朋友参考一下 在Kafka中,当有新消费者加入或者订阅的topic数发生变化时,会触发Rebalance(再均衡:在同一个消费者组当中,分区的所有权从一个消费者转移到另外一个消费者)机制,Rebalance顾名思义就是重新均衡消费者消费。Rebalance的过程如下: 第一

  • 本文向大家介绍谈一谈,如何得到一个数据流中的中位数?相关面试题,主要包含被问及谈一谈,如何得到一个数据流中的中位数?时的应答技巧和注意事项,需要的朋友参考一下 考察点:排序 数据是从一个数据流中读出来的,数据的数目随着时间的变化而增加。如果用一个数据容器来保存从流中读出来的数据,当有新的数据流中读出来时,这些数据就插入到数据容器中。 数组是最简单的容器。如果数组没有排序,可以用 Partition

  • 本文向大家介绍php 根据自增id创建唯一编号类,包括了php 根据自增id创建唯一编号类的使用技巧和注意事项,需要的朋友参考一下 在开发过程中,我们数据表一般都使用自增数字作为id主键,而id是数字型,不容易理解。我们把id按一定格式转为编号后,很容易根据编号知道代表的是什么内容。 例如订单表id=20160111197681234,只看id我们并不知道这个id是订单表的id,而转为编号O-20