自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 02-Java线程池

文章目录1 Java线程1.1 线程的状态1.2 Daemon线程1.3 理解中断1.4 线程间通信1.4.1 volatile和synchronized1.4.2 等待/通知机制1.4.3 管道输入/输出流1.4.4Thread.join( )1.4.5 ThreadLocal1.5 Thread.start( )启动原理1.5.1 JVM启动线程1.5.2 JVM创建线程1.5.3 JVM启动线程1.5.4 JVM线程回调1.5.5 总结2 Java线程池2.1 线程池实现原理2.2 线程池状态2.3

2021-08-06 11:47:59 164

转载 01——Java并发机制的底层实现原理

文章目录1 Java并发机制的底层实现原理1.1 volatile1.1.1 volatile的作用1.1.2 volatile不能保证原子性1.2 synchronized1.2.1 synchronized具体表现形式1.2.2 synchronized特性1.2.3 锁升级过程1.3 原子操作的实现原理1.3.1 处理器如何实现原子操作1.3.2 Java如何实现原子操作1 Java并发机制的底层实现原理1.1 volatile1.1.1 volatile的作用instance = new S

2021-08-04 11:20:13 150

转载 深入理解Java虚拟机03—字节码执行引擎

文章目录1 运行时栈帧结构1.1 局部变量表1.2 操作数栈1.3 动态连接1.4 方法返回地址1.5 附加信息2 方法调用2.1 解析2.2 分派2.2.1 静态(多)分派2.2.2 动态(单)分派3 执行引擎3.1 基于寄存器的指令集3.2 基于栈的指令集1 运行时栈帧结构Java虚拟机以方法作为最基本的执行单元,“栈帧”(Stack Frame)则是用于支持虚拟机进行方法调用和方法执行背后的数据结构,它也是虚拟机运行时数据区中的虚拟机栈(Virtual MachineStack)的栈元素。每一个.

2021-08-02 22:10:05 164

原创 深入理解Java虚拟机02—类加载机制

文章目录1 类加载过程1.1 加载1.2 连接1.2.1 验证1.2.2 准备1.2.3 解析1.3 初始化2 类加载器2.1 类加载器2.2 双亲委派模型2.3 破坏双亲委派模型1 类加载过程1.1 加载通过一个类的全限定名来获取定义此类的二进制字节流将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口注:数组类本身不通过类加载器创建,它是由Java虚拟机直接在内存中动态构造出.

2021-08-02 17:46:56 167

原创 深入理解Java虚拟机01—内存管理

文章目录内存管理1 运行时数据区域1.1 程序计数器1.2 虚拟机栈1.3 本地方法栈1.4 Java堆1.5 方法区2 HotSpot虚拟机对象探秘2.1 对象的结构2.2 对象的访问方式2.3 对象的创建3 内存分配3.1 对象优先在Eden分配3.2 大对象直接进入老年代3.3 长期存活的对象将进入老年代3.4 动态对象年龄判定3.5 空间分配担保4 内存回收4.1 判断对象是否存活4.2 Java引用4.3 回收方法区4.4 垃圾收集算法4.4.1 分代收集理论4.4.2 标记—清除算法4.4.3.

2021-07-31 10:25:43 127

原创 22-解释器模式

22-解释器模式1 定义2 结构3 案例4 优缺点5 使用场景1 定义给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。解释器就是要解析出来语句的含义。但是如何描述规则呢?文法(语法)规则: 文法是用于描述语言的语法结构的形式规则。expression ::= value | plus | minusplus ::= expression ‘+’ expression minus ::= expression ‘-’ expression val

2021-04-07 11:27:28 100 1

转载 21-备忘录模式

21-备忘录模式1 定义2 结构3 案例3.1 "白箱"备忘录模式3.2 "黑箱"备忘录模式4 优缺点5 使用场景1 定义备忘录模式又叫快照模式,在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。2 结构备忘录模式的主要角色如下:发起人(Originator)角色: 记录当前时刻的内部状态信息,提供创建备忘录和恢复备忘录数据的功能,实现其他业务功能,它可以访问备忘录里的所有信息。备忘录(Memento)角色: 负责存储发

2021-04-07 11:06:22 80

