自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spring Bean 生命周期

自定义 destroyMethod。> 自定义 initMethod。,一步步打印生命周期日志吗?

2026-06-13 21:07:00 273

原创 SpringBoot 全局异常处理器实现

区分系统异常和业务异常,精准捕获业务报错。/*** 自定义业务异常*/异常优先级:具体异常 > 自定义异常 >Exception兜底适用范围只拦截Controller 层异常,Service/工具类主动抛异常依然会被捕获规范建议:业务场景统一抛,系统异常由全局处理器统一封装排除拦截:如需部分 Controller 不生效,可配合指定包范围。

2026-06-13 15:50:44 449 1

原创 SpringBoot 实现拦截器

实现preHandle:控制器执行之前执行,返回true放行,false拦截postHandle:控制器执行后、视图渲染前执行:请求完全结束(视图渲染完毕)后执行,多用于资源释放/*** 自定义登录拦截器// 控制器执行前 @Override public boolean preHandle(HttpServletRequest request , HttpServletResponse response , Object handler) throws Exception {

2026-06-11 22:03:43 293

原创 Spring Boot 实现过滤器(Filter)三种常用方式

/ 拦截所有请求 /* @WebFilter(filterName = "MyFilter" , urlPatterns = "/*") public class MyFilter implements Filter {// 初始化(容器启动执行一次) @Override public void init(FilterConfig filterConfig) throws ServletException {System . out . println("过滤器初始化");

2026-06-11 21:46:37 497

原创 MySQL慢SQL瓶颈定位

遵循「」四步,先分清是哪一类瓶颈。

2026-06-11 20:52:14 522

原创 MySQL 慢查询日志 核心参数详解

结合实战判断瓶颈,附解读和使用场景。

2026-06-11 20:36:53 292

原创 旁路缓存(Cache-Aside,CA)

又叫,Redis/Memcached只做辅助加速,不会自动读写DB。

2026-06-05 22:41:41 276

原创 Java 实现阻塞队列

队列满/空时线程阻塞,条件满足时唤醒ReentrantLock + Condition + 环形数组手写核心是理解原理,生产环境直接用官方实现必须用while判断队列状态,防止虚假唤醒。

2026-06-05 22:13:03 279

原创 SpringBoot 实现自定义注解

创建注解@LogRecord/*** 自定义日志注解* Target: 注解作用目标(METHOD=方法)* Retention: 注解生命周期(RUNTIME=运行时有效)*/ @Target(ElementType . METHOD) // 只作用在方法上 @Retention(RetentionPolicy . RUNTIME) // 运行时生效 @Documented // 生成文档 public @interface LogRecord {

2026-06-05 21:44:36 316

原创 Java 异常分类

Error:系统崩了,代码管不了;运行时异常:代码逻辑错了,可处理可不处理;编译时异常:外部环境问题,必须处理。

2026-06-04 23:10:55 186

原创 Arthas 最常用命令速查表

线上出问题:先dashboard看整体,再tracewatch定位具体方法代码不一致:直接jad接口慢trace不知道参数对不对watch。

2026-06-04 22:45:43 202

原创 Arthas 核心使用场景

只要你遇到下面这些情况,直接上 Arthas代码和线上不一致接口慢、方法耗时高方法不执行、不生效生产需要紧急热修复CPU/GC/线程异常Jar 包冲突、类加载问题想看实时入参、出参、异常。

2026-06-04 22:41:27 259

原创 线上频繁FullGC完整排查流程

MAT定位:支配树找到超大对象 → 查看引用链Reference Chain → 找到业务代码。,避免OOM后数据丢失。

2026-06-04 22:30:31 288

原创 Java 内存泄漏早期排查(未触发频繁Full GC前)

线程是 GC Root,线程里的引用全部泄漏线程池任务里持有大对象,且任务无限等待看趋势:老年代只涨不跌 = 泄漏抓快照:Full GC 后 jmap 抓 hprof用MAT:看 Leak Suspects查引用:静态集合、ThreadLocal、线程池、缓存看代码:谁长期持有对象不释放。

2026-06-04 22:24:34 276

原创 线上CPU 100% 全流程排查步骤

heap文件下载后用MAT/JProfiler分析:大对象、泄漏对象、不合理缓存。profiler生成火焰图:横向越长代表CPU占用越高,直接定位耗CPU方法。高频问题:死循环、无限while、大数据量循环遍历、正则回溯、频繁创建对象。记下占用CPU最高PID(假设PID=1234,Java进程)。

2026-06-04 22:15:33 289

原创 JDK 自带四大命令行工具:jstat、jstack、jmap、jhat 详解

工具核心用途最常用命令jstat看 GC、内存使用率、性能监控jstack看线程、死锁、CPU 飙高jmap导出堆快照、看对象数量jhat分析堆快照(Web 界面)jstat:监控 GC 和内存使用,不暂停应用jstack:抓线程堆栈,查死锁、CPU 高jmap:导出堆快照,查对象泄漏jhat:简单分析堆快照(推荐用 MAT 替代)这四个工具是 Java 线上问题排查的基础必备技能,记住常用命令就能解决 80% 的 JVM 问题。

