专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

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

  雪花算法(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位privatefinallongworkerIdShiftsequenceBits;数据标识id向左移17位(125)privatefinallongdatacenterIdShiftsequenceBitsworkerIdBits;时间截向左移22位(5512)privatefinallongtimestampLeftShiftsequenceBitsworkerIdBitsdatacenterIdBits;生成序列的掩码,这里为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)sequenceMask;毫秒内序列溢出if(sequence0){阻塞到下一个毫秒,获得新的时间戳timestamptilNextMillis(lastTimestamp);}}时间戳改变,毫秒内序列重置else{sequence0L;}上次生成ID的时间截lastTimestamptimestamp;移位并通过或运算拼到一起组成64位的IDreturn((timestamptwepoch)timestampLeftShift)(datacenterIddatacenterIdShift)(workerIdworkerIdShift)sequence;}阻塞到下一个毫秒,直到获得新的时间戳paramlastTimestamp上次生成ID的时间截return当前时间戳protectedlongtilNextMillis(longlastTimestamp){longtimestamptimeGen();while(timestamplastTimestamp){timestamptimeGen();}returntimestamp;}返回以毫秒为单位的当前时间return当前时间(毫秒)protectedlongtimeGen(){returnSystem。currentTimeMillis();}Test测试publicstaticvoidmain(String〔〕args){SnowflakeIdUtilsidWorkernewSnowflakeIdUtils(3,1);System。out。println(idWorker。nextId());}}总结
  由于官方也没有对时间回拨的情况给出明确的答案,这里笔者的处理结果就是将其以异常的方式进行抛出,后来也有很多的分布式ID算法都是基于雪花算法的思想进行升级,而且避免了雪花算法带来的各种缺陷。例如百度的UidGrnerator、美团的Leaf都是在雪花算法的基础上演变出来的。

