自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JDK 21 ZGC分代功能详解:配置、原理及生产环境实践

JDK 21的ZGC分代功能,结合G1的混合回收优化和统一GC日志,让Java应用的GC性能再上一个台阶。对于追求低延迟的高并发服务,开启ZGC分代是性价比极高的优化手段——只需简单配置,再根据业务调整新生代占比,就能显著降低GC停顿时间。

2026-03-25 23:47:18 395

原创 Docker 里的 Java 微服务到底怎么跑?JVM、类加载、内存模型一篇讲透!

不属于 JVM 管理,但是 Java 可以用。NIONetty堆外缓存直接 ByteBuffer它的好处是快,坏处是不受 JVM 内存限制,Docker 环境下要特别注意别把容器内存打满。Docker 不跑 Java,只提供环境基础镜像已经预装 JDK,所以你不用装JVM 是 Java 真正的执行引擎对象放堆,类信息放元空间类加载是懒加载,遵循双亲委派Docker + JVM + 类加载 + 内存模型 → 微服务稳定运行。

2026-03-24 22:50:04 321

原创 JVM调优介绍 + 面试题标准答案(高级)

JVM调优就是通过调整JVM参数、优化代码、优化内存使用,让Java应用GC更少、停顿更短、吞吐量更高、不宕机、不OOM。老年代满了Full GC,会卡顿。- Full GC:清理整个堆+元空间,速度慢,STW长,会造成服务卡顿,尽量避免。- 栈:线程私有,存放基本类型和引用,随方法进出自动释放,空间小,速度快。- Minor GC:清理新生代,速度快,触发频繁,STW时间短。4. 内存泄漏:对象不用了,但还被引用,GC收不回,最终OOM。- 堆:线程共享,存放对象,GC自动回收,空间大,存取慢。

2026-03-24 07:54:31 310

原创 Greenplum全面解析:架构、优缺点与同类产品对比

Greenplum(GPDB)是基于PostgreSQL、Shared‑Nothing MPP架构的企业级开源分布式分析型数据库,定位PB级数据仓库、OLAP与复杂查询场景,2015年开源(Apache 2.0),广泛用于金融、运营商、政务、零售等行业。- Greenplum:开源、x86通用、性价比高、生态开放,功能覆盖90%企业场景,成本仅1/3–1/5。Greenplum是私有化部署、开源免费、企业级成熟的MPP数仓最优解之一,平衡了性能、成本、生态与可控性。开启Mirror高可用存储成本翻倍。

2026-03-19 15:08:55 387

原创 【无标题】Kafka 系列博文(一):从零认识 Kafka,到底解决了什么问题?

后面会按顺序写:核心概念、安装部署、Java 客户端使用、生产者/消费者原理、分区与副本、高可用、事务、性能调优等,日常工作遇到问题与解决思路。- 核心概念:Broker、Topic、Partition、Producer、Consumer、Consumer Group、Offset。它不是单纯的 MQ,更像一个分布式事件总线,大数据、微服务、日志收集都离不开它。Kafka 是一个分布式、高吞吐、可持久化的消息队列/事件流平台。- 解决:解耦、削峰、多端消费、高可用、不丢数据。二、为什么要用 Kafka?

2026-03-13 12:49:07 290

原创 Spring Boot 热配置:让应用灵活升级

它将配置文件存储在 Git、SVN 等版本控制系统中,应用启动时从配置中心获取配置,并且在配置发生变化时能够实时同步。通过热配置,我们可以在不影响业务的情况下更新配置,确保服务的连续性。热配置,简单来说,就是在应用程序运行过程中,无需重新启动应用,就能对配置进行修改并使其生效。• 增强灵活性:随着业务变化,我们可以轻松调整配置来适应新的需求,而无需对整个应用进行大规模的修改和重新部署。• 提高开发效率:开发人员可以在开发过程中快速调整配置,实时查看效果,无需频繁重启应用,节省了宝贵的时间。

2026-03-12 07:32:32 251

原创 JVM内存优化实战:从GC收集器到Arthas内存诊断 

