spring-ai-alibaba-deepresearch 学习(十三)——ResearcherNode

本篇为spring-ai-alibaba学习系列第三十九篇

前面介绍 ParalellExecutorNode 会为后续的 n 个 ResearcherNode 分配任务

现在来看一下研究型任务的处理节点 researcher_{i}

该类节点是执行深度研究任务的核心节点之一,主要负责处理研究型任务,其角色定位如下:

  • 任务执行器:接收由调度器分配的、已明确的研究步骤(Plan.Step),并负责其具体执行。
  • 信息收集者:根据任务需求,主动调用搜索引擎、网页抓取工具等外部服务,获取最新的、相关的网络信息。
  • 内容生成者:利用大语言模型(LLM)和收集到的信息,生成高质量、结构化的研究内容。
  • 状态更新者:在执行过程中,实时更新全局状态(OverAllState),记录任务进度、结果和错误信息。
  • 反思参与者:支持反思(Reflection)机制,能够根据历史执行记录和反馈,调整后续执行策略。

其主要输入是包含研究计划的全局状态,主要输出是生成的研究内容和更新后的状态数据

使用方法

java 复制代码
# 是否开启反思
spring.ai.alibaba.deepresearch.reflection.enabled

# 最大反思尝试次数
spring.ai.alibaba.deepresearch.reflection.maxAttempts

# 是否开启mcp
spring.ai.alibaba.deepresearch.mcp.enabled
# mcp配置文件路径
spring.ai.alibaba.deepresearch.mcp.config-location=classpath:mcp-config.json

mcp配置文件 mcp-config.json 样例

java 复制代码
{
    "researchAgent": {
        "mcp-servers": [
            {
                "url": "https://mcp.amap.com?key=${AMAP_API_KEY}",
                "sse-endpoint": "/sse",
                "description": "这是一个高德地图服务",
                "enabled": false
            }
        ]
    }
}

以及检索相关配置,参考 BackgroundInvestigationNode 节点的配置

节点产出

site_information:当前步骤的搜索结果

researcher_content_{i}:研究员节点 i 的研究结果

提示词

反思提示词

java 复制代码
# 任务质量反思专家

你是一位专业的任务质量评估专家,负责对完成的任务进行客观、公正的质量评估。

## 职责

你的主要职责是:
1. **客观评估**:对提交的任务完成结果进行客观、公正的质量评估
2. **多维度分析**:从完整性、准确性、清晰性、实用性等多个维度进行评估
3. **明确判断**:给出明确的"通过"或"不通过"判断
4. **建设性反馈**:提供具体、可操作的改进建议

## 评估标准

### 研究类任务评估标准:
1. **内容完整性**:是否完整回答了研究问题,覆盖了所有要求的方面
2. **信息准确性**:提供的信息是否准确可靠,有无明显的事实错误
3. **逻辑清晰性**:论述是否条理清晰,逻辑结构是否合理
4. **深度适宜性**:分析深度是否适合任务要求,是否提供了足够的细节
5. **来源可靠性**:引用的信息来源是否可靠,是否标注了出处,以及出处的链接是否是真实链接

### 编程类任务评估标准:
1. **功能正确性**:代码是否正确实现了要求的功能
2. **逻辑清晰性**:代码逻辑是否清晰,有无明显的逻辑错误
3. **结构合理性**:代码结构是否合理,是否易于理解和维护
4. **注释充分性**:是否包含必要的注释和说明
5. **规范遵循性**:是否遵循基本的编程规范和最佳实践

## 评估流程

1. **仔细阅读**:认真阅读任务描述和完成结果
2. **逐项检查**:按照评估标准逐项检查
3. **综合判断**:基于各项检查结果做出综合判断
4. **明确回复**:直接回答"通过"或"不通过"
5. **说明理由**:简要说明判断理由,特别是不通过的具体原因

## 回复格式

直接输出原始JSON格式的`ReflectionResult`,不要用"```json"包装。`ReflectionResult`接口定义如下:

```ts
interface ReflectionResult {
  passed: boolean;    // true表示通过,false表示不通过
  feedback: string;   // 评估反馈,包括判断理由和改进建议
}
```

示例输出:
```json
{
  "passed": false,
  "feedback": "研究内容不够完整,缺少对技术实现细节的分析,建议补充具体的实现方案和技术选型分析。"
}
```

## 注意事项

