mcp解读——概述及整体架构

概念介绍

什么是模型上下文协议 (MCP)

MCP(模型上下文协议)是一种用于将 AI 应用程序连接到外部系统的开源标准。
使用 MCP,Claude 或 ChatGPT 等人工智能应用程序可以连接到数据源(例如本地文件、数据库)、工具(例如搜索引擎、计算器)和工作流程(例如专门提示),使它们能够访问关键信息并执行任务。
将 MCP 视为用于 AI 应用的 USB-C 端口。正如 USB-C 提供了连接电子设备的标准化方式一样,MCP 也提供了将 AI 应用程序连接到外部系统的标准化方式。
在这里插入图片描述

MCP 有哪些能力?

  • 代理可以访问 Google 日历和 Notion,充当更加个性化的人工智能助手。
  • Claude Code 可以使用 Figma 设计生成整个 Web 应用程序。
  • 企业聊天机器人可以连接到整个组织的多个数据库,使用户能够使用聊天来分析数据。
  • AI 模型可以在 Blender 上创建 3D 设计并使用 3D 打印机打印出来。

为什么 MCP 很重要?

MCP 可以带来一系列好处。
开发人员 :MCP 在构建或集成 AI 应用程序或代理时减少了开发时间和复杂性。
AI 应用程序或代理 :MCP 提供对数据源、工具和应用程序生态系统的访问,这将增强功能并改善最终用户体验。
最终用户 :MCP 会产生功能更强大的 AI 应用程序或代理,它们可以访问用户的数据并在必要时代表用户采取行动。

体系结构概述

概述讨论了其范围和核心概念 ,并提供了一个示例来演示每个核心概念。
由于 MCP SDK 抽象化了许多问题,因此大多数开发人员可能会发现数据层协议部分是最有用的。它讨论了 MCP 服务器如何为 AI 应用程序提供上下文。

范围

  • MCP 规范 :MCP 规范,概述了客户端和服务器的实现要求。
  • MCP SDK:用于实现 MCP 的不同编程语言的 SDK。
  • MCP 开发工具 :用于开发 MCP 服务器和客户端的工具,包括 MCP Inspector
  • MCP 参考服务器实现:MCP 服务器的参考实现。

MCP 成员

MCP 遵循客户端-服务器架构,其中 MCP 主机(如 Claude Code 或 Claude Desktop 等 AI 应用程序)建立与一个或多个 MCP 服务器的连接。MCP 主机通过为每个 MCP 服务器创建一个 MCP 客户端来实现这一点。每个 MCP 客户端都与其相应的 MCP 服务器保持专用的一对一连接。
MCP 架构的主要成员是:

  • MCP 主机 :协调和管理一个或多个 MCP 客户端的 AI 应用程序
  • MCP 客户端 :维护与 MCP 服务器的连接并从 MCP 服务器获取上下文供 MCP 主机使用的组件
  • MCP 服务器 :向 MCP 客户端提供上下文的程序

例如 :Visual Studio Code 充当 MCP 主机。当 Visual Studio Code 建立与 MCP 服务器(如 Sentry MCP 服务器 )的连接时,Visual Studio Code 运行时会实例化一个 MCP 客户端对象,该对象用于维护与 Sentry MCP 服务器的连接。当 Visual Studio Code 随后连接到另一个 MCP 服务器(例如本地文件系统服务器 )时,Visual Studio Code 运行时会实例化一个额外的 MCP 客户端对象来维护此连接,从而保持 MCP 客户端与 MCP 服务器的一对一关系。

在这里插入图片描述

请注意,MCP 服务器是指提供上下文数据的程序,无论它在哪里运行。MCP 服务器可以在本地或远程执行。例如,当 Claude Desktop 启动文件系统服务器时, 服务器在同一台机器上本地运行,因为它使用 STDIO 运输。这通常称为“本地”MCP 服务器。官方 Sentry MCP 服务器在 Sentry 平台上运行,并使用 Streamable HTTP 传输。这通常称为“远程”MCP 服务器。

MCP层

MCP 由两层组成:

  • 数据层 :定义基于 JSON-RPC 的客户端-服务器通信协议,包括生命周期管理和核心原语,例如工具、资源、提示和通知。
  • 传输层 :定义支持客户端和服务器之间数据交换的通信机制和通道,包括特定于传输的连接建立、消息成帧和授权。

从概念上讲,数据层是内层,而传输层是外层。

数据层

