自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 多线程压缩ZIP文件

工作过程中,可能会遇到有需要生成压缩包的需求,而生成压缩包,一般速度不快,比较影响效率,所以一般会考虑使用多线程进行压缩。本文就多线程压缩方式进行以下介绍多线程压缩一般分为两种方式。

2023-11-15 10:31:59 1326

原创 Code Former安装及使用

Code Former项目已经在Github开源了,直接访问github项目地址,即可看到Readme文件中,对项目构建、使用的简介。Code Former整体流程大概可分为安装Python安装Git安装PyTorchclone源码安装源码所需依赖库编译源码安装人脸修复AI模型使用下面对这几个具体流程进行详细说明。

2023-11-13 17:08:26 49444 10

原创 Spring本地jar包依赖项目改为maven依赖

我们在做项目的时候,可能会偶尔接手较为古老的项目,这些项目使用了较为老旧的版本管理或依赖管理方法,对于新开发项目来说,这些老旧的依赖管理方式会影响开发效率,所以,一般我们会选择将老项目的依赖管理修改为maven方式,简化依赖管理与测试打包等步骤。

2023-10-30 09:17:12 682

原创 Maven安装及使用

Maven安装及使用,可分为四个步骤。

2023-10-30 09:15:21 153

原创 Spring文件上传报错:java.lang.IllegalStateException: File has been moved - cannot be read again

当上传文件大小在maxUploadSize要求内时,文件会被上传,此时会再使用maxInMemorySize配置大小跟上传文件的大小做比较,如果文件大小大于了maxInMemorySize了,那么这个文件就不会被写入内存,而是会被写入到临时文件里面。MultipartResolver组件在设置maxUploadSize的时候,顺便设置一下maxInMemorySize的值,最好是两个配置项值保持一致,这样上传的文件能保证在内存中,这样多线程情况下也可以读取到文件了。

2023-08-02 11:35:41 783

原创 Java设计模式-解释器模式

AbstractExpression声明一个抽象的解释操作,这个接口为抽象语法树中所有节点所共享解释器模式需要解决的是,如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,改解释器通过解释这些句子来解决该问题。当一个语言需要解释执行,并且你可以将该语言中的句子表示为一个抽象语法树的时候,就可以使用解释器模式。用了解释器模式,就意味着可以很容易地改变和扩展文法,因为改模式使用类来表示文法规则,可以使用继承来改变或扩展该文法。

2023-08-01 21:12:02 727

原创 Java设计模式-享元模式

享元模式里面涉及到两个概念,内部状态与外部状态内部状态:内部状态就是在享元对象内部,并且不会岁环境改变而改变的部分,比如ConcreteWebSite类中的name属性,可以认为是内部状态,虽然它的值也会被改变,但是相对来说,被改变的几率比较小,可以认为是内部状态外部状态:外部状态跟内部状态相反,它是随着环境的改变而改变。不可以共享的状态就是外部状态,比如ConcreteWebSite类的User对象。

2023-07-31 22:15:43 414

原创 spring读取resources文件夹下的文件报错:cannot be resolved to absolute file path because it dose not reside in th

在做一个项目的上传功能的时候,需要提供上传文件的模板下载功能,后端的实现方式是:将模板文件放在resources文件夹下,然后提供一个接口,接口中读取resources文件夹下的模板文件,并通过文件流写出给浏览器。

2023-07-31 17:50:57 1759

原创 Java设计模式-中介者模式

通过示例代码能看出中介者模式是什么,但是为什么要使用中介者模式呢?我直接调用目标类的方法不是一样的吗?其实中介者模式的出现,减少了各个类互相调用之间的耦合性,使得可以独立地改变和复用各个独立的类。比如具体Country的子类改变,并不会影响到调用它的那个类。并且由于把对象间如何协作进行了抽象,将中介作为一个独立的概念并将其封装在一个对象中,这样关注的对象就从对象各自本身的行为转移到它们之间的交互上来,也就是站在一个更宏观的角度去看待系统。

2023-07-27 21:18:22 569

原创 Java设计模式-责任链模式

责任链中最关键的就是,当客户提交一个请求的时候,请求是沿着链传递下去的,直到有一个对象来处理这个请求。请求者不用管哪个对象来处理,反正请求最终会被这个责任链给处理掉。这就使得接收者和发送者都没有对方的明确信息,且链中的对象自己也并不知道链的结构。结果是责任链可以简化为对象的相互连接,它们仅需保持一个指向其后继者的引用,而不需要保持它所有的候选接受者的引用,这就大大降低了耦合度。由于链式结构是在客户端定义的,所以客户端可以随时地增加或修改处理一个请求的结构,增强了给对象指派职责的灵活性。

2023-07-26 21:51:17 491

