自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 访问者模式

访问者模式(Visitor Pattern)是一种行为设计模式,它为对象结构提供一种方式,以独立于该结构的元素之外定义新操作。在这个例子中,访问者模式允许我们在不修改文件系统类(Directory和File)的基础上,添加新的操作(如备份)。BackupVisitor遍历文件系统,并对每个元素执行相应的操作。访问者模式(Visitor),表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。

2024-05-16 16:46:40 411

原创 解释器模式

解释器模式(interpreter).,给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题,例如:正则表达式。

2024-05-16 16:17:33 240

原创 享元模式(享元)

享元模式(Flyweight),运用共享技术有效地支持大量细粒度的对象。

2024-05-16 15:50:16 290

原创 中介者模式

中介者模式(Mediator),用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互中介者模式一般应用于一组对象以定义良好但是复杂的方式进行通信的场合,以及想定制一个分布在多个类中的行为,而又不想生成太多的子类的场合。

2024-05-16 15:16:54 261

原创 职责链模式

职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。

2024-05-16 14:03:32 279

原创 命令模式(命令)

命令模式(Command Pattern)是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求参数化其他对象。命令模式也支持撤销操作。命令模式(Command),将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤销的操作。通过命令模式,我们可以轻松地添加新的设备和控制操作,同时保持遥控器类的简洁。

2024-05-15 19:53:38 297

原创 桥接模式(合成/聚合复用原则)

关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。比方说,大雁有两个翅膀,翅膀与大雁是部分和整体的关系,并且它们的生命周期是相同的,于是大雁和翅膀就是合成关系。而大雁是群居动物,所以每只大雁都是属于一个雁群,一个雁群可以有多只大雁,所以大雁和雁群是聚合关系。在桥接模式中,抽象部分和实现部分通过继承或组合实现解耦,形成两个独立的等级结构,然后通过一个关联关系(桥)将它们连接起来。关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分:合成则是一种强的。

2024-05-14 19:49:23 319 1

原创 单例模式(饿汉+懒汉)

单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点。

2024-05-14 16:45:26 1029

原创 自定义注解为xxlJob定时任务添加监控

