纠纷奇闻社交美文家庭
投稿投诉
家庭城市
爱好生活
创业男女
能力餐饮
美文职业
心理周易
母婴奇趣
两性技能
社交传统
新闻范文
工作个人
思考社会
作文职场
家居中考
兴趣安全
解密魅力
奇闻笑话
写作笔记
阅读企业
饮食时事
纠纷案例
初中历史
说说童话
乐趣治疗

互联网大厂面试雪花算法(Snowflake)实现

1月1日 天浪楼投稿
  雪花算法(Snowflake),是由Twitter公司开源的分布式ID生成算法,通过以划分名称空间的方式将64位的数据分割成多个部分,并且每个部分来代表不同的含义。而在Java中64位的数据只有是Long类型的数据,所以在Java中对于雪花算法的实现都是以Long类型的数据来存储的。64Bit分别代表什么意思?
  如图所示1、第1位,占用1个bit,但是其值始终是不变的,所以可以看做是一个符号位。2、第2位开始到第41位,是时间戳,41bit可以表示2的41次方个数据,这个数据代表是毫秒数,那么从这里就可以知道雪花算法的使用年限大概是(2的41次方1000360024365),大概的计算结果是69年。3、中间10位,表示机器数,也就是2的10次方台机器,但是在一般情况下,都用不了这么多的机器。所以这十个位置可以根据需求自己拟定。4、最后的12位,相当于一个自增排序,可以表示2的12次方的数据也就是4096个数据。
  通过这样的划分之后,相当于在一个毫秒之内一个服务器上可以产生4096个不重复的ID值。其量级也是非常可观的。
  从雪花算法的实现思想上来看,其ID呈现出一个递增的趋势,并且不依赖第三方的数据库,第三方的服务系统,我们可以将其以工具类,或者是以JavaBean的方式注入到容器中,使用非常方便,而且在生成ID方面也是比较高效的,同样也可以结合业务来对Bit位进行合理的分配从而生成出符合业务逻辑的全局唯一ID。
  这里有读者会问了?
  在中间的位置中我们引入了时间戳,那么我们如何避免时钟回拨的问题呢?也就是说如果时钟回拨了,就会导致以前恰巧生成的ID再次出现,也会出现重复ID的情况,那么我们如何去解决这个问题呢?下面是我来实现的一个雪花算法ID生成器ClassnameSnowflakeIdUtilsDescriptionTODO雪花算法ID生成器Date20208142:29PMCreatedbynihuiVersion1。0ComponentpublicclassSnowflakeIdUtils{Fields开始时间截(20150101)privatefinallongtwepoch1420041600000L;机器id所占的位数privatefinallongworkerIdBits5L;数据标识id所占的位数privatefinallongdatacenterIdBits5L;支持的最大机器id,结果是31(这个移位算法可以很快的计算出几位二进制数所能表示的最大十进制数)privatefinallongmaxWorkerId1L(1LworkerIdBits);支持的最大数据标识id,结果是31privatefinallongmaxDatacenterId1L(1LdatacenterIdBits);序列在id中占的位数privatefinallongsequenceBits12L;机器ID向左移12位privatefinallongworkerIdShiftsequenceB数据标识id向左移17位(125)privatefinallongdatacenterIdShiftsequenceBitsworkerIdB时间截向左移22位(5512)privatefinallongtimestampLeftShiftsequenceBitsworkerIdBitsdatacenterIdB生成序列的掩码,这里为4095(0b1111111111110xfff4095)privatefinallongsequenceMask1L(1LsequenceBits);工作机器ID(031)privatelongworkerId;数据中心ID(031)privatelongdatacenterId;毫秒内序列(04095)privatelongsequence0L;上次生成ID的时间截privatelonglastTimestamp1L;Constructors构造函数paramworkerId工作ID(031)paramdatacenterId数据中心ID(031)publicSnowflakeIdUtils(longworkerId,longdatacenterId){if(workerIdmaxWorkerIdworkerId0){thrownewIllegalArgumentException(String。format(workerIdcantbegreaterthandorlessthan0,maxWorkerId));}if(datacenterIdmaxDatacenterIddatacenterId0){thrownewIllegalArgumentException(String。format(datacenterIdcantbegreaterthandorlessthan0,maxDatacenterId));}this。workerIdworkerId;this。datacenterIddatacenterId;}publicSnowflakeIdUtils(){this(1,1);}publicsynchronizedStringstringId(){returnString。valueOf(this。nextId());}Methods获得下一个ID(该方法是线程安全的)returnSnowflakeIdpublicsynchronizedlongnextId(){longtimestamptimeGen();如果当前时间小于上一次ID生成的时间戳,说明系统时钟回退过这个时候应当抛出异常if(timestamplastTimestamp){thrownewRuntimeException(String。format(Clockmovedbackwards。Refusingtogenerateidfordmilliseconds,lastTimestamptimestamp));}如果是同一时间生成的,则进行毫秒内序列if(lastTimestamptimestamp){sequence(sequence1)sequenceM毫秒内序列溢出if(sequence0){阻塞到下一个毫秒,获得新的时间戳timestamptilNextMillis(lastTimestamp);}}时间戳改变,毫秒内序列重置else{sequence0L;}上次生成ID的时间截lastT移位并通过或运算拼到一起组成64位的IDreturn((timestamptwepoch)timestampLeftShift)(datacenterIddatacenterIdShift)(workerIdworkerIdShift)}阻塞到下一个毫秒,直到获得新的时间戳paramlastTimestamp上次生成ID的时间截return当前时间戳protectedlongtilNextMillis(longlastTimestamp){longtimestamptimeGen();while(timestamplastTimestamp){timestamptimeGen();}}返回以毫秒为单位的当前时间return当前时间(毫秒)protectedlongtimeGen(){returnSystem。currentTimeMillis();}Test测试publicstaticvoidmain(String〔〕args){SnowflakeIdUtilsidWorkernewSnowflakeIdUtils(3,1);System。out。println(idWorker。nextId());}}总结
  由于官方也没有对时间回拨的情况给出明确的答案,这里笔者的处理结果就是将其以异常的方式进行抛出,后来也有很多的分布式ID算法都是基于雪花算法的思想进行升级,而且避免了雪花算法带来的各种缺陷。例如百度的UidGrnerator、美团的Leaf都是在雪花算法的基础上演变出来的。

