自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 收藏
  • 关注

原创 Java中PO、BO、VO、DTO、POJO的区别与使用场景

在Java开发中,分层架构设计是保证系统可维护性和扩展性的关键。不同的对象类型在不同层次中扮演着特定角色,理解PO、BO、VO、DTO、POJO等概念的区别和使用场景,对于设计清晰的系统架构至关重要。

2025-06-13 14:30:39 652

原创 Spring Boot配置中心敏感数据加密解决方案

在微服务架构中,配置中心往往存储着数据库密码、API密钥等敏感信息。本文介绍两种Spring Boot环境下的配置加密方案。1)使用jasypt-spring-boot-starter方案2)基于EnvironmentPostProcessor自定义加解密方案

2025-05-16 17:31:25 440

原创 使用注解实现数据库字段加解密方案

*** 标识要加解密的对象* 该注解的值会影响 SensitiveFiled 的作用*/@Inherited/*** 是否写入加密* @return 默认 true*//*** 读取的时候解密* @return 默认 false*//*** 标识要加解密的字段* 整体需要依赖 SensitiveObject 的取值情况*/@Inherited/*** 是否写入加密* @return 默认 true*//*** 读取的时候解密。

2025-05-16 16:29:41 265

原创 多线程协作工具CountDownLatch

在多线程编程中,线程间的协调配合往往比单线程开发复杂数倍。

2025-04-30 10:23:57 283

原创 基于Redisson的Lock4j分布式锁

Component@Override// 示例:组合方法签名+参数哈希@Component@Override// 可记录告警日志或发送通知log.warn("关键操作锁获取失败:key={}, timeout={}ms, retries={}",// 抛出业务异常throw new ServiceException("系统资源繁忙,请稍后重试");

2025-04-25 19:23:45 375

原创 采用redis+caffeine设计缓存

在高性能的服务架构设计中,缓存是一个不可或缺的环节。在实际的项目中,我们通常会将一些热点数据存储到Redis或Memcached 这类缓存中间件中,只有当缓存的访问没有命中时再查询数据库。在提升访问速度的同时,也能降低数据库的压力。随着不断的发展,这一架构也产生了改进,在一些场景下可能单纯使用Redis类的远程缓存已经不够了,还需要进一步配合本地缓存使用,例如Guava cache或Caffeine,从而再次提升程序的响应速度与服务性能。

2025-04-18 18:55:05 142

原创 Spring状态机模式

*** 订单状态枚举* NEW -> 新建订单(初始状态)* PAID -> 已支付* DELIVERED -> 已发货* COMPLETED -> 已完成* CANCELLED -> 已取消* 订单事件枚举* PAY -> 支付操作* DELIVER -> 发货操作* RECEIVE -> 确认收货* CANCEL -> 取消订单// 订单状态枚举NEW, // 新建PAY_PROCESSING, // 支付处理中PAID, // 已支付。

2025-04-11 09:29:16 446

原创 告别if-else:Java中优雅的条件处理策略

在Java开发中,过度使用if-else语句会导致代码可读性差、维护成本高的问题。本文将介绍几种替代if-else的优雅方案,让你的代码更加简洁高效。

2025-04-03 09:41:58 315

原创 利用javaagent监控sql查询时长

通过javaagent监控sql查询时长

2023-04-11 21:20:55 1769 1

原创 Builder建造者模式

Builder建造者模式

2022-06-19 19:59:32 1026

原创 JVM对象创建

1.类加载new对象或对象克隆或序列化时判断是否加载过该对象,如果没有加载过,尝试加载2.分配空间类加载成功后,要为对象分配内存空间来存储这个对象,加载完毕后可以确定当前对象的大小...

2022-04-23 20:10:56 283

原创 自定义类加载器|打破JVM双亲委派机制

上一章什么是JVM双亲委派机制本章简单说明一下怎么去打破jvm的双亲委派机制jvm的双亲委派机制主要核心方法有两个1: loadClass决定有哪个类加载器去加载文件,之后调用findClass2: findClass扫描包,解析class知道核心方法后,从这两个方法入手首先这两个方法都是在ClassLoader这个文件中并且都是可以重写的那么就可以继承ClassLoader这个类,重写其中的两个方法代码如下:package com.example.demo.launcher;

2022-04-16 21:28:12 638

原创 JVM双亲委派机制

运行java程序时,首先会通过jvm.dll创建出c++实现的java虚拟机,在C++中创建bootstrap类加载器,之后会调用java的Launcher类的getLauncher初始化方法创建出ext类加载器和app类加载器。源码:当类加载器初始化完毕之后,就可以加载类了。加载类的核心方法loadClass就是双亲委派机制的核心代码loadClass方法加载过程1、findLoadedClass判断当前类有没有加载过2、判断parent父加载器是否不为空,如果不为空,调用父加载器的lo.

2022-04-16 18:14:50 511

原创 JVM类加载过程

类加载过程类加载过程有如下几步:加载 >> 验证 >> 准备 >> 解析 >> 初始化 >> 使用 >> 卸载加载:在硬盘上找到并且读取字节码文件,也就是我们的java类,使用到类的时候会进行加载,比如说调用类的main方法或者new出来的对象,在加载阶段会在内存里面生成一个class文件,jvm在启动后调用的就是生成的class文件。验证:校验class文件是否正确。准备:给类的静态变量分配内存,赋予初始值。比如:publ

2021-02-04 15:34:05 382 3

空空如也

空空如也

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

TA关注的人

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