自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

学习技术的路上不断沉淀自己

Java, SQL, Spring, 微服务, 分布式, JavaScript, React

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

原创 策略设计模式

策略类的定义比较简单,包含一个策略接口和一组实现这个接口的具体策略类。因为所有的策略类都实现相同的接口,所以客户端代码基于接口而非实现编程,可以灵活地替换不同的策略。// 策略接口// 具体策略A@Override//具体的算法...// 具体策略B@Override//具体的算法...提到 if-else 分支判断,有人就觉得是烂代码。如果 if-else 分支判断不复杂、代码不多,并没有任何问题,毕竟 if-else 分支判断几乎是所有编程语言都会提供的语法。

2024-03-10 18:27:23 967

原创 模板设计模式

模板方法设计模式( Template Method Design Pattern )

2024-03-03 17:50:47 1311

原创 观察者设计模式

观察者模式是一种行为设计模式,允许对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都会得到通知并自动更新。在这种模式中,发生状态改变的对象被称为“主题”(Subject),依赖它的对象被称为“观察者”(Observer)。所以观察者模式(Observer Design Pattern)也被称为发布订阅模式被依赖的对象叫作被观察者(Observable),依赖的对象叫作观察者(Observer)。

2024-01-10 21:58:36 1210

原创 享元设计模式

所谓“享元”,顾名思义就是被共享的单元。它是一个不怎么常用的设计模式,享元模式的意图是复用对象,节省内存,前提是享元对象是不可变对象。当一个系统中存在大量重复对象时,如果这些重复的对象是不可变对象,就可以利用享元模式将对象设计成享元,在内存中只保留一份实例,供多处代码引用。这样可以减少内存中对象的数量,起到节省内存的目的。实际上,不仅仅相同对象可以设计成享元,对于相似对象,我们也可以将这些对象中相同的部分(字段)提取出来,设计成享元,让这些大量相似对象引用这些享元。这里的“

2023-12-26 22:26:52 1069

原创 组合设计模式

(Composite Pattern)是一种结构型设计模式。在组合模式中,每个对象都有相同的接口,这使得客户端不需要知道对象的具体类型,而只需要调用对象的通用接口即可。会将一组对象组织(Compose)成树形结构,以表示一种“部分 - 整体”的层次结构。组合让客户端(在很多设计模式书籍中,“客户端”代指代码的使用者)可以统一单个对象和组合对象的处理逻辑。下面是一个简单的组合模式示例代码,用于表示文件系统中的文件和文件夹。Component(抽象构件),定义文件系统的抽象接口。

2023-12-25 22:21:48 1029

原创 门面设计模式

门面模式,也叫外观模式,英文全称是 Facade Design Pattern。门面模式为子系统提供一组统一的接口,定义一组高层接口让子系统更易用。门面模式(Facade Pattern)是一种结构型设计模式,它为一组复杂的子系统提供了一个简单的接口,使得子系统更容易使用和理解。在 Java 中,门面模式通常使用一个门面类(Facade Class)来包装一个或多个复杂的子系统,使得客户端只需要和门面类交互,而不需要直接与子系统交互。

2023-12-24 16:15:36 1632

原创 适配器设计模式

适配器设计模式(Adapter Design Pattern)是一种结构型设计模式,用于解决两个不兼容接口之间的问题。适配器允许将一个类的接口转换为客户端期望的另一个接口,使得原本由于接口不兼容而不能一起工作的类可以一起工作。适配器模式的主要目的是:在不修改现有代码的情况下,使不兼容的接口能够协同工作。通过引入适配器角色,客户端可以使用目标接口与需要适配的类进行通信,从而实现解耦和扩展性。类适配器和对象适配器。

2023-12-23 22:55:50 1063

原创 桥接设计模式

桥接模式(Bridge Pattern)是一种结构型设计模式,用于将抽象与其实现相分离,以便两者可以独立地进行变化,实现了抽象和具体实现的解耦。

2023-12-20 21:08:49 994

原创 装饰器设计模式

装饰器设计模式(Decorator)是一种结构型设计模式,它允许动态地为对象添加新的行为。它通过创建一个包装器来实现,先将对象放入一个装饰器类中,再将装饰器类放入另一个装饰器类中,以此类推,形成一条包装链。这样可以在不改变原有对象的情况下,动态地添加新的行为或修改原有行为。在 Java 中,实现装饰器设计模式的步骤如下:(1)定义一个接口或抽象类,作为被装饰对象的基类(2)定义一个具体的被装饰对象,实现基类中的方法(3)定义一个抽象装饰器类,继承基类,并将被装饰对象作为属性。

2023-12-18 21:55:37 1101

原创 代理设计模式

