滑动窗口
1. 长度最小的子数组题目描述给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度**。**如果不存在符合条件的子数组,返回 0 。 示例 1: 123输入:target = 7, nums = [2,3,1,2,4,3]输出:2解释:子数组 [4,3] 是该条件下的长度最小的子数组。 示例 2: 12输入:target = 4, nums = [1,4,4]输出:1 示例 3: 12输入:target = 11, nums = [1,1,1,1,1,1,1,1]输出:0 题解123456789101112131415161718192021class Solution { public int minSubArrayLen(int target, int[] nums) { int n = nums.length; int ans = n + 1;...
掌柜智库项目 Day 04|文档切割节点 node_document_split
围绕 node_document_split 节点,梳理目标 chunk 数据结构、节点作用与参数、四大切割原则与项目切割参数,并拆解语义切割的实现步骤。 本篇要点 明确入库目标:list[dict] 形式的 chunk 列表与它要携带的字段 说清 node_document_split 的作用、输入与输出(暂时不含 item_name 和向量化) 掌握四大切割原则与项目切割参数 CHUNK_MAX_SIZE / CHUNK_SIZE / CHUNK_OVERLAP / CHUNK_MIN 拆解步骤一:参数校验与数据清洗 load_markdown_content 拆解步骤二:按 # 标题语义切割 split_document 内容回顾1、上一天主题(Day03) 实现了图片处理节点 node_md_img:scan_images 取图片上下文 → 视觉模型 summarize_images 识别 → 上传 MinIO 并替换 md 内容 scan_images 会为每张图片生成 (图片名, 图片地址, (上文 100 字, 下文 100 字)) 作为识别上下文 图片...
相向双指针
1. 两数之和题目描述给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。 你可以按任意顺序返回答案。 示例 1: 123输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。 示例 2: 12输入:nums = [3,2,4], target = 6输出:[1,2] 示例 3: 12输入:nums = [3,3], target = 6输出:[0,1] 题解1. 暴力两次枚举,需要两次遍历,时间复杂度O(n²) 12345678910111213class Solution { public int[] twoSum(int[] nums, int target) { for (int i = 0; i < n; i++) { // 枚举 i ...
掌柜智库项目 Day 03|图片处理节点与 MinIO 对象存储
实现图片处理节点 node_md_img,用视觉模型识别图片内容、上传 MinIO 替换为网络地址,并完成对象存储与 LLM 的 infra 封装。 本篇要点 梳理当前图的节点状态,明确图片处理要解决的问题 实现 node_md_img:scan_images 取图片上下文 → 视觉模型 summarize_images → 上传 MinIO 并替换 md 内容 掌握 MinIO 的 docker 部署、可视化操作、桶权限 policy 与 Python 增删查 用 MinioGateway 与 LLMProvider 把对象存储和模型能力封装进 infra 回顾正则:re.escape、search/match/findall/finditer、贪婪与非贪婪 内容回顾1、上一天主题(Day02) 定义 ImportGraphState(TypedDict),共 12 个属性,配套 create_default_state / get_default_state 节点与业务分层:@node_log 装饰器 + add_running_task / ...
掌柜智库项目 Day 02|主体搭建与 PDF 文档处理
在项目骨架上定义 ImportGraphState 状态与 12 个属性,梳理节点与业务分层、搭建 LangGraph 主图,并实现 node_entry 与 node_pdf_to_md 两个节点。 本篇要点 定义导入图的 state:ImportGraphState(TypedDict) 与 12 个属性 分清”节点层”与”业务层”的职责,掌握节点统一写法 搭建 LangGraph 主图结构(builder -> add_node -> 条件边 -> compile) 实现任务分发节点 node_entry 实现 PDF 解析节点 node_pdf_to_md,顺带回顾 HTTP 协议与 requests 内容回顾1、环境搭建 使用 uv 管理项目:安装 uv、配置清华镜像、uv init --bare 初始化项目、uv venv --python=3.11 创建 .venv、pycharm 手动指定解释器。 用 uv sync 同步依赖(pyproject.toml + uv.lock),再用 uv tree 校验依赖树。 2、项目骨架 搭...
掌柜智库项目 Day 01|RAG 理解与项目环境搭建
从 RAG 的基本原理讲起,完整记录 uv 包管理工具的安装与镜像配置、项目基本包结构搭建、公共类代码导入与首次 Git 提交。 本篇要点 理解 RAG 的基本流程,明确项目为什么用 RAG 掌握 uv 的安装、镜像配置、项目初始化与依赖同步 搭建项目的基本包结构,导入项目公共类代码 把项目交给 git 管理并完成第一次提交 内容回顾1、为什么使用 RAG 现在模型的上下文窗口已经巨大了,但每次真的使用都会消耗 token;塞进去过多的内容,回答反而不准确了。 模型在某些方面有知识欠缺,不会也答(幻觉)。 2、RAG 的两条链路 准备:各种数据文件 -> text -> 嵌入式模型 -> 向量 -> 向量数据库 检索:用户提问 -> 嵌入式模型 -> 向量 -> 相似度 -> chunk -> 问题 + 上下文 -> 提示词 -> LLM -> 结果 12345准备 各种数据文件 -> text -> 嵌入式模型 -> 向量 -> 向量数据库 ...
听书项目专题|Seata 集成笔记
集中整理 Seata 的全局事务流程、应用模式、TC 服务配置,以及服务端接入的学习步骤。 本篇要点 理解 TC、TM、RM 的职责 比较不同事务模式 核对 TC 部署与客户端配置 **学习提示:**本篇为 Seata 学习与配置笔记,不能仅凭配置示例推断跨服务事务已在生产环境验证;示例口令和密钥已占位。 3 Seata概述3.1 Seata流程 使用阿里巴巴提供分布式事务框架Seata实现 Seata事务管理中有三个重要的角色: 1、TC (Transaction Coordinator) - **事务协调者:**全局事务决策者。 2、TM (Transaction Manager) - **事务管理器:**全局事务发起者。 3、RM (Resource Manager) - **资源管理器:**管理分支(本地)事务。 实现流程: 1、由TM发起开启全局事务到TC服务器 2、TC服务器开启全局事务,会返回xid(本次全局事务的id) 3、各个微服务模块分支事务,在TC服务器进行注册(注册到全局事务里面) 4、各个微服务模块执行业务SQL,把各个模块执行结果...
听书项目专题|RabbitMQ 可靠性与延迟消息
整理 RabbitMQ 生产者确认、消费者确认、重试机制,以及死信队列和延迟插件两类延迟消息方案。 本篇要点 分开看生产者、Broker 和消费者确认 了解发送失败后的重试 比较死信队列与延迟插件 **学习提示:**本篇是 RabbitMQ 机制笔记;项目实际的订单超时取消方案要以对应代码为准,消息可靠性也不等于“绝不丢失、绝不重复”。 RabbitMQ使用1、消息可靠性配置1.1、介绍MQ消息的可靠性,一般需要三个方面一起保证: 生产者不丢数据 MQ服务器不丢数据 消费者不丢数据 保证消息不丢失有两种实现方式: 开启事务模式 消息确认模式(生产者,消费者) **说明:**开启事务会大幅降低消息发送及接收效率,使用的相对较少,因此我们生产环境一般都采取消息确认模式,以下我们只是讲解消息确认模式 1.2、消息发送确认配置消息发送确认可以保证生产者不丢数据 封装发送端消息确认配置类12345678910111213141516171819202122232425262728293031323334353637383940414243@Slf4j@Componen...
听书项目 Day 17|分布式事务与 Seata
学习分布式事务方案、Seata 的 TC/TM/RM 角色与集成步骤,并整理登录模块的面试复习笔记。 本篇要点 比较分布式事务的常见方案 认识 Seata 的角色与配置 复盘登录链路和面试问答 **学习提示:**文末“自我介绍”是笔记中的示例口径,不应直接当成个人履历;Seata 配置中的示例口令和密钥已替换为占位符。 分布式事务1、分布式事务理论1.1 本地事务 在同一个数据库里面,操作多张表,保证同一个数据库多张表数据一致性,要么都成功,如果一个失败所有都失败,称为本地事务 事务四个特性:原子性、一致性、隔离性、持久性 如果不考虑事务隔离性,产生脏读、不可重复读、幻(虚)读,解决设置事务隔离级别 – MySQL默认隔离级别:可重复读 事务传播行为(经常问) – 指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行。 – REQUIRED:默认传播行为 如果当前有事务使用当前事务,如果没有创建新的事务 – REQUIRES_NEW: 新建事务 1.2 分布式事务概念 保证不同数据库中数据一致性。操作表在不...
听书项目 Day 16|充值与 XXL-JOB 任务调度
记录充值订单、支付结果处理和 XXL-JOB 的部署与接入,并复盘订单模块涉及的异步处理。 本篇要点 梳理充值订单与支付记录 学习 XXL-JOB 调度中心和执行器 复盘订单异步处理 **学习提示:**课程中的支付、延迟方案与调度配置应按实际代码和环境验证;不要把示例配置视为生产部署结果。 内容回顾1、设计模式优化你熟悉设计模式? 你项目中是否使用过设计模式? 你项目做过哪些代码级别优化? – 使用策略模式优化添加购买记录 – 使用aop + 注解方式实现专辑缓存 策略模式:使用的就是面向对象的多态机制,从而实现同一行为在不同场景下有不同实现 场景:添加购买记录 订单包含vip、声音和专辑,购买这些都需要添加购买记录,买内容不同添加记录不同 这个场景使用策略模式进行优化 – 第一步 创建接口,定义添加购买记录方法 – 第二步 根据不同购买类型比较多个实现类,创建vip、声音和专辑实现类,分别实现方法 – 第三步 创建环境类,根据不同购买类型返回不同实现类对象 2、微信支付 发起微信支付请求 查询微信支付状态 项目中,对于微信支付如何判断成功或者失败? 1 ...