数据层实现了基于 JSON-RPC 2.0 的交换协议,该协议定义了消息结构和语义。该层包括:

  • 生命周期管理 :处理客户端和服务器之间的连接初始化、功能协商和连接终止
  • 服务器功能 :使服务器能够提供核心功能,包括 AI 作工具、上下文数据资源以及与客户端之间的交互模板提示
  • 客户端功能 :使服务器能够要求客户端从主机 LLM 中采样,从用户中获取输入,并将消息记录到客户端
  • 实用程序功能 :支持附加功能,例如实时更新通知和长时间运行作的进度跟踪
传输层

传输层管理客户端和服务器之间的通信通道和身份验证。它处理 MCP 参与者之间的连接建立、消息成帧和安全通信

MCP 支持两种传输机制:

  • 标准传输 :使用标准输入/输出流在同一台机器上的本地进程之间进行直接进程通信,提供最佳性能,没有网络开销。
  • 可流式传输 HTTP 传输 :将 HTTP POST 用于客户端到服务器消息,并使用可选的服务器发送事件来实现流式处理功能。此传输支持远程服务器通信,并支持标准 HTTP 身份验证方法,包括持有者令牌、API 密钥和自定义标头。MCP 建议使用 OAuth 获取身份验证令牌。

传输层从协议层抽象出通信细节,从而在所有传输机制中实现相同的 JSON-RPC 2.0 消息格式。

数据层协议

MCP 的核心部分是定义 MCP 客户端和 MCP 服务器之间的模式和语义。开发人员可能会发现数据层——尤其是原语集——是 MCP 中最有趣的部分。它是 MCP 的一部分,定义了开发人员将上下文从 MCP 服务器共享到 MCP 客户端的方式。

MCP 使用 JSON-RPC 2.0 作为其底层 RPC 协议。客户端和服务器相互发送请求并做出相应的响应。当不需要响应时,可以使用通知。

生命周期管理

MCP是一种有状态协议,需要实现生命周期管理。生命周期管理的目的是协调客户端与服务器双方支持的运行能力。具体规范可参阅技术说明书,示例代码展示了初始化序列的实现。

原语

MCP 原语是 MCP 中最重要的概念。它们定义了客户端和服务器可以相互提供什么。这些基元指定了可以与 AI 应用程序共享的上下文信息类型以及可以执行的作范围。

MCP 定义了服务器可以公开的三个核心原语:

  • 工具 :AI 应用程序可以调用来执行作的可执行函数(例如,文件作、API 调用、数据库查询)
  • 资源 :向 AI 应用程序提供上下文信息的数据源(例如,文件内容、数据库记录、API 响应)
  • 提示 :可重用的模板,有助于构建与语言模型的交互(例如,系统提示、少量示例)

每个原始类型都有相关的发现 (/list)、检索 (/get) 方法,在某些情况下还用于执行 (tools/call) 的方法。MCP 客户端将使用 */list 方法来发现可用的原语。例如,客户端可以首先列出所有可用的工具(tools/list),然后执行它们。这种设计允许列表是动态的。

作为一个具体的例子,考虑一个提供有关数据库的上下文的 MCP 服务器。它可以公开用于查询数据库的工具、包含数据库架构的资源以及包含用于与工具交互的少量示例的提示。

有关服务器基元的更多详细信息,请参阅服务器概念 。

MCP 还定义了客户端可以公开的原语。这些基元允许 MCP 服务器作者构建更丰富的交互。

  • 采样 :允许服务器从客户端的 AI 应用程序请求语言模型完成。当服务器的作者想要访问语言模型,但希望保持模型独立性并且不在其 MCP 服务器中包含语言模型 SDK 时,这非常有用。他们可以使用采样/完成方法从客户端的 AI 应用程序请求语言模型完成。
  • 引出 :允许服务器向用户请求其他信息。当服务器的作者想要从用户那里获取更多信息或要求确认作时,这非常有用。他们可以使用引出/请求方法向用户请求其他信息。
  • 日志记录 :使服务器能够向客户端发送日志消息以进行调试和监控。

实例

数据层

本节提供了 MCP 客户端-服务器交互的分步演练,重点关注数据层协议。我们将演示使用 JSON-RPC 2.0 消息的生命周期序列、工具作和通知。

1. 初始化(生命周期管理)

MCP 通过功能协商握手从生命周期管理开始。如生命周期管理部分所述,客户端发送初始化请求以建立连接并协商支持的功能。