创建一个接口,定义代理类和被代理类共同实现的方法创建被代理类,实现这个接口,并且在其中定义实现方法创建代理类,也要实现这个接口,同时在其中定义一个被代理类的对象作为成员变量在代理类中实现接口中的方法,方法中调用被代理类中的对应方法通过创建代理对象,并调用其方法,方法增强这样,被代理类的方法就会被代理类所覆盖,实现了对被代理类的增强或修改。

2023-12-12 22:42:47 520

原创 原型设计模式

在Java编程中,浅拷贝是指在复制对象时,只复制对象的基本数据类型的值和引用类型的地址,不复制引用类型指向的对象本身。浅拷贝可以用于一些简单的场景,例如对象的基本属性不包含其他对象的引用类型,或者不需要修改对象引用类型所指向的对象。

2023-12-03 22:38:58 208

原创 建造者设计模式

Builder 模式,中文翻译为建造者模式或者构建者模式,也有人叫它生成器模式。建造者模式是用来创建一种类型的复杂对象,通过设置不同的可选参数,“定制化”地创建不同的对象。我们以文档编辑器为例,假设我们需要创建一个复杂的HTML文档,它包含了标题、段落和图像等元素。我们可以使用创建者设计模式来构建HTML文档。

2023-11-26 22:26:36 490

原创 工厂设计模式

为创建一组相关或者相互依赖的对象提供一个接口,而且无须指定他们的具体类。抽象工厂模式是工厂方法模式的升级版本,在有多个业务品种、业务分类时,通过抽象工厂模式生产需要的对象。在简单工厂和工厂方法中,往往只需要创建一种类型的产品,但是如果需求改变,需要增加多种类型的产品,即增加产品族,假设需求是创建各种类型的资源,我们在上面案例的基础上再增加一个维度,如图片资源、视频资源、文本资源等。

2023-11-19 23:01:05 741

原创 单例设计模式

单例设计模式(Singleton Design Pattern), 一个类只允许创建 一个对象(或者实例),那这个类就是一个单例类,这种设计模式称为单例设计模式,简称单例模式。

2023-11-19 22:54:05 311

原创 软件设计原则

软件设计原则,更好的设计我们的应用。

2023-10-08 22:48:04 628

原创 chapter15:springboot与监控管理

通过引入, 可以使用SpringBoot为我们提供的准生产环境下的应用监控和管理功能。我们可以通过http, jmx, ssh协议来进行操作,自动得到审计、健康及指标信息等。引入;通过http方式访问监控端点;可进行shutdown (post提交,此端点默认关闭);端点名描述autoconfig所有自动配置信息审计事件beans所有Bean的信息所有配置属性dump线程状态信息env当前环境信息health应用健康状况info当前应用信息metrics。

2023-08-08 22:53:00 396

原创 chapter14:springboot与安全

Spring Security, shiro等安全框架。主要功能是”认证“和”授权“,或者说是访问控制。认证(Authentication)是建立在一个声明主体的过程(一个主体一般指用户,设备或一些可以在你的应用程序中执行动作的其他系统)。授权(Authorization)指确定一个主体是否允许在你的应用程序执行一个动作的过程。为了抵达需要授权的店, 主体的身份已经有认证过程建立。这里我们使用Spring Security练习。

2023-08-06 23:56:48 647

原创 chapter13:springboot与任务

定义MailProperties内容,配置在application.properties中;MailProperties中封装了mail相关的配置属性,可以在application.properties配置文件中修改配置。并不是直接从zhangsan@qq.com发送到lisi@163.com,中间需要经过各自的邮箱服务器的通信才能发送邮件。使用注解 @Async 开启一个异步线程任务, 需要在主启动类上添加注解@EnableAsync开启异步配置;quartz框架不一样,1表示周日;

2023-08-06 15:33:59 434

原创 chapter12:SpringBoot与检索

我们的应用经常需要添加检索功能,开源的是目前全文搜索引擎的首选。他可以快速的存储、搜索和分析海量数据。SpringBoot通过整合Spring Data ElasticSearch为我们提供了非常便捷的检索功能支持。ElasticSearch是一个分布式搜索服务,提供Restful API, 底层基于Lucene,采用多shard(分片)的方式保证数据安全,并且提供自动resharding的功能,github等大型站点也是采用了ElasticSearch作为其搜索服务。

2023-07-24 22:22:39 372

原创 chapter11:SpringBoot与消息

(1)大多数应用中,可通过消息服务中间件来提升系统异步通信、扩展解耦能力;(2)消息服务中两个重要概念:消息代理(message broker)和目的地(destination);​ 当消息发送者发送消息以后,将由消息代理接管,消息代理保证消息传递到指定目的地。(3)消息队列主要有两种形式的目的地队列(queue):点对点消息通信;消息发送者发送消息,消息代理将其放入一个队列中,消息接收者从队列中获取消息内容,消息读取后被移出队列;消息只有唯一的发送者和接受者,但并不是说只能有一个接收者;

