自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(654)
  • 资源 (4)
  • 收藏
  • 关注

原创 【设计模式】设计模式概述以及分类

1.软件设计模式的产生背景“设计模式”这个术语最初并不是出现在软件设计中,而是被用于建筑领域的设计中。1977 年,美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任克里斯托夫·亚历山大(Christopher Alexander)在他的著作《建筑模式语言:城镇、建筑、构造(A Pattern Language: Towns Building Construction)中描述了一些常见的建筑设计问题,并提出了 253 种关于对城镇、邻里、住宅、花园和房间等进行设计的基本模式。1979 .

2021-02-09 18:34:35 106

原创 【设计模式】(二十三)解释器模式(Interpreter Pattern)

1. 解释器模式介绍在软件开发中,会遇到有些问题多次重复出现,而且有一定的相似性和规律性。如果将它们归纳成一种简单的语言,那么这些问题实例将是该语言的一些句子,这样就可以用“编译原理”中的解释器模式来实现了。虽然使用解释器模式的实例不是很多,但对于满足以上特点,且对运行效率要求不是很高的应用实例,如果用解释器模式来实现,其效果是非常好的。解释器(Interpreter)模式的定义:给分析对象定义一个语言,并定义该语言的文法表示,再设计一个解析器来解释语言中的句子。也就是说,用编译语言的方式来分析

2021-02-09 15:56:18 56

原创 【设计模式】(二十二)状态模式(State Pattern)

1. 状态模式介绍在软件开发过程中,应用程序中的部分对象可能会根据不同的情况做出不同的行为,我们把这种对象称为有状态的对象,而把影响对象行为的一个或多个动态变化的属性称为状态。当有状态的对象与外部事件产生互动时,其内部状态就会发生改变,从而使其行为也发生改变。如人都有高兴和伤心的时候,不同的情绪有不同的行为,当然外界也会影响其情绪变化。对这种有状态的对象编程,传统的解决方案是:将这些所有可能发生的情况全都考虑到,然后使用 if-else 或 switch-case 语句来做状态判断,再进行不同情况的

2021-02-09 15:03:21 94

原创 【设计模式】(二十一)模板方法模式(Template Method Pattern)

1. 模板方法模式介绍在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的实现与具体的环境相关。例如,去银行办理业务一般要经过以下4个流程:取号、排队、办理具体业务、对银行工作人员进行评分等,其中取号、排队和对银行工作人员进行评分的业务对每个客户是一样的,可以在父类中实现,但是办理具体业务却因人而异,它可能是存款、取款或者转账等,可以延迟到子类中实现。模板方法模式将解决以上类似的问题。

2021-02-08 23:51:53 59

原创 【设计模式】(二十)备忘录模式(Memento Pattern)

1. 备忘录模式介绍每个人都有犯错误的时候,都希望有种“后悔药”能弥补自己的过失,让自己重新开始,但现实是残酷的。在计算机应用中,客户同样会常常犯错误,能否提供“后悔药”给他们呢?当然是可以的,而且是有必要的。这个功能由“备忘录模式”来实现。其实很多应用软件都提供了这项功能,如 Word、记事本、Photoshop、Eclipse 等软件在编辑时按 Ctrl+Z 组合键时能撤销当前操作,使文档恢复到之前的状态;还有在 IE 中的后退键、数据库事务管理中的回滚操作、玩游戏时的中间结果存档功能、数据库与

2021-02-08 23:12:56 46

原创 【设计模式】(十九)原型模式(Prototype Pattern)

1. 原型模式介绍在有些系统中,存在大量相同或相似对象的创建问题,如果用传统的构造函数来创建对象,会比较复杂且耗时耗资源,用原型模式生成对象就很高效,就像孙悟空拔下猴毛轻轻一吹就变出很多孙悟空一样简单。原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操

2021-02-08 01:15:40 47

原创 【设计模式】(十八)命令模式(Command Pattern)

