庞轩px
码龄2年
求更新 关注
提问 私信
  • 博客:56,348
    动态:44
    56,392
    总访问量
  • 105
    原创
  • 38
    粉丝
  • 5
    关注
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:北京市
加入CSDN时间: 2025-02-07
博客简介:

2503_90542405的博客

查看详细资料
个人成就
  • 获得1,243次点赞
  • 内容获得9次评论
  • 获得868次收藏
  • 博客总排名32,486名
  • 原力等级
    原力等级
    4
    原力分
    626
    本月获得
    0
创作历程
  • 105篇
    2026年
成就勋章
TA的专栏
  • AI学习
    11篇
  • AI理论学习
    8篇
  • AI应用实战
    3篇
  • 实习收获
    1篇
  • 通用工具类
    1篇
  • 致远互联
    1篇
  • 项目实战
    11篇
  • 工具封装-项目通用
    1篇
  • 秒杀系统-随时在线课堂
    6篇
  • 权限系统-启航学习俱乐部
    4篇
  • 计算机基础
    3篇
  • 后端技术
    60篇
  • Java基础
    7篇
  • JVM
    15篇
  • 并发编程
    8篇
  • MySQL
    8篇
  • Redis
    7篇
  • Spring
    8篇
  • 消息队列
    2篇
  • 数据结构与算法
    3篇
  • 辅助工具
    1篇
  • 面试总结
    9篇

TA关注的专栏 0

TA关注的收藏夹 0

TA关注的社区 0

TA参与的活动 11

兴趣领域 设置
  • 编程语言
    java
  • 大数据
    redis
  • 后端
    mysqlspringgolangspring boot架构分布式
  • 搜索
    elasticsearch
创作活动更多

丰厚奖励!CSDN代码标注专家 招募计划正式启动!

幻觉代码、虚假技术方案、看似正确实则错误的博文正在侵蚀技术社区的信任基础。 CSDN作为中国知名开发者社区,有责任为真实、可靠的技术内容设立“护栏”。 我们邀请你——具备真实项目经验的技术专家,参与技术博文与代码的标注。

去参加
  • 最近
  • 文章
  • 专栏
  • 代码仓
  • 资源
  • 收藏
  • 关注/订阅/互动
更多
  • 最近

  • 文章

  • 专栏

  • 代码仓

  • 资源

  • 收藏

  • 关注/订阅/互动

  • 社区

  • 帖子

  • 问答

  • 课程

  • 视频

搜索 取消

第二篇:RocketMQ事务消息——分布式事务的最终一致性方案

Producer的回查逻辑:根据消息中的业务参数(如商品ID、用户ID),查询本地事务的执行状态——比如检查Redis中的扣减流水标记是否存在、MySQL中的扣减流水记录状态是否为"已确认"。这样做的结果是——要么本地事务还没执行(半消息已发送但回滚),要么本地事务已执行(半消息已发送且提交)。RocketMQ的处理方式:Broker发现半消息超过一定时间(默认6秒)未被确认,主动向Producer发起回查请求——“你之前发给我的那条半消息,本地事务到底成功了没?半消息的本质是一条带"事务标记"的消息。
原创
博文更新于 2026.05.14 ·
469 阅读 ·
10 点赞 ·
0 评论 ·
9 收藏

第一篇:RocketMQ架构与核心概念——一条消息从生产到消费的完整旅程

在秒杀系统专栏中,我多次提到"用RocketMQ做异步削峰"“用事务消息保证Redis扣库存和发消息的原子性”。但RocketMQ本身的工作原理,一直没有展开讲过。面试中,消息队列是分布式系统的核心考点:“RocketMQ的NameServer、Broker、Topic、Consumer Group分别做什么?“一条消息从生产到消费,经历了哪些步骤?“RocketMQ和Kafka、RabbitMQ有什么区别?为什么你的秒杀项目选RocketMQ?
原创
博文更新于 2026.05.13 ·
462 阅读 ·
7 点赞 ·
0 评论 ·
11 收藏

第七篇:Spring扩展点——如何优雅地介入Bean的创建流程

本文深入解析Spring框架的四个核心扩展点:BeanFactoryPostProcessor、BeanPostProcessor、InitializingBean/@PostConstruct和Aware接口。这些扩展点允许开发者在Bean生命周期的不同阶段插入自定义逻辑。文章通过典型应用场景和代码示例,展示了如何利用这些扩展点实现属性覆盖、AOP代理、日志注入等功能,帮助开发者深入理解Spring的扩展机制。
原创
博文更新于 2026.05.13 ·
562 阅读 ·
16 点赞 ·
0 评论 ·
6 收藏

