自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

责任链模式属于行为型模式,顾名思义,为请求创建一个接收者对象的链,所有的对象都有可能接收到请求,请求沿着对象链传递,直到请求被处理,在这个过程中实现请求对象和接收对象的解耦,避免两者耦合在一起。类比游戏中的副本关卡,挑战任务,或者日常生活中的等级考试,都可以理解为一个责任链。比如软件应用中的web请求过滤器、拦截器实现,一个请求经过层层的过滤,对请求进行各种各样的处理,最后到达请求处理器,完成此次请求的处理。

2023-04-08 09:15:00 126 1

原创 设计模式之状态模式

状态模式,又称状态机模式,属于行为型设计模式的一种,定义:允许一个对象在内部状态发生改变时改变其行为,就好像是改变了自身的类一样。如果状态简单,这种if else语句看上去是没有问题的,但是如果状态变得复杂起来,多种状态之间互相作用,关联,这种代码就会变得非常复杂,比如使用大量的flag去维护状态和状态之间的转换,使得这部分代码变得难以维护,最重要的是这部分代码将在客户端进行维护,客户端不得不关心各个状态之间的转换和具体的行为。

2023-04-07 08:45:00 409

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

解释器模式属于行为模式,定义:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。定义看上去略显生涩,简单解释一下,其实语言可以理解为编程语言或者表达式,我们需要对语言或者表达式进行解释,搞清楚它要做什么,就需要对语言进行转化,而文法就是他们的的规则和结构,根据文法定义我们的解释器,对语言或者表达式进行解释。而解释器模式就是在我们需要对一些语言进行解释的时候,可以考虑使用它。简单说就是用解释编程语言的方式来解释对象或者表达式的值。

2023-04-06 08:30:00 240

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

备忘录模式,又称快照模式,属于行为型模式。该种设计模式提供了一种对象状态恢复的机制,使得对象可以很方便的对历史状态进行回溯,恢复到特定某历史时刻的状态。结合现实生活中的示例比较容易理解,比如文本编辑器的撤销机制,游戏存档机制,虚拟机的快照机制,都是很好的例子,以虚拟机的快照机制来说,通过对当前系统拍摄一系列快照(snapshot),记录当前的系统的状态,比如磁盘存储,内存,进程等信息,可以在未来需要回退的时候执行恢复快照操作,将系统“瞬间”变回快照制作时的状态。而备忘录模式就是这类机制的原理和思想。

2023-04-05 08:15:00 198

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

迭代器模式,属于行为型模式。其目的是提供一种顺序访问访问聚合对象(集合)中的各种元素,而又不暴露该对象的内部表示。迭代可以理解为就是对集合对象内部元素的遍历访问,一般情况下可以通过直接访问这个对象(集合)或者获取对象元素进行遍历,这是传统的做法。迭代器提供了一种更优雅、更灵活的遍历方式,使得外部访问对象(集合)的元素更为简单,单一。

2023-04-04 00:48:02 85

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

访问者模式,属于行为型模式的一种,目的是将数据结构和数据操作分离。具体原理就是使用一个访问者类,它改变了元素类的执行算法,通过这种方式,元素的执行算法可以随着访问者的改变而改变。其实就是将对象结构中的不变部分和变化分离,将不变的部分固定起来,然后将变化的部分通过某种方式开放出去,由具体的访问者来定义这部分变化的操作。这个过程有点像回调,回调的本质就是将需要执行的具体流程通过定义一系列的回调接口,然后向调用者开放回调接口,当调用者需要执行具体操作时,通过回调接口调用我们自定义实现的方法。

2023-04-02 17:43:40 60

原创 设计模式之命令模式

命令模式也称作动作模式,属于行为型模式的一种,书中的定义:将一个请求封装为一个对象,从而使得可以用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销操作。本质上看,就是将要执行的任务参数化具体做法就是将命令封装为参数,并且由命令去执行底层真实的业务逻辑。客户端需要做的事情是,创建命令,将命令发送至调用者,再由调用者去执行命令。

