自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 CompletableFuture 实战模板(超时、组合、异常链处理)

写统一线程池每段链路加超时异常统一兜底聚合前后都可回退只要把这四件事做对,你的异步代码会稳很多。

2026-04-04 13:38:51 466

原创 Java SPI 实战:ServiceLoader 的正确打开方式(含类加载器坑)

很轻,但坑不少。少量可插拔实现 + 简单配置。只要把注册文件、类加载器和实现选择这三件事做好,SPI 就能很稳定地跑起来。

2026-04-04 13:32:09 319

原创 RabbitMQ 生产端可靠投递(confirm、return、重试)

confirm 保证到 Brokerreturn 保证到 Queue失败可重试、可补偿、可追踪做到这些,消息才真的“可靠”。

2026-04-02 11:24:04 453

原创 RabbitMQ 消费端幂等实战(重复消息、去重、重放怎么处理)

幂等不是让系统“完全不重复”,而是让重复“变得无害”。消息有唯一标识去重有记录业务可重放重复消息就不再是线上事故,而是可控事件。

2026-04-02 11:22:50 427

原创 String.intern() 到底干了什么

intern 返回字符串池里的引用JDK 6 会复制字符串到池,JDK 7+ 只是记录引用用好了能省内存、做快速比较用不好(取值种类太多)反而浪费内存大多数业务代码里其实不太需要自己调用 intern,但如果面试问到,知道原理比背答案有用。

2026-04-01 11:35:43 432

原创 try-with-resources 细节

细节说明close() 异常会被 suppress用拿多资源关闭顺序先声明的后关变量必须直接声明编译器需要catch/finally 还能加不冲突不会漏 close总会执行用 try-with-resources 能少写很多 finally,也更安全,至少不用担心资源泄漏。

2026-04-01 11:32:42 364

原创 Java Optional 那些被忽略的用法

方法用途容易被忽略程度orElseGet延迟计算默认值⭐⭐⭐filter过滤不要的值⭐⭐⭐flatMap处理列表/二次转换⭐⭐⭐⭐空时抛明确异常⭐⭐⭐兼顾有无两种情况⭐⭐用好 Optional 能让代码整洁很多,至少不用写一堆!= null的判断。

2026-03-31 18:00:30 452

原创 MySQL 复合索引怎么设计?从业务 SQL 反推索引顺序

复合索引设计不是背口诀,而是把业务查询路径“翻译”成 B+Tree 顺序。先拿慢 SQL,再反推索引;先服务高频场景,再追求理论完美。

2026-03-30 11:13:18 678

原创 MySQL 深分页为什么慢?从 `LIMIT 100000,20` 到游标分页的实战改造

深分页慢的本质是“跳过成本太高”。把换成游标分页,通常能稳定把大偏移分页从“高风险慢查询”变成“可控常规查询”。列表越大,越要尽早改游标分页。

2026-03-30 11:10:54 277

原创 为什么加了索引还慢?MySQL 索引失效 12 个排查点

这个索引有没有被用到用到后扫描行是不是还很大回表和排序是不是把收益吃掉了你把这三件事盯住,MySQL 慢查询会少掉一大半。

2026-03-29 22:28:23 631

原创 Redis 删除缓存失败怎么办?重试、死信、补偿的工程化方案

删除缓存失败”不是小概率边角料,它是缓存一致性的主战场。主链路快:写库后删缓存失败可恢复:异步重试极端可兜底:死信补偿整体可观测:指标和告警把这四件事做到位,你的缓存一致性就不是“玄学”,而是工程能力。

2026-03-28 14:48:50 368

原创 Redis 延迟双删真的可靠吗?缓存一致性 8 种方案对比

延迟双删不是“神技”,但它是一个非常实用的工程工具。把它当作“基础动作”再配一个“异步重试删除”的兜底用监控把一致性问题可视化这样你会得到一个既不重、又不脆的缓存一致性方案。真正靠谱的系统,从来不是靠某一个技巧,而是靠“一组互相兜底的机制”。

2026-03-28 11:03:07 617

原创 如何使用 Redis实现一个简易消息队列?

Redis 也能做消息队列?没错,RabbitMQ、Kafka 太重的时候,可以考虑用 Redis 临时顶一下。

2026-03-27 14:51:29 520

原创 ThreadLocal 详解

每个线程独立副本,互不干扰常用场景:用户信息传递、数据库连接、链路追踪用完记得 remove,防止内存泄漏。

2026-03-26 22:03:12 261