JVM内存优化需“先诊断,后调整”:通过GC收集器参数匹配业务场景,合理配置元空间避免类元数据溢出,用Arthas定位内存问题根源,结合代码优化与参数调整,而非盲目增大堆内存。- ZGC收集器:JDK 11+引入的低延迟收集器,支持TB级内存,停顿时间可控制在毫秒级,JDK 21+还支持分代ZGC,对新生代高频回收进一步提升性能。- 正常业务峰值场景:高峰期内存接近 -Xmx 且GC后可释放,可适当调大 -Xmx ,但需注意堆内存不超过服务器物理内存的70%,避免抢占系统资源。

2026-03-07 08:15:53 248

原创 设计模式之十七—备忘录模式:让对象拥有“时光倒流”的能力

备忘录模式是一种行为型设计模式,它允许我们保存和恢复一个对象的内部状态,而不会暴露其实现细节。发起人(Originator):需要被保存状态的对象。它负责创建备忘录,以及使用备忘录恢复自身状态。备忘录(Memento):用于存储发起人内部状态的对象。它通常只允许发起人访问其内部数据,对其他对象屏蔽细节。负责人(Caretaker):负责保存备忘录,但不能对备忘录内容进行操作或检查。它可以在需要时将备忘录传递给发起人进行恢复。通过这种设计,发起人的封装性得到了保护,状态的保存和恢复职责被清晰地分离。

2026-03-01 15:47:28 578

原创 设计模式之十六:状态模式(State Pattern)详解 -优雅地管理对象状态,告别繁琐的条件判断