2026-06-04 22:02:32 547

原创 分布式场景下接口幂等性保证方案

幂等性 = 一次请求和多次请求结果一致分布式下最通用方案:Token 机制最简单方案:数据库唯一索引高并发方案:Redis 分布式锁所有实现必须基于原子操作,才能保证绝对安全。

2026-06-04 15:08:27 465

原创 Redis Key过期删除策略

惰性删除:你查我,我才删。定期删除:我抽空,随机删。内存淘汰:内存满了,强制删。Redis 过期清理 =惰性删除 + 定期删除内存满了兜底 =8 种内存淘汰策略(缓存专用)

2026-06-03 21:56:36 169

原创 ThreadLocal 核心原理

每个 Thread 线程对象内部,都维护了一个自己的 ThreadLocalMap;ThreadLocal 本身不存数据,只是作为操作这个 Map 的钥匙(key),数据存在线程自己的 Map 里。本质:数据存在线程自己的中,ThreadLocal 只是操作入口原理:线程隔离 → 每个线程独享变量副本避坑必须调用remove(),防止长生命周期线程内存泄漏。

2026-06-03 21:46:50 114

原创 AQS底层原理

全称:Compare And Swap(比较并交换)原子性修改 state,不加锁也能保证线程安全原理:先比较内存值是否为预期值,是就更新,不是就失败重试AQS 使用 volatile state 表示资源状态,用 CLH 双向队列管理抢锁失败的线程,通过 CAS 无锁操作 + LockSupport 阻塞/唤醒,实现了一套高可用的线程同步框架。核心三要素(资源)、CLH 队列(排队)、(阻塞唤醒)核心流程:尝试抢锁 → 失败入队阻塞 → 释放锁唤醒队首线程设计模式。

2026-06-03 21:32:51 172

原创 SpringBoot 循环依赖解决方案

依赖场景是否报错解决方案单例+字段注入否无需处理构造器注入是@Lazy/ 字段注入多例Bean是改单例 /AOP/事务代理是开启所有场景重构代码(最优)

2026-06-03 21:23:53 401

原创 三种场景下的线程池参数配置

普通业务 → 16/32/200高并发 → 32/64/500CPU计算 → 8/8/200。

2026-06-03 19:45:32 200

原创 Java 线程池 execute() 和 submit() 对比

execute():轻量、无返回、异常直接抛 → 适合简单异步执行。submit():强大、有返回、可捕获异常 → 适合需要结果/管控的任务。简单任务用 execute,复杂任务用 submit + Future。

2026-06-03 19:29:32 349

原创 Java线程池创建、使用和关闭

启动创建一次,运行一直复用,停机优雅关闭。

2026-06-03 19:22:18 250

原创 Java线程池生命周期

状态不可逆:线程池一旦关闭,无法重新恢复为运行状态两种关闭方式区别shutdown():优雅关闭,处理完队列任务:暴力关闭,中断任务、丢弃队列任务终止条件:所有任务执行/中断完毕 + 所有工作线程销毁 → 进入TERMINATED钩子方法是线程池彻底终止前的最后一个回调方法,可用于资源释放,且不可逆优雅关闭用shutdown(),强制关闭用彻底终止的标志是TERMINATED状态,可通过等待关闭完成。

2026-06-03 19:03:21 239

原创 Java 线程生命周期

Java 线程生命周期有6种状态RUNNABLE是核心状态,包含等待CPU和正在运行BLOCKED只针对 synchronized 锁等待WAITING无限等待,限时等待线程终止后不可重启。

2026-06-03 18:53:17 277

原创 Arthas 线上问题排查实战:CPU过高、频繁GC

CPU高:用threadtrace定位耗CPU线程与慢方法频繁GC:用dashboardgcheapdump定位内存问题Arthas 全程无侵入、不重启、线上直接用。

2026-06-02 19:57:49 390

原创 Java 频繁GC 完整排查流程

jstat -gc确认频繁GCjmap -dump导出堆MAT分析谁占内存90% 是static集合、ThreadLocal、缓存无回收导致泄漏。

2026-06-02 19:29:47 442

原创 Java 应用 CPU 过高排查全流程

top找 Java 进程 PIDtop -H找耗 CPU 线程 TID转 16 进制定位代码行按栈特征判断是死循环/GC/锁/密集计算整个流程不重启、不影响业务、1~3 分钟定位根因。

2026-06-02 19:16:07 312

原创 生产可用的 Redis 分布式锁完整实现

生产环境必须用 Redisson,不要手写 Redis 锁原子加锁、唯一标识、Lua 解锁、看门狗续期、可重入高可用:普通业务用普通锁,核心业务用 Redlock 红锁代码可直接复制到生产环境使用,无坑、稳定可靠。

2026-06-01 23:49:24 308 4

原创 MySQL 死锁:已产生死锁的解决方法 + 永久避免方案

已产生的死锁:MySQL 自动回滚一个事务,无需手动处理查死锁原因:用根治死锁:固定访问顺序 + 加索引 + 短事务 + 代码重试兜底:业务捕获死锁异常自动重试,用户无感知。

2026-06-01 23:06:56 352

