自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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

原创 智能体入门coze

Agent是能够感知环境、自主决策、使用工具完成任务的智能体。

2026-05-25 17:58:29 33

原创 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

原创 JUC(线程安全集合类)

加锁。

2026-04-28 18:46:52 384

原创 复原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(不可变类)

final的使用:属性用final修饰保证了该属性是只读的,不能修改。

2026-04-21 14:47:24 34

原创 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

原创 JUC(入门1-3章)

JMH性能测试工具。

2026-04-06 21:01:39 373

原创 内存模型(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(91-100)

当然可以采用中心扩展法。

2026-03-23 12:56:32 56

原创 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(51-60)

【代码】hot100(51-60)

2026-03-17 11:54:51 36

原创 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

原创 hot100(11-20)

【代码】hot100(11-20)

2026-03-10 22:20:01 34

原创 hot100(1-10)

【代码】hot100(1-10)

2026-03-10 11:44:54 46

原创 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

原创 5.最长回文子串

中心只能是一个或者两个元素,我们遍历中心,记录最长值。

2026-03-05 13:34:42 30

原创 64.最小路径和

思路和62不同路径一样,只是每次不是累加而是最小值加当前值。特别需要注意边界情况(只能从一个方向到达)

2026-03-04 16:45:08 30

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除