摘要: 一文看懂 JVM 内存布局及 GC 原理 注:本文篇幅较长,且需要有一定的java基础,建议各位看官,备好瓜子、饮料、小板凳,摆个让自己舒服的姿势,慢慢细看^_^, 文中素材均来自互联网(末尾有给出参考文章链接)。 一、JVM运行时内存布局 按java 8虚拟机规范的原始表达:(jvm)Run-Time Data Areas, 暂时翻译为" 阅读全文
posted @ 2019-06-11 14:20 菩提树下的杨过 阅读(6517) 评论(5) 推荐(11)
摘要: java:线上问题排查常用手段 一、jmap找出占用内存较大的实例 先给个示例代码: import java.util.ArrayList; import java.util.List; import java.util.concurrent.CountDownLatch; /** * Created by 菩提树下的杨过 on 阅读全文
posted @ 2017-09-07 11:43 菩提树下的杨过 阅读(4491) 评论(2) 推荐(5)
摘要: Agent设计模式学习(基于langchain4j实现)(7) - 监督者模式 书接上回,这次学习一种更高级的模式:监督者模式。职场上的牛马们,大家回想一下,每次部门的OKR,是怎样层层拆解最终落地的?是不是得有一个大佬(即:监督者),根据OKR先做拆解计划(plan),然后把活儿派给各组去落地(action),中间还会时不时的review? 这个就叫做监督者模式。 仍然还是这 阅读全文
posted @ 2026-01-18 19:24 菩提树下的杨过 阅读(65) 评论(0) 推荐(0)
摘要: Agent设计模式学习(基于langchain4j实现)(6) - 组合复杂工作流 前面已经学习了 顺序、循环、条件分支、并行 这4种基本的工作流编排方式,利用这些可以组合出各种复杂的逻辑。下面将前面招聘的整个流程串起来,做一个相对比较完整的工作流: 宏观上,1-2-3是面向候选人的,4-5-6是面向公司招聘团队的。 一、定义Agent 1.1 CandidateWorkflow 阅读全文
posted @ 2026-01-18 17:09 菩提树下的杨过 阅读(46) 评论(0) 推荐(0)
摘要: Agent设计模式学习(基于langchain4j实现)(5) - 条件工作流 书接上回,简历评估完后,根据评估结果,如果合格,公司就该通知面试,否则回邮件拒绝。也就是今天要演示的“条件工作流”。下面定义这2个分支对应的Agent: 一、定义不同分支的Agent 1.1 EmailAssistant (发邮件拒绝候选人Agent) 1 public interface Emai 阅读全文
posted @ 2026-01-17 20:29 菩提树下的杨过 阅读(38) 评论(0) 推荐(0)
摘要: Agent设计模式学习(基于langchain4j实现)(4) - 并行工作流 书接上回,现在简历已经润色得足够好了,投递到了HR手上,假设跟候选人也做了初步的电话沟通。接下来,公司需要对候选人做如下审查: 经理:针对简历,结合招聘岗位要求,审查简历是否符合要求(包括优点和不足) HR:针对简历,结合电话沟通记录以及HR招聘相关要求,审查简历是否适合(包括优点和不足) 团队成员 阅读全文
posted @ 2026-01-17 16:02 菩提树下的杨过 阅读(46) 评论(0) 推荐(0)
摘要: Agent设计模式学习(基于langchain4j实现)(3) - 循环工作流 接上节继续,仍然还是这个简历优化的示例,这次引入1个 “简历审阅者(CVReviewer)”的角色,定义如下: public interface CvReviewer { @Agent("根据特定指示审阅简历,提供反馈和分数。请考虑简历与职位要求的匹配程度") @SystemMessage(""" 阅读全文
posted @ 2026-01-15 20:24 菩提树下的杨过 阅读(31) 评论(0) 推荐(0)
摘要: Agent设计模式学习(基于langchain4j实现)(2) - 顺序工作流 接上节继续,本篇将演示 顺序工作流的实现(即:Building Effective AI Agents \ Anthropic 中的 Prompt Chain模式) 上一节,我们学会了如何基于个人资料,生成一份简历。有了简历,自然要投递到某个招聘岗位,假设有个“全栈工程师”的岗位JD要求如下: jo 阅读全文
posted @ 2026-01-12 20:59 菩提树下的杨过 阅读(50) 评论(0) 推荐(0)
摘要: Agent设计模式学习(基于langchain4j实现)(1) - 基础Agent用法 自近年AI智能体火爆以来,各种相关的框架和最佳实践也不断涌现,Anthropic公司2024年发布的Building Effective AI Agents \ Anthropic 无疑是最有影响力的指导文章之一,langchain4j在此影响之下,也实现一系列的workflow编排&Agent功能 阅读全文
posted @ 2026-01-11 20:04 菩提树下的杨过 阅读(105) 评论(0) 推荐(0)
摘要: langchain4j 学习系列(9)-AIService与可观测性 接上节继续,到目前为止,我们都是使用的ChatModel、ChatMessage、ChatMemory这类相对低层的low level API来实现各种功能。除了这些,langchain4j还提供了更高抽象级别的AIService,可以极大简化代码。 一、基本用法 1.1 定义业务接口 1 /** 阅读全文
posted @ 2026-01-11 14:24 菩提树下的杨过 阅读(25) 评论(0) 推荐(0)
摘要: langchain4j 学习系列(8)-链式调用 接上节继续,langchain4j的名字中既然有个chain,自然要体现出链式调用的特性。根据官网的介绍,目前langchain4j内置了2个chain 一、ConversationalChain示例 @GetMapping(value = "/chat/chain", produces = Med 阅读全文
posted @ 2026-01-03 21:34 菩提树下的杨过 阅读(20) 评论(0) 推荐(0)
摘要: langchain4j 学习系列(7)-文本分类 继续我们的langchain4j学习之旅,很多“智能客服”之类的AI应用,“问题分类”是非常重要的功能之一。比如:客人进来咨询问题,得判断出客人的问题是“订单相关”(比如:我要取消订单),还是“支付相关”(比如:我要退款),还是“投诉相关”(比如:你们的服务太差了,我要投诉到相关部门)。识别出对应分 阅读全文
posted @ 2025-12-09 21:29 菩提树下的杨过 阅读(45) 评论(0) 推荐(0)
摘要: langchain4j 学习系列(6)-结构化输出(参数提取) 继续学习langchain4j,玩过dify的朋友想必对"参数提取器"这个节点很熟悉,示例: 参数提取器可以很方便的从“非结构的自然语言”中,提取出结构化的结果。 下面来看看langchain4j如何实现类似功能: public static final String TEST_DATA = """ 阅读全文
posted @ 2025-12-08 19:39 菩提树下的杨过 阅读(32) 评论(0) 推荐(0)
摘要: langchain4j 学习系列(5)-RAG 继续我们的langchain4j之旅,今天来看看RAG如何实现,“RAG萌宠新手盆友们”建议先看看B站大佬的视频RAG 工作机制详解—哔哩哔哩_bilibili,核心步骤就是下面这3张图: 最简单的RAG hello-world1、分片/索引 这里embedding模型,我们用ollamal加载“n 阅读全文
posted @ 2025-12-03 21:23 菩提树下的杨过 阅读(63) 评论(0) 推荐(0)
摘要: langchain4j 学习系列(4)-mcp调用 继续学习langchain4j,以下是langchain4j 调用MCP的示例: 1、添加pom依赖 1 <dependency> 2 <groupId>dev.langchain4j</groupId> 3 <artifactId>langchain4j-mcp</artifactId> 4 <v 阅读全文
posted @ 2025-11-23 16:04 菩提树下的杨过 阅读(99) 评论(0) 推荐(0)
摘要: dify+LLM+echarts打造智能可视化数据分析AI助手 以往遇到一些数据分析需求,比如:业务给了1份excel数据,需要开发做个报表对其进行分析,并以图表展示。通常需要了解数据逻辑,进行适当开发,涉及到前后端,费时费力。现在有了AI后,可以用dify搭建个智能数据分析助手,全自动处理。 1. 准备数据 我们准备2份excel示例数据(股票数据,以及销售数 阅读全文
posted @ 2025-11-01 23:11 菩提树下的杨过 阅读(799) 评论(0) 推荐(2)
摘要: idea与cursor的整合方案 众所周知,cursor是基于vs code魔改的一个独立应用,并不象copilot、通义灵码 这类采用plugin机制的AI辅助编码工具。在cursor-cli 与 idea MCP出来之前,只能通过idea里安装 Switch2Cursor Plugin for JetBrains IDEs | 阅读全文
posted @ 2025-10-19 00:40 菩提树下的杨过 阅读(3692) 评论(0) 推荐(0)
摘要: 虚拟线程的pinned问题终于被jdk25完美解决了 虚拟线程是一个非常有用的特性,但是JDK25以前,一直存在pinned问题,一些场景下会导致平台线程被占用无法释放。 比如下面的代码,在JDK 21下运行时,会卡住: import java.time.Duration; import java.util.concurrent.Executors; 阅读全文
posted @ 2025-10-16 20:48 菩提树下的杨过 阅读(247) 评论(0) 推荐(2)
摘要: langchain4j 学习系列(3)-工具调用(Tool Calling) 大模型本身的”知识体系“一般来说,局限于受训练时使用的数据。超出这个数据范围的问题,靠模型自身是无法解答的,得依赖各种外挂工具来增强体验。参考下图: 这一节,我们来学习langchain4j 如何让大模型能利用工具外挂增强自身。 假设一个场景:输入1个订单号,让AI回答订单号现在的状态。 AI连是什 阅读全文
posted @ 2025-09-30 14:04 菩提树下的杨过 阅读(108) 评论(0) 推荐(0)
摘要: langchain4j 学习系列(2)-调用远程deepseek 接上一篇继续,langchain4j支持open-ai兼容的各种模式,包括deepseek 一、修改pom依赖 1 <!-- LongChain4j OpenAI Integration (支持DeepSeek) --> 2 <dependency> 3 <groupId>dev.langchain 阅读全文
posted @ 2025-09-28 20:08 菩提树下的杨过 阅读(119) 评论(0) 推荐(0)
摘要: langchain4j 学习系列(1)-ollama本地调用 langchain4j是比spring-ai更早出现的大模型相关工程开源框架,社区成熟,活跃度高。下面演示如何用langchain4j调用本地ollama 一、核心pom依赖 1 <!-- LongChain4j Core --> 2 <dependency> 3 <groupId>dev.lang 阅读全文
posted @ 2025-07-20 17:00 菩提树下的杨过 阅读(646) 评论(0) 推荐(0)
摘要: spring-ai 学习系列(8)-上下文记忆-多轮对话 继续spring-ai学习之旅,大模型本身是无状态的,也就是每次请求对它来说,都是全新的,无记忆!比如:我们以ollama本地加载qwen3:0.6b模型为例,依次问它以下三个问题: 有1个变量A,它的值是5,那么A加1后,变成几? A再乘上3,结果是多少? A再减1,现在是多少? 直接用postm 阅读全文
posted @ 2025-07-20 11:08 菩提树下的杨过 阅读(548) 评论(1) 推荐(0)
摘要: spring-ai 学习系列(7)-MCP 安全认证 继续先前的MCP学习,实际企业级应用中,很多信息都是涉及商业敏感数据,需要考虑安全认证,不可能让MCP Server在网上裸奔。spring web开发中,提供了拦截器功能,最简单的思路,在Client连接到Server的sse时,拦截请求,检测http header头中,是否有必要的token信息 阅读全文
posted @ 2025-07-13 12:17 菩提树下的杨过 阅读(658) 评论(0) 推荐(0)
摘要: spring-ai 学习系列(6)-文生图 继续来学习spring-ai如何实现“文生图” 一、pom依赖 1 <dependency> 2 <groupId>org.springframework.ai</groupId> 3 <artifactId>spring-ai-starter-model-zhipuai</artifactId> 阅读全文
posted @ 2025-07-12 23:20 菩提树下的杨过 阅读(371) 评论(0) 推荐(0)
摘要: spring-ai 学习系列(5)-MCP(webflux sse) 前面学习了stdio模式的MCP使用,可以看到这种方式局限性比较大,mcp host/mcp client/mcp server通常要在同1台机器上,使用进程间通讯。更常见的做法是,大家各自部署自己的mcp server,就象常规后端http api一样,想部署在哪都行,只要http能访问即可。 一 阅读全文
posted @ 2025-07-12 22:43 菩提树下的杨过 阅读(694) 评论(0) 推荐(0)
摘要: spring-ai 学习系列(4)-MCP 处理过程分析 上一节,通过1个最基本的MCP Server/Client示例,初步了解了MCP的用法.STDIO模式下,client与server同在1台机器上,client会创建1个子进程来启动server,然后使用json rpc来做为约定的消息格式进行通讯。 如果想知道交互过程中的json原文,可以下载 h 阅读全文
posted @ 2025-07-12 16:33 菩提树下的杨过 阅读(508) 评论(0) 推荐(0)
摘要: spring-ai 学习系列(3)-MCP(stdio) 使用spring-ai创建1个MCP Server很容易,下面演示MCP(stdio模式)的写法: 一、添加依赖项 1 <dependency> 2 <groupId>org.springframework.ai</groupId> 3 <artifactId>spring-ai-starter-m 阅读全文
posted @ 2025-07-10 19:37 菩提树下的杨过 阅读(554) 评论(0) 推荐(0)
摘要: spring-ai 学习系列(2)-调用远程deepseek 上一节学习了spring-ai调用本地ollama,这次继续学习调用远程deepseek 一、pom依赖调整 加入openai的依赖 1 <dependency> 2 <groupId>group.springframework.ai</groupId> 3 <artifactId>spring-a 阅读全文
posted @ 2025-07-10 09:04 菩提树下的杨过 阅读(389) 评论(0) 推荐(0)
摘要: spring-ai 学习系列(1)-调用本地ollama spring-ai框架为java程序员快速融入AI大潮提供了便利,下面演示如何调用本地deepseek模型 一、安装ollama https://www.ollama.com/ 首页下载安装即可 选择适合的模型,pull到本地,个人电脑建议选择deepseek-r1:7b或1.5b 启动模型 oll 阅读全文
posted @ 2025-07-06 23:07 菩提树下的杨过 阅读(665) 评论(0) 推荐(0)
摘要: 全自助使用Cursor生成的DeepSeek Demo java 项目 今天尝试用cursor全自助生成了1个spring boot调用ollama(本地模型) +远程deepseek的示例项目。 效果图: .. 主要特性(摘自Readme.md,其实也是 Cursor生成的) 🎯 项目特色 🤖 双AI支持: 同时支持本地Ollama和远程DeepSeek两种AI提 阅读全文
posted @ 2025-06-29 00:04 菩提树下的杨过 阅读(160) 评论(0) 推荐(0)
摘要: shardingsphere从4.4.1升级至5.5.5注意事项 为方便讨论,假设有下面2张订单表:t_order_vip(用于存放VIP的订单),t_order_normal(用于存放普通用户的订单) -- 注:为了演示自定义分片算法而设想的场景,大家不必太纠结其真实性。 分片规则:根据user_id,假设user_id为1,2,3的为VIP用户,其它id为普通 阅读全文
posted @ 2025-04-12 22:47 菩提树下的杨过 阅读(955) 评论(2) 推荐(0)
摘要: 如何控制java虚拟线程的并发度? 本文用一个订单提交的示例,描述了如何在使用虚拟线程时,合理控制执行的并发数,防止把下游资源打爆 阅读全文
posted @ 2024-11-18 21:02 菩提树下的杨过 阅读(713) 评论(2) 推荐(1)
摘要: java取cookie的一些坑 1. cookie有2个版本(version 0与version 1),version 0最早是网景公司定的,比较保守,value值不能有特殊字符,比如 冒号之类的,象 GMT+05:30,在version 0下,取出来,就变成GMT+05,冒号后的:30丢了 2. java中目前支持的是 vers 阅读全文
posted @ 2024-05-17 16:56 菩提树下的杨过 阅读(187) 评论(0) 推荐(0)
摘要: FreeSwitch: esl 调用lua动态传参&amp;日志查看 lua脚本在执行过程中,可动态接收参数,这样可以让系统更灵活,以上节的自动外呼为例,callout.lua改成下面这样: -- 主叫 local callernum = argv[1]; -- 被叫 local calleenum = argv[2]; freeswitch.consoleLog(" 阅读全文
posted @ 2024-01-15 09:59 菩提树下的杨过 阅读(599) 评论(2) 推荐(1)
摘要: FreeSwitch: esl inbound模式下外呼拨号 相信大家可能接到过一些电话,听上去不象是真人打过来的,比如:通知“您的信用卡到期了”,或者“您订的飞机航班取消了,请尽快改签或取消行程”,这种就是所谓的“自动外呼”系统,技术上讲,可以通过 esl inbound模式实现(注:对esl不熟悉的朋友,戳这里) 大概思路: 先把一些要外呼的任务计划,落地 阅读全文
posted @ 2024-01-13 17:17 菩提树下的杨过 阅读(903) 评论(0) 推荐(0)
摘要: FreeSwitch+lua实现IVR(互动式语音应答) IVR(Interactive Voice Response)交互式语言应答,是呼叫中心的1个经典应用场景,FreeSwitch官方有一个利用lua实现的简单示例,大致原理是利用lua脚本+TTS实现,记录一下:(环境:FreeSwitch 1.10.11 + Windows 10) 步骤1:安装T 阅读全文
posted @ 2024-01-13 15:32 菩提树下的杨过 阅读(971) 评论(0) 推荐(1)
摘要: FreeSwitch:群振、顺振研究 在呼叫中心系统中,有二类特殊的应用场景,即所谓的“群振”(也叫“共振”或“同振”)以及“顺振”。 群振的业务场景: 当客人电话进线时,希望呼叫中心的所有客服都能响应(即:假设呼叫中心有5个客服在接线,客人来电时,这5个客服的电话一起响),任何1个客服都可以接听(注:该客服接起来后,其它客服的分机就不 阅读全文
posted @ 2024-01-07 16:07 菩提树下的杨过 阅读(803) 评论(0) 推荐(0)
摘要: mysql中date_format函数格式化日期,如何精确到毫秒? 直接看官网文档 : https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date-format SpecifierDescription %a Abbreviated weekday name ( 阅读全文
posted @ 2023-11-15 13:35 菩提树下的杨过 阅读(2252) 评论(0) 推荐(0)
摘要: transformer小白入门 transformer库是huggingface发布的1个框架,非常好用,很多外行看起来高大上的问题,用它都可以轻松解决,先来看1个小例子: 一、情感分析 from transformers import pipeline classifier = pipeline('sentiment-analy 阅读全文
posted @ 2023-08-20 16:05 菩提树下的杨过 阅读(1534) 评论(0) 推荐(0)
摘要: 利用text-generation-webui快速搭建chatGLM2/LLAMA2大模型运行环境 text-generation-webui 是一个基于Gradio的LLM Web UI开源项目,可以利用其快速搭建各种文本生成的大模型环境。 一、安装 text-generation-webui的readme其实已写得相当详细了,这里就不再重复,只说1个可能存在的坑: 安装 peft 安装卡住 r 阅读全文
posted @ 2023-08-19 17:51 菩提树下的杨过 阅读(4441) 评论(0) 推荐(0)
摘要: chatglm.cpp使用手记 目前绝大多数LLM模型都是python实现的,运行速度有限(包括ChatGLM2-6b),幸好有大神将其用C++重写了一遍,让运行速度大大提高。 项目地址:li-plus/chatglm.cpp: C++ implementation of ChatGLM-6B & ChatGLM2-6B (git 阅读全文
posted @ 2023-08-12 23:41 菩提树下的杨过 阅读(6337) 评论(1) 推荐(0)
摘要: windows WSL2避坑指南 对于不想安装windows/linux双系统的朋友来说,WSL2是不错的选择,但在使用过程中可能会遇到一些问题,以下是本人踩过的坑,记录于此: 一、安装前提 1.1 检测windows版本 windows10 版本必须高于 内部版本 19041 ,检测方法 :Ctrl+R,输入winver查看版本( 阅读全文
posted @ 2023-08-12 11:30 菩提树下的杨过 阅读(41468) 评论(5) 推荐(14)