原创 Java 并发中的原子类

类用途整数原子操作AtomicLong长整数原子操作布尔原子操作对象引用原子操作整数数组原子操作LongAdder高并发累加,比 AtomicLong 性能更好需要保证多线程安全地修改一个值时简单计数、状态标记等场景比 synchronized 性能更好。

2026-03-21 11:02:19 579

原创 Dubbo 之 “最速传说”

Dubbo 是一款 RPC 框架,用来解决微服务之间调用的问题。举个例子:项目里有订单服务、用户服务,分别部署在不同机器上。订单服务想获取某个用户的信息,怎么办?写 HTTP 请求?拼接 URL?解析返回的 JSON?太麻烦了。// 这行代码实际上是远程调用暴露服务注入远程服务支持超时、重试、负载均衡、版本控制用 Nacos 或 Zookeeper 做注册中心Dubbo 上手很简单,核心就是两个注解搞定远程调用。

2026-03-20 22:10:12 416

原创 Java 26 新特性

类别特性语言原始类型模式匹配(预览)并发结构化并发(预览)、虚拟线程优化网络HTTP/3 支持安全PEM 编码(预览)、HPKE库GCG1 吞吐量优化、AOT 任意 GC。

2026-03-19 15:45:22 570

原创 kafka + springboot快速入门

Docker一键搭建 Kafka 环境生产者通过 KafkaTemplate 发送消息消费者通过 @KafkaListener 监听消息序列化支持 String 和 JSON可靠投递生产者 acks=all + 消费者手动提交。

2026-03-18 12:38:01 534

原创 Spring Boot 自动配置原理深度解析

/ 配置类名称,用于排除// 排除的配置类名称// 配置类搜索路径类型命名规范示例官方 Starter第三方 Startermyapp:@Autowired// 1. 配置属性类(最高优先级)// application.yml 中配置// 2. @Bean 定义@Bean// 3. 自动配置默认值// application.yml 未配置时使用Spring Boot 自动配置是其核心优势,理解其原理对面试和开发都非常重要。组合了三个注解自动配置。

2026-03-17 13:02:22 999

原创 Spring 事务原理深度解析

Atomic(原子性):一个事务中的所有操作要么全部成功,要么全部失败回滚Consistency(一致性):事务执行前后,数据库状态保持一致Isolation(隔离性):并发事务之间相互隔离,不互相干扰Durability(持久性):事务提交后,其结果永久保存在数据库中BEGIN;COMMIT;Spring 事务是 Spring Framework 的核心功能之一,理解其原理对开发高质量应用至关重要。传播行为决定了事务方法之间的协作方式,REQUIRED是最常用的。

2026-03-16 20:59:12 684

原创 手把手带你解读 Dockerfile - 最快上手方法

FROM - 从哪开始COPY - 放哪文件RUN - 做什么操作EXPOSE - 端口暴露CMD - 启动什么看懂这 5 个,基本就能读懂大多数 Dockerfile 了。

2026-03-12 16:54:01 519

原创 Vue 生命周期完全指南

created:最适合发起初始请求的时机mounted:需要操作 DOM 时的首选:清理定时器、事件监听、取消请求keep-alive:使用 activated/deactivated 管理缓存组件在正确的时机做正确的事避免内存泄漏优化性能解决奇怪的问题。

2026-03-10 21:59:38 658

原创 Java并发利器?虚拟线程深入解读

特性说明引入版本Java 21 (预览版 Java 19/20)创建方式适用场景I/O 密集型任务(HTTP、数据库、文件等)不适用场景CPU 密集型任务、需要 ThreadLocal 的场景内存模型栈在堆内,动态扩展阻塞处理自动 yield 释放载体线程调度器虚拟线程是 Java 继泛型、Lambda 之后最重要的特性。它让 Java 具备了"百万并发"的能力,是构建高并发系统的利器。掌握虚拟线程,将成为 Java 开发者的必备技能。

2026-03-09 21:50:53 576

原创 RabbitMQ 的 死信队列、延迟队列、消息可靠、幂等、堆积都是啥?

死信 = 无法被正常消费的消息触发条件:1. 消息被拒绝(reject/nack),且不重新入队2. 消息过期(TTL 到期)3. 队列达到最大长度fill:#333;important;important;fill:none;color:#333;color:#333;important;fill:none;fill:#333;height:1em;死信流程正常流程拒绝/过期/超长生产者正常队列消费者死信交换机死信队列死信消费者环节方案生产端生产者确认 + 消息持久化。

