自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(97)
  • 资源 (7)
  • 收藏
  • 关注

原创 伪分布式Kafka环境搭建与SpringBoot集成

kafka伪分布式环境搭建、开启SASL认证、SpringBoot与kafka集成

2022-12-08 16:02:21 620 1

原创 云主机快速搭建开发环境

快速搭建开发环境

2022-10-25 11:33:55 697

原创 分支合并框架

概念Fork/Join框架是把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果。示例实现一个算法,根据输入整数开始值和结束值,求和。求和过程,如果超过10个数就拆分成子任务计算,最后相加。package com.mine.juc.forkjoin;import java.util.concurrent.ForkJoinPool;import java.util.concurrent.ForkJoinTask;import java.util.concurrent.Recurs

2022-05-22 00:32:32 201

原创 java线程池

几种常见的线程池Executors.newFixedThreadPool:固定线程大小的线程池,队列为LinkedBlockingQueue。Executors.newSingleThreadExecutor:单个线程的线程池,队列为LinkedBlockingQueue。Executors.newCachedThreadPool:无限大小的线程池,队列为SynchronousQueue,只能有一个元素。Executors.newScheduledThreadPool:无限大小的线程池,队列为De

2022-05-22 00:31:14 119

原创 BlockingQueue

概念BlockingQueue 通常用于一个线程生产对象,而另外一个线程消费这些对象的场景。一个生产线程往阻塞队列中放入元数,如果阻塞队列放满了,放入元数操作,生产会进入阻塞状态,直到有消费线程拿走一个元数,生产线程才能放入元数;同理,一个消费线程从阻塞队列获取元数,如果阻塞队列没有元素了,消费线程也会进入阻塞状态,直到有生产线程放入元素,消费线程才能获取到元素。BlockingDequeBlockingDeque 类是一个双端队列,在不能够插入元素时,它将阻塞住试图插入元素的线程;在不能够抽取元

2022-05-22 00:27:45 141

原创 CAS介绍

