自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

JayCoding

记录点点滴滴

  • 博客(34)
  • 收藏
  • 关注

原创 explain各列解读

• EXPLAIN不会告诉你关于触发器、存储过程的信息或用户自定义函数对查询的影响情况• EXPLAIN不考虑各种Cache• EXPLAIN不能显示MySQL在执行查询时所作的优化工作• 部分统计信息是估算的,并非精确值• EXPALIN只能解释SELECT操作,其他操作要重写为SELECT后查看执行计划。

2023-02-17 22:42:04 161

原创 Jvm垃圾收集算法及垃圾收集器

当前虚拟机的垃圾收集都采用分代收集算法,这种算法没有什么新的思想,只是根据对象存活周期的不同将内存分为几 块。一般将java堆分为新生代和老年代,这样我们就可以根据各个年代的特点选择合适的垃圾收集算法。比如在新生代中,每次收集都会有大量对象(近99%)死去,所以可以选择复制算法,只需要付出少量对象的复制成本就可 以完成每次垃圾收集。而老年代的对象存活几率是比较高的,而且没有额外的空间对它进行分配担保,所以我们必须选 择“标记-清除”或“标记-整理”算法进行垃圾收集。

2023-02-06 11:58:39 115

原创 InnoDB引擎底层原理(上)

InnoDB引擎底层原理及Mysql8.0新增特性详解

2023-01-19 22:54:29 136

原创 数据结构与算法之----动态规划

动态规划和贪心算法类似,但是又有所区别。贪心算法是由局部最优解,推导出全局最优解。动态规划也是局部最优解,但是无法通过局部最优解推导全局最优解。

2023-01-07 11:11:30 273

原创 MySQL索引原理以及介绍

索引是一种用于快速查询和检索数据的数据结构。常见的索引结构有: B 树, B+树和 Hash。索引的作用就相当于书的目录。打个比方: 我们在查字典的时候,如果没有目录,那我们就只能一页一页的去找我们需要查的那个字,速度很慢。如果有目录了,我们只需要先去目录里查找字的位置,然后直接翻到那一页就行了。

2023-01-06 12:37:59 126 1

原创 Springboot整合gRPC实践

Springboot整合gRPC最近公司其他服务为go语言开发,这边Java服务需要进行交互,考虑到效率和系统发展的问题,因此使用了gRPC来作为rpc框架。由于基本是第一次使用Springboot集成gRPc,经过一系列的踩坑,终于完成了项目的开发,这边记录下整合方式。gRPC简介gRPC是谷歌开源的基于go语言的一个现代的开源高性能RPC框架,可以在任何环境中运行。它可以有效地连接数据中心内和跨数据中心的服务,并提供可插拔的支持,以实现负载平衡,跟踪,健康检查和身份验证。它还适用于分布式计算的最后

2020-09-01 21:39:41 5539 1

转载 策略模式(Strategy Pattern)