状态模式(State Pattern)允许对象在内部状态改变时改变它的行为,对象看起来似乎修改了它的类。这是一种行为型设计模式。/*** 订单状态接口* 定义订单在不同状态下支持的操作/*** 支付操作* @param order 订单上下文/*** 发货操作* @param order 订单上下文/*** 确认收货操作* @param order 订单上下文/*** 取消订单操作* @param order 订单上下文/*** 获取状态名称。

2026-02-24 16:15:34 725

原创 设计模式之十五:责任链模式从理论到实战一篇搞定

在软件开发中,我们经常遇到需要多个对象处理同一请求的场景。比如请假审批流程需要不同级别的领导审批、日志系统需要根据日志级别决定输出方式、Web请求需要经过一系列过滤器的处理…请求需要经过一系列处理步骤,每个步骤可能处理请求,也可能将其传递给下一个步骤。责任链模式(Chain of Responsibility Pattern)正是为这类问题提供了优雅的解决方案。本文将深入浅出地介绍责任链模式,并通过Java示例和Spring Boot实战,帮助你掌握这一强大工具。责任链模式。

2026-02-18 22:43:45 636

原创 设计模式之十四:策略模式详解及其在Spring与Java中的应用

策略模式定义了一系列的算法,并将每一个算法封装起来,使它们可以相互替换。策略模式让算法的变化独立于使用算法的客户。核心思想:针对接口编程,而不是针对实现编程。将可变的部分从程序中抽象分离,形成算法的独立族,而在上下文(Context)中委派给具体的策略实现。/*** 促销策略接口/*** 计算促销后的价格* @param originalPrice 原价* @return 促销后价格/*** 获取促销名称* @return 促销名称。

2026-02-17 22:36:33 908

原创 设计模式之十三:迭代器模式,Java 实战一篇吃透

迭代器模式(Iterator Pattern) 是一种行为型设计模式,提供一种顺序访问集合/容器对象中的元素,而又不暴露集合内部实现的方式。public String[] names = {"张三", "李四", "王五", "赵六"};- Iterator:迭代器接口,定义 hasNext() 、 next()- 统一用 hasNext() 、 next() 遍历。- 不想暴露集合内部结构,只对外提供遍历。- 同一集合可支持多个迭代器、多种遍历。- 遍历与集合分离,单一职责。

2026-02-13 23:46:09 381

原创 Spring 异步执行器(Executor)配置策略与命名实践

参数调优:根据业务类型(CPU/IO密集型)和系统资源合理设置策略选择:拒绝策略影响系统稳定性,需根据业务容忍度选择命名规范:良好的命名是监控和问题排查的基础监控告警:建立完善的监控体系,及时发现异常线程隔离:关键业务使用独立线程池,避免相互影响建议在实际使用前进行压力测试,根据测试结果调整配置参数,并建立持续监控机制,确保异步处理系统在高并发场景下的稳定性和可靠性。

2026-02-05 23:25:07 842

原创 设计模式之十二:模板方法模式Spring应用与Java示例详解

模板方法模式是Spring框架中广泛应用的核心模式之一,它体现了"好莱坞原则"的思想。通过将算法骨架固定,将具体实现延迟到子类,实现了代码复用和扩展性的平衡。在Spring中,JdbcTemplate、RestTemplate、TransactionTemplate等都是模板方法模式的经典实现。在实际开发中,合理使用模板方法模式可以有效减少重复代码,提高系统可维护性,特别是在处理具有固定流程但具体实现不同的业务场景时。正确识别和应用模板方法模式,可以让代码结构更加清晰,维护更加容易。

2026-02-03 23:06:58 636

原创 设计模式之十一—桥接模式:解耦抽象与实现的艺术

桥接模式通过组合关系替代继承关系,将抽象和实现解耦,使得两者可以独立变化。在Spring框架中,这种模式被广泛应用在各种模块中,特别是需要支持多种实现方案的场景。设计启示:当我们发现类的继承层次结构过于复杂,或者需要在运行时动态切换实现时,桥接模式是一个值得考虑的解决方案。它体现了"组合优于继承"的设计原则,能够显著提高系统的灵活性和可维护性。在实际开发中,我们应该培养识别"独立变化维度"的能力,当发现一个类可能因为多个原因(多个轴)发生变化时,就应该考虑使用桥接模式进行重构。

2026-02-02 22:55:04 431 2

原创 设计模式之八: 适配器模式解释及应用

适配器模式(Adapter Pattern)是一种结构型设计模式,它允许不兼容的接口之间进行协作。就像现实世界中的电源适配器可以将不同国家的插头标准进行转换一样,适配器模式在软件设计中起到了"转换器"的作用。适配器模式在Spring Boot中有着广泛的应用,它帮助我们在保持系统架构整洁的同时,优雅地处理不同组件之间的接口差异。轻松集成各种第三方服务保持核心业务代码的稳定性提高系统的可扩展性和维护性实现平滑的系统迁移和升级。

2026-01-26 23:00:39 643

原创 设计模式之七—装饰模式(Decorator Pattern)

装饰模式是一种结构型设计模式,它动态地将责任附加到对象上。装饰模式提供了比继承更有弹性的替代方案,用于扩展对象的功能。装饰模式提供了一种灵活的替代继承的方式,通过组合对象来扩展功能。需要动态、透明地给对象添加职责需要避免使用继承导致的类爆炸问题需要遵循开闭原则,在不修改现有代码的情况下扩展功能在Java中,装饰模式被广泛应用于I/O流处理、GUI组件装饰等场景。正确使用装饰模式可以提高代码的灵活性和可维护性,但也需要注意避免过度使用导致的系统复杂性增加。

2026-01-25 23:11:14 605

原创 设计模式之六—组合模式:构建树形结构的艺术

组合模式通过将对象组织成树形结构,实现了部分-整体关系的统一处理。简化了复杂结构:多层级网关关系变得清晰统一了操作接口:无论操作单个设备还是整个网络,接口一致提高了扩展性:新增设备类型无需修改现有代码增强了可维护性:拓扑结构的变化对客户端透明设计模式的价值不在于模式的复杂,而在于它提供的设计思想。组合模式教会我们:通过统一接口处理复杂层次结构,可以让系统更灵活、更健壮、更易于维护。

2026-01-24 10:42:50 903

原创 设计模式之五—门面模式:简化复杂系统的统一接口

门面模式通过提供一个统一的接口来简化复杂系统的使用,就像家庭影院中的智能遥控器一样,为客户端屏蔽了子系统的复杂性。合理使用门面模式可以提高代码的可维护性和可读性,是设计模式中非常实用的模式之一。通过家庭影院系统的实际场景示例,我们可以更好地理解和应用门面模式,在适当的场景下提升代码质量。

2026-01-22 23:48:16 443

原创 @Scheduled(cron = “0 */5 * * * ?“) 详解

