自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

长安明月的博客

路漫漫其修远兮,吾将上下而求索

  • 博客(149)
  • 收藏
  • 关注

原创 Java 如何快速将一个对象的空值属性置为空字符串?

在一些场景,例如 mybatis 的数据插入时,对象属性不能为 null。如果对象属性存在 null 的情况,可以先将空值属性置为空字符串。在 Java 中,可以使用反射来快速将一个对象的空值属性置为空字符串。

2024-01-02 16:30:45 1103 1

原创 @SpringBootApplication 包含的三个注解及其含义

Configuration 这个注解的作用就是声明当前类是一个配置类,然后 Spring 会自动扫描到添加了 @Configuration 的类,读取其中的配置信息,而 @SpringBootConfiguration 是来声明当前类是 SpringBoot 应用的配置类,项目中只能有一个。而我们的 @SpringBootApplication 注解声明的类就是 main 函数所在的启动类,因此扫描的包是该类所在包及其子包。如果没有指定这些属性,那么将从声明这个注解的类所在的包开始,扫描包及子包。

2023-12-11 11:12:02 1027

原创 经典过河问题:四个人 17 分钟过桥

有四个人需要过桥,天色比较暗,过桥必须用手电筒。但是手电筒只有一个,每次最多两个人过桥,所以必须有人把手电筒来回带。A、B、C、D 四个人过桥分别需要1,2,5,10 分钟,两个人过桥速度以慢的为准。请问如何过桥使得总时间最短?(最短总时间是 17 分钟)。解决这个问题的关键,就是返回去的人必须用时最少。而且,尽量让 5 分钟和 10 分钟的俩人一起走,节约更多的时间。

2023-12-11 09:44:42 1144

原创 正向代理与反向代理

正向代理与反向代理

2023-12-06 16:21:45 630

原创 图片文件和 Base64 字符串互转(Java 实现)

项目中,有些场景下,客户端需要将本地图片传输到服务方存储,此时客户端可以将图片文件转为 Base64 字符串传输到服务方,服务方收到后再将 Base64 字符串还原为图片。以下是一些图片文件和 Base64 字符串互转的工具类,以及校验图片大小的工具。

2023-11-09 10:39:43 2079

原创 MySQL 如何统计一个数据库中每个表的数据量

MySQL 如何准确统计每张表的数据量

2023-10-09 17:43:01 1091

原创 Mybatis 中 ResultHandler 的用法(获取大结果集,实现结果流式输出)

Mybatis 中的 ResultHandler 相当于数据结果集的处理器,它是一个回调函数(Callback),用来处理每一行数据的结果,这个回调函数可以在查询结果处理到一定量时触发,对结果集数据进行定制化处理。ResultHandler 的使用可以大幅提升数据处理的效率,当我们需要处理大量的数据时,一般会使用 ResultHandler 来进行结果的处理,避免一次查询就全部返回结果,浪费内存资源或造成 OOM。import org// SQL 返回值为 void,所以我们并没有接收这个返回值。

2023-09-20 15:54:55 2872

原创 Linux 软链接和硬链接

本文总结了 Linux 系统的软链接和硬链接的异同点。

2023-05-12 15:12:04 1087

原创 Linux 快捷键 和 VIM 快捷键

Linux 快捷键 和 VIM 快捷键

2023-05-11 15:56:57 750

原创 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 714

原创 MyBatis foreach 标签常用方法总结

  在 MyBatis 中,常常会遇到集合类型的参数,虽然我们可以通过 OGNL 表达式来访问集合的某一个元素,但是 OGNL 表达式无法遍历集合。foreach 标签就是专门用来解决这类问题的,foreach 标签可以用来遍历数组、列表和 Map 等集合参数,实现批量操作或一些简单 SQL 操作。  foreach 元素的属性主要有 item,index,open,separator,close,collection。各属性含义如下所示。  集合中元素迭代时的别名,该参数为必选。  在 list 和数组中

2022-12-06 14:48:09 15406

原创 Java BigDecimal 类的创建对象方法以及常用的加减乘除、设置精度方法

因为计算机无法精确表示浮点数,所以在进行数字运算时,如果有 double 或 float 类型的浮点数参与计算,容易出现计算不准确的情况。在一些对精度要求很高的系统中,需要使用 BigDecimal 类来进行精确运行。

2022-12-01 17:13:13 3366

原创 Java List 按指定条件排序的几种方式

