![](https://img-blog.csdnimg.cn/2019092715111047.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
【Java系列】
Java相关技术研究经验总结
立小言先森
这个作者很懒,什么都没留下…
展开
-
Java延迟初始化Logger日志对象
静态内部类只有在第一次被引用时才会被加载和初始化,这意味着Log对象只有在LogHolder类被首次访问时才会被创建,从而实现延迟初始化,这有助于减少应用程序的开销。由于java类加载器是线程安全的,静态内部类的加载和初始化也是线程安全的,这意味着多个线程可以安全地访问LogHolder.log对象而无需额外的同步措施。通过静态内部类的方式,可以确保Log对象在应用程序的生命周期中只被创建一次,即实现了单例模式,这有助于避免重复创建日志对象,从而节省资源。原创 2024-06-22 11:36:47 · 286 阅读 · 0 评论 -
Java列表List分组并排序
new People("田晓霞", 28, 165),原创 2024-06-11 19:22:45 · 149 阅读 · 0 评论 -
Java中List集合中多个字段如何排序
new People("田晓霞", 28, 165),原创 2024-06-11 19:01:37 · 393 阅读 · 0 评论 -
Java的Stream如何将实体类列表转换为Map
注意:如果列表中有两个或多个具有相同name的People对象,Collectors.toMap会抛出一个IllegalStateException,因为Map不允许重复的键。在上面的代码中,People::getName是一个方法引用,它引用了People类的getName方法,这个方法用于提取每个People对象的name作为Map的键。existing标识如果已经存在,则会保留现有的值;如果需要处理键重复的问题,你可以使用重载的toMap方法,他接受一个合并函数来处理键冲突的情况。原创 2024-06-08 18:33:01 · 267 阅读 · 0 评论 -
List.of,Arrays.asList,和 Collections.singletonList创建列表的区别
不可变性:List.of和Collections.singletonList创建的列表是不可变的,而Arrays.asList创建的列表在大小上是固定的,但可以通过修改原始数组来间接修改列表内容。性能:List.of在性能上更优,因为它直接返回不可变的、优化的列表实现。Collections.singletonList可能会稍慢一些,因为它需要包装元素。Arrays.asList的性能取决于数组和列表的交互方式。用途:List.of适用于需要创建任意大小不可变列表的情况。原创 2024-06-08 00:08:53 · 286 阅读 · 0 评论 -
1. 在Java中,为何枚举类型的比较推荐==而不是equals
枚举类型是一种特殊的类类型,它包含了一组固定的常量,每个枚举常量在JVM中都是唯一的,且枚举类型本身保证了这些常量的唯一性。比较运算符==是比较两个对象在内存中的引用,equals方法是比较两个对象的值是否相等。原创 2024-06-07 22:57:27 · 480 阅读 · 0 评论 -
TransmittableThreadLocal线程池中线程复用问题解决
对于TL、ITL、TTL网上有很多的介绍,对于源码的分析都很全,大家可以参考;原创 2023-08-12 16:12:54 · 922 阅读 · 0 评论 -
解锁新技能《logback标记日志过滤器MarkerFilter》
*** 全局标记过滤器,接受指定标记的日志记录到文件中* @param context 上下文* @param marker marker标识* @return 标记过滤器,将会接受被标记的日志记录到文件中//过滤器名称 filter . setName(StrUtils . join("AcceptMarkerFilter-" , marker));//上下文 filter . setContext(context);原创 2023-07-22 09:11:10 · 894 阅读 · 0 评论 -
解锁新技能《基于logback的纯java版本SDK实现》
/</</</</</</</在项目开发过程中通常会使用logback作为日志记录的依赖工具,使用方式是引入logback相关jar包,然后配置logback.xml配置文件的方式来实现;xml的配置方案如果是一个两个项目还好,那如果是几十个项目呢?每个项目都要写一遍配置文件也是一键很繁琐的事情,而且配置文件还容易出错,那我们有没有办法将其改造成一个纯java版本的SDK组件呢?如果我们需要用的时候只需要将其依赖引入项目中开箱即用是不是很方便。原创 2023-07-22 09:09:08 · 512 阅读 · 0 评论 -
解锁新技能《logback packagingData属性配置作用及源码分析》
开源SDK:原创 2023-07-22 09:07:02 · 640 阅读 · 0 评论 -
Druid数据库配置密码加密openssl生成和代码生成两种方案
【代码】Druid数据库配置openssl生成秘钥并加密密码。原创 2023-05-26 21:00:00 · 1159 阅读 · 0 评论 -
解锁新技能《Java日期转换比较计算SDK》
开源pom依赖引用:</</</</原创 2023-05-19 20:30:00 · 179 阅读 · 0 评论 -
解锁新技能《如何使用JWT创建解析令牌,使用RSA非对称加密》
开源依赖pom引用地址原创 2023-05-17 19:00:00 · 577 阅读 · 0 评论 -
解锁新技能《RSA获取私钥报java.security.InvalidKeyException: IOException : algid parse error, not a sequence》
开源依赖pom引用:原创 2023-05-17 19:00:00 · 710 阅读 · 0 评论 -
解锁新技能《Java绘制2D图形验证码方法》
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zceB9ho0-1683183671356)(/Users/yaomingyang/Library/Application Support/typora-user-images/image-20230504144214030.png)]答案:(height - (fm.getAscent() + fm.getDescent())) / 2 + fm.getAscent();问题一:绘制验证码的(x,y)坐标相对的点是哪里?原创 2023-05-04 15:02:42 · 729 阅读 · 0 评论 -
解锁新技能《Java基于注解的脱敏实现组件SDK》
Target({@JsonSensitive标注在类上,表示此类需要进行脱敏处理;@Target({/*** 脱敏类型,见枚举类型{@link SensitiveType}* @return@JsonSimField标注在类的String、Collection、String[]字段上,表示对这些字段值进行脱敏处理;@Target({/*** 要隐藏的参数key名称* @return/*** 要隐藏的参数值的key名称* @return/**原创 2023-04-23 21:00:00 · 1018 阅读 · 0 评论 -
解锁新技能《共享锁CountDownLatch》
CountDownLatch是一种同步辅助工具,允许一个或多个线程等待,直到在其它线程中执行的一组操作完成;CountDownLatch使用指定的计数初始化。wait方法会阻塞,直到当前计数由于countDown方法的调用而达到零,之后所有的等待线程都会被释放,任何后续的wait调用都会立即返回。这是一种一次性现象,计数无法重置。如果需要重置计数的版本,可以参考CyclicBarrier。原创 2023-03-25 16:41:38 · 238 阅读 · 0 评论 -
解锁新技能《Java进程退出的原理分析》
先了解下Java的Daemon线程,所谓的守护线程就是运行在程序后台的线程,通常守护线程是JVM创建的,用于辅助用户线程或者JVM工作,比较典型的如GC线程。用户创建的线程可以设置成 Daemon线程,程序的主线程(main线程)不是守护线程。Daemon线程在Java里面的定义是,如果虚拟机中只有Daemon线程运行,则虚拟机退出。- 虚拟机中可能同时有多个线程运行,只有当所有的非守护线程(通常都是用户线程)都结束的时候,虚拟机的进程才会结束,不管当前运行的线程是不是主线程。- main线程运行结束原创 2022-09-17 10:05:51 · 658 阅读 · 0 评论 -
(十二)Java工具类StringUtils中trim、trimToEmpty、trimToNull方法详解
1. trim方法源码详解 public static String trim(String str) { return str == null ? null : str.trim(); }源码解析:输入参数为null时返回null,否则去除掉字符串两边的空格或者制表符(tab键,一个tab键代表两个空格);2. trimToEmpty方法源码详解原创 2018-01-25 20:04:25 · 17764 阅读 · 0 评论 -
(十七)Java工具类StringUtils的equals、equalsIgnoreCase、equalsAny、equalsAnyIgnoreCase方法详解
1.equals方法比较两个字符串是否相等 public static boolean equals(CharSequence cs1, CharSequence cs2) { if (cs1 == cs2) { return true; } if ((cs1 == null) || (cs2 == null)) {原创 2018-02-06 14:32:49 · 22716 阅读 · 0 评论 -
(二十九)Java工具类ThreadUtils详解
前言:ThreadUtils是对于java.lang.Thread和java.lang.ThreadGroup的扩展和帮助;1.构造函数public ThreadUtils() {}分析:ThreadUtils 实例不应该在标准的应用程序中构建,相反,这个类应该使用ThreadUtils.getAllThreads(),此构造函数是公开的,允许使用JavaBean实例操作的工具;...原创 2018-02-13 14:35:20 · 2606 阅读 · 0 评论 -
fastJSON中JSON类序列化详解
序列化 序列化就是将JavaBean对象转换成JSON格式的字符串。com.alibaba.fastjson.JSON提供了许多方法(多态)实现序列化。1.基本的序列化传入一个对象,将对象转换为JSON字符串。String objJson = JSON.toJSONString(Object object);例1:自定义JavaBean转成JSON字符串User ...原创 2018-04-10 08:42:39 · 5637 阅读 · 0 评论 -
(十五)Java工具类StringUtils中isAlpha、isAlphanumeric、isAlphanumericSpace、isAlphaSpace方法详解
1.判断字符串是否是字符(字母汉子不包括特殊符号) public static boolean isAlpha(CharSequence cs) { if (isEmpty(cs)) { return false; } int sz = cs.length(); for (int i = 0; i < sz; i原创 2018-02-05 20:15:44 · 7784 阅读 · 0 评论 -
(十六)Java工具类StringUtils中defaultString、defaultIfBlank、defaultIfEmpty方法详解
1.字符串为null默认返回“”空串 public static String defaultString(String str) { return str == null ? "" : str; }2.字符串为null返回给定的默认值defaultStr public static String defaultString(Stri原创 2018-02-05 20:31:10 · 19944 阅读 · 0 评论 -
(五)Java工具类ArrayUtils详解
说明:ArrayUtils工具类在标准的应用程序中是不可以被实例化的: 参考:[参考地址](http://commons.apache.org/proper/commons-lang/javadocs/api-release/)public static boolean[] add(boolean[] array, boolean element) ArrayUtils.add(n原创 2018-01-22 14:32:42 · 20066 阅读 · 3 评论 -
guava中Table、HashBasedTable、TreeBasedTable详解
Table 当我们需要多个索引的数据结构时,大多数时候我们会选择Map&amp;amp;lt;String,Map&amp;amp;lt;String,Object&amp;amp;gt;&amp;amp;gt;Map&amp;amp;lt;String,Map&amp;amp;lt;String,Object&amp;amp;gt;&amp;amp;gt;Map这种Map套M原创 2018-07-07 10:58:52 · 18056 阅读 · 1 评论 -
(十一)Java工具类StringUtils中isEmpty、isBlank、isNotEmpty、isNotBlank方法源码详解
1. isEmpty方法源码详解 public static boolean isEmpty(CharSequence cs){ return (cs == null) || (cs.length() == 0); }源码分析:上面的方法可以看出只有当字符串非null非空串(”“)的时候才返回true;isNotEmpty方法跟跟isEmpty相反;看如下官网的例子: S原创 2018-01-25 19:17:27 · 26428 阅读 · 6 评论 -
Mac电脑安装protobuf
1.protobuf下载地址https://github.com/protocolbuffers/protobuf/releases2.将下载包解压缩到指定目录/Users/yaomingyang/Documents/IDE/protobuf-3.19.03.设置编译目录cd /Users/yaomingyang/Documents/IDE/protobuf-3.19.0./configure --prefix=/usr/local/protobuf4.切换到root用户sudo原创 2021-10-30 16:19:12 · 2255 阅读 · 0 评论 -
guava中ImmutableSet不可变不可重复对象示例详解
ImmutableSet是一个不可变的集合、线程安全、元素不可重复,它只会获取传入对象的一个副本,而不会改变原来的对象,示例代码如下: Integer a = 3; ImmutableSet&amp;lt;Integer&amp;gt; set5 = ImmutableSet .&amp;lt;Integer&amp;gt;of(a, 2); System.out.print...原创 2018-07-03 22:47:37 · 5266 阅读 · 0 评论 -
fastjson报$ref": $.data[2].indexs[0]循环引用错误
今天在做一个递归的时候遇到输出的数据有$.data[2].indexs[0]的情况,在网上查询了fastjson默认对重复的引用使用 ref方式。DisableCircularReferenceDetect:消除对同一对象循环引用的问题,默认为falseFastJson提供了SerializerFeature.DisableCircularReferenceDetect这个序列化选项,用来...原创 2018-06-13 20:16:26 · 2609 阅读 · 0 评论 -
(二十四)Java工具类Mutable接口提供可变的存储改变值详解
1.Mutable接口提供了一个通用的接口去实现可变数据类型的实现所有已知实现Mutable接口的类有MutableBoolean, MutableByte, MutableDouble, MutableFloat, MutableInt, MutableLong, MutableObject, MutableShort,这些类都是可变的,也就是修改对象的值不需要重新创建新的对象; 典型的用...原创 2018-02-09 09:50:34 · 1617 阅读 · 0 评论 -
(三十一)Processor处理器类及ArchUtils工具类详解
Processor类代表微处理器,并定义未处理器的结构和类型等属性。1.微处理器中定义了两个静态内部类,分别代表微处理器的结构和类型 //微处理器的结构内部类 public static enum Arch { BIT_32, BIT_64, UNKNOWN; private Arch() {} } //微处理...原创 2018-02-24 17:25:13 · 895 阅读 · 0 评论 -
(三十)Java工具类SerializationUtils源码详解
序列化工具类详解 package org.apache.commons.lang3; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.Obj...原创 2018-02-13 17:01:43 · 1420 阅读 · 1 评论 -
(二十二)Java工具类ToStringStyle详解
1.ToStringStyleToStringBuilder是字符串格式控制类,主要供公共接口总是通过ToStringBuilder来实现,这些类的目的是用作单例模式,没有必要每次都初始化一个新样式,程序通常使用这个类中预定义的常量之一,另外StandardToStringStyle类可以用来设置各种设置,因此大多是时候没有必要实现它的子类;如果是必须的,那么子类可以像它要求的那样覆盖尽...原创 2018-02-08 16:10:33 · 5379 阅读 · 0 评论 -
guava中ImmutableTable使用详解
ImmutableTable是一个不可变的、线程安全的、两个元素作为key且key不可以重复的二维矩阵类型集合,它跟其它的元素一样会复制加入元素的一个副本而不会改变原来的对象; 示例代码如下: ImmutableTable&amp;amp;amp;lt;Integer, Integer, Integer&amp;amp;amp;gt; table = ImmutableTable.&amp;amp;amp;lt;Integer, Integ原创 2018-07-07 10:58:32 · 3322 阅读 · 0 评论 -
Common-io工具方法读取远程服务器文件
/** * * @param url 服务器文件地址,如http://xxx.xx.xx.xx/a.txt * @return 文件内容 */ public static String readRemoteFile(String url){ return readRemoteFile(url, null); } /** * 读取远程服务器上的文件 * @param url 服务器文件地址,如http...原创 2020-05-12 19:18:34 · 1251 阅读 · 0 评论 -
(二十)Java工具类Diffable、DiffBuilder、Diff比较对象的区别及建造者模式详解
建造者模式(Builder pattern)使用多个简单的对象一步一步的构建成一个复杂的对象,这种类型的设计模式属于创建型模式,他提供了一种创建对象的最佳方式;一个Builder类会一步一步的构造最终的对象,该Builder类是独立于其它对象的;建造者模式主要是解决在软件系统中,有时候面临者一个复杂对象的创建工作,其通常由各个部分的子对象用一定的算法构成,由于需求的变化,这个复杂对象的各个部分...原创 2018-02-08 09:20:22 · 4081 阅读 · 0 评论 -
commons-io程序库使用
commons-io程序库使用commons-io库是帮助开发IO功能的实用程序库,主要包括IOUtils工具类、FileUtils工具类、FilenameUtils工具类、EndianUtils工具类、FileSystemUtils工具类;IOUtils:是使用最频繁的工具类,主要提供读、写、复制、关闭流操作FileUtils:提供基于JDK文件类的操作。包括阅读、写作、复制、比较和...原创 2019-10-13 10:26:23 · 2628 阅读 · 1 评论 -
fastJSON中@JSONField注解详解
查看@JSONField注解的源码可以了解到它的作用范围是在方法(METHOD)、属性(FIELD)、方法中的参数(PARAMETER)上。1.作用在FIELD(成员变量上)注意:1、若属性是私有的,必须有set*方法。否则无法反序列化。package com.zhujie;import com.alibaba.fastjson.JSONObject;import com...原创 2018-04-10 08:42:27 · 9522 阅读 · 0 评论 -
(二十五)Java工具类EqualsBuilder协助Object.equals(object)方法详解
1.EqualsBuilder类基本简介EqualsBuilder类提供方法为任何类建立良好的equals方法,它遵循Effective java定义的规则,特别是比较double、float、数组的大小是很棘手的,同时,确保equals()和hashcode()一致是很困难的。 两个相等的对象必须生成相同的哈希代码,但是具有相同哈希代码的两个对象不一定相等。 所有的相关字段都应该包含在相...原创 2018-02-09 17:15:41 · 3400 阅读 · 0 评论