*** 自定义注解,用于监控XXLJob任务/*** 是否开启异常日志记录,默认开启/*** 是否开启超时日志记录,默认开启/*** 超时时长(小时),默认3小时/*** 自定义注解,用于监控XXLJob任务/*** 是否开启异常日志记录,默认开启/*** 是否开启超时日志记录,默认开启/*** 超时时长(小时),默认3小时/*** 自定义注解,用于监控XXLJob任务/*** 是否开启异常日志记录,默认开启/**

2024-05-10 13:11:31 184

原创 新老系统切换响应结果差异对比

mapper.readTree是com.fasterxml.jackson.databind.ObjectMapper类中的一个方法,它用于将JSON格式的文本转换为JsonNode对象。在Java中,你可以使用com.fasterxml.jackson.databind.ObjectMapper和com.fasterxml.jackson.databind.node.ArrayNode来遍历和比较两个ArrayNode。最后,我们遍历两个JSON对象的字段,对比它们的差异,并打印出有变化的字段。

2024-05-10 13:10:41 1004

原创 建立索引并不一定会走索引

在MySQL中,当EXPLAIN分析显示查询的type列为ALL时,这意味着全表扫描正在发生,即MySQL选择了不使用任何索引来执行查询,而是遍历表中的每一行。即使日期字段已经建立了索引,查询仍然可能不走索引,这通常由以下原因引起。

2024-05-06 19:15:59 284

原创 迭代器模式

迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。

2024-04-23 19:50:58 906

原创 组合模式(Composite)

组合模式(Composite),将对象组合成树形结构以表示部分-整体的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性Component:组合中的对象声明接口,在适当情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理Component的子部件Leaf:在组合中表示叶节点对象,叶节点没有子节点Composite:定义有枝节点行为,用来存储子部件,在Component接口中实现与子部件有关的操作,比如增加Add和删除Remove。

2024-04-23 19:31:35 1242

原创 备忘录模式

备忘录(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态Originator(发起人):负责创建一个备忘录Memento,用以记录当前时刻它的内部状态,并可使用备忘录恢复内部状态。Originator可根据需要决定Memento存储Originator的哪些内部状态Memento(备忘录):负责存储Originator对象的内部状态,并可防止Originator以外的其他对象访问备忘录Memento。

2024-04-23 19:02:35 620

原创 Redis中的管道操作pipeline

在 Redis 中,Pipeline(管道)是一种客户端与服务器间通信的优化机制,旨在减少网络往返时间和提高命令执行效率。使用 Pipeline 时,客户端不再逐条发送命令,而是将多个命令一次性打包成一个请求包发送给 Redis 服务器。相应地,服务器在接收到这个请求包后,不是立即返回每条命令的执行结果,而是先将所有命令依次执行完毕,然后将所有结果打包成一个响应包返回给客户端。这种做法显著减少了客户端与服务器之间网络通信的次数,尤其是对于需要执行大量命令的场景,能够极大地降低网络延迟带来的影响。

2024-04-23 17:18:47 763

原创 适配器模式

适配器模式(Adapter),将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。Target:这是客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口Adapter:通过在内部包装一个Adaptee对象,把源接口转换成目标接口Adeptee:需要适配的类。

2024-04-18 19:55:54 596

原创 57-SQL中WITH RECURSIVE的用法

WITH RECURSIVE 是 SQL 中的一种高级查询结构,用于执行递归查询。递归查询是一种特殊的查询方式,它能够通过反复应用一个规则或算法,逐步构建出一个结果集,常用于解决层次化或树状数据结构的遍历问题。WITH RECURSIVE 结构通常包含以下几个关键部分:WITH 关键字引入一个或多个 CTE。ECURSIVE 关键字表明至少有一个 CTE 是递归的。CTE 名称(cte_name)用于标识递归查询的临时结果集。

2024-04-18 19:09:12 1019

原创 SQL中WITH RECURSIVE的用法

WITH RECURSIVE 是 SQL 中的一种高级查询结构,用于执行递归查询。递归查询是一种特殊的查询方式,它能够通过反复应用一个规则或算法,逐步构建出一个结果集,常用于解决层次化或树状数据结构的遍历问题。WITH RECURSIVE 结构通常包含以下几个关键部分:WITH 关键字引入一个或多个 CTE。ECURSIVE 关键字表明至少有一个 CTE 是递归的。CTE 名称(cte_name)用于标识递归查询的临时结果集。

2024-04-18 18:02:48 1003

原创 状态模式(状态和行为分离)

状态模式(State),当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。当然,如果这个状态判断很简单,那就没必要用‘状态模式了Context:维护一个ConcreteState子类的实例,这个实例定义当前的状态State:抽象状态类,定义一个接口以封装与Context的一个特定状态相关的行为。

2024-04-18 09:31:57 798

原创 HttpComponentsClientHttpRequestFactory

HttpComponentsClientHttpRequestFactory 是 Spring Framework 中用来封装 Apache HttpComponents HttpClient 的一个工厂类,用于创建基于 HttpClient 的 ClientHttpRequest 实例。然而,关于默认的最大连接数,这个信息通常是由底层使用的 Apache HttpClient 的配置决定的,而不是由 HttpComponentsClientHttpRequestFactory 类本身直接设定。

2024-04-15 18:46:21 957

原创 反射+配置文件+抽象工厂模式

在这个优化后的示例中,我们将产品类型与类名的映射关系存储在配置文件中。当需要添加、修改或删除形状类型时,只需编辑配置文件,无需修改源代码。这样极大地提高了系统的可维护性和可扩展性。为了进一步优化代码,我们可以将产品类型与类名的映射关系存储在配置文件中,使得系统更易于管理和扩展。实现抽象工厂接口,利用反射和配置文件创建具体的产品对象。这里使用 java.util.Properties 类来加载配置文件。在客户端代码中,通过抽象工厂接口创建所需的产品,传入产品类型字符串。

2024-04-10 19:57:23 475

原创 反射+抽象工厂模式

定义一个抽象工厂接口,用于声明创建产品的方法。同时,定义一个静态映射表(Map),将产品类型字符串与对应的类名关联起来,以便通过反射创建对象。

2024-04-10 19:48:48 495

原创 抽象工厂模式

抽象工厂模式(Abstract Factory),提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

2024-04-10 19:34:09 471

原创 观察者模式

在这个示例中,WeatherData 类作为被观察者(Subject),维护了一组观察者(WeatherDisplay)列表,并提供了注册、移除观察者以及通知观察者的方法。观察者模式(Observer Pattern)是一种行为设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象(Subject)。当主题对象的状态发生变化时,会通知所有依赖于它的观察者对象,使它们能够自动更新状态。观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。

2024-04-08 19:57:58 727

原创 建造者模式(生成器模式)

依赖倒转原则 = 抽象不应该依赖细节,细节应该依赖于抽象对流程进行抽象,流程中具体细节依赖于这个抽象过程是稳定的,细节是不同的建造者模式(Builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

2024-04-08 19:10:40 529

原创 外观模式(面子模式)

外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用Facade 外观类知道哪些子系统类负责处理请求,将客户的请求代理给适当的子系统对象SubSystem Classes 子系统类集合实现子系统的功能,处理Facade对象指派的任务。注意子类中没有Facade的任何信息,即没有对Facade对象的引用。

2024-04-08 18:00:56 503

原创 迪米特法则

迪米特法则(Law of Demeter,LoD)也称为最少知识原则,是一种面向对象的设计原则,其核心思想是:一个对象应该对其他对象有最少的了解。具体来说,一个对象应当只与它的直接朋友(即成员变量、方法的参数、返回值)交流,不与陌生的对象通信。这样做可以降低类之间的耦合度,提高系统的可维护性和可扩展性。迪米特法则(LoD)也叫最少知识原则迪米特法则(LoD),如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。

2024-04-08 16:53:11 504

原创 模板方法模式

模板方法模式,定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤定义抽象类,并定义好具体的流程具体的流程可以选择性的是否重写,从而达到具体某个步骤不通逻辑处理的实现。

2024-04-08 16:29:23 781

原创 原型设计模式

原型模式(Prototype),用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需知道任何创建的细节深拷贝是指在复制对象时,不仅复制对象本身,还递归地复制其所有包含的引用对象,直到所有的嵌套层次的对象都被复制为止。这意味着深拷贝创建的新对象与原对象具有完全相同的结构和数据,但它们在内存中占用独立的空间,互不影响。当对任何一个对象进行修改时,都不会影响到另一个对象,因为它们的内部状态(包括所引用对象的状态)都是独立存储的。

2024-04-08 13:21:03 1143

原创 工厂方法模式

工厂方法模式(Factory Method),定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类定义了一个工厂要生产具体事物对象的接口接着就是创建了一个要生产事物的工厂接口实现工厂接口创建各自的工厂有了后就可以制作具体的电脑,比如台式电脑、笔记本电脑。

2024-04-03 19:23:27 600

原创 静态代理模式

代理模式(Poxy),为其他对象提供一种代理以控制对这个对象的访问实际应用中,代理模式可以用于权限控制、日志记录、性能监控等多种场景定义一个接口,接口中定义接口具有的功能定义一个真实的类,也就是被代理的类,这个类实现了定义的接口,拥有了属于自己的基础功能编写代理类同样实现基础接口,由于代理中把被代理类作为成员属性,所以重现方法时就能对该成员属性做增强。

2024-04-03 18:26:24 323

原创 装饰者模式

装饰模式(Decorator),动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活定义抽象装饰者与被装饰者共享的接口(其实就是提供了规范)**具体的饮料类(被装饰者)**继承了共享接口拥有了规范中定义得能力装饰者抽象类同样继承了共享接口拥有了规范中定义得能力具体得装饰者其实就是将被装饰者增强了,把装饰者作为参数传递,对传递得装饰者根据重写得方法将被装饰者增强。

2024-04-01 19:25:04 395

原创 SpringBoot+Mybatis-plus+shardingsphere实现分库分表

数据库选择:使用MySQL数据库,因为MySQL在分库分表方面有较成熟的解决方案。分库分表策略:可以采用水平分库分表的策略,根据一定的规则将数据分散存储在不同的数据库和表中,例如可以根据用户ID、订单ID等进行分片。数据分片策略:可以采用基于雪花算法的分布式ID生成器来生成全局唯一的ID,确保数据在不同数据库和表中的唯一性。数据同步:考虑到数据分散存储在不同的数据库和表中,需要实现数据同步机制来保证数据的一致性,可以使用Canal等开源工具来实现MySQL数据的实时同步。连接池优化。

2024-03-05 10:26:56 1260

原创 杂记-01

为了避免这个问题,应确保在执行任何数据库操作前,Statement对象是有效且未关闭的,并遵循最佳实践,如尽量使用预编译的PreparedStatement以减少资源消耗和潜在的并发问题,以及正确处理数据库连接和相关资源的生命周期。

2024-02-06 16:05:47 969

原创 按时间维度统计次数案例

这里使用了UNIX时间戳和UNIX_TIMESTAMP函数来将日期时间转换为秒数,然后通过FLOOR函数和乘法操作将秒数转换为每5分钟的起始时间戳,最后使用FROM_UNIXTIME函数将时间戳转换回日期时间格式。请注意,你可以根据实际情况修改表名、字段名和日期时间字段名。要按每5分钟维度统计某个字段的个数,可以使用MySQL的日期函数和聚合函数来实现。要按分钟维度统计某个字段的个数,可以使用MySQL的日期函数和聚合函数来实现。要按秒维度统计某个字段的个数,可以使用MySQL的日期函数和聚合函数来实现。

2024-02-05 18:15:03 471

原创 好用的Redisson

作为 Java 开发人员,我们若想在程序中集成 Redis,必须使用 Redis 的第三方库。而 Redisson 就是用于在 Java 程序中操作 Redis 的库,它使得我们可以在程序中轻松地使用 Redis。Redisson 在 java.util 中常用接口的基础上,为我们提供了一系列具有分布式特性的工具类。

2024-01-19 18:19:41 436

原创 1-注解初始

是一个 Java 注解,主要用于 JSR-250 规范,它提供了在依赖注入完成后执行初始化逻辑的机制。是一个用于 Java 注解的格式化注解,主要用于将日期对象格式化为特定的字符串格式。注解后,Jackson库在序列化该属性时,会使用注解中指定的格式。这使得开发者能够精确控制序列化后的JSON数据的格式,特别是对于日期和时间类型的数据。例如,假设你有一个Java类,其中包含一个Date类型的属性,你想在JSON中以特定的格式显示该日期。类型的属性,你想在 JSP 页面上以特定的格式显示这个日期。

2024-01-19 17:31:55 391

原创 编写时间类的工具类

【代码】编写时间类的工具类。

2024-01-19 17:18:46 405

原创 SpringBoot+Redisson分布式锁

*** 锁名称/*** 过期时间(单位:秒)/*** 等待时间(单位:毫秒)/*** 锁超时时间(单位:秒)/*** 是否公平锁/*** 是否尝试锁} 锁名称 * / String value();/*** 过期时间(单位:秒)/*** 等待时间(单位:毫秒)/*** 锁超时时间(单位:秒)/*** 是否公平锁/*** 是否尝试锁/*** 锁名称/*** 过期时间(单位:秒)/*** 等待时间(单位:毫秒)

2024-01-19 15:42:48 726 1

原创 SpringBoot+Redisson分布式锁

这些配置项可以帮助你更好地管理Redis集群,并确保数据的高可用性和一致性。在Redisson中,可以通过使用ClusterServersConfig类来配置这些参数,以便与Redis集群进行通信和交互。

2024-01-18 20:01:02 1050

空空如也

空空如也

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

TA关注的人

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