在 Java 项目中,可能会遇到给出一些条件,将 List 元素按照给定条件进行排序的情况。如下述场景。

2022-11-30 10:40:46 9786

原创 解决使用 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 2273

原创 SpringBoot 如何使用 @Value 给静态变量注入 application.properties 中的属性值

如果在项目中的 application.properties 配置了某个属性(假如属性名为 test.key),我们可以在 controller 层和 service 层使用 @Value 标签获取属性值,如下代码所示。但是,如果项目中需要给静态变量注入配置文件中的属性值的话(也就是,给 static 修饰的变量做 @Value 注入),发现变量值为 null。也可以在一个 Java 文件中,打上 @Component 标签,再使用上述 @Value 标签,同样可以获取到配置文件中的属性值。

2022-09-20 16:27:44 761

原创 MyBatis 查询 MySQL 实现返回 List<Map> 或 Map 类型数据操作

MyBatis 查询 MySQL 数据库,返回结果可以是具体的类、Map、List 等等。将查询结果返回 Map 类型的优点是,不需要为本次查询额外创建类。如果只查询某几个特定的列,且不想额外创建类的话,就可以将结果返回 Map 或 List。如果能明确查询结果只有一条记录时,返回 Map;如果查询结果可能有多条记录,返回 List。实现方式较为简单,只要在 DAO 层 XML 文件中,设定 resultType 而不设定 resultMap 就可以了。详见下文示例。

2022-09-09 10:50:03 22074 4

原创 设置 Linux 命令别名

在操作 Linux 的时候可能会碰到一些非常长的命令,这个命令平时用的比较频繁,每次输入执行就会感觉非常麻烦。如果把一段长的命令设置成一个短的别名,就会很方便。Linux 的alias命令可以帮我们设置长命令的别名。...

2022-08-30 17:36:07 4919

原创 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 5840

原创 Java 使用 RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING 算法解密

Java 实现 RSA 解密(算法模式为 RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING),代码如下。

2022-08-04 11:16:01 2491 1

原创 java.security 框架之签名、加密、摘要及证书

单向加密是不可逆的,MD5、SHA、MAC 都是单向加密算法,也称之为摘要算法。MD5、SHA 会根据明文用哈希算法计算一个固定长度的摘要(哈希值),然后把明文和摘要发送给接收者,接收者根据同样的算法计算出摘要,对比两个摘要是否一样即可验证明文的正确性。它的应用场景是防止报文被篡改和校验数据。MD5、SHA 等算法是开源的,容易被试探出来。有没有更安全的摘要算法呢?HMAC(带密钥的哈希函数),用一个密钥和一个明文消息作为输入,生成一个消息摘要。.........

2022-08-03 16:57:59 1784

原创 RSA 加解密(Java 实现)

RSA 算法是一种非对称加解密算法。服务方生成一对 RSA 密钥,即公钥 + 私钥,将公钥提供给调用方,调用方使用公钥对数据进行加密后,服务方根据私钥进行解密。

2022-08-03 16:18:34 28478 7

原创 Excel 如何比较两列字符串是否相同?

有如下所示的Excel文件,文件中有两列数据待比较B列和C列。需要依次比较出两列中的每个单元格字符串是否相同。在Excel工作表中,如何比较两列字符串是否相同呢?

2022-08-02 10:41:47 5195

原创 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 2899 1

