自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

原创 Rocket单机启动

下载官方下载https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.9.2/rocketmq-all-4.9.2-source-release.zip上传到Linux服务器unzip rocketmq-all-4.9.2-source-release.zipcd rocketmq-all-4.9.2/mvn -Prelease-all -DskipTests clean install -Ucd distribution/target/roc

2022-02-22 10:59:45 1568

原创 设计模式之责任链模式(完结)

基本介绍为请求创建一个接收者对象的链,这种模式对请求的发送者和接收者进行解耦责任链模式通常每个接收者都包含对另一个接收者的引用,如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依次类推属于行为型模式责任链模式使多个对象都要机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止角色及职责Handler:抽象的处理者,定义了一个处理请求的接口,同时含有另外HandlerConcreteHandler:

2021-09-26 22:10:09 80

原创 设计模式之策略模式

基本介绍策略模式中,定义算法蔟,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户这算法体系了几个设计原则,第一:把变化的代码从不变的代码中分离出来;第二:针对接口编程而不是具体类(定义了策略接口),第三:多用组合/聚合,少用继承(客户通过组合方式使用策略)说明:客户context,有对应的策略接口,至于需要使用到那个策略,可以在构造器中指定代码示例策略接口public interface FlyBehavior { void fly();}具体策略

2021-09-26 00:37:51 94

原创 设计模式之状态模式

基本介绍主要是用来解决对象在多种状态转换时,需要对外输出不同的行为的问题,状态和行为是一一对应的,状态之间是可以相互转换的当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类角色及职责State:是状态接口角色,封装与Context的一个特定接口相关行为ConcreteState:实现State接口,是具体的状态角色,每个子类实现一个于Context的一个状态相关行为。Context:上下文对象,聚合State,用于维护ConcreteState的实例,这个实例定义当前

2021-09-26 00:33:01 66

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

基本介绍在编译原理中,一个算术表达式通过词法分析器形成词法单元,而后这些词法单元在通过语法分析器构建语法分析树,最终形成一颗抽象的语法分析树,这里的词法分析器和语法分析器都可以看做是解释器解释器模式:是指给定一个语言(表达式),定义它的文法的一种表示,并定义一个解释器,使用该解释器来解释语言中的句子(表达式)应用场景应用可以将一个需要解释执行的语言中的句子表示为一个抽象语法树一些重复出现的问题可以用一种简单的语言来表达一个简单语法需要解释的场景这样的例子还有:编译器,运算表达式计算,正

2021-09-25 21:38:22 43

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

当一个对象就对应一个保存对象状态的对象,当对象很多时,不利于管理,开销也很大,也就是说,简单的做个备份,new出另外一个对象,需要时在把备份的数据放到新对象中,这就暴露了对象内部的细节,解决方案就是使用备忘录模式基本介绍备忘录模式在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态可以这样理解:现实生活中的备忘录就是用来记录某些要去做的事情,或者是记录已经达到的共同意见的事情,以防忘记了。而在软件层面,备忘录模式有着相同的含义,备忘录对

2021-09-25 13:53:50 94

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

基本介绍当多个对象状态发生改变时,相互之间的调用关系会比较复杂各个对象彼此联系,你中有我,我中有你,不利于松耦合用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互属于行为型模式,使代码易于维护比如MVC模式,C是M和V的中介者,在前后端交互起到了中间人的作用角色及职责Mediator:抽象中介者,定义了同事到中介者对象的接口Colleague:抽象的同事类ConcreteMediator:具体的中介者对象,实

2021-09-24 01:08:27 49

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

