- 博客(71)
- 收藏
- 关注
原创 深入理解享元模式:用Java实现高效对象共享
享元模式是一种结构型设计模式,通过对象共享减少内存占用。它将对象状态分为内部状态(共享)和外部状态(非共享),适用于海量相似对象的场景(如游戏粒子、文档字体)。核心实现包括享元接口、具体享元类和工厂缓存机制,通过复用对象显著提升性能(测试显示10万次操作内存减少99.9%)。该模式以空间换时间,需注意线程安全和状态分离,在Java标准库如Integer.valueOf()中已有应用。适用于对象数量导致性能瓶颈时,但需避免过度设计。
2025-06-01 18:49:49
924
原创 如何排查Redis单个Key命中率骤降?
Redis热点Key命中率骤降问题分析与解决方案 当Redis整体命中率达98%但特定Key命中率从99%骤降至40%时,需重点排查以下方面:1)通过监控工具确认Key访问模式和TTL设置;2)检查业务代码变更,尤其是缓存读写逻辑和Key生成规则;3)分析缓存失效策略,关注TTL设置和内存淘汰机制;4)验证数据一致性,排查缓存穿透/击穿问题。解决方案包括:对空值进行缓存防止穿透、使用互斥锁避免击穿、实施双删策略保障一致性。预防措施建议设置核心Key监控预警、优化架构采用多级缓存,并调整Redis内存淘汰策略
2025-06-01 18:14:15
452
原创 HJ2 计算某字符出现次数
该Java程序统计第二个字符串在第一个字符串中出现的次数。通过将第一个字符串(转换为小写)中的所有第二个字符串(同样转换为小写)替换为空,然后比较原始字符串与处理后字符串的长度差,得出出现次数。这种方法简单高效地实现了字符串匹配计数功能。程序使用标准输入读取数据并输出统计结果。
2025-05-31 18:36:16
365
原创 深入理解外观模式(Facade Pattern):用Java代码实现复杂系统的简化调用
外观模式是一种结构型设计模式,它通过定义一个高层接口,将多个子系统的复杂功能调用封装成一个简单操作。客户端无需直接与子系统交互,而是通过外观类间接调用,从而降低系统的耦合度[7][9]。外观模式通过封装与简化,体现了“最少知识原则”(Law of Demeter),是应对复杂系统调用的优雅解决方案。它不仅能提升代码可维护性,还能让团队协作更高效——例如后端提供统一接口,前端无需关心实现细节[3][12]在实际开发中,建议优先为高频复杂操作设计外观类,但需警惕过度封装导致的“上帝对象”问题。
2025-05-31 18:34:03
919
原创 缓存穿透、击穿、雪崩的解决方案
本文总结了三种常见缓存问题(穿透、击穿、雪崩)的解决方案。缓存穿透可通过布隆过滤器拦截非法请求和缓存空值来应对;缓存击穿推荐使用互斥锁和逻辑过期策略处理热点Key失效;缓存雪崩则建议采用随机过期时间和多级缓存机制。文章通过Java代码示例展示了具体实现,并对比了三种问题的适用场景,最后提供了布隆过滤器参数调整和热点数据预热等实用技巧。
2025-05-31 17:27:51
1173
原创 深入理解Java装饰器模式:动态扩展对象功能的优雅之道
装饰器模式是一种结构型设计模式,通过动态包装对象的方式扩展功能,避免继承带来的子类爆炸问题。它由抽象组件、具体组件、抽象装饰器和具体装饰器四个核心角色组成,能在运行时灵活组合功能(如Java IO流、GUI组件美化)。该模式完美遵循开闭原则,实现职责分离,但需注意避免装饰层次过深和接口污染。相比适配器模式,装饰器不改变接口;相比策略模式,它侧重功能叠加而非算法替换。最佳实践包括优先使用组合、保持接口纯净和控制装饰层数。
2025-05-26 20:21:22
984
原创 热点数据的统计到应用
本文提出了一套基于Redis和Java的热点数据智能管理方案。核心方法包括:1)利用Redis的HyperLogLog实现海量数据统计,内存消耗仅为传统方案的0.01%;2)采用滑动窗口算法实现微秒级QPS计算;3)通过本地缓存快速识别热点Key,响应速度比全量扫描快30倍。方案在电商、流媒体、金融等多个领域得到验证:电商场景实现商品三级热度分级,促销活动可实时监测库存热点;流媒体平台能动态调整经典内容推荐权重;金融风控系统可精准识别异常交易行为。该方案显著提升了系统稳定性,在百万级并发场景下仍能保持高性能
2025-05-26 20:13:46
839
原创 滑动窗口算法实时计算QPS:Java实现与原理分析
滑动窗口算法通过细粒度时间桶和动态滑动机制,实现了QPS的实时、精准计算。实际应用中,通过为每个数据项维护独立的滑动窗口实例,可精准识别高频数据,为Redis缓存策略提供关键依据。传统的“固定窗口算法”(如每分钟为一个窗口)存在边界问题(例如,窗口切换时可能出现双倍流量峰值未被检测到),而“滑动窗口算法”通过将窗口划分为多个细粒度的“时间桶”,可以更平滑地监控流量变化。的滑动窗口QPS计算器实现,支持高并发场景、时间回拨处理,并提供实时QPS查询功能。实例,实现细粒度监控。
2025-05-26 19:56:05
791
原创 深入解析Java组合模式:构建灵活树形结构的艺术
摘要:组合模式通过树形结构组织对象,统一处理整体与部分的关系。核心思想是让客户端可以一致地处理单个对象和组合对象,支持递归组合形成复杂结构。模式包含抽象构件、叶子构件和容器构件三种角色,分为透明式与安全式两种实现方式。典型应用包括文件系统、UI组件等层次结构场景。该模式简化了客户端代码,但可能增加系统复杂度。关键在于识别适合使用组合模式的层次结构场景,并在透明性与安全性之间做出权衡选择。
2025-05-25 12:43:31
700
原创 Redis之金字塔模型分层架构
Redis缓存数据筛选的金字塔模型为分布式系统提供了科学的缓存决策框架。该模型分三层评估:核心价值层(读写比、高频访问、低变更频率)、效率优化层(数据结构容量规范、时效策略匹配)和基础适配层(非事务性、允许延迟、非大对象)。通过动态阈值和结构化标准,模型能精准识别如商品详情页等高价值缓存场景,避免资源浪费。实际应用需结合业务特点调整参数,经A/B测试验证优化效果,实现Redis缓存价值最大化。
2025-05-25 12:18:38
1117
原创 深入理解桥接模式:解耦抽象与实现的设计艺术
桥接模式通过分离抽象与实现,解决多维度变化导致的“类爆炸”问题。传统继承方式在面对遥控器与设备类型扩展时,类数量呈指数级增长,维护成本高。桥接模式的核心思想是将抽象层(如遥控器功能)与实现层(如设备操作)解耦,使两者可以独立演化。通过组合而非继承,系统能灵活扩展新功能或设备类型,避免了类爆炸。具体实现中,抽象层(遥控器)持有实现层(设备)的引用,并通过具体子类扩展功能。这种设计不仅降低了代码耦合,还提高了系统的可扩展性与维护性。
2025-05-17 12:04:27
755
原创 数据库索引优化:如何平衡查询与写入性能
本文深入探讨了数据库索引优化的关键策略,旨在帮助开发者在提升查询性能的同时,避免过度优化带来的负面影响。文章首先介绍了科学评估索引效果的方法,包括量化查询性能指标、系统资源监控以及真实案例分析。接着,文章指出了过度优化的典型症状,并提供了实战解决方案,如合并复合索引和使用延迟索引。此外,文章还提出了读写性能平衡的黄金法则,包括索引设计优先级矩阵和高级平衡技巧。最后,文章强调了持续优化机制的重要性,包括自动化监控体系、变更管理流程和技术债务管理。通过遵循这些原则和策略,开发者可以在实际业务场景中找到最佳的索引
2025-05-17 11:37:20
807
原创 深入理解Java适配器模式:从接口兼容到设计哲学
适配器模式是一种结构型设计模式,旨在解决接口不兼容的问题,使原本无法直接协作的类能够协同工作。其核心思想是通过转换接口定义,将现有类的接口转换为客户端期望的接口。适配器模式有两种主要实现方式:类适配器和对象适配器。类适配器通过继承实现,适合需要重写适配者方法的场景,但灵活性较低;对象适配器通过组合实现,支持多适配者,灵活性和扩展性更强。适配器模式广泛应用于新旧系统接口兼容、第三方库接口适配以及Java标准库中的字节流到字符流转换等场景。通过适配器模式,开发者可以在不修改现有代码的情况下实现接口的兼容,提升代
2025-05-14 22:30:34
1062
原创 SQL优化实战(二):从慢查询到丝滑执行的4个经典案例
SQL优化是提升数据库查询效率的关键技能。本文通过三个真实业务场景,展示了如何通过分析执行计划、定位问题根源并进行精准优化,显著提升查询性能。首先,针对全表扫描问题,通过添加复合索引将订单查询从8秒优化到100毫秒;其次,针对索引失效问题,通过调整查询逻辑将用户查询从5秒优化到200毫秒;最后,针对多表关联问题,通过优化查询结构将商品详情查询从3秒优化到500毫秒。这些案例揭示了SQL性能瓶颈的三大根源:全表扫描、索引失效和多表关联,并提供了具体的优化方法论,帮助开发者掌握高效的SQL优化技巧。
2025-05-14 21:33:30
886
原创 深入理解设计模式之原型模式(Prototype Pattern)
原型模式通过克隆已有对象来创建新实例,适用于对象初始化资源消耗大、需要创建相似对象或简化创建过程的场景。相比直接创建,原型模式能避免重复初始化、动态获取对象状态并实现创建与使用的解耦。模式结构包括抽象原型、具体原型和客户端,通过克隆方法实现对象复制。深拷贝与浅拷贝的区别在于是否完全独立复制对象,深拷贝适用于复杂对象结构。Java中可通过手动克隆、序列化或JSON实现深拷贝。原型模式在游戏开发、配置对象复用等场景中广泛应用,性能测试显示克隆方式比直接创建更高效。最佳实践包括使用对象注册表、结合其他设计模式,并
2025-05-11 16:44:13
670
原创 SQL优化实战(一):一套完整的慢SQL分析与优化的经验
工具链组合慢查询日志 → EXPLAIN → OPTIMIZER_TRACE,形成闭环。索引设计原则优先覆盖WHEREORDER BYJOIN字段。避免过度索引(写操作成本增加)。避免常见陷阱隐式类型转换导致索引失效。大字段(如TEXT)排序。附录MySQL官方EXPLAIN文档优化不是一次性的,而是持续迭代的过程!
2025-05-11 15:48:24
748
原创 深入解析建造者模式(Builder Pattern)——以Java实现复杂对象构建的艺术
建造者模式(Builder Pattern)属于创建型设计模式,它将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。(《设计模式:可复用面向对象软件的基础》)✅ 提高对象创建的安全性✅ 增强代码可读性和可维护性✅ 支持参数组合的灵活扩展✅ 强制实施不可变性原则适用性判断标准:当对象的构造函数参数超过4个,且部分参数可选,存在验证必要性的时候,就应该考虑使用建造者模式。
2025-05-08 20:24:54
1039
原创 PDF生成模块开发经验分享
在日常的项目开发中,PDF文档的生成是一个常见的需求。无论是用于申报单、审批结果通知书还是其他业务相关的文档输出,一个高效且灵活的PDF生成功能都是不可或缺的。本文将基于我使用Java(Spring Boot)和iText库开发PDF生成模块的经历,分享一些技术选型心得以及具体的实现方法。
2025-05-08 19:03:27
951
原创 多线程基础:线程创建、启动与生命周期管理
多线程编程是提高程序性能的有效手段,但也带来了复杂性。理解线程的创建方式、生命周期和基本操作是掌握多线程编程的基础。在实际开发中,还需要注意线程安全问题,合理使用同步机制。后续可以进一步学习线程池、并发工具类等高级主题。
2025-05-02 18:13:02
269
原创 处方流转平台权限控制模块设计(基于RBAC模型)
医生(Doctor)权限:处方创建、修改(限未审核状态)、查看本人开具处方特殊约束:只能开具所属科室的药品药师(Pharmacist)权限:处方审核、调配、发药、查看所有处方特殊约束:调配需双人审核药房管理员(PharmacyAdmin)权限:药品库存管理、处方统计查看特殊约束:无药品调配权限系统管理员(SystemAdmin)权限:用户管理、角色管理、权限配置特殊约束:无医疗业务操作权限患者(Patient)权限:查看本人处方、处方流转状态查询特殊约束:仅能访问本人数据。
2025-05-02 18:03:46
600
原创 简单了解Java的I/O流机制与文件读写操作
在使用这些流的时候,要记住一点,我们是为电脑编写程序,这里的Input是指输入到电脑中,reader是指读到电脑中。一开始的时候,总是搞混这些,用久了就清楚了。
2025-04-27 20:00:39
666
原创 单个接口承接id+状态变化的一种思路记录
曾几何时,为了完成一个单实例单库的高并发接口开发绞尽脑汁,现在整理一下,仅供参考哈。QPS2000左右的,足够用了。
2025-04-27 19:50:06
1045
原创 浅谈Java 内存管理:栈与堆,垃圾回收
在Java编程世界里,内存管理是一项极为关键的技能,它就像程序运行背后的“隐形守护者”,默默影响着程序的性能与稳定性。今天,咱们就来简单学习一下Java内存管理中的两大核心要点:栈与堆的内存分配机制,以及基本的垃圾回收概念。
2025-04-26 11:03:07
778
原创 除了`String`、`StringBuffer` 和 `StringBuilder`之外,还有什么处理字符串的方法?
场景推荐工具简单拼接String或操作符(编译器优化)高频修改(单线程)多线程安全修改(锁消除优化后接近)格式化拼接或集合拼接或 Stream API复杂文本处理正则表达式(PatternMatcher高性能 I/O 或缓冲区操作CharBuffer(NIO)多行字符串文本块(Java 15+)对于第三方库,可根据项目需求选择(Apache)或Strings(Guava)简化代码。
2025-04-20 18:28:18
499
原创 Java处理字符串用啥?String、StringBuilder、StringBuffer
的锁消除(Lock Elision)机制是通过**逃逸分析(Escape Analysis)**实现的,其目的是在特定场景下移除不必要的同步锁,以提高性能。在Java的版本演化中,对字符串拼接的优化主要集中在减少对象创建开销、提升拼接效率和简化代码实现等方面。若对象未逃逸出局部作用域(例如在方法内部创建且未传递到外部),JVM可安全地消除其同步锁。:在Java 6引入,优化无竞争场景下的锁性能,但锁消除进一步避免了锁的存在。方法进行锁消除(Lock Elision),尤其在局部变量场景下,其性能接近。
2025-04-20 18:26:09
1266
原创 Java基础类库常用类库 java.lang、java.util
java.lang提供核心基础类,如String处理文本、Math进行数学运算、System操作系统资源。java.util包含集合(如ArrayListHashMap)、工具类(如)、输入输出辅助(如Scanner。
2025-04-20 17:57:19
239
原创 HTTP 1.0 时代,第一次优化
这时期的使用非常简单,请求 HTML 页面,浏览器发送 GET 请求,服务器返回 HTML 内容;请求图片,浏览器再次发送 GET 请求,服务器返回图片数据。显而易见地,就有比较多的缺点,比如多次连接导致延迟和带宽浪费,又比如无法并行处理多个请求,影响加载速度。HTTP 是 “HyperText Transfer Protocol” 的缩写,即超文本传输协议。
2025-04-10 22:22:53
471
原创 计算机网络起源
从1960年代的计算机技术和分组交换技术,到1971年电子邮件的发明,再到1989年万维网的诞生,互联网在这段时间内经历了从军事用途到科研工具,再到大众化信息平台的转变。这一系列突破不仅为互联网的发展奠定了坚实的技术基础,也改变了人类交流和获取信息的方式。互联网从一个简单的数据传输网络,逐渐演变成了一个连接全球的超级信息网,深刻影响了世界的方方面面。
2025-04-10 22:15:39
672
原创 Java的四种内部类各有其用,别再记错了
Java 内部类分为四种类型:成员内部类、局部内部类、匿名内部类和静态内部类。每种类型都有其特定的用途和优缺点,选择合适的类型可以提高代码的灵活性和可维护性。
2025-04-10 22:10:16
585
原创 Java中的Exception和Error有什么区别?还有更多扩展
在Java中,Exception和Error都是Throwable的子类,用于处理程序中的错误和异常情况。
2025-04-10 22:00:34
265
空空如也
在word 的 openXml中,仅凭代码能确定段落的改变吗?
2025-02-24
TA创建的收藏夹 TA关注的收藏夹
TA关注的人