leecodecode【面试150】【2026.7.10打卡-java版本】
今天把剩下的困难直接过了打算把时间放在再刷一遍acm版本的hot100上面。就举一些有用的题吧寻找两个正序数组的中位数class Solution { public double findMedianSortedArrays(int[] A, int[] B) { int m A.length; int n B.length; int len m n; int left -1, right -1; int aStart 0, bStart 0; for (int i 0; i len / 2; i) { left right; if (aStart m (bStart n || A[aStart] B[bStart])) { right A[aStart]; } else { right B[bStart]; } } if ((len 1) 0) return (left right) / 2.0; else return right; } }两数之和要点hash。acm版本的package hash; import java.awt.desktop.SystemEventListener; import java.util.*; public class lc1 { /*. 两数之和 给定一个整数数组 nums 和一个整数目标值 target请你在该数组中找出 和为目标值 target 的那 两个 整数并返回它们的数组下标。 你可以假设每种输入只会对应一个答案并且你不能使用两次相同的元素。 你可以按任意顺序返回答案。 示例 1 输入nums [2,7,11,15], target 9 输出[0,1] 解释因为 nums[0] nums[1] 9 返回 [0, 1] 。 */ public int[] twoSum(int[] nums, int target){ MapInteger, Integer map new HashMap(); int sum 0; for(int i 0; i nums.length; i){ if(map.containsKey(target - nums[i])){ return new int[]{map.get(target - nums[i]), i}; } map.put(nums[i], i); } return new int[]{}; } public static void main(String[] args){ //twosum的测试 int[] nums new int[]{2,7,11,15}; int target 9; lc1 c new lc1(); int[] result c. twoSum(nums, target); System.out.println(Arrays.toString(result)); } }随即知识 第一步先区分“计算缓存”和“业务记忆”避坑面试时千万不要把 Memory 和 KV Cache 搞混KV Cache你昨天学的是显存里的浮点数矩阵为了加速 Decode 计算模型重启即消失属于硬件计算缓存。Memory今天要学的是业务层面的结构化数据用户说了什么、喜欢什么、做了什么存储在数据库/向量库里属于应用层持久化状态。搞清这个区分面试官会立刻觉得你脑子里有清晰的“分层架构观”。️ 第二步LLM 记忆的“三层金字塔”大厂标准框架层级名称存储介质生命周期典型内容第一层感知记忆工作记忆模型上下文窗口Prompt单次会话窗口内当前对话的最近几轮、当前任务的指令第二层短期记忆会话记忆内存缓存 / Redis单次会话从开始到结束本次对话的完整历史、用户当前的临时偏好第三层长期记忆持久记忆向量数据库 / SQL / 图数据库跨会话、永久用户的长期画像、历史事实、文档知识库 第三步每一层的核心实现机制面试硬核1. 感知记忆工作记忆实现方式直接塞进 System Prompt 或 User Prompt。痛点受限于Context Window上下文窗口。比如窗口只有 128K聊 500 轮就塞不下了。解决方案滑动窗口Sliding Window——只保留最近 K 轮对话更早的丢掉或摘要Summarization——把早期对话压缩成一段摘要放在 System Prompt 里。2. 短期记忆会话记忆实现方式把完整的用户-助手对话历史存进Redis每次请求时拉取最近的 N 轮。为什么需要它Agent 在做复杂任务比如多步工具调用时中间步骤的上下文必须随时可回溯。关键工程点TTL过期时间——会话 30 分钟无活动自动清除释放内存。3. 长期记忆持久记忆这是面试官最爱的深挖点分三类A. 事实记忆Fact Memory用户明确的属性例如“我叫张三住北京”。存SQL / KV 数据库每次对话开始时拉取塞进 Prompt。B. 语义记忆Semantic Memory用户历史行为的隐含偏好比如“喜欢问深度技术问题”。用Embedding 向量数据库做检索根据当前问题召回相关历史记忆片段这其实就是RAG 在记忆领域的应用。C. 程序记忆Procedural Memory用户偏好的回复风格“要简洁”、“要幽默”。存成Key-Value 配置注入 System Prompt。 第四步记忆的“读取与写入”时机流程透视图面试官如果问“记忆怎么工作的”你可以按这个时间线答写存储每轮对话结束后异步抽取关键信息用一个小模型或 LLM 做记忆提取Memory Extraction比如“用户提到了新城市”存入 DB/向量库。读检索新请求进来时先读取用户画像SQL再向量召回历史相关记忆向量库最后拼成增强版 System Prompt。更新冲突解决如果用户说“我之前说的是错的现在改口了”要支持覆盖/时间戳优先级类似数据库 Upsert。 面试标准满分话术直接背“面试官大模型应用里的 Memory核心目标是让 Agent 拥有‘跨会话的连续认知’。它不是 KV Cache 那种硬件缓存而是应用层的状态管理。我把它设计为三层工作记忆当前上下文窗口用滑动窗口或摘要控制 Token 成本会话记忆Redis 缓存带 TTL 自动过期长期记忆向量库 SQL存用户画像和历史事实每次请求前异步检索。在工程实现上最关键的不是存而是‘检索精度’和‘写入策略’——读必须做向量召回 时间新鲜度加权不能把所有历史都塞进去否则窗口必爆写必须用异步小模型做记忆蒸馏Memory Distillation把冗长对话提炼为 3-5 个关键事实而不是存对话原文太贵且噪声大。此外还要处理‘记忆冲突’如果用户今天说‘我不吃辣’明天说‘我想吃火锅’系统应该用时间戳覆盖或者引入置信度衰减。” 面试官最爱的追问防坑指南追问如果用户有 10 年记忆向量库返回 100 条相关片段全塞进 Prompt 窗口会爆怎么办你回降维打击“我会做两级检索。第一级用向量库粗召回 Top 100第二级用Re-Rank精排模型精选出最相关的 Top 5-10 条只有这些才能进入上下文窗口。这叫‘检索-排序-裁剪’流水线。如果上下文还是紧张我会把记忆片段用 LLM压缩成短摘要再塞入或者采用MemGPT分层记忆架构把旧记忆放到外部存储需要时再换入窗口。”碎碎念后续会更新每天学习的八股和算法 题开始准备秋招的第61天。努力连续更新100天以后每天就按秋招项目【java agent】科研必做项目算法八股锻炼身体来总结。总结今天干了一整天的杂活哎要不是为了点工资少得可怜但是不去上班又没钱感觉更惨周五又放纵一下。种一棵树最好的时间是现在没关系抓紧小空隙时间学习。1.算法面试150 133/150 2h通关了算2.秋招项目【java 项目】【agent 项目 】3.科研。真得搞了要不然毕不了业就完蛋了。4.实习纯杂活6.背八股java八股过一遍了ai只能说努力吧7.锻炼身体最近水逆身体也是还不容易能走路还不能长时间走路。少玩手机吧发现一天还是中午下班玩2小时然后晚上舍不得睡觉还能玩1个多小时居然一天能玩三四个小时的手机。确实还是对自己太好了。