<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[wenjunlang的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/wenjunlang</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; wenjunlang]]></copyright><item><title><![CDATA[Java集合]]></title><link>https://blog.youkuaiyun.com/wenjunlang/article/details/161341241</link><guid>https://blog.youkuaiyun.com/wenjunlang/article/details/161341241</guid><author>wenjunlang</author><pubDate>Sat, 23 May 2026 13:38:04 +0800</pubDate><description><![CDATA[Collection下面的集合ListArrayListObject[]数组，后续有ArrayList源码分析VectorObject[]数组LinkedList：双向链表，这个其实在Redis中也有类似的说法，JDK1.6以前用的是循环链表，可以看LinkedList源码分析SetHashSet：元素无序，但是元素唯一，底层是基于HashMap实现的，底层采用HashMap保存元素：是HashSet的子类，并且其内部是通过实现的TreeSet。]]></description><category></category></item><item><title><![CDATA[Java语法糖]]></title><link>https://blog.youkuaiyun.com/wenjunlang/article/details/161323439</link><guid>https://blog.youkuaiyun.com/wenjunlang/article/details/161323439</guid><author>wenjunlang</author><pubDate>Fri, 22 May 2026 21:16:48 +0800</pubDate><description><![CDATA[JavaJava。]]></description><category></category></item><item><title><![CDATA[Java值传递]]></title><link>https://blog.youkuaiyun.com/wenjunlang/article/details/161166051</link><guid>https://blog.youkuaiyun.com/wenjunlang/article/details/161166051</guid><author>wenjunlang</author><pubDate>Sun, 17 May 2026 14:08:55 +0800</pubDate><description><![CDATA[pi-momodescription: '读取文件内容。支持 offset 和 limit 参数读取大文件的部分内容。',file_path: { type: 'string', description: '文件的绝对路径' },offset: { type: 'integer', description: '起始行号（可选）' },limit: { type: 'integer', description: '读取行数（可选）' }},},offset?: number;limit?${]]></description><category></category></item><item><title><![CDATA[L angGraph vs 链式调用]]></title><link>https://blog.youkuaiyun.com/wenjunlang/article/details/161144612</link><guid>https://blog.youkuaiyun.com/wenjunlang/article/details/161144612</guid><author>wenjunlang</author><pubDate>Sat, 16 May 2026 16:48:29 +0800</pubDate><description><![CDATA[LangGraph的核心：当Agent的执行逻辑复杂后怎么让代码变得可维护简单场景链式调用更快更高效需要分支处理、循环迭代、重试的复杂的业务逻辑场景下LangGraph更高效LangGraph是什么，核心组成，如何实现一个简单的LangGraphStateuser_input : str # 用户输入analysis : str # 中间结果result : str # 中间结果error : Optional[str] # 可选字段，error要么是Node，要么是str。]]></description><category></category></item><item><title><![CDATA[Agent Basic 完整篇]]></title><link>https://blog.youkuaiyun.com/wenjunlang/article/details/161108876</link><guid>https://blog.youkuaiyun.com/wenjunlang/article/details/161108876</guid><author>wenjunlang</author><pubDate>Fri, 15 May 2026 12:04:57 +0800</pubDate><description><![CDATA[Agent一个粗略的解释：Agent就是一个能聊天、能思考、智商250的机器人，有手有脚能够执行具体动作或者说以下几种概念之一：一个更聪明的聊天机器人一个能够自动去调用工具进行实际操作的llm一个听起来比workflow更高级的说法从工程角度来看，Agent就是一个围绕实现目标/问题持续推进执行任务的系统接收目标/用户输入的问题，不是简单的单轮对话，不是简单的输入，Agent是有上下文工程的，上下文工程+提示词工程形成了记忆层，那么Agent是有记忆功能的，在不撑爆上下文的情况下，都属于这一轮对话。]]></description><category></category></item><item><title><![CDATA[Java内存模型JMM、Volatile关键字底层原理]]></title><link>https://blog.youkuaiyun.com/wenjunlang/article/details/161007413</link><guid>https://blog.youkuaiyun.com/wenjunlang/article/details/161007413</guid><author>wenjunlang</author><pubDate>Tue, 12 May 2026 09:58:44 +0800</pubDate><description><![CDATA[本文先阐述JVM内存模型、硬件(CPU、GPU)、OS(操作系统)内存区域架构、Java多线程原理以及Java内存模型(JMM)之间的关联后，再对Java内存模型进一步剖析JavaJMMJVM。]]></description><category></category></item><item><title><![CDATA[Java内存模型JMM和volatile底层原理]]></title><link>https://blog.youkuaiyun.com/wenjunlang/article/details/160987525</link><guid>https://blog.youkuaiyun.com/wenjunlang/article/details/160987525</guid><author>wenjunlang</author><pubDate>Mon, 11 May 2026 15:59:50 +0800</pubDate><description><![CDATA[本文先阐述JVM内存模型、硬件(CPU、GPU)、OS(操作系统)内存区域架构、Java多线程原理以及Java内存模型(JMM)之间的关联后，再对Java内存模型进一步剖析JavaJMMJVM。]]></description><category></category></item><item><title><![CDATA[Agent基本概念和原理]]></title><link>https://blog.youkuaiyun.com/wenjunlang/article/details/160903298</link><guid>https://blog.youkuaiyun.com/wenjunlang/article/details/160903298</guid><author>wenjunlang</author><pubDate>Fri, 08 May 2026 22:38:04 +0800</pubDate><description><![CDATA[的核心就是抓住自主闭环。它本质上是一个可以主动完成用户提出的问题的系统，就是能够主动实现目标的系统。和传统的核心差距就是有主动性并且能做出相应的行动。传统是用户提出一个问题他就对应回答一个问题，每个问题之间都是独立的，就是一个对话系统，没有上下文，没有记忆的能力，而且没有自主行动的能力。例如你让他生成一个聊天机器人并且把这个机器人放到磁盘中的指定文件夹中，这个传统的是无法实现的，它只能给你生成对应业务的代码，其他要求他是无法实现的而对于而言是可以实现上述所说的要求的，他有自己的规划能力了，可以把用户提出的复]]></description><category></category></item><item><title><![CDATA[6.消息队列-基础篇-RabbitMQ]]></title><link>https://blog.youkuaiyun.com/wenjunlang/article/details/160033409</link><guid>https://blog.youkuaiyun.com/wenjunlang/article/details/160033409</guid><author>wenjunlang</author><pubDate>Fri, 10 Apr 2026 23:26:58 +0800</pubDate><description><![CDATA[所以在消费端。]]></description><category></category></item><item><title><![CDATA[5.消息队列-基础篇-消费者客户端SDK设计]]></title><link>https://blog.youkuaiyun.com/wenjunlang/article/details/159980529</link><guid>https://blog.youkuaiyun.com/wenjunlang/article/details/159980529</guid><author>wenjunlang</author><pubDate>Thu, 09 Apr 2026 11:28:41 +0800</pubDate><description><![CDATA[自定义分区分配算法会使用内核提供的接口，用户可以根据自身需求实现自定义算法，然后指定配置生效即可。比如 Kafka 提供了接口来提供自定义分区分 配策略。]]></description><category></category></item><item><title><![CDATA[4.消息队列-基础篇-生产者客户端SDK设计]]></title><link>https://blog.youkuaiyun.com/wenjunlang/article/details/159948244</link><guid>https://blog.youkuaiyun.com/wenjunlang/article/details/159948244</guid><author>wenjunlang</author><pubDate>Wed, 08 Apr 2026 10:14:57 +0800</pubDate><description><![CDATA[可以让用户灵活使用。内核提供接口。]]></description><category></category></item><item><title><![CDATA[3.消息队列-基础篇-存储模块]]></title><link>https://blog.youkuaiyun.com/wenjunlang/article/details/159947613</link><guid>https://blog.youkuaiyun.com/wenjunlang/article/details/159947613</guid><author>wenjunlang</author><pubDate>Wed, 08 Apr 2026 10:10:57 +0800</pubDate><description><![CDATA[数据可能是连续的，也可能是不连续的。每个节点上所有分区的数据存储在同一个“文件”：因为只有一个文件，不存在文件过多的情况，写入层面一直都会是顺序的，性能一直很高，但在消费的时候，多个分区的数据存储在同一个文件中，同一个分区的数据在底层存储上是不连续的，硬盘层面会出现随机读的情况，导致读取的性能降低。持久化存储是基本的功能，但消息队列主要是用于缓冲分发，它的数据存储是临时的，数据持久化存储后，在一定的时间或操作后，需要自动过期删除，而消息队列中的数据一般分为元数据和消息数据，元数据指的是。]]></description><category></category></item><item><title><![CDATA[2.消息队列-基础篇-网络模块]]></title><link>https://blog.youkuaiyun.com/wenjunlang/article/details/159922205</link><guid>https://blog.youkuaiyun.com/wenjunlang/article/details/159922205</guid><author>wenjunlang</author><pubDate>Tue, 07 Apr 2026 14:56:34 +0800</pubDate><description><![CDATA[最直观的思路就是阻塞等待模型，通过不断轮询等待请求，拿到数据包后交由业务线程处理，处理完之后直接把处理结果返回给客户端，但阻塞等待模型是串行处理机制，每个请求要等待上一个请求完成，就是接收到返回数据之后，处理完成了，才能轮到等待的请求进行处理，所以单个请求通常会采用异步事件驱动模型，通过。的阻塞上，可以让系统在单线程中同时处理多个客户端请求，就是仅靠单线程就可以同时处理多个客户端请求，减小了系统开销，因为仅靠单线程就可以，所以不需要去额外创建进程或线程，降低线程维护的工作量、节约资源。]]></description><category></category></item><item><title><![CDATA[1.消息队列-基础篇-通信协议]]></title><link>https://blog.youkuaiyun.com/wenjunlang/article/details/159922113</link><guid>https://blog.youkuaiyun.com/wenjunlang/article/details/159922113</guid><author>wenjunlang</author><pubDate>Tue, 07 Apr 2026 14:54:07 +0800</pubDate><description><![CDATA[消息队列的核心就是高吞吐、低延时、高可靠、所以在协议选型上，可靠性要高，不能丢失数据、性能要高、通信的延时要低、协议的内容要精简，带宽用率要高、协议具备可拓展性，方便功能的增删。协议体的设计和业务功能是密切相关的，因为协议体是携带本次请求/响应的具体内容，不同接口功能不一样，如生产、消费、确认，但在设计上是有共性的，比如极简、向后兼容、协议版本管理。从协议的角度看，一般业务需求的改变都会涉及到请求内容的修改，因为请求会包含一些业务数据，所以请求协议的变化是比较频繁的，但是返回头只需要获取到请求的唯一标识。]]></description><category></category></item><item><title><![CDATA[十一，MySQL日志篇之undo-log、redo-log、bin-log]]></title><link>https://blog.youkuaiyun.com/wenjunlang/article/details/159796280</link><guid>https://blog.youkuaiyun.com/wenjunlang/article/details/159796280</guid><author>wenjunlang</author><pubDate>Fri, 03 Apr 2026 13:51:13 +0800</pubDate><description><![CDATA[叨叨絮絮下来，就大致将MySQL中的一些常见、较为重要的日志讲明白啦，其实重点搞清楚undo-log：主要用于实现事务ACID原则中的原子性和MVCC机制。redo-log：主要用于实现事务原则中的持久性，确保事务提交后就不会丢失。bin-log：主要结合redo-log实现事务原则中的一致性，确保事务提交前后，数据的一致。对于其他几类日志，在本篇中也仅讲明了大概，毕竟后面的章节中会再出现，而对于上述三大日志也就基本上不会提到了，因此剖析的较为全面，那么咱们下篇见~，下面准备讲：《MySQL。]]></description><category></category></item><item><title><![CDATA[2，DDD领域层(Domain层)都包含什么]]></title><link>https://blog.youkuaiyun.com/wenjunlang/article/details/159765187</link><guid>https://blog.youkuaiyun.com/wenjunlang/article/details/159765187</guid><author>wenjunlang</author><pubDate>Fri, 03 Apr 2026 13:48:40 +0800</pubDate><description><![CDATA[Domain(领域)的概念领域的特性领域的用途实现手段其实有很大一部分内容在上一篇文章中就讲过了Domain。]]></description><category></category></item><item><title><![CDATA[1，DDD是什么？]]></title><link>https://blog.youkuaiyun.com/wenjunlang/article/details/159764433</link><guid>https://blog.youkuaiyun.com/wenjunlang/article/details/159764433</guid><author>wenjunlang</author><pubDate>Thu, 02 Apr 2026 15:38:39 +0800</pubDate><description><![CDATA[软件设计方法是一个复杂的领域，涉及多种概念和实践。范式提供了设计哲学，模型帮助我们理解和抽象系统，框架为开发提供了基础结构，方法论指导整个开发过程。软件设计的主要活动——建模、测试、工程、开发、部署和维护——是确保软件项目成功的关键步骤。每个活动都需要专业知识和技能，以及对应的工具和技术的支持。通过这些活动的协同工作，软件工程师能够交付高质量、满足用户需求的软件产品。]]></description><category></category></item><item><title><![CDATA[十，全解MySQL之死锁问题分析、事务隔离与锁机制的底层原理剖析]]></title><link>https://blog.youkuaiyun.com/wenjunlang/article/details/159755574</link><guid>https://blog.youkuaiyun.com/wenjunlang/article/details/159755574</guid><author>wenjunlang</author><pubDate>Thu, 02 Apr 2026 10:06:21 +0800</pubDate><description><![CDATA[死锁的概念在Java并发编程中讲解过死锁指的就是两个或两个以上的线程(或进程)在运行过程中，因为资源的竞争而造成相互等待、相互僵持的现象，如果没有外力介入去解决这个问题的话，就会一直僵持下去，一直互相等待，导致程序就无法运行了举个例子： 两个小朋友在公园捡到一把玩具弓箭，小朋友A和小朋友B都想玩这个弓箭，原本说好一人玩一次的，后来小朋友B耍赖，说要再玩一次，就一直把弓箭拿在手上，但是小朋友A不乐意了，所以小朋友A就把箭拿了，那么谁也别想玩了，就一直互相争执，互不退让。]]></description><category></category></item><item><title><![CDATA[九，MySQL之MVCC机制：为什么你改了数据我还是看不见]]></title><link>https://blog.youkuaiyun.com/wenjunlang/article/details/159728700</link><guid>https://blog.youkuaiyun.com/wenjunlang/article/details/159728700</guid><author>wenjunlang</author><pubDate>Wed, 01 Apr 2026 14:49:12 +0800</pubDate><description><![CDATA[在MySQL锁机制中，全面剖析了MySQL提供的锁机制，对于并发事务通常可以通过其提供的各类锁去确保各场景下的线程安全问题，从而能够防止脏写、脏读、不可重复读、幻读等问题虽然MySQL提供的锁机制确实能解决并发事务带来的一系列问题，但是由于加锁后会导致一部分事务串行化，而MySQL本身是基于磁盘实现的，性能是无法和内存型数据库相比的所以为了解决上述问题，MySQL官方就想出了一个MVCC机制，以另一种形式解决了并发事务造成的问题。]]></description><category></category></item><item><title><![CDATA[八，MySQL锁机制：高并发场景下如何保证数据读写的安全性]]></title><link>https://blog.youkuaiyun.com/wenjunlang/article/details/159688902</link><guid>https://blog.youkuaiyun.com/wenjunlang/article/details/159688902</guid><author>wenjunlang</author><pubDate>Tue, 31 Mar 2026 15:07:44 +0800</pubDate><description><![CDATA[看到这里，相信大家对MySQL中提供的锁机制有了全面的认识，但以目前情况而言，虽对每种锁类型有了基本认知，但本篇的内容更像一个个的点，很难和《MySQL事务篇》连成线，而对于这块的具体内容，则会放在后续的《事务与锁机制的实现原理篇》中详细讲解，在后续的原理篇中再将这一个个知识点串联起来，因为想要真正弄懂MySQL事务隔离机制的实现，还缺少了一块至关重要的点没讲到：即MVCC机制。因此会先讲明白数据库的MVCC多版本并发控制技术的实现后，再去剖析事务隔离机制的实现。]]></description><category></category></item></channel></rss>