LRU缓存机制

本文介绍了如何设计并实现一个满足LRU(最近最少使用)缓存约束的数据结构。LRUCache类需要支持初始化、获取数据(get)和插入/更新数据(put)操作,并且这些操作必须以O(1)的平均时间复杂度运行。为达到此目的,采用了HashMap与双向链表相结合的方法:HashMap用于快速查找缓存项,而双向链表则用于维护访问顺序,确保能够高效地移除最久未使用的元素。文章还提供了两种实现方式的代码示例,第二种通过引入虚拟头尾节点简化了链表操作逻辑,使得代码更加简洁易懂。

禾几海 发布于 2025-11-15

滑动窗口解法

本文介绍了三道与滑动窗口相关的LeetCode题目及其解法。首先,针对无重复字符的最长子串问题(第3题),通过滑动窗口方法,利用两个指针分别表示子串的左右边界,不断向右移动右指针以扩大窗口,直到遇到重复字符时停止,并记录此时的子串长度;然后移动左指针缩小窗口,移除不再属于窗口范围内的字符,继续尝试扩大窗口。其次,在存在重复元素II问题(第219题)中,使用固定大小为k的滑动窗口来检测数组内是否存在满足条件的索引对。最后,对于寻找长度最小且和大于等于给定值的子数组问题(第209题),采用滑动窗口策略,维护一个总和变量及起始位置指针,当当前窗口内元素之和达到或超过目标值时,更新最小子数组长度,并调整窗口大小。以上方法均能有效提高算法效率。

禾几海 发布于 2025-11-13

快慢指针的艺术:从链表环探测到数组去重

本文详细介绍了快慢指针这一算法技巧,通过两个以不同速度移动的指针解决复杂问题。文章首先定义了快慢指针的基本概念:慢指针每次移动一步,而快指针通常移动两步。接着,文章列举了快慢指针的主要应用场景,包括链表环检测、寻找环入口节点、确定链表中间节点以及数组去重等,并提供了具体实现代码。特别地,“历史窗口”概念被引入来解释快慢指针在数组操作中的应用原理。最后,文章总结了使用快慢指针时需要注意的关键点及该技术带来的算法思维优势。

禾几海 发布于 2025-10-18

香格里拉

本文讲述了作者与朋友计划并前往云南旅行的故事。起初,他们决定去云南,并用一个月的时间精心准备行程、查天气及打包行李等。原定路线是从杭州出发,经昆明转机至香格里拉游玩,再前往大理和昆明,最后返回杭州。虽然原计划中包含丽江泸沽湖两天的行程,但由于在大理玩得太累而取消了这部分安排,但作者表示未来还会再去。旅程开始时,他们临时决定改乘飞机而非高铁前往香格里拉,在早班飞机上还幸运地观赏到了美丽的日出景色。

禾几海 发布于 2025-10-07

Spring中的异步任务-Async注解的深度解析

本文详细介绍了Spring框架中的异步任务处理机制。首先,通过`@Async`注解可以标记方法为异步执行,需要在配置类上添加`@EnableAsync`来启用异步支持。文章提供了无返回值和有返回值的异步方法示例,并展示了如何使用自定义异常处理器来处理异步方法中可能出现的异常。接着,深入分析了Spring异步任务的启动过程,包括`@EnableAsync`的作用、代理配置以及核心后处理器`AsyncAnnotationBeanPostProcessor`的工作原理。此外,还探讨了异步切面`AsyncAnnotationAdvisor`和方法拦截器`AnnotationAsyncExecutionInterceptor`的角色,以及它们如何协同工作以实现异步任务的调度与执行。最后,总结了默认执行器配置、异常处理策略及完整的调用流程,并给出了一些最佳实践建议,如合理配置线程池和注意`@Async`使用的限制条件。

禾几海 发布于 2025-05-17

分享手机中的夕阳

该文通过三段小故事,分享了作者在不同时间点捕捉到的美丽瞬间。首先是在上班途中偶然发现的一幕美景,接着是周五下午请假时,在阳台上欣赏到了壮丽的日落景色;最后,则是在周六接朋友下班的路上,又意外地遇到了令人赏心悦目的景象。这三幅画面不仅展现了自然之美,也反映了生活中不经意间遇到的美好时刻能够给人带来的心情愉悦与放松。

禾几海 发布于 2025-01-15