初始化请求:

{"jsonrpc": "2.0","id": 1,"method": "initialize","params": {"protocolVersion": "2025-06-18","capabilities": {"elicitation": {}},"clientInfo": {"name": "example-client","version": "1.0.0"}}
}

初始化响应:

{"jsonrpc": "2.0","id": 1,"result": {"protocolVersion": "2025-06-18","capabilities": {"tools": {"listChanged": true},"resources": {}},"serverInfo": {"name": "example-server","version": "1.0.0"}}
}
了解初始化交互

初始化过程是 MCP 生命周期管理的关键部分,具有几个关键目的:

  • 协议版本协商 :protocolVersion 字段(例如“2025-06-18”)确保客户端和服务器都使用兼容的协议版本。这可以防止不同版本尝试交互时可能发生的通信错误。如果未协商相互兼容的版本,则应终止连接。
  • 功能发现 :capabilities 对象允许各方声明他们支持哪些功能,包括他们可以处理哪些基元 (工具、资源、提示)以及它们是否支持通知等功能。这通过避免不受支持的作来实现高效通信。
  • 身份交换 :clientInfo 和 serverInfo 对象提供标识和版本控制信息,用于调试和兼容性目的。

客户端能力 :
“elicitation”: {} - 客户端声明它可以处理用户交互请求(可以接收 elicitation/create method calls)

服务器功能 :
“tools”: {“listChanged”: true} - 服务器支持工具原语,并且可以在其工具列表更改时发送工具/list_changed 通知

“resources”: {} - 服务器还支持 resources 原语(可以处理 resources/list 和 resources/read 方法)

初始化成功后,客户端会发送通知以指示其已准备就绪:

{"jsonrpc": "2.0","method": "notifications/initialized"
}
这在人工智能应用程序中的工作原理

在初始化期间,AI 应用程序的 MCP 客户端管理器会建立与已配置服务器的连接,并存储其功能以供以后使用。应用程序使用此信息来确定哪些服务器可以提供特定类型的功能(工具、资源、提示)以及它们是否支持实时更新。

# Pseudo Code
async with stdio_client(server_config) as (read, write):async with ClientSession(read, write) as session:init_response = await session.initialize()if init_response.capabilities.tools:app.register_mcp_server(session, supports_tools=True)app.set_server_ready(session)
2. 工具发现(基元)

现在连接已建立,客户端可以通过发送工具/列表请求来发现可用工具。此请求是 MCP 工具发现机制的基础——它允许客户端在尝试使用它们之前了解服务器上可用的工具。

工具列表请求:

{"jsonrpc": "2.0","id": 2,"method": "tools/list"
}

工具列表响应:

{"jsonrpc": "2.0","id": 2,"result": {"tools": [{"name": "calculator_arithmetic","title": "Calculator","description": "Perform mathematical calculations including basic arithmetic, trigonometric functions, and algebraic operations","inputSchema": {"type": "object","properties": {"expression": {"type": "string","description": "Mathematical expression to evaluate (e.g., '2 + 3 * 4', 'sin(30)', 'sqrt(16)')"}},"required": ["expression"]}},{"name": "weather_current","title": "Weather Information","description": "Get current weather information for any location worldwide","inputSchema": {"type": "object","properties": {"location": {"type": "string","description": "City name, address, or coordinates (latitude,longitude)"},"units": {"type": "string","enum": ["metric", "imperial", "kelvin"],"description": "Temperature units to use in response","default": "metric"}},"required": ["location"]}}]}
}
了解工具发现请求

tools/list 请求很简单,不包含任何参数。

了解工具发现响应

响应包含一个工具数组,该数组提供有关每个可用工具的全面元数据。这种基于数组的结构允许服务器同时公开多个工具,同时保持不同功能之间的清晰边界。