1. 命令模式的介绍在软件开发系统中,“方法的请求者”与“方法的实现者”之间经常存在紧密的耦合关系,这不利于软件功能的扩展与维护。例如,想对方法进行“撤销、重做、记录”等处理都很不方便,因此“如何将方法的请求者与实现者解耦?”变得很重要,命令模式就能很好地解决这个问题。比如我们去餐厅吃饭,菜单不是等到客人来了之后才定制的,而是已经预先配置好的。这样,客人来了就只需要点菜,而不是任由客人临时定制。餐厅提供的菜单就相当于把请求和处理进行了解耦,这就是命令模式的体现。命令模式(Command Patt

2021-02-07 00:13:10 67

原创 【设计模式】(十七)桥接模式(Bridge Pattern)

1. 桥接模式的介绍在现实生活中,某些类具有两个或多个维度的变化,如图形既可按形状分,又可按颜色分。如何设计类似于 Photoshop 这样的软件,能画不同形状和不同颜色的图形呢?如果用继承方式,m 种形状和 n 种颜色的图形就有 m×n 种,不但对应的子类很多,而且扩展困难。当然,这样的例子还有很多,如不同颜色和字体的文字、不同品牌和功率的汽车、不同性别和职业的男女、支持不同平台和不同文件格式的媒体播放器等。如果用桥接模式就能很好地解决这些问题。桥接模式(Bridge Pattern)是用于把

2021-02-06 22:55:28 57

原创 【设计模式】(十六)适配器模式(Adapter Pattern)

在现实生活中,经常出现两个对象因接口不兼容而不能在一起工作的实例,这时需要第三者进行适配。例如,讲中文的人同讲英文的人对话时需要一个翻译,用直流电的笔记本电脑接交流电源时需要一个电源适配器,用计算机访问照相机的 SD 内存卡时需要一个读卡器等。在软件设计中也可能出现:需要开发的具有某种业务功能的组件在现有的组件库中已经存在,但它们与当前系统的接口规范不兼容,如果重新开发这些组件成本又很高,这时用适配器模式能很好地解决这些问题。

2021-02-06 00:55:17 53

原创 【设计模式】(十五)建造者模式(Builder Pattern)

在软件开发过程中有时需要创建一个复杂的对象,这个复杂对象通常由多个子部件按一定的步骤组合而成。例如,计算机是由 CPU、主板、内存、硬盘、显卡、机箱、显示器、键盘、鼠标等部件组装而成的,采购员不可能自己去组装计算机,而是将计算机的配置要求告诉计算机销售公司,计算机销售公司安排技术人员去组装计算机,然后再交给要买计算机的采购员。生活中这样的例子很多,如游戏中的不同角色,其性别、个性、能力、脸型、体型、服装、发型等特性都有所差异;还有汽车中的方向盘、发动机、车架、轮胎等部件也多种多样;每封电子邮件的发件人、

2021-02-05 10:57:42 66 1

原创 【设计模式】(十四)访问者模式(Visitor Pattern)

1. 访问者模式的介绍在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。定义:将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问方式。它将对数据的操作与数据结构进行分离,是行为类模式中最复杂的一种模式。在现实生活中,有些集合对象存在多种不同的元素,且每种元

2021-02-04 02:45:39 77

原创 【设计模式】(十三)迭代器模式(Iterator Pattern)

1. 迭代器模式的介绍迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。迭代器模式属于行为型模式,主要是为了关注集合类对象和使用者之间的交互。通过抽象集合类的遍历行为,来成功解耦使用者和集合类对象。迭代器模式的设计思想就是抽象集合类对象的遍历行为,然后屏蔽集合类的内部存储结构和解决不同遍历行为的差异。通过迭代器模式我们可以在对集合进行不同形式的遍历时,最小化减少客户端和集合类的修改。

2021-02-04 01:58:57 127

原创 【设计模式】(十二)代理模式(Proxy Pattern)

在有些情况下,一个客户不能或者不想直接访问另一个对象,这时需要找一个中介帮忙完成某项任务,这个中介就是代理对象。例如,购买火车票不一定要去火车站买,可以通过 12306 网站或者去火车票代售点买。又如找女朋友、找保姆、找工作等都可以通过找中介完成。在软件设计中,使用代理模式的例子也很多,例如,要访问的远程对象比较大(如视频或大图像等),其下载要花很多时间。还有因为安全原因需要屏蔽客户端直接访问真实对象,如某单位的内部数据库等。1. 代理模式的介绍在代理模式(Proxy Pattern)中,一个类

2021-02-02 22:24:56 69

原创 【java】JDK动态代理实现原理

1. JDK动态代理的简单实现首先我们写个简单的代理实现:package com.siyi.proxypattern;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class JDKProxy { public static void main(String[] args) { Sub

2021-02-02 02:20:13 102

原创 【设计模式】(十一)享元模式(Flyweight Pattern)

在面向对象程序设计过程中,有时会面临要创建大量相同或相似对象实例的问题。创建那么多的对象将会耗费很多的系统资源,它是系统性能提高的一个瓶颈。例如,围棋和五子棋中的黑白棋子,图像中的坐标点或颜色,局域网中的路由器、交换机和集线器,教室里的桌子和凳子等。这些对象有很多相似的地方,如果能把它们相同的部分提取出来共享,则能节省大量的系统资源,这就是享元模式的产生背景。1. 享元模式的介绍享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式

2021-02-01 17:40:07 67

原创 【设计模式】(十)组合模式(Composite Pattern)

在现实生活中,存在很多“部分-整体”的关系,例如,大学中的部门与学院、总公司中的部门与分公司、学习用品中的书与书包、生活用品中的衣服与衣柜、以及厨房中的锅碗瓢盆等。在软件开发中也是这样,例如,文件系统中的文件与文件夹、窗体程序中的简单控件与容器控件等。对这些简单对象与复合对象的处理,如果用组合模式来实现会很方便。1. 组合模式介绍组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类

2021-02-01 16:22:51 72

原创 【设计模式】(九)观察者模式(Observer Pattern)

在现实世界中,许多对象并不是独立存在的,其中一个对象的行为发生改变可能会导致一个或者多个其他对象的行为也发生改变。例如,某种商品的物价上涨时会导致部分商家高兴,而消费者伤心;还有,当我们开车到交叉路口时,遇到红灯会停,遇到绿灯会行。这样的例子还有很多,例如,股票价格与股民、微信公众号与微信用户、气象局的天气预报与听众、小偷与警察等。在软件世界也是这样,例如,Excel 中的数据与折线图、饼状图、柱状图之间的关系;MVC 模式中的模型与视图的关系;事件模型中的事件源与事件处理者。所有这些,如果用观察者模式

2021-02-01 15:21:21 63

原创 【设计模式】(八)责任链模式(Chain of Responsibility Pattern)

在现实生活中,一个事件需要经过多个对象处理是很常见的场景。例如,采购审批流程、请假流程等。公司员工请假,可批假的领导有部门负责人、副总经理、总经理等,但每个领导能批准的天数不同,员工必须根据需要请假的天数去找不同的领导签名,也就是说员工必须记住每个领导的姓名、电话和地址等信息,这无疑增加了难度。在计算机软硬件中也有相关例子,如总线网中数据报传送,每台计算机根据目标地址是否同自己的地址相同来决定是否接收;还有异常处理中,处理程序根据异常的类型决定自己是否处理该异常;还有 Servlet项目中的Filt..

2021-02-01 13:13:31 60

原创 【设计模式】(七)装饰器模式(Decorator Pattern)

上班族大多都有睡懒觉的习惯,每天早上上班时间都很紧张,于是很多人为了多睡一会,就会用方便的方式解决早餐问题。有些人早餐可能会吃煎饼,煎饼中可以加鸡蛋,也可以加香肠,但是不管怎么“加码”,都还是一个煎饼。在现实生活中,常常需要对现有产品增加新的功能或美化其外观,如房子装修、相片加相框等,都是装饰器模式。在软件开发过程中,有时想用一些现存的组件。这些组件可能只是完成了一些核心功能。但在不改变其结构的情况下,可以动态地扩展其功能。所有这些都可以釆用装饰器模式来实现。当然,大家可能觉得通过继承也可以达到上面

2021-01-31 19:28:12 94 1

原创 【设计模式】(六)中介者模式(Mediator Pattern)

在现实生活中,常常会出现好多对象之间存在复杂的交互关系,这种交互关系常常是“网状结构”,它要求每个对象都必须知道它需要交互的对象。例如,每个人必须记住他(她)所有朋友的电话;而且,朋友中如果有人的电话修改了,他(她)必须让其他所有的朋友一起修改,这叫作“牵一发而动全身”,非常复杂。如果把这种“网状结构”改为“星形结构”的话,将大大降低它们之间的“耦合性”,这时只要找一个“中介者”就可以了。如前面所说的“每个人必须记住所有朋友电话”的问题,只要在网上建立一个每个朋友都可以访问的“通信录”就解决了。这样的例

2021-01-31 01:42:39 76

原创 【设计模式】(五)外观模式(Facade Pattern)

在现实生活中,常常存在办事较复杂的例子,如办房产证或注册一家公司,有时要同多个部门联系,这时要是有一个综合部门能解决一切手续问题就好了。软件设计也是这样,当一个系统的功能越来越强,子系统会越来越多,客户对系统的访问也变得越来越复杂。这时如果系统内部发生改变,客户端也要跟着改变,这违背了“开闭原则”,也违背了“迪米特法则”,所以有必要为多个子系统提供一个统一的接口,从而降低系统的耦合度,这就是外观模式的目标。1. 外观模式的介绍外观(Facade)模式又叫作门面模式,是一种通过为多个复杂的子系

2021-01-30 23:55:55 61 1

原创 【设计模式】(四)抽象工厂模式(Abstract Factory Pattern)

1. 抽象工厂模式的介绍工厂方法模式每个具体工厂类只完成单个实例的创建,所以它具有很好的可扩展性。但是在现实生活中,一个工厂只创建单个产品这样的例子很少,因为现在的工厂都多元化了,一个工厂创建一系列的产品,如果我们要设计这样的系统时,工厂方法模式显然在这里不适用,然后抽象工厂模式却可以很好地解决一系列产品创建的问题。在抽象工厂模式的结构图有以下角色:抽象产品类角色:为抽象工厂中的每种产品定义抽象接口对象,也可以这样说,有几种产品,就要声明几个抽象角色,每一个抽象产品角色和一种具体的产品相匹配。

2021-01-30 18:53:59 64

原创 【设计模式】(三)工厂模式(Factory Pattern)

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。1. 简单工厂模式1.1 简单工厂的介绍顾名思义,这个模式本身很简单,而且使用在业务较简单的情况下。它由三种角色组成(关系见下面的类图):工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。

2021-01-28 10:58:38 112 2

原创 【设计模式】(二)策略模式(Strategy Pattern)

1. 介绍在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能。如查找、排序等,一种常用的方法是硬编码(Hard Coding)在一个类中,如需要提供多种查找算法,可以将这些算法写到一个类中,在该类中提供多个方法,每一个方法对应一个具体的查找算法;当然也可以将这些查找算法封装在一个统一的方法中,通过if…else…或者case等条件判断语句来进行选择。这两种实现方法我们都可以称之为硬编码,如果需要增加一种新的查找算法,需要修

2021-01-27 01:21:21 122

原创 【Redis】Redis数据结构与对象(三)字典

本文基于Redis3.0。1. 字典介绍字典,又称为符号表(symbol table)、关联数组(associative array)或映射(map),是一种用于保存键值对(key-value pair)的抽象数据结构。在字典中,一个键(key)可以和一个值(value)进行关联(或者说将键映射为值),这些关联的键和值就称为键值对。字典中的每个键都是独一无二的,程序可以在字典中根据键查找与之关联的值,或者通过键来更新值,又或者根据键来删除整个键值对,等等。字典经常作为一种数据结构内置在很

2021-01-26 16:38:41 62

原创 【Redis】Redis数据结构与对象(二)链表

目录1. 链表介绍2. 链表和链表节点的实现3. 链表和链表节点的常用API1. 链表介绍链表提供了高效的节点重排能力,以及顺序性的节点访问方式,并且可以通过增删节点来灵活地调整链表的长度。作为一种常用数据结构,链表内置在很多高级的编程语言里面,因为Redis使用的C语言并没有内置这种数据结构,所以Redis构建了自己的链表实现。链表在Redis中的应用非常广泛,比如列表键的底层实现之一就是链表。当一个列表键包含了数量比较多的元素,又或者列表中包含的元素都是比较长的字符串时,Re

2021-01-26 14:07:32 37

原创 【设计模式】(一)单例模式(Singleton Pattern)

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

2021-01-26 01:20:27 103

原创 【Redis】Redis数据结构与对象(一)简单动态字符串(SDS)

目录1. C字符串与SDS2. SDS的定义3. SDS与C语言中字符串的区别3.1 常数复杂度获取字符串长度3.2杜绝缓冲区溢出3.3减少修改字符串时带来的内存重分配次数3.3.1空间预分配3.3.2惰性空间释放3.4二进制安全3.5兼容部分C字符串函数1. C字符串与SDS字符串是Redis中最为常见的数据存储类型,但是Redis没有直接使用C语言传统的字符串表示(以空字符结尾的字符数组,以下简称C字符串),而是自己构建了一种名为简单动态...

2021-01-21 01:35:53 73

原创 【Docker】Docker常用命令

【Docker】Docker常用命令1. 镜像相关命令1.1 查看镜像1.2 搜索镜像1.3 拉取镜像1.4 删除镜像2. 容器相关命令2.1 查看容器2.2 创建并启动容器2.2.1 交互式容器2.2.2 守护式容器2.3 停止或启动容器2.4 文件拷贝2.5 目录挂载2.6 查看容器ip2.7 删除容器1. 镜像相关命令镜像:Docker镜像是由文件系统叠加而成(是一种文件的存储形式);是docker中的核心概念,可以认为镜像就是对某些运行环境或者软件打的包,用户可以从docker仓库中下载基础镜

2021-01-07 16:41:58 89

原创 【Docker】Docker概述,以及安装

【Docker】Docker概述,以及安装1. Docker简介2. Docker容器与传统虚拟机比较2.1 传统虚拟机2.2 Docker容器3. Docker组成部分1. Docker简介Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。Docker 自开源后受到广泛的关注和讨论,以至

2021-01-06 22:42:36 76

原创 【RabbitMQ】springboot整合RabbitMQ

【RabbitMQ】springboot整合RabbitMQ1. 简介2. 生产者2.1 导入依赖2.2 配置RabbitMQ3. 消费者3.1 导入依赖3.2 配置处理类4. MessageConvert5. @RabbitListener 用法6. @Payload 与 @Headers7. 通过 @RabbitListener 注解声明 Binding8. @RabbitListener 和 @RabbitHandler 搭配使用9. Message 内容对象序列化与反序列化9.1 使用 Java

2021-01-04 13:59:07 66

原创 【ElasticSearch】java操作ElasticSearch 7.x

【ElasticSearch】java操作ElasticSearch 7.x1. 导入依赖2. 操作索引3. 操作文档3.1 新增文档3.2 删除文档3.3 修改文档3.4 批量增,删,改文档3.5 查询文档3.5.1 基本查询3.5.2 复杂查询3.5.3 分页查询3.5.4 查询结果高亮显示ElasticSearch7.x中不在建议使用transport,并且将在8.0彻底淘汰。所以我们需要使用7.x推荐使用的RestHighLevelClient来操作ElasticSearch。在springb

2020-12-27 23:38:33 1087

原创 【Spring Data ElasticSearch】操作ElasticSearch 7.x

【Spring Data ElasticSearch】操作ElasticSearch 7.x1. 基础准备1.1 导入依赖1.2 编写POJO1.3 配置application.yml1.4 编写Dao以及Service层1.5 创建表2. 通过Jsoup爬取JD商品信息并持久化到数据库3. 通过spring-data-elasticsearch实现CRUD3.1 新增(修改)文档3.2 删除文档3.3 查询文档3.3.1 基本查询3.3.2 自定义方法查询之前也写过ElasticSearch的博文,但是

2020-12-26 19:49:43 584 2

原创 【java】volatile的定义,实现原理

【java】volatile的定义,实现原理1. 并发编程中的三个基本概念1.1 原子性1.2 可见性1.3 有序性2. 相关术语定义3. volatile是如何来保证可见性的4. volatile的两条实现原则5. 通过追加字节优化性能volatile是Java提供的一种轻量级的同步机制。Java 语言包含两种内在的同步机制:同步代码块(或方法)和 volatile 变量,相比于synchronized(synchronized通常称为重量级锁),volatile更轻量级,因为它不会引起线程上下文的切换

2020-12-22 10:55:08 100

原创 【java】并发编程时需要注意的问题 --- 上下文切换,死锁,资源限制

java并发编程的艺术【1】并发编程时需要注意的问题1. 上下文切换1.1 什么是上下文切换1.2 上下文切换的过程1.3 多线程不一定快1.4 如何减少上下文切换2. 死锁2.1 什么是死锁2.2 如何避免死锁3. 资源限制3.1 什么是资源限制3.2 资源限制引发的问题3.3 如何解决资源限制并发编程的目的是为了让程序运行得更快,但是,并不是启动更多的线程就能让程序最大限度地并发执行。在进行并发编程时,如果希望通过多线程执行任务让程序运行得更快,会面临非常多的挑战。常见的问题有:上下文切换死锁

2020-12-22 01:12:38 102

原创 【RabbitMQ】基础五:通配符模式(Topics)

【RabbitMQ】基础五:通配符模式(Topics)1. 模式说明1. 模式说明Topic 类型与 Direct 相比,都是可以根据 RoutingKey 把消息路由到不同的队列。只不过 Topic 类型 Exchange 可以让队列在绑定 Routing key 的时候使用通配符!Routingkey 一般都是有一个或多个单词组成,多个单词之间以”.”分割,例如: item.insert通配符规则:# :匹配一个或多个词* :匹配不多不少恰好1个词举例:item.# :能够匹配 item

2020-12-21 16:56:27 159

原创 【RabbitMQ】基础四:路由模式(Routing)

【RabbitMQ】基础四:路由模式(Routing)1. 路由模式说明2. 代码示例2.1 生产者2.2 消费者12.3 消费者22.4 测试3. 总结1. 路由模式说明路由模式特点:队列与交换机的绑定,不能是任意绑定了,而是要指定一个 RoutingKey (路由key)消息的发送方在 向 Exchange发送消息时,也必须指定消息的 RoutingKey 。Exchange不再把消息交给每一个绑定的队列,而是根据消息的 Routing Key 进行判断,只有队列的Routingkey 与消息

2020-12-21 15:17:40 180

原创 【RabbitMQ】基础三:发布与订阅模式(Publish/Subscribe)

【RabbitMQ】基础三:发布与订阅模式(Publish/Subscribe)1. 订阅模式2. 发布与订阅模式说明3. 代码示例3.1 生产者3.2 消费者3.3 测试4. 总结1. 订阅模式订阅模式示例图:前面2个案例中,只有3个角色:P:生产者,也就是要发送消息的程序C:消费者:消息的接受者,会一直等待消息到来。queue:消息队列,图中红色部分而在订阅模型中,多了一个exchange角色,而且过程略有变化:P:生产者,也就是要发送消息的程序,但是不再发送到队列中,而是发给X

2020-12-16 17:40:14 173

原创 【RabbitMQ】基础二:工作队列模式(Work queues)

【RabbitMQ】二、工作队列模式(Work queues)1. 模式说明2. 示例代码2.1 生产者2.2 消费者2.3 测试3. 小结1. 模式说明Work Queues 与入门程序的 简单模式 相比,多了一个或一些消费端,多个消费端共同消费同一个队列中的消息。应用场景:对于 任务过重或任务较多情况使用工作队列可以提高任务处理的速度。在work模式中可以分为两种模式,一种是两个消费者平均消费队列中的消息,即使他们的消费能力是不一样的,这种似乎不太符合实际的情况。另一种是能者多劳模式,处理消息

2020-12-16 16:42:26 76

原创 【RabbitMQ】基础一:“Hello World!“

【RabbitMQ】一、"Hello World!"1. 简介2. 示例2.1 生产者2.2 消费者2.3 总结1. 简介RabbitMQ是消息代理:它接受并转发消息。您可以将其视为邮局:将您要发布的邮件放在邮箱中时,可以确保Mailperson先生或女士最终将邮件传递给收件人。以此类推,RabbitMQ是一个邮箱,一个邮局和一个邮递员。RabbitMQ与邮局之间的主要区别在于,它不处理纸张,而是接收,存储和转发数据消息。RabbitMQ和一般的消息传递使用一些术语。生产仅意味着发送。队列是Ra

2020-12-16 15:11:14 71

算法竞赛入门经典 第2版刘汝佳+高清版PDF

本书是一本算法竞赛的入门与提高教材,把C/C 语言、算法和解题有机地结合在一起,淡化理论,注重学习方法和实践技巧。全书内容分为12章,括程序设计入门、循环结构程序设计、数组和字符串、函数和递归、C 与STL入门、数据结构基础、暴力求解法、高效算法设计、动态规划初步、数学概念与方法、图论模型与算法、专题等内容,覆盖了算法竞赛入门和提高所需的主要知识点,并含有大量例题和习题。书中的代码规范、简洁、易懂,不仅能帮助读者理解算法原理,还能教会读者很多实用的编程技巧;书中含的各种开发、测试和调试技巧也是传统的语言、算法类书籍中难以见到的。   本书可作为全国青少年信息学奥林匹克联赛(NOIP)复赛教材、全国青少年信息学奥林匹克竞赛(NOI)和ACM大学生程序设计竞赛(ACM/ICPC)的训练资料,也可作为IT工程师与科研人员的参考用书。

2019-02-20

shardingsphere_docs_cn.pdf

shardingsphere的文档

2020-12-22

C语言程序设计(第四版)+谭浩强著高清晰版

C语言程序设计(第四版)+谭浩强著高清版,为了使用C语言编写程序,必须了解C语言,并且熟练的使用C语言,本书将由浅入深的介绍怎么阅读C语言程序和使用C语言编写程序

2019-02-09

C Primer Plus 第6版中文高清版

畅销30余年的C语言入门教程,近百万程序员的C语言启蒙教程,技术大牛案头常备的工具书,新版第六版全新升级,针对C11标准进行全面升级。

2019-02-20

空空如也

空空如也

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

TA关注的人 TA的粉丝

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