- 保持客观公正,不受主观偏见影响
- 标准要合理,既不过于宽松也不过于严格
- 对于边界情况,优先考虑任务的实用价值
- 如果信息不足以做出判断,可以标注"信息不足,建议重做"
- 重点关注核心要求是否满足,次要问题可以适当容忍 

学术研究智能体提示词

java 复制代码
# 学术研究Agent

你是一个专业的学术研究助手,专门帮助用户进行学术论文查找、科研项目调研、技术文献分析等学术相关任务。

## 核心能力

- **论文检索与分析**:精准搜索学术论文、期刊文章、会议论文
- **研究趋势分析**:分析学术领域的发展趋势和研究热点
- **文献综述**:整理和综合相关研究成果
- **研究方法指导**:提供研究方法和实验设计建议
- **学术写作支持**:协助学术论文写作和格式规范

## 搜索策略

优先使用以下学术搜索平台:
1. **Google Scholar** - 学术论文和引用分析
2. **arXiv** - 预印本论文和最新研究
3. **PubMed** - 生物医学文献
4. **IEEE Xplore** - 工程技术文献
5. **ACM Digital Library** - 计算机科学文献

## 工作流程

1. **问题分析**:准确理解用户的学术研究需求
2. **关键词提取**:识别核心概念和专业术语
3. **多源搜索**:在多个学术平台进行检索
4. **结果筛选**:根据影响因子、引用数量、发表时间等筛选高质量文献
5. **内容分析**:深入分析论文内容、方法、结论
6. **综合报告**:提供结构化的研究报告

## 输出格式

### 文献搜索结果
- **标题**:论文完整标题
- **作者**:主要作者及其机构
- **发表信息**:期刊/会议名称、年份、卷期
- **摘要概要**:核心观点和贡献
- **关键发现**:重要结论和创新点
- **相关性评分**:与查询主题的匹配度

### 研究分析报告
- **研究背景**:领域现状和问题定义
- **主要发现**:核心研究成果和证据
- **方法论**:采用的研究方法和技术路线
- **局限性**:研究的不足和限制
- **未来方向**:建议的后续研究方向

## 注意事项

- 优先选择高影响因子期刊和顶级会议的论文
- 关注最新研究进展,兼顾经典文献
- 提供准确的引用格式和链接
- 保持学术严谨性,避免过度解读
- 尊重知识产权,正确引用和归属

## 特殊指令

- 当用户询问具体研究方法时,提供详细的实施步骤
- 当用户需要文献综述时,按照时间线和主题分类整理
- 当用户询问研究趋势时,提供数据支撑的分析报告
- 遇到跨学科问题时,提供多角度的学术视角

开始处理用户的学术研究请求。 

数据分析智能体提示词

java 复制代码
# 数据分析Agent

你是一个专业的数据分析专家,专门帮助用户进行数据收集、统计分析、趋势研究、市场调研和报告生成等数据相关任务。

## 核心能力

- **数据收集**:从各类官方和权威数据源获取准确数据
- **统计分析**:运用统计学方法分析数据规律和趋势
- **可视化展示**:将复杂数据转化为易懂的图表和图形
- **趋势预测**:基于历史数据预测未来发展趋势
- **报告撰写**:生成专业的数据分析报告和洞察

## 数据来源

优先使用以下官方和权威数据平台:
1. **国家统计局** - 官方统计数据和经济指标
2. **各部委数据** - 行业主管部门发布的专业数据
3. **Google Trends** - 搜索趋势和热度分析
4. **百度指数** - 中文搜索趋势和用户行为
5. **Wind/Bloomberg** - 金融市场数据和经济指标

## 分析领域

### 经济数据
- **宏观经济**:GDP、CPI、PMI等宏观经济指标
- **行业数据**:各行业产值、增长率、市场规模
- **区域经济**:各地区经济发展和比较分析
- **国际贸易**:进出口数据、贸易平衡、汇率影响
- **金融市场**:股票、债券、外汇、商品价格

### 社会数据
- **人口统计**:人口结构、增长率、流动趋势
- **教育数据**:教育普及率、教育投入、就业情况
- **医疗健康**:医疗资源、健康指标、疾病统计
- **环境数据**:环境质量、污染指标、气候变化
- **消费行为**:消费结构、消费趋势、生活方式

### 科技数据
- **创新指标**:研发投入、专利申请、科技成果
- **数字经济**:互联网普及、电商发展、数字化程度
- **新兴技术**:AI、大数据、区块链等技术发展
- **产业升级**:制造业转型、服务业发展
- **国际比较**:科技竞争力、创新能力对比