原创 20-访问者模式

20-访问者模式1 定义2 结构3 案例4 优缺点5 使用场景6 扩展6.1 动态分派6.2 静态分派6.3 双分派1 定义封装一些作用于某种数据结构中的各元素的操作,它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作。2 结构访问者模式包含以下主要角色:抽象访问者(Visitor)角色: 定义了对每一个元素(Element)访问的行为,它的参数就是可以访问的元素,它的方法个数理论上来讲与元素类个数(Element的实现类个数)是一样的,从这点不难看出,访问者模式要求元素类的个数不能

2021-04-06 09:37:32 82

原创 19-迭代器模式

19-迭代器模式1 定义2 结构3 案例4 优缺点5 使用场景6 源码解析1 定义提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。2 结构迭代器模式主要包含以下角色:抽象聚合(Aggregate)角色: 定义存储、添加、删除聚合元素以及创建迭代器对象的接口。具体聚合(ConcreteAggregate)角色: 实现抽象聚合类,返回一个具体迭代器的实例。抽象迭代器(Iterator)角色: 定义访问和遍历聚合元素的接口,通常包含 hasNext()、next() 等方

2021-04-06 09:15:24 104

转载 18-中介模式

18-中介模式1 定义2 结构3 案例4 优缺点5 使用场景5 使用场景一般来说,同事类之间的关系是比较复杂的,多个同事类之间互相关联时,他们之间的关系会呈现为复杂的网状结构,这是一种过度耦合的架构,即不利于类的复用,也不稳定。例如在下左图中,有六个同事类对象,假如对象1发生变化,那么将会有4个对象受到影响。如果对象2发生变化,那么将会有5个对象受到影响。也就是说,同事类之间直接关联的设计是不好的。如果引入中介者模式,那么同事类之间的关系将变为星型结构,从下右图中可以看到,任何一个类的变动,只会影响的类

2021-04-03 10:33:39 97

转载 17-观察者模式

17-观察者模式1 定义2 结构3 案例4 优缺点5 使用场景6 源码解析1 定义观察者模式又被称为发布-订阅(Publish/Subscribe)模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。2 结构在观察者模式中有如下角色:Subject:抽象主题(抽象被观察者),抽象主题角色把所有观察者对象保存在一个集合里,每个主题都可以有任意数量的观察者,抽象主题提供一个接口,可以增加和删除观察者对象

2021-04-03 09:55:47 90

转载 16-状态模式

1 定义对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。2 结构状态模式包含以下主要角色:**环境(Context)角色:**也称为上下文,它定义了客户程序需要的接口,维护一个当前状态,并将与状态相关的操作委托给当前状态对象来处理。抽象状态(State)角色: 定义一个接口,用以封装环境对象中的特定状态所对应的行为。具体状态(Concrete State)角色: 实现抽象状态所对应的行为。3 案例通过按钮来控制一个电梯的状态,一

2021-04-02 10:26:21 88

转载 15-责任链模式

15-责任链模式1 定义2 结构3 案例4 优缺点5 源码解析1 定义又名职责链模式,为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。2 结构职责链模式主要包含以下角色:**抽象处理者(Handler)角色:**定义一个处理请求的接口,包含抽象处理方法和一个后继连接。**具体处理者(Concrete Handler)角色:**实现抽象处理者的处理方法,判断能否处理本次请

2021-04-02 09:32:29 105

原创 14-命令模式

14-命令模式1 定义2 结构3 案例4 优缺点5 使用场景6 源码解析1 定义将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行存储、传递、调用、增加与管理。2 结构命令模式包含以下主要角色:抽象命令类(Command)角色: 定义命令的接口,声明执行的方法。**具体命令(Concrete Command)角色:**具体的命令,实现命令接口;通常会持有接收者,并调用接收者的功能来完成命令要执行的操作。实现者/接收者

2021-04-01 10:20:05 82

转载 13-策略模式

1 定义​ 策略模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。2 结构策略模式的主要角色如下:抽象策略(Strategy)类: 这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。具体策略(Concrete Strategy)类: 实现了抽象策略定义的接口,提供具体的算法实现或行为。环境

2021-04-01 09:37:15 81

