- 博客(125)
- 收藏
- 关注

原创 智能体的核心模式和架构
这个模式很像我们的职场,老板分配任务,牛马们干活像老板汇报,也是目前主流的多智能体执行模式,比如Manus就是这种执行模式。我们再回到外部的执行模式上,刚才介绍的三种执行模式ReAct、Plan-Execute、WorkForce都是目标导向的,也就是以最终完成用户任务为目的的,中间的执行过程、经过多少步骤都是动态的、不确定的。道是最本质的东西,对于智能体就是它的基本组成 和 设计模式,然后就会有很多的框架去践行这些模式,最后基于这些框架 和 用户需求又会产生一批产品,如今繁荣的智能体生态就是这么来的。
2025-03-31 22:50:01
879

原创 Manus到底是什么?
本文共分为三部分,第一部分简单记录了openManus的启动步骤,方便大家在自己电脑上部署自己的opnemanus;第二部分是结合 通义千问(免费)来使用openMenus的步骤;第三部分是全面透彻的分析Manus到底是什么?
2025-03-31 22:47:50
771
1

原创 后端接口性能优化分析
事实上,当决定进行这个后端接口分析专栏部分的时候,我是低估了工作量的,因为以我当时的认知,并没有这么多的内容,随着不断地发现新的知识点,不断地调研,不断地总结,最终,一个适合我目前经验的后端接口优化篇幅就完成了。总的来说,当完成了这部分的时候,我总体上对知识有了一个更加全面的了解,将很多的知识融汇贯通了起来,形成了一个体系,这也是我最大的收获!实际问题的优化,是根据真实发生的问题而做的优化,这部分内容主要是参考优秀的技术博客。4.空间换时间思想:恰当使用缓存。6.池化思想:预分配与循环使用。
2023-11-14 16:43:23
3650
5
原创 推理模型与普通大模型如何选择?
如任务翻译、文章改写,这些有明确输入输出的场景,用普通模型也是足够的,刚才的翻译例子虽然推理模型结果更好,站在我自己的经验来看,速度始终是这类明确任务的关键。****
2025-04-04 19:49:58
392
原创 让AI再次伟大-MCP-Client开发指南
什么是mcp的客户端呢?这个函数的作用就是通过命令运行一个mcp-server,然后使用mcp-client客户端连接这个mcp-server,要保持一个会话状态,然后我们就可以通过这个session去请求到这个mcp-server了,然后去获取到这个mcp-server所提供的工具tools了。今天简单聊聊mcp-client客户端,并接入deepseek 模型,调用我们自己的mcp server,本篇是基于之前开发好的mcp-server进行的。并且使用python去实现mcp client的客户端。
2025-04-03 22:58:26
935
原创 git常用操作汇总大全
对于程序员来说,熟练的掌握git操作是最基本的东西了,只不过会被大多数校招生或者刚工作的人所遗漏,总是过分的关注技术,但是连基本的git操作都不曾熟练掌握,因此本文章在这里为大家介绍一下。
2024-06-22 21:57:22
1508
1
原创 JVM系列-9.性能调优
1、通过arthas的trace命令,首先找到性能较差的具体方法,如果访问量比较大,建议设置最小的耗时,精确的找到耗时比较高的调用。2、通过watch命令,查看此调用的参数和返回值,重点是参数,这样就可以在开发环境或者测试环境模拟类似的现象,通过debug找到具体的问题根源。3、
2024-01-27 11:09:46
1542
原创 JVM系列-8.GC调优
1、压力比较大的服务中,尽量不要存放大量的缓存或者定时任务,会影响到服务的内存使用。2、内存分析发现有大量线程创建时,可以使用导出线程栈来查看线程的运行情况。3、如果请求确实创建了大量的内存超过了内存上限,只能考虑减少请求时创建的对象,或者使用更大的内存。4、推荐使用g1垃圾回收器,并且使用较新的JDK可以获得更好的性能。
2024-01-26 20:02:01
1747
原创 JVM系列-7内存调优
也可以基于线程入手,点开线程的支配树,里面有很多的局部变量,我们得精准的知道,这个线程执行的方法是哪一个。但是由于用户的并发请求量有可能很大,同时处理数据的时间很长,导致大量的数据存在于内存中,最终超过了内存的上限,导致内存溢出。Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。2、如果没有元素,直接放入。
2024-01-26 16:36:24
1624
原创 JVM系列-6.java垃圾回收
终结器引用指的是在对象需要被回收时,终结器引用会关联对象并放置在Finalizer类中的引用队列中,在稍后由一条由FinalizerThread线程从队列中获取对象,然后执行对象的finalize方法,在对象第二次被回收时,该对象才真正的被回收。现在这段代码,如果不打开注释的话,可以触发gc上的回收,因为我们使用的是while,当我们的循环进入到下一轮的时候,上一轮创建的三个对象就已经没有人在使用了,那么此时java虚拟机就会把这三个对象回收掉。不同垃圾回收算法,对堆内存的使用方式是不同的。
2024-01-25 11:30:36
1311
原创 JVM系列-5.java内存区域
当前类的字节码指令引用了其他类的属性或者方法时,需要将符号引用(编号)转换成对应的运行时常量池中的内存地址。方法出口指的是方法在正确或者异常结束时,当前栈帧会被弹出,同时程序计数器应该指向上一个栈帧中的下一条指令的地址。最终是不想相等的,因为c是指向了字符串常量池中的"12",而d是指向了堆内存中的"12"。Java虚拟机栈随着线程的创建而创建,而回收则会在线程的销毁时进行。used指的是当前已使用的堆内存,total是java虚拟机已经分配的可用堆内存,max是java虚拟机可以分配的最大堆内存。
2024-01-23 18:58:29
1197
原创 JVM系列-4.类加载器
一个Tomcat程序中是可以运行多个Web应用的,如果这两个应用中出现了相同限定名的类,比如Servlet类,Tomcat要保证这两个类都能加载并且它们应该是不同的类。如果不打破双亲委派机制,当应用类加载器加载Web应用1中的MyServlet之后,Web应用2中相同限定名的MyServlet类就无法被加载了。Tomcat使用了自定义类加载器来实现应用之间类的隔离。每一个应用会有一个独立的类加载器加载对应的类。先来分析ClassLoader的原理,ClassLoader中包含了4个核心方法。
2024-01-22 19:27:07
1178
原创 JVM系列-2.字节码文件详解
小李的团队昨天对系统进行了升级修复了某个bug,但是升级完之后发现bug还是存在,小李怀疑是因为没有把最新的字节码文件部署到服务器上,请使用阿里的arthas去确认升级完的字节码文件是不是最新的。Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,大大提升线上问题排查效率。文件是无法通过文件扩展名来确定文件类型的,文件扩展名可以随意修改,不影响文件的内容。jad 类的全限定名: 反编译已加载类的源码。
2024-01-21 17:44:06
1410
原创 JVM系列-1.初识JVM
JVM 全称是 Java Virtual Machine,中文译名 Java虚拟机。JVM 本质上是一个运行在计算机上的程序,他的职责是运行Java字节码文件。Java虚拟机主要是将字节码转换成机器码最后将机器码交给计算机去运行从上面就可以看到JVM的一个功能,解释和运行。
2024-01-21 17:38:31
762
原创 设计一个抽奖系统
如果设计一个抽奖系统,如何设计一个高并发的秒杀系统?这类项目在网上其实很多,但是实际的工作流到底是什么呢?难不成只有简单的数据库操作和逻辑判断吗?实际的工作流都有哪些呢?站在整体上来看都需要哪些呢?下面就以一个项目来讲解下都有什么?其实可以看到,该部分其实是DDD结构中的一个单独的领域,主要是用来走抽奖逻辑。那么实际上仅仅对于抽奖这件事来说,其实就是抽奖策略的设计。通过策略包装里面的doDraw方法选择合适的策略进行抽奖。那么核心流就是策略都有哪些?实际上关于这方面的策略主要有 总体策略 和 单项策略。
2024-01-16 23:15:15
2265
3
原创 项目压测优化实践思路
什么是压测?压力测试(英语:Stress testing)是针对特定系统或是组件,为要确认其稳定性而特意进行的严格测试。会让系统在超过正常使用条件下运作,然后再确认其结果。压力测试是对系统不断施加压力,来预估系统服务能力的一种测试。为什么对系统压测呢?有没有必要。压不压测要看场景!一般而言,只有在系统基础功能测试验证完成、系统趋于稳定的情况下,才会进行压力测试。目的是什么?当负载逐渐增加时,观察系统各项性能指标的变化情况是否有异常发现系统的性能短板,进行针对性的性能优化判断系统在。
2024-01-16 20:42:29
2227
9
原创 设计一个简单的规则引擎
上述这段代码也是真正的推理引擎的代码,来解读一下,首先获取到这课规则树,然后遍历这颗规则树,遍历的时候根据对应节点的规则key,从规则管理器中找到对应的规则,然后执行规则,获取到下一个即将要执行的规则,然后在while循环中遍历,并且将每一次找到的规则打印即可。本质上就是要完成这样的一个规则引擎,首先通过性别进行规则判断,然后是通过年龄进行规则判断,这样一个简单的规则殷勤的雏形就设计好了。所以需要设计一个动态的规则引擎,这样当有新的规则来的时候,我们不需要很大的变动,就可以完成规则的加入。
2024-01-14 11:19:26
1970
9
原创 设计一个简易版的数据库路由
相信能看这篇文章的基本上都了解HashMap的,算得上是必须要熟悉的基础知识了,初始就16个位置的数组,当我们往HashMap中存储的时候,其为了尽可能的避免HashMap碰撞,使其分布的更加均匀,做了很多的工作,如果产生了碰撞,链表和红黑树的优化做的也很好,但是这个终归是备用方案,实际上其HashMap的Hash函数设计的非常的好,其本质上是Hash函数的前十六位与后十六位异或,然后在与(size-1)与。MyBatis是一个成熟的框架,篇幅限制,这里抓大放小,来看看它的主要工作流程。
2024-01-12 22:03:38
2225
15
原创 Spring原理-8.通知调用
a. 因为 advisor 有多个, 且一个套一个调用, 因此需要一个调用链对象, 即 MethodInvocation。统一转换为环绕通知, 体现的是设计模式中的适配器模式(将一种接口转换成另一种接口,供调用 )动态的通知调用有一处和静态的不一样有参数绑定的通知调用时还需要切点,对参数进行匹配及绑定。其余的和前面介绍的都一样,只是又额外添加了after 和 around的改写。前面都是介绍静态的通知调用,那么下面来说说动态通知调用。本质上就是通过递归的方式实现了责任链的调用。那么调用链是怎么实现的呢?
2024-01-11 17:19:39
907
2
原创 Spring原理-7.切点与切面
底层切点实现是如何匹配的: 调用了 aspectj 的匹配方法如果aspectj不能满足的话,那么就使用MethodMatcher 接口, 用来执行方法的匹配,通过这个我们完全可以自行的去定义匹配规则。代理的创建时间有两个一个是无循环依赖,那么就是 创建 -> 依赖注入 -> 初始化 这三个流程中的初始化之后创建代理。如果有循环依赖,那么就是 创建 -> 依赖注入 -> 初始化 这三个流程中 依赖注入之前创建代理,并且将其存入到二级缓存当中。
2024-01-11 11:26:32
1249
原创 Mysql系列-1.Mysql基本使用
在这一章节,我们主要介绍两个部分,数据库相关概念及MySQL数据库的介绍、下载、安装、启动及连接。概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。目的:保证数据库中数据的正确、有效性和完整性。约束描述关键字非空约束限制该字段的数据不能为nullNOT NULL唯一约束保证该字段的所有数据都是唯一、不重复的UNIQUE主键约束主键是一行数据的唯一标识,要求非空且唯一PRIMARYKEY默认约束保存数据时,如果未指定该字段的值,则采用默认值DEFAULT。
2024-01-09 10:17:46
1291
10
原创 Redis系列-15.Redis的IO多路复用原理解析
模拟一个tcp服务器处理30个客户socket,一个监考老师监考多个学生,谁举手就应答谁。假设你是一个监考老师,让30个学生解答一道竞赛考题,然后负责验收学生答卷,你有下面几个选择:第一种选择:按顺序逐个验收,先验收A,然后是B,之后是C、D。。。这中间如果有一个学生卡住,全班都会被耽误,你用循环挨个处理socket,根本不具有并发能力。第二种选择:你创建30个分身线程,每个分身线程检查一个学生的答案是否正确。这种类似于为每一个用户创建一个进程或者线程处理连接。
2024-01-07 11:19:04
2550
32
原创 消息队列之堆积问题分析
根据问题描述,历史消息已经被存储到4个固定的分区中,只有新增的消息才会到新的分区中,所以我们的重点是处理已有的分区,那么回到扩容问题,因为现有分区已经和消费者组里面的消费者一对一了,所以哪怕我们增加分区,或者消费者组里面的消费者,会触发消费再均衡,但是因为突发情况导致消费者消费能力不够,所以哪怕扩容,也不会很快的改善这个堆积问题。该问题其实需要和下游进行对其,因为现在急需解决消息堆积的问题,如果你贸然使用了多线程来处理,但是没有和下游处理端进行对其,那么他们可能也会面临突增的流量,可能会造成一定的后果。
2024-01-06 10:50:40
813
2
原创 Redis系列-14.Redis经典五大类型源码及底层实现(二)
hash-max-listpack-entries:使用压缩列表保存时哈希集合中的最大元素个数。hash-max-listpack-value:使用压缩列表保存时哈希集合中单个元素的最大长度。Hash类型键的字段个数 小于 hash-max-listpack-entries且每个字段名和字段值的长度小于hash-max-listpack-value 时,Redis才会使用OBJ_ENCODING_LISTPACK来存储该键,前述条件任意一个不满足则会转换为 OBJ_ENCODING_HT的编码方式。
2023-12-30 21:40:43
1284
原创 Redis系列-13.Redis经典五大类型源码及底层实现(一)
RedisObjectt内部对应的3大物理编码ziplist为了节省内存,采用了紧凑的连续存储。ziplist是一个双向链表,可以在时间复杂度为 O(1) 下从头部、尾部进行 pop 或 push。新增或更新元素可能会出现连锁更新现象(致命缺点导致被listpack替换)。不能保存过多的元素,否则查询效率就会降低,数量小和内容小的情况下可以使用。
2023-12-30 17:52:31
2005
原创 Redis系列-16.腾讯经典面试题-如何做一个迷你版的微信抢红包呢?
每抢走一个红包就减少一个(类似减库存),那这个就需要保证库存的-----------------------原子性,不加锁实现。给你100块,分成10个小红包(金额有可能小概率相同,有2个红包都是2.58),总计有10个红包,抢一个少一个,总数显示(10/6)直到完,需要记录那些人抢到了红包,重复抢作弊不可以。2 一个总的大红包,会有可能拆分成多个小红包,总金额= 分金额1+分金额2+分金额3…3 每个人只能抢一次,你需要有记录,比如100块钱,被拆分成10个红包发出去,假设有10个人,红包总额100元。
2023-12-29 20:57:35
1606
1
原创 初识linux
1.根据网上教程配置centos虚拟机2.购买云服务器VI 是 Unix 操作系统和类 Unix 操作系统中最通用的文本编辑器。VIM 编辑器是从 VI 发展出来的一个性能更强大的文本编辑器。可以主动的以字体颜色辨别语法的正确性,方便程序设计。VIM 与 VI 编辑器完全兼容。
2023-12-29 19:06:56
1283
原创 Redis系列-12.Redis的缓存过期淘汰策略
定期删除策略的难点是确定删除操作执行的时长和频率:如果删除操作执行得太频繁或者执行的时间太长,定期删除策略就会退化成立即删除策略,以至于将CPU时间过多地消耗在删除过期键上面。因此,如果采用定期删除策略的话,服务器必须根据情况,合理地设置删除操作的。因为删除操作会占用cpu的时间,如果刚好碰上了cpu很忙的时候,比如正在做交集或排序等计算的时候,就会给cpu造成额外的压力,页面置换算法,淘汰最长时间未被使用的页面,看页面最后一次被使用到发生调度的时间长短,首先淘汰最长时间未被使用的页面。
2023-12-28 08:51:46
1458
原创 Redis系列-11.RedLock算法和底层源码分析
线程 1 首先获取锁成功,将键值对写入 redis 的 master 节点,在 redis 将该键值对同步到 slave 节点之前,master 发生了故障;redis 触发故障转移,其中一个 slave 升级为新的 master,此时新上位的master并不包含线程1写入的键值对,因此线程 2 尝试获取锁也可以成功拿到锁,此时相当于有两个线程获取到了锁,可能会导致各种预期之外的情况发生,例如最常见的脏数据。
2023-12-27 20:56:49
1307
原创 Redis系列-10.Redis分布式锁
setnx,只能解决有无的问题,够用但是不完美hset,不但解决有无,还解决可重入synchronized单机版可以,但是上分布式死翘翘nginx分布式微服务单机锁不行如果取消宕机所,可以考虑上redis分布式锁setnx但是只是加了锁,没有释放锁,出现异常的话,可能无法释放锁,必须要在代码层面finally释放锁宕机了,部署了微服务代码层面根本没有走到finally这块,没办法保证解锁,这个key没有被删除,需要有lockkey的过期时间设定。
2023-12-26 14:56:10
970
原创 Redis系列-9.Redis布隆过滤器BloomFilter
由一个初值都为零的bit数组和多个哈希函数构成,用来快速判断集合中是否存在某个元素目的减少内存占用方式不保存数据信息,只是在内存中做一个是否存在的标记flag本质上就是判断具体数据是否存在于一个大的集合中布隆过滤器(英语:Bloom Filter)是 1970 年由布隆提出的。它实际上是一个很长的二进制数组(00000000)+一系列随机hash算法映射函数,主要用于判断一个元素是否在集合中。
2023-12-25 12:54:19
1135
原创 Redis系列-8.Redis案例实战之Bitmap、Hyperloglog、GEO
Unique Visitor 独立访客,一般理解为客户单ip,一般需要做去重考虑。Page View 页面浏览量,不需要考虑去重Daily Active User 日活跃用户量:登陆或者使用了某个产品的用户数(去掉重复登陆的用户)常用于反应网站、互联网应用或者网络游戏的运营情况Monthly Active User:月活跃用户量。
2023-12-25 12:51:42
1245
原创 Redis系列-7.Redis缓存常见问题之预热、雪崩、击穿、穿透
1 比较懒,什么都不做,之前对mysql做了数据新增,利用redis的回写机制,让它逐步实现100条新增记录的同步,最好提前晚上部署发布版本的时候,由自己人提前做一次,让redis同步了,不要把这个问题留给客户。请求去查询一条记录,先插redis无,后查mysql无,都查询不到该条记录,但是请求每次都会打到数据库上面去,导致后台数据库压力暴增,这种现象我们成为缓存穿透,这个redis变成了一个摆设。简单说就是,本来无一物,两库都没有,机不再redis缓存库,也不再mysql,数据库存在被多次暴击风险。
2023-12-25 12:44:33
1256
原创 Redis系列-4.Redis持久化
需要注意的是,RDB 是默认持久化方式,但 Redis 允许 RDB 与 AOF 两种持久化技术同时开启,此时系统会使用 AOF 方式做持久化,即 AOF 持久化技术的优先级要更高。在持久化时,先将 SOF、rdb_version 及内存数据库中的数据快照这三者的二进制数据拼接起来,形成一个二进制数(假设称为数 a),然后再使用这个 a 除以校验和 check_sum,此时可获取到一个余数 b,然后再将这个 b 拼接到 a 的后面,形成 databases。不同的持久化方式,其数据的丢失率也是不同的。
2023-12-25 09:58:48
944
原创 Redis系列-6.Redis缓存双写一致性问题
👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring源码、JUC源码、Kafka原理、分布式技术原理、数据库技术🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦🍂博主正在努力完成2023计划中:源码溯源,一探究竟📝联系方式:nhs19990716,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬👀文章目录缓存双写一致性问题经典面试题引入缓存双写一致性的理解如何写数据库和缓存一致性的几种更新策略目的可以停机的情况四种更新策略先
2023-12-25 09:52:14
1024
原创 Redis系列-1.Redis浅谈
模拟一个tcp服务器处理30个客户socket。第一种选择(轮询):按顺序逐个验收,先验收A,然后是B,之后是C、D。。。这中间如果有一个学生卡住,全班都会被耽误,你用循环挨个处理socket,根本不具有并发能力。第二种选择(来一个new一个,1对1服务):你创建30个分身线程,每个分身线程检查一个学生的答案是否正确。这种类似于为每一个用户创建一个进程或者线程处理连接。第三种选择(响应式处理,1对多服务),你站在讲台上等,谁解答完谁举手。
2023-12-22 09:56:22
1426
原创 Mysql系列-3.Mysql的SQL优化和锁
在之前的测试中,我们发现,如果数据量很大,在执行count操作时,是非常耗时的。MyISAM 引擎把一个表的总行数存在了磁盘上,因此执行 count(*) 的时候会直接返回这个数,效率很高;但是如果是带条件的count,MyISAM也慢。InnoDB 引擎就麻烦了,它执行 count(*) 的时候,需要把数据一行一行地从引擎里面读出来,然后累积计数。如果说要大幅度提升。
2023-12-21 22:05:39
1126
1
Mysql 运维篇总结理解
2023-11-10
mysql进阶版笔记总结
2023-11-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人