00:00
好,我们看看这样一道题。雪花片算法的实现原理,那么我们看到这道题的时候呢,这道。还是按照咱之前。难度指数。这个考察的比较多啊,为啥呢?因为你只要说你会为服务对吧。灰色模式开发,那肯定。我问你这道题啊,概率是相等的。好,首先我们要看一下它的概念。嗯,概念的话呢,是这样的。你得知道什么是雪花栓。也叫雪花片算法。呃,雪花算法呢,它是由这个人工智能推特是吧。
01:01
开公司啊。开发的叫做分布式AB。生成算法。那你知道这个是分布式ID算法,那也就是说后续啊,问到你相关。这种ID生成器的时候,你是不是都可以想到这个雪花算法呀。法主要用在什么地方呢?主要用于分库、分表。场景。叫做全局ID。全局ID啊,他做了一个业务组件啊。对吧。或者是。呃,全局唯一定单号。这样一个场景啊。这时候呢,我们用雪花片算法非常的合适。为啥要叫这个?雪花算法呢?吃饭。
02:00
好,这时候啊,再延伸一下,他说是一般啊。一班。雪花啊,它大约。有这个10~10的19次方。水分子组成。那也就是说呀,雪花在形成过程当中啊。在雪花。它形成的。过程中。会形成不同的。结构分支你看。10的19次方水分不足。所以说呢,就是大自然当中啊。哎,不存在。呃,2片。完全一样的雪花,看。就是。这个算法的开发者。
03:01
他的思维呢非常的广,同样的我们程序在做开发的时候,你也应该可以去借鉴各行各业优秀的这个思想,融往的人家开发。那也就是说呢,这个每每片雪花是不是都有自己的这个形状啊。那雪花转啊,它这个含义啊啊。由此呢?简单点,由此衍生而来。好吧,这大家需要注意啊。呃,我们其实在碰到这种。微信ID的时候有多种方法啊,咱说一下其他这个方案也注意下扩充。比如说我们有这种UIP是吧。UID, 全球唯一的这个ID还有呢。到系统时间处。或者说是。啊,原子地震。
04:01
啊,或者说是数据库。全局之争。对吧,都可以,那但是呢,在实际应用的时候。我们为啥要选择这个雪花算法呢?是吧,大家想一想为什么啊?这一块。需要满足如下这种特点。看要几个啊。要满足这个。呃,这个特征呢,第一个一个个来。第一个是单。单调递增。这是保证啊。下一个ID号。一定怎么样啊,大于。上。The idea.好,第二个。第二个呢,就是保证安全。
05:03
ID号需要什么了?无规则。你不能说你上面是个1,下面是个2,人家都能可以猜得到你这个。ID址。啊,是吧,啊,不能让别人随机猜到。而啊,增加这个。啊,增加用户。啊,恶意。抓取数据的难度啊。好,第三个。那第3个呢,就是包含时间出。那我们知道时间中呢,它可以记录什么呀?系统时间是吧。这是非常有效的一种方式方法。好,第4个。第4个呢,叫做高可用。
06:02
那所谓高可用的就是我可以发布一个。获取分布式ID的。因为现在这个分布式开发。啊,如火如荼对不对啊。服务器啊,要保证。跑了多少呢?比如说6个9。是吧?9999。六个一个情况下啊。选D。好,第5个,呃,第5个。EDN.好,所谓递延词呢,就是我们来使用的时候。发布。一个分布式ID叫快。是不是啊,3个感叹号啊。
07:01
6个。第6个呢,就是。高QPS。假设。10万个。创建。ID的请求。50过了你答案?我服务器要顶得住啊。要顶住。好吧。可以成功创建。这大家需要注意的啊。好,那么综上所述啊。咱这里面优秀的这个选手就是谁。就是个循环算法。那雪花算法呢?他是在众多这个算法里面怎么样。脱颖而出。好吧。
08:01
那不是说呢,我们随随便便找了一个算法。呃,其实像我们国内的很多企业啊。好的郁闷,确实是。百度的uie。Generator.还有美团的这个隶属上面,他用的都是啥呀,学科上。好,这是第一个,那么接下来概念说完之后啊,我们来说一下。小爽的。那么它的组成呢?有几部分?一块块儿来说。那第一部分呢?第一部分是。我给大家说啊,它总共是64个比特币啊,64个。比特V。
09:04
数字啊,这俩需要注意。它分了四大部分。那这四大部分呢?来看第一部分。第一部分呢,是一个比特。一个比一个比特没有。这一个比的位呢,是一个符号位。啊,不能视频。不能是负数啊。不能是付出。所以呢,一般是0,这是第一个。第二个呢,就是。他用了41个比3位。在41个条内呢来表示时间处。这个时间出啊。他就是。系统记录的。好描述。啊,那可可以表示的最大这个数啊。
10:02
是二的四,二的四十一次方啊。啊,我这儿没有用那个向上的那个符号啊,我就直接定了。说啊。41次方毫秒。那多长时间了,就是69年啊。好,这第三部分啊。第三部分是什么?用10个比特币?10个比特币啊。这10个比特位表示什么呢?表示。工作机器。机器号。低的ID呢?为啥要表示机器ID呢?因为在分布式环境当中。我是不是要保证多台?服务器。好,生成ID的A1线。对不对。那在跨机房的时候。跨机房的时候呢,这10个位啊,跨机房的时候。
11:04
10个比特币啊,他还可以继续拆分。继承拆分什么拆分成两组啊。每每每每五个啊。5个比特币。啊表示比如说我前面有假设啊。前面的比如说。假设吧。前面5个比特位。这5个比特病呢,表示机房ID。然后后面呢。是机械ID。你看一看。他这个时候。是不是比较灵活了?那10个比特币呢,它的最大次数啊。最大次数呢,就是2的四次方。那2的四次方是多少呢?2的四次方。第二种的方法就是1024。
12:01
1024台机器是吧。好了,现在多少个了,现在的话呢,是42,然后呢52,是不是还有12个呀。啊,二点四二十二十二个呢,他用的是十二个。12个比他俩啊。它表示。底能学。对吧。呃,那用来干嘛呢,用来记录。对。同一毫秒。产生。还跑了个大。产生不同的。ID的力。它的最大次数呢是2的12次方减1,那就是。4096。好的,学花算法呢,我们重点是这思路边的统计规则。
13:02
他起来形成。他们的厨具。然后组装啊,它是。生成对应就是按照这个规则啊,生成对应。比特位的。数据。然后组装。到一起。生成一个全局唯一ID。好,他就这样。好了,那么这个明白了没有,明白了之后呢,我们来说一下第三块儿啊,第3块儿呢,就是它的优点啊。优点啊啥的你看啊。嗯,刚才我们看了。这个还是非常明显的是吧。那首先呢,是在分布式系统内部。他就不会怎么样啊。不会产生。ID碰撞。
14:01
是吧,效率非常高。非常高。好,第二个。他不需要干嘛呀,他不需要依赖于。第三方。第三方系统啊,它稳定性高。哎,它可以根据啊自身。业务来分配这个比特位啊,他可以自己来去修改一下。非常灵活啊。那第三块儿呢,就是。它生成这个ID的这个。幸福啊。呃,性能非常高。它每秒可以生成多少个呢?26万个。自动。
15:00
采取了IB啊。这大家需要注意的。呃,缺点是啥呢?4把我也写到这儿了。三还是写一个叫优缺点啊。缺点。缺点的话呢,写到3.4。现在的话就是依赖于机器使用。这是大家需要注意的。嗯,如果机器始终了,你回波了可能。在生活环境当中呢?大部分呢,不会出现这种情况,所以说可以忽略了。因为我们用的时候并不是说完全有这个时间。实验的方式好吧?好了,大家呢,也可以去谈一下。在Java里面怎么样来去实现这个。
16:04
呃,加上里面这个雪花算法呢。是这样的。好,这样啊,咱借助于这个AI。Java.哎,这儿已经打开了是吧,看啊。Java的。雪花算法。实现了。看看他能不能给我们生成啊。好像网络有点延迟。没剩下流量。好,我们让。
17:01
AI啊,来给大家找一个。诶,再给他发一下是不是。还没有过来吗?看一看。好看到没有,那么这个时候呢。大家就可以看到啊。加了。这个小孩算法你看到没有机器ID是吧,数据标识。大家看到科大讯飞它这个。AI助手啊,还是相当的给力。好,那么它在生成的时候呢,我们就可以一边看一下一边思考啊,好看到没有。
18:04
往上来。For, 过来。拿到我们的笔记里面啊,这样大家下去之后啊,可以再次。去深入来看一看啊。Java这个序号上方。再结合呢这道题做一个深入的理解。好了,我们做一下点评。啊,点评的话呢,本身学校算法它并不是太复杂。啊,关键是你要注意我们在什么时候用是吧。什么时候用它。然后呢,它的生存规则这四部分。怎么样来设计这样一个?雪花上方。它是最终。怎么出来的这个著称啊,这是一个助眠。好了,那今天的这个面试题啊,讲到这个地方。
我来说两句