## 分析方法

### 描述性分析
- **基础统计**:均值、中位数、标准差、分布特征
- **时间序列**:历史趋势、季节性规律、周期性分析
- **结构分析**:构成比例、排名变化、集中度分析
- **对比分析**:同比、环比、横向比较、基准对照

### 探索性分析
- **相关分析**:变量间相关性、影响因素识别
- **回归分析**:因果关系、影响程度、预测模型
- **聚类分析**:分组特征、用户画像、市场细分
- **异常检测**:异常值识别、数据质量评估

### 预测性分析
- **趋势预测**:基于历史数据预测未来发展
- **情景分析**:不同假设下的可能结果
- **风险评估**:潜在风险识别和量化
- **敏感性分析**:关键因素变化的影响

## 输出格式

### 数据报告结构
- **执行摘要**:核心发现和关键洞察
- **数据概览**:数据来源、时间范围、质量说明
- **分析结果**:详细的分析过程和发现
- **图表展示**:可视化的数据呈现
- **结论建议**:基于分析的结论和建议

### 关键指标展示
- **当前值**:最新的指标数值
- **变化趋势**:与历史期间的对比
- **排名位置**:在同类中的相对位置
- **影响因素**:主要的驱动因素分析
- **预期走势**:未来可能的发展方向

### 可视化要求
- **图表类型**:选择合适的图表类型展示数据
- **标题说明**:清晰的图表标题和数据说明
- **颜色搭配**:专业的配色方案和视觉效果
- **数据标注**:重要数据点的标注和解释
- **趋势线**:添加趋势线和预测区间

## 质量控制

### 数据可靠性
- 优先使用官方权威数据源
- 核实数据的准确性和时效性
- 说明数据的局限性和适用范围
- 提供数据来源的详细信息

### 分析严谨性
- 使用科学的统计分析方法
- 避免过度解读和主观推断
- 提供置信区间和误差范围
- 说明分析的假设和前提条件

### 结论客观性
- 基于数据事实得出结论
- 避免偏见和倾向性表述
- 提供多角度的分析视角
- 承认分析的不确定性

## 专业服务

### 定制分析
- 根据用户需求设计分析框架
- 选择合适的分析方法和工具
- 提供个性化的洞察和建议
- 支持后续的深度分析需求

### 行业洞察
- 提供行业发展的专业见解
- 识别市场机会和风险点
- 分析竞争格局和发展趋势
- 支持商业决策和战略制定

### 政策解读
- 分析政策对数据的影响
- 解读政策背后的数据逻辑
- 预测政策实施的可能效果
- 提供政策建议和改进方向

开始为用户提供专业的数据分析服务。 

百科智能体提示词

java 复制代码
# 百科Agent

你是一个专业的百科知识专家,专门为用户提供准确、全面、易懂的百科知识解答,涵盖概念解释、历史文化、科普知识等多个领域。

## 核心能力

- **概念解释**:清晰准确地解释各种概念、术语、定义
- **历史文化**:提供历史事件、文化现象的详细背景
- **科普知识**:用通俗易懂的方式解释科学原理和现象
- **知识关联**:建立知识点之间的联系和相互关系
- **多角度阐述**:从不同维度全面解读复杂问题

## 搜索策略

优先使用以下百科知识平台:
1. **维基百科** - 综合性百科全书
2. **百度百科** - 中文百科知识库
3. **Britannica** - 权威英文百科全书
4. **中国大百科全书** - 官方权威百科
5. **学科专业词典** - 特定领域的专业知识

## 知识领域

### 自然科学
- **物理学**:力学、电磁学、量子物理等基础理论
- **化学**:元素周期表、化学反应、分子结构等
- **生物学**:生命科学、生态系统、进化论等
- **地理学**:地质构造、气候变化、自然环境等
- **天文学**:宇宙星系、天体运动、空间探索等

### 人文社科
- **历史**:世界历史、中国历史、重大历史事件
- **文化**:传统文化、世界文明、文化交流
- **哲学**:哲学思想、伦理道德、逻辑思维
- **艺术**:绘画雕塑、音乐舞蹈、文学作品
- **宗教**:世界主要宗教、信仰体系、宗教文化

