Spring Cloud微服务实战:服务注册、网关、负载均衡全家桶指南
前言
Spring Cloud是Java微服务开发的事实标准,但很多开发者对它的核心组件还是一知半解。本文从零搭建一个完整的微服务项目,涵盖服务注册(Nacos)、网关(Spring Cloud Gateway)、负载均衡(LoadBalancer)三大核心组件。
一、项目架构
microservice-demo/
├── service-gateway/ # API网关 (8080)
├── se ...
Spring AI 1.1.3 正式发布,19 个新特性太顶了!
大家好,我是R哥。
Spring AI 1.1.3 正式发布了。。
除了 Spring AI 1.1.3,2.0.0 也来到了 M3 版本了,相信再过一阵子就要正式 GA 了,1.0.4 也发布了,大家可以根据自己的需要选择合适的版本。
说说主线版本 Spring AI 1.1.3 吧,这次一共带来了:
19 个新特性;
31 个 bug 修复;
23 个文档改进;
25 个其他改进;
Sp ...
Docker容器化Spring Boot:从构建到部署的完整实战
前言
容器化部署已经成为现代Java应用的标准配置。本文用完整的实战案例,带你从零构建Spring Boot应用的Docker镜像,并实现生产级部署。
一、环境准备
Docker Desktop (Windows/Mac) 或 Docker Engine (Linux)
Spring Boot 3.x 项目
JDK 17+
二、项目结构
my-springboot-app/
├── src/
├── Dockerfile # ...
算法~时间戳计算两个日期是否为同天同时同分
UTC时间戳验证两个日期是否为同一天的核心原理在于:时间戳是绝对的时间点,而“天”是依赖于特定时区(如UTC)的人为划分区间。通过将两个绝对时间点转换到同一时区后,比较它们的年、月、日是否完全相同。
具体原理可分以下几步理解:
1. 时间戳的本质
Unix时间戳(通常指秒数或毫秒数)是从 1970-01-01 00:00:00 UTC 开 ...
AI Agent 开发实战:用LangChain4j构建你的第一个Java智能体
前言
AI Agent是2026年最热门的技术方向之一。本文用LangChain4j带你从零开始构建一个Java智能体,实现对话、工具调用和记忆功能。
一、什么是AI Agent?
AI Agent(智能体)是能够自主决策并执行任务的AI系统,核心能力:
理解意图:解析用户自然语言
规划任务:分解复杂任务为步骤
调用工具:使用外部API或函数
记忆上下 ...
Mysql的行级锁到底是怎么加的?
开篇结论
加锁的对象是索引,加锁的基本单位是 next-key lock,它是由记录锁和间隙锁组合而成的,next-key lock 是左开右闭区间,而间隙锁是左开右开区间。
在只使用记录锁或者间隙锁就能避免幻读现象的场景下, next-key lock 就会退化成记录锁或间隙锁。
假设这个表,id 是主键索引(唯一索引),age 是普通索引(非唯一 ...
Java线程池完全指南:从原理到实战的7个关键点
前言
线程池是Java并发编程的核心组件,也是面试必考题。本文从原理到实战,带你全面掌握线程池的7个关键点。
一、为什么需要线程池?
每次创建线程都有开销:
线程创建需要调用系统API,开销大
线程销毁也需要开销
大量线程会消耗内存
线程池解决问题:
线程复用,减少创建销毁开销
控制最大并发数
提供任务队列,缓冲 ...
MySQL锁机制:从全局锁到行级锁的深度解读
全局锁
flush tables with read lock
执行后,整个数据库就处于只读状态了,这时其他线程执行以下操作,都会被阻塞:
对数据的增删改操作,比如 insert、delete、update等语句;
对表结构的更改操作,比如 alter table、drop table 等语句。
全局锁主要应用于做全库逻辑备份,这样在备份数据库期间,不会因为数据或表结 ...
Redis缓存实战:彻底解决缓存穿透、击穿、雪崩三大难题
前言
Redis缓存是Java开发中最常用的技术之一,但缓存穿透、击穿、雪崩三大问题也是面试高频考题。本文结合实战代码,带你彻底搞懂这三大难题。
一、缓存穿透
问题描述
查询一个数据库和缓存中都不存在的key,每次请求都打到数据库,大量请求可能拖垃数据库。
解决方案
1. 缓存空对象
@Service
public class UserService {
...
揭秘MySQL索引分类
索引的作用
说白了索引就是数据的目录,根据索引去查数据必然比在库中一行记录一行记录的查更快
索引分类
按数据结构分类
Mysql的数据是存储在磁盘中的,每次从磁盘中读取数据都需要进行一次IO。一个表的数据在磁盘上由于插入顺序的原因肯定不是顺序存放,如果按照表字段内容顺序查找,如果一个500万条数据的表,要找的刚好 ...
Hutool 的 `TimedCache` 到期会自动清理吗? ——————hutool cache的"惰性清理"和"定期清理"
是的,Hutool 的 TimedCache 会在到期时自动清理缓存项,但它的清理机制是基于"惰性清理"和"定期清理"两种策略结合,而不是立即清理。
🎯 核心清理机制
1. 惰性清理(Lazy Eviction)
TimedCache<String, Object> cache = new TimedCache<>(1000); // 默认过期时间1秒
cache.put("key1", "value1");
// 在get时检查是否过 ...
Java 26 发布了, 我人麻了。。
大家好,我是R哥。
Java 25 刚发布半年之久(Java 25 正式发布),很多人可能还没听说过,现在 Java 26 又来了,我真的人麻了啊。。。
需要注意的是,Java 26 并不是 LTS(长期支持版本),千万不要用在生产环境里,因为它许多特性还在预览阶段,可能会有不兼容的变动。
废话不多说了,下面我们来看看 Java 26 都有哪些新 ...
Spring Boot 整合AI大模型实战:手把手带你接入DeepSeek API
前言
随着AI大模型的快速普及,越来越多的Java开发者希望将AI能力集成到自己的项目中。本文手把手带你用Spring Boot接入DeepSeek API,实现一个具备AI对话能力的后端服务。
一、环境准备
JDK 17+
Spring Boot 3.x
Maven 3.8+
DeepSeek API Key(到 platform.deepseek.com 免费申请)
二、添加依赖
<dependency>
<grou ...
InnoDB存储结构全解析:行页区段与单表2000W行的关系
逻辑存储结构
表空间由段(segment)、区(extent)、页(page)、行(row)组成,InnoDB存储引擎的逻辑存储结构大致如下图:
行(row)
数据库表中的记录都是按行(row)进行存放的,每行记录根据不同的行格式,有不同的存储结构。
页(page)
记录是按照行来存储的,但是数据库的读取并不以「行」为单位,否则一次读取( ...
MySQL语句执行深度剖析:从连接到执行的全过程
执行流程图
MySQL 的架构可以大致划分为四个层次:连接层、服务层、存储引擎层和文件系统层。
连接层:负责对来自客户端的连接进行权限验证,并将连接信息存入连接池中,方便后续的连接复用。
服务层:主要负责 SQL 语句的解析与优化,还包括查询缓存和 MySQL 内置函数的实现。
存储引擎层:提供多种可插拔的存储引擎,允 ...
密码太多记不住、怕泄露?试试这款开源密码管理神器!
大家好,我是 Java陈序员。
数字化时代,密码是我们的“数字身份证”,网购、办公、社交、理财...每个平台都需要记一套密码,要么混记导致账号被盗风险,要么写在记事本里怕丢,用第三方密码工具又担心隐私泄露。
今天,给大家介绍一款开源的密码管理神器,安全可靠!
关注微信公众号:【Java陈序员】,获取开源项目分享、 ...
调试排错 - 线程Dump分析
Thread Dump介绍
什么是Thread Dump
Thread Dump是非常有用的诊断Java应用问题的工具。每一个Java虚拟机都有及时生成所有线程在某一点状态的thread-dump的能力,虽然各个 Java虚拟机打印的thread dump略有不同,但是 大多都提供了当前活动线程的快照,及JVM中所有Java线程的堆栈跟踪信息,堆栈信息一般包含完整的类名及所执 ...
Java 基础 (Java 入门笔记)
这篇文章是按照 B 站狂神说的 Java 零基础课程的内容整理的 (实际上就是学习笔记的性质).
希望我能够坚持下去o(≧口≦)o
目录数据类型与转换数据类型基本数据类型进制类型转换强制转换自动转换注意变量和常量变量变量作用域局部变量实例变量类变量常量命名规则运算符算数运算符加, 减, 乘, 除, 模自增自减比较运算逻辑运算 ...
JVM排查工具单
Java 调试入门工具
jps
jps是jdk提供的一个查看当前java进程的小工具, 可以看做是JavaVirtual Machine Process Status Tool的缩写。
jps常用命令
jps # 显示进程的ID 和 类的名称
jps –l # 输出输出完全的包名,应用主类名,jar的完全路径名
jps –v # 输出jvm参数
jps –q # 显示java进程号
jps -m # main 方法
jps - ...
Java对象头:深入理解对象存储的核心机制
Java对象结构
实例化一个Java对象之后,该对象在内存中的结构是怎么样的?Java对象(Object实例)结构包括三部分:对象头、对象体和对齐字节,具体下图所示
Java对象的三部分
对象头
对象头包括三个字段,第一个字段叫作Mark Word(标记字),用于存储自身运行时的数据,例如GC标志位、哈希码、锁状态等信息。
第二个字段 ...