14:07:00 - === 第2次执行开始 [线程:pool-1-thread-1] === ← 立即执行排队任务。14:05:00 - === 第2次执行开始 [线程:pool-1-thread-1] === ← 准时触发。14:00:00 - === 第1次执行开始 [线程:pool-1-thread-1] ===14:00:00 - === 第1次执行开始 [线程:pool-1-thread-1] ===14:07:00 - === 第1次执行结束 [耗时:420000ms] ===

2026-01-21 21:33:18 642

原创 设计模式之四:建造者模式(Builder Pattern)详解

与工厂模式相比,建造者模式在构建复杂、多步骤对象时更具优势,而工厂模式更适合简单对象的快速创建。建造者模式是一种创建型设计模式,它将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。该模式通过分步骤构建复杂对象,并允许用户通过相同的构建过程生成具有不同内部状态的对象。Director(指挥者):负责控制构建过程,通常包含一个构建方法,按特定顺序调用Builder的方法。• 当希望构造过程能够产生不同表现形式的对象(例如,不同配置的电脑、不同口味的披萨等)。

2026-01-20 23:18:45 707

原创 设计模式之三—工厂模式:灵活对象创建的艺术

工厂模式是一种,它提供了一种的方法。在软件开发中,我们经常需要创建对象,但直接使用new操作符会导致代码耦合度增高,维护成本加大。工厂模式通过定义一个创建对象的接口,但让子类决定实例化哪个类,从而解决了这个问题。工厂模式的核心思想是,客户端不需要知道具体产品的类名,只需要知道对应的工厂即可。这种解耦使得代码更加灵活,易于扩展和维护。和。这三种模式从上到下逐步抽象,应用场景也逐渐复杂。

2026-01-13 22:15:27 659

原创 设计模式之二—原型模式:灵活的对象克隆机制

原型模式(Prototype Pattern)是一种创建型设计模式,它通过复制现有对象(称为原型)来创建新对象,而不是通过new关键字实例化。该模式提供了一个原型接口,用于创建当前对象的克隆。性能优化:当对象创建成本较高时简化创建:避免复杂的对象初始化过程动态配置:运行时决定对象的类型状态保存:保存和恢复对象状态在实际应用中,应根据具体需求选择合适的克隆策略,并结合其他设计模式(如工厂模式、建造者模式)以获得更好的设计效果。通过合理使用原型模式,可以显著提高系统性能,简化代码结构,提高代码的可维护性。

2026-01-11 23:10:55 757

原创 单例模式深度解析:饿汉式与懒汉式的实现与选择

追求简单和性能→ 选择饿汉式追求资源节约和灵活性→ 选择懒汉式追求完美和安全性→ 选择枚举实现在现代Java开发中,如果必须手写单例,静态内部类实现和枚举实现是最推荐的方式。但更常见的情况是,我们使用Spring等框架的容器管理单例,这既保证了单例的特性,又避免了手写实现的潜在问题。无论选择哪种方式,理解单例模式的原理和各种实现的优缺点,有助于我们在实际开发中做出合理的设计决策。

2026-01-08 23:48:06 297

原创 PostgreSQL 序列循环使用与性能优化综合指南

PostgreSQL 的循环序列通过CYCLE选项实现,能有效解决序列溢出问题。但在实际应用中,需要重点关注:性能优化:合理设置CACHE参数 + 减少nextval()调用频率数据安全:避免循环序列与主键冲突,确保旧数据已清理或迁移长期规划:对于高容量系统,优先选用bigint序列作为根本解决方案通过上述综合优化策略,可以在保证数据一致性的前提下,显著提升循环序列在高并发场景下的性能表现。