2023成都包车到拉萨10天时间,大概多少费用2023成都包车到拉萨10天时间,大概多少费用?成都包车到拉萨,加上稻城亚丁和洋湖这几个著名景点一共10天时间,大概需要多少费用呢?成都包车到拉萨,看你选择哪款车型,如果……前女排国手宣布退役请记住我追梦20年的小皇帝曾被郎平抛弃前女排国手张磊在社交网络宣布退役,她曾经帮助球队夺亚锦赛冠军、2011女排世界杯季军。她写道:20012021天下没有不散的宴席。。。感恩一切,请记住上海队8号张磊追梦2……佩里西奇克罗地亚已经回来了,我们不惧怕任何对手直播吧11月29日讯克罗地亚将在12月1日迎来对阵比利时的小组赛末战,佩里西奇在采访时回顾了此前的两场小组赛比赛。克罗地亚是否已经恢复过来了?是的,克罗地亚已经回来……越来越好了!美巨头宣布新消息,中科院院士果然没说错文C君科讯排版C君科讯头条号原创文章,禁止抄袭,违者必究越来越好了!美巨头宣布新消息,中科院院士果然没说错海外调研机构Omdia公布的最新数据显示,2022年……知名导演拍床戏到崩溃,这电影让我笑不活了导演李安,简直要让我笑不活了hhhh咱就说,他执导的电影《色戒》被观众奉为神作,里面的三场激情戏,更是经典到一次又一次被拎出来解读。然而。。。。。。从台前来到……秋言物语I50。心念的结果长短相形,高下相倾,音声相和,前后相随。Longandshort,highandlow,soundandvoice,beforeandafterwerebornagain……阳江二手房带押过户在辖区金融机构全面铺开落地,办理金额突破1为进一步提供便民利民金融服务,支持房地产市场平稳发展,人民银行阳江市中心支行积极部署,指导和推动辖区金融机构全面铺开二手房带押过户业务办理落地。目前,阳江辖区广发银行阳江分行、……全自动化全方位内网综合扫描漏洞扫描开源工具Fscan今天给大家分享一个开源的内网扫描工具,在GitHub平台上面有5。3KStar。具体情况如下:简介fscan是一款go语言编写的内网综合扫描工具,方便一键自动化、全方位漏……国乒巨星崛起!17岁新星3线晋级有望夺3金刘国梁找到第二个马万众瞩目的乒乓球WTT支线赛布达佩斯站正在如火如荼的进行,刘国梁派出18名球员参赛,其中很多是年轻有天赋的小将,比如蒯曼、林诗栋、向鹏等人,也有一些二阵和陪练球员,比如张瑞、刘……读书第二天放下你的架子在生活中,有些人总是认为自己拥有的财富比别人多,学历比别人高,家世比别人好,所以到处炫耀自己,摆出一副高高在上的样子,不把别人放在眼里,甚至认为自己可以凌驾于他人之上。殊……6年1。9亿,再见勇士!拒绝降薪续约,这次库里也不会帮助你了当一支球队拿到总冠军之后,如果队内有多人面临续约的话,那么这支球队的管理层就会非常头疼,因为夺冠能够增加轮换球员的身价,尤其是表现非常不错的球员,即使主队不愿意给大合同,但市场……小米回购了个寂寞文老鱼儿编辑杨旭然三天超亿元的回购,也只是小米持续不断回购的小部分而已。9月7日,小米集团公告,公司回购230万股,回购价格为10。7810。84港元,共耗资……
为什么可可西里不能随意进出?带你深入了解一下人类禁区在我们国家,有很多年轻人都喜欢穷游,毕竟外面的世界是非常令人向往的,但是很多人在出行之前却并没有很好地去了解当地的风土人情,这就会导致在出行的时候遇到很多的问题,例如一位95后……30万年前古人类面貌复原!科学家发现东亚最早具有现代人面部特作者崔雪芹华龙洞6号头骨面貌复原。A:华龙洞6号化石;B:虚拟复原头骨;C:实体复原头骨;D:雕塑头骨;E:复原像(中科院古脊椎与古人类所供图)华龙洞6号面骨……立秋后最不能错过的瓜果蔬菜,记到本子上立秋后,气候常伴干燥热等特征,上火的人越来越多。那么立秋后吃什么蔬果能降火气,除秋燥呢?立秋养生蔬果茄子民谚有立夏栽茄子,立秋吃茄子之说,立秋正是吃茄子……特斯拉降价,问界也跟上了!为了年底冲量,新能源或再掀价格战?10月24日,特斯拉对Model3和ModelY两款车型的价格进行了调整,全系降价1。4万3。7万元,震惊了业界。还爆出来一件趣事,一位群主找特斯拉车主每人收五块钱用于维权。结……iPhone14发布三周,任泽平四评苹果!性价比比荣耀小米差近日,任泽平似乎对iPhone14颇为关注,距离iPhone14发布会刚刚过去三周,已四次喊话苹果。9月27日,对于近日网上热议的iPhone14将成为苹果史上最差销量机……都是养脾胃的好食材,成本才几块钱,建议一周给娃吃两次香甜小米糕推荐月龄:12M配餐用途:主食配餐功效:补钙助消化健脾养胃营养特点小米和南瓜都是健脾养胃的好食材,成本也不过几块钱。小米富含的维生素B1……每年增加4个西湖水量,青海湖未来有可能冲出峡谷流入黄河吗?近几十年来,因为自然环境的变化以及人类活动的影响,我国绝大多数湖泊面积越来越小,有的湖泊甚至彻底消失了。青海湖地理位置但是有一个湖泊却是例外,非但没有缩小,反而越来……冬天坐月子这样护理,身体恢复快还奶水足冬季坐月子,对宝妈和孩子来说都有不小的挑战,虽然现在的条件好了,暖气空调都够用,但空气干燥,感冒病毒什么的也比较活跃,一不小心就会中招。从科学的角度讲,宝妈冬天坐月子要注……位于松嫩平原南部的大布苏湖,是我国东部地区极为罕见的盐湖湖泊是指地表的湖盆及其容纳的水体,根据湖泊中水体的性质可以分为淡水湖和咸水湖。淡水湖是指湖泊既有流入的水,又有流出的水,使得盐分不易累积,湖泊湖水保持淡水状态,比如我国的鄱阳湖……最适合孩子吃的食物,牛肉未上榜,豆腐排倒数第一,建议了解最适合孩子吃的食物,牛肉未上榜,豆腐排倒数第一,建议了解春天是孩子长个的黄金期,长个时候,家长一定要注意孩子的营养和健康。春天天气好的时候,多带孩子出门活动,吸收太阳光,……瑞士信贷成风暴中心危机发酵!9。6万亿规模大而难救!作者:熊晓萌出品:全球财说若说硅谷银行、签名银行突发倒闭破产并不能与雷曼兄弟危机相提并论,那么瑞士信贷呢?3月15日,欧洲股市银行板块急剧下挫,STOXXEu……老早绍兴农村儿童的玩具与游戏要说现在的小孩,一生下来,如同宝贝疙瘩。两户人家就一个宝宝,自然爱不释手,十分珍视,可不能委屈了他。不但生他养他的父母视同心肝,就是爷爷奶奶、外公外婆,也把他当成掌上明珠。几乎……
友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找美丽时装彩妆资讯历史明星乐活安卓数码常识驾车健康苹果问答网络发型电视车载室内电影游戏科学音乐整形