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
英文地址,請注明出處:http://en.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十 億 千 百 十 萬 千 百 十 個億 萬 萬 萬傳輸速率 …