前言 Java 21 正式引入虚拟线程(Virtual Threads),这是 Project Loom 的核心成果。虚拟线程让 Java 并发编程从"难"变"简",彻底改变了高并发应用的开发方式。本文带你全面掌握虚拟线程。 一、虚拟线程 vs 平台线程 平台线程:对应操作系统线程,创建成本高(约1 ...
本文将带你深入了解Spring框架的核心原理,通过300行代码的迷你版本来展示Spring最核心的特性:IoC(控制反转)、DI(依赖注入)和MVC(模型-视图-控制器)模式的实现。 mini版Spring实现思路 实现过程 自定义注解 在Spring框架中,注解是非常重要的组成部分。我们的迷你版也 ...
MVC 拦截器 Spring MVC 拦截器对应HandlerInterctor接口,该接口位于org.springframework.web.servlet的包中,定义了三个方法,若要实现该接口,就要实现其三个方法: 前置处理(preHandle()方法):该方法在执行控制器方法之前执行。返回值为 ...
在Java中,关键字和保留字是两类具有特殊意义的标识符,它们被语言本身占用,不能作为变量名、方法名、类名等自定义标识符使用。理解它们的区别与用途,是掌握Java语法的第一步。 查看官网关键字和保留字: https://docs.oracle.com/javase/tutorial/java/nuts ...
前言 什么是MVC MVC英文是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计规范,本质上也是一种解耦。 Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。 Vie ...
1. 什么是注释? 注释(comment)。对Java程序中的代码进行文字性解释说明。不会被Java编译和运行。 2. Java注释 Java中的注释主要分为三类: 类型 语法 用途 单行注释 // 注释内容 对代码进行简短说明,编译时忽略 多行注释 /* 注释内容 */ 可跨行,用于较长的解释或临 ...
实现 是类对接口行为规范的 "兑现",核心作用是弥补单继承不足、定义行为标准,是接口多态的基础;泛型 参数化类型,编译时检查类型安全,消除强制转换,核心是类型参数(T/E 等),实现代码复用。 ...
一般初学者开发第一个Java程序,我们习惯称之为:HelloWorld。 1. Java程序的开发步骤 Java程序开发一般分为三步:编写、编译、运行。 将Java代码编写到以.java结尾的源文件中。 通过javac.exe命令对源文件(.java)进行编译,编译后在当前源文件所在目录会自动生成一 ...
大家好,我是R哥。 一周时间,Spring Boot 连发两个版本: 这版本速度也太快了吧,跟不上了,不过好在都是小版本更新,主要是一些 bug 修复和依赖升级,没什么大问题。 本次更新要点 Spring Boot 4.0.5 版本主要包含 17 个漏洞修复、文档改进和依赖升级,重点说说 Sprin ...
前言 Netty 是一个高性能、异步事件驱动的网络应用框架,广泛应用于 RPC、消息队列、游戏服务器等高并发场景。本文从零开始,带你掌握 Netty 的核心概念和实战技巧。 一、为什么选择 Netty? 传统 Java NIO 的痛点:API 复杂,学习曲线陡峭;需要手动管理 Selector、Ch ...
前言 在高并发场景下,同步阻塞是性能杀手。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 ...