原创 Java设计模式-命令模式

命令模式能够实现将请求发出者和请求执行者进行解耦,便于实现请求的撤销、重做等操作。但是命令模式并不是一旦碰到类似情况的时候就要使用,而是要在确定需要使用的时候再使用,不要在自己猜测的基础上给系统增加不必要的功能,不能为了用命令模式而用命令模式,这点要考虑清楚。这篇命令模式,感觉写的有点模模糊糊的,大家可以多看两遍示例代码理解一下。

2023-07-25 22:27:39 525

原创 Java设计模式-桥接模式

为什么会出现桥接模式呢?因为在前面的学习中,我们一开始想到的扩展程序的方法一般都是使用类继承,但是当某个对象的组成维度比较复杂的时候,使用类继承,就会带来很多麻烦,比如侵入原有代码,类扩展不方便等。这个时候,就要考虑放弃使用类继承,而改用合成/聚合,这样复杂的对象可以被简单化,将各自核心的组成部分相互独立开来,让它们各自变化,这样每种实现变化就都不会影响到其他的实现了,从而能够应对更多的变化。某个对象的组成维度比较复杂的时候,使用类继承,就会带来很多麻烦,比如侵入原有代码,类扩展不方便等。

2023-07-24 21:28:05 567

原创 为什么spring aop没办法切入、拦截、代理static修饰的静态方法?

因为spring的aop实现原理是通过JDK或者cglib为目标接口或者目标类生成一个代理对象,在这个生成的代理对象中,对要切入的方法进行重写,以此来实现各种想要的切面业务操作。那为什么aop无法切入static修饰的静态方法/无法代理static方法呢?因为static修饰的方法是静态方法,而静态方法是可继承但不可被重写的。这样一来,问题就解开了,因为static关键词的特殊限制,所以导致了aop无法切入/代理static修饰的方法。

2023-07-21 15:43:22 938

原创 EasyExcel写出包含多个sheet页的Excel

以上是EasyExcel一个Excel文件导出多个sheet页的demo代码,其中重点代码为// 构建sheet对象 writeSheet = EasyExcel . writerSheet(bean . getSheetName()) . head(bean . getHeadClass()) . build();// 写出sheet数据 excelWriter . write(bean . getDataList() , writeSheet);

2023-07-21 15:24:15 9451 1

原创 Java设计模式-单例模式

单例模式的目的就是为了让一个类自始至终都仅保持唯一的一个实例。这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法。单例模式有两种初始化方式,一种饿汉式,一种懒汉式饿汉式:就是在类被加载的时候就将自己实例化出来饿汉式使用,会提前占用系统资源,但是不会出现多线程问题,因为线程工作前,这个单例对象已经被创建好了。懒汉式:就是在第一次引用这个类的时候,才将自己实例化懒汉式使用,不会提前占用系统资源,但是会出现多线程问题,要做好线程并发控制,否则对象就会创建多个出来。

2023-07-20 22:32:45 1163

原创 Java设计模式-迭代器模式

迭代器模式就是提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。迭代器模式其实很简单,就是循环遍历集合中的每一个元素。

2023-07-20 22:31:56 68

原创 Java设计模式-组合模式

当我们的需求中是体现部分与整体层次的结构时,以及希望用户可以忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象时,就可以考虑使用组合模式了。组合模式中,Leaf叶子节点并没有子节点了,但是却还有add和remove方法,这样做看似有些多余,因为即使调用了子节点的add或remove方法也不会真的增加和删除孩子节点。此处这样实现其实是涉及到透明方式的选择。也就是说在Component中所声明的用来管理子对象的方法,其中包括add和remove等。

2023-07-20 22:30:53 170

原创 Java设计模式-适配器模式

适配器模式还是比较简单的,当一个系统的数据和行为都正确,但是接口不符合的时候,应该考虑使用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配。其实适配器模式在一个程序从0到1再到n的过程中基本是用不到的,因为一个独立的系统,一开始到最后的设计都会考虑到自身的易用性的。适配器一般出现在需要使用第三方服务或者改造旧项目的场景中。

2023-07-13 22:49:58 232

原创 Java设计模式-备忘录模式

其实备忘录设计模式很好理解的,只不过就是把我们平时使用临时中间对象储存目标状态的方式,用一个中间类来接收一下,把每个属性赋值的过程封装起来,让客户端无感知。这个中间类的结构跟目标类一模一样,只不过我们把它叫做备忘录类罢了。这个设计模式中的Caretaker类其实就相当于一个书架,我们写好备忘录后,把备忘录放到书架上,书架只是帮我们暂时保管备忘录,但是书架并不会知道备忘录里面有什么信息。这样我们目标类的信息就不会被外界知晓,同时又可以实现暂存状态信息的目标。