2023-07-19 22:47:43 219

原创 chapter10:SpringBoot与缓存

配置自定义KeyGenerator, 只需要实现KeyGenerator接口,重写generate方法,返回的就是自定义的key;/**lambda表达式风格简化了匿名内部类的实现。/*** 自定义KeyGenerator。

2023-07-13 23:25:33 561

原创 chapter9: SpringBoot自定义Starter

这个自定义starter的场景需要用到哪些依赖?如何编写自定义starter的自动配置?查看springboot提供的已有starter组件的自动配置类,基本使用了下面的注解去实现一个自定义starter组件自动配置类。

2023-06-18 15:34:36 1071

原创 chapter8:SpringBoot启动配置原理

SpringBoot应用从主启动类启动后的运行流程主要包含下面几个要点:(1)准备环境执行ApplicationContextInitializer#initialize()方法;监听器SpringApplicationRunListener回调contextPrepared方法加载主配置类定义信息监听器SpringApplicationRunListener回调contextLoaded方法;(2)刷新启动IOC容器扫描加载所有容器中的组件;

2023-06-17 23:50:03 1033

原创 Chapter7: SpringBoot与数据访问

Spring Data项目简化了基于Spring框架应用的数据访问技术,包括非关系型数据库、Map-Reduce框架、云数据服务等,另外也包含对关系数据库的访问支持。Spring Data为我们提供使用统一的API来对数据访问层进行操作;这主要是Spring Data Commons项目来实现的。Spring Data Commons让我们在使用关系型或非关系型数据访问技术时都基于Spring提供的统一标准,标准包含了CRUD(创建、获取、更新、删除)、查询、排序和分页的相关操作。

2023-06-11 15:44:12 698

原创 chapter6:SpringBoot与Docker

Docker是一个开源的轻量级应用容器引擎, 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到Linux机器中实现虚拟化。(沙箱机制)Docker支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像。运行中的这个镜像称为“容器”,容器启动非常快速。类似windows系统里面的ghost镜像操作系统,安装好后什么都有了。

2023-05-28 22:37:07 752

原创 Chapter5: SpringBoot与Web开发2

在后置处理器中,从容器中获取所有的EmbeddedServletContainerCustomizer定制器,调用定制器的customize定制方法设置配置属性, ServerProperties#customize设置servlet相关配置.TomcatEmbeddedServletContainerFactory容器工厂对象创建,后置处理器发现是嵌入式Servlet容器工厂,就获取所有的定制器先定制Servlet容器的相关配置。5)web的IOC容器会创建嵌入式的Servlet容器工厂;

2023-05-24 22:00:38 693

原创 IDEA启动外部tomcat报异常:javax.management.InstanceNotFoundException: Catalina:type=Server

环境:Windows11系统,IDEA2023.1.1, apache-tomcat-9.0.0.M9一直卡在。

2023-05-21 23:16:48 1335 2

原创 Chapter4: SpringBoot与Web开发1

尚硅谷SpringBoot顶尖教程1. web准备首先创建SpringBoot应用,选择我们需要的模块;SpringBoot已经默认将这些web场景配置好了,只需要在配置文件中指定少量配置就可以运行;web场景, SpringBoot帮我们配置了什么?能不能修改?能修改哪些配置?能不能扩展?WebMvcAutoConfiguration:帮我们给容器中自动配置web组件WebMvcProperties:封装配置文件的内容最后自己编写业务代码即可.2. SpringBoot对静态资源的

2023-05-14 16:53:09 691

原创 Chapter3: SpringBoot与日志

SpringBoot中的日志框架整合

2023-03-18 20:45:04 540

原创 Chapter2 : SpringBoot配置

SpringBoot全局的配置文件

2023-03-12 21:14:50 1247

原创 Chapter 1: SpringBoot入门

SpringBoot用来简化Spring应用开发, 约定大于配置, 去繁从简, just run就能创建一个独立的、产品级的应用。背景:J2EE笨重的开发,繁多的配置,低下的开发效率,复杂的部署流程, 第三方技术集成难度大。spring全家桶时代。SpringBoot ➡ J2EE一站式解决方案。SpringCloud ➡ 分布式整体解决方案。快速创建独立运行的Spring项目以及与主流框架集成;使用嵌入式的Servlet容器,应用无需打成WAR包;starters起步依赖与版本控制;

2023-03-12 21:05:38 278

原创 RocketMQ专题03

实际应用中要结合业务场景,合理设置刷盘方式和主从复制方式, 尤其是SYNC_FLUSH方式,由于频繁地触发磁盘写动作,会明显降低性能。通常情况下,应该把Master和Save配置成ASYNC_FLUSH的刷盘方式,主从之间配置成SYNC_MASTER的复制方式,这样即使有一台 机器出故障,仍然能保证数据不丢,是个不错的选择。......

2022-08-16 22:30:10 219

原创 RocketMQ专题02

B站视频:黑马程序员RocketMQ系统精讲 P35 - P88手敲shop源码: 代码地址模拟电商网站购物场景中的【下单】和【支付】业务。用户提交订单后,扣减库存成功,扣减优惠券成功,使用余额成功; 但是在确认订单操作失败, 需要对库存,优惠券,余额进行回退。如果保证数据的完整性?UML图, 使用MQ保证在下单失败后系统数据的完整性。用户通过第三方支付平台(支付宝,微信)支付成功后,第三方支付平台要通过回调API异步通知商家支付系统用户的支付结果, 支付系统根据支付结果修改订单状态、记录支付日志和给

2022-08-14 23:37:57 1374

原创 IDEA中实现Mapper接口到映射文件xml的跳转

在mapper接口中的方法,需要定位到mapper映射xml文件中位置时,只能全局搜索或打开mapper映射xml文件内搜索,有没有什么方式可以直接鼠标点击mapper接口方法,就能快速定位到mapper映射xml文件的id位置呢?经过一番搜索,发现了一款好用的插件.......

2022-07-27 21:36:33 10824

原创 RocketMQ专题01

B站视频:黑马程序员RocketMQ系统精讲 P1 - P34消息队列是一种"先进先出"的数据结构. Message Queue其应用场景主要包含以下3个方面应用解耦系统的耦合性越高, 容错性就越低。 以电商应用为例,,用户创建订单后,如果耦合调用库存系统,、物流系统,、支付系统, 任何一个子系统出现了故障或者因为升级等原因暂时不可用, 都会造成下单操作异常, 影响用户使用体验。使用消息队列解耦, 系统的耦合性就降低了。比如物流系统发生故障, 需要几分钟才能修复, 在这段时间内, 物流系统要处理的

2022-06-20 21:01:11 1012 1

转载 Notepad++下载安装NppFtp插件

1.下载NppFTP https://sourceforge.net/projects/nppftp/files/latest/download 2.解压压缩包 你解压后会得到两个目录bin和doc,那个doc不用管,然后你需要将bin文件夹命名为NppFTP文件夹,注意一定不...

2022-05-26 22:27:54 1007

原创 深入RocketMQ原理

第1章 RocketMQ概述一、MQ概述1 、MQ简介MQ,Message Queue,是一种提供消息队列服务的中间件,也称为消息中间件,是一套提供了消息生产、存储、消费全过程API的软件系统。消息即数据。一般消息的体量不会很大。B站视频: 【尚硅谷】RocketMQ教程丨深度掌握MQ消息中间件2 、MQ用途从网上可以查看到很多的关于MQ用途的叙述,但总结起来其实就以下三点。限流削峰MQ可以将系统的超量请求暂存其中,以便系统后期可以慢慢进行处理,从而避免了请求的丢失或系统被压垮。

2022-05-24 21:28:17 1362

原创 Redis高级2

个人博客欢迎访问个人博客: https://www.crystalblog.xyz/备用地址: https://wang-qz.gitee.io/crystal-blog/1. 简介Redis前面的基础部分此处不做记录 , 本篇记录狂神说讲解的Redis配置及高级应用的知识.Redis官网Redis中文网https://redis.com.cn/http://www.redis.cn/https://www.redis.net.cn/2. 特殊数据类型2.1 geospatial 地理

2022-04-22 20:02:45 1352

原创 Redis高级1

个人博客欢迎访问个人博客: https://www.crystalblog.xyz/备用地址: https://wang-qz.gitee.io/crystal-blog/简介Redis前面的基础部分此处不做记录 , 本篇记录周阳老师讲解的Redis配置及高级应用的知识.尚硅谷-周阳思维导图链接: https://pan.baidu.com/s/1jY8bh8D0MN_4WN1hqwIQeQ提取码: ezog课件,别感谢我!B站视频: 尚硅谷超经典Redis教程,redis实战,阳哥版从

2022-04-05 20:57:11 2587

原创 Redis学习笔记2

个人博客欢迎访问个人博客: https://www.crystalblog.xyz/备用地址: https://wang-qz.gitee.io/crystal-blog/1. Redis入门1.1 Redis简介B站视频: https://www.bilibili.com/video/BV1CJ411m7Gc?spm_id_from=333.1007.top_right_bar_window_custom_collection.content.click1.1.1 Redis引入2007年1

2022-03-20 10:48:41 2963

空空如也

空空如也

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

TA关注的人

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