第六篇:Spring用了哪些设计模式?——从单例到代理,拆解框架中的经典设计

本文从设计模式视角解析Spring框架的核心实现机制,重点剖析了单例模式、工厂模式、代理模式、模板方法模式等六大设计模式在Spring中的应用。单例模式通过容器管理保证Bean唯一性;BeanFactory作为IoC容器管理全局Bean生命周期,而FactoryBean封装单个复杂Bean的创建逻辑;AOP基于动态代理实现,区分JDK动态代理和CGLIB两种方式;JdbcTemplate采用模板方法模式封装JDBC固定流程。这些设计模式协同工作,共同构成了Spring框架的底层架构智慧
原创
博文更新于 2026.05.13 ·
540 阅读 ·
16 点赞 ·
0 评论 ·
7 收藏

第五篇:Spring事务管理——@Transactional的底层实现与失效场景

摘要 Spring事务管理通过AOP动态代理实现,核心是TransactionInterceptor在代理对象中拦截@Transactional方法,自动管理事务开启、提交和回滚。事务传播行为定义了方法调用时的事务处理方式,REQUIRED会加入现有事务,REQUIRES_NEW会创建独立事务,NESTED则使用保存点实现嵌套事务。常见的事务失效场景包括:1)同类方法自调用绕过代理;2)非public方法无法被代理;3)异常被捕获未抛出;4)数据库引擎不支持事务(如MyISAM)。理解原理可避免事务失效问题
原创
博文更新于 2026.05.13 ·
379 阅读 ·
9 点赞 ·
0 评论 ·
7 收藏

第四篇:SpringBoot自动配置——约定大于配置的底层原理

本文深入解析了SpringBoot自动配置的核心原理。传统Spring需要手动配置大量XML,而SpringBoot通过@SpringBootApplication注解实现自动配置,该注解由@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan三个核心注解组成。这种机制大幅简化了Spring应用的配置工作,开发者只需关注业务配置即可。
原创
博文更新于 2026.05.13 ·
435 阅读 ·
10 点赞 ·
0 评论 ·
13 收藏

第三篇:SpringMVC——一个HTTP请求在Spring中经历了什么?

SpringMVC采用前端控制器模式,DispatcherServlet作为统一入口。核心流程包含请求接收、Handler映射、拦截器执行、参数解析、方法调用和结果处理。HandlerMapping建立URL到Controller方法的映射,HandlerAdapter解析参数注解(如@RequestParam)。拦截器在预处理和后处理阶段介入,消息转换器处理请求/响应数据格式转换。该架构通过组件协作实现请求到响应的完整处理链路,为开发调试提供理论基础。
原创
博文更新于 2026.05.13 ·
428 阅读 ·
4 点赞 ·
0 评论 ·
11 收藏

第二篇:Spring AOP——动态代理与切面编程的底层原理

Spring AOP通过动态代理技术解决OOP难以处理的横切关注点问题(如日志、权限、事务)。它采用JDK动态代理(基于接口)或CGLIB(基于继承)在运行时生成代理对象,将横切逻辑与核心业务分离。核心概念包括:切面(Aspect)封装横切逻辑,切点(Pointcut)定义拦截规则,通知(Advice)指定增强时机,连接点(JoinPoint)表示可拦截点。Spring Boot 2.x默认使用CGLIB代理,通过切面注解实现事务管理、日志记录等通用功能,使业务代码更简洁。
原创
博文更新于 2026.05.13 ·
400 阅读 ·
7 点赞 ·
0 评论 ·
5 收藏

第一篇:Spring IoC容器——控制反转的本质与Bean的生命周期

Spring IoC核心机制解析控制反转(IoC)将对象创建权交给容器,依赖注入(DI)实现解耦,推荐构造器注入方式。容器选择上,ApplicationContext比BeanFactory功能更全面,适合实际开发场景。Bean生命周期包含实例化、属性赋值、初始化、销毁四个阶段,每个阶段都提供扩展点。循环依赖通过三级缓存解决单例Bean问题,但构造器注入导致的循环依赖无法处理。
原创
博文更新于 2026.05.13 ·
441 阅读 ·
8 点赞 ·
0 评论 ·
9 收藏

