Java
一个不称职的程序猿
一个不称职的程序猿,一个整天只想浑水摸鱼的程序猿,一个只想混吃等死的程序猿。
低调努力工作,不求闪亮显眼和光芒四射,只为平静和淡定。
展开
-
Spring 中常用的手动装载 bean 方法
在 Spring 的 bean 转载条件中,虽然 Spring 给我们提供了非常好用便捷的 Condition 相关注解,但是很多时候 Condition 相关注解并不满足我们的需求,我需要更复杂的条件手动控制是否装置 bean。这个时候我们就可以实现 Spring 为我们提供的几个接口来实现手动 bean 的注入。原创 2024-05-21 14:02:22 · 622 阅读 · 0 评论 -
Spring SpEL 表达式语言
Spring也有自己的EL,叫Spring Expression Language,简称SpEl。其可以在程序中单独使用,也可以在Spring应用中进行bean定义时使用。其核心是org.springframework.expression.Expression接口,Spring使用该接口来表示EL中的表达式。通过Expression接口的系列getValue()方法我们可以获取对应Expression在特定EvaluationContext下的值,也可以通过其系列setValue()方法来设值。原创 2023-09-21 09:16:11 · 1006 阅读 · 0 评论 -
如何记录Java对象的修改历史和实现数据修改日志
在大多数业务场景中,修改历史是非常重要的信息。例如,当我们对某个对象进行数据修改时,可能需要记录修改之前和修改之后的值,以便于我们对修改进行审核和追溯,以及诊断和解决潜在的问题。在 Java 开发中,我们可以使用观察者模式来实现记录Java对象的修改历史和实现数据修改日志。本文将介绍如何实现这一功能。原创 2023-05-31 14:07:35 · 8492 阅读 · 7 评论 -
Java Stream 流常用方法 lambda 表达式实现交集、并集、差集、去重复并集等
一般的javaList 交、并集采用简单的 removeAll retainAll 等操作,不过这也破坏了原始的javaList对象,采用java8 lambda表达式流操作则可以不影响原始list对象而得到两个javaList对象的 交、并、差集。原创 2022-09-26 16:32:11 · 4435 阅读 · 0 评论 -
Spring Boot + Flowable 工作流引擎
想必大家再看这篇文章的时候已经对目前主流的工作流引擎有所了解了。目前主流的工作流开源框架也就 Activiti/Camunda/Flowable 这几个了,在我对这三大工作流引擎简单使用了解后,最后选择了 Flowable 来写这篇文章。(有可能是我个人比较喜欢吧!在之前也有考虑过 Camunda,毕竟它更加的轻巧灵活,他的初衷就是为开发人员设计的“小工具”,但我个人的感觉而言,Camunda 从代码上看并没有 Activiti 和 Flowable 好,而且他的社区是最不活跃的一个,所以不太建议使用。当然原创 2022-06-23 14:46:15 · 8866 阅读 · 1 评论 -
Java 使用 iText5 API 根据需求导出 PDF
iText 目前有两套版本,分别是 iText5 和 iText7。iText5 应该是网上用的比较多的一个版本。iText5 因为是很多开发者参与贡献代码,因此在一些规范和设计上存在不合理的地方。iText7 是后来官方针对 iText5 的重构,两个版本差别还是挺大的。不过在实际使用中,一般用到的都比较简单的 API,所以不用特别拘泥于使用哪个版本。相关依赖<dependency> <groupId>com.itextpdf</groupId> <原创 2022-05-26 10:14:36 · 988 阅读 · 0 评论 -
基于HuTool工具实现Excel复杂表头生成、单元格合并绘制对角线(计算N叉树的最大深度和最大宽度)
基于HuTool工具实现Excel复杂表头生成、单元格合并绘制对角线(计算N叉树的最大深度和最大宽度)原创 2021-12-14 09:06:23 · 6787 阅读 · 2 评论 -
GeoTools:WKT、GeoJson、Feature、FeatureCollection相互转换
import cn.hutool.core.util.ArrayUtil;import cn.hutool.json.JSONArray;import cn.hutool.json.JSONObject;import cn.hutool.json.JSONUtil;import org.geotools.data.DataUtilities;import org.geotools.data.collection.ListFeatureCollection;import org.geotool..原创 2021-11-03 15:48:08 · 4351 阅读 · 4 评论 -
commons-math之常用科学计算(百分位、总体方差、中位数、变异系数、偏度系数、峰度系数)
import cn.hutool.core.util.NumberUtil;import org.apache.commons.math3.stat.StatUtils;import org.apache.commons.math3.stat.descriptive.moment.Kurtosis;import org.apache.commons.math3.stat.descriptive.moment.Skewness;import org.apache.commons.math3.sta..原创 2021-08-11 13:55:45 · 5646 阅读 · 0 评论 -
Collection工具(MapList指定字段排序排名、Map通过K或V排序、获取Map中第一个非空数据值)
MapTools是针对Map的一一列工具方法的封装,包括getXXX的快捷值转换方法。MapList指定字段排序排名、Map通过K或V排序、获取Map中第一个非空数据值。原创 2021-05-11 13:36:45 · 1294 阅读 · 0 评论 -
Java通过正则表达式拆分复杂字符串
将字符串通过“、”拆分成数组;在要拆分的字符串中“二苯并[a、h]蒽”是个整体;public static void main(String[] args) { String content = "砷、苯、苯并[a]芘、二苯并[a、h]蒽、五氯苯酚"; List<String> resultFindAll = ReUtil.findAll("([^、\\[]+(\\[[^\\d]+?\\]){0,1}([^、])?)", content, 0, new ArrayLis原创 2021-04-25 09:52:51 · 828 阅读 · 0 评论 -
JDK8:HashMap源码解析:treeifyBin方法
一、概述treeifyBin方法,应该可以解释为:把容器里的元素变成树结构。当HashMap的内部元素数组中某个位置上存在多个hash值相同的键值对,这些Node已经形成了一个链表,当该链表的长度大于等于9(为什么是9?TREEIFY_THRESHOLD默认值为8呀?详见put方法解析:JDK8:HashMap源码解析:put方法)的时候,会调用该方法来进行一个特殊处理。二、方法解析/** * tab:元素数组, * hash:hash值(要增加的键值对的key的hash值) ..转载 2021-04-14 09:50:26 · 191 阅读 · 0 评论 -
JDK8:HashMap源码解析:TreeNode类的treeify方法
一、概述treeify方法是TreeNode类的一个实例方法,通过TreeNode对象调用,实现该对象打头的链表转换为树结构。二、方法解析/** * 参数为HashMap的元素数组 */final void treeify(Node<K,V>[] tab) { TreeNode<K,V> root = null; // 定义树的根节点 for (TreeNode<K,V> x = this, next; x != null; x .转载 2021-04-14 09:48:37 · 343 阅读 · 2 评论 -
JDK8:HashMap源码解析:hash方法
一、概述我们知道在HashMap中,一个键值对存储在HashMap内部数据的哪个位置上和K的hashCode值有关,这也是因为HashMap的hash算法要基于hashCode值来进行。这里要注意区分三个概念:hashCode值、hash值、hash方法、数组下标hashCode值:是KV对中的K对象的hashCode方法的返回值(若没有重写则默认用Object类的hashCode方法的生成值)hash值:是在hashCode值的基础上又进行了一步运算后的结果,这个运算过程就是hash方法。转载 2021-04-14 09:37:58 · 259 阅读 · 0 评论 -
JDK8:HashMap源码解析:put方法
一、概述Map的put方法接受两个参数,key和value,该方法用于存储键值对。HashMap的put方法只有一行代码:return putVal(hash(key), key, value, false, true); //参见:hash方法解析hash方法解析可知put方法是一个方便用户使用的快捷方式,具体逻辑都是在putVal方法中实现的,我们就针对putVal方法的实现来做解析。二、方法解析/** * @param hash key的hash值..转载 2021-04-14 09:19:00 · 218 阅读 · 0 评论 -
JDK8:HashMap源码解析:TreeNode类的putTreeVal方法
一、概述我们都知道,目前HashMap是采用数组+链表+红黑树的方式来存储和组织数据的。在put数据的时候,根据键的hash值寻址到具体数组位置,如果不存在hash碰撞,那么这个位置就只存储这么一个键值对。参见:put方法分析如果两个key的hash值相同,那么对应数组位置上就需要用链表的方式将这两个数据组织起来,当同一个位置上链表中的元素达到8个的时候,就会再将这些元素构建成一个红黑树(参见:treeifyBin方法分析),同时把原来的单链表结构变成了双链表结构,也就是这些元素即维持着红黑树的转载 2021-04-14 09:11:42 · 195 阅读 · 0 评论 -
mapper.xml中特殊符号的转义
< <= > >= & ’ " < <= > >= & ' "原创 2021-04-13 17:53:07 · 437 阅读 · 0 评论 -
高效Java树构造工具(构造map树,不依赖实体)
高效高性能快到起飞的树构造package com.xf.soilinformationize.utils;import cn.hutool.core.collection.CollUtil;import cn.hutool.core.lang.tree.Tree;import cn.hutool.core.lang.tree.TreeNode;import cn.hutool.core.lang.tree.TreeNodeConfig;import cn.hutool.core.lang.原创 2021-03-05 14:07:13 · 601 阅读 · 2 评论 -
AI核心代码,估值一个亿
【AI核心代码】估值一个亿的AI核心代码(开源了)import java.util.Scanner;/** * <p> * AI核心代码,估值一个亿 * </p> * * @Author REID * @Blog https://blog.csdn.net/qq_39035773 * @GitHub https://github.com/BeginnerA * @Data 2021/3/3 * @Version V1.0 **/public class原创 2021-03-03 10:06:43 · 606 阅读 · 0 评论 -
Java将区间值按照新区间重新分组
package com.xf.soilinformationize.utils;import cn.hutool.core.convert.Convert;import java.util.List;/** * <p> * 将区间值重新按照新区间分组 * </p> * * @Author REID * @Blog https://blog.csdn.net/qq_39035773 * @GitHub https://github.com/Beginn...原创 2021-02-24 14:35:27 · 773 阅读 · 0 评论 -
Java8在Stream的forEach操作时获取index
import java.util.Objects;import java.util.function.BiConsumer;/** * <p> * 实施此接口可以使对象成为目标 * </p> * * @Author 杨明春 * @Blog https://blog.csdn.net/qq_39035773 * @GitHub https://github.com/BeginnerA * @Data 2021/2/23 * @Version V1.0 ...原创 2021-02-24 14:16:18 · 8387 阅读 · 1 评论 -
Java参数校验之SpringBoot的@validated注解
@validated注解是spring boot用来校验数据准确性的,如果数据异常则会统一抛出异常,方便异常中心统一处理。(@validated的具体使用自行百度/Google)//空检查@Null //验证对象是否为null @NotNull //验证对象是否不为null, 无法查检长度为0的字符串 @NotBlank //检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格. @NotEmpty //检查约束元素是否为NULL或者是EMPTY.原创 2020-12-30 15:25:47 · 751 阅读 · 0 评论 -
更新快到飞起的Java-新特性
2017年8月起,JCP执行委员将Java的发布频率改为每六个月一次,且每三年一个大的稳定版本。此后,Java一直遵循这个频率发布新版本,如今Java15已悄然问世。虽然大多数的开发者和企业仍在使用Java8,但是关注和学习Java的新特性是很有必要的。按照官方介绍,新的版本发布周期将会严格按照时间节点,于每年的 3 月和 9 月发布,Java 11 发布的时间节点也正好处于 Java 8 免费更新到期的前夕。与 Java 9 和 Java 10 这两个被称为"功能性的版本"不同,Java原创 2020-12-11 17:54:06 · 249 阅读 · 0 评论 -
Java读取文件时中文路径处理
在日常Java操作文件开发中,经常会碰到因为中文路径无法操作文件的问题,但是又因为英文不给力又不得不用中文命名,所以就因为这中文在使用中就会遇到一系列的问题。TestURL().class.getResource("").getPath()或TestURL().class.getResource("").getFile()获得的路径,不能被FileReader()和FileWriter()直接应用。原因是URL对空格,特殊字符(%,#,[]等)和中文进行了编码处理。读取文件路径时可能存在以下情况:原创 2020-12-03 10:16:21 · 3017 阅读 · 2 评论 -
Java后台插件(工具包)
1、commons常用工具包的使用commons-lang包这个包中的很多工具类可以简化我们的操作,在这里简单的研究其中的几个工具类的使用。2、XStream处理XML用法1.简介: XStream是一个简单的基于Java库,Java对象序列化到XML,反之亦然(即:可以轻易的将Java对象和xml文档相互转换)。下载地址:http://x-stream.github.io/download.html特点:使用方便 - XStream的API提供了一个高层次外观,以简化常用的用例。原创 2020-06-16 17:56:35 · 1104 阅读 · 0 评论 -
Java字符串常用小工具类(String)
import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.io.UnsupportedEncodingException;import java.net.URLEncoder;import java.security.MessageDigest;import java.util.ArrayList;import java.util.Locale;import java.util.regex.Matcher;im..原创 2020-07-31 16:09:06 · 292 阅读 · 0 评论 -
Objec常用小工具类
package org.governance.common.utils;import lombok.extern.slf4j.Slf4j;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.lang.reflect.Modifier;import java.util.LinkedHa.原创 2020-07-31 16:06:36 · 134 阅读 · 0 评论 -
Java枚举常用小工具类
package org.governance.common.utils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.math.BigDecimal;import java.util.Objects;/** * 枚举工具类 * .原创 2020-07-31 16:01:24 · 433 阅读 · 0 评论 -
Java直接调用exe可执行文件传参并且获取返回值
引言 平日里,我们看到了很多已经成型的可执行文件,而且经过了一定的封装。因为开源的关系,大多时候可以自己使用eclipse进行编译,但也常常遇到不如直接调用更加方便的情况。那么这时候,就需要使用Java来直接调用这些出色的可执行文件。之前在开发有关GIS项目的时候其中有一个项目要平凡的用Java程序去调用exe可执行文件,具体为什么要这样做我也不清楚,一切任务听从领导的安排。表达能力不好直接上代码~~~一个小Case其实很简单, 首先编写一个命令command;R...原创 2020-06-19 15:21:40 · 5235 阅读 · 0 评论 -
JVM内存管理------垃圾搜集器参数精解(终极)
博客园看到一个关于JVM内存管理的系列文章,讲的生动形象,很容易吸收理解,顾转载到自己的博客中原博主:左潇龙原地址:http://www.cnblogs.com/zuoxiaolong/ 本文是GC相关的最后一篇,这次LZ只是罗列一下hotspot JVM中垃圾搜集器相关的重点参数,以及各个参数的解释。废话不多说,这就开始。垃圾搜集器文章传送门 JVM内存管理------JAVA语言的内存管理概述 JVM内存管理----...转载 2020-06-19 08:47:07 · 175 阅读 · 0 评论 -
JVM内存管理------垃圾搜集器精解(让你在垃圾搜集器的世界里耍的游刃有余)(8)
博客园看到一个关于JVM内存管理的系列文章,讲的生动形象,很容易吸收理解,顾转载到自己的博客中原博主:左潇龙原地址:http://www.cnblogs.com/zuoxiaolong/引言 在上一章我们已经探讨过hotspot上垃圾搜集器的实现,一共有六种实现六种组合。本次LZ与各位一起探讨下这六种搜集器各自的威力以及组合的威力如何。 为了方便各位的观看与对比,LZ决定采用当初写设计模式时使用的方式,针对某些搜集器,分几个维度去解释...转载 2020-06-19 08:36:40 · 182 阅读 · 0 评论 -
JVM内存管理------垃圾搜集器简介(7)
博客园看到一个关于JVM内存管理的系列文章,讲的生动形象,很容易吸收理解,顾转载到自己的博客中原博主:左潇龙原地址:http://www.cnblogs.com/zuoxiaolong/引言 上一章我们已经探讨过GC的各个算法,那么垃圾搜集器是什么呢? 通俗的讲,使用编程语言将算法实现出来,产生的程序就是垃圾搜集器了。既然谈到了编程语言的实现,那么在讨论垃圾搜集器的时候,就已经涉及到具体的虚拟机实现了。 或许有不少做JAVA...转载 2020-06-18 17:55:57 · 173 阅读 · 0 评论 -
JVM内存管理------GC算法精解(五分钟教你终极算法---分代搜集算法)(6)
博客园看到一个关于JVM内存管理的系列文章,讲的生动形象,很容易吸收理解,顾转载到自己的博客中原博主:左潇龙原地址:http://www.cnblogs.com/zuoxiaolong/引言 何为终极算法? 其实就是现在的JVM采用的算法,并非真正的终极。说不定若干年以后,还会有新的终极算法,而且几乎是一定会有,因为LZ相信高人们的能力。 那么分代搜集算法是怎么处理GC的呢?对象分类 上...转载 2020-06-18 17:52:00 · 182 阅读 · 0 评论 -
JVM内存管理------GC算法精解(复制算法与标记/整理算法)(5)
博客园看到一个关于JVM内存管理的系列文章,讲的生动形象,很容易吸收理解,顾转载到自己的博客中原博主:左潇龙原地址:http://www.cnblogs.com/zuoxiaolong/ 本次LZ和各位分享GC最后两种算法,复制算法以及标记/整理算法。上一章在讲解标记/清除算法时已经提到过,这两种算法都是在此基础上演化而来的,究竟这两种算法优化了之前标记/清除算法的哪些问题呢?复制算法 我们首先一起来看一下复制算法的做法,复制...转载 2020-06-18 17:45:24 · 127 阅读 · 0 评论 -
JVM内存管理------GC算法精解(五分钟让你彻底明白标记/清除算法)(4)
博客园看到一个关于JVM内存管理的系列文章,讲的生动形象,很容易吸收理解,顾转载到自己的博客中原博主:左潇龙原地址:http://www.cnblogs.com/zuoxiaolong/ 相信不少猿友看到标题就认为LZ是标题党了,不过既然您已经被LZ忽悠进来了,那就好好的享受一顿算法大餐吧。不过LZ丑话说前面哦,这篇文章应该能让各位彻底理解标记/清除算法,不过倘若各位猿友不能在五分钟内看完,那就不是LZ的错啦。 好了,前面只是小小开个玩笑,让各位猿友...转载 2020-06-18 17:40:59 · 169 阅读 · 0 评论 -
JVM内存管理------GC简介(3)
博客园看到一个关于JVM内存管理的系列文章,讲的生动形象,很容易吸收理解,顾转载到自己的博客中原博主:左潇龙原地址:http://www.cnblogs.com/zuoxiaolong/为何要了解GC策略与原理? 原因在上一章其实已经有所触及,就是因为在平时的工作和研究当中,不可避免的会遇到内存溢出与内存泄露的问题。如果对GC策略与原理不了解的情况下碰到了前面所说的问题,很多时候会让人不知所措。 当我们了解了相关知识以后,虽然...转载 2020-06-18 17:35:04 · 124 阅读 · 0 评论 -
JVM内存管理------杂谈(借此也论一论obj=null)(2)
博客园看到一个关于JVM内存管理的系列文章,讲的生动形象,很容易吸收理解,顾转载到自己的博客中原博主:左潇龙原地址:http://www.cnblogs.com/zuoxiaolong/ 各位园友好,LZ是从某网站转战过来的博主,看到这里很多博主都称看友们为园友,LZ斗胆模仿一下,不过以前,LZ其实都是称看友们为猿友的。之前LZ在某网站已经写了一系列文章,已经全部复制到了园内的新博客,主要是设计模式的内容,各位有兴趣的也可以去翻看一下,其中有不少还是颇受之前猿友们喜...转载 2020-06-18 17:25:35 · 144 阅读 · 0 评论 -
JVM内存管理------JAVA语言的内存管理概述(1)
博客园看到一个关于JVM内存管理的系列文章,讲的生动形象,很容易吸收理解,顾转载到自己的博客中原博主:左潇龙原地址:http://www.cnblogs.com/zuoxiaolong/引言 内存管理一直是JAVA语言自豪与骄傲的资本,它让JAVA程序员基本上可以彻底忽略与内存管理相关的细节,只专注于业务逻辑。不过世界上不存在十全十美的好事,在带来了便利的同时,也因此引入了很多令人抓狂的内存溢出和泄露的问题。 可怕的事情还不只如此,...转载 2020-06-18 17:19:09 · 164 阅读 · 0 评论