- 博客(88)
- 收藏
- 关注
原创 【用AI学Agent】ReAct框架(实现自主闭环,搞定复杂任务)
摘要:本文系统介绍了构建自主Agent的ReAct框架,通过"思考-行动-观察"闭环实现复杂任务处理。框架整合大模型(决策中心)、Prompt工程(思考规范)、FunctionCalling(执行工具)三大模块,并详细拆解了四大核心组件:思考模块(任务拆解与决策)、行动模块(工具调用)、观察模块(结果校验)和记忆模块(信息存储)。文章提供了完整的Python实现代码,包括工具定义、闭环循环搭建等实操步骤,并总结了5个常见开发误区及解决方案。该框架具有逻辑清晰、模块联动、自主迭代等优势,能
2026-04-03 12:23:23
284
原创 【用AI学Agent】Agent入门实操:Function Calling
本文深入探讨了Function Calling(工具调用)在Agent开发中的核心作用。文章指出,Function Calling是Agent的"手脚",使AI能够主动调用各类工具执行具体操作,弥补了大模型在实时信息、精确计算和主动行动方面的不足。作者详细解析了Function Calling的工作原理,包括大模型决策、工具调用、结果反馈和二次决策的闭环流程,并提供了从工具定义、Prompt设计到实际调用的完整实操指南。文章还总结了5个常见开发陷阱及解决方案,强调Function Cal
2026-04-02 11:33:16
581
原创 【用AI学Agent】Agent入门进阶:Prompt工程
本文深入探讨了Prompt工程在AI Agent开发中的核心作用,指出Prompt是连接用户需求与大模型输出的关键桥梁。文章首先解释了Prompt工程的定义和重要性,强调优秀的Prompt能引导大模型生成精准输出,支撑Agent的自主决策和执行。接着详细介绍了五大核心技巧:角色定位、结构化Prompt、思维链引导、输出格式规范和约束条件设置,并提供了可直接复用的示例模板。文章还区分了SystemPrompt(全局行为准则)和UserPrompt(具体任务指令)的差异与配合,列举了Agent开发中Prompt
2026-04-01 23:52:50
1050
原创 LeetCode 热题 100 之 543. 二叉树的直径 102. 二叉树的层序遍历 108. 将有序数组转换为二叉搜索树 98. 验证二叉搜索树
本文总结了四道二叉树经典题目及其解法。543题通过后序遍历计算左右子树深度之和求二叉树直径;102题使用BFS队列或双列表实现二叉树的层序遍历;108题采用递归分治法将有序数组转换为高度平衡的BST,取中间节点为根保证平衡性;98题验证BST提供了三种方法:前序区间约束法、中序递增判断法和后序子树最值法。这些题目涵盖了DFS、BFS、递归分治等核心算法,以及二叉搜索树的关键性质,是解决二叉树问题的典型范例。
2026-04-01 09:57:11
292
原创 【用AI学Agent】Agent入门前置:大模型基础(开发向)
本文系统介绍了大模型(LLM)在AI Agent开发中的基础作用。首先阐明大模型是Agent的"大脑",其通过海量数据训练获得语言预测能力,但不具备真正理解能力。重点讲解了开发必备的核心概念:上下文窗口(记忆上限)、Token(最小计算单位)、生成参数(温度、核采样等)及其对Agent的影响。同时指出大模型的四大缺陷(知识时效性、被动性、计算误差、幻觉),这正是Agent需要工具调用、RAG等技术弥补的原因。文章还详细介绍了大模型的理解与生成两大核心能力,以及思维链(CoT)在Agent
2026-03-31 23:10:18
1362
1
原创 LeetCode 热题 100 之 104. 二叉树的最大深度 226. 翻转二叉树 101. 对称二叉树
本文介绍了二叉树相关问题的两种解法:递归(DFS)和迭代(BFS)。对于二叉树最大深度问题,递归法通过比较左右子树深度取最大值加1;翻转二叉树通过交换左右子节点并递归处理;判断对称二叉树则需递归检查左右子树是否镜像。迭代法均采用队列实现,最大深度问题通过层数计数,翻转二叉树通过交换节点,对称二叉树通过成对检查镜像节点。两种方法各有优劣,递归更简洁,迭代更适合深度较大的树。
2026-03-31 13:17:09
201
原创 LeetCode 热题 100 之 131. 分割回文串 51. N 皇后
本文介绍了两个经典回溯算法问题的解法。1. 分割回文串问题:使用回溯法枚举所有可能分割点,通过双指针法或动态规划预处理判断回文子串,时间复杂度优化至O(n^2)。2. N皇后问题:采用回溯法逐行放置皇后,使用三个布尔数组标记列和两条对角线的占用情况以确保合法性,最终生成符合要求的棋盘布局。两种解法都体现了回溯算法的核心思想:尝试选择→递归→回溯撤销,同时通过预处理或约束标记来优化效率。
2026-03-30 10:39:12
226
1
原创 LeetCode 热题 100 之 39. 组合总和 22. 括号生成 79. 单词搜索
本文分析了三个经典回溯算法问题: 组合总和:通过回溯法寻找候选数组中等于目标和的所有组合。关键点在于控制遍历起点避免重复组合,并通过剪枝优化(当和超过目标时终止分支)。 括号生成:采用回溯法生成所有有效括号组合。通过约束条件(左括号不超过n,右括号不超过左括号)保证合法性,当左右括号数均达到n时得到有效解。 单词搜索:结合DFS在二维网格中搜索单词。从每个匹配首字母的单元格出发,向四个方向递归搜索,使用标记避免重复访问。灵茶山艾府的解法还加入了预处理优化(统计字符频率和反向搜索)。 三个问题都体现了回溯算法
2026-03-29 10:27:23
189
原创 LeetCode 热题 100 之 46. 全排列 78. 子集 17. 电话号码的字母组合
本文介绍了三种回溯算法经典问题的解法:全排列、子集和电话号码字母组合。全排列问题通过标记已使用数字避免重复,递归生成所有排列;子集问题采用选/不选策略或位运算枚举所有子集;电话号码问题则通过多集合笛卡尔积生成字母组合。三种解法都遵循回溯模板:做出选择→递归→撤销选择,时间复杂度均为O(2^n)量级。这些算法展示了回溯法在组合问题中的通用性和高效性。
2026-03-28 10:56:10
311
原创 LeetCode 热题 100 之 138. 随机链表的复制 148. 排序链表 23. 合并 K 个升序链表 146. LRU 缓存
本文总结了链表相关算法题的解题思路,主要包括: 随机链表的复制(138题): 哈希表法:通过两次遍历建立映射关系 原地复制法:插入副本节点后拆分链表 排序链表(148题): 归并排序:快慢指针找中点,递归拆分后合并 自底向上归并:迭代实现,空间复杂度O(1) 合并K个升序链表(23题): 优先队列:最小堆维护当前最小节点 分治法:两两合并降低时间复杂度 LRU缓存(146题): 双向链表+哈希表实现 利用LinkedHashMap简化实现 所有解法都提供了详细的代码实现和清晰的解题思路,涵盖递归、迭代、分治
2026-03-25 09:46:45
379
原创 一篇速通提示词工程 | 后端转Agent必备技能
摘要:本文为后端开发者转型Agent开发提供提示词工程速成指南。核心观点:1)Agent开发的关键在于通过提示词工程引导LLM模型,无需深入底层算法;2)后端开发者优势在于逻辑思维,提示词工程可衔接LLM与后端技术栈;3)提出4个实用技巧:明确角色目标、添加格式约束、拆解任务步骤、使用示例反馈;4)重点落地场景包括需求解析、工具调用和结果格式化。提示词工程本质是用自然语言编写LLM执行逻辑,与后端开发思路相通,是连接后端技术与Agent开发的关键桥梁。
2026-03-24 13:05:28
495
2
原创 LeetCode 热题 100 之 21. 合并两个有序链表 2. 两数相加 19. 删除链表的倒数第 N 个结点 24. 两两交换链表中的节点 25. K 个一组翻转链表
本文介绍了链表相关问题的多种解法。对于合并两个有序链表,提供了迭代法和递归法两种实现;两数相加问题采用模拟竖式加法的思路,给出迭代和递归两种解法;删除链表倒数第N个节点使用快慢指针和两次遍历两种方法;链表节点交换和K个一组翻转问题均提供了迭代和递归解法,其中K个一组翻转还给出了栈模拟的实现。各种解法都包含详细注释,展示了处理链表问题的常见技巧,如虚拟头节点、双指针、递归分治等。
2026-03-24 12:33:15
392
原创 【后端新手谈07】Java后端与前端对接,看完这篇就懂了
本文介绍了Java后端与前端对接的基本流程和注意事项。首先强调前后端需要约定接口规则,包括URL、请求方式和数据格式。接着以SpringBoot为例,详细演示了如何编写查询用户信息的接口,包括实体类、统一响应格式和控制器代码。文章还提供了前端调用接口的示例,并针对跨域问题给出解决方案。最后总结了新手常见问题,如404错误、数据解析失败等,并给出相应解决方法。核心要点是:前后端需统一接口规则,后端提供数据服务,前端调用并展示数据。建议新手从基础HTTP请求和JSON格式入手,逐步掌握完整的对接流程。
2026-03-23 16:35:59
570
原创 LeetCode 热题 100 之 160. 相交链表 206. 反转链表 234. 回文链表 141. 环形链表 142. 环形链表 II
本文总结了几种常见链表问题的解法: 相交链表:双指针法通过交替遍历两链表保证路径长度相等,时间复杂度O(n+m);长度差法先计算链表长度差再同步遍历。 反转链表:迭代法用三指针逐个翻转节点指向;递归法从后往前逐层翻转。 回文链表:快慢指针找中点+反转后半链表比较;或转为数组后用双指针比较。 环形链表检测:快慢指针法通过速度差判断是否相遇;哈希表法记录访问节点。 环形链表入口:快慢指针相遇后,重置慢指针并同速遍历,再次相遇点即为入口。 各解法均给出了代码实现和详细解释,重点突出了双指针技巧在链表问题中的高效应
2026-03-23 12:45:13
357
原创 一篇代码速通 Python 基础语法 | 新手直接上手
本文是一篇Python基础语法快速入门指南,涵盖了15个核心知识点:数据类型、运算符、条件/循环语句、容器类型、函数、异常处理、面向对象、切片、推导式、迭代器/生成器、模块导入、装饰器、with语句和三元表达式。每个知识点都配有示例代码和运行结果,特别适合有其他编程语言基础的学习者快速掌握Python语法特点。文章强调动手实践的重要性,建议读者通过修改参数和实际项目来巩固知识,并推荐优先掌握前8个基础语法。学习要点包括:动态类型特性、f-string格式化、缩进规则、推导式简化代码、装饰器增强功能等Pyth
2026-03-21 15:05:41
566
原创 【后端新手谈06】从 CRUD 到智能体:我作为 Java 后端学习者,是如何理解 Agent 开发的
摘要:本文分享了一名Java后端开发者对Agent开发的理解和学习路径。作者认为Agent是能感知需求、做决策的智能助手,而后端开发需要为其搭建框架。学习建议包括:先掌握AI基础概念,优先使用Java生态工具,将Agent模块类比后端技术(如记忆模块=会话管理)。作者规划了从简单demo到工程化的渐进学习路线,强调后端技能在Agent开发中依然重要。文章旨在为转型期的开发者提供参考,鼓励循序渐进的学习方式。
2026-03-20 13:53:01
470
原创 LeetCode 热题 100 之 33. 搜索旋转排序数组 153. 寻找旋转排序数组中的最小值 4. 寻找两个正序数组的中位数
本文总结了三种基于二分查找的经典数组问题解法:1. 搜索旋转排序数组(LeetCode 33):通过判断左右半区有序性,利用target与有序区间的关系缩小查找范围。2. 寻找旋转数组最小值(LeetCode 153):比较mid和right值,最小值总是出现在无序半区,最终收敛于left=right处。3. 寻找两个正序数组中位数(LeetCode 4):提供二分查找和顺序枚举两种解法,核心都是找到满足左半最大值≤右半最小值的分割点。关键技巧包括:处理旋转数组的有序区间判定、中位数分割点的数学特性应用、边
2026-03-20 13:39:17
487
原创 LeetCode 热题 100 之 35. 搜索插入位置 74. 搜索二维矩阵 34. 在排序数组中查找元素的第一个和最后一个位置
本文介绍了三个二分查找算法的实现:1. 搜索插入位置:通过二分查找确定目标值在有序数组中的插入位置,使用left+(right-left)/2防止整数溢出。2. 搜索二维矩阵:将二维矩阵视为一维数组进行二分查找,通过索引转换确定元素位置;或先对第一列查找确定行,再在行内查找。3. 查找元素范围:在非递减有序数组中,通过两次二分查找分别确定目标值的起始和结束位置,处理边界条件和不存在情况。所有算法的时间复杂度均为O(log n),体现了二分查找在有序数据中的高效性。
2026-03-19 10:48:35
343
原创 【后端新手谈 05】GitHub 部署静态网页不难!从 0 制作到上线全拆解
摘要:GitHub Pages是新手学习部署的最佳选择,无需服务器或域名。本文详细介绍了从创建HTML静态网页到GitHub部署的全过程:1)创建指定格式的仓库;2)上传HTML文件;3)配置GitHub Actions部署;4)验证上线。重点在于掌握"代码提交-部署配置-上线验证"的工程化思路,为后端开发打下基础。通过这个简单案例,新手可以快速理解代码部署的核心流程。(150字)
2026-03-19 10:41:58
1012
原创 【后端新手谈 04】Spring 依赖注入所有方式 + 构造器注入成官方推荐的原因
摘要:本文详细解析了Spring依赖注入的核心概念与最佳实践。首先通过反例说明仅声明变量未初始化会导致空指针异常,强调依赖注入的必要性。然后对比三种注入方式:构造器注入(官方推荐)、Setter注入和字段注入(不推荐),分析其优缺点。重点阐述构造器注入的六大优势:保证依赖不可变、避免空指针、增强可测试性、暴露循环依赖、显式声明依赖以及良好兼容性。最后建议强制依赖使用构造器注入,可选依赖使用Setter注入,彻底避免字段注入。全文旨在帮助开发者理解Spring官方推荐的依赖注入最佳实践。
2026-03-18 09:29:14
580
原创 【从零入门23种设计模式24】行为型之访问者模式
访问者模式是一种行为型设计模式,其核心思想是将数据结构与数据操作分离,使操作可以独立于数据结构变化。该模式通过定义作用于对象结构中各元素的操作接口,实现"数据不动,操作动"的效果。主要优点包括解耦数据结构与操作、集中管理同类操作、支持多态操作等,适用于数据结构稳定但操作频繁变化的场景,如电商数据统计、报表生成等。典型实现包含抽象元素、具体元素、抽象访问者和具体访问者等角色,通过双分派机制实现差异化操作。该模式在JDK、Spring等框架中广泛应用,如文件处理、SQL解析等场景。
2026-03-18 09:09:10
511
原创 【后端新手谈 03】告别满屏 try-catch!全局异常处理器的实用价值
提效:统一异常处理逻辑,减少冗余代码,降低维护成本;规范:统一返回格式,提升前后端协作效率;安全:隐藏敏感信息,同时保留详细日志便于排查问题;友好:区分异常类型,对用户返回友好提示,对开发者返回精准日志。全局异常处理器是 Spring Boot 项目 “优雅处理异常” 的最佳实践,也是从 “能用” 到 “好用、安全、可维护” 的关键一步。/*** 全局错误码枚举* 规范:* 1. 200:成功* 2. 4xx:客户端错误(参数、权限、业务规则)
2026-03-17 12:54:11
513
原创 【从零入门23种设计模式23】行为型之模板模式
摘要:模板方法模式是一种行为型设计模式,通过定义算法的固定流程骨架(父类实现)和可变步骤(子类实现)来实现流程统一和步骤定制。该模式包含抽象模板(定义流程和钩子方法)和具体模板(实现可变步骤)两个核心角色,适用于订单处理、框架扩展等需要标准化流程的场景。其优点包括代码复用、流程标准化,但可能增加类数量。与策略模式不同,模板方法侧重流程控制,策略模式侧重算法替换。典型应用包括JDK中的集合类、Spring的JdbcTemplate等。
2026-03-17 12:33:57
509
原创 【后端新手谈 02】别被流量冲垮!限流入门小知识
摘要 限流是保障系统高可用的核心手段,主要防止流量峰值打垮系统。核心算法包括固定窗口(简单易实现)、滑动窗口(解决临界问题)、令牌桶(支持突发流量)和漏桶(匀速限流)。Java实现方案分为本地限流(单实例)、分布式限流(多实例+Redis)和网关限流(全局控制)。生产环境推荐使用成熟框架如Sentinel或Resilience4j,支持动态配置和可视化监控。限流本质是在流量峰值时牺牲部分请求以保证系统核心功能可用,需根据业务场景选择合适的算法和实现方式。
2026-03-16 17:24:10
501
原创 【从零入门23种设计模式22】行为型之策略模式
策略模式是一种行为型设计模式,通过将算法封装为独立策略类实现动态切换,消除if-else分支判断。核心包含抽象策略接口、具体策略实现和上下文类三部分,支持运行时切换策略(如支付方式选择)。该模式符合开闭原则,解耦算法实现与调用方,但会增加类数量。典型应用场景包括多种算法可选(支付/排序)、需要动态切换规则的业务。在Spring框架中可通过注解驱动实现策略自动注册,JDK中的Comparator等也是策略模式的典型应用。与状态模式结构相似但意图不同,策略模式关注外部算法替换而非内部状态流转。
2026-03-16 16:53:57
476
原创 【后端新手谈 01】后端必学:轻松搞懂幂等性
摘要:幂等性是分布式系统中确保操作重复执行结果一致的关键特性,可防止数据错乱、资损和资源浪费。本文详细解析了幂等性的核心概念、业务与技术价值,并总结了6种主流实现方案:Token机制、数据库唯一索引、状态机+乐观锁、分布式锁、防重表和HTTP幂等头。同时提供了从手动测试到自动化、高并发及异常场景的完整测试方法论,强调验证"多次请求结果一致+无副作用"的核心原则。幂等性作为生产级系统的必备能力,能显著提升系统的鲁棒性和可维护性。
2026-03-15 12:24:49
578
原创 【从零入门23种设计模式21】行为型之空对象模式
摘要:空对象模式是一种行为型设计模式,通过定义实现相同接口的空对象替代null值,从而避免空指针异常和频繁的null判断。该模式包含抽象对象、真实对象、空对象和对象工厂四个核心角色,空对象通常设计为单例并返回合理默认值。典型应用场景包括数据查询、缓存处理和权限控制等,能有效简化代码逻辑并提升可读性。与JDK8的Optional相比,空对象模式更适合长期复用的核心业务对象。Spring和JDK中已有原生实现,如Collections.emptyList()和Spring Data JPA的空结果处理。
2026-03-15 11:24:07
563
原创 【从零入门23种设计模式20】行为型之状态模式
摘要:状态模式是一种行为型设计模式,允许对象在内部状态改变时改变其行为。该模式通过将每种状态封装为独立类,消除大量if/else判断,实现状态与行为的解耦。核心角色包括环境类(维护当前状态)、抽象状态接口和具体状态类。典型应用场景包括订单状态流转、电梯运行状态等。状态模式优点在于消除分支判断、提高扩展性,但可能增加类数量。与策略模式的区别在于,状态模式关注内部状态驱动的行为变化,而策略模式关注外部算法的替换。该模式在Spring状态机、JDBC连接等场景中都有应用。
2026-03-14 14:58:11
619
原创 LeetCode 热题 100 之 215. 数组中的第K个最大元素 347. 前 K 个高频元素 295. 数据流的中位数
本文总结了三个经典算法问题的解决方案。215题使用快速选择算法在O(n)平均时间复杂度内找到第K大元素,通过随机化pivot避免最坏情况。347题提供了两种解法:小根堆法(O(nlogk))和桶排序法(O(n)),后者利用频率范围有限的特性实现线性时间。295题介绍了双堆法维护数据流中位数,通过大顶堆和小顶堆的平衡操作,实现O(logn)插入和O(1)查询。特别展示了灵茶山艾府优化的极简双堆实现,通过"先插后弹"自动维持堆平衡。这些方法体现了分治、堆和桶排序等核心算法思想。
2026-03-14 14:50:28
355
原创 【从零入门23种设计模式19】行为型之观察者模式
摘要:观察者模式是一种行为型设计模式,通过定义对象间一对多的依赖关系,实现当主题(被观察者)状态变化时自动通知所有观察者。该模式核心包括主题、观察者、具体主题和具体观察者四个角色,典型应用场景如公众号推送、订单支付事件通知等。在Spring中可通过ApplicationEvent和ApplicationListener实现,具有解耦、动态扩展等优点,但需注意通知顺序、性能损耗等问题。与发布-订阅模式相比,观察者模式耦合度更高,适用于单机内的事件通知,而发布-订阅模式通过消息中间件实现完全解耦,适用于分布式系
2026-03-13 22:04:56
636
原创 LeetCode 热题 100 之 394. 字符串解码 739. 每日温度 84. 柱状图中的最大矩形
本文摘要:文章介绍了三种经典算法问题的解法。1.字符串解码问题:使用双栈法(数字栈和字符串栈)处理嵌套结构,或采用递归分解子问题;2.每日温度问题:通过单调递减栈高效查找下一个更高温度,或利用固定值域优化暴力解法;3.柱状图最大矩形问题:使用单调递增栈计算以每个柱子为高的最大面积,详细分析了示例的执行流程。三种解法均体现了栈结构的典型应用场景和算法优化思路。
2026-03-13 21:54:22
426
原创 【从零入门23种设计模式18】行为型之备忘录模式
摘要:备忘录模式是一种行为型设计模式,用于在不破坏封装性的前提下捕获对象内部状态并保存到外部,以便后续恢复。该模式通过"原发器"生成状态快照、"备忘录"存储状态、"负责人"管理快照,实现状态备份与恢复功能。典型应用场景包括文档编辑器撤销、游戏存档、事务回滚等。文章详细介绍了备忘录模式的实现原理,包括核心角色定义、UML类图、Java代码示例,以及Spring实战案例(订单状态回滚)。同时分析了模式的优缺点,比较了与原型模式的差异,并列举了JDK/S
2026-03-12 11:21:04
789
原创 LeetCode 热题 100 之 20. 有效的括号 155. 最小栈
本文介绍了两个栈相关的算法问题及解决方案。第一个是有效的括号匹配问题,通过使用栈结构,遇到左括号压入对应右括号,遇到右括号时检查栈顶是否匹配来实现。第二个是最小栈问题,通过维护一个同步的最小值栈,保证在O(1)时间内获取当前栈中最小值。两种方案都体现了用空间换时间的思想,前者重点在于括号类型的匹配验证,后者着重于维护动态最小值信息。文章还给出了空间优化版本的最小栈实现,通过只在最小值变化时操作辅助栈来节省空间。两个问题都强调了边界条件的处理和栈操作同步的重要性。
2026-03-12 11:05:30
309
原创 【从零入门23种设计模式17】行为型之中介者模式
摘要:中介者模式是一种行为型设计模式,通过引入中介对象封装对象间交互,将网状依赖转为星型结构,降低耦合度。该模式包含抽象中介者(定义交互接口)、具体中介者(实现交互逻辑)、抽象同事类(组件规范)和具体同事类(业务实现)四个核心角色。典型应用场景包括微信群聊(消息转发)、微服务网关(服务协调)等。其优势在于解耦组件、集中管理交互逻辑,但需注意避免中介者类过度膨胀。与观察者模式相比,中介者模式更强调双向协调而非单向通知。在Spring框架、消息中间件等系统中广泛应用。
2026-03-11 09:46:34
829
原创 LeetCode 热题 100 之 64. 最小路径和 5. 最长回文子串 1143. 最长公共子序列 72. 编辑距离
本文解析了四道经典动态规划题目:64.最小路径和(网格中从左上到右下的最小路径和)、5.最长回文子串(中心扩展法和Manacher算法)、1143.最长公共子序列(二维和一维DP解法)、72.编辑距离(字符串转换的最小操作数)。每道题都给出了标准解法、优化思路和详细的状态转移方程,涵盖动态规划在路径计算、字符串处理等场景的应用。其中最长回文子串提供三种解法对比,编辑距离则分析了替换/删除/插入操作的状态转移逻辑。
2026-03-11 09:33:50
498
原创 【从零入门23种设计模式16】行为型之迭代器模式
摘要:迭代器模式是一种行为型设计模式,用于解耦集合与遍历逻辑。它通过将遍历操作封装成独立迭代器对象,实现统一遍历接口,支持多线程和安全遍历。文章通过图书馆借书和点餐系统等生活案例,详细解析了迭代器模式的四个核心角色(迭代器接口、具体迭代器、聚合接口、具体聚合),并给出Java实现示例。特别展示了Spring中分页迭代器的实战应用,分析其优缺点及适用场景。最后对比了迭代器模式与访问者模式的差异,指出该模式在JDK集合框架中的广泛应用,是处理集合遍历的基础解决方案。
2026-03-10 12:30:51
762
原创 LeetCode 热题 100 之 152. 乘积最大子数组 416. 分割等和子集 32. 最长有效括号 62. 不同路径
本文总结了四个算法问题的解决方案: 152.乘积最大子数组:使用动态规划,维护当前最大值和最小值,遇到负数时交换二者,时间复杂度O(n)。 416.分割等和子集:转化为0-1背包问题,通过动态规划判断是否能凑出目标和,时间复杂度O(n×target)。 32.最长有效括号:提供两种解法:栈法(O(n)时间空间)和动态规划(O(n)时间空间),核心是追踪有效括号区间。 62.不同路径:给出组合数学公式(O(min(m,n))时间)和动态规划(O(mn)时间空间)两种解法,计算网格路径数。 这些问题都体现了动态
2026-03-10 12:23:24
602
原创 【从零入门23种设计模式15】行为型之解释器模式
解释器模式是一种行为型设计模式,用于定义语言文法并构建解释器来解析和执行该语言的表达式。它通过将规则拆解为可执行的语法单元(终结符和非终结符表达式),实现自定义规则的解析和执行。该模式适用于权限规则、动态过滤条件等简单场景,优点是规则可扩展和复用,但存在类膨胀和效率低下的缺点。典型实现包括四则运算计算器和权限规则解释器,在Spring EL、MyBatis动态SQL等框架中也有应用。与策略模式不同,解释器模式专注于语法解析而非算法选择。
2026-03-09 11:39:33
558
原创 LeetCode 热题 100 之 279. 完全平方数 322. 零钱兑换 139. 单词拆分 300. 最长递增子序列
本文介绍了四个经典动态规划问题的解法: 完全平方数问题:使用动态规划或四平方和定理求解,将问题转化为"最少硬币"问题或利用数学定理快速判断结果。 零钱兑换问题:通过动态规划求解,定义dp[i]为凑成金额i的最少硬币数,遍历硬币面额进行状态转移。 单词拆分问题:定义dp[i]表示前i个字符能否被拆分,利用HashSet加速字典查找,通过双重循环判断子串是否存在。 最长递增子序列问题:提供O(n²)动态规划和O(nlogn)贪心+二分两种解法,后者维护tails数组记录各长度子序列的最小末尾
2026-03-09 11:24:32
434
原创 【从零入门23种设计模式14】行为型之命令模式
命令模式是一种行为型设计模式,它将请求封装为独立对象,实现调用者与接收者的解耦。核心角色包括抽象命令、具体命令、接收者和调用者。模式优势在于支持请求参数化、队列化、撤销和日志记录等功能。本文通过智能家居遥控案例演示基础实现,并给出Spring企业级应用示例(订单生命周期管理),展示如何结合事务、批量执行等生产需求。模式适用于需要撤销/重做、异步执行或解耦调用关系的场景,但可能增加代码复杂度。与策略模式不同,命令模式侧重操作封装而非算法选择。
2026-03-08 12:34:43
521
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