从MCP基础到FastMCP实战应用
MCP(https://github.com/modelcontextprotocol)
MCP(模型上下文协议) 是一种专为 基于LLM的工具调用外部工具而设计的协议 ,
本质上是 LLM ↔ 工具之间的RPC(远程过程调用) 的一种安全且一致的处理方式,
是一种 轻量级的JSON-RPC标准 。
我是韩国人,不是中国人。但最近在韩国,如果不使用MCP,就会被认为是跟不上潮流的人,MCP非常火热。我的博客虽然喜欢写大多数人能享受的编程理论文章,但由于理论文章的资料整理与验证需要耗费大量时间,再加上最近因为体力劳动没有太多时间,并且考虑到概念理解上Python非常适合,因此我打算用Python的FastMCP快速实现一个MCP。
1.一般来说,MCP结构如下所示:
[用户提示]
↓
[LLM]
↓
生成 "tool_call" (MCP)
↓ [
工具服务器执行(如FastMCP等)]
↓
生成MCP响应 → 传递给LLM
↓
LLM生成最终响应
2.MCP协议格式
实际上,MCP = JSON-RPC 2.0的子集
(即遵循JSON-RPC标准,但仅提供MCP特定的工具调用方式)
MCP字段 | 说明 |
---|---|
| "2.0"(固定值) |
| 要调用的工具名称 |
| 传递给工具的参数(字典形式) |
| 调用标识符(自动递增等) |
| 工具的执行结果 |
基本结构
{"jsonrpc": "2.0","id": 1,"method": "tool_name","params": {"argument1": "value1","argument2": 42}
}
2. 核心组成部分
1. tool_call
(Claude → MCP服务器: 请求消息 )
当Claude判断需要调用工具时,会向MCP服务器发送以下的JSON-RPC 2.0请求消息 。
// Claude -> MCP服务器 (请求示例)
{"jsonrpc": "2.0","id": 123, // 请求标识符(由Claude生成,与响应匹配)"method": "search_nature_articles", // 调用的工具(函数)名称"params": { // 将传递给工具(函数)的参数(字典形式)"keyword": "quantum computing","max_results": 3 // 示例:附加参数}
}
2. MCP Server
(本地或远程工具执行器)
- Claude Desktop会在本地运行配置好的MCP服务器。
- 必须注册
tool_name
(即method
字段值),并将其绑定到可执行函数。 - 在Python中,FastMCP可以轻松实现这一点。
@mcp.tool()
def search_nature_articles(keyword: str, max_results: int = 3): # 与params匹配...
3. MCP Response
(MCP服务器 → Claude: 响应消息 )
- 工具(函数)在MCP服务器上执行后,其结果将以JSON-RPC 2.0响应消息 的形式返回给Claude。包括成功或失败(错误)两种情况。
// MCP服务器 -> Claude (成功响应示例)
{"jsonrpc": "2.0","id": 123, // 必须与请求消息中的id相同"result": "'quantum computing'相关论文3篇搜索结果:\n1. Title A...\n..." // 工具执行结果(字符串、数字、列表、对象等均可)
}
// MCP服务器 -> Claude (错误响应示例)
{"jsonrpc": "2.0","id": 123, // 与请求id相同(如果无法识别,也可以为null)"error": { // 发生错误时包含'error'对象而不是'result'"code": -32000, // 示例:服务器错误代码"message": "Springer Nature API密钥认证失败" // 错误消息}
}
为什么需要MCP?
用表格总结如下:
问题 | MCP的解决方案 |
---|---|
LLM无法执行代码 | 通过调用外部工具解决 |
结构化输入/输出困难 | 使用JSON-RPC实现一致的参数传递 |
工具错误处理困难 | 提供明确的错误响应 |
工具增多导致结构复杂 | 基于名称的路由 + 分离的服务器架构解决 |
要素 | 内容 |
协议名称 | MCP(模型上下文协议) |
技术基础 | JSON-RPC 2.0 |
目标 | 让LLM能够安全地调用外部工具并接收响应 |
执行方式 | 在本地服务器或本地进程中运行MCP兼容服务器 |
典型实现 | FastMCP(Python),server-filesystem(JS) |
通信对象 | Claude Desktop / Claude API |
本文将指导如何快速在 VS Code 环境中设置开发 Claude MCP 系统的步骤。
这是使用 FastMCP 构建 MCP 服务器并运行基于 Python 的工具所需的配置。
FastMCP 是一个完整的 Claude 专用 MCP 工具服务器实现。
FastMCP (Python) 不直接打开端口
-
FastMCP 不会直接打开 TCP 套接字或 HTTP 服务器。
-
相反,它通过
stdio
(标准输入输出)与 Claude Desktop 进行通信 。 -
换句话说,Claude 内部会以
stdin/stdout
的方式启动 MCP 进程来进行通信。
通常,许多示例中会有以下结构:
mcp_server.py
mcp_client.py
这种结构仅用于练习或调试 JSON-RPC 协议,但并不会与 Claude 实际集成(仅用于测试目的)。
因此,为了实现与 Claude 的实际集成,使用 FastMCP 是最简单的方法之一。接下来我们将使用 FastMCP 实际构建一个 MCP。
总结
- FastMCP 是专为 Claude 设计的轻量级工具,避免了复杂的网络设置。
- 它通过标准输入输出 (
stdin/stdout
) 与 Claude 桌面版通信。 - 使用 FastMCP 可以更高效地完成实际的 MCP 开发和集成。
1. 安装 VS Code
-
访问 https://code.visualstudio.com
-
下载并运行与操作系统对应的安装文件。
2. 安装 VS Code 及扩展
启动 VS Code 后,在左侧的扩展(Extensions)选项卡中搜索并安装以下内容:
-
Python (
ms-python.python
) -
(可选)Pylance、IntelliCode(用于增强自动补全功能)
3. 创建并打开项目文件夹
- 在计算机上创建一个项目文件夹。在我的情况下,我将其命名为
PaperPort
。
4. 虚拟环境设置
- 在 VSCode 菜单中选择 终端(Terminal) -> 新建终端(New Terminal),即可在 VS Code 内打开终端。
- 在终端中输入以下命令,创建一个名为
.venv
的虚拟环境
python -m venv .venv
# 或者 python3 -m venv .venv (根据系统不同)
一定要用 '.venv' 吗? : venv
模块本身对虚拟环境文件夹的名称没有特别限制。你可以使用任何你想要的文件夹名称 。不过,如果文件夹名称前加了点(.),在 Linux 或 macOS 等 Unix 系统中会被视为隐藏文件夹,而 .venv
是一种常见的命名约定。
激活虚拟环境 : 创建虚拟环境后,你需要将其“激活”才能使用。根据终端类型不同,激活命令略有差异。
- Windows (PowerShell):
-
.\.venv\Scripts\Activate.ps1
- Windows (Command Prompt - cmd):
-
.\.venv\Scripts\activate.bat
- macOS / Linux (bash/zsh):
-
source .venv/bin/activate
实际上,查看
.venv
文件夹中的文件并执行相应的文件会更快。在我的情况下,生成了activate.bat
文件,因此我执行了该文件。5. 设置所需的库
根据我对
fastmcp
示例的搜索结果,requests
库也是必需的,因此可以一起安装。创建
requirements.txt
文件: 将安装的库列表保存到文件中,这样以后在其他环境中可以轻松地进行相同的设置,或者与他人共享。由于我的环境可能会有所不同,因此我会创建这个文件。使用
requirements.txt
安装依赖的命令:pip install -r requirements.txt
6. 获取 API 密钥
- 创建一个
.env
文件。.env
是环境变量文件,用于连接实际的密钥。 - 直接将密钥写入 Python 文件的方式存在安全问题。
6-1. Claude API 访问方法
访问 https://www.anthropic.com/api 。
创建密钥。
由于我的密钥是私人的,为了不展示,我特意创建了一个新账户。
访问 https://dev.springernature.com/ 并创建密钥。
同样,我的密钥不会展示。
7. 编写 MCP 工具代码
- 在项目文件夹中创建一个以
.py
结尾的 Python 文件。 - 我们的目标是创建一个 Nature 论文搜索工具,因此命名为
tool_nature.py
。
from fastmcp import FastMCP
import requests
from urllib.parse import urlencode
import os
from dotenv import load_dotenv
import sys# 加载环境变量
load_dotenv()# 初始化 MCP 实例
mcp = FastMCP("Nature API Tool Server")# 定义常量
BASE_URL = "http://api.springernature.com/metadata/json"
API_KEY = os.getenv("NATURE_API_KEY")# 如果没有 API 密钥则立即退出
if not API_KEY:print("[FATAL] 环境变量 'NATURE_API_KEY' 未设置。", file=sys.stderr)raise RuntimeError("[CRITICAL] 环境变量 'NATURE_API_KEY' 未设置。请在 .env 或系统环境中注册密钥。")@mcp.tool()
def search_nature_articles(keyword: str, max_results: int = 3) -> str:"""使用 Nature(Open API)根据给定的关键字搜索论文标题和摘要。结果将以摘要形式返回。"""query_params = {"q": keyword,"api_key": API_KEY,"p": max_results}try:response = requests.get(f"{BASE_URL}?{urlencode(query_params)}")response.raise_for_status()data = response.json()records = data.get("records", [])if not records:return f"未找到关于 '{keyword}' 的结果。"output_lines = [f"\n 搜索结果: {keyword}"]for i, article in enumerate(records):title = article.get("title", "无标题")# 摘要类型安全处理abstract_raw = article.get("abstract", "无摘要")if isinstance(abstract_raw, dict):abstract = abstract_raw.get("p", "无摘要")else:abstract = abstract_rawurl_list = article.get("url", [])url = url_list[0].get("value") if url_list else "N/A"abstract_summary = (abstract[:400] + "...") if len(abstract) > 400 else abstractoutput_lines.append(f"\n{i+1}. {title}\n URL: {url}\n 摘要: {abstract_summary}")return "\n".join(output_lines)except requests.exceptions.RequestException as e:print(f"[ERROR] API 请求时发生错误: {e}", file=sys.stderr)return f"[ERROR] API 请求时发生错误: {e}"except Exception as e:print(f"[ERROR] 数据处理时发生错误: {e}", file=sys.stderr)return f"[ERROR] 数据处理时发生错误: {e}"# 启动 MCP 服务器if __name__ == "__main__":# --------------------------------------------------------------------------# [重要] 下面的 print 语句中的 'http://localhost:3333' 地址相关说明:# 1. 该地址仅为示例,不是实际的 FastMCP 服务器访问地址。# 2. 当使用 Claude Desktop 执行此脚本作为 MCP 服务器时,# FastMCP 不使用网络端口(HTTP),# 而是通过 stdio(标准输入输出)与 Claude Desktop 进行通信。# 3. 因此无法直接访问 'http://localhost:3333'。# 4. 该地址仅供参考,假设将来使用 FastAPI 构建网络服务器或扩展时,# 可将其视为占位符或示例。# --------------------------------------------------------------------------print(" 正在启动 Nature 工具服务器... http://localhost:3333")mcp.run()
7-1 ## .vscode/launch.json 示例(用于调试)
{"version": "0.2.0","configurations": [{"name": "运行 MCP 工具","type": "python","request": "launch","program": "${workspaceFolder}/tool_nature.py","envFile": "${workspaceFolder}/.env"}]
}
8. 配置 MCP 服务器
配置通过修改 claude_desktop_config.json
文件进行。
可以在以下路径创建该文件:
- Windows:
%APPDATA%\Claude\claude_desktop_config.json
- MacOS:
~/Library/Application Support/Claude/claude_desktop_config.json
或者: 点击 Claude 桌面左上角菜单 - 文件 - 设置 - 开发者 - 编辑配置按钮。
8-1. 手动注册 MCP 服务器(修改配置文件 claude_desktop_config.json
)
Claude Desktop 可以通过配置文件手动注册 MCP 服务器。
(示例是我的文件路径。)
{"mcpServers": {"nature": {"command": "Python 路径","args": ["py 文件所在的路径"]}}
}
运行 tool_nature.py
9. 启动
首先需要在 VSCode 中运行 py 脚本。
然后可以在 Claude 桌面开发者界面看到正在运行的状态。
10. 现在可以做的事
摘要总结
Call tool search_nature_articles with keyword="感兴趣的领域关键词"
URL 返回
search_nature_articles(keyword="感兴趣的领域关键词")
获取两篇相关论文,并返回其摘要和 URL。
Bouns: 如果想在 "localhost:3333" 端口上通过 HTTP 接收请求,该怎么做?
这需要使用 FastAPI、Flask、aiohttp 等单独启动服务器 ,而不是使用 FastMCP
:
from fastapi import FastAPI
from fastmcp import MCPMiddlewareapp = FastAPI()
app.add_middleware(MCPMiddleware, tools=[...])# 这样 FastAPI 就会在 http://localhost:3333 端口上监听请求
→ 这种方式适用于使用 transport="sse"
的情况。
→ 当前的 FastMCP
默认不使用这种方式。
平時上傳的文章性質與以往有很大的不同,因此感到有些遺憾。
我的博客文章通常面向所有語言的使用者,但最近發表了一些針對特定語言的內容,對此我感到對欣賞本博客的所有讀者有些抱歉。
最近因為忙於工地工作,沒有時間撰寫理論性的文章。
對期待我的讀者們表示歉意。
相关文章:
从MCP基础到FastMCP实战应用
MCP(https://github.com/modelcontextprotocol) MCP(模型上下文协议) 是一种专为 基于LLM的工具调用外部工具而设计的协议 , 本质上是 LLM ↔ 工具之间的RPC(远程过程调用) 的一种安全且一致的处理方式, 是…...
【云备份】服务端工具类实现
1.文件实用工具类设计 不管是客户端还是服务端,文件的传输备份都涉及到文件的读写,包括数据管理信息的持久化也是如此,因此首先设 计封装文件操作类,这个类封装完毕之后,则在任意模块中对文件进行操作时都将变的简单化…...
如何在Cursor中使用MCP服务
前言 随着AI编程助手的普及,越来越多开发者选择在Cursor等智能IDE中进行高效开发。Cursor不仅支持代码补全、智能搜索,还能通过MCP(Multi-Cloud Platform)服务,轻松调用如高德地图API、数据库等多种外部服务ÿ…...
PB的框架advgui反编译后控件无法绘制的处理(即导入pbx的操作步骤)
advguiobjects.pbl反编译后,涉及到里面一个用pbni开发的一个绘制对象需要重新导入才可以。否则是黑色的无法绘制控件: 对象的位置在: 操作: 导入pbx文件中的对象。 恢复正常: 文章来源:PB的框架advgui反编译…...
第 11 届蓝桥杯 C++ 青少组中 / 高级组省赛 2020 年真题,选择题详细解释
一、选择题 第 2 题 在二维数组按行优先存储的情况下,元素 a[i][j] 前的元素个数计算如下: 1. **前面的完整行**:共有 i 行,每行 n 个元素,总计 i * n 个元素。 2. **当前行的前面元素**:在行内&#x…...
Python 装饰器基础知识科普
装饰器定义与基本原理 装饰器本质上是一个可调用的对象,它接收另一个函数(即被装饰的函数)作为参数。装饰器可以对被装饰的函数进行处理,之后返回该函数,也可以将其替换为另一个函数或可调用对象。 代码示例理解 有…...
数字基带信号和频带信号的区别解析
数字基带信号和数字频带信号是通信系统中两种不同的信号形式,它们的核心区别在于是否经过调制以及适用的传输场景。以下是两者的主要区别和分析: 1. 定义与核心区别 数字基带信号(Digital Baseband Signal) 未经调制的原始数字信号…...
Nginx Proxy Manager 中文版安装部署
目录 Nginx Proxy Manager 中文版安装部署教程一、项目简介1.1 主要功能特点1.2 项目地址1.3 系统架构与工作原理1.4 适用场景 二、系统要求2.1 硬件要求2.2 软件要求 三、Docker环境部署3.1 CentOS系统安装Docker3.2 Ubuntu系统安装Docker3.3 安装Docker Compose 四、安装Ngin…...
类和对象(拷贝构造和运算符重载)下
类和对象(拷贝构造和运算符重载)下 这一集的主要目标先是接着上一集讲完日期类。然后再讲一些别的运算符的重载,和一些语法点。 这里我把这一集要用的代码先放出来:(大家拷一份代码放在编译器上先) Date.h #include <iostream> #include <cassert> …...
Codeforces Round 1008 (Div. 2) C
C 构造 题意:a的数据范围大,b的数据范围小,要求所有的a不同,考虑让丢失的那个a最大即可。问题变成:构造一个最大的a[i] 思路:令a2是最大的,将a1,a3,a5....a2*n1,置为最大的b,将a4,a…...
操作系统(1)多线程
在当今计算机科学领域,多线程技术已成为提高程序性能和响应能力的关键手段。无论是高性能计算、Web服务器还是图形用户界面应用程序,多线程都发挥着不可替代的作用。本文将全面介绍操作系统多线程的概念、实现原理、同步机制以及实际应用场景,…...
系统架构设计师:设计模式——创建型设计模式
一、创建型设计模式 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建、组合和表示它的那些对象。一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象。 随着系统演化得越来越依赖于对象复合而不是类…...
使用Set和Map解题思路
前言 Set和Map这两种数据结构,在解决一些题上,效率很高。跟大家简单分享一些题以及如何使用Set和Map去解决这些题目。 题目链接 136. 只出现一次的数字 - 力扣(LeetCode) 138. 随机链表的复制 - 力扣(LeetCode) 旧…...
Java 算法入门:从基础概念到实战示例
在计算机科学领域,算法如同魔法咒语,能够将无序的数据转化为有价值的信息。对于 Java 开发者而言,掌握算法不仅是提升编程能力的关键,更是解决复杂问题的核心武器。本文将带领你走进 Java 算法的世界,从基础概念入手&a…...
【大模型】图像生成:ESRGAN:增强型超分辨率生成对抗网络的革命性突破
深度解析ESRGAN:增强型超分辨率生成对抗网络的革命性突破 技术演进与架构创新核心改进亮点 环境配置与快速入门硬件要求安装步骤 实战全流程解析1. 单图像超分辨率重建2. 自定义数据集训练3. 视频超分处理 核心技术深度解析1. 残差密集块(RRDB࿰…...
记录搭建自己的应用中心-需求看板搭建
记录搭建自己的应用中心-需求看板搭建 人员管理新增用户组织用户登录和操作看板状态看板任务通知任务详情 人员管理 由于不是所有人都有应用管理权限,所以额外做了一套应用登录权限,做了一个新的组织人员表,一个登录账户下的所有应用人员共享…...
探秘数据结构:构建高效算法的灵魂密码
摘要 数据结构作为计算机科学的基石,其设计与优化直接影响算法效率、资源利用和系统可靠性。本文系统阐述数据结构的基础理论、分类及其核心操作,涵盖数组、链表、栈、队列、树、图、哈希表与堆等经典类型。深入探讨各结构的应用场景与性能对比…...
多节点监测任务分配方法比较与分析
多监测节点任务分配方法是分布式系统、物联网(IoT)、工业监测等领域的核心技术,其核心目标是在资源受限条件下高效分配任务,以优化系统性能。以下从方法分类、对比分析、应用场景选择及挑战等方面进行系统阐述: 图1 多…...
spring-boot-maven-plugin 将spring打包成单个jar的工作原理
spring-boot-maven-plugin 是 Spring Boot 的 Maven 插件,它的核心功能是将 Spring Boot 项目打包成一个独立的、可执行的 Fat JAR(包含所有依赖的 JAR 包)。以下是它的工作原理详解: 1. 默认 Maven 打包 vs Spring Boot 插件打包…...
盐化行业数字化转型规划详细方案(124页PPT)(文末有下载方式)
资料解读:《盐化行业数字化转型规划详细解决方案》 详细资料请看本解读文章的最后内容。 该文档聚焦盐化行业数字化转型,全面阐述了盐化企业信息化建设的规划方案,涵盖战略、架构、实施计划、风险及效益等多个方面,旨在通过数字化…...
开源革命:从技术共享到产业变革——卓伊凡的开源实践与思考-优雅草卓伊凡
开源革命:从技术共享到产业变革——卓伊凡的开源实践与思考-优雅草卓伊凡 一、开源的本质与行业意义 1.1 开源软件的定义与内涵 当卓伊凡被问及”软件开源是什么”时,他给出了一个生动的比喻:”开源就像将食谱公之于众的面包师,…...
解锁 C++26 的未来:从语言标准演进到实战突破
一、C26 的战略定位与开发进展 C26 的开发已进入功能冻结阶段,预计 2026 年正式发布。作为 C 标准委员会三年一迭代的重要版本,其核心改进聚焦于并发与并行性的深度优化,同时在内存管理、元编程等领域实现重大突破。根据 ISO C 委员会主席 H…...
terraform实现本地加密与解密
在 Terraform 中实现本地加密与解密(不依赖云服务),可以通过 OpenSSL 或 GPG 等本地加密工具配合 External Provider 实现。以下是完整的安全实现方案: 一、基础架构设计 # 文件结构 . ├── secrets │ ├── encrypt.sh …...
黄雀在后:外卖大战新变局,淘宝+饿了么开启电商大零售时代
当所有人以为美团和京东的“口水战”硝烟渐散,外卖大战告一段落时,“螳螂捕蝉,黄雀在后”,淘宝闪购联合饿了么“闪现”外卖战场,外卖烽火再度燃起。 4 月30日,淘宝天猫旗下即时零售业务“小时达”正式升级…...
基本功能学习
一.enum枚举使用 E_SENSOR_REQ_NONE 的定义及用途 在传感器驱动开发或者电源管理模块中,E_SENSOR_REQ_NONE通常被用来表示一种特殊的状态或请求模式。这种状态可能用于指示当前没有活动的传感器请求,或者是默认初始化状态下的一种占位符。 可能的定义…...
59常用控件_QComboBox的使用
目录 代码示例:使用下拉框模拟麦当劳点餐 代码示例:从文件中加载下拉框的选项 QComboBox表示下拉框 核心属性 属性说明currentText当前选中的文本currentIndex当前选中的条目下标。 从 0 开始计算。如果当前没有条目被选中,值为 -1editable是否允许修改…...
卡洛诗西餐的文化破圈之路
在餐饮市场的版图上,西餐曾长期被贴上“高端”“舶来品”“纪念日专属”的标签,直到卡洛诗以高性价比西餐的定位破局,将意大利风情与家庭餐桌无缝衔接。这场从异国符号到家常选择的转型,不仅是商业模式的创新,更是一部…...
Python-57:Base32编码和解码问题
问题描述 你需要实现一个 Base32 的编码和解码函数。 相比于 Base32,你可能更熟悉 Base64,Base64 是非常常见的用字符串形式表示二进制数据的方式,在邮件附件、Web 中的图片中都有广泛的应用。 Base32 是 Base64 的变种,与 Bas…...
【排序算法】八大经典排序算法详解
一、直接选择排序(Selection Sort)算法思想算法步骤特性分析 二、堆排序(Heap Sort)算法思想关键步骤特性分析 三、直接插入排序(Insertion Sort)算法思想算法步骤特性分析 四、希尔排序(Shell …...
近端策略优化PPO详解:python从零实现
🧠 向所有学习者致敬! “学习不是装满一桶水,而是点燃一把火。” —— 叶芝 我的博客主页: https://lizheng.blog.csdn.net 🌐 欢迎点击加入AI人工智能社区! 🚀 让我们一起努力,共创…...
C# System.Text.Json终极指南(十):从基础到高性能序列化实战
一、JSON序列化革命:System.Text.Json的架构优势 1.1 核心组件解析 1.2 性能基准测试(.NET 8) 操作Newtonsoft.JsonSystem.Text.Json性能提升简单对象序列化1,200 ns450 ns2.7x大型对象反序列化15 ms5.2 ms2.9x内存分配(1k次操作)45 MB12 MB3.75x二、基础序列化操作精解 …...
Centos7.9 安装mysql5.7
1.配置镜像(7.9的镜像过期了) 2.备份原有的 CentOS 基础源配置文件 sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak 3.更换为国内镜像源 sudo vi /etc/yum.repos.d/CentOS-Base.repo 将文件内容替换为以下内容&am…...
Qt指南针
Qt写的指南针demo. 运行结果 滑动调整指针角度 实现代码 h文件 #ifndef COMPASS_H #define COMPASS_H#include <QWidget> #include <QColor>class Compass : public QWidget {Q_OBJECT// 可自定义属性Q_PROPERTY(QColor backgroundColor READ backgroundColor WRI…...
杜邦分析法
杜邦分析法(DuPont Analysis)是一种用于分析企业财务状况和经营绩效的综合分析方法,由美国杜邦公司在20世纪20年代率先采用,故得名。以下是其相关内容介绍: 核心指标与分解 净资产收益率(ROE):杜邦分析法的核心指标,反映股东权益的收益水平,用以衡量公司运用自有资本…...
给U盘加上图标
电脑插入U盘后,U盘的那个标志没有特色,我们可以换成有意义的照片作为U盘图标,插上U盘就能看到,多么地浪漫。那该如何设置呢?一起来看看吧 选择一张ICO格式的图片到U盘里 PNG转ICO - 在线转换图标文件PNG转ICO - 免费…...
人工智能对未来工作的影响
人工智能对未来工作的影响是多方面的,既包括对就业结构的改变,也涉及工作方式、职业技能需求以及社会政策的调整。以下是对人工智能对未来工作影响的详细分析: 一、就业结构的变革 岗位替代与消失 人工智能技术在许多领域展现出强大的自动化…...
RocketMQ常见面试题一
1. RocketMQ 是什么?它的核心组件有哪些? 答:RocketMQ 是阿里巴巴开源的一款分布式消息中间件,支持高吞吐、低延迟、高可用的消息发布与订阅。 核心组件: NameServer:轻量级注册中心,管理 Broker 的元数据(路由信息),无状态。 Broker:消息存储和转发节点,分为 Mas…...
C++调试(壹):初步认识WinDbg和dump文件
目录 1.前言 2.WinDbg是什么? 3.WinDbg安装 4.Dump文件是什么? 5.生成Dump文件的场景 前言 这是一个关于C调试的博客,该系列博客主要是讲解如何使用WinDbg工具结合dump文件调试程序。在日常开发过程中,我们往往无法完…...
centos7 离线安装python3 保留python2
一、事前准备: (1)查看centos具体版本 cat /etc/redhat-releaseCentOS Linux release 7.4.1708 (Core) (2)查看linux中当前python版本 centos7 默认安装python2.7.5 (3)查看python3的依赖&#…...
【dify—9】Chatflow实战——博客文章生成器
目录 一、创建Chatflow 二、创建变量 三、添加时间工具 四、编写提示词 五、回复输出 六、运行 第一部分 安装difydocker教程:【difydocker安装教程】-CSDN博客 第二部分 dock重装教程:【dify—2】docker重装-CSDN博客 第三部分 dify拉取镜像&…...
华为OD机试真题——斗地主之顺子(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
2025 A卷 100分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录…...
3.2/Q2,Charls最新文章解读
文章题目:Internet usage elevates elderly obesity: evidence from a difference-in-differences analysis of the broadband China policy DOI:10.1186/s13690-025-01565-9 中文标题:互联网使用导致老年人肥胖:中国宽带政策差异…...
Seata服务端开启事务核心源码解析
文章目录 概述一、doGlobalBegin1.1、createGlobalSession1.2、addSessionLifecycleListener1.3、begin 概述 Seata服务端作为TC角色,用于接收客户端标注了GlobalTransactional也就是TM角色的开启事务,提交/回滚事务请求,维护全局和分支事务的…...
Seata服务端回滚事务核心源码解析
文章目录 前言一、doGlobalRollback3.1、changeGlobalStatus3.2、doGlobalRollback 前言 本篇介绍Seata服务端接收到客户端TM回滚请求,进行处理并且驱动所有的RM进行回滚的源码。 一、doGlobalRollback doGlobalRollback是全局回滚的方法: 首先依旧…...
PMP-第九章 项目资源管理(一)
项目资源管理概述 项目资源管理包括识别、获取和管理所需资源以完成项目的各个过程资源主要分为实物资源和人力资源;实物资源包括设备、材料和基础设施等团队资源或人员指的是人力资源团队资源管理与项目干系人管理有重叠的部分,本章重点关注组成项目团…...
【Unity】MVP框架的使用例子
在提到MVP之前,可以先看看这篇MVC的帖子: 【Unity】MVC的简单分享以及一个在UI中使用的例子 MVC的不足之处: 在MVC的使用中,会发现View层直接调用了Model层的引用,即这两个层之间存在着一定的耦合性,而MV…...
Matlab/Simulink - BLDC直流无刷电机仿真基础教程(四) - PWM调制模拟
Matlab/Simulink - BLDC直流无刷电机仿真基础教程(四) - PWM调制模拟 前言一、PWM调制技术基本原理二、仿真模型中加入PWM调制三、逆变电路MOS管添加体二极管四、模拟添加机械负载五、仿真模型与控制框图文章相关模型文件下载链接参考链接 前言 本系列文…...
x86架构详解:定义、应用及特点
一、x86架构的定义 x86 是由Intel公司开发的复杂指令集(CISC)处理器架构,起源于1978年的Intel 8086处理器,后续扩展至32位(IA-32)和64位(x86-64)。其名称来源于早期处理器型号的“8…...
C++学习-入门到精通-【3】控制语句、赋值、自增和自减运算符
C学习-入门到精通-【3】控制语句、赋值、自增和自减运算符 控制语句、赋值、自增和自减运算符 C学习-入门到精通-【3】控制语句、赋值、自增和自减运算符一、什么是算法二、伪代码三、控制结构顺序结构选择结构if语句if...else语句switch语句 循环结构while语句 四、算法详述&a…...
【Bootstrap V4系列】学习入门教程之 页面内容排版
Bootstrap V4 学习入门教程之 页面内容排版 按钮上的指针排版一、Global settings 全局设置二、Headings 标题2.1 Customizing headings 自定义标题2.2 Display headings 显示标题2.3 Lead 引导 三、Blockquotes 块引用3.1 Naming a source 命名源3.2 Alignment 对齐 四、Lists…...