响应中的每个工具对象都包含几个关键字段:

  • name:服务器命名空间中工具的唯一标识符。这是工具执行的主键,应遵循清晰的命名模式(例如,calculator_arithmetic 而不仅仅是计算
  • title:客户端可以向用户显示的工具的人类可读显示名称
  • description:详细说明该工具的作用以及何时使用它
  • inputSchema:定义预期输入参数的 JSON 模式,启用类型验证并提供有关必需和可选参数的清晰文档
这在人工智能应用程序中的工作原理

AI 应用程序从所有连接的 MCP 服务器获取可用工具,并将它们组合到语言模型可以访问的统一工具注册表中。这使得 LLM 能够了解它可以执行哪些作,并在对话期间自动生成适当的工具调用。

用于 AI 应用工具发现的伪代码:

# Pseudo-code using MCP Python SDK patterns
available_tools = []
for session in app.mcp_server_sessions():tools_response = await session.list_tools()available_tools.extend(tools_response.tools)
conversation.register_available_tools(available_tools)
3. 工具执行(图元)

客户端现在可以使用 tools/call 方法执行工具。这演示了 MCP 原语在实践中的使用方式:在发现可用工具后,客户端可以使用适当的参数调用它们。

工具调用请求:

{"jsonrpc": "2.0","id": 3,"method": "tools/call","params": {"name": "weather_current","arguments": {"location": "San Francisco","units": "imperial"}}
}

工具调用响应:

{"jsonrpc": "2.0","id": 3,"result": {"content": [{"type": "text","text": "Current weather in San Francisco: 68°F, partly cloudy with light winds from the west at 8 mph. Humidity: 65%"}]}
}
工具调用的关键要素

请求结构包括几个重要组件:

  • name:必须与发现响应 (weather_current) 中的工具名称完全匹配。这确保服务器可以正确识别要执行的工具。

  • arguments:包含工具的 inputSchema 定义的输入参数。在此示例中:

    • location:“旧金山”(必填参数)
    • 单位 :“英制”(可选参数,如果未指定,则默认为“公制”)
  • JSON-RPC 结构: 使用标准 JSON-RPC 2.0 格式和唯一 ID 进行请求-响应关联。

了解工具执行响应

该响应展示了 MCP 灵活的内容系统:

  • 内容(array) :工具响应返回内容对象数组,允许丰富的多格式响应(文本、图像、资源等)
  • 内容类型 :每个内容对象都有一个类型字段。在此示例中,“type”: “text” 表示纯文本内容,但 MCP 支持针对不同用例的各种内容类型。
  • 结构化输出 :响应提供可作的信息,人工智能应用程序可以将其用作语言模型交互的上下文。

这种执行模式允许人工智能应用程序动态调用服务器功能并接收结构化响应,这些响应可以集成到与语言模型的对话中。

这在人工智能应用程序中的工作原理

当语言模型决定在对话期间使用工具时,AI 应用程序会拦截工具调用,将其路由到适当的 MCP 服务器,执行它,并将结果作为对话流的一部分返回给 LLM。这使得法学硕士能够访问实时数据并在外部世界中执行作。

# Pseudo-code for AI application tool execution
async def handle_tool_call(conversation, tool_name, arguments):session = app.find_mcp_session_for_tool(tool_name)result = await session.call_tool(tool_name, arguments)conversation.add_tool_result(result.content)
4. 实时更新(通知)

MCP 支持实时通知,使服务器能够在不明确请求的情况下通知客户端有关更改的信息。这演示了通知系统,这是保持 MCP 连接同步和响应的关键功能。

了解工具列表更改通知

当服务器的可用工具发生变化时(例如,当新功能可用、现有工具被修改或工具暂时不可用时),服务器可以主动通知连接的客户端:

{"jsonrpc": "2.0","method": "notifications/tools/list_changed"
}
MCP 通知的主要特点
  • 无需响应 :请注意,通知中没有 id 字段。这遵循 JSON-RPC 2.0 通知语义,其中不需要或发送任何响应。
  • 基于功能 :此通知仅由在初始化期间在其工具功能中声明 “listChanged”: true 的服务器发送(如步骤 1 所示)。
  • 事件驱动 :服务器根据内部状态变化决定何时发送通知,使 MCP 连接动态且响应迅速。
客户端对通知的响应

收到此通知后,客户端通常会通过请求更新的工具列表来做出反应。这将创建一个刷新周期,使客户对可用工具的理解保持最新:

{"jsonrpc": "2.0","id": 4,"method": "tools/list"
}
为什么通知很重要

出于以下几个原因,该通知系统至关重要:

  • 动态环境 :工具可能会根据服务器状态、外部依赖项或用户权限修改
  • 效率: 客户端不需要轮询更改;发生更新时,他们会收到通知
  • 一致性 :确保客户端始终拥有有关可用服务器功能的准确信息
  • 实时协作 :实现响应式 AI 应用程序,能够适应不断变化的环境

这种通知模式从工具扩展到其他 MCP 原语,从而实现客户端和服务器之间的全面实时同步。

这在人工智能应用程序中的工作原理

当 AI 应用程序收到有关更改工具的通知时,它会立即刷新其工具注册表并更新 LLM 的可用功能。这确保了正在进行的对话始终可以访问最新的工具集,并且 LLM 可以在新功能可用时动态适应。

# Pseudo-code for AI application notification handling
async def handle_tools_changed_notification(session):tools_response = await session.list_tools()app.update_available_tools(session, tools_response.tools)if app.conversation.is_active():app.conversation.notify_llm_of_new_capabilities()

参考:https://modelcontextprotocol.io/docs/getting-started/intro

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/96708.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/96708.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI 赋能云端运维:基于 MCP 协议深度集成 Codebuddy CLI 与腾讯云 Lighthouse 的实战全解

摘要 在云计算技术飞速演进的今天,服务器的管理与运维正经历着从传统手动操作、脚本自动化到智能化、对话式交互的深刻变革。本文将系统性地、全流程地展示如何将腾讯云 Lighthouse 轻量应用服务器与尖端的 AI 编程助手 Codebuddy CLI 进行深度集成。我们将从服务器…

【Proteus仿真】【51单片机】教室灯光控制器设计

文章目录一、功能简介二、软件设计三、实验现象联系作者一、功能简介 本项目使用Proteus8仿真51单片机控制器,使用LCD1602液晶、DS1302时钟模块、人体红外感应模块、开关LED指示灯、继电器、PCF8591 ADC模块、光敏传感器、按键模块等。 主要功能: 系统运…

成为一个年薪30W+的FPGA工程师是一种什么体验?

FPGA(Field-Programmable Gate Array)是现场可编程门阵列,通过硬件描述语言设计电路,可实现并行计算,广泛应用于通信、人工智能、工业控制等领域。FPGA工程师的工作包括RTL设计、仿真验证、时序分析等。尽管并非所有公…

ZooKeeper Java客户端与分布式应用实战

1. ZooKeeper Java客户端实战 ZooKeeper应用开发主要通过Java客户端API连接和操作ZooKeeper集群&#xff0c;有官方和第三方两种客户端选择。 1.1 ZooKeeper原生Java客户端 依赖引入 <dependency><groupId>org.apache.zookeeper</groupId><artifactId>…

0303 【软考高项】项目管理概述 - 组织系统(项目型组织、职能型组织、矩阵型组织)

0303 【软考高项】项目管理概述 - 组织系统&#xff08;项目型组织、职能型组织、矩阵型组织&#xff09; 目录0303 【软考高项】项目管理概述 - 组织系统&#xff08;项目型组织、职能型组织、矩阵型组织&#xff09;一、基本概念二、职能型组织二、项目型组织三、矩阵型组织3…

计算机视觉与模式识别前沿一览:2025年8月arXiv 热点研究趋势解析

本推文分析了arXiv中Computer Vision and Patteren Recognition(计算机视觉与模式识别)领域2025年8月发布的近50篇论文的研究热点&#xff0c;旨在帮助读者快速了解近期领域内的前沿技术与研究方向。arXiv是全球最具影响力的开放电子预印本平台之一&#xff0c;由美国国家科学基…

vim复制本地到linux服务器上,换行缩进过大,不对的问题

所搜的试了:setlocal shiftwidth? :setlocal tabstop? :setlocal expandtab? :setlocal softtabstop?" 设置为 4 个空格缩进 :setlocal shiftwidth4" 通常你会希望 tabstop 和 softtabstop 也保持一致 :setlocal tabstop4 :setlocal softtabstop4尝试完不起作用&…

【小程序】微信小程序九宫格抽奖动画(完整版)

这是一个微信小程序九宫格抽奖页面的完整代码&#xff0c;包括 WXML、WXSS、JS 和 JSON。 效果 九宫格抽奖功能说明&#xff1a; 静态页面布局&#xff1a; 3x3 九宫格&#xff0c;中间是“立即抽奖”按钮&#xff0c;周围是奖品金额。抽奖动画&#xff1a; 点击“立即抽奖”…

java类冲突

一、为什么会发生类冲突&#xff1f; 在 Java 的类加载机制中&#xff0c;类的唯一性是由“类加载器类的全限定名”共同决定的。当你的项目依赖了多个 jar 包&#xff0c;这些 jar 包里有同名的类&#xff08;包名和类名完全一样&#xff09;&#xff0c;但实现却不同。类加载器…

GIT客户端配置支持中文

环境&#xff1a;windows10、Git-2.42.0.2-64-bit.exe1. 问题描述客户端安装后&#xff0c;默认是不支持中文显示的&#xff0c;中文名的文件显示乱码&#xff0c;提交时打的标签内容也不支持中文显示。2. 解决新建Git全局配置文件&#xff0c;文件名为.gitconfig&#xff0c;内…

Teable vs NocoDB 开源、在线协同 多维表格大PK

文章目录 Teable 简介 特性 docker-compose部署 功能截图 NocoDB 简介 docker-compose部署 功能截图 总结 Teable 简介 Teable 是一款企业级高性能多维表格解决方案,通过无代码方式快速构建业务管理系统,支持私有部署和精细权限管理。 官方文档 特性 🚀 卓越性能 轻松处…

SQL专家云能做哪些事儿?

背景数据库是信息化的基石&#xff0c;支撑着整个业务系统&#xff0c;发挥着非常重要的作用&#xff0c;被喻为“IT的心脏”。因此&#xff0c;让数据库安全、稳定、高效地运行已经成为IT管理者必须要面对的问题。但是很多组织没有专业的DBA&#xff0c;数据库运维面临着极大的…

Python 高效实现 Word 转 PDF:告别 Office 依赖

在工作中&#xff0c;经常会遇到需要把 Word 文档转换成 PDF 的情况。比如生成报表、分发文档、或者做归档保存&#xff0c;PDF 格式在排版和跨平台显示上更稳定。传统的做法往往依赖 Microsoft Office 或 LibreOffice 等软件来完成转换&#xff0c;但在自动化环境&#xff08;…

SQL优化简单思路

1. 背景 在实际生产中&#xff0c;因为SQL较慢、SQL关联不合理、不了解索引的性质、不熟悉mysql执行计划分析&#xff0c;可能会出现一些生产事故&#xff0c;本文会简单说明SQL通常的优化分析思路。 基本的优化原则&#xff1a; 先优化SQL再优化mysql server最后优化硬件 2. 优…

软考 系统架构设计师系列知识点之杂项集萃(144)

接前一篇文章:软考 系统架构设计师系列知识点之杂项集萃(143) 第268题 甲、乙、丙、丁4人加工A、B、C、D四种工件所需工时如下表所示。指派每人加工一种工件,四人加工四种工件其总工时最短的最优方案中,工件B应由()加工。 A B C D 甲

P1168 中位数

题目描述给定一个长度为 N 的非负整数序列 A&#xff0c;对于前奇数项求中位数。输入格式第一行一个正整数 N。第二行 N 个正整数 A1…N​。输出格式共 ⌊2N1​⌋ 行&#xff0c;第 i 行为 A1…2i−1​ 的中位数。输入输出样例输入 #1复制7 1 3 5 7 9 11 6输出 #11 3 5 6输入 #…

【CE】图形化CE游戏教程通关手册

【CE】图形化CE游戏教程通关手册 文章目录【CE】图形化CE游戏教程通关手册导读需求1️⃣ 第一关提示操作总结2️⃣ 第二关&#xff08;代码共享&#xff09;提示操作验证3️⃣ 第三关提示提示总结导读 需求 除了Tutorial-x86_64.exe教程外&#xff0c;CE还提供了图形化教程gtu…

leetcode 2785. 将字符串中的元音字母排序 中等

给你一个下标从 0 开始的字符串 s &#xff0c;将 s 中的元素重新 排列 得到新的字符串 t &#xff0c;它满足&#xff1a;所有辅音字母都在原来的位置上。更正式的&#xff0c;如果满足 0 < i < s.length 的下标 i 处的 s[i] 是个辅音字母&#xff0c;那么 t[i] s[i] 。…

支付子系统架构及常见问题

支付流程对于支付系统来说&#xff0c;它最重要的其实是安全&#xff0c;所以整个支付流程采用秘钥加签的方式进行操作&#xff0c;一共四对秘钥&#xff0c;以支付宝在线支付为例子&#xff0c;首先通过RSA2算法生成商户公钥以及商户私钥&#xff0c;同时支付宝平台会提供支付…

内存传输速率MT/s

1 0 0 0 0 0 0 0 0 010 9 8 7 6 5 4 3 2 1十 亿 千 百 十 万 千 百 十 个亿 万 万 万传输速率 …