3. twepoch表示什么?由于时间戳只能用69年,我们的计时又是从1970年开始的,所以这个twepoch表示从项目开始的时间,用生成ID的时间减去twepoch作为时间戳,可以使用更久 。
4. -1L ^ (-1L << x) 表示什么?表示 x 位二进制可以表示多少个数值,假设x为3:
在计算机中,第一位是符号位,负数的反码是除了符号位,1变0,0变1, 而补码则是反码+1:
-1L 原码:1000 0001-1L 反码:1111 1110-1L 补码:1111 1111从上面的结果可以知道,-1L其实在二进制里面其实就是全部为1,那么 -1L 左移动 3位,其实得到 1111 1000,也就是最后3位是0,再与-1L异或计算之后,其实得到的,就是后面3位全是1 。-1L ^ (-1L << x) 表示的其实就是x位全是1的值,也就是x位的二进制能表示的最大数值 。
5.时间戳比较在获取时间戳小于上一次获取的时间戳的时候,不能生成ID,而是继续循环,直到生成可用的ID,这里没有使用拓展位防止时钟回拨 。
6.前端直接使用发生精度丢失如果前端直接使用服务端生成的long 类型 id,会发生精度丢失的问题,因为 JS 中Number是16位的(指的是十进制的数字),而雪花算法计算出来最长的数字是19位的,这个时候需要用 String 作为中间转换,输出到前端即可 。
秦怀の观点雪花算法其实是依赖于时间的一致性的,如果时间回拨,就可能有问题,一般使用拓展位解决 。而只能使用69年这个时间限制,其实可以根据自己的需要,把时间戳的位数设置得更多一点,比如42位可以用139年,但是很多公司首先得活下来 。当然雪花算法也不是银弹,它也有缺点,在单机上递增,而多台机器只是大致递增趋势,并不是严格递增的 。
没有最好的设计方案,只有合适和不合适的方案 。
原文:
https://www.cnblogs.com/Damaer/p/15559201.html
【面试官:讲讲雪花算法,越详细越好】
推荐阅读
- 铁路12306提醒!抢票时,请认准官方APP候补功能
- 面试官问 HTTPS 是怎么从 HTTP 转过来的,我有点懵
- 屏下摄像头|最完美全面屏!中兴Axon 40 Ultra官方渲染图公布:屏幕开孔全部“消失”
- 冰箱|银河护卫队冰箱门被怒关近两千万次 官方:我们故意的
- yeezy官方尺码对照表39.5?yeezy官方尺码对照表v2
- 高铁乘务员面试要求
- coo的定位是什么?首席运营官的工作职责是什么
- 高校|时尚心理学:见工面试怎样穿?心理学家透露穿这个颜色录取率最高
- 大学生|假如有5杯水,却来了6个领导,应该怎么分?国企面试题难倒众人
- 00后|00后毕业生简历太狂野了?谷爱凌的朋友!面试官:被简历笑出腹肌