2023-07-13 22:48:58 129

原创 Java设计模式-状态模式

状态模式其实可以简单点来理解,就是如果一个类中对状态的判断使用了很多的分支结构,导致状态判断的方法异常复杂,这个时候就可以使用状态模式进行改造。状态模式的代码结构挺简单的,要是不太懂的话,可以将样例代码多敲两遍。

2023-07-12 22:06:31 162

原创 Java设计模式-抽象工厂模式

抽象工厂模式是将工厂与产品都抽象化,这样在实例化工厂的时候,对具体对象的依赖就会变得很小,比如IFactory factory = new MysqlFactory();,当需要切换数据库到postgresql的时候,直接修改为IFactory factory = new PostgresqlFactory();即可,下面的User相关的代码全部不需要改动,因为它们都是接口依赖,而接口又不会改变,所以只需要改变很少的地方即可实现比较大的需求变动。

2023-07-11 22:35:37 309

原创 Java设计模式-观察者模式

观察者模式,这个名字听得有点别扭,简单理解就是当一个对象的某种状态改变时,需要通知其他对象,那么此时就可以使用观察者模式。观察者模式所做的工作就是解耦。让耦合的双方都依赖于抽象,而不是依赖于具体。从而使得各自的变化都不会影响到另一边的变化。

2023-07-11 22:34:47 481

原创 Postgresql频繁delete表数据后,数据库表数据很少,但是查询速度超级慢

数据库的表里只有一千多条数据,系统中有两个定时任务,每隔1分钟会对表数据进行一次delete和insert,刚开始数据查询很快,但是在运行了一段时间后,这个表的查询速度就越来越慢,达到了十几秒。

2023-07-11 17:06:09 1464 1

原创 Spring、SpringBoot使用File无法读取resource文件夹下的文件

在开发Spring或者SpringBoot项目时,如果遇到需要使用resource资源文件夹下的文件做模板下载等功能时,直接使用。读取文件,在程序运行后,会发现,程序无论如何都无法读取到文件的问题。

2023-07-06 11:08:55 1599

原创 EasyExcel导出Excel,单元格添加下拉列表

本文章可解决EasyExcel导出Excel时,添加的下拉列表无法展示数据问题

2023-07-05 18:03:01 5210 8

原创 Java设计模式-外观模式

外观模式还是比较好理解的,它就是为很多个独立的子系统提供一个统一对外的外观门面,免去了客户端与各对子系统对接的麻烦,改为与外观门面统一对接,简化了对接逻辑,降低了代码的维护成本。其实外观模式的原理和nginx的工作原理有点类似,都是有一个统一的对外门面,客户端只需要与门面对接,门面接收到请求后,转发给相应的子系统进行请求处理。外观模式跟简单工厂模式或者工厂模式不一样哦,这里不要搞混了。简单工厂模式或工厂模式针对的子类都是有共同的父类接口的,各个子类由统一的父类继承演化而来。

2023-07-03 22:22:18 64

原创 Java设计模式-模板方法模式

模板方法模式是通过把不变行为搬移到父类。去除子类中的重复代码来体现它的优势。它就是提供一个很好的代码复用平台。其实模板方法模式还是很容易理解的,将子类中所有相同的代码块搬到父类中进行管理,这就是模板方法模式了。模板方法模式可以减少代码冗余量,降低代码维护成本,杜绝相同代码被多处复制时出现复制偏差,最终导致业务问题的问题。

2023-07-03 22:21:02 173

原创 Java设计模式-建造者模式

建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时使用的。简单点说就是,如果一个对象组成结构比较复杂,在创建的时候,需要根据客户端的需求,自定义改变这个对象的各个结构的组成顺序,组成原理等,这个时候就适合使用建造者模式了。建造者模式跟工厂方法模式的区别在于,工厂方法是直接生产出对象的实例,并不关注对象生产的过程、顺序等,只关注对象生产的结果,并且生产出来的对象都是一样的。

2023-07-03 22:20:44 150

原创 Java设计模式-原型模式

其实在我看来,原型模式并不能算是一个设计模式,它更多的算是对象的实例化方法之一。对象必须重写clone方法类必须实现Cloneable接口,否则直接使用clone方法的话会报错直接使用clone方法的话,clone是浅拷贝,不是深拷贝。

2023-06-29 22:27:33 91

原创 Java设计模式-工厂方法模式

工厂方法从实现效果上来说,跟简单工厂相似。从总体结构上来说,却比简单工厂还要复杂点,既然这样为什么还要有工厂方法呢?直接使用简单工厂岂不是更好?其实简单工厂的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。就像简单工厂介绍中的计算器代码示例,客户端不用管改用哪个类的实例,只需要把“+”传给工厂,工厂自动就给出了相应的实例,客户端只要去做运算就可以了,不同的实例会实现不同的运算。

