- 博客(16)
- 收藏
- 关注
原创 滑动窗口算法详解:解决无重复字符的最长子串问题
摘要: 本文介绍了使用滑动窗口算法求解字符串中无重复字符的最长子串长度。滑动窗口通过维护动态扩展/收缩的窗口(左右指针),在O(n)时间内解决问题。基础实现通过逐步移动左指针处理重复字符,优化版本利用哈希表记录字符最后位置实现左指针跳转,减少移动次数。两种方法均需O(1)空间(字符集固定),优化版效率更高。关键点包括窗口动态调整、及时更新最大长度及重复字符的快速定位。该算法适用于子串最值、连续子序列等场景,能高效处理字符串/数组的遍历问题。代码示例展示了Java实现,并对比了两种方法的时间复杂度。
2025-08-16 11:00:25
266
原创 高并发场景下“一人一单“的解决方案与技术实现
实现"一人一单"的核心在于多层级防护用户粒度锁:控制并发入口事务代理机制:保证操作原子性数据库乐观锁:最终数据一致性保障生产环境中建议结合:分布式锁(Redisson)消息队列削峰令牌桶限流 构建全方位防护体系关键启示:技术方案的选择需平衡一致性要求与系统性能,在电商等高并发场景中,往往需要牺牲部分强一致性换取更高的可用性。
2025-07-17 16:27:56
359
原创 高并发场景下的Redis缓存架构设计与实战解析
本文介绍的高并发缓存架构实现了:多级缓存策略应对不同场景泛型+函数式编程实现缓存模板复用异步线程池提升系统吞吐量分布式锁保证数据一致性未来优化方向引入本地缓存(Caffeine)作为L1缓存实现缓存预热机制添加熔断降级策略结合布隆过滤器优化缓存穿透防护通过合理的Redis缓存设计,系统QPS可从数据库直接支撑的2000提升到Redis支撑的10万+,同时保证系统的高可用性和数据一致性。
2025-07-14 21:15:53
352
原创 深入理解AOP:面向切面编程的核心与实践
即面向切面编程,是一种编程范式,允许开发者将横切关注点(如日志、事务、性能监控)从核心业务逻辑中分离,实现代码的高效复用和解耦。使用@Order(数字)注解:数字越小优先级越高前置通知:数值小的先执行后置通知:数值小的后执行@Aspect@Order(1) // 最高优先级// ...选择通知类型需要控制方法执行 →@Around简单前置/后置处理 → 其他四类优先使用公共切入点通过@PointCut提升代码可维护性明确切面顺序默认按类名排序,重要切面使用@Order显式声明。
2025-05-20 22:23:33
415
原创 Java 资源加载详解:getClass().getClassLoader().getResourceAsStream() 的原理与应用
类加载器负责从文件系统、JAR 包或网络中加载类文件。资源查找的路径基于类加载器的搜索范围(即。:在你的项目中尝试加载资源文件,并通过打印路径验证是否成功!是常见的资源加载方法之一。加载嵌入在 JAR 包中的静态资源(如 HTML 模板、图标等)。对象包含类的元数据(如类名、方法、字段等),是反射操作的入口。:检查 Maven/Gradle 配置,确保资源目录被包含。:通过类加载器查找指定名称的资源,并返回其输入流(:资源路径错误,或文件未打包到 JAR 中。)中加载资源文件(如配置文件、图片等)。
2025-03-15 21:11:33
1960
原创 Typora 的快捷键大全
建议绑定自定义快捷键到常用导出格式(如 PDF)。(Windows/Linux)或。:部分操作直接输入符号(如。选择「高级设置」→ 编辑。生成标题)比快捷键更快。文件,按需修改快捷键。
2025-01-31 17:13:33
321
原创 Java异常处理详解
异常是程序运行过程中出现的非正常情况,会中断程序的正常执行流程。Java异常体系结构如下图所示:Throwable├── Error(系统级错误,如内存溢出)└── Exception(可处理异常)├── RuntimeException(运行时异常,如空指针)└── 其他编译时异常(如IOException)实现步骤继承Exception(编译时异常)或RuntimeException(运行时异常)添加构造方法示例代码// 无参构造super("年龄无效异常");// 带参构造。
2025-01-28 18:18:25
1425
原创 深入理解 Java 中的方法引用
寻找合适方法:首先判断是否有一个方法符合当前的需求。检查引用规则:确认该方法是否满足方法引用的规则。静态方法:使用类名方法名。成员方法:根据情况使用this或super。构造方法:使用类名new。方法引用是 Java 中一个强大的特性,它能够让代码更加简洁和易读。通过理解和掌握方法引用的不同类型和使用规则,开发者可以编写出更高效、更优雅的 Java 代码。希望本文对你理解和使用 Java 方法引用有所帮助。
2025-01-25 17:36:55
400
原创 深入理解 Java Stream 流:高效数据处理的利器
在 Java 编程领域,处理集合和数组是日常开发中极为常见的任务。Java 8 引入的 Stream 流,为我们提供了一种更为强大、高效且简洁的方式来操作数据集合,显著提升了 Java 在数据处理方面的能力,成为现代 Java 编程中不可或缺的一部分。
2025-01-25 13:28:30
913
原创 Java 不可变集合全面解析
在 Java 编程中,不可变集合是一种特殊类型的集合,一旦创建,其内容就不能被修改。这种特性使得不可变集合在某些场景下具有独特的优势。
2025-01-23 21:27:49
870
原创 深入理解 Java 双列集合:Map 家族的探索与实践
实现 Comparable 接口:让自定义类实现Comparable接口,在compareTo方法中定义比较规则。return age;@Override// 按年龄升序排序使用 Comparator 比较器:创建TreeMap时传递Comparator对象,在compare方法中定义比较规则。return age;@Override// 按姓名降序排序});
2025-01-19 11:00:46
858
原创 Set 系列集合的深入理解与应用
HashSet:是一个通用的 Set 实现,当不需要保证元素的存储和取出顺序,且需要高效的元素添加、删除和查找操作时,使用 HashSet 是一个不错的选择。但如果存储自定义对象,务必重写hashCode和equals方法。:当需要保证元素的存储和取出顺序,同时需要元素去重时,LinkedHashSet 是一个很好的选择,它在保证元素顺序方面具有优势。TreeSet:当需要对元素进行排序时,可使用 TreeSet。根据不同的需求,可以使用自然排序(通过实现Comparable。
2025-01-12 18:27:11
1722
原创 深入理解红黑树:原理、规则与操作要点
红黑树诞生于 1972 年,最初被称作平衡二叉 B 树,历经发展,1978 年定型为如今广为人知的 “红黑树”。本质上,它是特殊的二叉查找树,每个节点额外设有存储位用于标记颜色,节点颜色仅为红或黑两种。值得注意的是,红黑树并非传统意义的高度平衡二叉树,其平衡性依靠一套严谨的 “红黑规则” 来维系。红黑树在增删改查各项操作中性能卓越,得益于其精妙的红黑规则与自平衡机制。无论是大规模数据存储、检索,还是频繁动态更新场景,红黑树都能以稳定高效的表现满足需求,为算法优化与系统开发提供坚实的数据结构基础。
2025-01-11 16:19:16
636
原创 Java 泛型:让代码更灵活、更安全
泛型是一种在编译阶段就能约束操作数据类型并进行检查的强大特性。其基本格式为<数据类型>,需要特别注意的是,泛型仅支持引用数据类型。例如,我们不能直接在泛型中使用基本数据类型如intdouble等,这是因为泛型在底层的实现机制决定了它处理的是对象引用。
2025-01-10 16:09:37
1653
原创 Java Arrays.sort() 方法详解及自定义排序规则
方法是Java中用于对数组进行排序的常用方法。它支持对对象数组进行排序,并允许我们通过传递一个Comparator接口的实现来定义排序规则。
2024-11-25 16:15:38
448
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人