Java
文章平均质量分 69
Java 知识
狂奔的小棕棕
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
分布式锁与重试机制标准化方案
本方案基于Redisson实现分布式锁,结合重试机制和双重检查模式,确保在高并发场景下的数据一致性和系统稳定性。看门狗是 Redisson 提供的一种自动续命机制,用于防止业务逻辑执行时间超过锁的持有时间。双重检查:减少锁竞争,提高性能重试机制:提高系统容错能力合理参数:根据业务场景选择waitTime和leaseTime看门狗机制:业务时间不确定时使用异常处理:确保锁正确释放。原创 2025-12-30 14:28:05 · 555 阅读 · 0 评论 -
Java本地缓存之王Caffeine详解
利用这类缓存足以解决大多数的性能问题了,我们也要知道,这种属于remote cache(分布式缓存),应用的进程和缓存的进程通常分布在不同的服务器上,不同进程之间通过RPC或HTTP的方式通信。这种缓存的优点是缓存和应用服务解耦,支持大数据量的存储,缺点是数据要经过网络传输,性能上会有一定损耗。与分布式缓存对应的是本地缓存,缓存的进程和应用进程是同一个,数据的读写都在一个进程内完成,这种方式的优点是没有网络开销,访问速度很快。在创建缓存对象的同时,可以指定此缓存对象的一些处理策略,比如。原创 2025-01-06 16:34:36 · 1422 阅读 · 0 评论 -
RedisTemplate执行lua脚本及Lua 脚本语言详解
在开发中,我们经常需要与Redis数据库进行交互,而Redis是一个基于内存的高性能键值存储数据库,它支持多种数据结构,并提供了丰富的命令接口。在某些情况下,我们可能需要执行一些复杂的逻辑操作,这时可以使用Lua脚本来实现这些逻辑,而Redis提供了执行Lua脚本的功能。在Spring应用程序中,我们可以使用RedisTemplate来执行Lua脚本。原创 2025-01-06 11:29:53 · 1965 阅读 · 0 评论 -
Jboss EnhancedQueueExecutor 使用案例及源码解读
以上涉及到的代码均在类。原创 2025-01-03 16:54:13 · 946 阅读 · 0 评论 -
JetCache-Alibaba缓存框架
官方网址:https://github.com/alibaba/jetcache官方文档:https://github.com/alibaba/jetcache/tree/master/docs/CNJetCache对SpringCache进行了封装,在原有功能基础上实现了多级缓存、缓存统计、自动刷新、异步调用、数据报表等功能JetCache设定了本地缓存与远程缓存的多级缓存解决方案。原创 2024-12-27 14:32:36 · 2002 阅读 · 0 评论 -
JAVA之MDC详解以及子线程MDC传递
MDC(Mapped Diagnostic Context)是用于分布式系统中跟踪和诊断日志的重要概念。是一个在Java项目中用于日志跟踪的工具,它允许你在多线程环境下关联和传递特定的上下文信息。MDC是一个线程本地的、可维护的、可传递的上下文环境。在Java中,MDC主要用于在应用程序的不同组件之间传递日志上下文信息,例如用户会话ID,请求ID,用户身份信息等。MDC让你可以将这些信息关联到特定的日志事件中,以便后续的日志处理器(如日志输出器)能够在日志中显示或处理这些信息。原创 2024-08-23 10:31:47 · 870 阅读 · 0 评论 -
MapStruct 实体类转换工具,看这一篇就够了!
在一个成熟的工程中,尤其是现在的分布式系统中,应用与应用之间,还有单独的应用细分模块之后,DO 一般不会让外部依赖,这时候需要在提供对外接口的模块里放 DTO 用于对象传输,也即是 DO 对象对内,DTO对象对外,DTO 可以根据业务需要变更(只需部分字段或字段名不同等),并不需要映射 DO 的全部属性。这种 对象与对象之间的互相转换,就需要有一个专门用来解决转换问题的工具,毕竟每一个字段都 get/set 会很麻烦。MapStruct 就是这样的一个属性映射工具,只需要定义一个 Mapper 接口转载 2024-08-16 10:05:31 · 6096 阅读 · 0 评论 -
Java的Duration类:掌握时间间隔的魔法
在Java编程中,处理时间间隔是一项常见任务。Java 8引入了Duration类,提供了方便的方法来处理和计算时间间隔。本文将介绍Duration类的定义、常见用法以及与其他时间类的比较。原创 2024-08-07 14:46:24 · 3527 阅读 · 0 评论 -
Java LocalDateTime 的常用方法总结
/ 自定义格式化:System.out.println("自定义格式dtf1: " + dtf1.format(LocalDateTime.now()));//自定义格式dtf1: 2024/08/05 17:19:50System.out.println("自定义格式dtf2: " + dtf2.format(LocalDateTime.now()));//自定义格式dtf2: 2024.08.05 17:19:50。原创 2024-08-05 17:26:17 · 1526 阅读 · 0 评论 -
Java各类日期和时间转换超强总结(Date和LocalDateTime相互转换等)
大家在开发过程中必不可少得和日期打交道,对接别的系统时,时间日期格式不一致,每次都要转换!从 Java1 到 Java8 将近 20 年,再加上 Java8 的普及时间、各种历史 API 兼容过渡时间。我们很多时候需要在旧时间 API 与新时间 API 之间切换,并行使用!!!每次写完就忘记了,小编专门来整理一篇来详细说一下他们转换的方法,方便后面使用!!原创 2024-08-03 17:44:51 · 5237 阅读 · 0 评论 -
Spring资源拷贝至系统目录及文件压缩解压处理
Spring资源拷贝至系统目录及文件压缩解压处理原创 2023-03-07 15:44:33 · 444 阅读 · 0 评论 -
lombok @Data 注解
lombok 注解原创 2022-10-19 10:50:33 · 845 阅读 · 0 评论 -
Java正则表达式以及Pattern和Matcher类详解
概述正则表达式一、概述用来描述或者匹配一系列符合某个语句规则的字符串二、单个符号1、英文句点.符号:匹配单个任意字符。表达式t.o可以匹配:tno,t#o,teo等等。不可以匹配:tnno,to,Tno,t正o等。2、中括号[]:只有方括号里面指定的字符才参与匹配,也只能匹配单个字符。表达式:t[abcd]n 只可以匹配:tan,tbn,tcn,tdn。不可以匹配:thn,tabn,tn等。3、| 符号。相当与“或”,可以匹配指定的字符,但是也只能选择其中一项进行匹配。表达式:t(a|b原创 2022-04-22 17:20:31 · 1286 阅读 · 0 评论 -
【Java】 数组转 List 的三种方式及对比
本文介绍Java中数组转为List三种情况的优劣对比,以及应用场景的对比,以及程序员常犯的类型转换错误原因解析。一、 (最高效) 通过集合工具类Collections.addAll()方法,支持增删改查等方法通过Collections.addAll(arrayList, strArray)方式转换,根据数组的长度创建一个长度相同的List,然后通过Collections.addAll()方法,将数组中的元素添加到List中,这是最高效的方法。使用场景:需要在将数组转换为List后,对List进行增删改原创 2021-08-12 16:12:34 · 967 阅读 · 0 评论 -
线程的 run() 和 start() 的区别
线程的 run() 和 start() 有什么区别?调用 start() 方法是用来启动线程的,轮到该线程执行时,会自动调用 run();直接调用 run() 方法,无法达到启动多线程的目的,相当于主线程线性执行 Thread 对象的 run() 方法。一个线程对线的 start() 方法只能调用一次,多次调用会抛出 java.lang.IllegalThreadStateException 异常;run() 方法没有限制。总结: run() 方法相当于启动Thread类里面的一个普通方法, sta原创 2021-06-10 15:14:11 · 482 阅读 · 0 评论 -
java枚举比较使用equals还是==
建议使用==。避免NPE能正常工作更快运行时是安全的编译期也是安全的其实二者皆可以,没有任何问题。我们查看 Enum.java 中 equals 方法的源码,可以看到其也是使用 == 来实现。public final boolean equals(Object other) { return this==other;}额外答案能在枚举中使用 == 进行判断?答案是肯定的,因为枚举有着严格的实例化控制,所以你可以用 == 去做比较符,这个用法,在官方文档中也有明确的说明。原创 2021-06-08 15:49:06 · 2757 阅读 · 0 评论 -
JPA 中的 nativeQuery = true
在 JPA 的 @Query 注解中有个属性 nativeQuery其默认值是false。package org.springframework.data.jpa.repository;import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPol原创 2021-06-03 20:25:09 · 3503 阅读 · 0 评论 -
Spring 注解
这里写自定义目录标题Spring 注解@ConditionalOnPropertySpring 注解@ConditionalOnProperty@ConditionalOnProperty的作用是判断一个Property属性,是否符合我们的条件,符合则让该注解修饰的类或者方法生效,否则不生效。我们在Spring Boot中可以通过@ConditionalOnProperty来控制Configuration配置类是否生效。ConditionalOnProperty注解的源码。@Retention(原创 2021-04-19 15:49:32 · 363 阅读 · 1 评论 -
Mock 及 Mockito 教程
Mockito 教程Mockito框架官方地址mockito,文档地址,中文版文档。Mockito库能够Mock对象、验证结果以及打桩(stubbing)。1. Mock和Mockito的关系在软件开发中提及mock,通常理解为模拟对象。为什么需要模拟? 在我们一开始学编程时,我们所写的对象通常都是独立的,并不依赖其他的类,也不会操作别的类。但实际上,软件中是充满依赖关系的,比如我们会基于service类写操作类,而service类又是基于数据访问类(DAO)的,依次下去,形成复杂的依赖关系。单原创 2021-04-14 17:08:13 · 8186 阅读 · 0 评论 -
Java知识体系最强总结(2020版)
Java知识体系最强总结(2020版)原创 2021-04-12 11:49:44 · 245 阅读 · 0 评论 -
Mac查看端口占用情况
终端命令的方式查看端口情况1.查看端口被哪个程序占用 sudo lsof -i tcp:port如: sudo lsof -i tcp:80822.看到进程的PID,可以将进程杀死。 sudo kill -9 PID 如:sudo kill -9 3210原创 2021-04-08 11:47:58 · 5373 阅读 · 0 评论 -
Optional的理解与使用
从 Java 8 引入的一个很有趣的特性是 Optional 类。Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException) —— 每个 Java 程序员都非常了解的异常。本质上,这是一个包含有可选值的包装类,这意味着 Optional 类既可以含有对象也可以为空。Optional 是 Java 实现函数式编程的强劲一步,并且帮助在范式中实现。但是 Optional 的意义显然不止于此。我们从一个简单的用例开始。在 Java 8 之前,任何访问对象方法或属性原创 2020-10-20 17:02:23 · 2300 阅读 · 0 评论 -
Spring Data Rest 指南
Spring Data Rest一.Restful简介REST是一种Web软件结构风格,而不是一种标准,匹配或兼容这种架构风格称之为REST服务,REST服务简洁并且有层次,REST通常基于HTTP,URI和XML以及HTML这些现有的广泛流行的协议和标准,在REST中,资源是由URI来指定的,对资源的增删改查也是通过HTTP协议提供的POST,PUT,GET,DELETE等方法实现,使用REST可以更高效率的利用缓存来提高响应速度,同时REST中的通信会话状态有客户端来维护,这可以让不同服务器来处理一原创 2020-10-10 18:18:20 · 3045 阅读 · 1 评论 -
jackson @JsonIgnoreProperties与@JsonIgnore基本使用
问题由来:springboot项目中定义了很多类,我们在rest返回中直接返回或者在返回对象中使用这些类,spring已经使用jackson自动帮我们完成这些的to json。但是有时候自动转的json内容太多,或者格式不符合我们的期望,因此需要调整类的to json过程,或者说希望自定义类的json过程。解决办法:使用@JsonIgnoreProperties、@JsonIgnore、@JsonFormat。@JsonIgnore注解用来忽略某些字段,可以用在变量或者Getter方法上,用在Set转载 2020-09-14 10:28:45 · 1226 阅读 · 1 评论 -
算法(冒泡排序、插入排序、选择排序、快速排序、二分查找)
二分法查找package algorithm;/** * @Description: 二分查找 * @author: zpli * @Date: 2020/6/1 9:30 */public class BinarySearch { public static void main(String[] args) { int[] arr = new int[]{1, 2, 3, 3, 5, 7, 8, 9}; int digest = 4;原创 2020-06-02 10:49:39 · 311 阅读 · 0 评论 -
Java 网络编程 之 socket 的用法与实现
Java 网络编程 之 socket 的用法与实现一、概念TCPTCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP)是同一层内 另一个重要的传输协议。在因特网协议族(Internet pro...原创 2020-04-16 11:11:17 · 374 阅读 · 0 评论 -
try catch finally的执行顺序
结论:1、不管有没有出现异常,finally块中代码都会执行;2、当try和catch中有return时,finally仍然会执行;3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,仍然是之前保存的值),所以函数返回值是在finally执行前确定的;4、finally中最好不...原创 2020-04-09 13:38:00 · 332 阅读 · 2 评论 -
JAVA实现AES加密
1. 因子上次介绍了《JAVA实现DES加密》,中间提到近些年DES使用越来越少,原因就在于其使用56位密钥,比较容易被破解,近些年来逐渐被AES替代,AES已经变成目前对称加密中最流行算法之一;AES可以使用128、192、和256位密钥,并且用128位分组加密和解密数据。本文就简单介绍如何通过JAVA实现AES加密。2.JAVA 实现package org.zpli.java8.safe...原创 2020-04-02 16:50:06 · 558 阅读 · 0 评论 -
JAVA实现DES加密
DES加密介绍DES是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同密钥的算法。DES加密算法出自IBM的研究,后来被美国政府正式采用,之后开始广泛流传,但是近些年使用越来越少,因为DES使用56位密钥,以现代计算能力,24小时内即可被破解。虽然如此,在某些简单应用中,我们还是可以使用DES加密算法,本文简单讲解DES的JAVA实现。JAVA实现package org.zpli.j...原创 2020-04-02 16:41:20 · 3818 阅读 · 2 评论 -
大佬博客推荐
My Sunshine https://blog.wuwii.com/Edison Zhou https://www.cnblogs.com/edisonchou/category/625054.html十三 https://www.cnblogs.com/han-1034683568/p/6634711.html#blogTitle4五月的仓颉 https://www.cnblogs.c...原创 2020-03-27 14:27:11 · 384 阅读 · 0 评论 -
JVM进阶(三) 内存分配与回收策略
虚拟机中的堆分为年轻代和年老代。永久代是非堆内存,它又叫做方法区(一般的说法),主要存储已被加载的类信息、常量、静态变量。而该区域在java8已被删除,取而代之的是元空间。堆是整个Java内存模型中占用最大的一部分,而且不是连续的。当有需要分配内存的时候,一般有两个方法分:指针碰撞和空闲列表。该部分的内存回收是由虚拟机的垃圾收集器GC进行管理的。 堆是存放对象以及数组的...原创 2020-03-26 18:34:16 · 242 阅读 · 0 评论 -
JVM进阶(二) JAVA堆
User user = new User();对象的引用存放在栈中,对象存放在堆中。堆的存储结构和栈是不同的,堆在内存中并不是一块连续的区域,它是分散的(物理上是分散,但逻辑上是连续的,大家好好体会一下);虚拟机通过栈中引用的指引在堆中找到所需要的对象。 在虚拟机遇到一条new的指令的时候,经过一系列的操作过后虚拟机就要为该新生对象分配内存空间了,那么问题来了,这么散,虚拟机要怎么知道如...原创 2020-03-26 18:06:26 · 211 阅读 · 0 评论 -
JVM进阶(一) 初识JAVA栈
Java栈是我们最常用的内存区域,线程私有。它主要用来存放基本类型变量、局部变量以及对象的引用。例如:User user = new User(),这里的 user 就是对象对象的引用也可以理解为地址,指引着虚拟机要去哪里找 user 这个对象。它们的基本关系如图:由图可知,当我们将一个对象作为方法的参数时,我们在方法中改变对象的值,也会影响到原来的对象的值,因为我们只是改变了图中内存区域的...原创 2020-03-26 17:46:22 · 238 阅读 · 0 评论 -
JVM的GC日志查看
JVM的GC日志的主要参数包括如下几个:-XX:+PrintGC 输出GC日志-XX:+PrintGCDetails 输出GC的详细日志-XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式)-XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)-XX:+PrintHeapAt...原创 2020-03-25 10:10:37 · 504 阅读 · 0 评论 -
Java多线程系列--“JUC线程池”05之 线程池原理(四)
拒绝策略介绍线程池的拒绝策略,是指当任务添加到线程池中被拒绝,而采取的处理措施。当任务添加到线程池中之所以被拒绝,可能是由于:第一,线程池异常关闭。第二,任务数量超过线程池的最大限制。线程池共包括4种拒绝策略,它们分别是:AbortPolicy, CallerRunsPolicy, DiscardOldestPolicy和DiscardPolicy。AbortPolicy ...转载 2020-03-24 17:04:32 · 252 阅读 · 0 评论 -
Java多线程系列--“JUC线程池”04之 线程池原理(三)
线程有5种状态:新建状态,就绪状态,运行状态,阻塞状态,死亡状态。线程池也有5种状态;然而,线程池不同于线程,线程池的5种状态是:Running, SHUTDOWN, STOP, TIDYING, TERMINATED。线程池状态定义代码如下:private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0));pri...转载 2020-03-24 16:56:52 · 231 阅读 · 0 评论 -
Java多线程系列--“JUC线程池”03之 线程池原理(二)
线程池示例在分析线程池之前,先看一个简单的线程池示例。import java.util.concurrent.Executors;import java.util.concurrent.ExecutorService;public class ThreadPoolDemo1 { public static void main(String[] args) { /...转载 2020-03-24 16:50:56 · 751 阅读 · 0 评论 -
Java多线程系列--“JUC线程池”02之 线程池原理(一)
ThreadPoolExecutor简介ThreadPoolExecutor是线程池类。对于线程池,可以通俗的将它理解为"存放一定数量线程的一个线程集合。线程池允许若个线程同时允许,允许同时运行的线程数量就是线程池的容量;当添加的到线程池中的线程超过它的容量时,会有一部分线程阻塞等待。线程池会通过相应的调度策略和拒绝策略,对添加到线程池中的线程进行管理。"ThreadPoolExecutor数...转载 2020-03-24 16:34:22 · 260 阅读 · 0 评论 -
线程池架构
1. Executor它是"执行者"接口,它是来执行任务的。准确的说,Executor提供了execute()接口来执行已提交的 Runnable 任务的对象。Executor存在的目的是提供一种将"任务提交"与"任务如何运行"分离开来的机制。它只包含一个函数接口:void execute(Runnable command)2. ExecutorServiceExecutorServ...转载 2020-03-24 16:24:46 · 270 阅读 · 0 评论 -
Java虚拟机(JVM)
Java虚拟机在运行程序时会把其自动管理的内存划分为5个区域,每个区域都有各自的用途以及创建销毁的时机,其中蓝色部分代表的是所有线程共享的数据区域,而绿色部分代表的是每个线程的私有数据区域。JVM堆(Java Heap):Java 堆属于线程共享的内存区域,它在虚拟机启动时创建,是Java 虚拟机所管理的内存中最大的一块,主要用于存放对象实例,几乎所有的对象实例都在这里分配内存,注意Ja...原创 2020-03-20 11:58:26 · 190 阅读 · 0 评论
分享