- 博客(205)
- 收藏
- 关注
原创 volatile的底层实现
volatile主要有两个作用:保证可见性和禁止指令重排序。可见性是指当一个线程修改了volatile变量的值,其他线程能立即看到这个修改。禁止重排序是为了避免编译器和处理器对指令的优化导致执行顺序改变,从而引发多线程环境下的问题。如果读者已经知道volatile的基本用法,现在想更深入了解其底层机制。可能是一位Java开发者,正在准备面试,或者在学习多线程编程时遇到了疑问。JVM如何实现volatile的功能,比如内存屏障、缓存一致性协议等,做详细解释。然后,我们要确定回答的结构。
2025-02-25 12:10:41
1648
1
原创 Elasticsearch出现深度分页问题怎么解决?
Elasticsearch 的深度分页问题,本质上是查询方式在处理海量数据时,系统资源消耗会随分页深度线性甚至指数级增长。这主要体现在,导致协调节点内存压力大,甚至引发内存溢出(OOM)。Elasticsearch 默认设置了为 10,000,就是为了防止随意调整导致集群不稳定。
2026-06-09 08:33:16
240
原创 sentinel底层原理剖析以及实战优化
Sentinel 通过滑动窗口实现实时数据统计,基于 SlotChain 将限流、熔断等规则判断封装成独立的 Slot 模块,并通过动态数据源支持规则的热更新。其设计在高性能和高灵活性之间取得了平衡。如果你打算进行深度定制,比如编写一个自定义的 Slot 或者实现自己的数据源,随时可以提出来,我们可以更具体地展开聊聊。
2026-06-09 08:22:04
285
原创 MQTT常见的问题?
MQTT的面试题通常都很有章法,主要围绕其作为物联网“通用语言”的核心特性展开。面试官会从基础概念逐步深入到协议细节和实战经验。为了让你准备起来更清晰,我按照考察的侧重点把常见问题分了类,并附上了解题思路。
2026-06-08 23:31:51
377
原创 限流算法详细剖析
通过实现接口,定义限流的Key,从而实现不同的限流策略。按用户ID限流@Bean// 这里假设userId存放在请求头中,你可以根据实际情况调整= null?按IP地址限流@Bean按请求路径限流@Bean组合限流@Bean= null?在实际应用中,令牌桶因其既能平滑流量又能应对突发,成为最主流的限流算法(如Spring Cloud Gateway、Guava RateLimiter、Nginx的limit_req模块均采用或类似令牌桶)。
2026-06-08 21:25:49
426
原创 openfeign理论剖析以及实战优化
优化维度核心要点关键参数连接池用 Apache HttpClient/OkHttp 替代默认per-route超时注意四层超时体系,确保配置名称严格匹配首次调用预初始化 Feign 客户端,避免懒加载延迟重试默认不重试,需谨慎配置(仅幂等请求)Retryer、指数退避容错集成 Sentinel,实现 fallback 降级最佳实践建议生产环境务必配置连接池,这是最重要的性能优化所有 Feign 接口统一抽取到独立模块,便于复用和管理。
2026-06-08 10:25:00
328
原创 Minor GC和Full GC实战优化
最终设置 = 压测验证 + 持续微调然后根据GC日志中Minor GC频率 < 10次/分钟且Full GC频率 < 1次/小时的标准调整年轻代大小。如果需要更具体的参数计算或某一场景的调优案例,可以告诉我你的应用特点(比如QPS、对象大小、缓存占比等),我可以给出更精确的推荐值。
2026-06-07 11:02:05
512
原创 深入剖析时序数据库 InfluxDB 核心原理
维度存储引擎自研 TSM + 倒排索引基于 Arrow + Parquet 的列式存储查询语言标准 SQL + InfluxQL压缩算法Gorilla / Snappy / Simple8b 等Parquet 原生列压缩 + 字典编码索引机制TSI 倒排索引基于 Arrow 数据字典的元数据索引高可用企业版支持两集群架构3.0 起原生分布式,核心组件无状态存储后端本地文件系统支持对象存储(S3 等)部署方式单进程支持容器化 / K8s 编排写入性能高吞吐,适合海量设备数据。
2026-06-05 20:02:00
457
原创 Modbus通信协议原理
Modbus协议原生,所有数据和指令都以明文形式传输。这使其极易受到窃听、篡改和非法控制攻击。。Modbus协议是一种的应用层通信协议,遵循,通信完全由主站(Master)发起,从站(Slave)被动响应。
2026-06-04 22:50:23
178
原创 MQTT通信协议原理
MQTT 是一种为低带宽、高延迟、不稳定网络量身定制的轻量级发布/订阅协议,依靠Broker中枢、主题路由、QoS等级、保留/遗嘱等特性,完美支撑了从智能家居到工业物联网的广泛场景。如果您的项目涉及低功耗设备或弱网络环境下的实时通信,MQTT 是首选方案。
2026-06-04 22:44:53
457
原创 MQTT如何保证消息的可靠性
MQTT协议通过多层级机制保障消息可靠性:1)QoS等级(0-2)提供端到端传输保证,其中QoS2通过四步握手确保恰好一次交付;2)消息标识符与重传机制实现去重;3)持久会话保存离线消息;4)保留消息和遗嘱消息增强状态同步;5)心跳机制检测连接状态。生产级Broker还通过持久化、集群等提升可靠性。这些机制协同工作,使MQTT能在物联网弱网环境下提供从"至多一次"到"恰好一次"的灵活可靠性保障,关键场景推荐QoS2+持久会话+保留消息组合。
2026-06-04 22:39:53
587
原创 Spring cloud组件gateway网关详细剖析
Spring Cloud Gateway 的核心配置通常在文件中完成。spring:cloud:gateway:routes:- id: user-service-route # 路由ID,唯一# lb:// 前缀表示启用服务发现和负载均衡,userservice 为服务名predicates: # 断言:匹配 /user/ 开头的请求filters: # 过滤器:移除第一级路径前缀 /userfilters:断言工厂说明示例Path基于请求路径匹配Method匹配HTTP请求方法。
2026-05-28 21:46:56
437
1
原创 使用 Docker Compose 搭建 Kafka 集群
本篇文章主要介绍使用 Docker Compose 搭建 Kafka 集群,实操性比较强。Kafka在2.8.0版本之前的集群部署中必须依赖Zookeeper,因为它承担了元数据管理、Controller选举、Broker状态监控等核心协调职责;但从2.8.0版本开始,Kafka引入KRaft模式逐步替代Zookeeper,到4.0版本已完全移除该依赖。本次部署的Kafka是比较久的版本。下面是一个。
2026-05-27 21:24:21
236
原创 SAP开发如何制作一个简单的查询事务。
ABAP 作为 SAP 系统的核心开发语言,理解其基础概念是进行 SAP 定制化开发的基石。下面会先介绍 ABAP 的基础语法,然后通过一个详细的案例,展示如何将代码配置成一个独立的事务代码。
2026-05-05 12:54:03
385
原创 告别“屎山”里的无脑回滚:备忘录模式让状态管理优雅起来
在 DAO-Service-Controller 架构中,备忘录模式是实现复杂表单向导、草稿箱、操作撤销功能的优雅方案。:掌控业务实体的生死,负责状态的打包和解包。:携带状态快照的黑盒子,保护内部数据不被泄露。:负责保管盒子,不关心盒子里装了什么。这种设计既保证了业务逻辑的内聚性,又提供了灵活的状态管理能力,是处理“长流程、易变、需回退”业务场景的利器。
2026-03-22 19:52:55
400
原创 状态模式:用优雅的设计,瓦解复杂业务的“屎山代码”
OrderState在 DAO-Service-Controller 架构中,状态模式是处理复杂生命周期业务的神器。Controller负责接收指令。Service负责编排事务和构建上下文。State 类负责具体的业务规则判断和行为执行。它将“状态”从一个简单的数据库字段,升维为一个拥有行为能力的对象,让代码随着业务状态的增加而自然生长,而不是变得臃肿不堪。
2026-03-22 19:46:03
536
原创 命令模式:在复杂业务中解耦“屎山”代码的架构实践
Command位置:在 Service 层之上构建一层“命令层”,或在 Service 内部使用命令对象编排复杂逻辑。核心价值:解决长流程事务补偿机制(Undo)操作审计和异步解耦问题。适用场景:金融交易、电商下单、工作流引擎、复杂的表单提交等对数据一致性和可追溯性要求极高的业务。通过这种设计,你的系统将从简单的“增删改查”进化为具备自愈能力和高可维护性的企业级应用。
2026-03-20 21:44:38
406
原创 模板方法模式:复杂业务代码的解耦与复用之道
用于在模板方法的各个步骤间传递数据,避免参数列表过长。@Data// 用于步骤间传递临时数据在 DAO-Service-Controller 架构中,将模板方法模式应用于 Service 层的抽象基类是处理复杂多变业务流的最佳实践。它既利用了面向对象的多态性来隔离差异,又通过继承机制固化了核心流程,非常适合中国企业中常见的“大流程统一、小细节各异”的业务场景(如多银行支付、多物流对接、多省份政务对接等)。
2026-03-20 21:14:20
828
原创 复杂业务的解决之道,如何使用“中介者模式(Mediator Pattern)”解决复杂业务场景
在 DAO-Service-Controller 架构中,中介者模式是解决Service 层复杂协作的一个重要的一种设计模式。是解决屎山代码的有效方式之一。适用场景:涉及多个领域模型协同的复杂业务(如开户、下单、理赔、审批流)。核心价值:将“网状依赖”转化为“星状依赖”,将“分散的流程控制”集中化,将“复杂的异常处理”统一化。设计关键:创建一个专门的Mediator。
2026-03-20 21:01:50
526
原创 责任链模式解决复杂业务的实战案例
在复杂链条中,Context 不仅仅是参数容器,更是数据总线。@Data@Builder// --- 输入数据 ---// 枚举:NORMAL, PRE_SALE, GROUP_BUY// --- 状态标记 (用于控制流程分支) ---// 风控标记// 是否跳过优惠券// --- 共享数据总线 (前一个 Handler 的输出是后一个的输入) ---// --- 执行追踪 (用于调试和审计) ---增加support方法,实现动态分支(某些节点只在特定条件下执行)。
2026-03-04 09:20:42
444
原创 状态机模式
在你已有的业务场景下,还有更优秀、更现代、更符合领域驱动设计(DDD)和函数式编程思想的写法。下面我将为你展示一种 高度解耦、极致可扩展、无 if-else、无状态处理器注册表 的优雅方案 —— 使用“状态动作映射 + 函数式接口 + 领域事件”。💡 注意:所有副作用(DB、Log、MQ)都在主流程中统一处理,状态机只返回“意图”。你现在的业务本质是一个 状态驱动的流程,最适合用 状态机 + 函数式映射 来表达。维度 传统策略模式 本方案(状态机 + 函数式)
2026-02-09 10:09:20
336
原创 OAuth2.0和网关鉴权结合的身份认证技术
这套技术极大的简化微服用户认证,如果使用Session建立缓存用户登录状态的话,需要把Session做成多个节点共享的,因为传统的Session机制是一个数据“孤岛”,每个微服应用实体之间不能共享Session数据。10. 如果成功,网关将请求转发给下游微服务,并通常在请求头中添加用户信息(如。11. 微服务接收到请求,信任网关传来的用户信息,直接处理业务逻辑并返回结果。:网关可以根据预配置的路由规则,判断当前用户是否有权限访问该 API。:校验成功后,网关从响应中获取用户身份信息和权限范围。
2025-11-14 14:17:07
1246
原创 多级缓存解决方案
性能极致:本地缓存提供纳秒级访问,Redis提供分布式缓存高可用:任何一级缓存故障都不会导致系统完全不可用可扩展:易于添加新的缓存层级或替换缓存实现监控完善:提供详细的缓存命中率统计容错性强:每级缓存都有异常处理,避免级联失败这种架构特别适合读多写少数据变化不频繁但访问量巨大的业务场景。
2025-11-11 12:34:31
1146
原创 Redis识别缓存与数据库数据的不一致性以及识别热Key教程
识别Redis缓存与数据库的数据不一致性以及发现热Key,是保障系统稳定与数据准确的关键。下面我将为你梳理具体的方法和策略。MONITOR。
2025-11-05 22:17:21
1152
原创 Web开发身份认证技术解析
现代Web应用通常采用多台服务器客户端 → 负载均衡器 → [服务器A, 服务器B, 服务器C, ...]同一个用户的连续请求可能被分发到不同的服务器。方面Session在单机环境Session在分布式环境Token方案数据存储服务器内存需要集中存储(如Redis)客户端自包含状态性有状态有状态(但存储集中化)无状态扩展性差中等(存储可能成瓶颈)优秀可靠性服务器重启丢失依赖外部存储可靠性不依赖服务器状态网络开销无每次请求访问外部存储无额外网络开销架构复杂度简单。
2025-11-05 22:05:51
1349
原创 Redis大Key调优指针
本文系统分析了Redis大Key问题的优化策略,从定义标准、检测工具到解决方案。大Key通常指String值超过10KB或集合元素超5000个,会造成性能瓶颈、内存不均等问题。核心优化包括合理设计数据结构、使用redis-cli检测、拆分重组大Key(如Hash分片)、异步清理(UNLINK命令)、辅助配置调整(压缩、多级缓存)等。建议遵循预防为主原则,结合业务特点制定规范,通过系统性优化充分发挥Redis性能优势。
2025-11-02 20:05:17
1408
原创 JVM Full GC 优化指南
摘要:频繁Full GC会导致应用暂停,影响服务稳定性。本文提供系统化排查流程:1)通过堆转储分析内存泄漏;2)调优JVM参数,包括堆内存分配、GC器选择和元空间配置;3)代码优化如避免大对象、及时释放资源。配套介绍了jmap、MAT等工具的使用方法,并附流程图指导问题定位。建议优先解决内存泄漏,再针对性调整参数,从根源减少GC问题。
2025-11-02 16:16:16
1611
原创 Redis性能调优指南
想让 Redis 发挥最佳性能,需要从内存、持久化、系统配置、客户端使用等多个维度进行综合调优。下面这个表格汇总了核心的优化方向和建议,你可以根据它快速抓住重点。
2025-10-30 21:27:51
1168
1
原创 Redis连接超时排查与优化指南
总的来说,排查Redis连接超时是一个系统工程,需要你从网络、服务器资源、Redis自身状态和客户端使用四个维度,由表及里地进行。如果经过以上排查和优化,问题依然存在,可以考虑启用更详细的监控(如Redis的INFO命令输出、Prometheus等),以便持续观察和深度分析。
2025-10-28 23:19:10
1045
原创 Nginx如何配置负载均衡,并使用对不同同负载均衡算法进行配置
在 Nginx 中配置负载均衡,主要是通过upstream模块来定义一组后端服务器,并选择合适的负载均衡算法,然后在location块中通过proxy_pass指令将请求转发给这个服务器组。下面这个表格整理了 Nginx 常用的负载均衡算法,你可以根据业务场景快速选择。
2025-10-28 20:38:41
1522
原创 一篇文章了解软件设计钟的23种设计模式
意图:提供一个创建一系列相关或相互依赖对象的接口。// 抽象产品A// 抽象产品B// 具体产品 - Windows风格@Override@Override// 具体产品 - Mac风格@Override@Override// 抽象工厂// 具体工厂@Override@Override@Override@Override// 客户端开闭原则:对扩展开放,对修改关闭单一职责原则:一个类只负责一个功能领域依赖倒置原则。
2025-10-27 08:27:52
964
原创 jvm逃逸问题的分析以及给出解决方案?
逃逸分析(Escape Analysis)是指分析对象的作用域是否会"逃逸"出当前方法或线程的范围。尽量使用局部变量:减少对象的生命周期避免不必要的成员变量:除非确实需要共享状态使用不可变对象:减少同步和逃逸问题注意集合类的使用:返回副本或不可修改视图合理使用线程局部变量:避免线程间的对象共享编写小而专注的方法:便于JVM优化和内联通过合理的设计和编码实践,可以充分利用JVM的逃逸分析优化,显著提升程序性能,特别是在大量创建临时对象的场景下。
2025-10-26 16:32:18
1065
原创 使用RedisTemplate设计一个消息队列?
在代码实现之前,我们先了解一下消息队列的基本需求。要保证数据的可靠性与性能之间提供选择。序列化配置:正确配置RedisTemplate的序列化方式,支持复杂对象存储事务支持:使用SessionCallback确保多个操作的原子性异常处理:完善的异常处理和日志记录性能考虑:使用连接池、批量操作、异步处理可靠性:实现消息确认、重试、死信处理机制扩展性:支持延迟消息、优先级队列等高级特性监控管理:提供队列统计和监控接口。
2025-10-25 19:59:39
1135
原创 软件开发的六大设计原则(SOLID + LoD)
原则关键实践主要收益SRP每个类单一职责易于理解、维护OCP面向接口编程,使用策略模式易于扩展LSP子类不改变父类行为预期继承安全ISP接口细化、角色分离避免接口污染DIP依赖注入,面向抽象降低耦合度LoD减少对象间依赖提高模块化这些原则共同构成了高质量、可维护、可扩展软件设计的基础。在实际开发中,它们往往相互关联、协同工作,帮助我们构建更加健壮的软件系统。
2025-10-21 14:57:35
1158
原创 软件设计中的DDD模式讲解
清晰的层次架构:严格分离领域层、应用层、基础设施层和接口层丰富的领域模型:实体、值对象、领域服务各司其职聚合根保护不变条件:所有对账户的修改都必须通过聚合根领域事件:用于解耦领域逻辑,实现最终一致性统一语言:代码中的类名、方法名都直接反映业务概念依赖倒置:领域层不依赖基础设施层这个示例展示了如何在 Spring Boot 中落地 DDD 的核心概念,你可以基于此框架继续扩展更复杂的业务功能。层面核心概念要解决的问题战略设计限界上下文、子域、上下文映射系统怎么切分?边界在哪?如何交互?
2025-10-13 22:28:45
1548
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