- 博客(47)
- 收藏
- 关注
原创 适配器模式
适配器相当于一个包装器,将一个类的接口变换成客户端所期待的另一种接口,从而使无法在一起工作的两个类能够在一起工作。(1)可以让两个没有任何关系的类在一起运行;(2)提高类的复用性;(3)增强代码的灵活性。
2025-01-28 13:30:50
948
原创 深拷贝和浅拷贝
浅拷贝是指会创建一个新对象,但是只复制原始对象的基本类型字段或引用,如果原始对象存在引用类型的字段,拷贝对象和原始对象的引用类型字段会共享同一个实体,对拷贝对象的修改可能会影响原始对象。拷贝对象:Person{name='张三', sex='男', address=Address{city='上海'}}拷贝对象:Person{name='张三', sex='男', address=Address{city='上海'}},并赋值给Person的拷贝对象。可以看到对拷贝对象的修改影响了原始对象,
2025-01-05 20:27:50
1268
原创 使用Apache PDFBox将pdf文件转换为图片
根据pdf文件路径加载文件,对pdf文件的每页进行图像渲染,根据所有图像的高度计算长图片的高度,获取到所有图像的最大宽度即为长图片的宽度,使用。根据指定的DPI将pdf页面渲染成图像。DPI值越大,渲染越清晰,转换速度越慢。将所有图像渲染到长图片上。
2025-01-02 23:39:29
502
原创 Java中基于TCP的Socket编程
Socket(套接字)是网络通信的一种机制,允许不同主机之间的进程进行通信。在Java中,Socket支持TCP(传输控制协议)和UDP(用户数据报协议)。TCP协议在通信之前需要先建立连接,数据传输过程中能保证数据的完整性和顺序性。UDP协议可用于发送数据包,所需付出的开销比TCP协议少得多,但是UDP协议传输数据包时不会按照顺序传输,也可能会在数据传输中丢失数据。
2024-12-15 22:25:18
541
原创 Java语言的特性
Java编译器将源程序编译成字节码(.class文件),字节码是一种与具体硬件和操作系统无关的中间格式,只要有Java虚拟机(JVM),字节码可以在不同的平台上运行。(1)重写内存:在C或C++语言中,如果程序没有正确的处理数组边界,多余的数据会溢出到到相邻的内存区域,从而修改其他变量的值、覆盖函数的返回地址等信息;4、文件操作和网络通信等API可以在不同的操作系统上以相同的方式进行调用,程序员不需要为不同的平台编写不同的代码来实现相同的功能;2、Java采用的指针模型可以消除重写内存和损坏数据的可能性;
2024-12-10 17:24:53
586
原创 Spring框架使用xml方式配置ThreadPoolTaskExecutor线程池,并且自定义线程工厂
自定义线程工厂需要实现接口,重写newThread方法。import org/*** 业务自定义线程工程// 线程组 private final ThreadGroup group;// 线程序号 private final AtomicInteger threadNumber = new AtomicInteger(1);// 线程名称前缀 private final String namePrefix;= null?
2024-11-26 22:58:59
994
原创 函数式编程
lambda表达式是Jdk中的一个语法糖,可以对某些匿名内部类的写法进行简化,主要是关注对数据进行的操作。只有一个抽象方法的接口称为函数式接口,只有函数式接口的实现可以使用Lambda表达式;@FunctionInterface标识只用于验证当前接口是是否是函数式接口。
2024-03-31 23:23:45
856
原创 EasyExcel动态列导出
3、添加自定义单元格拦截策略(实现com.alibaba.excel.write.handler.WriteHandler接口)和数据类型转换策略(实现com.alibaba.excel.converters.Converter接口);4、创建Excel的Sheet页,设置第一步获取的列宽;2、根据需要导出的列获取Excel中的行数据;注解,最终生成需要显示的列名和每列的列宽;1、根据需要导出的列找到返回类对象属性的。可选择某几种属性进行导出。动态列导出
2024-02-11 18:28:43
3688
原创 Spring 面向切面编程(AOP)
一般的后端开发流程是纵向开发,就是controller(控制层)->service(业务层)->mapper(数据持久层),Spring采用动态代理技术可以在程序的运行过程中对每一层进行增强,也就是面向切面编程(Aspect Oriented Programming)可以使用 (MethodSignature) ProceedingJoinPoint.getSignature() 获取方法参数使用 ProceedingJoinPoint.getArgs() 方法获取参数值
2023-12-11 01:13:57
996
原创 代理模式介绍(静态代理、jdk动态代理、cglib代理)
为其他对象提供一种代理以控制对这个对象的访问;1、代理模式的优点:(1)职责清晰:真实角色负责处理实际的业务逻辑,不用关心非本职的事务,通过代理完成附加的事务;(2)高扩展性:不同的需求可能会有不同的真实角色,只要实现了接口,代理类就可以完全在不做任何修改的情况下代理各种真实主题角色;2、静态代理模式的缺点:(1)若抽象主题角色增加功能,会影响代理类;(2)不同的功能需求可能会有不同的代理类;:方法拦截器类;:增强类;:方法代理类。
2023-12-03 21:11:14
1104
1
原创 模板方法模式
定义一个操作中算法的框架,将一些步骤延迟到子类中。使得子类可以不改变一个算法的机构即可重定义该算法的某些特定步骤。1、模板方法模式的优点(1)封装不变的部分,扩展可变部分。不变的部分封装到父类中实现,而可变的部门则可以通过继承进行扩展;(2)提取公共代码,便于维护;(3)行为由父类控制,子类实现,子类可以通过扩展增加相应的功能,符合开闭原则;
2023-11-29 22:02:23
724
原创 zip4j压缩使用总结
使用zip4j压缩文件并设置压缩包密码addFiles, addStream,ZipOutputStream使用net.lingala.zip4j.exception.ZipException: file name is empty for external streamnet.lingala.zip4j.exception.ZipException: input file is null
2023-11-22 22:14:43
2394
原创 抽象工厂模式
2. 定义(1)为创建一组相关或相互依赖的对象提供一个接口,无须指定它们的具体类;(2)抽象工厂模式是工厂方法模式的进一步抽象,抽象工厂方法模式针对的是一族产品,如果产品族中只有一种产品,则抽象工厂模式退化为工厂方法模式;3. 抽象工厂模式涉及到的角色(1)抽象工厂角色:抽象工厂模式的核心,与应用系统无关,任何创建对象的工厂必须实现这个接口;(2)具体工厂角色:实现了抽象工厂接口,含有选择合适产品对象的逻辑,受到应用程序调用以创建产品对象;(3)抽象产品角色:定义产品的共性;(4)具体产品角
2023-11-21 22:47:36
401
原创 工厂方法模式介绍
定义一个创建对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到其子类。工厂方法涉及的角色有:1 .抽象工厂角色:工厂方法模式的核心,与应用系统无关,任何创建对象的工厂类必须实现这个接口。2. 具体工厂角色:实现了抽象工厂接口,被应用程序调用以创建产品对象。3. 抽象产品角色:定义产品的共性,实现对产品抽象的定义。4. 具体产品角色:实现抽象产品角色所声明的接口。(1)提高扩展性:在增加产品类的情况下,只要适当调整具体的工厂类或扩展一个工厂类,就可以适应变化。
2023-08-23 23:10:27
661
原创 策略设计模式
针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换,使算法可以在不影响到客户端的情况下发生改变;环境角色(上下文角色):屏蔽高层模块对策略的直接访问,持有一个策略类的引用;抽象策略角色:对策略、算法进行抽象,通常定义每个策略或算法必须具有的方法和属性;具体策略角色:实现抽象策略中的具体操作,有具体的算法;(1)策略模式使用继承的方法可以把公共的代码移到父类中,避免代码重复;(2)避免算法的使用者和算法本身混合到一起,便于扩展;
2023-06-05 19:18:49
150
1
原创 单例设计模式
1、确保一个类只有一个实例,可以用在建立目录、数据库连接等需要单线程操作的场合,用于实现对系统资源的控制;2、单例类的构造方法是私有的,避免外部使用构造方法创建实例;3、单例类不能被继承,因为其构造函数是私有的;(1)减少了内存开支,由于单例类的实例没有被频繁创建、销毁;(2)减少了系统的性能开销,可以应用于读取配置、产生其它依赖对象,让其在应用启动期间保存在内存中;(3)避免对资源的多重占用;(4)可以优化和共享资源访问,例如数据表的映射处理;
2023-06-04 17:35:42
72
原创 jdk动态代理
需要实现InvocationHandler接口/*** @description: 代理调用处理器target = t;if(args!
2023-05-14 13:51:17
109
原创 stream表达式常用总结
分组:groupingByMap<String, List<FormDefinitionHis>> typeMap = formDefinitionHisList .stream().collect( Collectors.groupingBy(FormDefinitionHis::getFormTypeId) );
2023-01-19 19:49:45
296
转载 shell定时任务
#crond定时方式的配置vim /etc/crontab #在最后一行加上定时任务的配置#每分钟执行一次*/1 * * * * root /usr/local/shell/test.sh#修改crontab的配置后需要重启crontab,使配置生效/bin/systemctl restart crond.service#检测cron定时服务是否自启用systemctl is-enabled crond.service#enable表示已启用自启动#disable标识未启用自启动#启动
2022-04-07 16:48:24
483
原创 linux常用命令
1、查看占用空间du -h -x --max-depth=1可查看到当前文件夹下每个文件或文件夹的存储空间2、拷贝1、跨服务器拷贝scp test.txt root@10.11.11.2:/usr/local2、重命名mv test.txt test1.txt3、拷贝一份相同的文件cp test.txt test1.txt...
2022-04-06 11:05:27
899
原创 vue-cli使用
1、安装node.js(1)下载地址:https://nodejs.org/zh-cn/download/(2)打开cmd命令窗口,输入node –v,npm –v查看是否能打印版本信息2、vue-cli安装(1)卸载旧版本的npm:npm uninstall vue-cli -g(2)安装淘宝镜像:npm install -g cnpm -registry=https://registry.npm.taobao.org(3)查看cnpm版本:cnpm -v3、创建vue项目(1)进入工作空
2021-05-26 22:09:23
242
原创 java反射
一、根据方法名及类对象进行操作 public <T> Object grabData(T proxyObject, String methodName, Map<String, Object> paramMap) { Object o = null; try { //加载class文件到jvm中并进行初始化 Class cls = Class.forName(proxyObject.getClass().get
2021-05-02 18:48:49
106
原创 文件下载-java
public static void downLoadFile(HttpServletRequest request,HttpServletResponse response,String fullPath) throws IOException { OutputStream outp = response.getOutputStream(); File file = new File(fullPath); if (file.exists()) { //设置请求以及响应的内容类型以及编码方
2020-09-25 22:19:51
118
原创 获取项目路径的方式
获取项目路径:this.getClass().getClassLoader().getResource("").getPath()
2020-09-23 21:58:58
90
原创 POI导出word单元格合并
1、跨列合并 //合并单元格 for (int cellIndex = 2; cellIndex <= 3; cellIndex++) { XWPFTableCell cellMerge = row.getCell(cellIndex); if ( cellIndex == 2 ) { // The first merged cell is set with
2020-06-26 16:51:13
4498
1
原创 JDBC Realm使用及返回身份验证信息
一、JDBC Realm使用1、导入jar包:c3p0-0.9.1.2.jar、junit-4.10.jar、log4j-1.2.17.jar、mysql-connector-java-5.1.37-bin.jar、shiro-core-1.4.0.jar、slf4j-api-1.6.1.jar、slf4j-log4j12-1.6.1.jar我这里使用的是c3p0连接池2、查看org.apa...
2020-02-18 12:27:53
338
原创 SSM开发之mybatis整合
mybatis下载地址:https://github.com/mybatis/mybatis-3/mybatis用到jar包:myBatis-3.4.1.jar、mysql-connector-java-5.1.37-bin.jar、log4j.jarmybatis整合Spring用到的jar包:mybatis-spring-1.3.0.jar一、...
2020-02-10 12:25:12
176
原创 SSM开发之Spring整合
Spring用到的jar包有:spring-beans-4.0.0.RELEASE.jar、spring-context-4.0.0.RELEASE.jar、spring-core-4.0.0.RELEASE.jar、spring-expression-4.0.0.RELEASE.jar、commons-logging-1.1.3.jar、com.springsource.net.sf.cglib...
2020-02-07 22:47:27
114
原创 SSM开发之SpringMVC整合
SpringMVC用到的jar包有spring-aop-4.0.0.RELEASE.jar、spring-beans-4.0.0.RELEASE.jar、spring-context-4.0.0.RELEASE.jar、spring-core-4.0.0.RELEASE.jar、spring-expression-4.0.0.RELEASE.jar、commons-logging-1.1.3.ja...
2020-02-05 17:16:07
243
原创 SSM开发之jquery整合
SSM开发之jquery整合一、jquery下载和使用1、进入jquery官网(https://jquery.com),点击下载jquery,如下图:2、将下载好的文件拷贝到项目中,如下图:3、在jsp文件中引用<script type="text/javascript" src="<%=basePath%>/jquery/jquery-3.4.1.js">&...
2020-02-01 17:45:42
1333
原创 SSM开发之bootstrap整合
一、下载bootstrap1.进入bootstrap官网,地址为https://www.bootcss.com,如下图2.选择bootstrap进行下载,我这里下载的是bootstrap3,如下图二、bootstrap使用1.解压压缩包,粘到项目中,如下图2.在jsp中引用bootstrap的js和css<%@ page language="java" contentTyp...
2020-01-29 11:49:25
919
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人