续航长充电快空间大,价格便宜的电动大家轿,很好养活,江淮iC5从当前国内汽车市场来看,全面发展新能源汽车已经是大势所趋,不仅造车新势力崛起,就连老牌合资大众,本田奔驰等品牌,都在纷纷转型,顺应时代发展。新能源汽车长期使用,可以有效降低用车成本最新!阿里和京东都杀到了上海搞房地产开发虽然最终的统计数据虽然还没出来,但是根据8月28日前的统计,上海整个8月份的二手房成交量预计将突破1。9万套。来自兔博士的数据显示,6月份上海的二手房成交在1。43万套,7月份的成首发价5999元的小米户外电源1000Pro,算贵吗?近日,小米在京东上架了一款5999元的小米户外电源,不少人觉得该户外电源的配置与价钱不太匹配,觉得小米又在割韭菜。为了一探究竟,小编找来了许多网友推荐专门研发移动高端电源的EcoFiPhone14系列将登场,Pro版成换机首选,安卓党可考虑这款真香机9月8日凌晨100,苹果将举办今年的秋季新品发布会,届时将会发布万众期待的iPhone14系列手机。据了解,今年的iPhone14系列今年将有四款机型,分别为数字系列的iPhone2022年好口碑安卓旗舰盘点九月换机认准这4款,一步到位能用5年现在大部分人都是通过网络来购买手机,手机的配置基本都很透明,很快就能大致地了解一部手机。但正是因为这种方式,在没有见到真机前,很多人总感觉不放心,其实手机的整体使用表现如何,还可以滥用美元霸权输出通胀冲击全球经济新华社记者俞懋峰今年,美国联邦储备委员会连续四次加息,其中6月和7月分别加息75个基点,为上世纪80年代初以来最大幅度的集中加息。美元因此持续走强,国际资金回流美国,造成不少国家和中国天化工(00362)牡丹江市住建局已暂时接管牡丹江佳日热电的营运智通财经APP讯,中国天化工(00362)发布公告,该公司的间接全资附属牡丹江佳日热电有限公司(牡丹江佳日热电)收到牡丹江市住房和城乡建设局(有关当局)发出的通知,指为确保牡丹江市欧盟要中印对俄油限价,印度以加大进口回应,中国的反应耐人寻味为充分发挥能源在政治外交领域的杠杆作用,俄罗斯天然气工业股份有限公司近日宣布,因主涡轮机泄露,俄罗斯到德国的北溪一号天然气管线将无限期关闭。众所周知,所谓的故障基本可以看成是借题发半年亏掉535万,上海吉野家不香了?锦江酒店拟抛售9。8股权本文来源时代财经作者王言一则股权交易的消息,披露了日式快餐连锁品牌吉野家的经营情况。上海联合产权交易所官网显示,上海锦江国际餐饮投资管理有限公司(下称锦江餐饮)拟转让上海吉野家快餐永辉超市数百家门店相继关闭,市值蒸发840亿,原因是啥?近日,永辉超市公告称,其位于福建福州的浦新店和西园店分别于8月22日和24日正式停止营业。运营十三年之久老店接连关闭,这意味着永辉超市的日子岌岌可危。的确,近年来永辉超市迎来闭店潮重磅!人民币对美元汇率创两年新低!央行下调外汇存款准备金率8月29日,人民币对美元汇率在岸和离岸市场分别跌破6。92和6。93,刷新近两年低点。2022年8月中旬以来,人民币对美元币值整体呈走跌态势。业内认为,为了遏制美国高通胀,美联储需
我们的日子杨大山不能生育,李乃文说出这句话,出戏且找打李乃文李小冉主演的我们的日子热播,上世纪八十年代,三个普通家庭的悲喜,两代平凡人命运的坎坷,是生命的一次次轮回,是日子一天天的重复。本无意将我们的日子和人世间比较,但确实有一些剧情演员质疑十几年前曾吸过毒,为什么现在还不肯原谅放过自己狂飙里一名毒贩钟阿四的扮演者被眼尖的网友扒出,正是2009年因吸毒而被捕的演员含笑。消息传出后引起轩然大波,狂飙剧组第一时间发文回应。称含笑当时以化名韩朴俊进行的简历投递。因为其前显微镜下的大明好演技和烂演技的差别在哪,没有对比就没有伤害显微镜下的大明之丝绢案成为271又一部拿捏热度的剧作,该剧把镜头对准大明的官场民生赋税等多个方面,既有现实性,也有戏剧性,轻松欢乐的笑点背后隐藏着让人辛酸的百姓血泪故事。最新剧情里地下尖兵并不尖这又是一部坏人演技胜过好人的电影地下尖兵是长影厂1957年摄制的一部谍战片当年,这是一部家喻户晓的电影,虽然是黑白的,但现在看来也是相当不错。它讲述1947年,地下工作者在古老的北平与国民党反动派斗智斗勇的故事。忽必烈的最后一天老皇猝死,没定继承人,老婆和儿媳妇大打出手今天是2023年正月二十二。在729年前的今天即元世祖至元三十一年(1294)正月二十二,80岁的薛禅皇帝忽必烈驾崩。忽必烈是在新年正月初一生病,为此还免去群臣的正旦朝贺,到正月十从差点被闷死的无名演员,到嫂系天花板,出道十年,她终于靠着狠辣翻红了狂飙火了。大嫂刷屏。图源新浪微博豆瓣9。1分的新年黑马狂飙高开飙走,出圈的却要数危险迷人的女二陈书婷。初登场,她一袭红衣,气场十足地俯视来人。再看几集,A到让张颂文饰演的强哥都俯首再刷人民的名义,女性角色愚蠢又傲慢,不起眼的她才最通透近几年反贪反黑的电视剧题材很多。看完狂飙后,忍不住又刷了一遍人民的名义。尽管该剧的主题是反腐败,但每个角色背后赤裸裸的人性,更让人触目惊心。剧中的女性角色,几乎每一个都有着搅动风云中央一号文件开展高价彩礼治理我国女性终身无孩率快速上升美驻俄大使馆呼吁在俄公民立即撤离丨早报观国内中央一号文件扎实开展高价彩礼专项治理21世纪以来第20个指导三农工作的中央一号文件13日由新华社受权发布。这份文件题为中共中央国务院关于做好2023年全面推进乡村振兴重点工作每一位职场女性都应关注的养生秘笈,春季是调整身心的最好机会一年之计在于春,对于女性更是如此随着生活节奏的加快,社会各行各业之间的人才竞争越来越激烈,现代职业女性心理压力和生理负担也在不断加重,从而导致一些常见妇科疾病的发病率都不断地提高。她是中国第一位女博士,却曾参与多次暗杀活动,外孙女是位大明星随着社会的不断发展,教育的前景也发展的愈来愈好。人们的知识水平普遍的有所提升,不仅大学生越来越多,甚至连博士生也十分常见了。但是在数十年前博士生还是一个十分稀奇的字眼。比如说我国第我国工程院首批院士一生奉献核工业事业记燕达在住长辈钱皋韵全心全意做研究,毕生奉献建祖国。年少时,钱皋韵家境贫苦,靠着申请各类奖学金坚持读书。1950年,他从上海交通大学毕业后留校任教,后被派往苏联莫斯科大学学习物理。正在写副博士论文之际
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网