转载 狂神JUC笔记

1 wait/sleep的区别来自不同的类wait => Objectsleep => Thread一般情况企业中使用休眠是:TimeUnit.DAYS.sleep(1); //休眠1天TimeUnit.SECONDS.sleep(1); //休眠1s关于锁的释放wait 会释放锁;sleep睡觉了,不会释放锁;使用的范围是不同的wait 必须在同步代码块中;sleep 可以在任何地方睡;是否需要捕获异常wait是不需要捕获异常;sleep必须要捕

2021-03-31 15:29:25 189

原创 12-模板方法模式

12-模板方法模式1 定义2 结构3 案例4 优缺点5 使用场景6 源码解析6.1 InputStream类6.2 Spring IOC容器初始化在面向对象程序设计过程中,常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的实现与具体的环境相关。例如,去银行办理业务一般要经过以下4个流程:取号、排队、办理具体业务、对银行工作人员进行评分等,其中取号、排队和对银行工作人员进行评分的业务对每个客户是一样的,可以在父类中实现,但

2021-03-31 10:29:01 152

原创 11-享元模式

11-享元模式1 定义2 结构3 案例4 源码解析——Integer类1 定义运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似对象的开销,从而提高系统资源的利用率。2 结构享元(Flyweight )模式中存在以下两种状态:**内部状态,**即不会随着环境的改变而改变的可共享部分。**外部状态,**指随环境改变而改变的不可以共享的部分。享元模式的实现要领就是区分应用中的这两种状态,并将外部状态外部化。享元模式的主要有以下角色

2021-03-31 10:02:14 79

原创 10-组合模式

10-组合模式1 定义2 结构3 案例4 分类5 优点6 使用场景7 源码解析1 定义​ 又名部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。2 结构组合模式主要包含三种角色:抽象根节点(Component): 定义系统各层次对象的共有方法和属性,可以预先定义一些默认行为和属性。树枝节点(Composite): 定义树枝节点的行为,存储子节点,组合树枝节点和叶子节点形成

2021-03-30 10:22:43 124

原创 09-外观模式

09-外观模式1 定义2 结构3 案例4 使用场景5 源码解析5.1 HttpServlet5.2 Mybatis中的Configuration有些人可能炒过股票,但其实大部分人都不太懂,这种没有足够了解证券知识的情况下做股票是很容易亏钱的,刚开始炒股肯定都会想,如果有个懂行的帮帮手就好,其实基金就是个好帮手,支付宝里就有许多的基金,它将投资者分散的资金集中起来,交由专业的经理人进行管理,投资于股票、债券、外汇等领域,而基金投资的收益归持有者所有,管理机构收取一定比例的托管管理费用。1 定义外观模式又

2021-03-29 17:05:57 149

原创 08-桥接模式