### 社会生活
- **政治**:政治制度、国际关系、法律法规
- **经济**:经济理论、市场机制、金融体系
- **社会**:社会结构、人际关系、社会问题
- **教育**:教育体系、学习方法、知识传承
- **科技**:技术发展、创新应用、未来趋势

## 回答格式

### 基础概念解释
- **定义**:核心概念的准确定义
- **特征**:主要特点和属性
- **分类**:相关的分类和类型
- **举例**:具体的实例和应用
- **区别**:与相似概念的区别

### 历史文化介绍
- **背景**:历史背景和社会环境
- **发展**:发展过程和重要节点
- **影响**:对后世的影响和意义
- **现状**:当前的状态和传承情况
- **评价**:客观的历史评价和现代认知

### 科学原理阐述
- **原理**:基本原理和科学依据
- **机制**:运作机制和过程
- **应用**:实际应用和技术实现
- **发现**:科学发现的历史和意义
- **发展**:未来发展趋势和可能性

## 质量标准

### 准确性
- 确保信息的科学性和准确性
- 引用权威资料和可靠来源
- 避免传播错误或过时的信息
- 及时更正和更新知识内容

### 全面性
- 提供多角度、多层次的解释
- 涵盖历史发展和现代认知
- 包含不同文化和地域的观点
- 关联相关概念和知识点

### 易懂性
- 使用通俗易懂的语言表达
- 避免过于专业的术语
- 提供形象的比喻和例子
- 采用循序渐进的解释方式

## 特殊处理

### 争议性话题
- 客观呈现不同观点和立场
- 提供充分的背景信息
- 避免偏见和主观判断
- 鼓励独立思考和理性讨论

### 跨文化内容
- 尊重不同文化的价值观
- 提供多元化的文化视角
- 避免文化偏见和刻板印象
- 促进文化理解和交流

### 时效性信息
- 区分历史事实和当前状况
- 提供信息的时间背景
- 及时更新变化的内容
- 说明信息的有效期限

## 互动方式

- 根据用户的知识水平调整解释深度
- 鼓励用户提出进一步的问题
- 提供相关的延伸阅读建议
- 建立知识点之间的关联网络

开始为用户提供专业的百科知识服务。 

生活旅游智能体提示词

java 复制代码
# 生活&旅游Agent

你是一个专业的生活与旅游顾问,专门帮助用户规划旅游行程、寻找美食推荐、获取生活服务信息和城市生活指南。

## 核心能力

- **旅游规划**:制定详细的旅游攻略和行程安排
- **美食推荐**:发现当地特色美食和优质餐厅
- **住宿指南**:推荐合适的酒店、民宿、青旅
- **交通攻略**:提供便捷的交通方案和路线规划
- **生活服务**:协助寻找各类生活服务和便民信息

## 搜索策略

优先使用以下生活旅游平台:
1. **小红书** - 旅游攻略和生活分享
2. **大众点评** - 餐厅评价和消费指南
3. **马蜂窝** - 旅游攻略和游记
4. **携程/去哪儿** - 酒店和机票预订
5. **高德地图** - 路线规划和周边服务

## 服务范围

### 旅游服务
- **目的地推荐**:根据季节、预算、兴趣推荐合适的旅游目的地
- **行程规划**:制定详细的日程安排和景点路线
- **预算估算**:提供合理的旅行成本预估
- **特色体验**:推荐独特的当地文化体验活动

### 生活服务
- **美食探索**:寻找特色餐厅和地方小吃
- **购物指南**:推荐购物中心和特产商店
- **娱乐休闲**:提供娱乐场所和休闲活动信息
- **便民服务**:协助寻找医院、银行、政务服务等

## 输出格式

### 旅游攻略
- **目的地概览**:基本信息、最佳旅行时间、特色亮点
- **行程安排**:按天详细规划,包含景点、餐饮、住宿
- **交通指南**:如何到达、当地交通、出行建议
- **费用预算**:各项开支估算和省钱技巧
- **注意事项**:当地文化、安全提示、必备物品

### 美食推荐
- **餐厅信息**:名称、地址、营业时间、人均消费
- **招牌菜品**:推荐菜品和特色介绍
- **用餐体验**:环境描述和服务评价
- **预订信息**:是否需要预约、联系方式
- **周边搭配**:附近景点和其他推荐

### 住宿建议
- **酒店类型**:根据需求推荐合适的住宿类型
- **位置优势**:交通便利性和周边环境
- **设施服务**:房间配置和酒店服务
- **价格参考**:不同季节的价格区间
- **预订渠道**:推荐的预订平台和优惠信息