第八篇:Spring与微服务——从SpringBoot到SpringCloud的演进

本文探讨了从单体架构到微服务的演进过程,分析了Nacos、Sentinel和Gateway三大微服务核心组件的作用。Nacos作为注册中心和配置中心,解决了服务发现和配置管理问题;Sentinel通过限流、熔断和降级机制保障系统稳定性;Gateway作为统一入口,提供路由和过滤功能。文章还对比了单体与微服务的优缺点,指出微服务适合中大型系统,但初期需权衡开发效率与运维复杂度。最后强调微服务架构需要根据业务需求渐进式演进。
原创
博文更新于 2026.05.13 ·
537 阅读 ·
10 点赞 ·
1 评论 ·
13 收藏

细节补充第一篇:RocketMQ 的使用

本文深入探讨了RocketMQ在秒杀系统中的核心应用问题。首先解析了RocketMQ的三个核心组件:生产者(客户端)、Broker服务端(独立进程)和消费者(客户端)的通信机制。其次,详细说明了如何通过异步削峰将3000 QPS的请求降为800 TPS的数据库操作,关键是将同步数据库操作转为异步消息队列处理。文章掲示了流控机制的本质:并发队列数和消费线程数共同控制处理速度。最后指出TPS并非越高越好,需要根据系统瓶颈进行权衡。整套方案通过Redis挡峰值、MQ排队、消费者轻量操作实现了高效削峰填谷。
原创
博文更新于 2026.05.13 ·
383 阅读 ·
8 点赞 ·
0 评论 ·
7 收藏

第一篇:高并发处理——从订单雪崩到异步削峰

同步下单在秒杀场景必死,因为数据库写入是串行瓶颈,瞬时高并发会把连接池打满,引发雪崩异步削峰的核心是“请求先进队列,后端匀速消费”,用RocketMQ缓冲瞬时流量Redis预减库存用Lua脚本保证原子性,同时减少发给MQ的无效消息消息堆积通过消费者并发扩容 + 监控告警 + 水平扩容三管齐下消息可靠性依赖发送端回滚 + Broker持久化 + 消费端重试 + 死信队列幂等性用消息ID + Redis setIfAbsent实现,TTL覆盖重试窗口。
原创
博文更新于 2026.05.12 ·
419 阅读 ·
4 点赞 ·
0 评论 ·
6 收藏

第三篇:CPU缓存——为什么有时候改了一行代码,性能差了百倍

本文通过一个Java二维数组遍历的性能差异实验,揭示了CPU缓存机制对程序性能的关键影响。实验显示按行遍历比按列遍历快15倍,这是因为CPU按64字节的"缓存行"读取数据,按行遍历能充分利用缓存的空间局部性。文章进一步解释了多核CPU下的缓存一致性问题,介绍了MESI协议如何维护缓存同步,并分析了"伪共享"现象——当不同线程修改同一缓存行中的不同变量时,会导致性能急剧下降。最后给出了通过填充数据避免伪共享的解决方案,展示了缓存优化对并发程序性能的重要影响。
原创
博文更新于 2026.05.12 ·
303 阅读 ·
4 点赞 ·
0 评论 ·
3 收藏

第一篇:只是想说清楚每行代码是由谁执行的,怎样执行的

本文通过一个简单的Java数据库操作示例,深入剖析了代码执行的完整过程。文章首先指出Java代码需要经过JVM编译和解释才能被CPU执行,强调CPU是唯一能执行指令的硬件。然后详细分解了数据库插入操作的四个阶段:CPU处理业务逻辑、发起网络IO、等待响应和恢复执行,揭示了IO密集型任务中CPU实际工作时间极短的特性。文章还解释了操作系统如何通过上下文切换实现多线程并发执行。最终得出结论:每行代码都由CPU执行,但在IO等待期间CPU会转而处理其他任务,这种机制使得计算机能够高效处理并发请求。
原创
博文更新于 2026.05.12 ·
313 阅读 ·
8 点赞 ·
0 评论 ·
5 收藏

第二篇:内存——你的变量到底存在哪

