- 博客(155)
- 问答 (1)
- 收藏
- 关注
原创 git基础知识
Branch 是逻辑上的代码版本管理,一个分支只是一个指向 Commit 的引用,不会创建新的工作目录;Worktree 是物理上的工作区管理,它允许同一个仓库同时检出多个分支,每个分支对应独立的工作目录。因此,Worktree 的核心价值不是复制 Git 数据,而是让多个分支能够并行开发,避免频繁切换分支或多个开发任务互相干扰。Merge confict合并冲突,两个分支修改了同一个文件的同一行代码,需要人工决定保留哪段代码。revert:通过反向commit,抵消某次commit(推荐)
2026-07-09 11:19:22
157
原创 智能体通信协议
如何让智能体与外部世界高效交互?如何让多个智能体相互协作?MCP本质上是在把“工具调用”变成一个统一标准,就像HTTP统一了Web服务一样。你的总结“方便代码复用、扩展性强”是正确的,但更准确地说,MCP最大的价值其实是解耦 Agent 与 Tool,让工具生态可以共享。
2026-06-17 20:41:08
238
原创 上下文工程
所谓“上下文”,是指在对大语言模型(LLM)进行采样时所包含的那组 tokens。手头的工程问题,是在 LLM 的固有约束之下,优化这些 tokens 的效用,以便稳定地得到预期结果。
2026-06-16 19:01:25
170
原创 记忆(memory)与检索(RAG)
类型存储作用类比人脑Working内存当前任务上下文短时记忆Episodic某次经历情景记忆Semantic长期知识与偏好语义记忆Perceptual多模态Qdrant图片、音频、视频等感知数据感知记忆。
2026-06-16 13:50:48
173
原创 hello agent(智能体经典范式、框架开发实践)
AutoGen:AutoGen 的核心思想是通过对话实现协作AgentScope:AgentScope 是一个专为多智能体应用设计的、功能全面的开发平台CAMEL:CAMEL 提供了一种新颖的、名为角色扮演 (Role-Playing) 的协作方法LangGraph:作为 LangChain 生态的扩展,LangGraph 另辟蹊径,将智能体的执行流程建模为图 (Graph)注册、删除工具,获取所有工具描述,执行对应工具。
2026-06-12 18:20:44
208
原创 hello agent(大模型基础)
对于 RNN 而言,序列的长度就是网络的深度。它的核心思想是:将常见的词(如 “agent”)保留为完整的词元,同时将不常见的词(如 “Tokenization”)拆分成多个有意义的子词片段(如 “Token” 和 “ization”)。在这个空间里,语义上相近的词,它们对应的向量在空间中的位置也相近。上下文示例 (In-context Example) 这与少样本提示的思想一致,通过在提示中提供清晰的输入输出示例,来“教会”模型如何处理我们的请求,尤其是在处理复杂格式或特定风格的任务时非常有效。
2026-06-09 11:21:01
230
原创 agent项目,agent智能体
思考Reasoning:分析问题,判断现有信息是否足够,明确下一步,即模型决策是否需要调用外部工具获取更多信息来回答。观察Observation:获取行动的结果,提取有效信息,激活区工具返回值判断工具是否正常工作为下一轮思考提供信息。工作范式,定义大模型的工作流程,langchain的agent对象,就是按照react模式行动。重排序:通过问题和第一次向量化匹配结果两两结合,通过重排序模型,重新计算分数,精确结果。不存在,是否达到切分阈值,未达到不切分,达到切分,之后向量化入库,并保存md5值。
2026-06-08 16:05:48
186
原创 agent开发(前置知识)
PromptTemplate(简单提示词模板):表示提示词模板,可以构建一个自定义的基础提示词模版,支持变量的注入,最终生成所需的提示词。3、总结摘要:先总结历史消息中的早起消息,得到消息摘要,然后用消息摘要和最近的消息形成消息列表,在调用模型。触发器:比例(历史消息得到上限的百分比),token(token量),消息数量(多少条消息)通过余弦相似度算法计算(方法之一),思路是撇除长度影响,得到方形的夹角,夹角越小越相似。通过文本嵌入模型(深度学习等技术,从文本提取语义特征并映射为固定长度的数字序列)
2026-06-05 14:09:11
178
原创 JUC补充(ThreadLocal、completableFuture)
提供线程内局部变量,不同的线程之间不会互相干扰,这种变量在线程的声明周期内起作用,减少同一线程内多个函数或组件之间一些公共变量传递的复杂度。
2026-05-21 17:57:33
366
原创 Kafka()
特点应用场景模型两种模式kafka集群必须有zookeepertopic(主题):逻辑结构,类似mysql表,我们要在一个主题上存取数据RabbitMQ 更适合业务异步解耦RocketMQ 更适合金融事务场景Kafka 更适合高吞吐日志流与实时计算消费者组:将若干个消费者组合在一起,共同消费kafka中topic的数据消费者组中活跃消费者数量小于等于topic分区数量一个topic的一个分区只能由一个消费者消费,防止顺序混乱消费者从kafka拉取数据需要offset。
2026-05-15 19:19:30
430
原创 复原IP地址、圆环回零问题
题目描述有一个长度为 10 的环形数组(索引为 0-9)。从位置 0 出发,每一步可以向左移动一位或向右移动一位。经典动态规划:状态转移方程就是n-1步到j-1和j+1的方案数之和。步之后,最终回到位置 0 的方案数共有多少种?注意在java中(-1)%10=-1(不等于9)
2026-04-27 19:51:07
33
原创 JUC(线程池、并发锁工具)
在任务调度线程池功能加入前,可以使用java.util.Timer来实现定时功能,Timer的优点在于简单易用,但由于所有任务都是由同一线程来调度,因此所有任务都是串行执行,同一时间只能有一个任务在执行,前一个任务的延迟或异常都将会影响之后的任务。循环栅栏,用来进行线程协作,等待线程满足某个计数,构造时设置计数个数,每个线程执行到某个需要同步的时刻调用await()方法进行等待,当等待的线程数满足计数个数时,继续执行。默认不可打断,即使被打断,仍会驻留在AQS队列中,等获得锁后方可继续运行(是继续运行!
2026-04-27 15:02:46
355
原创 JUC(无锁并发)
最后将结果汇总,这样他们在累加时操作的不同cell变量,因此减少了CAS重试失败,从而提高性能。在多核状态下,某个核执行到带lock的指令时,CPU会让总线锁住,当这个核把此指令执行完毕,在开启总线,这个过程中不会被线程的调度机制所打断,保证了多个线程对内存操作的准确性,是原子的。无锁情况下,即使重试失败,线程始终告诉运行,没有停歇,而synchronized会让线程在没有获得锁的时候,发生上下文切换,进入阻塞。结合CAS和volatile可以实现无锁并发,适用于线程数少,多核CPU的场景下。
2026-04-20 16:46:33
348
原创 JUC(JMM)
JMM,定义了主存、工作内存抽象概念,底层对应着CPU寄存器、缓存、硬件内存、CPU指令优化等体现在以下几个方面:原子性:保证指令不会受到线程上下文切换的影响可见性:保证指令不会受cpu缓存的影响有序性:保证指令不会受cpu指令并行优化的影响volatile(易变关键字):他可以用来修饰成员变量和静态成员变量,他可以避免线程从自己的工作缓存中查找变量的值,必须到贮存中获取他的值,线程操作volatile变量都是直接操作主存临界区内代码(加锁),也是直接操作主存。
2026-04-16 14:08:04
264
原创 JUC(共享模型之管程、synchronized、wait、park、活跃性、renetrantlock、条件变量)
java6引入偏向锁来进一步优化,只有第一次使用CAS将线程ID设置到对象的mark word头,之后发现这个线程id是自己的就表示没有竞争,不用重新CAS,以后只要不发生竞争,这个对象就归线程所有。当撤销偏向锁阈值超过40次后,jvm会觉得,自己确实偏向错了,根本就不应该偏向,于是整个类的所有对象都会变为不可偏向的,新建的对象也是不可偏向的。如果在尝试加锁的过程中,CAS操作失败,这时一种情况就是有其他线程对此线程加上了轻量级锁(有竞争),这时需要进行锁膨胀,将轻量级锁变为重量级锁。
2026-04-14 22:17:48
400
原创 线程交替打印
用state防止虚假唤醒,也能防止信号丢失导致死锁。sychronized,配合条件变量使用。方法二:reentrantlock。方法1:park/unpark。
2026-04-14 21:53:35
40
原创 算练习(36进制加法、LC402单调栈、LC165版本号比较)
(脱字符):匹配字符串的开头。这保证了我们只处理最前面的零,而不会误伤数字中间的零(比如 105 中的 0)。优化Integer.valueOf()返回Integer对象,用parseInt()返回int。对应值->字符(Character.forDigit(int,radix))合起来的意思就是: 从字符串的最开始位置起,寻找连续出现的 0。+ (加号):这是一个量词,表示匹配 1 次或多次。如果下一位小于我,我就要被删,如果大于我不删。0:匹配字符 0 本身。我们只需要从高位开始。
2026-04-14 15:33:28
56
原创 lc902(最大为n的数字组合)+找到小于n的最大数
需要注意的是,我们找的是位数相同的,如果dfs返回false,表示位数相同的小于值不存在,我们直接将位数-1并置为最大值。从高位开始,我们尽量找等于当前的值,如果没有等于我们找小于,并把之后的数置为为最大值。在上题的基础上,我们不找小于的个数了,找小于n的最大数。注意当找到最后一个数时,返回false,因为是等于。返回结果为boolean,表示是否找到。每次dfs后需要判断是否找到。没找到需要回溯,将当前位重置。找到了就return。
2026-04-13 15:26:44
38
原创 内存模型(JMM)
JMM(java memory model):定义了一套在多线程读写共享数据时(成员变量、数组)时,对数据的可见性、有序性、原子性的规则和保障。
2026-04-04 18:23:35
369
原创 JVM类加载与字节码技术(类文件结构、字节码指令、编译期处理、类加载阶段、类加载器、运行期优化)
想加载非classpath随意路径中的类文件都是通过接口来使用实现,希望解耦时,常用在框架设计这些类希望予以隔离,不用应用的同名类可以加载,不冲突,常见于tomcat容器继承classloader父类要遵从双亲委派机制,重写findClass方法注意不是loadClass方法,否则不会走双亲委派机制读取类文件字节码调用父类的defineClass方法加载类使用者调用该类加载器的loadClass方法判断类完全一致:包名类名一致,类加载器对象也一致。
2026-04-02 15:25:33
335
原创 JVM垃圾回收
在 remark 阶段,GC 会处理该队列,对其中对象进行重新标记(补标),以保证在标记开始时仍然可达的对象不会被遗漏。当引用发生变化时,写屏障会将黑对象重新标记为灰色并加入队列,在重新标记阶段对这些对象重新扫描,从而保证当前对象图的正确性。当堆使用率达到一定阈值时,会触发并发标记,初始标记阶段会借助一次 Young GC 完成,随后进行并发标记和最终标记(Remark)。在标记完成后,G1 会执行 Mixed GC,在回收新生代的同时选择部分回收价值较高的老年代 Region,而不是全部回收。
2026-03-30 13:58:16
437
原创 JVM内存结构(程序计数器、虚拟机栈、本地方法栈、堆、方法区(串池)、直接内存)
什么是JVM:java virtual machine(java虚拟机,java的运行环境)
2026-03-24 14:36:03
381
原创 hot100(81-90)
dp列举的长度,计算时如果是用dp直接算,用s.charAt是索引,还要-1。因为其中的括号一一对应,没有能跟你组成有效括号的。为什么不存在dp[i-1]中某个括号和我匹配。
2026-03-20 21:17:27
59
原创 hot100(71-80)
将list转化为String,可以使用String.join(“”,list)注意:]字符我需要拿到字符串,时,可以用list,然后调用reverse方法。最后将栈中元素拼接即可。
2026-03-18 21:52:09
62
原创 hot100(61-70)
对于i,j的理解是,不包含我自身,前面有几个元素,比如i=1表示前面有一个元素(正好和索引0对应),这样正好i的取值范围就是0-m(一个不取,或者取全部)(m+n+1)/2找的就是k+1个数,奇数答案是前两个最大值,偶数答案是前两个最大值,和i,j最小值。每次只有numi>=prej满足才更新两个值,因为这时的值才可能是答案,更新l时,一定不是答案。
2026-03-18 14:54:21
173
原创 hot100(41-50)
左子树不为空,我们需要先将前驱节点连上root.right,然后处理当前节点,遍历下一个节点。左子树为空,当前节点就是满足的(right指向下一个节点,左子树为空)
2026-03-16 15:05:22
48
原创 hot100(31-40)
注意用LinkedList(允许加入空值)ArrayDeque不允许空值。递归 基本和归并排序一样(考试优先写,不容易错)每次计算当前节点的最大直接,去更新全局最大直径。递归当前树的左右节点最大深度(有几个节点)返回当前节点的最大深度。
2026-03-12 22:40:19
51
原创 hot100(21-30)
迭代法:思路相同,用一个虚拟节点表示当前交换后的尾结点,判断是否有后两个,有的话就交换,连接,然后指向当前尾结点,重复这个过程。
2026-03-11 22:17:20
52
原创 72.编辑距离
如果结尾一样,只需要前面dp[i-1][j-1]的最小次数。注意初始化一个为0,另一个为n的最小操作数为n。如果结尾不一样,我们分别可以通过增删改实现。当前两个子数组最想相同的操作数是。改:dp[i-1][j-1]增:dp[i][j-1]删:dp[i-1][j]跟最长子序列思路相同。
2026-03-05 19:07:47
35
原创 1143.最长公共子序列
我们可以用一维数组解决这个问题,因为当前状态跟本次的上一个状态和上一个本次状态有关,也和上一次的上一个状态有关(这个需要用一个变量每次存储)思路就是二维dp,dp[m][n]表示,第一个序列长度为m,第二个为n时的最长公共子序列。当当前两个序列的值相等时,我们更新当前最大序列长度为dp[i-1][j-1]+1。他情况为Math.max(dp[i-1][j],dp[i][j-1])
2026-03-05 18:40:10
42
空空如也
GPU没有分配给其他进程情况下出现问题,环境tf-GPU1.12
2023-09-26
为什么积分达到17会报错
2023-05-12
为什么输出的杨辉三角越界
2023-04-02
请问运行后为什么z函数哪里出现出现 missing )before constant
2022-12-11
为什么z函数出错,变量欠缺;
2022-12-11
为什么不能输出giao如果输入(
2022-11-26
输出的for循环出了什么问题
2022-10-28
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