- 博客(216)
- 收藏
- 关注
原创 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
原创 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
原创 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
原创 Java 线程池 execute() 和 submit() 对比
execute():轻量、无返回、异常直接抛 → 适合简单异步执行。submit():强大、有返回、可捕获异常 → 适合需要结果/管控的任务。简单任务用 execute,复杂任务用 submit + Future。
2026-06-03 19:29:32
349
原创 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索引设计核心注意事项
最左前缀是联合索引的灵魂等值在前,范围在后索引列不计算、不函数、不隐式转换单表索引不超过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)
2025-06-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