自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java 静态内部类、非静态内部类与 Record

定义在另一个类内部,但。class:定义在另一个类内部,并且。record:Java 专门为“”这种场景设计的简化类,特别适合 DTO、查询结果、统计结果等。它们都属于 Java 的类型定义方式,但适用场景差别很大。

2026-08-18 16:36:23 116

原创 Java 注解 + Spring AOP + 动态代理(实战)

Async@Cacheable@RedisLock@某个自定义注解“这个注解自己执行了什么?“谁在扫描/解释这个注解?注解标签 + 配置它自己不干活Java 注解││ 提供元数据↓││ 定义增强逻辑↓││ 拦截方法调用↓原始方法注解负责“告诉 Spring 我需要什么”,Aspect 负责“规定要做什么”,Proxy 负责“真正拦截并执行”,proceed()负责“调用原始方法”。这四个概念连起来,就是你们@RedisLock的 Spring 原理。

2026-08-12 15:57:16 301

原创 Spring 事务完成后再执行操作:TransactionSynchronization 与事务事件详解

开启事务↓执行数据库操作↓提交前↓提交或回滚↓事务完成:提交前;:成功提交后;:回滚后;:事务结束后,不区分提交还是回滚。支持绑定这些阶段,默认阶段是。如果发布事件时没有事务,监听器默认不会执行,除非显式开启。可以按照下面的方式理解。) {哪个订单创建成功了属于哪个用户因为事件最好表达业务事实,而不是规定监听器必须做什么。

2026-07-23 17:08:14 352

原创 高频变更数据如何设计

这种方式简单、准确,也容易理解。要回答这些问题,首先需要理解一个核心原则:高频变更数据没有统一的最佳方案,必须根据数据是否允许丢失、是否要求实时准确、是否存在热点,以及是否需要多个系统消费来选择。

2026-07-23 15:05:00 209

原创 MyBatis-Plus 完整实际使用整理

数据库操作方式总览│├── 方式一:BaseMapper + Wrapper(大厂主流)│ ├── 基础 CRUD:selectById / insert / updateById / deleteById│ ├── 条件操作:selectList(LambdaQueryWrapper) / delete(wrapper) ...│ ├── 分页:selectPage(IPage, wrapper) + 分页插件。

2026-06-18 22:31:57 465

原创 Java后端测试

如果断言成功:测试通过 ✅如果断言失败:测试失败 ❌(会抛出 AssertionFailedError)

2025-09-11 15:45:30 1443

原创 Spring 事务提交成功后执行额外逻辑

执行。

2025-09-04 17:55:34 1014

原创 CompletableFuture

方法签名: 或 使用场景:需要“算出一个结果”的任务(查库、HTTP、计算等)(无返回值) 方法签名: 或 使用场景:只做副作用(写日志、发 MQ),不需要结果示例1.3 线程池选择1.3.1 不指定线程池(默认使用 默认使用 。适用场景:短小的 CPU 计算(执行快、不会阻塞线程)。风险:如果把阻塞型 IO(HTTP/DB/文件)丢进默认池,容易把公共池线程占满,拖慢所有同池任务。当你调用:它的源码里其实是:也就是说:默认线程池 = 这是一个全局共

2025-09-04 14:37:33 857

原创 Nginx

回答要点Nginx 是一个高性能Web 服务器,常用作反向代理、负载均衡、静态资源服务、限流。在 Java Spring Boot 项目中,Nginx 主要作用是:把用户请求转发到后端 Spring Boot(反向代理)。提供 Vue/React 打包后的静态页面。做 HTTPS 证书处理(终止 SSL,后端只收明文 HTTP)。做简单的限流、防刷。标准回答示例👉。

2025-08-29 11:30:51 927

原创 常见限流算法

把时间切成一格一格的窗口(如 1s 一格)。每格内最多放行 N 次,请求数超过 N 就拒绝。:当前窗口的计数器count,窗口大小W(如 1s),阈值N。(现在属于第几个窗口)。如果window_id变了,该窗口的count=0;count += 1;若count > N→,否则。:用当前时间戳整除窗口大小来定位窗口,窗口之间是“跳变”的。:实现最简单、读写最少。:窗口交界处可能出现“例如在窗口末尾瞬间打满 N 次,下个窗口开始又立刻打满 N 次,短时间内等效 2N。

2025-08-27 16:06:53 1059

原创 Elasticsearch

使用.must(QueryBuilders.matchQuery("bio", "程序员")).build();类型方法/关键词新增或更新save(user)删除查询所有findAll()精确查询模糊匹配多字段匹配分页排序数值范围时间范围原生查询聚合分析判断索引存在创建索引。

2025-08-02 20:03:54 831

原创 Spring 事件机制

Component@OverrideSystem.out.println("监听到用户注册:" + event.getUsername());

2025-06-26 12:48:32 577

原创 Spring Boot 自动装配(自定义 Starter)

Bean@AutoConfiguration // 👈 Spring Boot 3.x 推荐用法,替代 @Configuration@Bean📌是 Spring Boot 3 新增的注解,用来标记自动配置类(等价于注册)。

2025-06-24 10:11:21 1393

原创 Spring Boot 项目初始化

是 Spring Boot 提供的一个函数式接口,声明如下:该接口只有一个方法,会在 Spring Boot容器启动完成后被自动调用。你可以将它理解为一种“钩子函数”,用于执行初始化逻辑。

2025-06-22 19:53:02 412

原创 Windows 中使用 Claude Code

WSL(Windows Subsystem for Linux)是微软提供的一种兼容层,允许在Windows 系统中运行完整的 Linux(如 Ubuntu)环境,就像在真实的 Linux 系统上一样。使用 WSL 后,可以在 Windows 上运行 npm、Python、Docker、Claude Code 等只支持 Linux 的工具。

2025-06-19 22:47:39 12600 4

原创 Spring Boot 参数验证

这个依赖包含了 Hibernate Validator(JSR-380 规范的实现)和必要的 Spring 验证支持。- 必须大于等于指定值(字符串形式表示)- 必须小于等于指定值(字符串形式表示)- 集合/字符串/数组大小必须在范围内。- 级联验证,用于验证对象中的嵌套对象。- 数字必须大于等于指定值。- 数字必须小于等于指定值。- 必须是过去或现在的日期。- 必须是将来或现在的日期。- 值必须为 false。- 必须是有效的邮箱格式。- 值必须为 null。- 值必须为 true。

2025-05-12 21:03:05 725

原创 Spring Boot 中的重试机制

Retryable注解是 Spring Retry 模块提供的,用于自动重试可能会失败的方法。在微服务架构和分布式系统中,服务之间的调用可能会因为网络问题、服务繁忙等原因失败。使用@Retryable可以提高应用的稳定性和容错能力1。

2025-05-11 20:19:36 1253

原创 Java 设计模式

单例模式的定义是:简单说,就是一个类只new一次,后面都复用同一个对象。节省内存(避免反复创建同一对象)保持全局统一性(比如日志类、缓存管理器、数据库连接池)控制共享资源(保证线程安全)在Spring中:默认情况下,所有@Bean都是单例模式管理的。只要一个类被注册到Spring容器里(比如加了、、),Spring容器在启动的时候就创建一个实例,整个容器里共享这一份实例。调用代码:输出结果: 说明和是同一个实例。✏️手写示例 + (双重检查锁定)✅ 2. 工厂模式(Fa

2025-04-27 20:45:40 1289

原创 基于Reactive的Spring Security(Spring Webflux)

因为 Spring Cloud Gateway 基于 WebFlux/reactor-netty 实现,是一个典型的非阻塞、响应式的网关。:Servlet 容器下(Tomcat、Jetty等)的 Spring Boot Web 项目,或者传统的 Spring MVC 应用。(Reactive 模型,如 Spring Cloud Gateway 项目),就用 ServerHttpSecurity。配置中的一个重要部分,它允许你自定义当安全相关异常发生时(如认证失败、访问被拒绝等)的处理方式。

2025-04-15 17:27:57 1222

原创 Java 排序算法

是一种。

2025-03-24 20:35:52 929

原创 Java后端序列化工具 Jackson 和 FastJSON

FastJSON 2.x 提供了。,但如果数据格式错误,会抛出。FastJSON 也可以解析。Jackson 还可以解析。Jackson 会抛出。

2025-03-12 15:33:03 698

原创 MySQL 性能优化

生产环境的数据库通常承载着高并发、大数据量的业务请求,因此在定位慢 SQL 时需要特别注意对系统性能的影响,避免因监控和分析操作导致数据库性能进一步下降。

2025-02-27 23:46:38 1407

原创 Java多线程

你可以通过自定义各种参数来精确控制线程池的行为,如核心线程数、最大线程数、线程空闲超时时间、任务队列的类型等。当线程池的任务队列已满且最大线程数已经达到上限时,线程池需要一种策略来处理新提交的任务。是 Java 并发包(JUC)中提供的一种更强大的线程管理方式,特别适用于需要获取线程执行结果的场景。是用于管理和调度线程的一种机制,能够有效地控制并发任务的执行。是 Java 线程池框架的核心接口,提供了常用的线程池管理方法。方法用于关闭线程池,调用此方法后线程池不再接受新的任务,但会等待已提交任务执行完成。

2025-02-25 18:01:48 1085

原创 Java多线程安全

可以使用自定义的。

2025-02-25 18:00:46 808

原创 动态规划算法

状态定义是动态规划的基础,它决定了我们如何将一个问题分解为子问题,并通过子问题的解来推导出原问题的解。在动态规划中,状态通常通过一个数组(如。

2025-02-21 14:00:36 537

原创 Java中的分布式(概念说明)

分布式系统(Distributed System):由多台服务器(或节点)协同工作,对外提供一个整体服务。不同节点之间通过网络通信来协同处理请求或共享数据,相对于「单体应用」而言,可以带来更高的吞吐量可用性和灵活扩展能力。

2025-02-14 15:35:37 5054 3

原创 JVM(Java 虚拟机)

这就是 Java 既有解释语言的灵活性,又有编译语言的高效性的原因。

2025-02-11 00:06:58 1836

原创 Spring 事务管理

有以下限制(同类内部调用失效、private 方法不生效、跨线程无效等)故在这些场景下需要手动控制事务。AOP(Aspect-Oriented Programming)本质是。Spring 提供了 7 种事务传播级别,默认是。记录不会插入数据库(因为事务回滚)。注解来管理事务,这种方式更简单易用。,在指定的连接点(方法调用)执行。Spring Boot 提供了。(开启事务、提交、回滚)。

2025-02-10 16:26:34 1179

原创 ThreadLocal

在多线程环境中,如果多条线程都要访问(读写)同一个全局变量,就会遇到并发、安全、数据一致性等问题。我们可能需要加锁、加 volatile 等,或者想办法把这个变量变成方法参数层层传递,十分繁琐。但有些场景,数据其实不需要被线程之间共享,而是“线程私有”的。当前线程处理的是“请求A”,里面存了“用户ID=1001”;另一个线程处理“请求B”,里面存了“用户ID=2002”;这两条线程对 “用户ID” 的值并没有交互或共享的必要,每个线程只关心“自己的用户ID”即可。如果我们希望快速地在。

2025-02-05 23:38:21 895

原创 Spring Boot框架下的单元测试

及早发现并修复 BUG,使后续迭代功能或重构时能迅速验证不会破坏已实现的功能。

2025-02-03 22:26:00 3075

原创 Spring WebFlux

响应式编程是一种编程范式,专注于数据流和变化传播。

2025-01-25 16:17:03 985

原创 NIO 和 Netty 在 Spring Boot 中的集成与使用

Netty 是一个基于 Java NIO 的异步事件驱动网络应用框架,专注于高性能和可扩展的网络通信应用开发。它封装了底层 NIO 的复杂性,使开发者无需直接处理。

2025-01-22 01:18:11 1860

原创 Spring boot框架下的RabbitMQ消息中间件

消息从生产者发送到队列,由消费者从队列中接收,消息只能被一个消费者消费。

2025-01-17 23:42:32 1508

原创 Spring boot框架下的RocketMQ消息中间件

Producer 是负责发送消息到 RocketMQ 的组件。它可以将消息发送到指定的 Topic。

2025-01-16 15:36:20 1322 1

原创 数据库主键生成策略

方法原理与特性优点缺点适用场景自增列依赖数据库自增特性简单、插入性能高、占用空间小不适合分布式、易预测、依赖单点单机或中小型系统UUID基于随机数/时间等生成 128 位标识分布式友好、无需中心化协调、难预测存储占用大、索引性能差、无序分布式环境、需要跨系统或难以预测的主键场景雪花算法分布式高效生成 64 位长整型 ID,含时间戳、节点 ID 等高并发、有序、全局唯一依赖时间、实现复杂、时钟回拨问题大规模分布式系统、高并发业务(如电商订单、日志追踪 ID 等)

2025-01-08 13:59:12 1661

原创 WebClient

WebClient是 Spring 5 引入的一个基于响应式编程模型的 HTTP 客户端。与传统的相比,WebClient 采用了Reactor库,支持非阻塞式(异步)调用,可充分利用多核 CPU 资源,提升高并发场景的吞吐量。它能够非常灵活地构造并发送 HTTP 请求(支持 GET、POST、PUT、DELETE、PATCH 等所有常见方法),并以流MonoFlux)的方式处理响应结果。默认情况下,在遇到 4xx/5xx 状态码时会抛出。

2025-01-06 22:14:01 3941 1

原创 Spring Boot 框架下的过滤器

destroy()通过@Component注解将过滤器注册为 Spring Bean,Spring Boot 会自动加载并将其添加到过滤器链中。@Component/*doFilter通过手动注册过滤器,可以指定 URL 匹配规则和执行顺序。/api/*setOrderSpring 提供了一个扩展类,它是对标准过滤器的增强,用于确保在一次请求中只执行一次过滤逻辑(防止重复过滤)。可以通过@Component或注册,方式与标准过滤器一致。

2025-01-06 20:02:21 1971 1

原创 RedissonClient

Redisson 是基于 Redis 的 Java 客户端,扩展了 Redis 的基础功能,提供了分布式锁、分布式集合、队列、信号量、限流器等高级功能。它不仅可以作为一个 Redis 客户端进行普通的 Redis 数据操作,还特别适用于分布式系统中需要高可用性、高并发控制和多线程支持的场景。

2024-12-23 17:24:53 2402

原创 IntelliJ IDEA中的语言级别版本与目标字节码版本配置(附上Java LTS JDK版本区别)

Java 版本的命名历史:1.x 与 xJava 1.8Java 8这并不是两个不同的版本,而是同一个版本的不同写法。官方名称里 JDK 8 的内部版本号是1.8.0_xxx,但对外统一称作 “Java 8”。Java 1.7Java 7,依此类推。之后 Oracle 为了简化版本号,从Java 9开始统一使用整数版本没有再继续使用“1.9”、“1.10”的叫法。所以1.8 与 18 并非同一个版本!1.8” 代表Java 8。18” 代表Java 18。

2024-12-17 15:27:27 10139 1

原创 有/无状态会话 与 Session 与 Spring Security

尽管默认情况下 Spring Security 使用 Session 来维持认证状态,但在某些场景下(如 RESTful API 或微服务架构),可能更倾向于无状态认证方式(例如基于 JWT)。在这种情况下,可以配置 Spring Security 使其不依赖于 HTTP Session,而是通过每个请求携带的 Token 来进行认证。这意味着一旦用户通过认证(例如通过表单登录),其认证状态会被保存到 Session 中,从而在后续的请求中无需重新认证。,但也可以自定义实现,比如无状态认证(详见后文)。

2024-12-12 15:03:58 1485

MobaXterm-Personal-24.2.exe

用户连接远程服务器的工具

2025-08-27

空空如也

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

TA关注的人

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