2023-06-28 22:21:57 219

原创 Java设计模式-代理模式

代理模式其实就是找一个人帮咱干活,java中的静态代理,动态代理,还有spring中的AOP都是代理模式的最佳实践。

2023-06-26 22:30:59 70

原创 Java设计模式-装饰器模式

当系统需要新功能的时候,是向旧的类中添加新的代码。这些新加的代码通常装饰了原有类的核心职责或主要行为,比如用西装装饰人。但是这种做法的问题在于,它们在主类中加入了新的字段,新的方法和新的逻辑,从而增加了主类的复杂度,而这些新加入的东西仅仅是为了满足一些只在某种特定情况下才会执行的特殊行为的需要。而装饰器模式提供了一个非常好的解决方案,它把每个要装饰的功能放在单独的类中,并让这个类包装它所要装饰的对象,因此,当需要执行特殊行为时,客户代码就可以在运行时根据需要有选择的、按顺序的使用装饰功能包装对象了。

2023-06-26 22:01:59 82

原创 免安装绿色版chrome制作教程

喜欢自己动手的小伙伴,可以参照我下面写的步骤,一步一步制作属于自己的绿色版chrome。当然了,着急使用的小伙伴,我这边也提供了部分版本的chrome,官方安装包提取的哦,,不含任何广告或主页绑架,

2023-06-26 12:08:32 6064

原创 Java设计模式-策略模式

策略模式在代码实现结构上,和简单工厂模式有相似之处,所以大部分人看到这两种模式,容易产生混乱。其实就使用上来说,两种模式都可以使用,也都能实现同一个目标,只要注意代码结构,谨慎小心,防止改动原有逻辑即可。但是其实这两个模式还是有细微差别的简单工厂模式,使用的时候,是向工厂类传入一个条件,工厂类根据条件,生成相应的对象,并返回给客户端。

2023-06-23 23:10:10 373

原创 Java设计模式 - 简单工厂模式

简单工厂模式,大白话来说,就是有一个抽象类,这个抽象类定义了一个属性和一个抽象方法。然后有多个不同的子类继承这个抽象类,并实现抽象方法。当实例化这个抽象类的时候,对抽象类的属性赋予不同的值,再调用抽象方法,这个抽象方法就可以根据属性值来执行出不同的结果。简单工厂模式其实就是解决到底要实例化谁,将来会不会增加实例化的对象等问题。而这些问题需要考虑用一个单独的类来做这个创造示例的过程,这个就是工厂类。

2023-06-18 17:03:12 3216 1

原创 CentOS8 yum报错:为 repo ‘AppStream‘ 下载元数据失败

CentOS8 yum报错:为‘AppStream’下载元数据失败

2022-03-20 20:00:42 21622 15

原创 Linux下安装MySQL5.6和8.0.xx

Linux下安装MySQL5.6和8.0.xx1.下载MySQLMySQL的官网不容易进去,所以推荐去国内镜像站下载MySQL的安装包点我下载MySQL进入网址之后,选择MySQL5.6的版本注意:选择版本的时候要选linux-glibc2的版本,选错了版本会导致安装命令执行失败的2.安装MySQL5.62.1解压将安装好的MySQL压缩包放到linux服务器或者你的虚拟机上,并解压到/usr/local/目录下2.2重命名到/usr/local/目录下将刚刚解压出来的mysql文

2020-08-08 18:05:51 757

原创 VMWare安装CentOS8及黑屏问题解决方法

VMware安装CentOS8及黑屏问题解决方法下载安装CentOS8CentOS安装过程黑屏问题解决方法下载CentOS8安装CentOS8打开VMWare,点击“创建新的虚拟机”选择典型即可选择“稍后安装操作系统”注意:这里一定要选择这个选项,因为如果选择“安装程序光盘映像文件”这个选项时VMWare14暂时会将CentOS8识别为“CentOS5或更早的版...

2020-05-04 20:39:28 8439

原创 Git国内镜像站

这是国内的git镜像站,下载速度快点https://npm.taobao.org/mirrors/git-for-windows/

2019-12-28 11:45:31 2072

原创 SpringMVC文件下载

Java - SpringMVC实现文件下载1.大致流程2.详细说明(1)下载静态资源(导入导出模板之类的文件)(2)下载服务器上的文件资源(传统I/O方式)1)下载服务器上已存在的资源①获取文件输入流②设置响应头的相关属性③获取HttpServletResponse对象的字节输出流④将输入流内容写入输出流2)下载代码临时处理的bean实体数据或数据库数据①处理数据②数据封装③设置HttpServ...

2019-12-01 23:17:47 621

空空如也

空空如也

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

TA关注的人

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