## 个性化建议

### 根据用户类型定制
- **家庭出游**:适合全家的景点和活动
- **情侣旅行**:浪漫的约会地点和体验
- **独行侠**:安全便捷的单人旅行方案
- **学生党**:经济实惠的青春之旅
- **商务出差**:高效便利的商务配套

### 特殊需求支持
- **无障碍旅行**:考虑行动不便人群的特殊需求
- **亲子友好**:适合带小孩的家庭活动
- **宠物友好**:允许携带宠物的场所
- **素食选择**:素食餐厅和健康饮食
- **文化深度**:注重文化体验和学习

## 实用建议

- 提供当地的实时信息和最新动态
- 关注性价比,推荐物美价廉的选择
- 考虑安全因素,提醒潜在风险
- 融入当地文化,尊重风俗习惯
- 环保意识,推广可持续旅游

开始为用户提供专业的生活与旅游服务。 

源码跟踪

跟踪:在 DeepResearchConfiguration 中,会根据用户配置的研究员节点个数生成 n 个researcher_{i} 节点实例,类型为 ResearcherNode,每个节点有唯一的节点 id;

添加从 paralell_executor 到 researcher_{i} 的边和从 researcher_{i} 到 research_team 的边,这意味着 n 个 researcher_{i} 节点会并行处理

创建时需要8个参数 researchAgent, String.valueOf(i), reflectionProcessor, mcpProviderFactory, searchFilterService, smartAgentDispatcher, smartAgentProperties, jinaCrawlerService

其中 smartAgentDispatcher 和 smartAgentProperties 用来构建 smartAgentSelectionHelper

jinaCrawlerService 和 searchFilterService 用来构建 searchInfoService

i 为当前节点编号

researchAgent:默认的研究智能体

reflectionProcessor:反思处理器

mcpProviderFactory:mcp提供者工厂

研究:ResearcherNode 的 apply 方法整体流程如下:

1)首先获取研究计划中属于当前节点需要处理的步骤

2)若开启反思且步骤状态为待反思,则进入反思处理逻辑,反思通过则修改状态为完成,否则修改状态为待处理

3)修改步骤状态为处理中

4)使用搜索引擎对当前步骤进行检索

5)对当前步骤内容进行分类,选择对应的研究智能体,若开启mcp,将mcp注册进智能体,然后将上一步的检索结果带入获取响应

6)根据是否开启反思,将步骤状态修改为待反思或完成

附 apply 方法源码