i++多线程问题package com.mine.juc.cas;public class IncrementDemo { private static int temp = 1; public static void main(String[] args) { System.out.println("=====i++多线程问题====="); new Thread(new Runnable() { public void run() { for (int i = 0;

2022-05-22 00:16:44 134

原创 多线程辅助类

CountDownLatch允许一个或多个线程等待直到在其他线程中执行的一组操作完成的同步辅助。用给定的计数初始化。 await方法阻塞,直到由于countDown()方法的调用而导致当前计数达到零,之后所有等待线程被释放,并且任何后续的await 调用立即返回。 这是一个一次性的现象 - 计数无法重置。 如果您需要重置计数的版本,请考虑使用CyclicBarrier 。班长锁门问题package com.mine.juc.tools;import java.util.concurrent.Co

2022-05-22 00:12:51 130

原创 集合的线程安全问题

ArrayList的线程安全问题代码package com.mine.juc.collection;import java.util.ArrayList;import java.util.List;import java.util.UUID;public class ArrayListDemo { public static void main(String[] args) { final List<String> list = new ArrayList<Stri

2022-05-22 00:08:18 102

原创 多线程通信

多线程通信方式Object的wait和notify、notifyallReentrantLock中Condition的await和signal、signalAll三个线程轮流打印AA、BB和CC实现方式1package com.mine.juc.multithreadcommunication;class Resource { private int flag = 1; public synchronized void printAA(int num) throws Interrup

2022-05-22 00:03:08 63

原创 java中的相关锁

1、两种常见锁synchronized和ReentrantLock的区别synchronized关键字解决的是多个线程之间访问资源的同步性,synchronized关键字可以保证被它修饰的⽅法或者代码块在任意时刻只能有⼀个线程执⾏。ReentrantLock是Java并发包中提供的一个可重入的互斥锁。可重入性:所谓的可重入性,就是可以支持一个线程对锁的重复获取,原生的synchronized就具有可重入性,一个用synchronized修饰的递归方法,当线程在执行期间,它是可以反复获取到锁的,而不会

2022-05-22 00:01:18 187

原创 多线程概念

线程的生命周期状态NEW:初始状态,线程被创建,但是还没有调用start方法。RUNNABLE:运行状态,Java线程中把操作系统中的就绪(READY)和运行(RUNNING)两种状态笼统的称作运行中。BLOCKED:阻塞状态,表示线程阻塞于锁。WAITING:等待状态,表示线程进入等待状态,进入该状态表示当前线程需要等待其他线程做出一些特定动作。TIME_WAITING:超时等待状态,该状态不同于WAITING,他是可以在指定时间自行返回的。TERMINATED:终止状态,表示当前线程已经

2022-05-21 23:51:30 129

原创 职责链模式

1、概念为了避免请求发送者与多个请求处理者耦合在一起,于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。优点:降低了对象之间的耦合度。该模式使得一个对象无须知道到底是哪一个对象处理其请求以及链的结构,发送者和接收者也无须拥有对方的明确信息。增强了系统的可扩展性。可以根据需要增加新的请求处理类,满足开闭原则。增强了给对象指派职责的灵活性。当工作流程发生变化,可以动态地改变链内的成员或者调动它们的次序,也可动态地新增或

2022-05-02 10:07:30 3793

原创 策略设计模式

1、概念该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。优点:多重条件语句不易维护,而使用策略模式可以避免使用多重条件语句,如 if…else 语句、switch…case 语句。策略模式提供了一系列的可供重用的算法族,恰当使用继承可以把算法族的公共代码转移到父类里面,从而避免重复的代码。策略模式可以提供相同行为的不同实

2022-05-02 10:07:07 117

原创 状态设计模式

1、概念对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。优点:结构清晰,状态模式将与特定状态相关的行为局部化到一个状态中,并且将不同状态的行为分割开来,满足“单一职责原则”。将状态转换显示化,减少对象间的相互依赖。将不同的状态引入独立的对象中会使得状态转换变得更加明确,且减少对象间的相互依赖。状态类职责明确,有利于程序的扩展。通过定义新的子类很容易地增加新的状态和转换。缺点:状态模式的使用必然会增加系统的类与对象的个数。状态模式

2022-05-02 10:06:42 173

原创 解释器模式

1、概念给分析对象定义一个语言,并定义该语言的文法表示,再设计一个解析器来解释语言中的句子。也就是说,用编译语言的方式来分析应用中的实例。这种模式实现了文法表达式处理的接口,该接口解释一个特定的上下文。优点:扩展性好。由于在解释器模式中使用类来表示语言的文法规则,因此可以通过继承等机制来改变或扩展文法。容易实现。在语法树中的每个表达式节点类都是相似的,所以实现其文法较为容易。缺点:执行效率较低。解释器模式中通常使用大量的循环和递归调用,当要解释的句子较复杂时,其运行速度很慢,且代码的调试过

2022-05-01 21:47:30 238

原创 备忘录模式

1、概念在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。该模式又叫快照模式。优点:提供了一种可以恢复状态的机制。当用户需要时能够比较方便地将数据恢复到某个历史的状态。实现了内部状态的封装。除了创建它的发起人之外,其他对象都不能够访问这些状态信息。简化了发起人类。发起人不需要管理和保存其内部状态的各个备份,所有状态信息都保存在备忘录中,并由管理者进行管理,这符合单一职责原则。缺点:资源消耗大。如果要保存的内部状态信

2022-05-01 21:39:57 62

原创 中介者模式

1、概念定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式又叫调停模式,它是迪米特法则的典型应用。优点:类之间各司其职,符合迪米特法则。降低了对象之间的耦合性,使得对象易于独立地被复用。将对象间的一对多关联转变为一对一的关联,提高系统的灵活性,使得系统易于维护和扩展。缺点:中介者模式将原本多个对象直接的相互依赖变成了中介者和多个同事类的依赖关系。当同事类越多时,中介者就会越臃肿,变得复杂且难以维护。2、实现中介者模式包含

2022-05-01 21:12:28 80

原创 观察者模式

1、概念指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式,它是对象行为型模式。参考JDK代码Observer、Observable。优点:降低了目标与观察者之间的耦合关系,两者之间是抽象耦合关系。符合依赖倒置原则。目标与观察者之间建立了一套触发机制。缺点:目标与观察者之间的依赖关系并没有完全解除,而且有可能出现循环引用。当观察者对象很多时,通知的发布会花费很多时间,影响程序的效率。

2022-05-01 21:08:26 77

原创 迭代器模式

1、概念提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。迭代器模式是一种对象行为型模式。迭代器模式是通过将聚合对象的遍历行为分离出来,抽象成迭代器类来实现的,其目的是在不暴露聚合对象的内部结构的情况下,让外部代码透明地访问聚合的内部数据。在日常开发中,我们几乎不会自己写迭代器。除非需要定制一个自己实现的数据结构对应的迭代器,否则,开源框架提供的 API 完全够用。优点:访问一个聚合对象的内容而无须暴露它的内部表示。遍历任务交由迭代器完成,这简化了聚合类。它支持以不同

2022-05-01 21:05:10 106

原创 访问者模式

1、概念将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问方式。它将对数据的操作与数据结构进行分离,是行为类模式中最复杂的一种模式。优点:扩展性好,能够在不修改对象结构中的元素的情况下,为对象结构中的元素添加新的功能。复用性好,可以通过访问者来定义整个对象结构通用的功能,从而提高系统的复用程度。灵活性好,访问者模式将数据结构与作用于结构上的操作解耦,使得操作集合可相对自由地演化而不影响系统的

2022-05-01 21:01:06 149

原创 命令设计模式

1、概念将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。优点:通过引入中间件(抽象接口)降低系统的耦合度。扩展性良好,增加或删除命令非常方便。采用命令模式增加与删除命令不会影响其他类,且满足“开闭原则”。可以实现宏命令。命令模式可以与组合模式结合,将多个命令装配成一个组合命令,即宏命令。方便实现 Undo 和 Redo 操作。命令模式可以与后面介绍的备忘录模式结合,实现命令的撤销与恢复。可

2022-05-01 20:53:37 477

原创 模版方法模式

1、概念定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。它是一种类行为型模式。优点:它封装了不变部分,扩展可变部分。它把认为是不变部分的算法封装到父类中实现,而把可变部分算法由子类继承实现,便于子类继续扩展。它在父类中提取了公共的部分代码,便于代码复用。部分方法是由子类实现的,因此子类可以通过扩展方式增加相应的功能,符合开闭原则。缺点:对每个不同的实现都需要定义一个子类,这会导致类的个数增加,系统更加庞大,设计也更

2022-05-01 20:48:42 134

原创 代理设计模式

1、概念由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。优点:代理模式在客户端与目标对象之间起到一个中介作用和保护目标对象的作用;代理对象可以扩展目标对象的功能;代理模式能将客户端与目标对象分离,在一定程度上降低了系统的耦合度,增加了程序的可扩展性;缺点:代理模式会造成系统设计中类的数量增加在客户端和目标对象之间增加一个代理对象,会造成请求处理速度变慢;增加了系统的复杂度;2、实现2.

2022-05-01 20:44:41 145

原创 享元设计模式

1、概念运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似类的开销,从而提高系统资源的利用率。享元模式把对象的信息分为两个部分:内部状态和外部状态。内部状态指对象共享出来的信息,存储在享元信息内部,并且不回随环境的改变而改变;外部状态指对象得以依赖的一个标记,随环境的改变而改变,不可共享。优点:相同对象只要保存一份,这降低了系统中对象的数量,从而降低了系统中细粒度对象给内存带来的压力。缺点:为了使对象可以共享,需要将一些不能共

2022-05-01 20:36:46 422

原创 外观设计模式

1、概念是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一的接口,外部应用程序不用关心内部子系统的具体细节,这样降低应用程序的复杂度,提高程序的可维护性。又叫做门面模式。优点:降低了子系统与客户端之间的耦合度,使得子系统的变化不会影响调用它的客户类。对客户屏蔽了子系统组件,减少了客户处理的对象数目,并使得子系统使用起来更加容易。降低了大型软件系统中的编译依赖性,简化了系统在不同平台之间的移植过程,因为编译一个子系统不会影响其他的子系统,也不会

2022-04-30 23:26:20 219

原创 组合设计模式

1、概念又叫整体-部分模式,它是一种将对象组合成树状层次结构的模式,用来表示整体-部分的关系,使用户对单个对象和组合对象具有一致的访问性,属于结构性设计模式。在组合模式中,整个树形结构中的对象都属于同一种类型,带来的好处是用户不需要辨识是树枝节点还是树叶节点,可以进行直接操作,给用户使用带来了极大的遍历。优点:组合模式使得客户端代码可以一致地处理单个对象和组合对象,无须关心自己处理的是单个对象,还是组合对象,这简化了客户端代码;更容易在组合体内加入新的对象,客户端不会因为加入了新的对象而更改源代

2022-04-30 23:10:06 1185

原创 装饰者模式

1、概念指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。装饰器模式在java的IO中应用很广泛。例如,InputStream 的子类 FilterInputStream,OutputStream 的子类 FilterOutputStream,Reader 的子类 BufferedReader 以及 FilterReader,还有 Writer 的子类 BufferedWriter、FilterWriter 以及 PrintWriter 等,它们

2022-04-30 23:05:53 70

原创 桥接设计模式

1、概念将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。优点:抽象与实现分离,扩展能力强符合开闭原则符合合成复用原则其实现细节对客户透明缺点:由于聚合关系建立在抽象层,要求开发者针对抽象化进行设计与编程,能正确地识别出系统中两个独立变化的维度,这增加了系统的理解与设计难度。2、实现桥接(Bridge)模式包含以下主要角色:抽象化(Abstraction)角色:定义抽象类,并包含一个对实现化对象的引用。扩展抽象化

2022-04-30 23:01:15 138

原创 适配器模式

1、概念将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。参考DispatcherServlet.doDispatch里getHandlerAdapter。优点:客户端通过适配器可以透明地调用目标接口。复用了现存的类,程序员不需要修改原有代码而重用现有的适配者类。将目标类和适配者类解耦,解决了目标类和适配者类接口不一致的问题。在很多业务场景中符合开闭原则。缺点:适配器编写过程需要结合业务场景全面考虑,可能会增加系统的复杂性。增加代码阅读难

2022-04-30 22:52:12 51

原创 建造者模式

1、概念指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示。它将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。参考StringBuilder优点:封装性好,构建和表示分离。扩展性好,各个具体的建造者相互独立,有利于系统的解耦。客户端不必知道产品内部组成的细节,建造者可以对创建过程逐步细化,而不对其它模块产生任何影响,便于控制细节风险。缺点:产品的组成部分必须相同,这限制了其使用范围。

2022-04-30 22:42:07 152

原创 原型设计模式

1、概念原型模式是一种创建型设计模式,允许一个对象创建另外一个可定制的对象,无需知道创建的细节。2、浅拷贝和深拷贝浅拷贝:对于基本数据类型的成员变量,浅拷贝会直接进行值拷贝,也就是将该属性复制一份给新的对象;引用数据类型的成员变量(数组或者对象),那么浅拷贝会进行引用传递,也就是将该成员变量的引用值复制一份给新的对象。深拷贝:对于基本数据类型的成员变量,将该属性复制一份给新的对象;为每个引用数据类型的成员变量申请空间,并复制每个成员变量所引用的对象,直到该对象可到的所有对象。3、实现3.1、

2022-04-30 22:36:34 224

原创 工厂设计模式

1、概念工厂模式分三种:简单工厂模式、工厂方法模式、抽象工厂模式简单工厂模式(Simple Factory Pattern):属于类的创新型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。简单工厂模式严重违背了“开闭原则”,难以拓展。工厂方法模式(Factory Method):定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为

2022-04-30 22:26:53 5443

原创 单例设计模式

1、概念保证一个类仅有一个实例,并提供一个访问它的全局访问点。2、八种单例模式饿汉式(静态常量)饿汉式(静态代码块)懒汉式(线程不安全)懒汉式(线程安全,同步方法)懒汉式(线程不安全,同步代码块)懒汉式(双重检查)静态内部类枚举推荐使用饿汉式两种方式、懒汉式(双重检查)、静态内部类和枚举。饿汉式有浪费内存的缺点。3、代码package com.mine.design.singleton;public class SingletonTest { public stati

2022-04-30 22:18:20 131

原创 设计模式概述

1、设计模式概念软件设计模式(Software Design Pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。它描述了在软件设计过程中的一些不断重复发生的问题,以及该问题的解决方案。也就是说,它是解决特定问题的一系列套路,是前辈们的代码设计经验的总结,具有一定的普遍性,可以反复使用。其目的是为了提高代码的可重用性、代码的可读性和代码的可靠性。设计模式的本质是面向对象设计原则的实际运用,是对类的封装性、继承性和多态性以及类的关联关系和组合关系的充分理

2022-04-30 22:10:15 138

原创 elasticsearch集群环境搭建

1.1 基础配置关闭防火墙systemctl stop firewalldsystemctl disable firewalld.service静态ip设置修改文件(/etc/sysconfig/network-scripts/ifcfg-ens33)IPADDR=192.168.31.160NETMASK=255.255.255.0GATEWAY=192.168.31.1主机名称设置修改文件(/etc/hostname),重启系统elasticsearch160修改host

2020-06-04 10:47:55 263

原创 SpringBoot整合Elasticsearch

SpringBoot整合Elasticsearch1、Elasticsearch准备参考Elasticsearch环境安装2、代码pom.xml<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLoc...

2020-05-04 22:44:54 169

原创 Kibana安装

Kibana安装Kibana 是为 Elasticsearch设计的开源分析和可视化平台。你可以使用 Kibana 来搜索,查看存储在 Elasticsearch 索引中的数据并与之交互。你可以很容易实现高级的数据分析和可视化,以图标的形式展现出来。1、准备1.1 安装Elasticsearch参考Elasticsearch环境安装1.2 上传安装包(略)2、安装2.1 解压t...

2020-04-30 23:46:40 229

原创 Elasticsearch环境安装

Elasticsearch环境安装1、ElasticsearchElasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,...

2020-04-30 23:36:41 513

原创 AOP通知消息

AOP通知1、通知类型前置通知:方法执行前调用。后置通知:方法执行后调用,无论是否有异常,都会执行。返回通知:方法返回值返回前执行,如果有异常,无返回值,不会执行。异常通知:出现异常时候的通知。可以指定异常的具体子类型。环绕通知:类似代理整个过程的实现。一般不和其他几种通知同时使用。2、 示例pom.xml<project xmlns="http://maven.apa...

2020-04-25 23:37:42 193

原创 AOP简介

AOP简介1、术语横切关注点:从每个方法中抽取出来的同一类非核心业务。切面(Aspect):封装横切关注点信息的类,每个关注点体现为一个通知方法。通知(Advice):切面必须要完成的各个具体工作目标(Target):被通知的对象。代理(Proxy):向目标对象应用通知之后创建的代理对象。连接点(Joinpoint):横切关注点在程序代码中的具体体现,对应程序执行的某个特定位置。切...

2020-04-22 22:25:37 179

Netty权威指南 第2版 带目录 带源码

Netty权威指南 第2版 带目录 带源码Netty权威指南 第2版 带目录 带源码Netty权威指南 第2版 带目录 带源码Netty权威指南 第2版 带目录 带源码

2018-10-23

smack学习笔记

smack简单介绍,有代码示例。。。smack简单介绍,有代码示例。。。

2012-06-07

涂抹Oracle—三思笔记之一步一步学Oracle+2.part5

涂抹Oracle—三思笔记之一步一步学Oracle+2.part5

2012-05-16

涂抹Oracle—三思笔记之一步一步学Oracle+2.part4

涂抹Oracle—三思笔记之一步一步学Oracle+2.part4

2012-05-16

涂抹Oracle—三思笔记之一步一步学Oracle+2.part3

涂抹Oracle—三思笔记之一步一步学Oracle+2.part3

2012-05-16

涂抹Oracle—三思笔记之一步一步学Oracle+2.part2.rar

涂抹Oracle—三思笔记之一步一步学Oracle+2.part2.rar

2012-05-16

涂抹Oracle—三思笔记之一步一步学Oracle+2.part1.rar

涂抹Oracle—三思笔记之一步一步学Oracle+2.part1.rar

2012-05-16

空空如也

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

TA关注的人

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