2026-02-25 23:02:42 1009

原创 Java 线程池详解

fill:#333;important;important;fill:none;color:#333;color:#333;important;fill:none;fill:#333;height:1em;线程池核心参数配置队列选择拒绝策略4种策略监控与调优合理配置避免 OOM优雅关闭防止任务丢失要点说明参数配置根据任务类型选择 core/max/queue队列选择优先使用有界队列拒绝策略根据业务选择合适的策略监控定期监控队列大小、活跃线程数关闭。

2026-02-24 15:50:59 1280

原创 带你一篇文章搞懂 TCP 三次握手与四次挥手!!!

TCP(Transmission Control Protocol):传输控制协议简单理解:TCP 就像打电话,双方需要确认彼此都能听得到,才能开始聊天fill:#333;important;important;fill:none;color:#333;color:#333;important;fill:none;fill:#333;height:1em;UDP(发短信)无需连接(直接发送)不可靠(发出去就不管了)速度快(不需要确认)TCP(打电话)面向连接(先拨号建立连接)

2026-02-20 13:52:15 845

原创 Redis 是如何实现与数据库的一致性呢?

缓存一致性核心原则:1. 写操作:先写数据库,再删缓存2. 删除缓存失败:使用延迟双删兜底3. 并发场景:使用分布式锁保证原子性4. 大型系统:使用 Canal 订阅 Binlog 异步同步记住:缓存是用来"加速"的,不是用来"持久化"的!更新缓存的问题:│ ││ T1: 线程A 更新缓存(name=A) ││ T2: 线程B 更新缓存(name=B) ││ T3: 线程B 更新数据库(name=B) ││ T4: 线程A 更新数据库(name=A) ││ │。

2026-02-19 22:26:56 550

原创 Redis 分布式锁:从 0 到 1 完整演变

│ 分布式锁完整方案 ││ ││ 加锁: ││ │ ↓ │ ││ │ 启动看门狗线程(每10s续期) │ ││ │ ↓ │ ││ │ Hash结构存储重入次数 │ ││ ││ 解锁: ││ │ Lua脚本: │ ││ │ if 锁是当前线程 then │ ││ │ 计数-1 │ ││ │ if 计数==0 then 删除锁 │ ││ │ else 重置过期时间 │ ││ │ 停止看门狗 │ ││ │v1: setnx → 死锁。

2026-02-18 23:37:14 618

原创 ESLint 详解

提前发现问题:在编码阶段发现潜在错误统一代码风格:保证团队代码一致性自动化检查:与 CI/CD 流程集成,自动化执行高度可配置:满足不同项目需求建议在项目初期就集成 ESLint,选择合适的规则集,并在团队中达成共识。

2026-02-17 22:30:47 1321

原创 Redis 缓存穿透、击穿、雪崩解决方案

│ 缓存防护体系 ││ ││ 第一层:限流 ││ ├── 令牌桶/漏桶算法 ││ └── 防止恶意请求 ││ ││ 第二层:布隆过滤器 ││ ├── 过滤不存在的 key ││ └── 防止缓存穿透 ││ ││ 第三层:本地缓存 ││ └── 防止缓存雪崩 ││ ││ 第四层:分布式锁 ││ └── 防止缓存击穿 ││ ││ 第五层:随机过期 ││ ├── 过期时间 + 随机值 ││ └── 防止缓存雪崩 ││ ││ 第六层:熔断降级 ││ └── 兜底保护 │。

2026-02-16 13:34:53 1328

原创 MySQL 事务隔离级别

间隙锁(Gap Lock)锁定一个范围,防止其他事务在这个范围内插入数据。假设表中有数据:id = 1, 5, 10间隙锁锁定的范围:↑ ↑ ↑ ↑间隙1 间隙2 间隙3 间隙4在满足业务需求的前提下,选择并发性能最高的隔离级别。

2026-02-16 13:31:58 983

原创 一共有哪 3 类线程安全问题?

要想弄清楚有哪 3 类线程安全问题,首先需要了解什么是线程安全,线程安全经常在工作中被提到,比如:你的对象不是线程安全的,你的线程发生了安全错误,虽然线程安全经常被提到,但我们可能对线程安全并没有一个明确的定义。《Java Concurrency In Practice》的作者 Brian Goetz 对线程安全是这样理解的,当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行问题,也不需要进行额外的同步,而调用这个对象的行为都可以获得正确的结果,那这个对象便是线程安全的。

2026-02-14 12:10:57 697