整体的替换算法1.基本介绍无论什么程序,其目的都是为了解决问题,而为了解决问题,我们需要编写特定算法,使用策略模式可以整体的替换算法的实现部分,即算法的具体实现不依赖于业务类,将俩者分离开,降低耦合,可以很轻松使用不同算法,或者修改算法。2.具体实例Hand类:手势类,被其他类调用,并非设计模式中角色。public class Hand { public static final ...

2019-07-06 21:59:54 146

转载 访问者模式(Visitor Pattern)

访问数据结构并处理数据数据结构中保存着许多的元素,在对这些元素处理的时候,将处理代码放入数据结构中,当每次增加或者修改处理方法时,都必须将数据结构的类进行修改,因此,我们需要用到访问者模式,数据结构和数据处理被分离出来,创建一个访问者专门来访问数据结构中的元素,把元素的处理交给访问者类,这样增加或修改时不需要改动数据结构。1.实例使用访问者模式来访问文件夹模式的数据结构Vistitor类...

2019-07-06 21:35:52 145

转载 责任链模式(Chain of Responsibility Pattern)

推卸责任1.模式介绍当外部请求程序进行某个处理,但程序暂时无法直接决定由哪个对象负责处理时,就需要推卸责任,可将多个对象组成一条职责链,然后按照他们在职责链上的顺序一个一个找出到底应该谁来负责处理。可以弱化请求方和处理方之间的关联关系,让双方各自成为都可以独立复用的组件,程序还可以应对其他需求,根据处理的对象而变化。2.具体实例Trouble类/** * @author Jay ...

2019-07-06 20:13:12 192

原创 中介者模式(Mediator Pattern)

只有一个仲裁者1.模式介绍用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立的改变它们之间的交互。使用场景:中介者模式适合用于多个对象之间紧密耦合的情况,紧密耦合的标准是:在类图中出现了蜘蛛网状结构。这有利于把蜘蛛网状结构梳理为星型结构,使原本复杂混乱的关系变得清晰简单。实际使用:中介者模式也叫调停者模式,一个对象要与N个对象交流,就...

2019-07-06 19:31:08 158

转载 备忘录模式(Memento Pattern)

保存对象状态1.基本介绍为了使软件的使用更加人性化,对于误操作,我们需要提供一种类似“后悔药”的机制,让软件系统可以回到误操作前的状态,因此需要保存用户每一次操作时系统的状态,一旦出现误操作,可以把存储的历史状态取出即可回到之前的状态。在应用软件的开发过程中,很多时候我们都需要记录一个对象的内部状态。在具体实现过程中,为了允许用户取消不确定的操作或从错误中恢复过来,需要实现备份点和撤销机制...

2019-07-06 19:01:01 247

转载 命令模式(Command Pattern)

命令也是类1.基本介绍将来自客户端的请求传入一个对象,从而使你可用不同的请求对客户进行参数化。用于==“行为请求者”与“行为实现者”解耦==,可实现二者之间的松耦合,以便适应变化。分离变化与不变的因素。在面向对象的程序设计中,一个对象调用另一个对象,一般情况下的调用过程是:创建目标对象实例;设置调用参数;调用目标对象的方法。但在有些情况下有必要使用一个专门的类对这种调用过程加以封装,我们把...

2019-07-06 18:29:42 195

转载 解释器模式(Interpreter Pattern)

语法规则也是类1.基本介绍给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子类的一览表2.具体实现Node抽象类/** * @author Jay * @date 2019/7/5 23:00 * @description 节点类 */public abstract class Node { /** * 解...

2019-07-05 23:33:47 97

转载 抽象工厂模式(Abstract Factory Pattern)

将关联零件组装成产品1.基本介绍抽象工厂是工厂方法的扩展,工厂方法一般只能生成一种实例,而抽象工厂可以生成多种实例.2.代码实现Factory:抽象工厂接口/** * @author Jay * @date 2019/7/4 22:26 * @description 抽象方法 * 抽象工厂可以生产多个抽象产品 */public interface IFactory { ...

2019-07-04 23:31:12 137

原创 享元模式(Flyweight Pattern)

共享对象,避免浪费1.基本介绍享元模式适用于需要new大量对象的情况。通过共享实例的方式避免new出实例,浪费资源。在使用享元模式的时候要注意,当共享实例修改时,将会影响使用该实例的多处地方,所以使用前需要斟酌,什么类需要使用享元模式。2.实现实例BigChar类/** * @author Jay * @date 2019/7/2 0:06 * @description 大字符...

2019-07-02 00:43:16 97

原创 代理模式(Proxy Pattern)

只在必要时生成实例代理模式可以简单的看作是有个中间人代替你进行工作,当中间人完成不了时,才会由你出马完成。1.具体实例Printable接口/** * @author Jay * @date 2019/6/29 23:40 * @description 打印接口 */public interface Printable { /** * 设置名字 *...

2019-06-30 00:12:19 168

原创 外观模式(Facade Pattern)

简单窗口外观模式是一种使用频率非常高的结构型设计模式,它通过引入一个外观角色来简化客户端与子系统之间的交互,为复杂的子系统调用提供一个统一的入口,降低子系统与客户端的耦合度,且客户端调用非常方便。1.外观模式概述在软件开发中,(Facade)来实现该功能,外观类充当了软件系统中的“服务员”,它为多个业务类的调用提供了一个统一的入口,简化了类与类之间的交互。在外观模式中,那些需要交互的业务类...

2019-06-29 23:37:37 213

原创 构建者模式(Builder Pattern)

组装复杂的实例1.基本介绍对于组件复杂的实例时,很难一气呵成,而且实例形式不定,会经常性变化,这时候就需要创建组成实例的各个部分,然后根据具体需求,分阶段将其组装起来,如同活字印刷术,或者建造建筑。2.具体实现Builder类:/** * @author Jay * @date 2019/6/25 22:41 * @description 声明编写文档方法的抽象类 */pub...

2019-06-25 23:39:25 462

原创 装饰者模式(Decorator Pattern)

装饰边框与被装饰物的一致性1.基本介绍有一个原型程序作为被装饰者,和装饰者实现同一接口,装饰者则可以去修改加强来自用接口相同的方法,这样不断的为对象添加装饰物的设计模式为装饰者设计模式。2.具体实例Display类抽象类或者接口,供装饰者和被装饰者去实现,这样装饰者就可以通过接口去装饰对象。/** * @author Jay * @date 2019/6/24 22:33 * @...

2019-06-24 23:32:52 113

原创 迭代器模式(Iterator Pattern)

一个一个遍历1.模式介绍迭代器模式(Iterator Pattern)又称为游标(Cursor)模式,是行为型设计模式之一。源于对容器的访问,比如java中的list,Map,数组等,我们知道对容器对象的访问必然是多种多样的,所以我们把遍历的方法封装在容器中,或者不提供遍历方法。如果我们将遍历的方法封装到容器中,那么对于容器类来说就承担了过多的功能,容器类不仅要维护自身内部的数据元素而且...

2019-06-23 21:03:30 187

原创 观察者模式(Observer Pattern)

发送状态变化的通知1.基本介绍在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新。当一个抽象模型有两个方面,其中一个方面依赖于另一个方面。当对一个对象的改变需要同时改变其它对象,而不知道具体有多少个对象待改变。当一个对象必须通知其它对象,而它又不能假定其它对象是谁。换句话说,你不希望这些对象是紧密耦合的。结构图:2.主要角色抽象被观察者...

2019-06-22 22:53:27 237

原创 组合模式(Composite Pattern)

容器与内容的一致性1.基本介绍该模式用于创造出像文件夹和文件这样的结构,使容器与内容具有一致性,创造出递归模式,就如同文件夹中可以存入文件,也可以存入文件夹,而查找的时候,都可以获得其条目名。2.具体实现类的一览表类图Entry类:是一个制定规则的抽象类,定义了共有的方法./** * @author Jay * @date 2019/6/6 23:11 * @descr...

2019-06-07 00:12:01 906

原创 状态模式(State Pattern)

用类表示状态1.基本介绍状态模式使用对象的形式来记录某种状态。使用状态模式可以省去多个if-else或者是switch的判断。可以直接使用对象方法的形式来处理逻辑。我们在编写代码的时候,遇到大量的条件判断的时候,可能会采用策略模式来优化结构,因为这时涉及到策略的选择,但有时候仔细查看下,就会发现,这些所谓的策略其实是对象的不同状态,更加明显的是,对象的某种状态也成为判断的条件。2.实例分...

2019-06-05 23:18:42 481

原创 桥接模式(Bridge Pattern)

将类的功能层次结构与实现层次结构分离1.基本介绍将类的功能层次结构和类的实现层次结构连接起来。类的功能层次结构:希望增加新的功能,例如有一个Something类,想在其中增加新的功能时,一般会写一个子类,这就构成了类层次结构.为了增加功能而产生的层次结构。当增加新的功能时,从各个层次中找出符合自己需求的类,以它为父类编写子类,并在子类中增加新的功能。父类具有基本功能子类中增加新的功...

2019-06-04 23:52:07 363

原创 原型模式(Prototype Pattern)

通过复制生成实例1.使用背景开发中通常通过new关键字生成实例,必须指定类名,然而在下边情况下,在 不指定类名的情况下生成实例,根据现有的实例生成新的实例。对象种类繁多,无法将其整合到同一个类中难以根据类生成实例.生成实例的过程太复杂,很难根据类来生成实例.比如用户想生成和之前用户生成实例完全一样的实例时,由于生成过程复杂,很难保证完全一致,所以可以保存之前的实例,然后通过复制来...

2019-06-04 00:03:00 185

原创 适配器模式(Adapter Pattern)

加个"适配器"以便于复用1.使用情况在程序世界中,经常存在现有的程序无法直接使用,需要适当的变化才能使用.这种用于填补俩个程序之间差异的设计模式就是适配器模式。适配器模式分为以下俩种:类适配器模式(使用继承的适配器)->类和接口对象适配器模式(使用委托的适配器)->俩个类2.类适配器程序类图Banner类/** * @author Jay * @date...

2019-05-23 23:42:28 219

原创 模板方法模式(Template Method Pattern)

将具体处理交给子类1.基本介绍父类定义处理流程的框架,在子类实现中具体处理模板方法设计模式是指带有模板功能的模式,组成模板的方法被定义在父类中。这些方法都是抽象方法,所以只查看父类的代码无法知道这些方法最终会进行如何的具体处理。只能知道父类是如何去调用这些方法实现以上抽象方法的就是子类.子类中实现了抽象方法也就是决定了具体的处理。也就是说,只要不同的子类实现不同的具体处理,当父类中的模板方...

2019-05-22 23:12:05 167

原创 工厂方法模式(Factory Method Pattern)

将实例的生成交给子类1.基本介绍模板设计模式中,父类规定处理的流程,在子类中实现具体处理,如果该模式用于生成实例对象,它就演变为工厂设计模式。工厂方法模式中:父类决定实例的生成方式,但并不决定所要生成具体的类,具体的处理全部交给子类负责。 这样就可以将生成实例的框架和负责生成实例的类解耦。2.实现过程类的一览表名字说明Product只定义抽象方法 use 的抽象类...

2019-05-21 23:10:12 142

原创 单例模式(Singleton Pattern)

只有一个实例1.单例模式特点一个类有且仅有一个实例,并且自行实例化向整个系统提供。通过使用设计模式可以让我们的代码复用性更高,可维护性更高,让你的代码写的更优雅2.单例模式的实现2.1 饿汉模式饿汉式会提前进行实例化,没有延迟加载,不管是否使用都会有一个已经初始化的实例在内存中,但不会出现懒汉式中的多线程问题。/** * @author Jay * @date 2019/5/16 ...

2019-05-16 23:52:33 97

原创 设计模式总述

1.设计模式定义​ 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设计模式可以完美的解决很多问题,每种模式...

2018-12-28 22:47:07 174

转载 Java常用锁

1.常见的锁Synchronized和LockSynchronized:非公平,悲观,独享,互斥,可重入的重量级锁ReentrantLock:默认非公平但可实现公平的,悲观,独享,互斥,可重入,重量级锁。ReentrantReadWriteLoc: 默认非公平但可实现公平的,悲观,写独享,读共享,读写,可重入,重量级锁。1.1 ReentrantLock与synchronized 的...

2018-12-27 23:08:04 667

转载 分布式事务

1.分布式事务协议1.1 俩阶段提交协议2PC分布式系统的一个难点是如何保证架构下多个节点在进行事务性操作的时候保持一致性。为实现这个目的,二阶段提交算法的成立基于以下假设:该分布式系统中,存在一个节点作为协调者(Coordinator),其他节点作为参与者(Cohorts)。且节点之间可以进行网络通信。所有节点都采用预写式日志,且日志被写入后即被保持在可靠的存储设备上,即使节点损坏...

2018-12-24 22:14:36 120

转载 Java内存管理

1.物理内存以及虚拟内存在java中,分配内存和回收内存都由JVM自动完成,甚至不需要写和内存相关的代码物理内存即RAM还有寄存器(一种存储单元,用于存储计算机单元执行指令(如整形浮点等运算)的中间结果)是处理器通过地址总线连接的。地址总线:其宽度决定了一次可以存寄存器或者RAM中获取多少个bit和处理器最大的可以寻址的范围,每个地址会引用一个字节,所以如果是32位的总线则可以有4G的内存空...

2018-12-24 22:04:54 208

转载 MySQL常用优化

MySQL优化1. SQL语句优化对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by涉及的列上建立索引 .避免在 where 子句中使用 !=或<> 操作符,否则将引擎放弃使用索引而进行全表扫描 .避免在 where 子句中对字段进行 null 值 判断,否则将导致引擎放弃使用索引而进行全表扫描 .s...

2018-12-19 21:26:29 192

空空如也

空空如也

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

TA关注的人

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