- 博客(27)
- 问答 (1)
- 收藏
- 关注
原创 CAP 与 BASE:分布式系统的两块基石
本文探讨了分布式系统设计中的CAP定理和BASE原则。CAP定理指出在分布式系统中,一致性(C)、可用性(A)和分区容错性(P)三者不可兼得,通常需要在C和A之间做出取舍。而BASE原则则提供了一种工程实践方案,通过最终一致性、软状态等概念,在保证高可用的前提下实现数据一致性。文章通过电商库存案例说明理论应用场景,并指出不同业务场景应采取不同策略:支付等核心业务适合强一致(CP),而社交功能等更适合最终一致(AP)。最后强调理解这些理论有助于在系统设计中做出合理的权衡决策。
2026-03-12 15:56:30
383
原创 synchronized 底层实现与锁升级全解析
本文深入解析Java synchronized锁的优化演进历程。从JDK1.6开始,HotSpot团队引入偏向锁、轻量级锁等中间状态,大幅降低了低竞争场景下的同步开销。文章详细剖析了锁的四种状态(无锁、偏向锁、轻量级锁、重量级锁)及其转换机制,揭示了对象头MarkWord的结构和Monitor的实现原理。同时介绍了JIT编译器的锁消除和锁粗化优化,并对比了synchronized与volatile的区别。最后指出理解锁升级机制对排查并发问题、性能调优的重要价值,建议进一步学习AQS框架以掌握完整的并发知识体
2026-03-12 15:49:35
270
原创 深入理解并落地 DDD 架构
本文探讨了领域驱动设计(DDD)的核心思想和实践方法。文章首先分析了传统三层架构的痛点(贫血模型、业务逻辑分散),然后阐述了DDD的核心概念(实体、值对象、聚合根、限界上下文)及其设计原则。通过电商订单案例,展示了DDD分层架构的具体实现,包括聚合根设计、领域事件和应用服务编排。最后指出常见陷阱(聚合过大、贫血模型等)并强调DDD的本质是建立统一语言,让代码准确映射业务。文章建议从核心模块开始试点,逐步推进DDD落地。
2026-03-11 14:42:56
939
原创 volatile 的内存语义与底层实现
本文深入解析了volatile关键字在并发编程中的核心作用与实现原理。文章从经典可见性问题案例切入,系统阐述了volatile如何通过MESI缓存一致性协议和内存屏障机制保证可见性与有序性,同时强调其不提供原子性保证的特性。通过DCL单例模式等典型场景分析,详细对比了volatile与synchronized的适用边界,指出volatile最适合"一写多读"的状态标志场景。最后强调正确理解volatile的能力边界比掌握其用法更重要,避免因误用导致隐蔽的并发问题。
2026-03-11 13:50:32
401
原创 Java 并发编程深入理解 · 理论总览篇
本文从CPU缓存一致性出发,深入解析Java并发编程的核心原理。重点剖析了JMM内存模型、happens-before规则、线程调度机制、锁优化策略、CAS无锁并发等底层机制。通过分析多核时代的"三重困境",揭示了并发问题的硬件根源,并系统阐述了如何通过JMM建立可靠的并发契约。文章还探讨了线程池设计哲学、常见并发陷阱及解决方案,为开发者构建了完整的并发知识框架。作为理论总览篇,本文为后续深入讲解volatile、synchronized、AQS等具体实现机制奠定了理论基础。
2026-03-10 14:10:25
263
原创 深入理解 Java 23 种设计模式:从入门到真正搞懂
本文为Java开发者总结了23种设计模式的实用指南,分为创建型、结构型和行为型三大类。创建型模式(单例、工厂方法、抽象工厂、建造者、原型)解决对象创建问题,结构型模式(适配器、桥接、组合等)处理对象组合方式,行为型模式(责任链、命令、状态等)关注对象间通信。文章通过真实场景代码演示每种模式的应用,强调设计模式的核心价值是"对扩展开放,对修改关闭"的开闭原则。作者指出:模式是工具而非目的,应避免过度设计;现代框架已内置多种模式;实际开发中常需组合使用模式。文末提供选用指南,建议开发者根据实
2026-03-10 14:10:00
453
原创 深入理解 RocketMQ:从“能用“到“真懂“
本文深入解析RocketMQ的设计原理与核心实现。首先从消息队列的核心价值(解耦、削峰、异步)出发,对比了RocketMQ与其他消息队列的适用场景。重点剖析了其四层架构:轻量级NameServer、核心Broker、Producer和Consumer的实现机制。详细解读了消息存储的精妙设计,包括CommitLog顺序写入、ConsumeQueue索引分离、内存映射优化等关键技术。还深入讲解了事务消息、顺序消息、延迟消息等特色功能的实现原理,以及主从复制、DLedger等高可用方案。最后总结了RocketMQ
2026-03-09 11:29:41
371
原创 SkyWalking 数据采集与传输全链路原理深度解析
SkyWalking作为微服务APM工具,通过全局TraceID串联碎片化调用链路,解决日志孤岛和性能定位难题。其架构分为采集层(JavaAgent字节码增强/非Java语言SDK)、OAP分析层(流式处理/OAL聚合规则)和存储层(推荐ES/BanyanDB)。数据传输采用gRPC协议,Agent侧通过内存队列异步缓冲,跨进程通过SW8协议头传递上下文。生产环境建议搭配Kafka防止数据丢失,高流量场景可配置采样率。整体设计在低侵入性(Java应用零代码修改)和高性能(吞吐影响约3%-5%)间取得平衡,是
2026-03-09 11:29:28
335
原创 深入理解并学会使用 Seata—— 从理论到生产级实战全解析
本文深入解析分布式事务框架Seata,涵盖AT/TCC/SAGA/XA四种模式的核心原理与实战应用。首先通过外卖订单案例说明分布式事务的必要性,随后介绍CAP/BASE理论基础和2PC协议改进。重点剖析Seata的三大核心角色(TC/TM/RM)和四种模式特点:AT模式通过undo_log实现无侵入自动回滚,TCC模式需手动实现Try-Confirm-Cancel三阶段,SAGA适合长流程事务,XA模式则提供强一致性。文章详细演示SpringCloud集成Seata AT模式的配置方法,并给出TCC模式的防
2026-03-06 11:02:51
719
原创 深入理解并学会配置 Sentinel
文章摘要:本文以电商大促故障为切入点,系统介绍Sentinel流量治理组件。首先分析雪崩效应成因,对比Sentinel与Hystrix等工具的优劣。详细讲解Sentinel核心概念(资源、规则、插槽链)及四种规则配置:流量控制(支持QPS/线程数限流)、熔断降级(三种熔断策略)、热点参数限流和系统保护规则。重点演示SpringBoot+Nacos动态配置方案,强调生产环境需避免内存态规则。最后给出8条最佳实践,包括规则持久化、阈值设定建议等。Sentinel在阿里巴巴亿级QPS场景验证,是微服务流量治理的理
2026-03-06 10:53:08
405
原创 深入理解 OAuth 2.0:从“凭什么让你访问我的数据“说起
OAuth2是一种授权框架,旨在解决第三方应用安全访问用户资源的问题,无需分享用户密码。本文详解OAuth2的核心概念、四种授权模式及安全实践。授权码模式(最安全)、隐式模式(已废弃)、客户端凭证模式(机器间通信)和密码模式(仅限遗留系统)。重点讲解了Token机制(Access Token与Refresh Token)、PKCE扩展增强公共客户端安全性,以及防范CSRF攻击的state参数和redirect_uri校验。文章还区分了OAuth2(授权)与OpenID Connect(认证)的关系,并提供了
2026-03-05 14:05:47
420
原创 微服务架构中,网关到底在做什么?
本文系统讲解了API网关在微服务架构中的核心作用。当单体应用拆分为多个微服务后,网关成为统一入口,主要解决路由转发、统一鉴权、限流熔断等共性问题。文章详细剖析了网关的六大核心功能:路由是骨架,鉴权是门卫,限流是安全阀,负载均衡是分流器,协议转换是翻译官,灰度是缓冲器。通过Spring Cloud Gateway示例展示了具体实现,并对比了主流网关方案。最后强调生产环境需网关集群部署以避免单点故障。网关本质是集中处理非业务逻辑的统一门面,让微服务专注业务实现。
2026-03-05 13:56:05
480
原创 深入理解 Java 注册中心从原理到选型,一文搞懂
本文深入探讨了微服务架构中注册中心的核心作用与实现机制。首先分析了传统硬编码服务地址的局限性,进而引入注册中心作为"服务通讯录"的解决方案,详细解析了服务注册、心跳续约、订阅通知等关键流程。文章重点对比了Eureka、Nacos、Zookeeper、Consul等主流注册中心的CAP特性和适用场景,特别指出Nacos在AP/CP模式灵活切换的优势。通过Nacos实例展示了服务注册与消费的代码实现,并深入剖析了集群架构、优雅下线等生产级考量。最后为不同技术栈提供了选型建议,强调Nacos作
2026-03-04 13:41:04
286
原创 微服务:从“大泥球“到优雅拆分的工程实践
《微服务:从单体困境到架构演进》摘要:本文剖析了电商系统从单体架构向微服务演进的必要性。当代码量激增、团队规模扩大时,单体架构面临部署风险高、技术栈固化等痛点。微服务通过拆分独立的小型服务(每个服务拥有独立数据库和明确边界)来解决这些问题,但同时也带来分布式事务、网络通信等新挑战。文章强调微服务不是银弹,初创团队应从单体开始,待业务成熟后再逐步拆分。关键建议包括:按业务能力而非CRUD拆分、优先采用异步通信、实施熔断器等容错机制。最终指出架构决策应基于实际业务规模和技术能力,而非盲目追随技术潮流。
2026-03-04 13:34:14
428
原创 深入理解 Redis:从“面试造火箭”到“项目拧螺丝”的落地全攻略
Redis 的深入理解,不在于你背了多少个配置参数,而在于你能否在合适的场景选对合适的数据结构,并预见到可能的并发风险。先学会怎么用(API),再研究为什么这么快(原理),最后通过排查线上事故(如慢查询、大 Key)来进阶。
2026-03-03 14:07:51
570
原创 告别CRUD搬砖!深入浅出MyBatis:从核心原理解析到企业级项目落地
摘要:MyBatis作为Java主流持久层框架,以半自动ORM特性平衡SQL控制权与开发效率。文章剖析其核心组件(SqlSessionFactory、SqlSession等)与动态SQL机制,对比一级/二级缓存特点,给出SpringBoot整合实践方案。特别强调MyBatis-Plus对基础CRUD的增效作用,建议复杂SQL仍用原生MyBatis实现。最后指出合理选择#{}防注入、避免N+1问题等关键注意事项,为开发者提供从原理到落地的完整指导。(149字)
2026-03-03 14:06:18
618
原创 JVM 内存结构 vs JMM 内存模型
本文区分了Java内存模型(JMM)与JVM内存结构两个概念:JVM内存结构描述运行时数据区划分,包括程序计数器、虚拟机栈、堆和方法区;而JMM规范定义多线程下共享变量的可见性和有序性规则,通过主内存/工作内存模型和happens-before原则实现。文章详细解析了JVM各内存区域的功能特点,并阐述了JMM的三大特性(可见性、原子性、有序性)及volatile关键字的作用机制,最后通过实例代码展示了两者的实际应用场景与区别。理解这两个模型是掌握Java并发编程的基础。
2026-02-28 08:49:08
756
原创 JVM 调优,到底是调什么?
内存分配合理:堆大小、新老代比例、Metaspace 上限GC 停顿可控:选对收集器,参数配合业务场景没有内存泄漏:长期运行内存稳定,OOM 原因明确线程健康:没有死锁,没有严重锁竞争JIT 充分工作:代码缓存够用,热点代码被充分编译真正好的 JVM 调优,是让你感觉不到 JVM 的存在——接口稳定、内存平稳、GC 安静。本文所有参数以 JDK 11/17 为主。不同 JDK 版本部分参数有差异,建议结合查看当前 JVM 的实际默认值。
2026-02-28 08:48:44
1065
原创 SpringBoot 启动原理深度解析
本文深入解析了SpringBoot的启动机制,从@SpringBootApplication三合一注解到SpringApplication.run()的核心流程。重点剖析了自动装配原理(通过spring.factories加载配置类+@Conditional条件筛选)、内嵌Tomcat启动过程(ServletWebServerFactory+onRefresh钩子)以及Bean初始化流程。文章揭示了SpringBoot"约定大于配置"的实现本质,包括环境准备、容器刷新等关键阶段,并解答了
2026-02-27 09:33:35
881
原创 深入理解 SpringBoot—— 从“为什么“到“怎么用“
SpringBoot 是基于 Spring 框架的快速开发脚手架,通过约定优于配置(Convention over Configuration)的理念,大幅减少项目搭建和配置的工作量,让 Spring 应用能够"直接运行"。误区真相SpringBoot 是 Spring 的替代品❌ 它是 Spring 的上层封装,底层仍是 SpringSpringBoot 只能做 Web 项目❌ 批处理、定时任务、CLI 工具都可以用用了 SpringBoot 就不需要理解 Spring。
2026-02-27 09:31:50
846
原创 Spring框架里藏了哪些设计模式?
Spring框架深度应用了多种设计模式,其中核心包括:工厂模式(BeanFactory/FactoryBean实现IoC)、单例模式(注册式单例存储)、代理模式(AOP动态代理)、模板方法(各类XxxTemplate)、观察者模式(事件机制)等。其他重要模式还有适配器(HandlerAdapter)、装饰器(RequestWrapper)、责任链(FilterChain)等。这些模式共同支撑了Spring的核心功能,如IoC容器管理、AOP增强、MVC请求处理等,体现了框架对设计模式的创造性应用。理解这些模
2026-02-26 14:46:57
854
原创 拦截器VS过滤器你真的搞清楚了吗?
本文详细对比了Java Web开发中的过滤器(Filter)和拦截器(Interceptor)。Filter基于Servlet规范,工作在Servlet容器层,能拦截所有请求;Interceptor基于SpringMVC框架,只能拦截Controller请求但可访问Spring Bean。核心区别在于执行层级:Filter更靠前,Interceptor位于DispatcherServlet内部。文章还分析了它们的接口方法、执行顺序、典型应用场景及常见面试问题,指出Interceptor更适用于业务逻辑处理,
2026-02-26 14:10:25
780
原创 Spring 是如何解决循环依赖的?(看完这篇,面试再也不慌了)
摘要:本文深入解析Spring如何通过三级缓存解决循环依赖问题。核心思路是允许Bean在"半成品"状态时提前暴露引用,通过三级缓存(工厂、半成品、成品)实现依赖注入。重点分析了为何需要三级而非二级缓存(应对AOP代理场景),并指出无法解决的场景(构造器注入、prototype作用域)。最后给出开发建议:应重构代码消除循环依赖,可考虑逻辑抽离、@Lazy注解或事件机制解耦。SpringBoot 2.6+已默认禁止循环依赖,提倡从设计层面解决问题而非依赖框架机制。
2026-02-25 09:17:25
663
原创 聊聊 Spring —— 那个让 Java 开发不再痛苦的框架
本文深入解析Spring框架三大核心:IoC(控制反转)通过容器管理对象依赖,实现解耦;AOP(面向切面编程)将日志、事务等横切关注点与业务逻辑分离;SpringMVC则处理Web请求流程。文章还对比了Spring与SpringBoot的关系,后者是前者的"开箱即用"封装,并简要介绍了Bean生命周期和常见面试题。Spring通过这三大核心机制,解决了传统Java开发中配置繁琐、代码耦合度高的问题,形成了完整的开发生态体系。
2026-02-25 09:08:10
860
原创 Spring AOP与 AspectJ 的区别
AOP(面向切面编程)通过分离日志、权限等非业务逻辑代码,解决重复编码问题。Spring AOP采用动态代理实现,仅支持Spring Bean的public方法,但存在同类调用失效等局限;AspectJ则通过字节码织入支持更广泛的切点,包括字段访问和构造方法等。实际开发中,Spring AOP适用于大多数场景,而AspectJ适合需要拦截非Spring对象或底层操作的特殊需求。两者本质区别在于代理机制与字节码修改的不同实现方式。
2026-02-24 13:29:28
852
原创 Spring 事务隔离级别从懵到精通
本文从数据库并发问题切入,深入解析事务隔离级别的作用原理。首先阐述了三种并发问题:脏读、不可重复读和幻读,然后对应介绍了四种隔离级别(读未提交、读已提交、可重复读、串行化)如何逐步解决这些问题。通过Spring配置示例和库存超卖案例,指出隔离级别与锁机制的区别与配合关系,强调实际项目中应根据业务需求合理选择隔离级别,而非盲目提高隔离级别。文章最后总结出清晰的逻辑链条和速记口诀,帮助开发者理解事务隔离的本质和实际应用要点。
2026-02-24 11:53:03
721
原创 Spring Bean生命周期全解析
Spring Bean 的生命周期从容器启动开始,到容器销毁结束。实例化(Instantiation)Spring 容器通过反射机制创建 Bean 的实例。此时 Bean 的属性尚未设置,依赖未注入。属性赋值(Population of Properties)容器根据配置(XML、注解或 Java Config)为 Bean 注入依赖的属性或对象。初始化前回调(BeanPostProcessor - postProcessBeforeInitialization)如果注册了。
2025-08-31 18:45:40
1091
1
空空如也
webbuilder中按钮如何与serverScript中的方法交互?
2017-07-04
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