自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Mybatis卡顿问题-sqlSession未关闭

最近在工作中遇到一个sqlSession的使用问题。老项目不知道为什么单独搞了一个配置文件使用Mybatis。在测试中发现一个性能问题:执行单独使用Mybatis查询使。每查询一定的次数就会出现卡顿。通过跟踪发现没次卡顿还都是20s左右。但是为什么会这样呢百思不得其姐。最后写了个dome测试也是只使用了Mybatis:贴代码:public class SqlSessionTest { public static void main(String[] args) throws I..

2021-10-29 09:17:22 2107

原创 软件设计模式之路-----解释器模式

这是学习的最后一种解释器了,长话短说。解释器模式用来解决特定类型的问题发生频率比较高,而且有一定的相似性和规律性。例如计算器。这种模式在实际开发中使用的可能性比较少。但也有学习的必要,因为这能帮助我们看懂一些源码。例如Spring EL表达式、正则表达式。解释器(Interpreter)模式的定义:给分析对象定义一个语言,并定义该语言的文法表示,再设计一个解析器来解释语言中的句子。也就是说,用编译语言的方式来分析应用中的实例。这种模式实现了文法表达式处理的接口,该接口解释一个特定的上下文。...

2021-10-19 09:55:47 133

原创 软件设计模式之路-----中介者模式

在生活中,当多个对象需要交互时,如果都是彼此直接交互那么将会有n*(n-1)条交互信息。说个比较实际的例子,一个班级(n人)如果彼此记录联系方式,那么每个人要记录的联系方式是n-1所以一共有n*(n-1)条信息。但我们有了QQ群就不一样了,我们通过这个qq群就能找到其他同学的联系方式。中介者模式也就是通过设计一个类似QQ群的类来解决错综复杂的交互关系。中介者(Mediator)模式的定义:定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。...

2021-10-15 13:46:09 222

原创 软件设计模式之路-----访问者模式

在生活中有些对象他结构是不变的,但是访问他的对象不同,访问方式也不一样例如:爸爸妈妈称呼你为儿子,爷爷奶奶呼尔孙子;药单在医生手上关心的是药品和你的病情对不对应,收银员看的是价格对不对,检药员看单抓药就行。系统来源于生活,自然在系统中也会有这样的数据结构,同一个数据结构不同的访问对象访问方式不一样。这些被处理的数据元素相对稳定而访问方式多种多样的数据结构,如果用“访问者模式”来处理比较方便。访问者模式适用于数据结构不变的场景,使用条件比较苛刻,在使用时需要考虑是否真实适用。访问者(...

2021-10-13 16:02:55 151

原创 软件设计模式之路-----模板方法模式

“天下大势,合久必分,分久必合”。万物皆有定律,有定律就会有它的规则,有了规则就会有模板。生活中为了方便和规范很多方面都会使用到模板。例如:简历模板、论文模板、Word 中模板文件等。在系统中也是如此,有些处理逻辑可以整理出一套模板,将这些逻辑中的固有逻辑固定好,然后不固定的可以交由子类去实现。模板方法(Template Method)模式的定义:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。优点:它封装了不变...

2021-10-12 11:05:50 174

原创 软件设计模式之路-----策略模式

常言道:“条条大路通罗马”。在生活中达到某种目标,会有很多种方法。例如你想成为有钱人,你可以傍富婆,你也可以自己努力成为富一代。老规矩,系统来源于生活。在系统中处理某个事件会有多种方法。最简单的,酒店对于不同等级的客户,会有不同的优惠。在传统编码上,我们可以使用if--else解决面对不同的情况以不同的策略解决。但是这不易于维护。这时我们可以想想是否适合策略模式策略(Strategy)模式的定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客...

2021-10-11 20:14:14 77

原创 软件设计模式之路-----状态模式

在生活中,我们经常能有时会感受到,对象的行为跟她的心情有关系。她开心时你跟她开开玩笑,她能跟你打闹,要是她不开心时,你做相同的事,你可能是在玩火。女人嘛难免有几天不开心的。既然生活中存在对象在不同状态下有不同的行为,那么在软件系统中同样会有相同的可能,系统来源于生活。对这种一个对象在接收到同一信号,但是根据状态会做出不同动作的编程。简单的可以使用if--else这样处理,但是这样不灵活。所以我们考虑下状态设计模式。状态(State)模式的定义:对有状态的对象,把复杂的“判断逻辑”提取到不同的状...

2021-09-29 17:24:14 188

原创 软件设计模式之路-----备忘录模式

在生活中,我们犯错的时候,总想着能否从来一次的机会,虽然在现实中是很残酷的,但是在虚拟的网络中是可以从来的。比如PS的历史纪录,以及大多数软件的撤销命令。备忘录(Memento)模式的定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。优点:提供了一种可以恢复状态的机制。当用户需要时能够比较方便地将数据恢复到某个历史的状态。 实现了内部状态的封装。除了创建它的发起人之外,其他对象都不能够访问这些状态信息。...

2021-09-28 14:38:41 138

原创 软件设计模式之路-----命令模式

在平常开发中,一个方法调用另外一个方法是直接调用的。这样方法调用者和方法执行者存在着紧密的耦合关系。这不利于扩展,因此我们可以把方法的调用和方法的执行用分开来,这就是命令模式的作用命令模式的定义:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理优点:通过引入中间件(抽象接口)降低系统的耦合度。 扩展性良好,增加或删除命令非常方便。 采用命令模式增加与删除命令不会影响其他类,且满足...

2021-09-24 17:24:33 148

原创 软件设计模式之路-----代理模式

代理模式就如同生活中的中介。(中介不一定是人,有可能是平台...)。定义:由于某些原因需要给某对象提供一个代理以控制该对象的访问,这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介优点:因为访问对象没有直接跟目标对象打交道,所以保护了目标对象。 代理对象可以在中间添油加醋,扩展了目标对象的功能 降低了系统的耦合度,增加了程序的可扩展性缺点:增加了类的数量 增加了系统的复杂度 因增加了一层代理,所以会增加一点请求速度代理模式结构与实现...

2021-09-23 11:43:57 139

原创 软件设计模式之路-----职责链模式

在系统中,一个事件的处理对象可能是有多个选择的。比如工作流,批准人有多种可能。我们面对这种情况可以简单的使用switch case 语句、或if else语句。但是里面的选择变动时必需得改动里面的逻辑,这违背了开闭原则。所以面对这类情况我们可以使用职责链模式责任链模式定义:为了避免请求发送者与多个请求处理者耦合在一起,于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。优点:降低了对象之间的耦合度。该模...

2021-09-14 15:56:36 119

原创 软件设计模式之路-----迭代器模式

在软件设计中,我们经常需要访问聚合对象的各个元素。因为遍历方法可能会改动。所以不能将访问方法直接写在聚合对象中,因为这会违背“开闭原则”。简单点开篇就是,想想Java中的 Collection、List、Set、Map 。他们都是使用了迭代器模式访问元素的迭代器模式定义:提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。优点:访问一个聚合对象的内容而无须暴露它的内部表示。 遍历任务交由迭代器完成,这简化了聚合类。 它支持以不同方式遍历一个聚合,甚至...

2021-09-07 12:30:58 108

原创 软件设计模式之路-----观察者模式

在系统中,当一个对象状态变化了,某些与他相关的对象也会随之发生变化。这是一种对象与对象之间的关系。例如:监测天气的气象仪检测到天气变化,那么它应该自动通知到气象台。我们将这个变化的对象(气象仪)称为观察目标,被通知变化的对象(气象台)称为观察者观察者模式定义 指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式,它是对象行为型模式。优点:降低了目标与观察者之间的耦合关系,...

2021-09-04 16:24:11 486

原创 JVM垃圾收集

JVM垃圾收集简介java有内存动态分配和垃圾收集(Garbage Collection GC)技术。内存主要分为JAVA堆、方法区,程序计数器、虚拟机栈、本地方法栈,后面三种区域的内存是线程私有的,随线程而生随线程而灭。垃圾收集器主要是堆java堆和方法区进行回收什么是垃圾垃圾是什么?垃圾收集器在对堆进行回收前,要判断哪些对象是'死去'了的。死去的即不可能再被任何途径使用的对象,怎么才能确定一个对象是否死去,这就涉及到垃圾判断算法。垃圾判断算法①引用计数算法引用计数算法的实现简

2021-09-04 16:17:33 85

原创 软件设计模式之路-----享元模式

在软件中,通常会有很多相同的角色。比如五子棋,一场对局中会有多个五子棋,若是用普通方法,一个五子棋就一个对象实例,这样将消耗大量的系统资源。像这种情况就可以使用享元模式了享元(Flyweight)模式的定义:运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似类的开销,从而提高系统资源的利用率。优点:相同对象只要保存一份,这降低了系统中对象的数量,从而降低了系统中细粒度对象给内存带来的压力。缺点:为了使对象可以共享,需要将一些不

2021-09-03 10:34:05 136

原创 软件设计模式之路-----桥接模式

在生活中,有些类会有多个维度的变化。比如用作几何图工具。会有多种形状的:三角形、矩形、圆形;也会有多种颜色。在项目中类如这样的情况,一个类存在多个维度的变化。我们可以使用桥接模式。桥接(Bridge)模式定义:将抽象与实现分离,使它们可以独立变化。他是用组合关系代替继承关系来实现,从而降低了抽象与实现这两个可变维度的耦合度。优点:抽象与实现分离,扩展能力强。 符合开闭原则 符合合成复用原则 实现细节对客户端透明桥接模式遵循了里氏替换原则和依赖倒置原则,最终实...

2021-08-30 16:09:55 295

原创 软件设计模式之路-----组合模式

组合模式跟面向对象啊设计中的"组合关系"是两码事。组合模式设计,主要用来处理树形结构数据。组合模式的定义:有时又叫作整体-部分(Part-Whole)模式,它是一种将对象组合成树状的层次结构的模式,用来表示“整体-部分”的关系,使用户对单个对象和组合对象具有一致的访问性,属于结构型设计模式。由上图可知,根节点与树枝节点本质上属于同一对象类型。都可以由树枝节点和叶子节点,都能作为容器使用。而叶子节点与树枝节点在语义上不属于用一种类型。但是在组合模式中,会把树枝节点和叶子节点看作属于同一种数据类型(

2021-08-21 17:35:52 264

原创 JVM运行时区域

方法区 Method Area线程共享的内存区域。它在虚拟机启动时就被创建,用来存放已被虚拟机啊加载的常量、类信息、静态变量、即时编译器编译后的代码。前面三个信息具有一点java基础的同学应该都清楚,但是【即时编译器编译后的代码】可能不易被理解。即时编译器 就是JIT,它是用来编译“热点代码”的,“热点代码”就是运行特别频繁方法或代码块,虚拟机会自动识别哪些是“热点代码”。 设置方法区的大小有俩个参数:-XX:PermSize -XX:MaxPermSize 内存溢出异常后面会跟随提示信息“PermGe

2021-08-21 17:19:49 102 1

原创 软件设计模式之路-----外观模式

在现实生活中,办一些复杂的事经常要经过多个部门。比如小学时报名。“去老师那报道”、“去交书本费”、“交保险费”....等等。外观模式解决的就是系统中的这类情况,当一个系统功能强大了,子系统越来越多了。客户对系统的访问也越来越多。这时如果系统内部发生改变,客户端也要跟着改变,这违背了“开闭原则”,也违背了“迪米特法则”,所以有必要为多个子系统提供一个统一的接口,从而降低系统的耦合度,这就是外观模式的目标。定义:外观(Facade)模式又叫作门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,

2021-08-02 17:09:05 134

原创 软件设计模式之路-----装饰者模式

装饰者模式定义:装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方法。装饰者模式是对原有功能增加新的功能(行为),当然,给一个类增加新功能(行为)我们可以使用继承或组合。但是单独的使用继承或组合实现将会产生大量的类,而使用装饰者模式可以在保持良好的扩展性同时避免产生大量的类。优点:装饰器是继承的有力补充,比继承灵活,在不改变原有对象的情况下,动态的给一个对象扩展功能,即插即用 通过使用不用装饰类及这些装饰类的排列组合,可以实现不同效果 装饰器模式完全遵...

2021-08-01 13:23:40 128

原创 软件设计模式之路-----适配器模式

这一节后,记录的为结构型模式的设计模式,在这里记录一下什么是结构型模式。结构型模式解决如何将类或对象按某种布局组成更大的结构,它分为类结构型模式和对象结构型模式,前者采用继承的方法来组合类或接口,后则使用聚合或组合的方式来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。在生活中经常出现两个对象因接口不一样而无法一起工作的实例,这时就需要第三则进行适配。如中国与外国的插口不一样需要转换器。只会讲中文与只会讲英文的人需要使用

2021-07-12 15:12:17 86

原创 软件设计模式之路-----原型模式

原型模式是我要介绍的最后一个创建型设计模式。在这里记录了一什么是创建型模式。创建型模式主要关注的是怎样创建对象,它的主要特点是“将对象的创建与使用分离”。这样可以降低耦合度,使用者不用关心对象是怎么创建的。原型(Prototype)模式的定义:用一个已经创建的实例为原型,通过复制该原型来创建一个与原型相同或相似的实例。这样创建对象非常高效,就像windows系统的复制粘贴一样,如何复制我们可以自行设计规则,这样就能创建出有差异的对象。优点:java自带的原型模式基于二进制流的复制,在性能

2021-07-05 12:53:21 83

原创 软件设计模式之路-----建造者模式

在软件开发过程中,有时我们要创建一个非常复杂的对象。这对象由多个部件构成,例如电脑由显示器、主机、输入设备(粗略打个比喻)构成。人的脸有鼻子、眼睛、嘴巴、眉毛、耳朵构成。像这样的对象每个部件都可以不同,但是都有这样的部件,构建的过程都是一样的,我们就可以使用建造者模式来创建这样的对象。建造者(Builder)模式的定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分

2021-06-29 15:41:43 179

原创 软件设计模式之路-----工厂模式&抽象工厂模式

系统开发和现实生活是一样的。在现实生活中一个复杂的商品都是通过一个工厂产生,具体工厂怎么产生的我们不需在乎。在软件设计上也可如此,如果一个对象的创建过程比较复杂,便可考虑使用工厂模式。简单工厂模式简单工厂模式的定义:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。按实际业务场景划分,工厂模式有 3 种不同的实现方式,分别是简单工厂模式、工厂方法模式和抽象工厂模式。我们把被创建的对象称为“产品”,把创建产..

2021-03-16 09:15:49 137

原创 软件设计模式之路-----单例模式

软件设计模式之路-----单例模式单例模式在面试中是一个高频面试题,需要多了解一点他的特性。在系统中,为了节省内存资源、保存数据一致,对某些类只能创建一个实例,这就是单例模式单例模式定义:指一个类只有一个实例,且该类能自行创建这个实例。j2ee标准中的ServletContext和ServletContextConfig、Spring框架中的ApplicationContext都是单例模式。单例模式的特点:单例模式只有一个实例对象 该实例对象必须由该单例自行创建 单例类对外提供一

2021-03-01 16:44:49 171

原创 Mybatis源码阅读准备

一、mybatis文档:https://mybatis.org/mybatis-3/zh/index.html二、 ①下载mybatis源码:https://github.com/mybatis/mybatis-3 ②因为mybatis依赖mybatis-parent所以需要下载mybatis:https://github.com/mybatis/parent三、 ①编译mybatis-parent源码:mvn cleaninstall 说明:...

2020-05-15 10:37:25 135

原创 二叉树排序

二叉树排序:(以从大到小排序为例)第一步:建堆: 无需排序,将数组按次序排成一颗完全二叉树第二步:调整->交换->取走最后一个节点(为最大值)->调整->交换->取走最后一个节点.....以此循环公共方法:class 调整: 调整就是从最后一个父节点开始,依次比较父节点和子节点大小将父节点替换成最大值;class 交换:...

2019-10-17 10:07:34 474

原创 Zookeeper集群搭建及错误排除

第一步:安装jdk环境第二步:把zookeeper的压缩包上传到服务器第三步:将zookeeper压缩包解压第四步:创建一个目录[root@localhost ~]# mkdir /usr/local/zookeeper-cloud第五步:复制三份zookeeper到刚创建的目录下[root@localhost ~]# cp -r zookeeper/usr/local/solr-clo...

2019-03-29 10:33:26 324

空空如也

空空如也

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

TA关注的人

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