- 博客(40)
- 问答 (1)
- 收藏
- 关注
原创 Spring Security 全流程实战:从默认登录保护到 JWT 令牌 + Redis 存储的自定义方案
本文是关于 Spring Security 的相关知识,内容整理来源主要结合b站**尚硅谷和三更**的课程内容,结合两套课程的特点进行整理,涵盖项目基础、入门案例、底层原理及认证实现等内容,结合 Redis 存储用户数据,使用 JWT 生成令牌并通过过滤器校验,希望可以帮助您快速上手Spring Security。
2025-09-26 11:29:22
1585
3
原创 LangChain4j+SpringBoot 实战:打造智能医疗助手 “小智”
本文介绍了基于LangChain4j和SpringBoot开发的智能医疗助手"小智"的实现方案。系统支持多种大语言模型接入(OpenAI/DeepSeek/阿里百炼),提供AIService代理服务、聊天记忆管理、提示词优化等功能。重点实现了医疗领域的函数调用(挂号等操作)和RAG知识增强,通过向量数据库维护医疗知识库。文章详细展示了Maven/SpringBoot项目集成、模型配置(包括免费资源获取)、测试代码等关键实现步骤,为开发者提供了完整的医疗AI助手构建指南。
2025-10-23 14:31:03
744
1
原创 GC 如何判断对象该回收?从可达性分析到回收时机的关键逻辑
在Java、Python等支持自动垃圾回收(Garbage Collection, GC)的语言中,**对象被回收的核心判断标准是“对象不再可达”**——即从程序的“根对象”(GC Roots)出发,无法通过任何引用链遍历到该对象时,它就成为“垃圾”,具备被回收的条件。但具体回收时机还受引用类型、GC算法及对象“自救”机制影响
2025-10-23 09:05:33
861
原创 线程池图解:从流程到原理
摘要:本文通过图解详细解析线程池的核心机制,涵盖线程生命周期、线程池状态转换、核心参数配置及工作流程。重点阐述了线程的创建与执行过程、线程池的三种状态(运行/关闭/终止)、核心参数(核心/最大线程数、队列策略)的协同作用,以及任务提交后的处理逻辑(核心线程→队列→非核心线程→拒绝策略)。通过流程图直观展示了线程池从任务提交到执行的全链路管理原理。
2025-10-12 15:46:33
555
原创 线程池的核心参数以及执行原理
本文介绍了线程池的核心知识,包括其作为线程管理机制的定义与作用 —— 通过复用线程降低资源消耗、提高响应速度并便于管理。阐述了 ThreadPoolExecutor 的核心参数(如核心线程数、最大线程数等)及含义,详解了任务处理流程:先判断核心线程是否空闲,再检查任务队列是否已满,最后判断是否创建临时线程,否则触发拒绝策略。还列举了常用拒绝策略、Java 中 Executors 工具类提供的线程池类型,结合实战案例说明,并强调了避免无界队列、合理设置参数、关闭线程池等使用注意事项。
2025-10-12 09:56:31
936
原创 Java 线程安全:synchronized 与 Lock 的区别、代码示例及高并发场景适配
摘要:Java 线程安全中,synchronized 和 Lock 是两种主要同步机制。synchronized 是 JVM 原生实现的关键字,自动管理锁获取/释放,但不支持中断和超时;Lock 是接口需手动实现(如 ReentrantLock),必须显式释放锁,但支持中断、超时、公平锁等高级特性。Lock 通过 Condition 支持多条件绑定,更适合复杂并发场景,而 synchronized 语法更简洁。高并发下需根据具体需求选择:简单场景用 synchronized,复杂控制选 Lock。
2025-10-11 15:10:28
820
原创 Java 并发之 ReentrantLock:实现逻辑、公平性及与 synchronized 的异同
摘要:ReentrantLock和synchronized是Java实现线程同步的两个核心机制。ReentrantLock基于AQS框架实现,支持可重入、公平/非公平锁、中断响应和条件变量等特性,需显式获取释放锁。相比之下,synchronized是JVM内置的隐式锁,使用更简单但功能有限。ReentrantLock适合复杂同步场景,而synchronized更适合基础同步需求。JDK6后synchronized性能显著提升,但高并发下ReentrantLock仍具优势。开发者应根据场景需求选择合适的同步机
2025-10-11 08:51:46
797
原创 从 JMM 到 CAS:拆解 Java 并发编程的内存规范与原子操作原理
摘要:本文解析Java并发编程的两大核心技术:JMM(Java内存模型)规定了多线程下共享内存的访问规范,通过主内存和工作内存的交互保证线程安全;CAS(比较并交换)则利用硬件原子指令实现无锁并发,应用于AtomicInteger等原子类,具有无锁开销小、粒度细的优点,但也面临ABA问题、自旋开销等局限。两者共同构成了Java高效并发编程的基础,开发者需根据场景灵活选用。
2025-10-10 17:49:15
948
原创 Java 并发基石 AQS 深度解析:从共享状态到 FIFO 等待队列的底层逻辑
摘要:AQS(AbstractQueuedSynchronizer)是Java并发编程的核心框架,为ReentrantLock、Semaphore等同步工具提供底层支持。它通过volatile共享状态(state)和FIFO等待队列管理线程访问,采用模板方法模式让子类实现tryAcquire等钩子方法定义资源获取/释放规则。AQS包含独占和共享两种模式,基于CAS和CLH队列实现高效并发控制,避免了传统锁的性能开销。作为Java并发包的基础,AQS通过统一模板简化了同步器开发,是理解ReentrantLoc
2025-10-10 14:06:34
506
原创 深入浅出学习 synchronized 关键字底层原理
synchronized 关键字底层原理解析 摘要 本文深入解析 Java 中 synchronized 关键字的底层实现原理。首先介绍其作为内置锁的三大特性:互斥性、可见性和有序性。然后分析三种基本用法及对应的锁对象,强调锁粒度由锁对象决定。 核心部分从字节码层面揭示 synchronized 的两种实现方式:代码块使用 monitorenter/monitorexit 指令,方法使用 ACC_SYNCHRONIZED 标志。深入剖析 Monitor 机制的工作原理,包括锁获取、释放流程及内部队列结构。最
2025-10-09 17:48:41
673
原创 Java 异常体系:从 Throwable 根类到自定义异常,一篇理清所有分类与逻辑
在Java中,异常体系以`Throwable`为根类,分为两大分支:**`Error`(错误)** 和 **`Exception`(异常)**。它们的设计目的是区分“程序无法处理的严重问题”和“程序可以处理的意外情况”。
2025-10-01 20:54:05
706
原创 Java 并发锁实战手册:各类锁的特性、适用场景与选择方法论
在Java开发中,锁是处理多线程并发安全的核心工具。不同类型的锁适用于不同场景,理解它们的特性和适用场景能帮助我们写出高效且安全的并发代码。以下是Java中常见锁的分类及实际开发中的使用场景
2025-09-30 11:48:15
1033
原创 ArrayList 底层机制详解:动态数组的扩容、增删与源码剖析
要理解 `ArrayList` 的底层原理,我们可以从 Java 源码的核心实现入手。`ArrayList` 本质上是**动态数组**的实现,它通过对底层数组进行扩容和缩容操作,实现了大小可变的集合功能。以下结合 JDK 源码(基于 JDK 8)详细解析
2025-09-29 10:29:51
780
原创 从原理到落地!Java 开发必备的 5 种 ID 生成方案
本文系统介绍 Java 开发中五种核心 ID 生成方案,包括数据库自增 ID、UUID、雪花算法、Redis 自增 ID 及数据库分段 ID。内容涵盖各方案的原理、优劣势分析、Spring Boot 实战实现及适用场景,助力开发者根据场景选择合适方案。
2025-09-28 20:43:59
719
原创 Swagger 3.0 + Knife4j 入门到实战:Spring Boot API 文档搭建、注解详解与生产环境配置
本文介绍 Swagger 3.0 与 Knife4j 的入门知识。文档详解常用注解(如 @Tag、@Operation、@Schema 等),提供实体类与控制器示例,还涵盖 API 分组、全局参数配置,以及生产环境关闭 Swagger 的方法,同时列举常见问题及解决办法与学习资源。
2025-09-28 18:04:16
1288
原创 Java 日志框架核心:门面 + 实现选型逻辑、Lombok 误区解析与日志用法
在Java开发中,日志是定位问题、监控系统运行状态的核心工具。Java生态中的日志组件并非单一框架,而是分为**日志实现框架**(负责实际日志输出)和**日志门面框架**(提供统一接口解耦)两类。掌握两类框架的特点、搭配方式及实用工具(如Lombok)的使用,是规范日志开发的关键。本文将从基础概念到实际应用,系统梳理Java日志相关知识。
2025-09-26 21:50:04
1262
原创 SpringBoot+QQ 邮箱邮件开发指南:环境配置、功能实现、异常处理一站式搞定
本文详细讲解 SpringBoot 整合 QQ 邮箱发送邮件的完整流程。**首先**说明 QQ 邮箱 SMTP 服务开启步骤与关键参数,进行项目搭建和参数配置;**其次**分别介绍了实现纯文本邮件、HTML 格式邮件、带附件邮件的功能;**之后**还演示用 Thymeleaf 模板发送动态邮件;**最后**,提供实际开发优化方案,以及常见问题排查方法,所有代码可直接复用,希望这这篇文章可以帮助到您。
2025-09-25 18:04:30
1337
原创 告别字符串拼接繁琐!Java String.format () 实用指南
摘要:Java的String.format()方法用于创建格式化字符串,通过格式说明符(如%s、%d)将参数插入模板,实现精确控制输出格式。它能简化多变量拼接,支持数字精度、进制转换和日期格式化,提升代码可读性。基本语法为String.format(String format, Object... args),支持宽度、对齐等高级格式设置,适用于日志、报表等需要严格格式控制的场景。(150字)
2025-09-25 17:37:06
388
原创 MySQL 并发事务解决方案:4 个隔离级别 + 底层技术,一篇理清核心逻辑
本文聚焦 MySQL 事务隔离级别,先剖析并发事务问题的核心根源 —— 事务原子性、一致性需求与并发效率的矛盾,进而详解脏读(读未提交数据)、不可重复读(同一事务读同数据结果不同)、幻读(同一事务读同范围行数不同)三类典型问题及场景。随后介绍四个隔离级别,阐述底层实现技术:MVCC 支撑读已提交和可重复读,锁机制(行锁、间隙锁等)实现串行化。最后对比不可重复读与幻读的差异,为理解隔离级别应用提供清晰指引。
2025-09-24 23:38:19
940
原创 Java 开发必懂:过滤器、拦截器、AOP 怎么分?怎么选?
本文详解 Java Web 与 Spring 中的过滤器、拦截器和 AOP 三大功能增强技术。文中对比三者规范、范围、执行时机等差异,给出一些选择的建议,三者均实现业务与非业务代码解耦,按需选用即可。
2025-09-24 23:29:09
2513
原创 Docker Compose 从入门到实战:Java 开发者必备的多容器编排指南
本文是一篇面向开发者的 Docker Compose 全面学习指南,涵盖从基础到实战的核心内容。首先介绍 Docker Compose 的定义,通过docker-compose.yml解决多服务依赖管理问题,之后以 Spring Boot+MySQL 为例,编写Dockerfile ,其中还包含多环境配置、.env 变量分离、资源限制等进阶技巧,和常见问题排查方案,可助力开发者快速掌握 Docker Compose 并应用于实际开发。
2025-09-23 14:38:17
1073
原创 MinIO 控制台功能缺失?mc 客户端 + 旧版镜像,轻松找回权限 / 用户管理
摘要: MinIO社区版在2023年下半年移除了Web控制台的用户管理等功能,仅保留对象浏览界面。本文提供两种解决方案: 使用mc命令行工具:通过安装mc客户端,实现用户、策略及存储桶管理,弥补Web界面功能缺失。 降级安装旧版镜像(推荐):拉取2023年中期前的版本(如RELEASE.2023-10-07),恢复完整控制台功能,需注意数据卷冲突问题,建议更换映射路径。两种方法均详细说明操作步骤,帮助用户灵活应对权限管理需求。
2025-09-23 11:14:04
1252
原创 Dockerfile 学习指南:从零开始,教你用几行代码定制专属镜像
Dockerfile 从零开始学习指南 摘要:本指南系统讲解 Dockerfile 核心知识,从基础概念到实战应用,帮助开发者掌握镜像定制能力。内容涵盖 Dockerfile 定义与作用、Nginx 镜像定制实战、上下文路径解析等基础要点,深入剖析 FROM、RUN、COPY 等核心指令的用法与区别,并通过 Node.js 应用案例串联实战技巧。特别针对镜像优化、缓存机制等高级话题提供实用建议,最后总结常见问题与解决方案,助力开发者快速上手 Docker 镜像构建,提升开发部署效率。
2025-09-22 23:27:59
1081
原创 Java 开发者必看:jjwt 与 Auth0 java-jwt 怎么选?API 差异 + 场景适配指南
摘要:jjwt和java-jwt是Java中处理JWT的两个主流库,功能类似但API设计不同。jjwt采用"设置式"风格,通过Jwts.builder()创建令牌,setXxx()方法设置声明,signWith()签名;解析时使用parserBuilder()并验证签名。java-jwt(Auth0)则通过JWT.create()生成令牌,withXxx()设置声明,sign()签名;解析时需JWT.require()指定算法。两者都支持标准声明和自定义声明,但方法命名和参数传递方式存在
2025-09-22 14:17:24
1118
原创 深入浅出 JWT:认证原理与实战指南
JWT 认证原理与实现指南 摘要:本文全面解析 JWT(JSON Web Token)技术,涵盖其结构组成、认证流程及具体实现方法。JWT 由 Header(算法/类型)、Payload(用户数据)和 Signature(防篡改签名)三部分组成,具备无状态、安全可靠的特性,广泛应用于用户认证和 API 授权场景。文章详细阐述了 JWT 认证的完整流程:用户登录→服务端签发→客户端存储→请求携带→服务端验证,并提供了完整的 Java 实现代码示例,包括依赖引入、令牌生成/解析方法及可直接使用的工具类。通过示例
2025-09-19 17:24:32
938
原创 Java前后端正则表达式相关内容
正则表达式是字符串处理的重要工具,Java和JavaScript中都支持正则表达式操作。本文介绍了正则表达式的基本语法,包括字符匹配、数量词、边界匹配和分组等核心概念。Java后端通过Pattern和Matcher类实现字符串匹配、查找和替换,JavaScript前端则通过test()、match()和replace()等方法实现类似功能。文中提供了验证邮箱、提取数字和替换字符串等常见场景的代码示例,帮助开发者快速掌握正则表达式在前后端开发中的应用。
2025-09-18 13:49:42
998
原创 记录RabbitMQ无法启动的相关问题
摘要:本文记录了RabbitMQ安装和启动过程中的常见问题及解决方法。主要涉及服务无法启动、网页无法访问、服务注册失败等问题。关键解决步骤包括:检查Erlang与RabbitMQ版本匹配、彻底卸载旧版本(需删除注册表项HKEY_LOCAL_MACHINE/SOFTWARE/Ericsson/Erlang)、正确配置环境变量(ERLANG_HOME和Path)、手动注册服务(rabbitmq-service install)。特别强调安装路径应为英文无空格,且必须清除旧版本注册表残留,否则会导致新装服务无法正
2025-09-17 21:15:45
671
原创 一文搞定 RabbitMQ:安装配置、消息模型与可靠性保障实践
高级特性中,发送者可靠性通过重连策略和确认机制保障;MQ 可靠性依赖数据持久化(交换机、队列、消息均持久化)和 Lazy Queue(消息直接存磁盘);消费者通过确认机制(ack/nack/reject)、重试机制及幂等性处理(唯一 ID 或业务判断)确保消息正确处理。此外,可通过死信交换机或延迟插件实现延迟消息功能。
2025-09-16 14:56:02
903
原创 Jackson 在 SpringBoot 环境下的使用指南
Jackson 在 SpringBoot 中的使用指南 摘要:Jackson 是 SpringBoot 默认的 JSON 处理框架,实现 Java 对象与 JSON 的相互转换。SpringBoot 自动配置了核心组件,开发时只需引入 spring-boot-starter-web 即可使用。本文介绍:1)环境搭建(核心依赖与扩展依赖);2)核心概念(序列化/反序列化);3)实际应用(通过 ObjectMapper 和 @RestController 自动转换)。重点演示了实体类定义、接口自动转换及常见注解
2025-09-04 11:44:34
1331
2
原创 Spring Cloud Gateway 全解析:路由配置、断言规则与过滤器实战指南
Spring Cloud Gateway 路由配置与实践 本文介绍Spring Cloud Gateway的核心配置与路由功能实现。首先说明网关模块创建步骤,包括依赖引入(gateway、nacos服务发现、负载均衡)和基础配置(端口、服务注册)。详细解析12种路由断言规则(如时间区间、请求头、Cookie等)的参数配置与匹配逻辑,并提供具体示例。重点讲解过滤器机制,区分路由过滤器与全局过滤器的应用场景,包括内置过滤器(AddRequestHeader、RewritePath等)和自定义过滤器实现方法。通过
2025-09-03 10:03:21
1127
原创 FastJson 完全学习指南(初学者从零入门)
本文是FastJson的入门学习指南,主要内容包括: JSON基础:介绍JSON格式特点、键值对规则、数组和对象格式,以及嵌套结构的访问方式。 FastJson简介:说明FastJson是阿里巴巴开源的高性能JSON解析库,具有速度快、功能全、使用简单等优势,并介绍如何引入依赖。 核心API: 序列化:将Java对象转换为JSON字符串,演示对象、List和Map的序列化方法 反序列化:将JSON字符串转回Java对象,展示基本对象转换方法 特点:强调FastJson的性能优势、简洁API和广泛兼容性,适合
2025-09-02 14:15:17
693
原创 Sentinel学习笔记分享
Sentinel是一个服务保护框架,主要负责资源调用时的规则检查。它支持主流框架自动适配,提供编程式和声明式两种资源定义方式,可配置流量控制、熔断降级等规则。安装Sentinel Dashboard后,通过配置实现服务监控。Sentinel提供三种流控模式(直接、关联、链路)和多种异常处理机制,包括Web接口异常、@SentinelResource注解异常和OpenFeign远程调用异常处理。通过灵活配置规则和异常处理器,Sentinel能有效保障微服务系统的稳定性。
2025-09-01 11:49:44
427
原创 从零入门OpenFeign
本文介绍了OpenFeign的快速入门指南,包括声明式实现、第三方API调用、日志开启、超时控制、重试机制和拦截器配置等核心功能。通过代码示例展示了如何添加依赖、创建Feign客户端接口、设置超时参数、配置重试策略以及实现请求拦截器。文章还详细说明了如何通过注解驱动实现远程调用,并提供了日志级别和拦截器的具体配置方法,帮助开发者快速掌握OpenFeign在微服务中的远程调用能力。
2025-08-27 16:29:02
347
原创 Nacos学习笔记分享
本篇文章主要介绍nacos的安装和使用,以及在多环境下的配置,帮助初学者可以快速建立起学习体系,同时也可以帮助有基础的开发者,快速回忆知识,希望本篇文章对各位有所帮助,如有问题还请各位可以指正。
2025-08-26 18:00:58
912
原创 聚簇索引、非聚簇索引,回表查询
聚簇索引决定数据物理存储顺序,叶子节点直接存储完整数据;非聚簇索引独立存储,叶子节点存聚簇键值。使用非聚簇索引查询时,若需获取未索引字段,会触发回表查询,即通过聚簇键二次查找数据,增加IO开销。合理设计覆盖索引可避免回表,提升查询性能。一个表只能有一个聚簇索引,但可建多个非聚簇索引。
2025-08-22 16:20:51
316
原创 SQL慢查询优化
摘要:MySQL慢查询优化可通过开启慢查询日志(设置阈值、记录路径),分析日志内容(使用mysqldumpslow或pt-query-digest工具),结合EXPLAIN分析执行计划(关注type、key、rows等字段),定位问题后优化SQL(如添加索引、改写语句)。主要步骤包括配置日志、分析高频/耗时SQL、检查执行计划并针对性优化,从而提升数据库性能。
2025-08-21 15:42:40
732
原创 Git从入门到实战一站搞定
本文介绍了Git版本控制系统的基础配置和常用操作,主要帮助读者可以更加深刻理解Git指令的具体操作,明白Git的操作流程,帮助初学者快速学习Git,同时也可以帮助有基础的读者迅速回忆和查找所需命令。
2025-08-19 18:37:57
725
原创 Docker学习分享
内容不是特别全面,只是我个人学习的一些分享,是根据b站尚**的速成课程整理而来,如您之前学习过,该文章或许可以帮助您快速回顾,如果您是初学者,建议您不要以我的为主,我的内容中存在诸多漏洞(当然如果您想通过我的内容,了解一些docker相关知识还是欢迎您的)
2025-07-31 15:01:10
817
java项目的环境配置,使项目可以再idea上运行
2021-11-23
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