- 博客(52)
- 收藏
- 关注
原创 Java中如何替换掉if-else(策略+枚举)
以上便是策略+枚举来解决if-else的方法,这样写代码耦合度变低了,也更加简洁了,扩展性也很强,比如以后有了个星期八(只是举个例子),是不是我们只需要,在枚举中再创建一个实例,就不用改代码了。举个例子吧,比如说每周有7天,我每天都回家做不同的菜,根据入参1-7代表周一到周日,提醒我今天该做什么菜了,那么我们就使用if-else来实现的话,代码是这样的。这样我们就可以根据不同的dayOfWeekValue获取到相应的枚举了,接下来的步骤就是重点了,我们在枚举中定义一个抽象方法,作为做菜的行为。
2024-03-16 21:33:39
1884
1
原创 Java中的 “==” 与 equals 的区别
在Java中有两大类数据类型,一类是基础数据类型共有八种分别是byte、 short、 int、 long、 float、 double、 char、boolean,另一类则是引用数据类型,例如String、Integer等等。“ == ” 作为比较运算符,是用于比较两个值是否相等的,但是在比较基础数据类型和引用数据类型时是不一样的。我们可以看到返回结构为true,说明 a 和 b的值是相同的那如果比较两个引用数据类型呢?
2024-03-14 21:41:30
454
1
原创 Java基于itextPDF实现pdf动态导出
现在的业务越来越复杂了,有些业务场景已经不能满足与EXCEL导出和WORD导出了,例如准考证打印,电子证书等等,这些都是动态数据导出的PDF。接下来我们就看一下怎么实现PDF的动态导出吧。
2023-11-14 09:21:24
1961
原创 如何遍历Java对象类中的所有属性名和属性值?
因此我们可以选择使用反射来进行遍历对象中的所有属性名和属性值。在遍历中编写逻辑来对属性进行操作。有些时候我们需要获取到一个对象中的所有属性名和属性值,对其值进行修改或是其他操作。这种时候我们再使用get(),set()来进行操作就会有些麻烦了。
2023-11-09 10:30:26
4422
原创 minio + linux + docker + spring boot实现文件上传与下载
p: 指定端口映射,格式为:主机端口:容器端口 (这里注意要映射两个,否则API会访问不到)接下来我们可以通过以下命令来查看 minio console和minio api 访问端口。注意 minio.endpoint 是minio API地址,不是控制台地址。-e “MINIO_ROOT_USER=vinci” minio用户名;-e MINIO_SECRET_KEY=123456 minio 密码。minio.bucket-name 是 bucket的名称。minio.secret-key是密码。
2023-10-27 14:13:44
1603
7
原创 请求转发和响应重定向
请求转发和响应重定向是两种在HTTP协议中常见的操作,用于在服务器和客户端之间传递数据。请求转发(RequestDispatcher)是服务器收到请求后,从一个资源跳转到另一个资源的操作。这种操作在服务器端进行,浏览器地址栏不会发生改变,也不会有新的页面加载。它是在同一个请求过程中,服务器内部根据配置进行URL的跳转。响应重定向(Redirect)则是客户端给服务器发请求,然后服务器发送重定向的状态码给客户端,同时客户端向服务器重新请求指定的地址。
2023-10-23 17:43:46
289
原创 Java中在循环体内拼接字符串时为什么使用StringBuilder而不是String
速度是 + String 的 两百多倍,极大的优化了执行效率。循环体内,字符串的连接方式,请使用 StringBuilder 的 append 方法进行扩展。说明:因为反编译出的字节码文件显示每次循环都会 new 出一个 StringBuilder 对象,然后进行。同样的逻辑,我们接下来使用StringBuilder 的append()进行拼接来跑一遍。我们使用for循环100000次来拼接一个字符串,并打印这段的运行时间,单位(ms)因此,在循环中拼接字符串的大部分场景下我们最好的选择一定是后者。
2023-10-12 17:24:07
412
原创 在Java中为什么不建议使用Object的clone()来拷贝对象
最近阅读了《阿里巴巴Java开发手册》一书,书中提到了不推荐使用Object对象的clone()方法来对对象进行拷贝,因为Object的clone()方法默认是浅拷贝,原文如下:【推荐】慎用Object的clone方法来拷贝对象。说明:对象的clone方法默认是浅拷贝,若想实现深拷贝需要重写clone方法实现属性对象的拷贝。
2023-09-25 08:46:41
361
原创 SpringBoot配置文件的加载顺序
Spring Boot 启动会扫描以下位置的application.properties或者application.yml 文件作为Spring Boot 的默认配置文件。也可以通过配置spring.config.location来改变默认配置。的顺序 ,所有位置的文件都会被加载(互补配置),
2023-09-13 17:43:19
5309
原创 SpringBoot 使用MyBatis分页插件实现分页功能
在业务层调用Mapper接口获取数据并分页;需要注意:PageHelper.startPage(pageNum,pageSize)必须写在查询前面,否则将不会生效。这里使用application.properties类型配置文件来做例子。继续编写Controller层代码,将数据返回给前端。编写在Mapper中编写SQL语句查询与之对应的表。创建一个持久化对象TestUserPO。
2023-09-02 13:04:09
800
1
原创 阿里巴巴FastJson包的使用心得
Fastjson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,当然它也可以将 JSON 字符串转换为 Java 对象。Fastjson 可以操作任何 Java 对象,即使是一些预先存在的没有源码的对象。
2023-08-28 11:54:51
1595
原创 SpringMVC中Controller层获取前端请求参数的几种方式
可以使用@PathVariable注解获取url地址栏指定位置参数,url中的参数名需和controller形参一致,或是使用@PathVariable注解的value属性进行映射,在写@XXXMapping注解中的url时参数名需要使用 { } 括起来。只要参数类型和参数名与方法形参相同,则会自动绑定。在controller层方法中定义形参,若请求时参数名、参数类型相同,则SpringMVC会自动绑定。接下来使用PostMan进行测试发现,传值则接收到值,不传值则使用默认值。PostMan测试结果。
2023-08-24 12:32:00
1414
原创 使用EasyExcel实现Excel表格的导入导出
Java解析、生成Excel比较有名的框架有Apachepoi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。easyexcel重写了poi对07版Excel的解析,一个3M的excel用POIsax解析依然需要100M左右内存,改用easyexcel可以降低到几M,并且再大的excel也不会出现内存溢出;
2023-08-18 14:19:20
4988
4
原创 如何在Linux环境下进入Docker容器中的MySQL
3. 输入MySQL的账号和密码登录MySQL。根据容器别名获取容器ID都可以进入到容器当中。
2023-08-10 17:38:08
1440
原创 Vue2仿网易云风格音乐播放器(附源码)
实现了搜索歌曲功能,输入歌手或歌曲关键字可获取对应的内容实现了歌曲播放功能,点击歌名或左侧超链接可播放对应的歌曲实现了封面黑胶旋转效果,歌曲播放时旋转,歌曲未播放时停止旋转实现了展示歌曲热门评论的功能,会显示当前歌曲排名前20的热门评论实现了播放MV的功能,点击右侧超链接弹出播放MV
2023-02-09 20:28:12
5512
5
原创 JavaScript中 == 和 === 的区别
如果一个是字符串,一个是数值,把字符串转换成数值之后再进行比较。如果一个是null,一个是undefined,返回 true。当进行双等号( == )比较时会先检查两个操作数数据类型。而===比较时, 如果类型不同,直接就是false.== 代表相同, ===代表严格相同。
2023-02-07 22:58:06
519
原创 Java中的&(|)和&&(||)的区别和联系
综上所述,如果逻辑与运算的第一个操作数是false或第一个表达式的结果为false时,对于第二个操作数或表达式是否进行运算,对最终的结果没有影响,结果肯定是false。表示逻辑与(and),当运算符两边的表达式的结果或操作数都为true时,整个运算结果才为true,否则,只要有一方为false,结果都为false。&还可以用作位运算符。当&两边操作数或两边表达式的结果不是boolean类型时,&用于按位与运算符的操作。&逻辑运算符称为逻辑与运算符,&&逻辑运算符称为短路与运算符,也可叫逻辑与运算符。
2023-02-02 21:27:46
623
原创 SSM框架整合(Spring + Spring MVC + MyBatis)IDEA版
SSM(Spring+SpringMVC+MyBatis)就是由Spring、SpringMVC、MyBatis三个开源框架整合而成的框架集,常作为数据源较简单的web项目的框架。其中:Spring是SpringMVC的父容器。这里的父子关系并不是继承关系的父子关系,而是在SpringMVC容器(子容器)中可以知道Spring容器(父容器)的存在。子容器可以访问父容器,而父容器不能访问子容器。在build中配置resources,设置Maven资源过滤第三步:建立基本结构MyBatis的核
2023-01-17 21:58:01
1614
原创 Java跨平台原理(字节码文件、虚拟机)
- Java语言具有一次编译,到处运行的特点。就是说编译后的.class可以跨平台运行,前提是该平台具有- 相应的Java虚拟机。但是性能比C/C++要低。
2023-01-09 18:01:29
281
原创 【数据结构】图
对于有n个顶点的图,用一维数组vexs[n]存储顶点信息,用二维数组A[n][n]存储顶点之间关系的信息。该二维数组称为邻接矩阵。在邻接矩阵中,以顶点在vexs数组中的下标代表顶点,邻接矩阵中的元素A[i][j]存放的是顶点i到顶点j之间关系的信息。这是图的一种链式分配的存储结构,它包括两个部分,一部分是顶点数据,另一部分是指针域,指向一个包含相邻顶点的单链表。
2023-01-08 20:05:41
437
原创 【数据结构】哈夫曼树
从树的根到该结点的路径长度(经过的边数)与该结点上权值的乘积。:有某种现实含义的数值(如:表示结点的重要性等):树中所有叶子结点的带权路径长度之和(WPL):从一个结点到另一个结点所经过的分支数量。:从一个结点到另一个结点之间的分支序列。
2023-01-06 14:37:07
2648
原创 【数据结构】树与二叉树
性质三:对任意一颗二叉树,如果其叶子结点数为 N0,度为2的结点数为N2,则 N0 = N2 + 1。性质二:深度(高度)为 k 的二叉树最多有 2^k - 1个结点(k>=1)性质一:在二叉树的第 i 层上最多有 2^n-1个结点(i>=1)第二种方法:先将森林转为对应的二叉树之后再去遍历。第二种方法:先将森林转为对应的二叉树之后再去遍历。第二种方法:先将森林转为对应的二叉树之后再去遍历。若森林非空,则遍历方法为。若森林非空,则遍历方法为。若树非空,则遍历方法为。若树非空,则遍历方法为。
2023-01-03 16:50:33
662
原创 SpringSession+redis实现Session共享时报错:org.springframework.data.redis.serializer.SerializationException..
SpringSession+redis实现Session共享时报错:2、解决方法需要将存储Redis的类,实现 Serializable 接口
2022-12-31 12:38:15
726
原创 【数据结构】串的应用:模式匹配暴力算法BF
i指向的是主串中的元素,j指向的是子串中的元素,k指向的是主串中作比较的子串的初始位置的值。定义3个变量 i,j,k。
2022-12-30 14:50:50
133
原创 【数据结构】串(字符串)
记作: S = “a1a2a3…是一种特殊的线性表,它的每个结点仅由一个字符组成。(也可以称–有0个或多个字符组成的有限序列叫做串)
2022-12-29 16:53:26
249
原创 【数据结构】栈的基本操作与栈的应用
栈底的初始值即位置不会改变,每进栈一条数据,栈顶的位置都会发生改变,当没有数据时栈顶的初始位置为0;进栈(插入数据)push:将新值插入到栈顶位置,同时栈顶改变一个位置。入栈:创建新节点P , 将P的next属性指向栈顶后,再改变栈顶的值。出栈:保存栈顶的值后,先改变栈顶的位置,再释放保存的值。栈顶(top):可以插入删除的那一端就是栈顶。栈满:当栈顶的值等于栈的最大长度时,说明栈满。出栈(删除)POP:往下改变栈顶的位置即可。出栈(删除)POP:往下改变栈顶的位置即可。7.main函数测试。
2022-12-27 13:56:29
751
原创 【数据结构】双向链表
两个指针域分别为front和next,front指向当前结点的前驱,next指向当前结点的后继。在双向链表中头节点包含两个指针域(first和tail)。每个结点包含两个指针域和一个数据域,数据域用来保存数据。first指向第一个结点,tail指向最后一个结点。第一个结点没有前驱,最后一个结点没有后继。8.main函数调用测试。
2022-12-26 15:50:02
488
原创 hashCode()与equals()之间的关系
在Java的一些集合类的实现中,在比较两个对象是否相等时,会根据上面的原则,会先调用对象的hashCode()方法得到hashCode进行比较,如果hashCode不相同,就可以直接认为这两个对象不相同,如果hashCode相同,那么就会进一步调用equals()方法进行比较。所以,我们就需要注意,如果我们重写了equals()方法,那么就要注意hashCode()方法,一定要保证遵守上述规则。如果两个对象的hashCode相同, 不代表这两个对象一定是同一个对象,也可能是两个对象。
2022-12-18 14:38:49
244
原创 GET和POST的区别
有些文章中提到,POST会将 header 和 body 分开发送,先发送 header,服务端返回 100 状态码再发送 body。GET请求可以直接进行回退和刷新,不会对用户和程序产生任何影响,而POST请求如果直接回滚和刷新将会把数据再次提交。所以,header 和 body 分开发送是部分浏览器或框架的请求方法,不属于 POST必然行为。而对于POST,浏览器先发送请求头,服务器响应100continue,浏览器再发送请求体;对于GET方式的请求,浏览器会把请求头和请求体一并发送出去;
2022-12-14 16:24:48
1141
原创 重载和重写的区别
返回值范围小于等于父类,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类;如果父类方法访问修饰符为private则子类就不能重写该方法。、方法返回值和访问修饰符可以不同,也可以相同。父类中有以下两个方法。
2022-12-13 15:54:54
149
原创 String、StringBuilder、StringBuffer三者之间的关系及使用场景
经常需要改变字符串内容时使用StringBuffer和StringBuilder优先使用StringBuilder,多线程使用共享变量时使用StringBuffer
2022-12-10 12:48:58
187
原创 final的作用
final意为最终的修饰类:表示类不可被继承修饰方法:表示方法不可被子类覆盖,但是可以被重载修饰变量:表示变量一旦被赋值就不可以更改它的值(1)修饰成员变量(2)修饰局部变量(3)修饰基本数据类型和引用数据类型
2022-12-09 15:11:48
1292
原创 Java实现短信发送
首先,我们要实现Java短信发送功能需要去申请第三方短信接口,以阿里云为例点击跳转在API市场中找到短信验证码接口:我们可以先选择免费试用来测试:点击立刻购买后可前往控制台查看:OK,一切就绪后我们开始测试使用。首先我们先回到商品详情页,在商品详情页下面,说明了这个接口的调用地址以及请求参数等:接下来我们通过实例来调用接口进行测试:1、加入相关依赖具体可参考:相关依赖2、创建HttpUtils.java类HttpUtils.java类官方也已经帮我们封装好了,我们可以直接前往
2022-12-07 16:38:54
12443
2
原创 Encoded password does not look like BCrypt 使用SpringSecurity中BCryptPasswordEncoder做盐值加密时出现错误
使用SpringSecurity中BCryptPasswordEncoder做盐值加密时出现错误 Encoded password does not look like BCryptEncoded password does not look like BCrypt : 这句话翻译过来叫编码后的密码看起来不像BCrypt在写一个SSM + SpringSecurity项目时出现这个错误。明明账号和密码都是正确的。却登录不上:我们可以看到这个“Encoded password does not lo
2022-12-06 17:11:06
1883
3
原创 JQuery AJAX向SpringMVC服务器端发送数组的坑
最近在写一个练习项目,发现了一个坑,如图:这段ajax是向服务器端发送两个值,其一是一个数值类型的Id,其二是一个数值类型的数组。在发送前,我们通过alert打印发现数组的值是可以获取到的:而我们后台日志打印确发现是没有获取到数组的值的:我们检查了下后台代码发现参数名也是一致的:为什么没有获取到呢?当我们打开开发者查看请求头发现:原来是我们发送请求时,JQuery在数组参数名后面给我们拼接了一个中括号[]解决方法:在后台代码@RequestParam中添加这个中括号即可:添加后
2022-12-05 15:14:15
221
Java生成图片验证码工具类源码
2023-10-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人