2023-04-02 09:00:00 116

原创 设计模式之外观模式

外观模式,又叫门面模式,是结构型模式的一种,目的是为多个复杂的子系统提供一个统一的访问接口(门面),使得客户端访问这些子系统的门槛降低,并且具有统一的访问规范。对于客户端来说,极大的屏蔽了子系统的复杂性,客户端只需要面向自身需要的或者是对自己有用的接口即可。

2023-04-01 11:00:00 36

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

中介者模式,又称仲裁者模式,属于行为型模式的一种。提到中介,现实世界中处处可见,房产中介,保险中介,甚至是婚介所等等。他们都有共同的特性,即面向各种客户,同时拥有各种客户需求的资源信息,作为一个中间角色,为其他相关联的角色提供了简单、统一的纽带。使得不同角色不必直接面向其他角色,而只要统一面向中介就可以了。同样的原理也同样适用于程序设计,我们平时的系统中往往有大量的对象,且这些对象之间每每之间都有可能互相关联,共同构成了一个复杂的网状图。

2023-04-01 08:15:00 90

原创 设计模式之享元模式

享元模式属于结构型模式中的一种,其目的是为了减少大量相似对象的创建,降低资源消耗,提高系统的性能。从本质上看,享元模式是利用共享的方式使得大量的细粒度对象能够被复用,大幅减少需要创建的对象数量,以达到高效利用资源。最熟悉的实现实例就是数据库连接池、线程池、Integer缓存,提到这几个,就能对享元有一个大概的认识方向,具体做法就是提前创建他们, 并缓存到指定的容器,当需要对象时,从该容器获取,使用结束后,将对象返还给容器,而容器也可以根据实际的情况,添加/删除对象,或者进行扩缩容。内部状态。

2023-03-31 08:30:00 84

原创 设计模式之组合模式

组合模式属于结构型模式,也叫整体-部分模式,目的是将单个对象和组合对象使用相同的接口进行表示,使得客户端对单个对象和组合对象的使用具有一致性。可以将对象类之间的引用看做一棵树,组合对象(容器对象)就是树干,而单个对象就是树的叶子节点。通过对两者使用相同的抽象方式,在客户端看来,可以当做一种对象进行处理,不需要关心内部具体是什么,而对于树而言,无论是整体还是部分,都具有相同的操作方式。

2023-03-30 08:30:00 70

原创 设计模式之桥接模式

桥接模式属于结构型模式中的一种,也称之为桥梁模式,书中的定义:将抽象部分与它的实现部分分离,使它们都可以独立的变化,官话有点难理解。个人理解,桥接模式是相对于继承的,一般通过继承,可以对我们的代码进行扩展,但是随着继承体系逐渐庞大,会产生比较多的子类,难以管理,而且继承将所有的类都绑定在一起,存在一定的耦合性,如果父类发生变化,很有可能会影响到子类,对后期的扩展不友好。

2023-03-29 01:32:21 49

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

适配器模式属于结构型模式的一种,目的是将两个原本互不兼容的接口关联起来,将一个接口转换为另外一个客户端期望的接口,使得两个接口能够在一起工作,这类接口往往都具有相似性,且往往都是对旧版本接口进行兼容,这个时候就需要为两者之间创建一个适配器,达到兼容的目的。类比生活中的适配器就比较容易理解了,手机接口适配器,电源适配器,笔记本扩展坞,视频信号输出接口适配,本质上都是将两个标准不同规范不同的接口通过适配器使得两者能够兼容,程序中自然也是如此,适配器依然充当着相同的角色。

2023-03-28 08:00:00 58

原创 设计模式之代理模式

