![](https://img-blog.csdnimg.cn/90e927cccc214a7eb0ff80412616adc8.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
分布式
文章平均质量分 81
分布式系统(distributed system)是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。
呆萌宝儿姐
CSDN专家博主、阿里云开发者社区专家博主、51CTO社区专家博主、360书馆认证博主、知乎掘金B站等平台受邀作者。
如遇开发、程序等需求,博客首页下拉加入公众号,私信博主
展开
-
分布式共识算法——Gossip协议(图解)
过程是种子节点会把所有的数据都跟其他节点共享,以便消除节点之间数据的任何不一致,它可以保证最终、完全的一致。如果把两个节点数据同步一次定义为一个周期,则在一个周期内,Push 需通信 1 次,Pull 需 2 次,Push/Pull 则需 3 次。整个传播过程可能需要一定的时间,由于不能保证某个时刻所有节点都收到消息,但是理论上最终所有节点都会收到消息,因此它是一个最终一致性协议。Gossip 协议的消息传播方式有两种:Anti-Entropy(反熵传播)和Rumor-Mongering(谣言传播)。原创 2022-11-06 14:35:04 · 1346 阅读 · 0 评论 -
分布式共识算法——Raft算法(图解)
Paxos 和 Raft 都是分布式一致性算法,这个过程如同投票选举领袖(Leader),参选者(Candidate)需要说服大多数投票者(Follower)投票给他,一旦选举出领袖,就由领袖发号施令。Paxos 和 Raft 都是分布式一致性算法,这个过程如同投票选举领袖(Leader),参选者(Candidate)需要说服大多数投票者(Follower)投票给他,一旦选举出领袖,就由领袖发号施令。在 Raft 算法中充当逻辑时钟的作用,使得服务器节点可以查明一些过期的信息(比如过期的 Leader)。原创 2022-11-06 14:04:11 · 2172 阅读 · 0 评论 -
分布式共识算法——Paxos算法(图解)
准备阶段:Proposer负责接收 client 请求并产生提案,必须由多数派 Acceptor 批准通过提案接受阶段:提案通过后,再将要执行的修改操作广播给 Acceptor,这次仍然多数派通过,此修改才能生效,可以返回响应给客户端。原创 2022-11-06 10:18:50 · 6473 阅读 · 2 评论 -
数据结构:图解归并过程
现在我们可以总结出归并排序的算法思路了,那就是在将整个数组进行不断划分,知道划分的每个字数组的长度为0或者为1,这是每个字数组统统都是有序数组,这是再按照有序数组的拼接算法,对每个子数组进行拼接,这样就能保证每次的拼接结果都还是有序的最终拼接成一个之后,整个数组便都是有序的,而数组的排序也宣布完成,关于这个字数组的划分,实际上是通过递归实现的逻辑上的划分。我们首先来详细说说归并排序的算法思路,归并排序的算法思路并不复杂,其主要是一个拆分与合并的过程,接下来我们用图解来看看归并排序究竟是如何排序的。原创 2022-10-17 16:08:01 · 1482 阅读 · 0 评论 -
场景应用:列举常见的运行时异常 RuntimeException
(根据里氏代换原则 [ 能使用父类型的地方一定能使用子类型 ],抓取 ExampleA 类型异常的 catch 块能够抓住 try 块中抛出的 ExampleB 类型的异常),第一层finally抛出Annoyance异常,根据里氏替换原则:能使用父类型的地方一定能使用子类型,这里也能替换为子类型异常,也能被捕获,然后打印。Java 编译器要求方法必须声明抛出可能发生的受检异常,但是并不要求必须声明抛出未被捕获的运行时异常。catch块,能捕获到Sneeze异常,不再向外抛出、然后打印。原创 2022-10-16 15:36:12 · 1542 阅读 · 0 评论 -
场景应用:Java 出现 Out Of MemoryError(OOM 错误)的原因有哪些?出现 OOM 错误后,怎么解决?
错误原因:此 OOM 是由于 JVM 在 GC 时,对象过多,导致内存溢出,建议调整 GC 的策略,在一定比例下开始 GC 而不要使用默认的策略,或者将新代和老代设置合适的大小,需要进行微调存活率。解决方法:如果 JVM 内存调的过大或者可利用率小于 20%,可以建议将 heap 及 perm 的最大值下调,并将线程栈调小,即-Xss 调小,如:-Xss128k。显示的是提示分配失败的源模块的名称,所以有必要查看日志文件,如 crash 时的 hs 文件。解决方法:调高 heap 的最大值,即。原创 2022-10-16 09:02:59 · 1695 阅读 · 0 评论 -
完全二叉树为什么最适合顺序存储结构(转载)
如果从根结点开始从1 挨个编号,然后在存进一维数组中,那么有些结点可能没有孩子,那么它原本的孩子在数组中的位置就会被后面上来的的结点占据,这样在数组中再拿着2i或者2I+1找到的结点就不是实际情况下树中结点的左右孩子(实际情况下树中该结点可能甚至都没有孩子)。我们可以根据数组的下标i也能找到左孩子(2i)和右孩子(2I+1),前提是数组下标 i=0位丢弃不用,从i=1开始存储树的编号为1的根结点,以此类推。如果2i+1>n, 则结点i无右孩子, 否则其右孩子rchild (i) 是结点2i+1。转载 2022-09-27 11:19:33 · 267 阅读 · 0 评论 -
utf-8编码下,一个字符最多占几个字节?
2,带有变音符号的拉丁文、希腊文、西里尔字母、亚美尼亚语、希伯来文、阿拉伯文、叙利亚文等字母则需要2字节编码(Unicode范围由U+0080~U+07FF)。Unicode编码:一个英文等于两个字节,一个中文(含繁体)等于两个字节。中文标点占两个字节,英文标点。3,其他语言的字符(包括中日韩文字、东南亚文字、中东文字等)包含了大部分常用字,使用3字节编码。1,一个US-ASCIl字符只需1字节编码(Unicode范围由U+0000~U+007F)。一个英文字符等于一个字节,英文标点占一个字节。原创 2022-09-26 22:45:05 · 3376 阅读 · 0 评论 -
接口中不能有方法体吗?1.8以后可以了
3、如果子类继承父类,父类中有b方法,该子类同时实现的接口中也有b方法(被default修饰),那么子类会继承父类的b方法而不是继承接口中的b方法。以前在比较接口与抽象类区别的时候,接口中不能有方法体是接口的一个特点。而最近的学习改变了这一特点。是因为,类在继承接口中的default方法时,不知道应该继承哪一个接口中的default方法。1、实现类会继承接口中的default方法。转载 2022-09-25 18:06:31 · 253 阅读 · 0 评论 -
个人算法重刷记录
代码如下:实现拷贝数组函数代码如下:写一排序算法,输入 10 个数字,以逗号分开,可根据参数选择升序或者 降序排序,须注明是何种排序算法代码如下:代码如下:已排好序的数组 A,一般来说可用二分查找可以很快找到,现有一特殊数组 A,它是循环递增的,如 a[]={17, 19 ,20, 25, 1, 4, 7, 9},在这样的数组中找一元素,看看是否存在。请写出你的算法,必要时可写伪代码,并分析其空间,时间复杂度**思路说明:**循环递增数组有这么一个性质:以数组中间元素将循环递增数组划分为两部原创 2022-09-21 21:06:46 · 4855 阅读 · 0 评论 -
图解字符串匹配算法:从Brute-Force到KMP,一下子就整明白了
分析如下:假设模式串的前 m-1 个字符序列和主串的相应字符序列比较总是相等,而模式串的第 m 个字符和主串的相应字符比较总是不相等,此时,模式串的 m 个字符序列必须和主串的相应字符序列块一共比较 n-m+1次,每次比较 m 个字符,总共需比较m×(n- m+1)次,因此,其时间复杂度为O(nm)。比如ABCDABD,ABCD的匹配值均为0,但是A与前缀ABCD中的A相同,故匹配值为1,AB与前缀ABCD中的AB相同,故B的匹配值为2,ABD没有与之相同的前缀,故D为0。i 为主串当前比较字符的下标;原创 2022-09-21 19:03:52 · 1521 阅读 · 0 评论 -
SOA架构和微服务架构的区别(转载)
Java EE部署架构,通过展现层打包WARs,业务层划分到JARs最后部署为EAR一个大包,而微服务则打开了这个黑盒子,把应用拆分成为一个一个的单个服务,应用Docker技术,不依赖任何服务器和数据模型,是一个全栈应用,可以通过自动化方式独立部署,每个服务运行在自己的进程中,通过轻量的通讯机制联系,经常是基于HTTP资源API,这些服务基于业务能力构建,能实现集中化管理(因为服务太多啦,不集中管理就无法DevOps啦)。是一个层面的东西,一个谈到是架构风格和方法,一个谈的是实现工具或组件。转载 2022-09-18 19:05:55 · 1268 阅读 · 0 评论 -
图的最小生成树算法(图解+代码)| 学不会来看我系列
普里姆(Prim)算法,也是求加权连通图的最小生成树的算法。基本思想对于图G而言,V是所有顶点的集合;现在,设置两个新的集合U和T,其中U用于存放G的最小生成树中的顶点,T存放G的最小生成树中的边。从所有的 u∈U ,v∈(V-U)(V-U表示除去U的所有顶点)的边中选取权值最小的边(u,v),将顶点v加入U中,将边(u,v)加入集合T中,如此不断重复,直到U=V为止,最小生成树构造完毕,此时集合T中包含了最小生成树中的所有边。克鲁斯卡尔(Kruskal)算法,是用来求加权连通图的最小生成树的算法。原创 2022-09-17 20:17:04 · 6010 阅读 · 0 评论 -
Java8新特性:Lambda表达式、函数式接口以及方法引用
Lambda 是一个匿名函数(Lambda 表达式简化了匿名内部类的形式,并且可以达到同样的效果,当然Lambda 要优雅得多),我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码 像数据一样进行传递)。如果函数式接口的实现恰好可以通过调用一个类的构造方法来实现(比如说接口方法与这个构造方法的参数个数、参数类型和返回值都对的上),那么就可以使用构造方法引用。Java 8为了使现有的函数更加友好地支持Lambda表达式,引入了函数式接口的概念。可以写成``I05 i05 = a -> 1;原创 2022-09-15 13:32:40 · 1326 阅读 · 0 评论 -
图解 PRC 原理
比如,我们开发电商系统,需要拆分出用户服务、商品服务、优惠券服务、支付服务、订单服务、物流服务、售后服务等等,这些服务之间都是相互调用,这时内部调用最好使用 RPC ,同时每个服务都可以独立部署,独立上线。当我们的应用访问量增加和业务增加时,发现单机已无法承受,此时可以根据不同的业务(划分清楚业务逻辑)拆分成几个互不关联的应用,分别部署在不同的机器上,此时可能也不需要用到 RPC。随着我们的业务越来越多,应用也越来越多,应用与应用相互关联调用,发现有些功能已经不能简单划分开,此时可能就需要用到 RPC。原创 2022-09-03 20:54:13 · 8437 阅读 · 0 评论 -
图解分布式的两种单点问题(有状态服务和无状态服务)
由于三个节点都是对等的,任意一个都可以成为Master,也就是说租期过后,有可能会出现Master切换的情况,所以为了避免Master的频繁切换,Master节点需要比另外两个节点先发起自己要成为Master的请求(续租),告诉其他两个节点我要继续成为Master,然后另外两个节点收到请求后会进行应答,正常情况下另外两个节点会同意该请求。比如,在分布式系统中,为了降低各进程通信的网络结构的复杂度,我们会增加一个代理节点,专门做消息的转发,其他的业务进行直接和代理节点进行通信,类似一个星型的网络结构。原创 2022-09-03 20:04:59 · 1591 阅读 · 0 评论