Java变量的存储位置直接影响性能。内存分为寄存器、缓存和主存,速度依次降低。栈通过指针移动管理,速度快但容量小,适合局部变量;堆需要垃圾回收,速度慢但容量大,存放对象和成员变量。字符串常量存储在常量池,复用性强。栈的快速访问得益于高缓存命中率,比堆快数十倍。理解变量生命周期和存储机制对优化代码性能至关重要,例如优先使用局部变量减少堆分配。硬件层面的缓存差异是性能差距的核心原因。
原创
博文更新于 2026.05.12 ·
419 阅读 ·
5 点赞 ·
0 评论 ·
9 收藏

Redis工具类重构——从臃肿到优雅的门面模式实践

本文复盘了一个Redis工具类从1022行"上帝类"重构为门面模式的过程。原工具类将所有Redis数据类型操作混在一起,导致维护困难、扩展性差。通过拆分为1个门面类和7个操作组件,实现了职责分离和统一入口。重构解决了API混乱、性能陷阱等问题,使代码行数减少75%,调用方式更清晰,扩展性显著提升。关键收获包括:当类职责超过3条或代码超过500行时应考虑重构;门面模式适用于需要统一入口的多类型子系统;重构要保证API兼容性。该实践为类似工具类重构提供了可复用的设计模式。
原创
博文更新于 2026.05.11 ·
424 阅读 ·
8 点赞 ·
0 评论 ·
9 收藏

第5篇:线程池核心参数与拒绝策略深度解析——线程管理的艺术

本文深入解析Java线程池的七大核心参数、工作流程及拒绝策略。线程池参数包括核心线程数、最大线程数、空闲存活时间、阻塞队列等,其设置需根据任务类型(CPU密集/I/O密集)合理计算。线程池处理任务时遵循特定流程,队列满后才会创建非核心线程。JDK提供四种拒绝策略:AbortPolicy(抛异常)、CallerRunsPolicy(调用者执行)、DiscardPolicy(静默丢弃)和DiscardOldestPolicy(丢弃最旧任务),需根据业务场景选择。文章还指出Executors工具类的潜在风险,强调
原创
博文更新于 2026.05.10 ·
578 阅读 ·
16 点赞 ·
0 评论 ·
19 收藏

第8篇:原子类与CAS底层原理——无锁并发的实现

原子类全景图│ 底层:CPU 指令 ││▼│ JVM 层:Unsafe 类 ││▼ ▼ ▼ ▼│ 自旋+CAS │ │ 自旋+CAS │ │ 自旋+CAS │ │ CAS+Cell分散││ 单个变量 │ │ 单个变量 │ │ 单个引用 │ │ 高性能累加 │核心要点回顾CAS 是一条 CPU 原子指令(),实现"比较+交换"的无锁原子操作Java 通过 Unsafe 类调用 CAS,上层封装为 AtomicInteger、AtomicReference 等原子类。
原创
博文更新于 2026.05.10 ·
638 阅读 ·
14 点赞 ·
0 评论 ·
4 收藏

第7篇:阻塞队列与生产者消费者模式——线程协作的桥梁

疑问:BlockingQueue 和普通的 Queue 到底有什么本质区别?回答:两个关键特性——“当队列空时阻塞取"和"当队列满时阻塞放”。// 普通队列:空时返回null,满时返回false// null// 阻塞队列:空时阻塞等待,满时阻塞等待bq.take();// 队列空 → 线程阻塞,直到有元素// 队列满 → 线程阻塞,直到有空位// 1. 自然顺序(实现Comparable)// 返回 1(而不是5)// 2. 自定义比较器(按任务紧急程度排序)
原创
博文更新于 2026.05.10 ·
541 阅读 ·
15 点赞 ·
0 评论 ·
11 收藏

第6篇:ConcurrentHashMap源码剖析——从JDK 7分段锁到JDK 8的CAS进化

本文深入解析了HashMap和ConcurrentHashMap的核心原理,从JDK7到JDK8的演进为主线,剖析了底层数据结构、哈希算法、扩容机制和线程安全问题。重点包括:HashMap的初始容量设计、负载因子选择、JDK8引入的红黑树优化;线程安全问题根源及解决方案;ConcurrentHashMap通过分段锁(JDK7)和CAS+synchronized(JDK8)实现线程安全。文章还对比了两者在不同版本的设计差异,并指出所有优化都是在时间、空间和并发安全之间寻找平衡点。最后提出了ABA问题、弱一致性
原创
博文更新于 2026.05.10 ·
724 阅读 ·
22 点赞 ·
0 评论 ·
11 收藏
加载更多