原创 Redis 旁路缓存深度解析

合理设计:根据业务特点选择合适的缓存策略一致性保障:根据一致性要求选择延迟双删或 Binlog 方案容错机制:做好缓存穿透、击穿、雪崩的防护监控告警:实时监控缓存命中率、内存使用等关键指标预热与降级:系统启动时预热缓存,异常时做好降级正确使用旁路缓存,能够将系统性能提升一个数量级,是后端开发必备的核心技能。

2026-02-14 12:08:51 1228

原创 聚合:聚合查询之Bucket聚合详解

在聚合过程中,将从每个存储区范围中检查从每个文档中提取的值,并“存储”相关/匹配的文档。接着,我们在直方图内定义嵌套的度量,这个 sum 度量,它会对落入某一具体售价区间的文档中 price 字段的值进行求和。(PS:指标聚合和桶聚合很多情况下是组合在一起使用的,其实你也可以看到,桶聚合本质上是一种特殊的指标聚合,它的聚合指标就是数据的条数count)我们在具体学习时,也无需学习每一个点,基于上面图的认知,我们只需用20%的时间学习最为常用的80%功能即可,其它查查文档而已。让我们先看一个例子。

2026-02-13 12:30:27 1175

原创 如何正确关闭线程池?shutdown 和 shutdownNow 的区别?

我们主要学习如何正确关闭线程池?以及 shutdown() 与 shutdownNow() 方法的区别?首先,我们创建一个线程数固定为 10 的线程池,并且往线程池中提交 100 个任务,如代码所示。那么如果现在我们想关闭该线程池该如何做呢?本课时主要介绍 5 种在 ThreadPoolExecutor 中涉及关闭线程池的方法,如下所示。下面我们就对这些方法逐一展开。

2026-02-13 12:27:24 1088

原创 前端文件上传实战

功能Vue 原生React 原生单文件上传el-uploadUpload多文件上传拖拽上传进度监听需二次封装onProgress文件限制手动校验手动校验手动上传控制时机控制时机上传样式自己写 CSS开箱即用自己写 CSS开箱即用总的来说,如果你的项目已经用了 Element Plus 或 Ant Design,直接用它们的 Upload 组件是最省事的。如果你是原生开发,那就得自己多写点代码,但胜在依赖少、灵活性高。

2026-02-12 13:29:11 873

原创 02 线程池掌故:管理并发的秘籍

new ArrayBlockingQueue<>(100), // 队列new MyThreadFactory(), // 线程工厂new DiscardPolicy() // 拒绝策略资源控制:防止无限制创建线程性能提升:复用线程,减少创建销毁开销任务管理:队列缓冲、拒绝策略阿里巴巴规范建议:不要使用 JDK 默认线程池创建方式,应使用手动配置,避免 OOM 风险。

2026-02-11 12:31:04 867

原创 双指针:化繁为简的算法利刃

双指针就像两个人从两端向中间走,或者一前一后向前走。两个指针的作用:- 一个指针遍历已处理的数据- 另一个指针寻找目标位置好处:避免嵌套循环,将 O(n²) 降为 O(n)模式说明适用场景左右指针left 从左开始,right 从右开始排序数组、容器问题快慢指针fast 走得快,slow 走得慢链表、原地操作题目双指针类型核心思路盛最多水左右指针从两端开始,移动较短的指针三数之和左右指针 + 哈希固定一个,双指针找另外两个接雨水左右指针哪边矮就算哪边的雨水。

2026-02-11 12:28:08 497

原创 01 多线程初阶:解谜多线程世界

线程是提升服务器资源利用率的关键工具。线程的创建方式(RunnableCallable线程的参数(优先级、名称、守护线程)线程的停止方法(interrupt线程的生命周期和状态并发安全问题的产生原因(竞态条件、临界区)下一节,我们将学习如何合理、高效、安全地使用线程。

2026-02-10 13:53:50 738

原创 Arthas 线上问题诊断实战

1. 上手简单:curl 即可安装,交互式命令行2. 功能强大:覆盖诊断、监控、追踪、分析等场景3. 无侵入:无需修改代码,所见即所得4. 生产环境友好:支持认证、限流等安全措施熟练掌握 Arthas,可以快速定位和解决:- 接口响应慢- CPU 飙升- 内存泄漏- 线程阻塞- 代码逻辑问题建议将常用命令保存为脚本,遇到问题时快速执行,提高排查效率。

2026-02-10 13:51:40 899

空空如也

空空如也

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

TA关注的人

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