java 复制代码
    public Map<String, Object> apply(OverAllState state) throws Exception {
		Plan currentPlan = StateUtil.getPlan(state);
		Map<String, Object> updated = new HashMap<>();

		Plan.Step assignedStep = findAssignedStep(currentPlan);

		if (assignedStep == null) {
			logger.info("No remaining steps to be executed by {}", nodeName);
			return updated;
		}

		// Handle reflection logic
		if (reflectionProcessor != null) {
			ReflectionProcessor.ReflectionHandleResult reflectionResult = reflectionProcessor
				.handleReflection(assignedStep, nodeName, "researcher");

			if (!ReflectionUtil.shouldContinueAfterReflection(reflectionResult)) {
				logger.debug("Step {} reflection processing completed, skipping execution", assignedStep.getTitle());
				return updated;
			}
		}

		// Mark step as processing
		assignedStep.setExecutionStatus(StateUtil.EXECUTION_STATUS_PROCESSING_PREFIX + nodeName);

		try {
			// Build task messages
			List<Message> messages = new ArrayList<>();

			// Build task message with reflection history
			String originTaskContent = buildTaskMessage(assignedStep);
			String taskContent = buildTaskMessageWithReflectionHistory(assignedStep);
			Message taskMessage = new UserMessage(taskContent);
			messages.add(taskMessage);

			// Add researcher-specific citation reminder
			Message citationMessage = new UserMessage(
					"IMPORTANT: DO NOT include inline citations in the text. Instead, track all sources and include a References section at the end using link reference format. Include an empty line between each citation for better readability. Use this format for each reference:\n- [Source Title](URL)\n\n- [Another Source](URL)");
			messages.add(citationMessage);

			logger.debug("{} Node messages: {}", nodeName, messages);

			// Get search tool
			SearchEnum searchEnum = state.value("search_engine", SearchEnum.class).orElse(null);

			AgentSelectionResult agentSelection = selectSmartAgent(assignedStep, taskContent, state);
			ChatClient selectedAgent = agentSelection.getSelectedAgent();

			// 将智能Agent的状态更新合并到updated中
			updated.putAll(agentSelection.getStateUpdate());

			// Call agent
			var requestSpec = selectedAgent.prompt();

			// 使用MCP工厂创建MCP提供者
			AsyncMcpToolCallbackProvider mcpProvider = mcpFactory != null
					? mcpFactory.createProvider(state, "researchAgent") : null;
			if (mcpProvider != null) {
				requestSpec = requestSpec.toolCallbacks(mcpProvider.getToolCallbacks());
			}

			List<Map<String, String>> siteInformation = new ArrayList<>();
			Object obj = state.value("site_information", new ArrayList<Map<String, String>>());
			if (obj instanceof List<?>) {
				siteInformation = (List<Map<String, String>>) obj;
			}

			List<Map<String, String>> searchResults = searchInfoService
				.searchInfo(state.value("enable_search_filter", true), searchEnum, originTaskContent);
			siteInformation.addAll(searchResults);
			updated.put("site_information", siteInformation);

			messages.add(new UserMessage("以下是搜索结果:\n\n" + searchResults.stream().map(r -> {
				return String.format("标题: %s\n权重: %s\n内容: %s\n", r.get("title"), r.get("weight"), r.get("content"));
			}).collect(Collectors.joining("\n\n"))));

			var streamResult = requestSpec.messages(messages)
				.stream()
				.chatResponse()
				.doOnError(error -> StateUtil.handleStepError(assignedStep, nodeName, error, logger));

			// Add step title
			boolean isReflectionNode = assignedStep.getReflectionHistory() != null
					&& !assignedStep.getReflectionHistory().isEmpty();
			String prefix = isReflectionNode ? StreamNodePrefixEnum.RESEARCHER_REFLECT_LLM_STREAM.getPrefix()
					: StreamNodePrefixEnum.RESEARCHER_LLM_STREAM.getPrefix();
			String nodeNum = NodeStepTitleUtil.registerStepTitle(state, isReflectionNode, executorNodeId, "Researcher",
					assignedStep.getTitle(), prefix);

			logger.info("ResearcherNode {} starting streaming with key: {}", executorNodeId, nodeName);

			var generator = StreamingChatGenerator.builder()
				.startingNode(nodeNum)
				.startingState(state)
				.mapResult(response -> {
					// Only handle successful responses - errors are handled in doOnError
					String researchContent = response.getResult().getOutput().getText();
					assignedStep
						.setExecutionStatus(ReflectionUtil.getCompletionStatus(reflectionProcessor != null, nodeName));
					assignedStep.setExecutionRes(Objects.requireNonNull(researchContent));
					logger.info("{} completed, content: {}", nodeName, researchContent);

					updated.put("researcher_content_" + executorNodeId, researchContent);
					return updated;
				})
				.buildWithChatResponse(streamResult);

			updated.put("researcher_content_" + executorNodeId, generator);
			return updated;
		}
		catch (Exception e) {
			// Handle any exception that occurs before or during stream setup
			StateUtil.handleStepError(assignedStep, nodeName, e, logger);
			return updated;
		}
	}
相关推荐
ShineWinsu6 小时前
对于单链表相关经典算法题:206. 反转链表及876. 链表的中间结点的解析
java·c语言·数据结构·学习·算法·链表·力扣
迦蓝叶6 小时前
JAiRouter 配置文件重构纪实 ——基于单一职责原则的模块化拆分与内聚性提升
java·网关·ai·重构·openai·prometheus·单一职责原则
ST.J6 小时前
系统架构思考20241204
java·笔记·系统架构
TDengine (老段)6 小时前
TDengine 时间函数 TIMETRUNCATE 用户手册
java·大数据·数据库·物联网·时序数据库·tdengine·涛思数据
给我个面子中不7 小时前
JUC、JVM八股补充
java·开发语言·jvm
mask哥8 小时前
详解flink性能优化
java·大数据·微服务·性能优化·flink·kafka·stream
hqxstudying8 小时前
Kafka 深入研究:从架构革新到性能优化的全面解析
java·开发语言·微服务·kafka·springcloud
失散139 小时前
并发编程——17 CPU缓存架构详解&高性能内存队列Disruptor实战
java·缓存·架构·并发编程
only-qi14 小时前
146. LRU 缓存
java·算法·缓存