- 博客(155)
- 收藏
- 关注
原创 Java 将对象转为 Map 的几种方法
可以先将对象序列化为 JSON 字符串,然后再将该字符串反序列化为 Map 对象。Guava 不直接支持对象到 Map 的转换,需要手动创建 Map 并填充数据。Hutool 有一个 BeanUtil 类可以直接将对象转换为 Map。在 Java 开发中,有时需要将对象转为 Map,以下是几种方式。二、对象转为 Map 的几种方式。2.1 使用 Jackson。2.4 使用 Hutool。一、Java 对象示例。2.3 使用 Guava。2.2 使用 Gson。
2025-04-21 10:45:24
398
原创 Java 实现 Set<String> 与 String 互转
在 Java 开发过程中,有时需要将 Set<String> 转为 String 存储,后续使用时再还原回去。此时就需要 Java 实现 Set<String> 与 String 互转。以下是一种互转方式。Java 代码示例如下。最终运行结果如下所示。
2025-04-10 10:23:32
327
原创 Java 实现 List<String> 与 String 互转
在 Java 开发过程中,有时需要将 List 转为 String 存储,后续使用时再还原回去。此时就需要 Java 实现 List 与 String 互转。以下是一种互转方式。Java 代码示例如下。最终运行结果如下所示。采用如下工具包实现。
2025-04-10 10:03:14
334
原创 shell 脚本中使用 echo 输入字符串到文件,文件名带有 ?(^M)之类的乱码
在 Linux 环境下,在 shell 脚本(test.sh)中使用 echo 命令输出字符串到文件,结果输出的文件名带有?,在 Linux 环境下查看,带有 ^M 乱码,如下所示。
2025-02-07 16:28:21
268
原创 LeetCode: 3274. 检查棋盘方格颜色是否相同
进一步地,由于 奇数 + 奇数 = 偶数,偶数 + 偶数 = 偶数,所以如果 (s[0] + s[1]) mod 2 是偶数,那么格子是黑格;如果 (s[0] + s[1]) mod 2 = (t[0] + t[1]) mod 2,那么两个格子颜色相同,否则不同。给你两个字符串 coordinate1 和 coordinate2,代表 8 x 8 国际象棋棋盘上的两个方格的坐标。根据题目中的图片,如果 s[0] 和 s[1] 的 ASCII 值的奇偶性相同,那么格子是黑格,否则是白格。以下是棋盘的参考图。
2024-10-24 11:03:38
504
原创 Java 如何快速将一个对象的空值属性置为空字符串?
在一些场景,例如 mybatis 的数据插入时,对象属性不能为 null。如果对象属性存在 null 的情况,可以先将空值属性置为空字符串。在 Java 中,可以使用反射来快速将一个对象的空值属性置为空字符串。
2024-01-02 16:30:45
1720
1
原创 @SpringBootApplication 包含的三个注解及其含义
Configuration 这个注解的作用就是声明当前类是一个配置类,然后 Spring 会自动扫描到添加了 @Configuration 的类,读取其中的配置信息,而 @SpringBootConfiguration 是来声明当前类是 SpringBoot 应用的配置类,项目中只能有一个。而我们的 @SpringBootApplication 注解声明的类就是 main 函数所在的启动类,因此扫描的包是该类所在包及其子包。如果没有指定这些属性,那么将从声明这个注解的类所在的包开始,扫描包及子包。
2023-12-11 11:12:02
1581
原创 经典过河问题:四个人 17 分钟过桥
有四个人需要过桥,天色比较暗,过桥必须用手电筒。但是手电筒只有一个,每次最多两个人过桥,所以必须有人把手电筒来回带。A、B、C、D 四个人过桥分别需要1,2,5,10 分钟,两个人过桥速度以慢的为准。请问如何过桥使得总时间最短?(最短总时间是 17 分钟)。解决这个问题的关键,就是返回去的人必须用时最少。而且,尽量让 5 分钟和 10 分钟的俩人一起走,节约更多的时间。
2023-12-11 09:44:42
2742
原创 图片文件和 Base64 字符串互转(Java 实现)
项目中,有些场景下,客户端需要将本地图片传输到服务方存储,此时客户端可以将图片文件转为 Base64 字符串传输到服务方,服务方收到后再将 Base64 字符串还原为图片。以下是一些图片文件和 Base64 字符串互转的工具类,以及校验图片大小的工具。
2023-11-09 10:39:43
3228
原创 Mybatis 中 ResultHandler 的用法(获取大结果集,实现结果流式输出)
Mybatis 中的 ResultHandler 相当于数据结果集的处理器,它是一个回调函数(Callback),用来处理每一行数据的结果,这个回调函数可以在查询结果处理到一定量时触发,对结果集数据进行定制化处理。ResultHandler 的使用可以大幅提升数据处理的效率,当我们需要处理大量的数据时,一般会使用 ResultHandler 来进行结果的处理,避免一次查询就全部返回结果,浪费内存资源或造成 OOM。import org// SQL 返回值为 void,所以我们并没有接收这个返回值。
2023-09-20 15:54:55
6879
原创 error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file
libevent 会安装到 /usr/lib 或 /usr/local/lib 下,本次安装在了 /usr/lib 路径下。可以创建一些软链接,使得其他程序运行时能找到 libevent 库,如在 /usr/lib64 下创建软链接。报错提示:加载共享库时出错:libevent-1.4.so.2:无法打开共享对象文件:本机没有安装 libevent-1.4.so.2 或在库文件路径下不存在。切换到解压后的 libevent 主目录,配置安装路径,再编译及安装,步骤如下所示。
2023-05-10 17:24:30
1057
原创 MyBatis foreach 标签常用方法总结
在 MyBatis 中,常常会遇到集合类型的参数,虽然我们可以通过 OGNL 表达式来访问集合的某一个元素,但是 OGNL 表达式无法遍历集合。foreach 标签就是专门用来解决这类问题的,foreach 标签可以用来遍历数组、列表和 Map 等集合参数,实现批量操作或一些简单 SQL 操作。 foreach 元素的属性主要有 item,index,open,separator,close,collection。各属性含义如下所示。 集合中元素迭代时的别名,该参数为必选。 在 list 和数组中
2022-12-06 14:48:09
17354
原创 Java BigDecimal 类的创建对象方法以及常用的加减乘除、设置精度方法
因为计算机无法精确表示浮点数,所以在进行数字运算时,如果有 double 或 float 类型的浮点数参与计算,容易出现计算不准确的情况。在一些对精度要求很高的系统中,需要使用 BigDecimal 类来进行精确运行。
2022-12-01 17:13:13
4013
原创 Java List 按指定条件排序的几种方式
在 Java 项目中,可能会遇到给出一些条件,将 List 元素按照给定条件进行排序的情况。如下述场景。
2022-11-30 10:40:46
10821
原创 解决使用 Idea 自带的 Database 连接 MySQL,测试连接按钮灰色问题
我的 MySQL 连接驱动文件在本地位置 C:\Program Files (x86)\MySQL\Connector.J 5.1,配置好上述信息后,依次点击右下角 Apply 、OK 按钮完成配置,再重新测试,发现已成功了。打开 Idea 自带的 Database,选择左下方的 MySQL,取消勾选 Use MySQL Connector/J [latest],在下方添加本地连接驱动。使用 Idea 自带的 Database 连接 MySQL 时发现测试连接按钮一直是灰色的,如下图所示。
2022-10-24 14:56:19
2700
原创 SpringBoot 如何使用 @Value 给静态变量注入 application.properties 中的属性值
如果在项目中的 application.properties 配置了某个属性(假如属性名为 test.key),我们可以在 controller 层和 service 层使用 @Value 标签获取属性值,如下代码所示。但是,如果项目中需要给静态变量注入配置文件中的属性值的话(也就是,给 static 修饰的变量做 @Value 注入),发现变量值为 null。也可以在一个 Java 文件中,打上 @Component 标签,再使用上述 @Value 标签,同样可以获取到配置文件中的属性值。
2022-09-20 16:27:44
941
原创 MyBatis 查询 MySQL 实现返回 List<Map> 或 Map 类型数据操作
MyBatis 查询 MySQL 数据库,返回结果可以是具体的类、Map、List 等等。将查询结果返回 Map 类型的优点是,不需要为本次查询额外创建类。如果只查询某几个特定的列,且不想额外创建类的话,就可以将结果返回 Map 或 List。如果能明确查询结果只有一条记录时,返回 Map;如果查询结果可能有多条记录,返回 List。实现方式较为简单,只要在 DAO 层 XML 文件中,设定 resultType 而不设定 resultMap 就可以了。详见下文示例。
2022-09-09 10:50:03
28276
4
原创 设置 Linux 命令别名
在操作 Linux 的时候可能会碰到一些非常长的命令,这个命令平时用的比较频繁,每次输入执行就会感觉非常麻烦。如果把一段长的命令设置成一个短的别名,就会很方便。Linux 的alias命令可以帮我们设置长命令的别名。...
2022-08-30 17:36:07
5156
原创 java.security.NoSuchAlgorithmException: SHA256WithRSAandMGF1 Signature not available
SHA256WithRSAandMGF1 是 BC Provider 提供的一个签名算法,而 JDK 1.8 的 java.security.* 包中并没有这个 Provider。运行如下代码,可以打印 JDK 中的 Provider 列表,以及所有签名算法。可以看到,BC Provider 已经被添加到列表中,且 SHA256WithRSAandMGF1 算法也在支持的签名算法列表中。再次运行签名方法,异常问题已经被修复,能正确对数据进行签名。笔者在做 RSA 签名时,遇到了一个异常,详见下文。...
2022-08-04 14:48:13
7378
原创 Java 使用 RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING 算法解密
Java 实现 RSA 解密(算法模式为 RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING),代码如下。
2022-08-04 11:16:01
3347
1
原创 java.security 框架之签名、加密、摘要及证书
单向加密是不可逆的,MD5、SHA、MAC 都是单向加密算法,也称之为摘要算法。MD5、SHA 会根据明文用哈希算法计算一个固定长度的摘要(哈希值),然后把明文和摘要发送给接收者,接收者根据同样的算法计算出摘要,对比两个摘要是否一样即可验证明文的正确性。它的应用场景是防止报文被篡改和校验数据。MD5、SHA 等算法是开源的,容易被试探出来。有没有更安全的摘要算法呢?HMAC(带密钥的哈希函数),用一个密钥和一个明文消息作为输入,生成一个消息摘要。.........
2022-08-03 16:57:59
2089
原创 RSA 加解密(Java 实现)
RSA 算法是一种非对称加解密算法。服务方生成一对 RSA 密钥,即公钥 + 私钥,将公钥提供给调用方,调用方使用公钥对数据进行加密后,服务方根据私钥进行解密。
2022-08-03 16:18:34
32390
8
原创 Excel 如何比较两列字符串是否相同?
有如下所示的Excel文件,文件中有两列数据待比较B列和C列。需要依次比较出两列中的每个单元格字符串是否相同。在Excel工作表中,如何比较两列字符串是否相同呢?
2022-08-02 10:41:47
6708
原创 SpringBoot 整合 Spring-Session 实现分布式会话(实战篇)
Spring提供了处理分布式会话的解决方案Spring-Session提供了对Redis、MongoDB、MySQL等常用存储的支持,Spring-Session提供与HttpSession的透明整合,这意味着开发人员可以使用Spring-Session支持的实现方式,切换HttpSession至Spring-Session。本文采用Redis作为第三方存储,总结下SpringBoot整合Spring-Session实现分布式会话的实战方式及测试过程。...
2022-07-25 10:06:12
4253
1
原创 Java 注解(Annotation)
Java 注解,也叫元数据,又称 Java 标注,即一种描述数据的数据。注解是 JDK1.5 版本开始引入的一种注释机制,用于对代码进行说明,可以对包、类、接口、字段、方法参数、局部变量等进行注解。和 Javadoc 不同,Java 标注可以通过反射获取标注内容。在编译器生成类文件时,标注可以被嵌入到字节码中。Java 虚拟机可以保留标注内容,在运行时可以获取到标注内容 。 注解可分为三类: Java 自带的标准注解,也叫内置注解,在 java.lang 包下(随着 JDK 版本的升级,Java 开
2022-07-07 15:22:13
982
原创 Redis 内存淘汰策略
如果在做项目时,不计任何后果地把任何数据都往 Redis 写入,使用不合理很容易导致数据超过Redis 的最大内存,这种情况就会导致如下问题。 所以遇到 Redis 内存不足的问题时,我们一般有几种方法: 当内存空间使用达到限制时,Redis 会根据配置策略来选择不同处理方式,要么返回 errors,要么按照不同的策略算法来清除一些旧数据,达到回收内存的目的,这就是 Redis 的内存淘汰,有些文章中,内存淘汰也叫缓存回收。 本文以 Linux 系统安装的 4.0.8 版本的 Redis 为例,对
2022-07-05 16:49:44
1794
原创 Windows 和 Linux 系统下,如何查看 Redis 的版本号?
进入 Redis 所在目录 C:\Program Files\redis-latest>,然后在路径上输入 cmd 后回车,即可打开 cmd 窗口,打开后路径直接指向【C:\Program Files\redis-latest>】,启动 redis-server。 启动后可以看见 Redis 版本号是 Redis 3.0.503。也可以按照下述步骤登录客户端查看。1.3 客户端输入:info 从上述结果中的 # Server 结果可知,Redis 版本号为 3.0.503。 Linux 下
2022-07-05 12:24:37
13892
原创 Java 如何实现 List<String> 的深拷贝?
对于 List 的深拷贝,Java 有几种方法可以实现,分述如下。1.2 利用构造器,使用 List 实现类的构造方法 复制一个 List 的简单方法,是使用以一个集合作为参数的构造函数。1.3 使用 list.addAll() 方法1.4 使用 java.util.Collections.copy() 方法 Collections 类有多种返回集合的静态方法,其中一个是 copy() 方法,它需要一个源列表和一个至少和源列表一样长的目标列表。该方法将源列表中的所有元素复........
2022-06-27 18:02:54
11882
1
原创 Java 打印对象的地址
Java 获取不到对象的地址,但是可以获取对象的 hashcode,对象的 hashcode 在某种意义上就相当于对象的地址,hashCode 是用来在散列存储结构中确定对象的存储地址的。 Object 的 hashCode() 默认是返回对象的哈希码,可以反应对象的内存地址,但是 hashCode() 可以重写,所以 hashCode() 不能绝对反应对象的内存地址。 java.lang.System 类的方法 identityHashCode() 可以返回对象的哈希码(在一定程度上反应出对象
2022-06-27 14:19:46
6504
原创 Java 如何复制 List ?
List 复制在项目开发时,使用到的频率还是比较高的。List 复制有浅拷贝和深拷贝两种方式。在陈述复制方法前,先总结下什么是浅拷贝和深拷贝(以下内容均站在 Java 语言基础上进行讨论)。浅拷贝只复制某个对象的引用,而不复制对象本身,新旧对象还是共享同一块内存。深拷贝会创造一个一模一样的对象,新对象和原对象不共享内存,修改新对象不会改变原对象。假设 B 复制了 A,当修改 A 时,看 B 是否会发生变化。如果 B 也跟着变了,说明这是浅拷贝,如果 B 没变,那就是深拷贝。对于数据类型是基本数据类型(整型
2022-06-27 13:00:48
39501
5
原创 Redis Lua 脚本常用操作总结及实现 CAS 操作
Lua 是一个小巧的脚本语言。它是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个由 Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo 三人组成的研究小组于 1993 年开发的。其设计目的是为了通过灵活嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua 由标准 C 编写而成,并以源代码形式开放,代码简洁优美,几乎在所有操作系统
2022-06-15 00:27:41
2106
原创 辗转相除法求最大公约数的原理及 Java 实现
一、什么是辗转相除法? 辗转相除法可以求得两个数的最大公约数。辗转相除法又称欧几里得算法,用于计算两个非负整数 a,b 的最大公约数。应用领域有数学和计算机等,计算公式 gcd(a, b) = gcd(b, a mod b)。二、举例说明计算过程 假如需要求 100 和 18 这两个正整数的最大公约数,用欧几里得算法,计算过程是这样的:100 / 18 = 5 (余 10)18 / 10= 1 (余 8)10 / 8 = 1 (余 2)8 / 2 = 4 (余 0)至此,最大公约数为 2
2022-05-20 11:11:37
3407
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人