自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

吴小懒的博客

明天,你一定会感谢今天奋力拼搏的你

  • 博客(35)
  • 收藏
  • 关注

转载 Zookeeper系列--ZAB协议

在前一篇中,写了Zookeeper的相关概念,以及节点、acl,watcher等机制,这一篇就写一下保证ZK集群高可用及数据一致性的底层实现算法:ZAB协议。ZAB协议概述在前面的文章中,介绍了经典的分布式数据一致性算法Paxos算法,但事实上zookeeper并没有采用完全的Paxos算法,而是采用了一种称为Zookeeper Atomic Broadcast( ZAB,zookeeper原...

2019-04-10 15:33:03 178

原创 JAVA元注解@interface详解(@Target,@Documented,@Retention,@Inherited)

jdk1.5起开始提供了4个元注解,用来定义自定义注解的注解,它们分别是:@Target指定注解使用的目标范围(类、方法、字段等),其参考值见类的定义:java.lang.annotation.ElementType@Documented指定被标注的注解会包含在javadoc中。@Retention指定注解的生命周期(源码、class文件、运行时),其参考值见类的定义:java.lan...

2019-04-09 15:57:44 222

原创 Zookeeper Paxos算法 一致性协议

前言Paxos 一致性协议可以说是一致性协议研究的起点,也以难以理解闻名。其实协议本身并没有多难理解,它的难理解性主要体现在:为何如此设计协议以及如何证明其正确性。本文尝试通过流程图来说明协议的内容以及基本应用过程,不涉及如何证明其正确性。基本概念Paxos 可以分为两种:Single-Decree Paxos: 决策单个 ValueMulti-Paxos: 连续决策多个 Value,并...

2019-04-09 15:04:20 185

转载 Zookeeper的leader选举过程

Leader选举过程Leader选举是保证分布式数据一致性的关键所在。当Zookeeper集群中的一台服务器出现以下两种情况之一时,需要进入Leader选举。(1) 服务器初始化启动。(2) 服务器运行期间无法和Leader保持连接。下面就两种情况进行分析讲解。1、服务器启动时期的Leader选举若进行Leader选举,则至少需要两台机器,这里选取3台机器组成的服务器集群为例。在集群初...

2019-04-08 14:41:17 246

转载 Window安装Redis并设置为开机启动

一、下载windows版本的Redis去官网找了很久,发现原来在官网上可以下载的windows版本的,现在官网以及没有下载地址,只能在github上下载,官网只提供linux版本的下载官网下载地址:http://redis.io/downloadgithub下载地址:https://github.com/MSOpenTech/redis/tags二、安装Redis1.这里下载的是Redi...

2019-04-04 08:57:09 243

原创 vue.js安装与配置

我们在前端学习中,学会了HTML、CSS、JS之后一般会选择学习一些框架,比如Jquery、AngularJs等。这个系列的博文是针对于学习Vue.js的同学展开的。1.如何简单地使用Vue.js如同以前我们学过的Jquery一样,我们在程序中使用Vue.js时也可以使用直接引用的方法,直接下载并用 当然,和Jquery一样,Vue.js也可以使用CDN的形式引用在代码当中。在bootcdn网...

2019-04-03 13:53:35 857

转载 ZooKeeper学习总结 第一篇:ZooKeeper快速入门

1. 概述Zookeeper是Hadoop的一个子项目,它是分布式系统中的协调系统,可提供的服务主要有:配置服务、名字服务、分布式同步、组服务等。它有如下的一些特点:简单Zookeeper的核心是一个精简的文件系统,它支持一些简单的操作和一些抽象操作,例如,排序和通知。丰富Zookeeper的原语操作是很丰富的,可实现一些协调数据结构和协议。例如,分布式队列、分布式锁和一组同级别节点中...

2019-04-03 11:39:13 404

原创 设计模式之访问者模式

访问者模式在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。介绍意图: 主要将数据结构与数据操作分离。主要解决: 稳定的数据结构和易变的操作耦合问题。何时使用: 需要对一个对...

2019-04-01 16:54:27 153

原创 设计模式之观察者模式

观察者模式当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。介绍意图: 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。主要解决: 一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。何时使用: 一...

2019-04-01 16:49:21 148

原创 设计模式之模板模式

模板模式在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。介绍意图: 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。主要解决: 一些方法通用,却在每一个子类都重新写了...

2019-04-01 16:44:09 129

转载 设计模式之策略模式

策略模式在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。介绍意图: 定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。主要解决: 在有多种算法相似的情况下,使...

2019-04-01 16:34:54 104

原创 设计模式之空对象模式

空对象模式在空对象模式(Null Object Pattern)中,一个空对象取代 NULL 对象实例的检查。Null 对象不是检查空值,而是反应一个不做任何动作的关系。这样的 Null 对象也可以在数据不可用的时候提供默认的行为。在空对象模式中,我们创建一个指定各种要执行的操作的抽象类和扩展该类的实体类,还创建一个未对该类做任何实现的空对象类,该空对象类将无缝地使用在需要检查空值的地方。实...

2019-04-01 16:30:34 104

原创 设计模式之状态模式

状态模式在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。介绍意图: 允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。主要解决: 对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为。何...

2019-04-01 16:27:54 113

原创 设计模式之备忘录模式

备忘录模式备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。介绍意图: 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。主要解决: 所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。何时使用: 很多时候我们总...

2019-04-01 16:23:01 173

原创 设计模式之中介者模式

中介者模式中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。介绍意图: 用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。主要解决: 对象与对象之间存在大量的关联关系,...

2019-04-01 16:18:50 106

原创 设计模式之责任链模式

责任链模式顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。介绍意图: 避免请求发送者与接收者耦合在一...

2019-04-01 16:14:55 118

原创 设计模式之代理模式

代理模式在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。介绍意图: 为其他对象提供一种代理以控制对这个对象的访问。主要解决: 在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要...

2019-04-01 16:14:33 98

原创 设计模式之外观模式

外观模式外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。介绍意图: 为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易...

2019-04-01 16:14:00 154

原创 设计模式之享元模式

享元模式享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。我们将通过创建 5 个对象来画出 20 个分布于不同位置的圆来演示这种模式。由于只有 5 种可用的颜色,所以 color 属性被用来...

2019-04-01 16:13:43 131

原创 设计模式之装饰器模式

装饰器模式装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。我们通过下面的实例来演示装饰器模式的用法。其中,我们将把一个形状装饰上不同的颜色,同时又不改变形状类。介绍意图: 动态地...

2019-04-01 16:13:32 119

原创 设计模式之组合模式

组合模式组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。我们通过下面的实例来演示组合模式的用法。实例演示了一个组织中员工的层次结构。介绍意图:...

2019-04-01 16:13:16 125

原创 设计模式之命令模式

命令模式命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。介绍意图: 将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。主要解决: 在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需...

2019-04-01 16:12:54 111

原创 设计模式之解释器模式

解释器模式解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。介绍意图: 给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。主要解决: 对于一些固定文法构建一个解释句子的解释器。何时使用: 如...

2019-04-01 16:12:27 192

原创 设计模式之迭代器模式

迭代器模式迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。迭代器模式属于行为型模式。介绍意图: 提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。主要解决: 不同的方式来遍历整个整合对象。何时使用: 遍历一个聚合对象。如何解决: 把在元素...

2019-04-01 16:11:38 99

原创 设计模式之过滤器模式

过滤器模式过滤器模式(Filter Pattern)或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模式属于结构型模式,它结合多个标准来获得单一标准。实现我们将创建一个 Person 对象、Criteria 接口和实现了该接口的实体类,来过滤 Person 对象的列表。Cri...

2019-04-01 15:20:47 177

原创 设计模式之桥接模式

桥接模式桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。我们通过下面的实例来演示桥接模式(Bridge Pattern)的用法。其中,可以使用相同的抽象类方法但是不同的桥接...

2019-04-01 15:09:13 121

原创 设计模式之适配器模式

适配器模式适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本来读取内存卡。我们通过下面的实例来演示适配器模式的使用。其...

2019-04-01 13:56:33 97

原创 设计模式之原型模式

原型模式原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此...

2019-04-01 13:47:57 103

原创 设计模式之建造者模式

建造者模式建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。介绍意图: 将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。主要解决: 主要解决在软件系统中,有时候面临着"...

2019-04-01 11:48:09 85

原创 设计模式之单例模式

单例模式单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。注意:1、单例类只能有一个实例。2、单例类必须自己创建自己的唯一实例。3...

2019-04-01 11:38:41 102

原创 设计模式之抽象工厂模式

抽象工厂模式抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。介绍**意图:**提供一个创建一系列相关或相互依赖对象的接口,而无需指...

2019-04-01 11:07:54 96

原创 设计模式之工厂模式

工厂模式工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。介绍**意图:**定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。**主要解决:**...

2019-04-01 10:58:30 87

原创 设计模式的六大原则

1、开闭原则(Open Close Principle)开闭原则的意思是:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。2、里氏代换原则(Liskov Substitution Principle)里氏代换原则是面向对象...

2019-04-01 10:36:34 87

原创 23种设计模式

**工厂模式(FACTORY):**客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。**建造模式(BUILDER):**将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品...

2019-04-01 10:25:34 76

原创 D:\Program' 不是内部或外部命令,也不是可运行的程序

'D:\Program' 不是内部或外部命令,也不是可运行的程序今天在交叉编译cocos2d-x 的时候遇到了这个问题,解决方法记录一下我在 create-android-project.bat 里边set _CYGBIN=D:\Program Files\cygwin\bin当双击运行bat的时候命令行就报了这个错‘D:\Program’ 不是内部或外部命令,也不是可运行的程序原来...

2019-03-29 09:52:06 10806

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除