原创 Java 生产者-消费者模型详解

生产者-消费者核心是共享缓冲区 + 线程同步基础面试用,实际开发用必须处理线程安全和虚假唤醒(用while循环)三大价值:解耦、异步、限流。

2026-06-01 22:53:42 337

原创 Java线程创建方式

开发中:优先用线程池 + Runnable / Callable;学习阶段:了解 Thread 和 Runnable。实现 Runnable ❌ ✅✅✅ 普通多线程。实现 Callable ✅ ✅✅ 需要返回结果。• Java 单继承限制,无法再继承其他类。创建方式 是否有返回值 是否推荐 使用场景。不直接创建线程,而是交给线程池管理。线程池 ✅/❌ ✅✅✅✅ 企业级开发。• 适合多个线程共享同一资源。• 降低线程创建/销毁开销。

2026-06-01 22:32:20 234

原创 MySQL唯一索引能否做主键索引

没有主键时,InnoDB 会用第一个 NOT NULL 的唯一索引当作主键;但它仍然是唯一索引,不是 PRIMARY KEY。✅ 可以——在没有显式主键的情况下,InnoDB 会优先选择第一个 NOT NULL 的唯一索引作为“聚簇索引(主键)”。❌ 但不能直接把一个普通唯一索引“变成”主键,需要符合规则。📌 只有 NOT NULL 的唯一索引才可能成为主键。👉 它只是唯一索引,不是 PRIMARY KEY。• 等价于主键(但不叫 PRIMARY KEY)• 主键更新成本高(InnoDB 会移动行)

2026-06-01 20:15:05 399

原创 @Transactional失效场景

Transactional 失效主要是因为 Spring 事务基于 AOP 动态代理,常见场景包括:同类方法调用、private/final 方法、异常被捕获、异常类型不匹配、传播行为错误、数据库不支持事务、多线程调用以及 Bean 未被 Spring 管理。✅ 3️⃣ 方法是 final / static(❌)✅ 2️⃣ 方法是 private(❌ 直接失效)三、一张表彻底记住(面试救命表 ⭐⭐⭐⭐⭐)一、一句话结论(面试开场必说 ⭐⭐⭐⭐⭐)✅ 1️⃣ 同类方法调用(最常见 ❌)

2026-05-30 22:49:13 266

原创 MySQL 索引失效 12 大场景

不计算、不函数、不隐式转换、最左前缀不乱写,99% 的索引都不会失效。

2026-05-27 23:03:13 403

原创 MySQL索引设计核心注意事项

最左前缀是联合索引的灵魂等值在前,范围在后索引列不计算、不函数、不隐式转换单表索引不超过5个优先覆盖索引,避免回表。

2026-05-27 22:54:31 350

原创 MySQL索引下推

索引下推是 MySQL 5.6 引入的优化,在使用二级索引时,将 WHERE 条件中可由索引过滤的部分下推到存储引擎层执行,从而减少回表次数,提高查询性能。索引下推(Index Condition Pushdown,简称 ICP) 是 MySQL 的一种查询优化机制,目的是 减少回表次数,提高查询性能。索引下推(ICP)是指在存储引擎层,利用索引中的字段提前过滤数据,减少回表次数。✅ 从 Server 层过滤 → 提前到 存储引擎层过滤。三、开启索引下推后发生了什么?能用索引过滤的,就别回表再过滤。

2026-05-27 22:41:01 267

原创 MySQL索引类型

MySQL 默认使用 B+Tree 索引,InnoDB 中主键是聚簇索引,普通索引是非聚簇索引;常见类型包括普通索引、唯一索引、主键索引、组合索引和全文索引。MySQL 中常见的索引类型可以从多个角度划分,面试和实战中常考的是 按数据结构分类 和 按功能/逻辑分类。B+Tree 索引 MySQL 默认索引结构,InnoDB 主要使用 等值查询、范围查询、排序、分组。2️⃣ 唯一索引(UNIQUE INDEX)3️⃣ 主键索引(PRIMARY KEY)4️⃣ 组合索引(复合索引 / 联合索引)

2026-05-27 22:33:35 345

原创 SpringBoot 自动装配原理

总开关配置来源:固定文件里的自动配置类按需加载条件注解控制配置绑定最终效果:引入依赖 → 自动配置 → 直接使用。

2026-05-27 22:14:23 769

一篇文章搞定!Anaconda超详细安装教程(Windows/macOS/Linux)

超详细Anaconda全平台安装指南!本文手把手教你Windows/macOS/Linux系统下的最新版Anaconda安装配置,涵盖图形化与命令行两种方式。包含避坑指南、环境变量设置、PATH错误修复及常见问题解决方案。额外赠送Jupyter Notebook优化、VS Code配置技巧及conda换源加速教程,助你一键搭建Python数据科学开发环境!附清华大学镜像地址与环境管理速查表,Python初学者必备工具包安装秘籍。

2025-06-04

封装高复用Java线程池工具类

封装高复用Java线程池工具类,详解参数模板、异常处理与优雅关闭,并提供完整代码,告别重复配置与资源泄漏。

2025-05-27

空空如也

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

TA关注的人

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