代理模式属于行为型模式,代理一词很好理解,在计算机世界中的代理其实就是在服务端和客户端之间增加一个中间层,通过正向代理或反向代理向访问者提供了一种间接的访问控制,也可以说通过代理层向访问者屏蔽了被访问目标对象的具体细节,访问者只需要面向代理对象或代理服务就可以间接的访问到目标对象,如果反映到现实世界中,那各种中介、商品代理商就充当了这个中间层的角色。而通过增加代理对象,那自然就可以在代理的过程中去做一些额外的事情,对目标对象进行增强操作,比如在反向代理服务器中,对访问者的鉴别,拦截过滤等。

2023-03-27 01:40:14 54

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

装饰器模式属于结构型模式的一种,目的是为了在不破坏原有对象结构的情况下,对原有对象的功能进行扩展增强,添加新的职责。表面上看与代理模式有一点像,但实际上面向应用场景不一样,具体会在后边的代理模式中说明。谈到对对象功能进行增强,使用语言的继承特性也可以实现,即通过创建子类对父类原有功能进行增强,但是继承存在一定的耦合性,并且随着功能增加,子类的数量也会随之增加。

2023-03-26 18:18:56 43

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

设计往往只是一个简单的思想描述,具体实现起来是多种多样的,而应用到业务中的实现,更应该充分考虑实际业务需求,对设计作出更好扩充优化,比如结合其他的设计模式,这一点是灵活的,好的设计应结合设计模式且脱离设计模式束缚,具体场景具体分析,切勿生搬硬套。

2023-03-26 02:59:27 59

原创 设计模式之模板模式

套用书中的定义:定义一个操作算法的骨架,将一些步骤延迟到子类,模板方法使得子类可以不改变算法的结构即可重定义该算法的某些特定步骤说人话就是在父类中定义一系列步骤方法,扩展给子类实现,然后在父类中通过this指针调用这一系列步骤,怎么调用,由父类规定,谁干活,子类来干。

2023-03-25 00:35:44 34

原创 设计模式之原型模式

原型模式同属创建型模式的一种,目的也是为了创建对象。与一般创建对象方式不同的是,原型模式是使用一个对象的实例通过clone的方式,克隆出一个与原型相同的对象,说的简单点原型模式就是通过拷贝原型对象生成新对象,故名原型模式。在Java语言中,可以利用Object类提供的clone方法实现该拷贝流程。一句话总结下来 ,原型模式就是通过一些手段对原型对象进行拷贝。简化了对象创建初始化的流程,直接通过运行时的对象状态在内存中复制一个对象的副本,对于需要创建大量复杂相似对象的场景,可以考虑使用原型模式。

2023-03-24 00:37:21 46

原创 设计模式之单例模式

单例设计模式是接触最早也是相对最简单的设计模式之一,同属于创建型模式,这种设计模式为一个类提供了唯一的一个全局访问对象,并且由该类创建自己的唯一对象。总体思路就是将需要私有化类构造器,禁止外部创建对象,在类内部提供类级别的静态方法供外部调用,从而获取唯一的对象

2023-03-23 02:15:00 51

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

建造者模式,又称生成器模式,属于创建者模式其中的一种,除此之外还有工厂模式、单例模式、原型模式都属于创建者模式,即他们都为对象/组件的创建提供方便和扩展。个人理解是以不变的流程去组装不同形态、外观的产品,就像生产一件电子产品一样,譬如手机,一款手机的出厂都需要经过元器件采购、生产线组装、测试,这个流程可以认为是不变的,但是生产出来的具体的生产顺序或者产品配置是不同的,而建造者从表面上看就是完成类似的流程。

2023-03-23 00:25:30 88

原创 设计模式之简单工厂,工厂方法,抽象工厂