2026-01-05 09:31:10 549

原创 # Java三个不容忽视的编程小技巧

大多数开发者会直接使用`orElse()`方法,但这可能带来不必要的性能损耗,尤其重复操作时,消耗大量的内存碎片。System.out.println("性能提升: " + (listTime / setTime) + "倍");

2025-12-22 12:53:45 740

原创 窗口函数与索引失效:为何你的SQL突然变慢了?

索引在窗口函数计算阶段通常无效,因为它们需要访问窗口内的所有行优化重点:尽可能在进入窗口函数前减少数据量最佳实践使用子查询或CTE先过滤数据合理使用PARTITION BY分割大窗口为窗口排序创建专用复合索引始终使用EXPLAIN分析查询计划记住:窗口函数不是敌人,而是需要特殊对待的强大工具。理解其工作原理并采取适当的优化策略,你就能同时享受其强大功能和良好性能。希望本文能帮助你解决窗口函数带来的性能问题。如果你有更好的优化技巧或经验,欢迎在评论区分享!

2025-09-19 23:16:10 672

原创 深入理解Spring Boot的EnvironmentPostProcessor:环境处理的黑科技

是Spring Boot提供的一个函数式接口,允许开发者在Spring应用环境准备完成后、应用上下文创建之前,对配置环境进行自定义处理。@Override// 检查环境条件if (!return;// 创建自定义属性源// 添加到环境中最优先位置log.info("自定义环境处理器执行完成,添加了{}个属性", customProperties.size());// 这里可以从任何地方加载属性:数据库、API、文件系统等@Override。

2025-09-08 23:48:34 1082

原创 深入理解 RequestContextHolder、ThreadLocal 与 RequestContextFilter

是 Java 提供的一个线程级别的变量隔离机制。它为每个使用该变量的线程提供独立的变量副本,不同线程之间不会相互干扰。// 线程1// 输出: Thread1: User1}).start();// 线程2// 输出: Thread2: User2}).start();return ip;= null?Spring 通过和的组合,为我们提供了一种优雅的方式来在应用的任何地方访问当前请求的信息。基于。

2025-09-06 23:30:06 614

原创 RequestContextFilter介绍

是 Spring Web 模块中的一个Servlet 过滤器(Filter)。它的核心作用是将 HTTP 请求(ServletRequest)与当前执行线程进行绑定,使得在整个请求处理链(包括控制器、服务层、数据访问层等)中的任何地方,都能通过 Spring 的工具类方便地访问到当前请求的上下文信息。简单来说,它搭建了一座桥梁,让基于 Servlet API 的 Web 请求信息能够被背后基于 Java SE 标准环境的 Spring Bean 轻松获取。特性描述身份目的。

2025-09-05 23:48:25 1256 1

原创 @Bean 注解详解

