前言 在高并发场景下,同步阻塞是性能杀手。Java 8 引入的 CompletableFuture 彻底改变了异步编程的写法。 一、为什么需要 CompletableFuture? 传统 Future 的痛点: future.get() 会阻塞当前线程 无法链式组合多个异步任务 异常处理繁琐 二、基 ...
前言 Spring Cloud是Java微服务开发的事实标准,但很多开发者对它的核心组件还是一知半解。本文从零搭建一个完整的微服务项目,涵盖服务注册(Nacos)、网关(Spring Cloud Gateway)、负载均衡(LoadBalancer)三大核心组件。 一、项目架构 microservi ...
大家好,我是R哥。 Spring AI 1.1.3 正式发布了。。 除了 Spring AI 1.1.3,2.0.0 也来到了 M3 版本了,相信再过一阵子就要正式 GA 了,1.0.4 也发布了,大家可以根据自己的需要选择合适的版本。 说说主线版本 Spring AI 1.1.3 吧,这次一共带来 ...
前言 容器化部署已经成为现代Java应用的标准配置。本文用完整的实战案例,带你从零构建Spring Boot应用的Docker镜像,并实现生产级部署。 一、环境准备 Docker Desktop (Windows/Mac) 或 Docker Engine (Linux) Spring Boot 3. ...
UTC时间戳验证两个日期是否为同一天的核心原理在于:时间戳是绝对的时间点,而“天”是依赖于特定时区(如UTC)的人为划分区间。通过将两个绝对时间点转换到同一时区后,比较它们的年、月、日是否完全相同。 具体原理可分以下几步理解: 1. 时间戳的本质 Unix时间戳(通常指秒数或毫秒数)是从 1970- ...
前言 AI Agent是2026年最热门的技术方向之一。本文用LangChain4j带你从零开始构建一个Java智能体,实现对话、工具调用和记忆功能。 一、什么是AI Agent? AI Agent(智能体)是能够自主决策并执行任务的AI系统,核心能力: 理解意图:解析用户自然语言 规划任务:分解复 ...
开篇结论 加锁的对象是索引,加锁的基本单位是 next-key lock,它是由记录锁和间隙锁组合而成的,next-key lock 是左开右闭区间,而间隙锁是左开右开区间。 在只使用记录锁或者间隙锁就能避免幻读现象的场景下, next-key lock 就会退化成记录锁或间隙锁。 假设这个表,id ...
前言 线程池是Java并发编程的核心组件,也是面试必考题。本文从原理到实战,带你全面掌握线程池的7个关键点。 一、为什么需要线程池? 每次创建线程都有开销: 线程创建需要调用系统API,开销大 线程销毁也需要开销 大量线程会消耗内存 线程池解决问题: 线程复用,减少创建销毁开销 控制最大并发数 提供 ...
全局锁 flush tables with read lock 执行后,整个数据库就处于只读状态了,这时其他线程执行以下操作,都会被阻塞: 对数据的增删改操作,比如 insert、delete、update等语句; 对表结构的更改操作,比如 alter table、drop table 等语句。 全 ...
前言 Redis缓存是Java开发中最常用的技术之一,但缓存穿透、击穿、雪崩三大问题也是面试高频考题。本文结合实战代码,带你彻底搞懂这三大难题。 一、缓存穿透 问题描述 查询一个数据库和缓存中都不存在的key,每次请求都打到数据库,大量请求可能拖垃数据库。 解决方案 1. 缓存空对象 @Servic ...
索引的作用 说白了索引就是数据的目录,根据索引去查数据必然比在库中一行记录一行记录的查更快 索引分类 按数据结构分类 Mysql的数据是存储在磁盘中的,每次从磁盘中读取数据都需要进行一次IO。一个表的数据在磁盘上由于插入顺序的原因肯定不是顺序存放,如果按照表字段内容顺序查找,如果一个500万条数据的 ...
是的,Hutool 的 TimedCache 会在到期时自动清理缓存项,但它的清理机制是基于"惰性清理"和"定期清理"两种策略结合,而不是立即清理。 核心清理机制 1. 惰性清理(Lazy Eviction) TimedCache<String, Object> cache = new Tim ...
大家好,我是R哥。 Java 25 刚发布半年之久(Java 25 正式发布),很多人可能还没听说过,现在 Java 26 又来了,我真的人麻了啊。。。 需要注意的是,Java 26 并不是 LTS(长期支持版本),千万不要用在生产环境里,因为它许多特性还在预览阶段,可能会有不兼容的变动。 废话不多 ...
前言 随着AI大模型的快速普及,越来越多的Java开发者希望将AI能力集成到自己的项目中。本文手把手带你用Spring Boot接入DeepSeek API,实现一个具备AI对话能力的后端服务。 一、环境准备 JDK 17+ Spring Boot 3.x Maven 3.8+ DeepSeek A ...
逻辑存储结构 表空间由段(segment)、区(extent)、页(page)、行(row)组成,InnoDB存储引擎的逻辑存储结构大致如下图: 行(row) 数据库表中的记录都是按行(row)进行存放的,每行记录根据不同的行格式,有不同的存储结构。 页(page) 记录是按照行来存储的,但是数据库 ...
执行流程图 MySQL 的架构可以大致划分为四个层次:连接层、服务层、存储引擎层和文件系统层。 连接层:负责对来自客户端的连接进行权限验证,并将连接信息存入连接池中,方便后续的连接复用。 服务层:主要负责 SQL 语句的解析与优化,还包括查询缓存和 MySQL 内置函数的实现。 存储引擎层:提供多种 ...
password-xl —— 一个开源的密码管理项目,旨在为用户提供安全、便捷的密码管理服务。项目不仅功能丰富多样,还具备极高的安全性。 ...
Thread Dump介绍 什么是Thread Dump Thread Dump是非常有用的诊断Java应用问题的工具。每一个Java虚拟机都有及时生成所有线程在某一点状态的thread-dump的能力,虽然各个 Java虚拟机打印的thread dump略有不同,但是 大多都提供了当前活动线程的快 ...
这篇文章是按照 B 站狂神说的 Java 零基础课程的内容整理的 (实际上就是学习笔记的性质). 希望我能够坚持下去o(≧口≦)o 目录数据类型与转换数据类型基本数据类型进制类型转换强制转换自动转换注意变量和常量变量变量作用域局部变量实例变量类变量常量命名规则运算符算数运算符加, 减, 乘, 除, ...
Java 调试入门工具 jps jps是jdk提供的一个查看当前java进程的小工具, 可以看做是JavaVirtual Machine Process Status Tool的缩写。 jps常用命令 jps # 显示进程的ID 和 类的名称 jps –l # 输出输出完全的包名,应用主类名,jar ...