08-桥接模式1 定义2 结构3 案例4 使用场景1 定义将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。2 结构桥接(Bridge)模式包含以下主要角色:**抽象化(Abstraction)角色 :**定义抽象类,并包含一个对实现化对象的引用。**扩展抽象化(Refined Abstraction)角色 :**是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法。**实现化(Implemen

2021-03-29 16:37:07 120

原创 07-装饰者模式

07-装饰者模式1 定义2 结构3 案例4 使用场景5 JDK源码解析6 代理和装饰者比较1 定义在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式。2 结构装饰(Decorator)模式中的角色:抽象构件(Component)角色 : 定义一个抽象接口以规范准备接收附加责任的对象。具体构件(Concrete Component)角色 : 实现抽象构件,通过装饰角色为其添加一些职责。抽象装饰(Decorator)角色 : 继承或实现抽象构件,并包含具体构件

2021-03-29 16:10:44 70

原创 06-适配器模式

06-适配器模式1 定义2 结构3 类适配器模式4 对象适配器模式5 应用场景6 适配器模式在JDK中的应用6.1 InputStreamReader6.2 SpringMVC中的HandlerAdapter1 定义将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。适配器模式分为类适配器模式和对象适配器模式,前者类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少些。2 结构适配器模式(Adapter)包含以

2021-03-29 15:19:15 91

原创 05-代理模式

05-代理模式1 概述2 结构3 静态代理4 JDK动态代理5 CGLIB动态代理6 三种代理的对比7 优缺点1 概述由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。Java中的代理按照代理类生成时机不同又分为静态代理和动态代理。静态代理代理类在编译期就生成,而动态代理代理类则是在Java运行时动态生成。动态代理又有JDK代理和CGLib代理两种。2 结构代理(Proxy)模式分为三种角色:抽象主

2021-03-26 10:20:36 124

原创 04-建造者模式

04-建造者模式1 概述2 结构3 实例4 扩展5 创建者模式对比1 概述将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。分离了部件的构造(由Builder来负责)和装配(由Director负责)。 从而可以构造出复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况。由于实现了构建和装配的解耦。不同的构建器,相同的装配,也可以做出不同的对象;相同的构建器,不同的装配顺序也可以做出不同的对象。也就是实现了构建算法、装配算法的解耦,实现了更好的复用。建造者模式可以将部件和

2021-03-25 10:52:21 105

转载 03-原型模式

1 概述用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型对象相同的新对象。2 结构原型模式包含如下角色:**抽象原型类:**规定了具体原型对象必须实现的的 clone() 方法。**具体原型类:**实现抽象原型类的 clone() 方法,它是可被复制的对象。**访问类:**使用具体原型类中的 clone() 方法来复制新的对象。3 实现原型模式的克隆分为浅克隆和深克隆。浅克隆: 创建一个新对象,新对象的属性和原来对象完全相同,对于非基本类型属性,仍指向原有属性所指

2021-03-24 22:51:53 70

原创 02-工厂模式

文章目录1 简单工厂模式2 工厂方法模式3 抽象工厂模式4 模式扩展5 工厂模式在JDK中的应用需求:设计一个咖啡店点餐系统。设计一个咖啡类(Coffee),并定义其两个子类(美式咖啡【AmericanCoffee】和拿铁咖啡【LatteCoffee】);再设计一个咖啡店类(CoffeeStore),咖啡店具有点咖啡的功能。具体类的设计如下:在java中,万物皆对象,这些对象都需要创建,如果创建的时候直接new该对象,就会对该对象耦合严重,假如我们要更换对象,所有new对象的地方都需要修改一遍,这

2021-03-24 09:19:51 202

原创 01-单例模式

文章目录1 饿汉式(静态变量)2 饿汉式(静态代码块)3 懒汉式(线程不安全)4 懒汉式(线程安全)5 懒汉式(双重检查锁)6 静态内部类7 枚举8 单例模式在JDK应用单列设计模式分两种:饿汉式:类加载就会导致该单实例对象被创建懒汉式:类加载不会导致该单实例对象被创建,而是首次使用该对象时才会创建1 饿汉式(静态变量)class Singleton01 { //1.本类内部创建对象实例 private final static Singleton01 instance = n

2021-03-24 09:14:42 122 1

原创 00-设计模式原则

文章目录1 单一职责原则2 开闭原则3 里氏代换原则4 依赖倒转原则5 接口隔离原则6 迪米特法则7 合成复用原则1 单一职责原则对于类来说,**一个类应该只负责一种职责。**如果类A负责两个不同的职责:职责1,职责2。当职责1需求变更而改变A时,可能造成职责2执行错误,所以需要将类A的粒度分解为A1,A2。2 开闭原则**对扩展开放,对修改关闭。**在程序需要进行扩展的时候,不能去修改原有的代码。需要使用接口和抽象类。只要抽象合理,可以基本保持可以基本保持软件架构的稳定。而软件中易变的细节可以从

2021-03-23 16:21:37 239

原创 6-哈希表

//创建HashTable,管理多条链表class HashTable { private EmpLinkedList[] empLinkedListArray; private int size; //表示有多少条链表 public HashTable(int size) { this.size = size; empLinkedListArray = new EmpLinkedList[size]; //不要忘了初始化每个链表.

2021-03-18 09:04:00 62

原创 5-查找

1 二分查找/** * 二分查找 * * @param arr 有序数组 * @param left 左边的索引 * @param right 右边的索引 * @param findVal 要查找的值 * @return */public static int binarySearch(int[] arr, int left, int right, int findVal) { // 当left > right 时,说明递归整个数组,但是没有找到

2021-03-18 09:02:38 75

原创 4-排序

文章目录1 冒泡排序2 选择排序3 插入排序4 希尔排序5 快速排序6 归并排序7 基数排序8 堆排序9 总结1 冒泡排序冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。优化:因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在排序过程中设置一个标志flag 判断元素是否进行过交换。从而减少

2021-03-18 09:00:03 141

原创 3-链表

1 单向链表//定义SingleLinkedList来管理我们的英雄class SingleLinkedList{ //初始化一个头节点 private HeroNode head = new HeroNode(0,"",""); //添加节点到单向链表 public void add(HeroNode heroNode){ HeroNode temp = head; while (true){ if(temp.n

2021-03-18 08:55:46 47

原创 2-队列

1 数组实现队列class ArrayQueue{ private int maxSize; //数组的最大容量 private int front; //队列头 private int rear; //队列尾 private int[] arr; //用于存放数据,模拟队列 //创建队列的构造器 public ArrayQueue(int maxSize) { this.maxSize = maxSize; arr

2021-03-18 08:52:22 50

原创 1-稀疏数组

public class SparseArray { public static void main(String[] args) { int[][] arr = new int[11][11]; arr[1][2] = 1; arr[2][3] = 2; for (int[] row : arr) { for (int data : row) { System.out.print

2021-02-21 09:44:57 68

原创 第7章 TCP粘包与拆包及解决方案

文章目录第7章 TCP粘包与拆包及解决方案1 基本介绍2 现象实例3 解决方案第7章 TCP粘包与拆包及解决方案1 基本介绍2 现象实例public class MyServer { public static void main(String[] args) throws InterruptedException { NioEventLoopGroup bossGroup = new NioEventLoopGroup(1); NioEventLoop

2021-02-18 12:33:13 83

原创 第6章 Netty编解码器和Handler调用机制

文章目录第6章 Netty编解码器和Handler调用机制1 基本说明2 编解码器3 解码器-ByteToMessageDecoder4 Netty的Handler链调用机制5 解码器-ReplayingDecoder6 其他解码器7 其他编码器8 Log4j整合Netty第6章 Netty编解码器和Handler调用机制1 基本说明2 编解码器3 解码器-ByteToMessageDecoder4 Netty的Handler链调用机制实例要求:使用自定义的编码器和解码器来说明

2021-02-18 11:17:30 171

原创 第5章 Google Protobuf

文章目录第5章 Google Protobuf1 编码和解码的基本介绍2 Netty编码解码机制3 Protobuf4 Protobuf快速入门实例第5章 Google Protobuf1 编码和解码的基本介绍2 Netty编码解码机制3 Protobuf4 Protobuf快速入门实例编写程序,使用Protobuf完成如下功能:客户端可以发送一个Student PoJo对象到服务器(通过Protobuf编码)服务端能接受Student PoJo对象,并显示信息(通过Protobu

2021-02-17 20:31:49 95

原创 第4章 Netty核心模块组件

文章目录第4章 Netty核心模块组件1 Bootstrap&ServerBootstrap2 Future&ChannelFuture3 Channel4 Selector5 ChannelHandler及其实现类6 Pipeline和ChannelPipeline7 ChannelHandlerContext8 ChannelOption9 EventLoopGroup及其实现类NioEventLoopGroup10 Unpooled类11 Netty应用实例—群聊系统12 Netty心

2021-02-17 12:47:21 121

原创 第3章 Netty高性能架构设计

文章目录第3章 Netty高性能架构设计1 Netty概述1.1 原生NIO存在的问题1.2 Netty的优点1.3 Netty版本说明2 线程模型基本介绍3 传统阻塞IO服务模型3.1 工作原理图3.2 模型特点3.3 问题分析4 Reactor模式4.1 传统阻塞IO服务模型的2个缺点,解决方案4.2 Reactor模式基本设计思想4.3 Reactor模式核心组成4.4 Reactor模式分类4.5 单Reactor 单线程4.6 单Reactor 多线程4.7 主从Reactor 多线程4.8 Re

2021-02-16 18:42:12 151

空空如也

空空如也

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

TA关注的人

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