在面向对象编程中,工厂产生的自然就是程序中的“产品”,一般情况下就是程序中经常出现的各种对象了。你会在各种框架、组件中看到xxxFactory,yyyFactory这些都是工厂设计模式。为什么要有工厂设计模式?答案就是解耦,工厂的作用就是帮我们返回我们需要的对象,当我们需要对象的时候通过工厂来获取就可以了,至于其他有关这个对象的细节,他是怎么创建的,何时创建的,怎么初始化的,调用者不需要关心,也不需要参与其中,从而达到了解耦的目的简单工厂模式。

2023-03-22 01:23:03 125

原创 策略设计模式

谈到策略,经常会讲面对某某情况我们需要采取什么样的策略应对,从这里就引出了策略设计模式的思想轮廓,即面对同一种事务在不同情况下需要采取不同的策略

2023-03-17 00:56:32 46

原创 jvm常见垃圾回收器

垃圾收集器的终极目标:提高吞吐量,降低延时,减少停顿。与之相对的则是更加复杂的设计和更多资源的消耗。以上是7款目前已经商用的垃圾回收器,除此之外还有更多正在实验阶段更强悍的回收器,比如Shenandoah,ZGC,由于篇幅有限加之两者更为复杂,留作下篇单独做记录总结。能力有限,如有问题,请看官们及时指正~文中插图引用自:深入理解Java虚拟机第三版 - 周志明著。

2023-03-15 01:32:26 1105

原创 jvm三色标记法

jvm内存回收都是采用可达性算法实现的,在开始之前,需要先通过选择一些固定的对象作为gc roots,从该对象开始沿着引用链向下遍历,如果存在任意对象到gc root不可达,则表示该对象在内存中处于被“孤立”状态,此时它就是gc进行内存回收的对象。

2023-03-11 03:16:53 95

原创 JVM之OopMap,安全点,安全区

由于目前几乎所有虚拟机都是用可达性分析算法来判定对象是否存活,即通过选定固定的gc roots作为起始节点,像剥洋葱一样往下溜达,只要存在任意节点从gc roots到该节点不可达,那表示这个对象不被任何对象所引用,这个对象最终就要被当做垃圾回收掉。问题来了,如何找到这些gc roots呢?从源代码上看,对象引用不是在类中,就是在方法中,如此,通过扫描所有的对象就可以获取到这些gc roots。

2023-03-10 01:10:28 1980 3

原创 jvm垃圾回收算法思想概述

现在看起来,三种内存回收算法看起来都无法做到完美,都有各自的“遗憾”。碎片化问题,内存拷贝,效率,尤其是用户线程停顿问题(Stop The World),成了各个垃圾回收器设计中需要重点关注的key point。

2023-03-07 01:51:20 130

原创 指针,句柄和引用的区别

没得写

2023-03-04 02:55:07 633

原创 Jvm内存结构总结

以上信息概括了JVM在内存结构上的基本概念,相对比较容易理解,理解这里,为后续的gc回收,类加载,字节码执行流程等知识提供了基本的思考轮廓。

2023-02-28 23:17:13 129

原创 随笔:记centos7离线搭建gitlab

在centos7下搭建gitlab。

2022-07-25 00:57:21 1599 3

原创 数据结构之二叉搜索树(BST)

二叉搜索树的基本原理和实现

2022-07-16 21:03:44 328

原创 MySQL索引原理以及使用

MySQL中的索引是什么?索引是为MySQL(当然,不仅仅是MySQL)检索数据而专门设计的一种特殊数据结构,目的旨在通过对表中数据之间的关系顺序进行维护,生成一组特殊的排序结构,从而提高数据查询效率,降低数据库IO成本。引用众多示例,把索引比作字典的目录,通过目录可以准确快速的定位到需要查找的”数据“。注:以下所有内容主要是针对InnoDB存储引擎作为实例说明,不同的索引在不同存储引擎下可能会有差别。使用哈希索引也能提高数据的查询速度,哈希索引是建立在哈希表的基础上,通过对索引列建立哈希码,保存在索引中

2022-07-10 02:20:58 1062 1

空空如也

空空如也

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

TA关注的人

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