@Bean` 是一个方法级别的注解,它告诉 Spring 容器:"这个方法将返回一个对象,这个对象应该注册为 Spring 应用上下文中的 bean"。`@Bean` 通常用在配置类(被 `@Configuration` 注解的类)中的方法上,但也可以用在 `@Component` 类中。在您之前的代码中,虽然没有直接使用 `@Bean`,但 Spring Boot 的自动配置机制大量使用了 `@Bean` 注解。| 适用场景 | 第三方库的类、需要复杂初始化的类 | 自己编写的类 |

2025-08-28 12:31:16 1781

原创 PostgreSQL 强制索引:当重复数据让优化器“失明”时的解决方案

创建覆盖索引 (INCLUDE…)触发。✅在特定查询或事务中,临时+ 使用CTE 结构。🧪考虑扩展提供精确索引提示。🎛永远先ANALYZE更新统计信息!📈强制前后务必用验证实际性能!🔬记住:强制索引是双刃剑。优化器的默认选择有时是合理的。覆盖索引通常是解决重复数据查询性能的终极优雅方案。通过理解原理、谨慎使用工具和充分测试,你就能让 PostgreSQL 在重复数据的迷雾中,依然为你高速导航!🚀。

2025-08-07 23:26:12 719

原创 PostgreSQL 通配符指南:解锁 LIKE 查询的魔法 - % 与 _ 详解

特性通配符通配符匹配长度任意长度 (0个或多个字符)精确1个字符灵活性极高 (可代表空或长字符串)较低 (严格单字符)典型用途前缀/后缀/包含匹配固定位置字符匹配索引利用'text%'可用索引'_ext'通常无法用索引掌握和通配符是高效使用 PostgreSQL 进行模糊查询的基础。擅长处理长度不确定的匹配,而精确定位单个字符位置。合理组合它们能解决大部分模式匹配需求,但务必注意前导通配符对性能的影响以及大小写敏感性问题。善用这些技巧,让你的数据查询更加灵活强大!

2025-08-06 23:06:52 1205

原创 Kafka单条消息长度限制详解及Java实战指南

在分布式消息系统中,Kafka以其高吞吐、低延迟的特性成为主流选择。。本文将深入剖析Kafka的消息大小限制机制,并提供Java解决方案。

2025-07-22 23:35:00 935

原创 Java三大JSON库全景对比:Jackson、Fastjson与Gson深度解析

以下为针对Jackson、Fastjson与Gson三大Java JSON库的全方位深度对比解析及实战示例,结合性能测试、安全性评估和场景化选型建议,助您精准匹配项目需求。

2025-06-28 08:07:08 2528

原创 字符串、JSON数组与Java Bean的相互转换实战指南

完整代码示例已上传至[GitHub仓库](https://github.com/example/json-conversion-demo)。| JSON数组 → List<Bean> | `fromJson()` + `TypeToken` || 字符串 → JSON数组 | `JsonParser.parseString()` || List<Bean> → JSON数组 | `toJson(集合对象)` |// 已有的JSON数组。| JSON数组 → 字符串 | `Gson.toJson()` |

2025-06-25 13:11:22 754

原创 使用长度为1的BlockingQueue实现消息发送同步

使用长度为1的`BlockingQueue`配合`poll`/`offer`的超时设置,可以构建一个简单而有效的消息同步机制。`BlockingQueue`是Java并发包(`java.util.concurrent`)中的一个接口,它扩展了`Queue`接口,提供了线程安全的队列操作。1. **队列长度为1**:限制了队列只能容纳一个元素,这使得队列可以作为一种同步信号。1. **队列容量**:长度为1的队列意味着任何时候都只能有一个未确认的消息。3. **灵活性**:可以扩展为携带实际的消息内容。

2025-06-24 13:16:48 534

原创 深入理解Java中的BlockingQueue:多线程编程的利器

BlockingQueue是一个支持阻塞操作的队列接口,它在Java并发框架中扮演着关键角色。线程安全:所有实现都保证线程安全阻塞操作当队列满时,插入操作会被阻塞当队列空时,获取操作会被阻塞容量限制:大多数实现都有容量限制(除了LinkedBlockingQueue可选无界)// 阻塞方法// 带超时的阻塞方法BlockingQueue是Java并发编程中的核心组件,它提供了一种线程安全、高效的数据交换机制:✅简化线程通信:解耦生产者和消费者✅自动流量控制。

2025-06-21 12:20:11 1177

原创 深入理解Java中的String.format方法

是Java中用于格式化字符串的静态方法,它允许我们使用格式说明符来控制输出的样式。format参数是一个格式字符串,包含固定文本和格式说明符args参数是可变参数,提供要格式化的值提供了丰富的格式化选项支持本地化输出允许精确控制输出的布局和样式简化了复杂字符串的构建过程掌握的使用可以显著提高代码的可读性和维护性,特别是在需要生成格式化的输出时。虽然在某些性能敏感场景可能需要考虑替代方案,但在大多数应用中,它都是字符串格式化的首选方法。

2025-06-21 10:09:03 1026

原创 http测试方法三

二、浏览器控制台直接测试http请求。

2025-06-16 23:46:30 286

空空如也

空空如也

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

TA关注的人

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