原理对象之间多对一依赖的一种设计方案,被依赖的对象为Subject,依赖的对象为Observer,Subject通知Observer编号代码示例天气变化,通知到第三方Observer:观察者接口public interface Observer { void update(float temperature,float pressure,float humidity);}Subject:第三方接入接口public interface Subject { void regi

2021-09-22 22:36:23 38

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

基本介绍是常用的设计模式,属性行为型模式如果我们的集合元素是用不同的方式实现的,有数组,还有java的集合类,或者还有其他方式,当客户端要遍历这些集合元素的时候就要使用多种遍历方式,而且还会暴露元素的内部结构,可以考虑使用迭代器模式解决迭代器模式,提供一种遍历集合元素的统一接口,用一致的方法遍历集合元素,不需要知道集合对象的底层表示,即:不暴露其内部结构角色及职责Iterator:迭代器接口,是系统提供,含nextNext,next,removeConcreteIterator:具体的迭代

2021-09-21 23:23:19 89

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

基本介绍访问者模式:封装了一些作用于某种数据结构的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作主要将数据结构与数据操作分离,解决数据结构和操作耦合性问题访问者模式的基本工作原理是:在被访问的类里面加一个对外提供接待访问者的接口应用场景:需要对一个对象结构中的对象进行很多不同操作(这些操作彼此没有关联),同时需要避免让这些操作“污染”这些对象的类,可以选用访问者模式解决角色及职责Visitor:是抽象访问者:为该对象结构中的ConcreteElement的每一个类

2021-09-21 21:50:47 57

原创 设计模式之命令模式

基本介绍在软件设计模式中,我们经常需要向某个对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指定具体的请求接收者即可,此时,使用命令模式来进行设计命令模式使的请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活,实现解耦在命令模式中会将一个请求封装成一个对象,以便使用不同参数来表示不同的请求,同时命令模式也支持可撤销的操作通俗易懂的理解,将军发布命令,士兵去执行,其中有几个角色:命令发布者,命令的具体执行者,命令Invoker是调用者

2021-09-21 14:31:27 51

原创 设计模式之模板方法模式

基本介绍模板方法模式又叫模板模式,在一个抽象类公开定义了执行它的模板。它的子类可以按需要重写方法实现,但调用将以抽象类定义的方式进行简单说,模板方非模式定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使的子类可以不改变一个算法的结果,就可以重定义该算法的某些特定步骤这种设计模式属于行为型模式角色及其职责AbstractClass 抽象类,类中实现了模板方法,定义了算法的骨架,具体子类需要去实现其他的抽象方法ConcreteClass实现了抽象方法,以完成算法中特定子类的步骤代码示

2021-09-21 01:15:22 236

原创 设计模式之代理模式

基本介绍为一个对象提供一个替身,以控制对这个对象的访问,即通过代理对象访问目标对象,这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即控制目标对象的功能被代理的对象可以是远程对象。创建开销大的对象或需要安全控制的对象代理模式有不同的形式,主要有三种:静态代理,动态代理和Cglib代理静态代理基本介绍在使用时,需要定义接口或父类,被代理对象(即目标对象)与代理对象一起实现相同的接口或者是继承相同的父类示例代码被代理类接口public interface ITeacherD

2021-09-20 23:02:09 47

原创 设计模式之享元模式

基本介绍也叫蝇量模式:运用共享技术有效地支持大量细粒度的对象常用于系统底层开发,解决系统的性能问题。像数据库连接池,里面都是创建好的连接对象,在这些连接对象中有我们需要的则直接拿来用,避免重复创建,如果没有我们需要的,则创建一个享元模式能够解决重复对象的内存浪费的问题,当系统中有大量相似对象,需要缓存池时。不需要总是创建新对象,可以从缓冲池里拿,这样可以降低系统内存,同时提高效率享元模式经典的应用场景就是池技术了,String常量池,数据库连接池,缓存池等等都是享元模式的应用,享元模式是池技术的重

2021-09-19 22:10:13 137

原创 设计模式之外观模式

基本介绍又称过程模式:外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这个一子系统更加容易使用外观模式通过定义一个一致的接口,用以屏蔽内部子系统的细节,使的调用端只需跟这个接口发生调用,而无需关心这个子系统的内部细节角色分析外观类(Facade):为调用端提供了统一的调用接口,外观类知道哪些子系统负责处理请求,从而将调用端的请求代理给适当子系统对象调用者:外观接口的调用者子系统的集合:指模块或者子系统:处理Facade对象指派的任务,他是功能的实际提供

2021-09-19 16:48:11 48

原创 设计模式之组合模式

基本介绍又叫部分整体模式,它创建了对象组的树形结构,将对象组合成树形结构以表示“整体-部分”的层次关系组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式组合模式使得用户对单个对象和组合对象的访问具有一致性,即:组合能让客户以一致的方式处理个别对象以及组合对象组合模式角色及职责Component:这是组合中的一个对象声明接口,在适当的情况下实现所有类共用的接口默认行为,用于访问和管理Component子部件,Component可以是抽象类或者接口Le

2021-09-17 23:45:55 61

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

基本介绍装饰者模式:动态的将新功能附加到对象上,在对象功能扩展方面,它比继承更具有弹性,装饰者模式也体现了开闭原则结构装饰者模式就像打包一个快点主体:被装饰者包装:装饰者模拟场景:咖啡,加配料分几个部分1.Drink:抽象类,包含描述和价格,加上计算价格的抽象方法2.Drink抽象实现类:被装饰者3.Decorator:实现了Drink,并且组合了Drink,装饰者Drink:public abstract class Drink { public String des

2021-09-16 23:47:07 46

原创 设计模式之桥接模式

基本介绍桥接模式是指:将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变是一种结构型设计模式基于类的最小设计原则,通过使用封装、聚合及继承等行为让不同的类承担不同的职责。它的主要特点是把抽象与行为实现分离开来,从而可以保持各部分的独立性以及应对他们的功能扩展角色:Client:桥接模式的调用者抽象类(Abstraction):维护了Implementor/即他的实现类,二者是一个聚合的关系,Abstraction 充当了桥接类RefinedAbstraction:是Abstrac

2021-09-14 23:26:47 83

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

基本介绍适配器模式:将某个类的接口转换成客户端期望的另一个接口表示:主要目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器适配器属于结构型模式主要分三类:类适配器模式,对象适配器模式,接口适配器模式适配器工作原理适配器模式:将一个类的接口转换成另一种接口,让原本接口不兼容的类可以兼容从用户的角度看不到被适配者,是解耦用户调用适配器转换出来的目标接口方法,适配器再调用被适配者的相关接口方法用户收到反馈接口,感觉只是和目标接口交互类适配器注意事项和细节

2021-09-14 00:34:59 50

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

基本介绍又称生成器模式,是一种对象构建模式,他可以将复杂的建造过程抽象出来(抽象类别),使这个抽象工厂的不同实现方法可以构造出不同表示(属性)的对象建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要指定内部的具体构建过程四个角色Product(产品角色):一个具体的产品对象Builder(抽象建造者):创建一个Product对象的各个部件指定的接口ConcreteBuilder(具体建造者):实现接口,构建和装配各个部件Direct

2021-09-12 22:59:03 47

原创 设计模式之原型模式

原型模式基本介绍原型模式是指:用原型实例指定创建对象的种类,并且提供拷贝这些原型,创建新的对象是一种创建型设计模式,允许一个对象再创建另外一个可定制的对象,无需知道如何创建的细节工作原理:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建,接对象.clone()代码:public class Sheep implements Cloneable{ private String name; private int age;

2021-09-12 20:53:17 45

原创 深拷贝和浅拷贝理解和代码实践

基本介绍浅拷贝:对于基本数据类型和字符串只是将值进行复制,对于引用类型只是指向同一片内存地址,所以在一个对象方式变化时,另外一个也会发生变化深拷贝:重新创建新的内存地址,存储对应的值代码浅拷贝ShallowTargetClass :目标对象ShallowClass:拷贝对象Client:客户端操作public class ShallowTargetClass implements Serializable,Cloneable { private String className;

2021-09-12 19:38:41 58

原创 设计模式之工厂模式

工厂模式工厂模式分为三种:简单工厂模式,工厂方法模式,抽象工厂模式我们模拟一个披萨的场景,不同口味的披萨传统模式首先创建一个披萨的抽象类,因为原材料的不同,做成一个抽象披萨,由具体的子类实现public abstract class Pizza { protected String name; /** * 准备原材料,做成抽象,因为他不一样 */ public abstract void prepare(); public void back

2021-09-12 00:37:39 37

原创 设计模式之单例模式

基本介绍什么是单例模式?在正常情况下,我们创建对象是使用new来进行创建,这样创建会产生多个实例,使用单例模式,类从始至终只能有一个实例,这样能很大程度的减少系统资源的浪费。所以在单例模式下,我们是不会使用new来创建对象的,所以我们会将构造方法私有化单例模式由多种方式1.饿汉式2.懒汉式3.双重检查4.静态内部类5.枚举饿汉式饿汉式是单例模式的一种,他的主要特点是写法简单,在类装载的时候就创建了对象,避免了线程同步的问题,他有两种写法写法1:public class Singlet

2021-09-11 16:50:57 44

原创 Collection集合分析之LinkedList

LinkedList继承AbstractSequentialList实现List,Dueue,Cloneable,Serializable由链表实现三个变量transient int size = 0;transient Node<E> first;transient Node<E> last;size:节点个数first:头节点last:尾节点两个构造函数 public LinkedList() { } public LinkedList(Col

2021-06-06 17:28:45 134

原创 Collection集合分析之ArrayList

ArrayList基础自AbstractList实现了List,RandomAccess,Cloneable,Serializable接口四常量 private static final int DEFAULT_CAPACITY = 10; private static final Object[] EMPTY_ELEMENTDATA = {}; private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA

2021-06-05 23:38:15 130

原创 Collection集合分析(1)

前言集合是我们在日常开发中经常使用,它位于java.util包,顾名思义,他是java的工具类,帮助我们完成各种操作,他充分利用了java的继承来实现他的功能。以下是我画的一个集合的一个继承关系图,主要牵涉到是ArrayList,LinkedList,HashSet,TreeSet这几个集合类,我在这里也是通过这几个集合类来画他的基础关系,真实情况下,他的继承关系还要复杂的多。Collection在这一章中,我主要要说的就是这个接口Collection,他定义了集合必须要有的规范,我们可以通过IDE

2021-04-23 01:08:42 87

原创 StringBuffer方法分析

类结构

2021-04-21 14:44:21 150

原创 Activiti初始化创建表提示表不存在

问题出现背景在刚接触activiti时,使用ProcessEngineConfiguration的方式进行配置构建ProcessEngine对象时创建表是没问题的,但是在使用spring整合Activiti时,他出现了一个异常提示表不存在,一般情况下,spring启动时,创建ProcessEngine对象,如果表不存在的,它会出现自动创建表,但是这里直接提示表不存在就感觉很奇怪。问题解决方法在数据库url后面拼接nullCatalogMeansCurrent=true...

2021-04-13 21:32:25 524 1

原创 Springboot整合Redis

介绍springboot整合redis需要的是spring的另外一个项目 spring data ;他使用的是RedisTemplate这个类来进行操作导入依赖<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifact

2021-04-12 22:44:53 151 1

原创 String常用方法解析

String的常用方法解析String的方法很多,这里只列出常用的几种方法进行查看解析,研究底层 jdk的实现和他的代码编写。startsWith 和 endsWithstartsWith主要是为了判断该String a 对象是是 String b开头。例如String a = "ABCD";String b = "AB";System.out.println(a.startsWith(b));返回的一定是一个true,startsWith 还有一个重写的方法,加了一个int 参数,

2021-04-04 22:44:13 207 2

原创 String的创建方式

String概述String类型是java的一个最基本的对象,他底层是用char[]实现,是一个不可继承类,即final类。String是我们平时使用最多的,所以我们要深入理解String类他的实现和底层。前置:value是字符数组,而且是一个常量不可变,。hash 默认是0构造函数无参构造String类型的无参构造,他是将空字符串给了char[]public String() { this.value = "".value;}值得注意的是String new与不new的区别是什

2021-04-03 23:39:40 1315

原创 JUC理解(5)

读写锁ReadWriteLock我们经常会做种操作,在我们对数据进行读的时候,希望大家都能读,而我们对数据进行写的时候,我们希望只能有一个人写。这就是读写锁。介绍ReadWriteLock维护一对关联的locks ,一个用于只读操作,一个用于写入。 read lock可以由多个阅读器线程同时进行,只要没有作者。 write lock是独家的。所有ReadWriteLock实现必须保证的存储器同步效应writeLock操作(如在指定Lock接口)也保持相对于所述相关联的readLock 。 也就是说,

2020-12-27 11:31:13 106 1

原创 二叉排序树理解

什么是二叉树二叉树(Binary tree)是树型结构中一个非常重要的类型,许多问题抽象出来都是树的形式,二叉树是n个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成。当集合为空时,称该二叉树为空二叉树。在二叉树中,一个元素也称作一个结点。什么是二叉排序树二叉排序树,是普通二叉树的有序形式特点:1.如果左子树不为空,左子树的所有节点都比根节点要小2.如果右子树不为空,右子树的所有节点都比根节点要大3.左右子树也分别为二叉排序

2020-12-26 17:44:37 438

原创 JUC理解(4)

辅助类JUC包下,三个辅助类, CountDownLatch, CyclicBarrier, SemaphoreCountDownLatch作用:允许一个或多个线程等待直到在其他线程中执行的一组操作完成的同步辅助。首先看看这个辅助类,从英文字母上理解,这就是一个减法,这个类只有一个有参构造器,就能得知,这就是个待减数值,根据官方的解释:CountDownLatch用给定的计数初始化。 await方法阻塞,直到由于countDown()方法的调用而导致当前计数达到零,之后所有等待线程被释放,并且任

2020-12-26 16:56:31 96

原创 JUC理解(3)

Callable的使用Callable 是JUC中存在的一个创建线程的接口,Callable接口类似于Runnable ,因为它们都是为其实例可能由另一个线程执行的类设计的。Runable和Callable的不同之处1、Runable没有返回值,Callable会定义一个泛型,即他的返回结果类型2、Runable没有抛出异常,而Callable在计算结果的时候,如果无法得出,会抛出异常3、方法不同,Runable使用的是run() 方法,而Callable定义的则是call方法怎么使用

2020-12-26 11:50:23 121

原创 JUC理解(2)

集合在高并发情况下,我们熟知的ArrayList,HashMap等集合类都是现场不安全的,代码测试: public static void main(String[] args) { List<String> list = new ArrayList<>(); for (int i=0;i <= 10; i++){ new Thread(()->{ list.add(UUID.rand.

2020-12-25 23:43:56 76

原创 JUC理解(1)

什么是JUCJUC是Java一个并发工具包,即java.unit.concurrent并发和并行说起并发就不可避免的说下并行,有些人可能还不清楚并发和并行在我看来并发:多线程操作同一个资源并行:多个线程一起跑在CPU的角度看并发:CPU一核,模拟出多条线程,快速交替并行:CPU多核,多个线程可以同时执行;线程池并发编程的本质充分利用CPU的资源线程和进程的区别进程:一个程序,程序的集合,一个进程往往包含多个线程(至少包含一个)线程:比如我们开启一个Typora,我们在

2020-12-25 20:35:31 144

空空如也

空空如也

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

TA关注的人

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