<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[2301_79484620的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/2301_79484620</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; 2301_79484620]]></copyright><item><title><![CDATA[AI Agent：从RAG到多智能体]]></title><link>https://blog.youkuaiyun.com/2301_79484620/article/details/162397617</link><guid>https://blog.youkuaiyun.com/2301_79484620/article/details/162397617</guid><author>2301_79484620</author><pubDate>Sun, 28 Jun 2026 20:55:48 +0800</pubDate><description><![CDATA[文章摘要：本文系统梳理了AIAgent开发的全栈知识体系，涵盖RAG检索增强生成、单智能体架构、多智能体协作等核心技术。RAG通过外接动态知识库解决大模型知识时效性、私有化和幻觉问题；单智能体包含规划、工具、记忆、反馈四大模块，支持ReAct、Plan-and-Execute等推理范式；多智能体通过分工协作处理复杂任务，依赖MCP/A2A协议实现标准化通信。文章还提供文档处理、向量数据库选型、上下文压缩等实战方案，为开发者构建完整的AIAgent开发认知框架，适配学习、实战全场景。（149字）]]></description><category></category></item><item><title><![CDATA[【机器学习入门】从零到一入门机器学习]]></title><link>https://blog.youkuaiyun.com/2301_79484620/article/details/162375127</link><guid>https://blog.youkuaiyun.com/2301_79484620/article/details/162375127</guid><author>2301_79484620</author><pubDate>Sat, 27 Jun 2026 22:45:47 +0800</pubDate><description><![CDATA[本文基于B站课程笔记，系统梳理了机器学习基础知识体系。主要内容包括：1）机器学习与传统编程的区别，核心概念解析；2）三大学习分支（监督/无监督/强化学习）及典型算法；3）重点模型讲解（线性回归、决策树、随机森林、XGBoost等）；4）无监督学习技术（聚类、降维）；5）完整项目流程与实战建议。文章以通俗方式呈现数学原理和算法思想，强调&quot;用数据解决问题&quot;的工程思维，适合初学者构建知识框架，为后续实践奠定基础。建议结合课程视频和经典教材进行拓展学习。]]></description><category></category></item><item><title><![CDATA[手写一个熔断器（附完整代码）]]></title><link>https://blog.youkuaiyun.com/2301_79484620/article/details/157618455</link><guid>https://blog.youkuaiyun.com/2301_79484620/article/details/157618455</guid><author>2301_79484620</author><pubDate>Sun, 01 Feb 2026 21:48:07 +0800</pubDate><description><![CDATA[摘要：本文介绍了一个基于滑动窗口的RPC异常比例熔断器实现，具有以下核心特性：1) 采用秒级时间桶实现精确滑动窗口统计；2) 无锁并发设计确保高性能；3) 支持CLOSED/OPEN/HALF_OPEN三态切换机制；4) 半开状态优化包括失败容忍和试探次数控制；5) 提供生产级特性如异常过滤、手动重置和监控指标暴露。该熔断器通过预计算阈值解决浮点数精度问题，并采用CAS操作保证线程安全，能够有效防止服务雪崩，同时支持平滑恢复。]]></description><category></category></item><item><title><![CDATA[applicationTaskExecutor Spring 内置线程池失效]]></title><link>https://blog.youkuaiyun.com/2301_79484620/article/details/155784471</link><guid>https://blog.youkuaiyun.com/2301_79484620/article/details/155784471</guid><author>2301_79484620</author><pubDate>Wed, 10 Dec 2025 16:37:03 +0800</pubDate><description><![CDATA[自定义线程池之后，spring内置 applicationTaskExecutor 线程池失效]]></description><category></category></item><item><title><![CDATA[PPTX 中加入输入框和按钮，文本框不为空点击按钮跳转]]></title><link>https://blog.youkuaiyun.com/2301_79484620/article/details/154850065</link><guid>https://blog.youkuaiyun.com/2301_79484620/article/details/154850065</guid><author>2301_79484620</author><pubDate>Sun, 16 Nov 2025 21:38:18 +0800</pubDate><description><![CDATA[摘要：本文记录了在WPS开发工具中实现文本框和按钮交互功能的探索过程。作者通过查阅资料最终解决了获取文本框内容的难题，发现只需使用TextEdit2.Text即可获取文本框元素。文章分享了两个关键函数代码：ToggleButton1_Click用于检查文本框是否为空并控制页面跳转，TextEdit2_Change作为文本框的响应函数。作者指出这一简单解决方案在现有教程和大模型中都难以找到，具有实际参考价值。]]></description><category></category></item><item><title><![CDATA[OS: 进程的虚拟内存空间，内核进程为什么不直接使用物理内存？]]></title><link>https://blog.youkuaiyun.com/2301_79484620/article/details/152166322</link><guid>https://blog.youkuaiyun.com/2301_79484620/article/details/152166322</guid><author>2301_79484620</author><pubDate>Sat, 27 Sep 2025 15:19:03 +0800</pubDate><description><![CDATA[本文主要探讨Linux虚拟内存管理中内核进程与普通进程的区别。内核进程由内核直接管理，没有用户态虚拟内存空间（mm_struct为NULL），全程运行在内核态执行系统任务；而普通进程拥有独立的mm_struct管理用户态虚拟空间。文章还解释了内核空间使用虚拟内存而非物理内存的原因，涉及地址转换、内存保护等机制。通过对比两类进程的内存管理结构，揭示了Linux内核设计的核心思想。]]></description><category></category></item><item><title><![CDATA[Spring二级缓存为什么不行（详细）]]></title><link>https://blog.youkuaiyun.com/2301_79484620/article/details/151153096</link><guid>https://blog.youkuaiyun.com/2301_79484620/article/details/151153096</guid><author>2301_79484620</author><pubDate>Wed, 03 Sep 2025 17:41:01 +0800</pubDate><description><![CDATA[Spring必须使用三级缓存而非二级缓存（删去三级缓存）的主要原因是解决代理对象与循环依赖的兼容性问题。当Bean需要代理时，二级缓存会导致代理对象不一致：B注入的代理对象（0x333）与最终存入一级缓存的代理对象（0x444）不同。三级缓存的延迟加载机制通过ObjectFactory动态生成代理对象，并在earlyProxyReferences中标记已代理状态，避免重复创建代理对象。若仅用二级缓存直接存储代理对象，会缺失关键的状态标记，导致初始化阶段重复生成代理对象，破坏依赖关系的一致性。]]></description><category></category></item><item><title><![CDATA[BitMap（易懂版）]]></title><link>https://blog.youkuaiyun.com/2301_79484620/article/details/150775140</link><guid>https://blog.youkuaiyun.com/2301_79484620/article/details/150775140</guid><author>2301_79484620</author><pubDate>Mon, 25 Aug 2025 17:44:35 +0800</pubDate><description><![CDATA[本文简要介绍了Bitmap的底层实现原理。Bitmap在Redis中通过C语言的SDS动态字符串实现，数据存储在buf字符数组中，每个字符占8个bit位。通过示例说明：设置第1、2、7位为1后，对应的二进制转换为十进制97，即字符'a'的ASCII码。当继续设置8-15位时，数据会存储在buf[1]位置。文章直观展示了Bitmap如何利用位操作实现高效存储。]]></description><category></category></item><item><title><![CDATA[微信小程序（通用）jwt无感刷新方案（详细 附代码）]]></title><link>https://blog.youkuaiyun.com/2301_79484620/article/details/149572320</link><guid>https://blog.youkuaiyun.com/2301_79484620/article/details/149572320</guid><author>2301_79484620</author><pubDate>Fri, 25 Jul 2025 14:15:44 +0800</pubDate><description><![CDATA[本文分享了微信小程序JWT无感刷新的实现方案。通过拦截器判断JWT是否即将过期（1小时内），若需刷新则生成新Token并放入响应头，前端通过拦截器更新本地存储。文章还对比了三种常见方案：1）双Token机制（推荐复杂场景），使用短期accessToken和长期refreshToken；2）前端主动检查（轻量场景），根据过期时间提前刷新；3）固定间隔刷新（长连接场景），定时更新Token。重点分析了当前采用的滑动刷新方案，通过响应头传递新Token实现无感续期，提升用户体验。]]></description><category></category></item><item><title><![CDATA[JAVA序列化知识小结]]></title><link>https://blog.youkuaiyun.com/2301_79484620/article/details/149515555</link><guid>https://blog.youkuaiyun.com/2301_79484620/article/details/149515555</guid><author>2301_79484620</author><pubDate>Mon, 21 Jul 2025 21:20:05 +0800</pubDate><description><![CDATA[摘要：序列化是将数据结构或对象转换为可存储或传输的格式（如二进制、JSON等），核心目的是解决对象的持久化存储和跨系统传输问题。Java中使用serialVersionUID标识类的版本以确保兼容性，static修饰的serialVersionUID也会被特殊处理进行序列化。序列化涉及对象状态的保存，非静态字段会被自动序列化，而static字段则不会被序列化。]]></description><category></category></item><item><title><![CDATA[微信小程序登录 后端对code的处理（附代码）]]></title><link>https://blog.youkuaiyun.com/2301_79484620/article/details/149508746</link><guid>https://blog.youkuaiyun.com/2301_79484620/article/details/149508746</guid><author>2301_79484620</author><pubDate>Mon, 21 Jul 2025 17:11:17 +0800</pubDate><description><![CDATA[本文介绍了使用SpringBoot处理微信小程序登录流程的方法。后端通过获取前端传来的code，向微信服务器请求获取用户的openId和session_key。为避免直接使用openId，采用AES加密处理生成userId，然后构建JWT令牌返回给前端。文章详细说明了获取code、请求微信接口获取用户信息、加密处理以及生成JWT的完整流程，并提供了相关代码实现。最终前端获取JWT后可用于后续接口的身份验证，实现完整的用户登录流程。]]></description><category></category></item><item><title><![CDATA[学习打卡网站（搭子版本）]]></title><link>https://blog.youkuaiyun.com/2301_79484620/article/details/149479768</link><guid>https://blog.youkuaiyun.com/2301_79484620/article/details/149479768</guid><author>2301_79484620</author><pubDate>Sun, 20 Jul 2025 11:38:04 +0800</pubDate><description><![CDATA[本文介绍了一个自主开发的学习打卡网站，旨在解决现有应用收费、功能不足等问题。作者在暑假期间用时两天完成开发部署，目前仅供个人使用，支持记录每日计划任务。前端采用Vue3+Vite+ElementPlus，后端使用SpringBoot+MyBatis+MySQL，采用DDD架构设计。未来计划增加用户注册、学习搭子绑定、历史查询、积分激励等功能。文章提供了源码获取方式和部署教程链接，适合想与学习伙伴共同打卡的用户参考。]]></description><category></category></item><item><title><![CDATA[前端迟迟收不到响应，登录拦截器踩坑！]]></title><link>https://blog.youkuaiyun.com/2301_79484620/article/details/149445751</link><guid>https://blog.youkuaiyun.com/2301_79484620/article/details/149445751</guid><author>2301_79484620</author><pubDate>Fri, 18 Jul 2025 15:36:04 +0800</pubDate><description><![CDATA[文章摘要：开发小程序登录后端时，作者在拦截器中使用了自定义状态码&quot;0001&quot;返回登录失败响应，导致前端无法接收。发现问题后，将状态码改为HTTP标准401即解决。原因在于HTTP协议规定状态码必须是3位数字（100-599），自定义无效状态码会导致客户端无法正确处理响应。正确的做法是遵循HTTP规范使用标准状态码，如401表示未授权。]]></description><category></category></item><item><title><![CDATA[微信小程序登录实现方案]]></title><link>https://blog.youkuaiyun.com/2301_79484620/article/details/149248661</link><guid>https://blog.youkuaiyun.com/2301_79484620/article/details/149248661</guid><author>2301_79484620</author><pubDate>Thu, 10 Jul 2025 14:50:43 +0800</pubDate><description><![CDATA[微信小程序登录实现方案主要采用前端获取code、后端校验token的方式。流程为：前端调用wx.login()获取code，后端通过code换取openId和sessionKey，将加密后的openId与生成的token关联存入Redis（设置2小时有效期）。前端保存token并在请求时携带，后端校验token有效性并更新过期时间。该方案安全性高（核心数据在后端）、扩展性强（支持分布式）、兼容性好，优于传统的Cookie+Session方案。关键点包括：openId加密存储、token动态刷新、请求拦截校验]]></description><category></category></item><item><title><![CDATA[LeetCode hot100 代码]]></title><link>https://blog.youkuaiyun.com/2301_79484620/article/details/149150410</link><guid>https://blog.youkuaiyun.com/2301_79484620/article/details/149150410</guid><author>2301_79484620</author><pubDate>Sun, 06 Jul 2025 10:48:17 +0800</pubDate><description><![CDATA[LeetCode Hot 100 代码]]></description><category></category></item><item><title><![CDATA[雅！实在是太雅了！工厂设计模式加策略设计模式]]></title><link>https://blog.youkuaiyun.com/2301_79484620/article/details/149136311</link><guid>https://blog.youkuaiyun.com/2301_79484620/article/details/149136311</guid><author>2301_79484620</author><pubDate>Sun, 06 Jul 2025 10:41:07 +0800</pubDate><description><![CDATA[摘要：文章探讨了如何通过工厂模式+策略模式优化抽奖业务中的规则过滤逻辑。传统if-else方式存在耦合度高、违反开闭原则等问题。作者提出将每种过滤规则（如黑名单、权重）实现为独立策略类，通过注解标识规则类型，并由工厂类统一管理。这种方法使系统具备良好扩展性，新增规则只需添加策略类，不影响现有代码，同时提高了代码复用性，完美符合开闭原则。最终实现优雅解耦，业务逻辑清晰可维护。]]></description><category></category></item><item><title><![CDATA[MultipartFile调用transferTo方法之后getInputStream报错]]></title><link>https://blog.youkuaiyun.com/2301_79484620/article/details/148765865</link><guid>https://blog.youkuaiyun.com/2301_79484620/article/details/148765865</guid><author>2301_79484620</author><pubDate>Thu, 19 Jun 2025 15:59:24 +0800</pubDate><description><![CDATA[【摘要】文件上传时遇到"FileNotFoundException"异常，原因是transferTo()方法将文件从临时位置转移后，导致后续getInputStream()方法无法找到原文件。分析发现transferTo()会调用renameTo()进行文件转移而非复制。提供了两种解决方案：1)在使用流之前执行transferTo()；2)创建临时文件进行分步处理，确保文件流的可用性。第二种方案更可靠，通过创建临时文件进行多次读取后，再将文件移动到最终位置。
]]></description><category></category></item><item><title><![CDATA[Ollama部署deepseek-r1模型之后，电脑重启之后ollama启动模型要重新下载]]></title><link>https://blog.youkuaiyun.com/2301_79484620/article/details/147591146</link><guid>https://blog.youkuaiyun.com/2301_79484620/article/details/147591146</guid><author>2301_79484620</author><pubDate>Mon, 28 Apr 2025 17:04:51 +0800</pubDate><description><![CDATA[Ollama部署deepseek-r1模型之后，电脑重启之后ollama启动模型要重写下载]]></description><category></category></item><item><title><![CDATA[JVM的四种垃圾回收算法]]></title><link>https://blog.youkuaiyun.com/2301_79484620/article/details/147165214</link><guid>https://blog.youkuaiyun.com/2301_79484620/article/details/147165214</guid><author>2301_79484620</author><pubDate>Sat, 12 Apr 2025 14:50:36 +0800</pubDate><description><![CDATA[本文主要讲述JVM常见的四种垃圾回收算法，即标记清除，复制，标记整理和分代收集算法。]]></description><category></category></item><item><title><![CDATA[自定义注解]]></title><link>https://blog.youkuaiyun.com/2301_79484620/article/details/147141930</link><guid>https://blog.youkuaiyun.com/2301_79484620/article/details/147141930</guid><author>2301_79484620</author><pubDate>Fri, 11 Apr 2025 16:12:48 +0800</pubDate><description><![CDATA[首先，什么是注解呢？注解有什么作用呢？我们来看一看Java 注解（Annotation）是一种元数据（metadata），可以附加在代码中的类、方法、变量、参数等元素上，用于提供额外的信息或指示编译器、框架、工具在特定阶段处理代码。注解类的属性定义和正常的不太一样，我们来看一例子：注解类型中的变量名后面要加上 () default用来指定默认值那我们就直接来看自定义注解的使用吧这是我自定义的一个注解先来看一个简单的用法，可以感觉到反射加注解的能力还是有东西的吧。]]></description><category></category></item></channel></rss>