- 博客(20)
- 收藏
- 关注
原创 谈谈责任链模式
责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它允许你将请求沿着处理链传递,并且每个处理者都有机会处理请求或将其传递给下一个处理者。这种模式的核心思想是将请求的发送者和接收者解耦,从而增强系统的灵活性。:定义了一个处理请求的接口,通常包含一个处理方法(handle),以及一个设置下一个处理者的方法(setNext)。:实现了抽象处理者接口,负责处理请求。如果可以处理请求,则处理请求并结束责任链;如果无法处理请求,则将请求传递给下一个处理者。
2024-03-01 09:25:17
753
1
原创 谈谈策略模式
策略模式(Strategy Pattern)是一种行为型设计模式,它定义了一系列算法,并将每个算法封装成单独的对象,使它们可以相互替换。策略模式让算法的变化独立于使用算法的客户端。策略模式涉及三个核心角色: 策略接口(Strategy Interface):定义了所有支持的算法的通用接口。它可以是抽象类或者接口,通常包含一个执行算法的方法。 具体策略类(Concrete Strategies):实现了策略接口,提供了具体的算法实现。 上下文(Context):维护一个对策略对象
2024-03-01 09:17:58
398
1
原创 谈谈适配器模式
适配器模式(Adapter Pattern)是一种结构型设计模式,用于将一个类的接口转换成客户端期望的另一个接口。它允许不兼容接口的类能够一起工作,而无需修改其原始代码。目标接口(Target):客户端所期待的接口,适配器通过实现这个接口,使得客户端能够使用目标接口与适配器交互。适配器(Adapter):实现了目标接口,并且包含一个被适配的对象(被适配者)。适配器将客户端的请求转换为被适配者的相应形式。被适配者(Adaptee):需要被适配的接口或类。适配器模式主要有两种实现方式:类适配器和对象适配器。
2024-03-01 09:04:06
378
1
原创 谈谈建造者模式
建造者模式(Builder Pattern)是一种创建型设计模式,用于构建复杂对象。它允许你创建一个独立的建造者对象,负责构建一个复杂对象的各个部分,然后将这些部分组装成一个完整的对象。这种模式的主要目的是将一个对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。产品(Product):要构建的复杂对象。抽象建造者(Builder):定义了构建产品的接口,包括构建产品各个部分的方法。具体建造者(Concrete Builder)
2024-03-01 08:48:25
322
1
原创 谈谈cglib动态代理
与Java标准库中的动态代理不同,CGLIB不需要接口,它能够直接代理类。CGLIB通过生成目标类的子类来实现代理,因此在调用代理方法时,不需要通过反射调用,而是直接调用子类中的方法。与Java标准库中的动态代理需要目标类实现接口不同,CGLIB可以直接代理普通的类。由于CGLIB是通过生成子类来代理目标类,因此在性能上通常比Java标准库中的动态代理更快。JDK动态代理只能代理实现了接口的类,而CGLIB可以代理普通的类,无需实现接口。这使得CGLIB更加灵活,可以代理更多类型的类。
2024-03-01 08:17:53
866
1
原创 什么是SPI?SPI和API有什么不同?
服务接口(Service Interface):定义了服务的契约,描述了服务提供的功能和方法。通常是一个 Java 接口。提供者(Provider):实现了服务接口的具体类,提供了服务的具体实现逻辑。服务提供者注册(Service Provider Registration):服务提供者将自己的实现注册到系统中,使得系统能够发现并使用这些服务提供者。服务加载(Service Loading):系统根据配置或约定,加载并实例化服务提供者的实现类,以便在运行时使用。
2024-02-27 20:54:23
1237
原创 简单谈谈主键查询,全表扫描和索引下推
最后聊聊索引下推,索引下推(Index Condition Pushdown)是一种优化技术,用于在数据库执行查询时将部分过滤条件下推到索引层级进行处理,从而减少需要检索的数据量。具体来说,当一个查询中包含了多个条件时,数据库会尽可能地利用索引来过滤数据,而不是先检索出所有满足第一个条件的记录,然后再逐一应用后续的条件。不难发现,name字段的索引是失效的,这时数据库可以利用索引下推来优化这个查询。这样,通过索引下推,数据库可以在索引层级就进行部分过滤,避免了不必要的数据检索和处理,从而提高了查询性能。
2024-02-27 11:15:03
552
原创 谈谈java的动态代理机制
Java 的动态代理机制允许在运行时创建动态代理类和对象,这些代理类和对象在运行时生成,而不是编译时。动态代理是通过 Java 反射机制实现的,它可以实现在不修改原始类的情况下,对方法进行增强、拦截或者修改。Proxy和。Proxy 类类是所有动态代理类的父类,它提供了创建动态代理对象的静态方法。这个方法接受三个参数:一个类加载器(ClassLoader)、一个要实现的接口数组和一个接口的实现类对象。InvocationHandler 接口接口中只有一个方法invoke()
2024-02-25 12:48:57
1094
1
原创 谈谈命令模式
命令模式是一种行为型设计模式,它将请求封装成一个对象,从而允许使用不同的请求、队列或者日志请求来参数化其它对象。命令模式也支持可撤销的操作。
2024-02-25 12:22:29
819
1
原创 谈谈工厂模式
提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。这种模式通常以一组工厂类的方式实现,每个工厂类负责创建一组相关的产品。
2024-02-25 10:41:09
782
1
原创 谈谈单例模式
单例模式是一种常见的设计模式,用于确保一个类只有一个实例,并提供全局访问点。单例模式通常在需要限制某个类的实例数量,或者需要共享某个资源的情况下使用。
2024-02-25 10:21:03
359
1
原创 前端JSON.parse()和hutool工具类JSON.parse()区别
最近在做一个BI项目,需要将AI生成的代码转换成json对象传递到前端,前端和后端处理其实都可以,但是这两者还是有所不同,前端的JSON.parse()需要传递的参数必须严格遵守json语法,比如双引号不能是单引号。例如下面这种利用前端json工具就不能顺利转成json对象。但如果是使用hutool工具类JSON.parse(),倒是增加了容错率,即便是普通的js代码,也可以转换。必须是形如以下格式的标准版json语法,才能正确转为json对象。
2023-12-07 15:58:38
434
1
原创 Vue: Cannot find module xxx or its corresponding type declarations.报错解决
在vite-env.d.ts中加入以下配置信息即可。简单记录下用Vue3创建项目爆红而采取的解决方案,
2023-09-30 09:06:58
3780
原创 java基础知识整理(二)
AQS是一个用来构建锁和同步器的框架,使用AQS能简单且高效地构造出应用广泛的大量的同步器,比如我们提到的ReentrantLock,Semaphore,其他的诸如ReentrantReadWriteLock,SynchronousQueue,FutureTask等等皆是基于AQS的。独占(只有一个线程能访问执行,又根据是否按队列的顺序分为公平锁和非公平锁,如共享(多个线程可同时访问执行,如Semaphore可以看成是组合式,允许多个线程同时对某一资源进行读可重入。
2023-09-15 21:21:47
45
原创 java基础知识整理(一)
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
2023-09-13 20:10:36
62
2
原创 @MapperScan 和 @ComponentScan 区别
是 Spring Boot 中两个不同的注解,它们用于不同的目的,尽管它们都涉及到包的扫描和组件的自动装配。
2023-09-05 18:58:45
1799
原创 Node Version Manager(NVM)的使用方式
nvm node_mirror [url]:设置node镜像,默认是https://nodejs.org/dist/。如果不写url,则使用默认url,设置后可至安装目录settins.txt中查看,国内镜像地址https://npm.taobao.org/mirrors/node/nvm npm_mirror [url]:设置npm镜像地址,默认是https://github.com/npm/cli/archive/,国内镜像地址:https://npm.taobao.org/mirrors/npm/
2023-09-04 21:22:10
79
1
原创 谈谈IDEA升级JDK版本可能会遇到的坑
此时会发现项目已经编译正常,感觉还顺利的,然后运行了一下代码,结果非常的surprise!后面终于发现,原来idea进行build代码时,还需要进行compiler。今天有业务代码需要用到jdk17的api,遂对IDEA的jdk进行了升级。我不是已经将jdk17载入进来了吗?第二步:在SDKs进行Add Jdk。第三步:在项目中载入jdk版本。第一步:安装jdk17。
2023-08-31 16:37:57
278
原创 线程的生命周期
然而整个线程的生命周期不总是一帆风顺的,如果遇到阻塞,比如执行sleep()或者其他阻塞式方法,那么就会失去执行资格和执行权。即便阻塞时间结束,也还需要重新回到就绪状态,抢夺CPU的执行权。就绪:不断抢夺CPU的执行权,有执行资格,但没有执行权。运行:有执行资格,有执行权。新建→就绪→运行→死亡。死亡:线程死亡变成垃圾。
2023-08-30 20:51:55
40
原创 Windows控制台出现乱码解决方案
之前在启动Tomcat或者查看jdk版本的时候,控制台总是显示一堆乱码,一番折腾后终于解决。1.在控制台输入命令chcp查看当前编码,如果是936那么是正常的。2.打开控制面板,找到区域,再找到管理,修改成中文简体。
2023-08-28 10:21:16
263
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人