拄杖忙学轻声码
希望学习的同时也能和大家交流分享技术
展开
-
java中去掉字符串中的特殊符号(杂质),解决方案
在实际业务中,常常会遇到需要把某个字符串中的特殊符号全部去掉,只保留数字、大小写字母、汉字等。(1)从结果输出可以看到,字符串中几乎包含了所有特殊符号,最后都能去除干净,只保留了数字、大小写字母、汉字。去除后结果:我是中文这是数字0123456789字母aABbcd。原创 2024-07-14 10:36:40 · 389 阅读 · 0 评论 -
java中 stream()、parallelStream() 的区别对比,forEach()、forEachOrdered() 的区别对比
同样在 parallelStream() 并行流中,forEach()不保证顺序处理,而 forEachOrdered() 可以保证按顺序处理。1、从结果可以看出,stream()为串行流、parallelStream()为并行流。2、parallelStream()是利用多线程进行的,这可以很大程度提高处理效率。3、parallelStream() 示例。2、forEachOrdered() 示例。3、 forEach() 示例。2、stream() 示例。1、 由结果输出可以看到,原创 2024-05-29 15:42:40 · 411 阅读 · 0 评论 -
java接口防重复提交简单有效的解决方案
在实际业务场景中,有些关键接口不允许重复多次提交,例如订单提交、xx发布等接口,一旦重复提交可能会导致很多问题,此时就要做接口防重提限制。下面介绍一个简单的方案。1、实现思路,首次请求则设置缓存标识并标记次数为1,随后每次请求只要没达到上限限制数量,则标记次数增量+1,达到上限次数则报错提示。二、创建切面类,拦截处理校验。一、创建防重提专用的注解。原创 2024-04-28 14:15:00 · 453 阅读 · 0 评论 -
java中基本数据类型和引用数据类型有哪些?有什么区别?
3、基本数据类型用 == 和!= 是比较数值的,而 equals() 方法是比较内存地址的)1、基本数据类型是直接存储在栈(stack)中的,而引用数据类型在栈中存储的是一个地址,这个地址指向堆(heap)中的实际数据。2、基本数据类型的默认值是 0 或 false,而引用数据类型的默认值都是null。● String、Integer、Long等都是引用类型。● 整数型:byte、short、int、long。● Java类、接口、数组等都是引用数据类型。● 所有引用类型的默认值都是null。原创 2024-04-26 15:57:42 · 280 阅读 · 0 评论 -
java通过Comparator比较器对集合进行多属性连续分组内升降排序,以及null空值排最前或最后
一、排序数据准备,分别对 one、two、three 三个属性进行连续分组内排序。连续排序,并且把被排序属性值为null的排在最后。连续排序,并且把被排序属性值为null的排在最后。原创 2024-04-26 12:09:43 · 347 阅读 · 2 评论 -
Spring发布订阅机制,应用监听(ApplicationListener)事件(ApplicationEvent)的基本用法
在实际业务中,一些经常重复操作的动作可以交给spring的监听发布事件来处理,写好监听逻辑,需要操作库的时候只需要发布对应的事件即可。3、例如实际业务中对订单有任何变动操作的,需要记录订单变动日志的场景下,可以使用spring的事件监听记录订单变动日志信息。如果多个监听类监听同一个事件类,此时发布一个事件,多个监听类每个都会监听到该事件。一、创建业务事件Bean,并继承ApplicationEvent。1、有监听就有发布,有发布就有监听,相辅相成。2、监听类只能监听相对应泛型Bean的事件。原创 2024-03-01 14:30:00 · 226 阅读 · 1 评论 -
java中子类继承父类,重写构造方法、重写抽象方法使用案例及区别
2、子类重写父类的构造方法,父类可以是抽象类、也可以不是抽象类。并且子类构造方法可以对父类构造方法进行参数个数拓展,前提是只能增加参数(不能减少父类构造方法的参数个数)3、子类可以重写父类的抽象方法,重写父类抽象方法的前提为父类必须是抽象类、抽象方法。二、新建一个子类,继承基础抽象类并重写父类构造方法、抽象方法。1、以上写法可以得出,子类可以重写父类的构造方法和抽象方法。一、新建一个基础抽象类。原创 2024-02-29 10:30:00 · 551 阅读 · 0 评论 -
Linux Centos7、Centos8、OpenCloudOS 8系统应用服务调用(上传附件)接口报The temporary upload location [/tmp/tomcat.xxx.8
3、文件上传接口,入参类型为 Multipart(form-data)的方式处理请求时,默认就是在第二个目录(tomcat.xxx.8070)下创建临时文件的(而本次报错的接口刚好就是form-data的入参格式)2、修改 /usr/lib/tmpfiles.d/ 目录下的 tmp.conf 文件,排除清除tomcat开头的目录和文件(系统 /tmp 目录的清理规则取决于 /usr/lib/tmpfiles.d/tmp.conf 文件设定的策略。(治标不治本,不推荐)原创 2024-02-29 14:30:00 · 252 阅读 · 0 评论 -
java中二维数组(String[][])的简单示例
1、其实简单来说,二维数组就是一个数组中,每个元素都是一个数组,即数组包数组。2、由此可见,二维数组其实就是常规的集合中元素又是集合,也就是说。1、二者输出结果一致。原创 2024-02-01 13:45:00 · 836 阅读 · 0 评论 -
Java中逻辑运算符 | 和 || 的区别
二者都是逻辑运算或的关系,即多条件中任意一个成立,则整个运算逻辑成立。2、|| 则从左向右依次,任意一个成立则终止,不会再运算后面的逻辑。3、| 则从左向右依次,逐个运算全部逻辑。1、|| 和 | 都是或逻辑运算符。原创 2024-02-01 10:00:00 · 450 阅读 · 0 评论 -
SpringBoot项目切面编程AOP之@Aspect
aop切面编程想必大家都不陌生了,aspect可以很方便开发人员对请求指定拦截层,一般是根据条件切入到controller控制层,做一些鉴权、分析注解、获取类名方法名参数、记录操作日志等。2、aop默认无法切入 private 修饰的方法,切入点表达式定义的修饰符要和被切入的方法修饰符一致,否则无法切入。5、@Around:环绕增强,包围一个连接点的增强,最强大的一个方式,且常用。3、使用切入点切入标记注解@Before、@After、@Around等。2、定义切入点标记注解@Pointcut。原创 2021-11-26 16:56:46 · 10251 阅读 · 0 评论 -
Naocs配置中心配置映射List、Map、Map嵌套List等方式
【1】@ConfigurationProperties(prefix = "list-json-str") 其中 prefix 的 list-json-str 为配置内容的根节点属性。【2】示例代码中 listJsonStrList、cfTestMap、cfTestMapValForList 是配置类的映射属性。【3】示例代码中 ListByJsonStrDto:映射属性传输类dto,此 dto 内属性与配置内容中的节点属性一一映射。原创 2023-11-08 23:57:25 · 1283 阅读 · 0 评论 -
Java中使用 Base64、UrlEncode、URLDecoder 实现对字符串编码、解码
java的 UrlEncode 等效于hutool的 URLEncodeUtil 编码,java的 URLDecoder 等效于hutool的 URLDecoder 解码。【2】使用hutool的 URLEncodeUtil、URLDecoder 可以对路径字符串进行编解码。2、验证hutool的 URLEncodeUtil、URLDecoder 编码和解码。1、验证java的 UrlEncode、URLDecoder 编码和解码。原创 2024-01-06 19:13:17 · 1617 阅读 · 0 评论 -
Java实现生成普通二维码(输出流和Base64)、小程序二维码(Base64)、获取小程序短链接
1、使用 Hutool QrCodeUtil 工具类生成普通二维码,关键代码。(2)请求微信api地址需要携带query参数 access_token。(2)请求微信api地址需要携带query参数 access_token。(1)成功获取到小程序二维码所需要的Base64码。(1)成功获取到小程序短链接。1、请求微信api示例代码。1、请求微信api示例代码。(2)Base64方式。原创 2024-01-03 14:00:00 · 1217 阅读 · 0 评论 -
解决java接口使用spring-validation验证入参类型为List校验不生效的问题
由于 List 是接口,无法直接用于参数验证,但可以通过实现类重写 List 接口,把此实现类作为校验dto即可。传空值不可以请求,校验已生效。传空值可以请求,无法验证。原创 2024-01-03 10:00:00 · 1724 阅读 · 0 评论 -
Java使用 List.stream().map() 或 List.stream().peek() 为集合中元素的空属性设置默认值
2、List.stream().map() 设置过后需要返回值,List.stream().peek() 设置过后不需要返回值。1、List.stream().map() 和 List.stream().peek() 都可以设置属性默认值。3、如果只为了设置属性默认值,例如把null设为0,推荐使用 List.stream().peek()原创 2024-01-02 14:00:00 · 1334 阅读 · 0 评论 -
Java中 String.format()、MessageFormat.format() 格式化拼接字符串使用介绍
2、MessageFormat.format() 也是格式化作用,但 MessageFormat.format() 使用的是标准占位符,且占位符必须指定参数索引,否则无法格式化。1、Java中的 String.format() 方法是一种格式化字符串的方法,它允许开发人员使用特定的格式将一组数据转换成一定格式的字符串。(2)、%.2f或%.3f 分别对应保留2位小数或3位小数,保留小数自动使用四舍五入规则。(1)、这个例子中,我们使用两个占位符 %tF和%tT,分别代表要格式化的日期和时间。原创 2024-01-02 10:00:00 · 898 阅读 · 0 评论 -
Java中MDC是干嘛的,有什么作用
Log4j、Logback或者Log4j2等日志中最常见区分同一个请求的方式是通过线程名,而如果请求量大,线程名在相近的时间内会有很多重复的而无法分辨,因此引出了trace-id,即在接收到的时候生成唯一的请求id,在整个执行链路中带上此唯一id.2、上面方式,只能在当前线程中获取到值,因为 MDC 的实现原理就是基于 ThreadLocal,而 ThreadLocal 的主要作用就是只对当前线程有效。MDC.java本身不提供传递traceId的能力,真正提供能力的是MDCAdapter接口的实现。原创 2024-01-01 18:11:11 · 1431 阅读 · 0 评论 -
java中收集器分组函数 Collectors.groupingBy() 的用法详解
【2】推荐写法二,Collectors.toMap() 会使用 Function.identity() 或 o -> o 确定使用对象,BinaryOperator.minBy()或maxBy() 则用来规定比较属性,例如按分数、id等取最大或最小的那条数据。java的 stream 流是非常重要的特性,在开发中是必备的技能,这里着重分析一下 Collectors.groupingBy() 的各种用法。1、代码示例,在第六步的基础上优化。【1】以上二种写法是等效的。原创 2024-01-01 15:46:41 · 3204 阅读 · 1 评论 -
解决swagger报:java.lang.IllegalStateException: Ambiguous models equality when conditions is empty
(2)解决(1)问题,需要把当前类中引用的当前dto类型属性和引用当前dto类的其他dto中对应的类型属性隐藏掉(@ApiModelProperty(value = "xxx", hidden = true))例如:aDto、bDto,aDto中引用aDto自己,bDto中也引用了aDto,就会出现出现本次所说的异常现象,此时把aDto中引用aDto自己这个属性隐藏掉,再把bDto中也引用的aDto属性隐藏掉即可。2、把循环引用的两个dto中swagger属性的文档标记为隐藏 hidden = true。原创 2023-12-21 12:12:21 · 1057 阅读 · 0 评论 -
Java使用 String.CASE_INSENSITIVE_ORDER 实现对一组字符串排序或根据首字母升序排序,常用于参数签名
2、比较器 String.CASE_INSENSITIVE_ORDER(Comparator) 默认排序策略是升序,如果需要降序可以设置为降序策略 String.CASE_INSENSITIVE_ORDER.reversed()可以看到 CASE_INSENSITIVE_ORDER 是 String 类中的一个不区分大小写的比较器对象,可以用来对一组无序的字符串进行升序或降序排序。1、从输出结果可以看到,比较器 String.CASE_INSENSITIVE_ORDER 可以对字符串排序,符合预期。原创 2023-12-18 23:19:14 · 726 阅读 · 0 评论 -
Java中 a++ 和 ++a 有什么区别
(3)所以输出a是完成+1后的结果为2,而赋值给b的值是+1之前a的值。(3)所以输出a是完成+1后的结果为2,而赋值给b的值是+1之后a的值。(2)通过结果输出可以看到,++a 是先把a变量+1然后再使用变量a。2、如果你需要先使用变量的值,再将其递增,那么应该使用a++3、如果你需要先将变量递增,再使用其新值,那么应该使用++a。(2)通过结果输出可以看到,a++ 是先使用变量a后再+1。,先使用a的当前值,然后再将a的值递增1。,先将a的值递增1,然后再使用a的新值。++a是前缀递增运算符。原创 2023-12-18 22:27:51 · 928 阅读 · 0 评论 -
EasyExcel解决文件读写问题,linux服务器没有安装字体支持而导致出现错误
在使用 easyexcel 进行导出数据时,在 windows和mac 环境中都能正常导出,但在测试环境 linux 服务器上导出报空指针异常,经排查可能是因为 linux 服务器没有安装字体支持而导致报错。由于缺少了 FontConfig 组件。原创 2023-12-13 00:07:11 · 977 阅读 · 0 评论 -
SpringBoot项目中获取(下载)业务功能的导入数据模板文件
在实际业务场景中,经常会遇到某些管理功能需要数据导入共功能,但既然是导入数据,肯定会有规则限制,有规则就会有数据模板,但这个模板一般是让客户自己下载固定规则模板,而不是让客户自己随便上传模板。下面介绍直接下载模板。1、在项目的 resource 包下创建 template 目录专门用来存放模板文件。2、把模板文件放入此目录中。3、 编写下载模板接口代码。5、成功下载模板文件。原创 2023-11-18 23:57:44 · 684 阅读 · 0 评论 -
使用 hutool 工具包的 DesensitizedUtil 脱敏工具类实现对常见信息脱敏
2、除对以上脱敏外,还可以对身份证号、银行卡等进行脱敏,脱敏类参考:DesensitizedType。1、以上是对中文姓名、手机号码、邮箱脱敏。原创 2023-11-09 00:41:22 · 718 阅读 · 0 评论 -
使用hutool工具包的 NanoId 类生成纳米字符串(id),以及使用 RandomUtil 生成随机字符串
3、指定长度自定义字符随机字符串,代码示例。2、使用自定义基础字符,代码示例。1、指定长度随机字符串,代码示例。2、指定位随机数字符串,代码示例。1、使用默认基础字符,代码示例。原创 2023-11-08 23:56:15 · 1093 阅读 · 0 评论 -
java使用stream流把集合中元素的属性空值赋值为0,BigDecimal类型属性使用reduce()自定义运算符,避免计算的时候导致报错
3、BigDecimal类型的属性可以使用 .reduce(new BigDecimal(0), BigDecimal::add) 方法进行逻辑运算。1、把集合元素中属性的空值赋值为0,需要开启实体类或dto类的 @Accessors(chain = true) 链式写法。2、stream()后面可以连续map绘制,如 stream().map().map().map()计算结果:30.35。原创 2023-11-07 23:23:11 · 1740 阅读 · 0 评论 -
使用 Hutool 的 StrUtil 工具对字符串颠倒翻转,以及其他常用工具类使用记录
1、可以使用 DateUtil.offset() 指定抵消(年月日或时分秒)2、正数是获取之后的日期,负数是获取之前的日期。原创 2023-11-07 23:14:42 · 440 阅读 · 0 评论 -
java验证 Map 的 key、value 是否可以为空
3、Map中 key、value 也可以同时为 null。1、从结果看,Map中 key 可以为 null。2、Map中 value 也可以为 null。原创 2023-11-07 23:00:55 · 1706 阅读 · 0 评论 -
java使用 Map 模拟分布式锁的原理,key是否存在,若存在则只做一次动作
在实际业务场景中,通常会遇见在某个循环块中,通过自定义规则,如果前面数据已经做过相同的业务动作,则后面数据再有相同的规则就不需要再执行该动作。从结果看,符合规定相同的邮箱只发送一次的预期。原创 2023-11-07 22:47:31 · 169 阅读 · 0 评论 -
java使用 stream().skip() 配合 limit() 对集合元素进行分页
1、从输出结果看,达到对 list 集合数据分页的预期。原创 2023-11-07 21:37:38 · 805 阅读 · 0 评论 -
java中获取List集合元素的索引,并重设该索引对应的元素值
1、以下方式可以获取元素的索引,并通过索引重设对应的元素值。从结果看,达到获取指定条件元素的索引,并重设值。从结果看,达到获取指定条件元素的索引,并重设值。原创 2023-11-07 21:18:01 · 671 阅读 · 0 评论 -
HuTool工具类 CollUtil 实现多个集合的交集、差集
2、交集支持2个以上多集合取交集,交集结果支持去重和不去重。3、差集只支持2个集合取差集,并且不支持差集结果去重。1、从验证结果看,符合取交集、差集预期。交集结果:[4, 5, 5]去重交集结果:[4, 5]差集结果:[1, 6]原创 2023-09-23 07:29:52 · 5653 阅读 · 1 评论 -
Java使用 MailUtil、JavaMailSender 实现发送邮件,QQ邮箱为例
2、在 resources 目录下创建配置文件 mail.setting。2、配置 bootstrap.yml 邮件服务属性。成功接收到包含附件的邮件。原创 2023-07-24 12:00:43 · 1121 阅读 · 0 评论 -
Java使用 java.util.regex.Pattern 正则表达式校验参数值是否规范
java中我们可以利用 @Pattern 注解对某个入参进行规则校验,但有些特殊参数在接口入口处不方便校验,需要在代码中校验。1、校验手机号:@Pattern(regexp = "^0?1[0-9]\\d{9}$", message = "手机号格式不正确")从结果看,使用 java.util.regex.Pattern 配合正则表达式可以校验字符,符合预期。示例正则表达式 ^[a-zA-Z0-9]+$ 限制只能输入大小写字母、和数字。1、输入特殊字符、空格等校验。2、输入符合表达式的字符。原创 2023-07-22 18:32:30 · 2129 阅读 · 0 评论 -
浏览器或者<img src = ““/>把Base64码转换成图片
3、转换支持 jpeg 格式:data:image/jpeg;base64,+生成的base64码。1、转换支持 png 格式:data:image/png;base64,+生成的base64码。2、转换支持 jpg 格式:data:image/jpg;base64,+生成的base64码。原创 2023-07-06 09:43:08 · 7614 阅读 · 0 评论 -
解决Java使用 Hutool QrCodeUtil 生成二维码图片报错问题
使用 Hutool 包下的 QrCodeUtil 工具类生成二维码,报如下错误。需要依赖如下包使用,导入包即可。原创 2023-07-05 09:41:45 · 1571 阅读 · 2 评论 -
解决 BigDecimal 类型属性整数返回到前端不显示.00的问题
【代码】解决 BigDecimal 类型属性整数返回到前端不显示.00的问题。原创 2023-06-29 18:54:37 · 2564 阅读 · 0 评论 -
@DateTimeFormat用法、@JsonFormat格式化日期时间后比原来的时间少了八小时问题用法
DateTimeFormat:作用域为入参,针对路径传参方式生效,作用是入参日期格式化,前端传入日期格式字符串到后端,会自动转换为日期类型。@JsonFormat:作用域为出参、入参,针对 @RequestBody 请求体入参或出参都有效果,作用是把日期类型和日期字符串相互转换。原创 2021-08-26 10:42:08 · 2534 阅读 · 1 评论 -
Java Restful API接口获取请求头、请求体、以及设置响应状态码、应答(响应)体等
【1】一般我们会为 @PostMapping、@PutMapping、@PatchMapping 请求方式设置请求体,@GetMapping、@DeleteMapping 通过路径传参,不设置请求体(也可以设置请求体)1、从 request 对象中,使用缓冲流读取器、stream流等方式获取请求体。3、通过 response 对象可以通过输出流对象,以字节的方式写入响应体。1、使用缓冲读取器读取 request 的输入流对象,可以获得请求体。2、把响应体写入输出流之后,需要冲刷、关闭输出流对象。原创 2023-03-20 23:17:49 · 4464 阅读 · 0 评论