原创 Java 注解(Annotation)

  Java 注解,也叫元数据,又称 Java 标注,即一种描述数据的数据。注解是 JDK1.5 版本开始引入的一种注释机制,用于对代码进行说明,可以对包、类、接口、字段、方法参数、局部变量等进行注解。和 Javadoc 不同,Java 标注可以通过反射获取标注内容。在编译器生成类文件时,标注可以被嵌入到字节码中。Java 虚拟机可以保留标注内容,在运行时可以获取到标注内容 。  注解可分为三类:  Java 自带的标准注解,也叫内置注解,在 java.lang 包下(随着 JDK 版本的升级,Java 开

2022-07-07 15:22:13 884

原创 Redis 内存淘汰策略

  如果在做项目时,不计任何后果地把任何数据都往 Redis 写入,使用不合理很容易导致数据超过Redis 的最大内存,这种情况就会导致如下问题。  所以遇到 Redis 内存不足的问题时,我们一般有几种方法:  当内存空间使用达到限制时,Redis 会根据配置策略来选择不同处理方式,要么返回 errors,要么按照不同的策略算法来清除一些旧数据,达到回收内存的目的,这就是 Redis 的内存淘汰,有些文章中,内存淘汰也叫缓存回收。  本文以 Linux 系统安装的 4.0.8 版本的 Redis 为例,对

2022-07-05 16:49:44 1613

原创 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 11160

原创 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 8463 1

原创 Java 打印对象的地址

  Java 获取不到对象的地址,但是可以获取对象的 hashcode,对象的 hashcode 在某种意义上就相当于对象的地址,hashCode 是用来在散列存储结构中确定对象的存储地址的。  Object 的 hashCode() 默认是返回对象的哈希码,可以反应对象的内存地址,但是 hashCode() 可以重写,所以 hashCode() 不能绝对反应对象的内存地址。  java.lang.System 类的方法 identityHashCode() 可以返回对象的哈希码(在一定程度上反应出对象

2022-06-27 14:19:46 6037

原创 Java 如何复制 List ?

List 复制在项目开发时,使用到的频率还是比较高的。List 复制有浅拷贝和深拷贝两种方式。在陈述复制方法前,先总结下什么是浅拷贝和深拷贝(以下内容均站在 Java 语言基础上进行讨论)。浅拷贝只复制某个对象的引用,而不复制对象本身,新旧对象还是共享同一块内存。深拷贝会创造一个一模一样的对象,新对象和原对象不共享内存,修改新对象不会改变原对象。假设 B 复制了 A,当修改 A 时,看 B 是否会发生变化。如果 B 也跟着变了,说明这是浅拷贝,如果 B 没变,那就是深拷贝。对于数据类型是基本数据类型(整型

2022-06-27 13:00:48 34321 5

原创 Java List<Integer> 转为 int[] 的几种方法

Java List 转为 int[] 的几种方法

2022-06-21 10:10:28 5777

原创 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 1757

原创 Java 几种方法初始化 Set

Java 几种方法初始化 Set

2022-06-13 17:40:26 16125

转载 有了 HTTP,为什么还要 RPC?

有了HTTP,为什么还要RPC?

2022-06-10 15:05:03 513

原创 辗转相除法求最大公约数的原理及 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 3035

原创 SpringBoot 项目启动时设置 http 代理

SpringBoot 项目启动时设置 http 代理

2022-04-26 14:37:46 4894

原创 常用 ASCII 码整理

一、ASCII 码简介  ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是一套基于拉丁字母的字符编码,共收录了 128 个字符,主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准,它等同于国际标准 ISO/IEC 646。ASCII 规范于 1967 年第一次发布,最后一次更新是在 1986 年。  ASCII 编码范围 0x00-0x7F,即十进制的 0-127,定义了 128 个字符。它包含了 33

2022-04-14 19:00:16 6352

原创 Java 延迟队列 DelayQueue 的原理

一、什么是延迟队列(DelayQueue)?DelayQueue 是 Java 并发包 java.util.concurrent 下的一个 Class,其官方定义如下所示。 /** * An unbounded {@linkplain BlockingQueue blocking queue} of * {@code Delayed} elements, in which an element can only be taken * when it

2022-04-09 21:33:55 12131 1

原创 kafka 常用操作命令

  本文在《kafka 集群搭建步骤》的基础上,总结下 kafka 的常用操作命令。一、集群1.1 启动集群  分别在三台服务器上执行如下命令,启动集群:[cpctest@vm-10-201-42-13 bin]$ pwd/home/cpctest/kafka_2.13-2.8.1/bin[cpctest@vm-10-201-42-13 bin]$ ./kafka-server-start.sh -daemon /home/cpctest/kafka_2.13-2.8.1/config/serv

2022-02-11 15:10:24 1318

原创 kafka 集群搭建步骤

  kafka 集群的运行建立在 zookeeper 基础上,kafka 中的消息偏移量信息、kafka 集群信息、topic 等信息会被存储在 zookeeper 中。高版本的 kafka 自带了 zookeeper,本文使用独立的 zookeeper 集群部署 kafka 集群。前期准备见《Linux 环境下,搭建 ZooKeeper 集群》。一、下载 kafka  kafka 官网:http://kafka.apache.org/http://kafka.apache.org/downloa

2022-02-10 17:38:10 3022

原创 Linux 环境下,搭建 ZooKeeper 集群

《Linux 环境下,ZooKeeper 安装及运行(单机模式)》一文中总结了单机模式的 zookeeper 安装及运行方法,本文简单总结下如何搭建 ZooKeeper 集群。

2022-01-25 15:30:27 3159

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除