当前位置: 首页 > news >正文

实战解析MCP-使用本地的Qwen-2.5模型-AI协议的未来?

文章目录

目录

文章目录

前言

一、MCP是什么?

1.1MCP定义

1.2工作原理

二、为什么要MCP?

2.1 打破碎片化的困局

2.2 实时双向通信,提升交互效率

2.3 提高安全性与数据隐私保护

三、MCP 与 LangChain 的区别

3.1 目标定位不同

3.2 实现方式的差异

3.3 使用场景的侧重点

四、MCP 的未来发展前景

4.1 行业内外的热烈讨论

4.2 开放生态与标准共识

4.3 跨平台与多模式部署

五、实战

5.1 服务端

5.2 客户端

总结


前言

近年来,随着大语言模型(LLM)在各类应用中的广泛使用,我们逐渐意识到:仅靠单一模型的能力,很难满足实际应用中对数据、工具、环境等多样化需求的不断增长。就在这种背景下,Anthropic 推出的模型上下文协议(Model Context Protocol,简称 MCP)悄然登场,它被誉为“为 AI 装上 USB-C 接口”的革命性标准,为 AI 工具整合带来了全新的思路。本文将深入探讨 MCP 是什么、为什么要使用 MCP,以及 MCP 与 LangChain 等其他技术的核心区别和应用前景。最后,我会用本地的qwen模型实战完成MCP的应用。


一、MCP是什么?

1.1MCP定义

模型上下文协议(MCP)是一种开放标准协议,旨在为大语言模型与外部工具、数据源之间建立统一、标准化的通信接口。简单来说,MCP 就像一个“万能适配器”,只需一次整合,就能让 AI 模型(例如 Anthropic 的 Claude)连接上各式各样的数据接口与工具,而不必为每个数据源单独开发对接代码。这种设计理念不仅大大降低了开发难度,还为不同平台间的互操作性奠定了基础。

“MCP 通过统一的通信协议,让模型能够与外部数据源和工具实现无缝对接,就像 USB-C 接口让各种设备共享充电和数据传输功能一样”。

1.2工作原理

MCP 的核心架构基于客户端—服务器模式,主要由三个部分组成:

  • MCP 主机(Host):一般为 AI 应用程序或桌面端工具,例如 Claude 桌面版、IDE 插件等,它负责发起请求。
  • MCP 客户端(Client):集成在主机内部,通过标准化协议与服务端建立稳定连接,发送请求并接收响应。
  • MCP 服务器(Server):负责对外提供具体的数据、工具或提示信息。它可以连接到本地资源(如文件、数据库)或远程服务(如第三方 API)。

这种设计保证了数据的动态传输和实时交互,支持双向通信,使得 AI 不再是单向的信息接收者,而可以主动触发操作和获取实时反馈。

二、为什么要MCP?

2.1 打破碎片化的困局

在传统的开发过程中,AI 应用与每个外部工具或数据源的对接往往都是孤立的。每个 API 都有不同的认证方式、数据格式和错误处理机制,这不仅增加了开发者的负担,也导致系统整体的集成性和扩展性大打折扣。MCP 则通过一次标准化的整合,解决了这一“每扇门都有一把不同钥匙”的问题。通过 MCP,开发者可以将各种工具和数据源统一接入,大幅提升开发效率。

2.2 实时双向通信,提升交互效率

传统 API 往往采用单向的请求—响应模式,模型仅能被动等待数据返回。而 MCP 支持双向实时通信,这种机制不仅使得数据查询更加迅速,还允许模型主动触发操作。例如,在需要实时获取天气信息或查询本地文件内容的场景中,MCP 可以让 AI 模型通过与外部工具的双向对话,获得更准确的上下文数据,从而生成更贴切的回答

2.3 提高安全性与数据隐私保护

在许多企业级应用场景中,数据隐私和安全性是首要考量。传统做法中,数据往往需要上传到云端进行处理,这在安全性和隐私保护上存在隐患。而 MCP 的设计允许数据在本地或企业内部网络中流转,避免将敏感信息暴露到公共云端。同时,通过统一的协议标准,MCP 可以在不同工具间实施统一的安全策略,确保各方访问权限受控。

三、MCP 与 LangChain 的区别

近年来,LangChain 作为一款开源框架,也在大语言模型整合工具方面受到广泛关注。那么,MCP 与 LangChain 到底有何区别?

3.1 目标定位不同
  • MCP:作为一个开放的标准协议,MCP 侧重于提供一种统一的通信接口,使 AI 模型能够通过一次整合接入成千上万的外部数据源和工具。其核心在于标准化、动态发现和双向通信,让开发者可以构建灵活、安全且高效的 AI Agent。
  • LangChain:则更像是一个上层应用框架,它为开发者提供了大量现成的工具和模块,帮助他们快速构建 AI Agent。LangChain 的优势在于成熟的生态和丰富的示例,但在面对不同平台和服务时,其接入方式可能仍然存在一定的碎片化问题。
3.2 实现方式的差异
  • MCP:要求服务端和客户端按照统一的 JSON-RPC 或 SSE 等标准协议进行通信,实现上相对底层和标准化。它更注重与底层系统的整合,强调的是“写一次,接入万次”的理念。
  • LangChain:则更偏向于为开发者提供高层次的抽象和即插即用的组件,其实现方式可能因平台不同而略有差异,需要开发者在具体场景中进行适配和扩展。
3.3 使用场景的侧重点
  • MCP:适用于那些对数据安全、实时交互和统一接口要求较高的场景,如企业内部系统集成、敏感数据处理以及需要跨平台动态调用工具的应用。
  • LangChain:则更适合快速开发原型和构建简单 AI Agent,在开发者社区中已积累了丰富的案例和资源,但在面对大规模、复杂系统时,可能需要额外整合措施来弥补标准化不足的问题。

四、MCP 的未来发展前景

4.1 行业内外的热烈讨论

自 MCP 问世以来,各大厂商和开发者社区对其前景展开了激烈讨论。LangChain 的大佬们甚至就此展开了辩论——一部分人认为 MCP 是未来 AI 工具整合的必由之路,能够大幅降低开发者成本并实现真正的“AI原生”体验;另一部分则持怀疑态度,认为目前的标准还不够成熟,仍有许多细节需要打磨。

4.2 开放生态与标准共识

MCP 的最大亮点在于其开放性和标准化。通过建立统一的协议,不仅能让单个厂商如 Anthropic 推动自己的生态,还能吸引更多公司和开源社区参与进来。正如一些业内专家所说,“MCP 可能成为未来 AI 工具整合的通用标准”,这种共识如果达成,将极大地促进 AI 生态系统的健康发展。

4.3 跨平台与多模式部署

未来,MCP 不仅可以在本地和企业内部网络中运行,还能通过 WebSocket、HTTP 等网络协议实现远程部署。这意味着,AI 模型无论是在云端还是边缘设备,都能通过 MCP 统一对接外部工具和数据,实现无缝协作和实时交互。这种跨平台的灵活性,将是 MCP 在实际应用中大放异彩的重要因素。

五、实战

5.1 服务端
from mcp.server.fastmcp import FastMCPmcp = FastMCP("FileWriter")@mcp.tool()
def write_to_txt(filename: str, content: str) -> str:"""将指定内容写入文本文件并且保存到本地。参数:filename: 文件名(例如 "output.txt")content: 要写入的文本内容返回:写入成功或失败的提示信息"""try:with open(filename, "w", encoding="utf-8") as f:f.write(content)return f"成功写入文件 {filename}。"except Exception as e:return f"写入文件失败:{e}"if __name__ == "__main__":mcp.run(transport='stdio')  # 默认使用 stdio 传输
5.2 客户端
import os
import asyncio
from typing import Optional
from contextlib import AsyncExitStack
import json
import tracebackfrom mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_clientfrom openai import OpenAI
from dotenv import load_dotenvload_dotenv()  # 加载环境变量从 .envclass MCPClient:def __init__(self):# 初始化会话和客户端对象self.session: Optional[ClientSession] = None # 会话对象self.exit_stack = AsyncExitStack() # 退出堆栈self.openai = OpenAI(api_key="EMPTY", base_url="") self.model="qwen-2.5-14b"def get_response(self, messages: list,tools: list):response = self.openai.chat.completions.create(model=self.model,max_tokens=1000,messages=messages,tools=tools,)return responseasync def get_tools(self):# 列出可用工具response = await self.session.list_tools()available_tools = [{ "type":"function","function":{"name": tool.name,"description": tool.description, # 工具描述"parameters": tool.inputSchema  # 工具输入模式}} for tool in response.tools]return available_toolsasync def connect_to_server(self, server_script_path: str):"""连接到 MCP 服务器参数:server_script_path: 服务器脚本路径 (.py 或 .js)"""is_python = server_script_path.endswith('.py')is_js = server_script_path.endswith('.js')if not (is_python or is_js):raise ValueError("服务器脚本必须是 .py 或 .js 文件")command = "python" if is_python else "node"# 创建 StdioServerParameters 对象server_params = StdioServerParameters(command=command,args=[server_script_path],env=None)# 使用 stdio_client 创建与服务器的 stdio 传输stdio_transport = await self.exit_stack.enter_async_context(stdio_client(server_params))# 解包 stdio_transport,获取读取和写入句柄self.stdio, self.write = stdio_transport# 创建 ClientSession 对象,用于与服务器通信self.session = await self.exit_stack.enter_async_context(ClientSession(self.stdio, self.write))# 初始化会话await self.session.initialize()# 列出可用工具response = await self.session.list_tools()tools = response.toolsprint("
连接到服务器,工具列表:", [tool.name for tool in tools])async def process_query(self, query: str) -> str:"""使用 OpenAI 和可用工具处理查询"""# 创建消息列表messages = [{"role": "user","content": query}]# 列出可用工具available_tools = await self.get_tools()print(f"
可用工具: {json.dumps([t['function']['name'] for t in available_tools], ensure_ascii=False)}")# 处理消息response = self.get_response(messages, available_tools)# 处理LLM响应和工具调用tool_results = []final_text = []for choice in response.choices:message = choice.messageis_function_call = message.tool_calls# 如果不调用工具,则添加到 final_text 中if not is_function_call:final_text.append(message.content)# 如果是工具调用,则获取工具名称和输入else:#解包tool_callstool_name = message.tool_calls[0].function.nametool_args = json.loads(message.tool_calls[0].function.arguments)print(f"准备调用工具: {tool_name}")print(f"参数: {json.dumps(tool_args, ensure_ascii=False, indent=2)}")try:# 执行工具调用,获取结果result = await self.session.call_tool(tool_name, tool_args)print(f"
工具调用返回结果类型: {type(result)}")print(f"工具调用返回结果属性: {dir(result)}")print(f"工具调用content类型: {type(result.content) if hasattr(result, 'content') else '无content属性'}")# 安全处理contentcontent = Noneif hasattr(result, 'content'):if isinstance(result.content, list):content = "
".join(str(item) for item in result.content)print(f"将列表转换为字符串: {content}")else:content = str(result.content)print(f"工具调用content值: {content}")else:content = str(result)print(f"使用完整result作为字符串: {content}")tool_results.append({"call": tool_name, "result": content})final_text.append(f"[调用工具 {tool_name} 参数: {json.dumps(tool_args, ensure_ascii=False)}]")# 继续与工具结果进行对话if message.content and hasattr(message.content, 'text'):messages.append({"role": "assistant","content": message.content})# 将工具调用结果添加到消息messages.append({"role": "user", "content": content})# 获取下一个LLM响应print("获取下一个LLM响应...")response = self.get_response(messages, available_tools)# 将结果添加到 final_textcontent = response.choices[0].message.content or ""final_text.append(content)except Exception as e:print(f"
工具调用异常: {str(e)}")print(f"异常详情: {traceback.format_exc()}")final_text.append(f"工具调用失败: {str(e)}")return "
".join(final_text)async def chat_loop(self):"""运行交互式聊天循环(没有记忆)"""print("
MCP Client 启动!")print("输入您的查询或 'quit' 退出.")while True:try:query = input("
Query: ").strip()if query.lower() == 'quit':breakprint("
处理查询中...")response = await self.process_query(query)print("
" + response)except Exception as e:print(f"
错误: {str(e)}")print(f"错误详情: {traceback.format_exc()}")async def cleanup(self):"""清理资源"""await self.exit_stack.aclose() async def main():"""主函数:初始化并运行 MCP 客户端此函数执行以下步骤:1. 检查命令行参数是否包含服务器脚本路径2. 创建 MCPClient 实例3. 连接到指定的服务器4. 运行交互式聊天循环5. 在结束时清理资源用法:python client.py <path_to_server_script>"""# 检查命令行参数if len(sys.argv) < 2:print("Usage: python client.py <path_to_server_script>")sys.exit(1)# 创建 MCPClient 实例client = MCPClient()try:# 连接到服务器await client.connect_to_server(sys.argv[1])# 运行聊天循环await client.chat_loop()finally:# 确保在任何情况下都清理资源await client.cleanup()if __name__ == "__main__":import sysasyncio.run(main())

输出指令:写一首诗并且保存到本地。成功完成任务。


总结

随着 AI 技术的不断进步和应用场景的日益复杂,单一大语言模型的能力已无法满足实际需求。MCP 作为一种全新的开放标准协议,通过提供统一、标准化、双向实时的接口,为 AI 模型整合外部工具和数据源提供了革命性的解决方案。从打破碎片化困局、提升数据安全、到实现跨平台部署,MCP 的出现无疑将推动 AI 应用向更高层次发展。

虽然目前行业内对 MCP 的看法仍存在分歧——有支持者认为它将引领未来,有质疑者将其视为短暂的热潮——但不可否认的是,MCP 已经为开发者提供了一种全新的工具接入思路,其标准化和开放性特质,必将在未来的 AI 生态中发挥越来越重要的作用。

无论你是偏向于使用 MCP 构建企业级解决方案,还是更喜欢依赖 LangChain 快速开发原型,都可以看到这一领域正在经历一场深刻的变革。正如业内专家所言,“未来的 AI 应用生态,很可能就是在这两种思路的碰撞与融合中诞生的。”

希望这篇文章能够为你提供对 MCP 及其在 AI 领域中作用的全面认识。如果你有更多想法或疑问,欢迎在评论区交流探讨!

相关文章:

实战解析MCP-使用本地的Qwen-2.5模型-AI协议的未来?

文章目录 目录 文章目录 前言 一、MCP是什么&#xff1f; 1.1MCP定义 1.2工作原理 二、为什么要MCP&#xff1f; 2.1 打破碎片化的困局 2.2 实时双向通信&#xff0c;提升交互效率 2.3 提高安全性与数据隐私保护 三、MCP 与 LangChain 的区别 3.1 目标定位不同 3.…...

从零开始学习three.js(20):three.js实现天气与时间动态效果(白天,黑夜,下雨,下雪)

基于Three.js的天气与时间动态效果实现 本文将通过代码解析&#xff0c;介绍如何使用Three.js实现动态天气&#xff08;下雨、下雪&#xff09;和时间&#xff08;白天、黑夜&#xff09;切换效果。完整代码基于一个交互式天气模拟项目&#xff0c;支持粒子密度、速度和环境亮…...

sqli-labs靶场23-28a关(过滤)

目录 less23&#xff08;--过滤&#xff09; less24&#xff08;二次注入&#xff09; less25&#xff08;or过滤&#xff09; less25a&#xff08;or过滤&#xff09; less26&#xff08;--和空格过滤报错&#xff09; less26a&#xff08;--空格过滤盲注&#xff09; …...

Sigmoid与Softmax:从二分类到多分类的深度解析

Sigmoid与Softmax:从二分类到多分类的深度解析 联系 函数性质:二者都是非线性函数 ,也都是指数归一化函数,可将输入值映射为0到1之间的实数 ,都能把输出转化成概率分布的形式,在神经网络中常作为激活函数使用。Softmax是Sigmoid的推广:从功能角度看,Softmax函数可视为…...

uni-app x正式支持鸿蒙原生应用开发

DCloud发布的HBuilderX 4.64正式版&#xff0c;支持编译uni-app x项目到鸿蒙平台&#xff0c;实现跨平台开发鸿蒙原生应用。至此&#xff0c;uni-app x 已经完成Android、iOS、鸿蒙、Web、微信小程序等主流平台全覆盖。 uni-app x&#xff0c;是下一代 uni-app&#xff0c;是一…...

【软件推荐——pdf2docx】

pdf2docx Open source Python library for converting PDF to DOCX. https://github.com/ArtifexSoftware/pdf2docx Install pip install pdf2docx使用 from pdf2docx import Converterpdf_file D:\my\c4611_sample_explain.pdf docx_file D:\my\c4611_sample_explain.d…...

HarmonyOS开发组件基础

个人简介 &#x1f468;‍&#x1f4bb;‍个人主页&#xff1a; 魔术师 &#x1f4d6;学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全栈发展 &#x1f6b4;个人状态&#xff1a; 研发工程师&#xff0c;现效力于政务服务网事业 &#x1f1e8;&#x1f1f3;人生格言&…...

JMeter 测试工具--组件--简单介绍

目录 ​编辑 一、测试计划&#xff08;Test Plan&#xff09; 二、线程组&#xff08;Thread Group&#xff09; 三、取样器&#xff08;Sampler&#xff09; 四、监听器&#xff08;Listener&#xff09; 五、逻辑控制器&#xff08;Logic Controller&#xff09; 六、断…...

ECPF 简介

ECPF&#xff08;Embedded CPU Function&#xff0c;嵌入式CPU功能&#xff09;是NVIDIA BlueField DPU特有的一种功能类型&#xff0c;和PF&#xff08;Physical Function&#xff0c;物理功能&#xff09;、VF&#xff08;Virtual Function&#xff0c;虚拟功能&#xff09;密…...

【Opencv】canny边缘检测提取中心坐标

采用opencv 对图像中的小球通过canny边缘检测的方式进行提取坐标 本文介绍了如何使用OpenCV对图像中的小球进行Canny边缘检测&#xff0c;并通过Zernike矩进行亚像素边缘检测&#xff0c;最终拟合椭圆以获取小球的精确坐标。首先&#xff0c;图像被转换为灰度图并进行高斯平滑…...

C#实现访问远程硬盘(附源码)

在现实场景中&#xff0c;我们经常用到远程桌面功能&#xff0c;而在某些场景下&#xff0c;我们需要使用类似的远程硬盘功能&#xff0c;这样能非常方便地操作对方电脑磁盘的目录、以及传送文件。那么&#xff0c;这样的远程硬盘功能要怎么实现了&#xff1f; 这次我们将给出…...

AI日报 · 2025年05月16日|Google DeepMind推出AlphaEvolve,能自主设计高级算法的编码代理

全球AI新闻日报 日期&#xff1a;2025年5月16日 目录 OpenAI与CoreWeave签署40亿美元新协议&#xff0c;GPT-4.1模型全面推出Google DeepMind推出AlphaEvolve&#xff0c;能自主设计高级算法的编码代理Anthropic律师因Claude模型虚构法律引用被迫道歉Meta推迟旗舰AI模型&quo…...

TCP/IP 知识体系

TCP/IP 知识体系 一、TCP/IP 定义 全称&#xff1a;Transmission Control Protocol/Internet Protocol&#xff08;传输控制协议/网际协议&#xff09;核心概念&#xff1a; 跨网络实现信息传输的协议簇&#xff08;包含 TCP、IP、FTP、SMTP、UDP 等协议&#xff09;因 TCP 和…...

记一次缓存填坑省市区级联获取的操作

先说缓存是什么&#xff1f; 缓存主要是解决高并发&#xff0c;大数据场景下&#xff0c;热点数据快速访问。缓存的原则首先保证数据的准确和最终数据一致&#xff0c;其次是距离用户越近越好&#xff0c;同步越及时越好。 再说我们遇到的场景&#xff1a; 接手项目后&#…...

【时空图神经网络 交通】相关模型2:STSGCN | 时空同步图卷积网络 | 空间相关性,时间相关性,空间-时间异质性

注:仅学习使用~ 前情提要: 【时空图神经网络 & 交通】相关模型1:STGCN | 完全卷积结构,高效的图卷积近似,瓶颈策略 | 时间门控卷积层:GLU(Gated Linear Unit),一种特殊的非线性门控单元目录 STSGCN-2020年1.1 背景1.2 模型1.2.1 问题背景:现有模型存在的问题1.2…...

uniapp实现在线pdf预览以及下载

uniapp实现在线pdf预览以及下载 在线预览 遇到的问题 后端返回一个url地址&#xff0c;我需要将在在页面中渲染出来。因为在浏览器栏上我输入url地址就可以直接预览pdf文件&#xff0c;因此直接的想法是通过web-view组件直接渲染。有什么问题呢&#xff1f;在h5端能够正常渲…...

【Rust闭包】rust语言闭包函数原理用法汇总与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…...

裸金属服务器和云服务器之间的差别

裸金属服务器能够直接在硬件上运行&#xff0c;不需要额外的虚化层&#xff0c;让每个应用程序或者是服务都能够在实际的硬件上运行&#xff0c;不需要和其他虚拟服务器来共享资源&#xff1b;而云服务器作为一种虚拟服务器&#xff0c;是通过虚拟化技术为企业提供一个独立的计…...

CentOS系统中升级Python 3.12.2版本

在CentOS系统中升级Python版本是一项常见的操作&#xff0c;尤其是在需要使用较新功能或满足某些软件依赖的情况下。以下是详细的步骤和注意事项&#xff0c;帮助您顺利完成Python版本的升级。 1. 升级Python版本前的准备 在开始升级之前&#xff0c;请确保以下几点&#xff1…...

win10-django项目与mysql的基本增删改查

以下都是在win10系统下&#xff0c;django项目的orm框架对本地mysql的表的操作 models.py----->即表对应的类所在的位置 在表里新增数据 1.引入表对应的在models.py中的类class 2.在views.py中使用函数&#xff1a;类名.objects.create(字段名值,字段名"值"。。。…...

图像处理:预览并绘制图像细节

前言 因为最近在搞毕业论文的事情&#xff0c;要做出一下图像细节对比图&#xff0c;所以我这里写了两个脚本&#xff0c;一个用于框选并同时预览图像放大细节&#xff0c;可显示并返回框选图像的坐标&#xff0c;另外一个是输入框选图像的坐标并将放大的细节放置在图像中&…...

针对面试-微服务篇

1.Spring Cloud 5大组件有哪些? 随着SpringCloudAlibba在国内兴起&#xff0c;我们项目中使用了一些阿里巴巴的组件 注册中心/配置中心 Nacos 负载均衡 Ribbon 服务调用 Feign 服务保护 sentinel 服务网关 Gateway 2. 我看你之前也用过nacos、你能说下nacos与eureka的区别?…...

SRS流媒体服务器(5)源码分析之RTMP握手

1.概述 学习 RTMP 握手逻辑前&#xff0c;需明确两个核心问题&#xff1a; rtmp协议连接流程阶段rtmp简单握手和复杂握手区别 具体可以学习往期博客&#xff1a; RTMP协议分析_rtmp与264的关系-CSDN博客 2.rtmp握手源码分析 2.1 握手入口 根据SRS流媒体服务器(4)可知&am…...

线程池(ThreadPoolExecutor)实现原理和源码细节是Java高并发面试和实战开发的重点

一、线程池核心流程图 ----------------- | 提交任务 | submit/execute -----------------|v ----------------- | 判断核心线程数 | < corePoolSize&#xff1f; -----------------|Yes |Nov v [创建新线程] -----------------| 队列是否满&a…...

C# DataGridView 选中所有复选框

问题描述 在程序中尝试选中所有复选框&#xff0c;但出现错误。如果单击顶部的完整选中/释放复选框&#xff0c;同时选中包含复选框的列&#xff0c;则选定区域不会改变。该如何解决&#xff1f; 上面的图片是点击完整版本之后的。 下面是本文的测试代码&#xff0c;函数 dat…...

linux 服务器安装jira-8.22.0和confluence-8.5.21

前提&#xff1a; 下载资源包 z_atlassian-agent-v1.3.1.zip z_atlassian-confluence-8.5.21-x64.zip z_atlassian-jira-software-8.22.0-x64.zip z_jdk-8u131-linux-x64.tar.gz z_postgresql-12.0.tar.gz 可通过作者本身资源库下载 一&#xff1a;服务器构建文件夹 mkdir /z …...

【计算机网络】HTTP/1.0,HTTP/1.1,HTTP/2,HTTP/3汇总讲解,清晰表格整理面试重点对比

表格汇总 对比维度HTTP/1.0HTTP/1.1HTTP/2HTTP/3传输协议TCPTCPTCP/TLS&#xff08;默认加密&#xff09;UDP&#xff08;基于 QUIC 协议&#xff09;连接方式短连接&#xff08;每次请求/响应后断开&#xff09;引入持久连接&#xff08;Persistent Connection&#xff09;&a…...

Go语言之路————并发

Go语言之路————并发 前言协程管道SelectsyncWaitGroup锁 前言 我是一名多年Java开发人员&#xff0c;因为工作需要现在要学习go语言&#xff0c;Go语言之路是一个系列&#xff0c;记录着我从0开始接触Go&#xff0c;到后面能正常完成工作上的业务开发的过程&#xff0c;如…...

python的家教课程管理系统

目录 技术栈介绍具体实现截图系统设计研究方法&#xff1a;设计步骤设计流程核心代码部分展示研究方法详细视频演示试验方案论文大纲源码获取/详细视频演示 技术栈介绍 Django-SpringBoot-php-Node.js-flask 本课题的研究方法和研究步骤基本合理&#xff0c;难度适中&#xf…...

0x08.Redis 支持事务吗?如何实现?

回答重点 Redis 支持事务,但它的事务与 MySQL 等关系型数据库的事务有着本质区别。MySQL 中的事务严格遵循 ACID 特性,而 Redis 中的事务主要保证的是命令执行的原子性和隔离性,即所有命令在一个不可分割的操作中顺序执行,不会被其他客户端的命令请求所打断。 最关键的区…...

互联网应用的安全防线-身份证实名认证api-身份证三要素验证

随着联网技术的普及&#xff0c;互联网应用已深度渗透人们的生活&#xff0c;从购物下单到社交互动&#xff0c;从金融理财到在线教育&#xff0c;每一次的联网互动都隐藏着一个关乎安全与信任的“隐形卫士”-身份证实名认证接口功能。它如同数字世界的“电子身份证”&#xff…...

本地跑通vue-element-admin项目

GitHub - PanJiaChen/vue-element-admin: :tada: A magical vue admin https://panjiachen.github.io/vue-element-admin 通过加速clone到本地 git clone https://gitclone.com/github.com/PanJiaChen/vue-element-admin.git # 进入项目目录 cd vue-element-admin # 安装依赖…...

el-table表格列宽度自适应

需求&#xff1a;表格错误描述列 要求按照内容最大值设置宽度&#xff1b;如果没有值 则设置最小宽度 <el-table-columnv-else-if"item.prop errorDescription":key"item.code":width"flexColumnWidth(errorDescription, tableConfigA.tableDataA…...

Mysql存储过程(附案例)

​ 文章目录 存储过程概述1、基本语法2、变量①、系统变量②、用户自定义变量③、局部变量 3、流程控制语句①、if语句②、参数③、case语句④、while语句⑤、repeat语句⑥、loop语句⑦、cursor游标⑧、handler 4、存储函数 存储过程概述 存储过程是事先经过编译并存储在数据…...

宇树科技申请 “机器人牌照” 商标,剑指机器人领域新高度​

近日&#xff0c;据天眼查信息显示&#xff0c;杭州宇树科技有限公司有了一项重大举动&#xff0c;其申请注册了 “机器人牌照”“机牌”“Robot license”“Robot plate” 等商标&#xff0c;国际分类涉及科学仪器、运输工具、广告销售等多个领域&#xff0c;当前商标状态均为…...

计算机图形学基础--Games101笔记(一)数学基础与光栅化

数学基础 向量 点乘&#xff0c;叉乘和投影&#xff1a; 插值 三角形插值 **重心坐标&#xff1a;**我们通过任意点的重心坐标来插值。 V α V A β V B γ V C V\alpha V_A\beta V_B\gamma V_C VαVA​βVB​γVC​。注意重心坐标没有投影不变性&#xff0c;如果插值三…...

Chrome拓展(Chrome Extension)开发定时任务插件

Chrome扩展定时任务插件开发指南 核心实现原理 使用Chrome Alarms API实现定时触发通过Service Worker保持后台运行本地存储保存任务配置 开发步骤 创建manifest文件 (manifest.json) {"manifest_version": 3,"name": "定时任务助手","…...

100G QSFP28 BIDI光模块一览:100G单纤高速传输方案|易天光通信

目录 前言 一、易天光通信100G QSFP28 BIDI光模块是什么&#xff1f; 二、易天光通信100G QSFP28 BIDI光模块采用的关键技术 三、100G QSFP28 BIDI光模块的优势 四、以“易天光通信100G BIDI 40km ER1光模块”为例 五、总结&#xff1a;高效组网&#xff0c;从“减”开始 关于…...

每日Prompt:迷你 3D 建筑

提示词 3D Q版迷你风格&#xff0c;一个充满奇趣的迷你星巴克咖啡馆&#xff0c;外观就像一个巨大的外带咖啡杯&#xff0c;还有盖子和吸管。建筑共两层&#xff0c;大大的玻璃窗清晰地展示出内部温馨而精致的设计&#xff1a;木质的家具、温暖的灯光以及忙碌的咖啡师们。街道…...

从另一个视角理解TCP握手、挥手与可靠传输

本文将深入探讨 TCP 协议中三次握手、四次挥手的原理&#xff0c;以及其保证可靠传输的机制。 一、三次握手&#xff1a;为何是三次&#xff0c;而非两次&#xff1f; 建立 TCP 连接的过程犹如一场严谨的 “对话”&#xff0c;需要经过三次握手才能确保通信双方的可靠连接。 三…...

SearxNG本地搜索引擎

SearxNG 是一个强大、开源的 元搜索引擎(meta search engine),它不会存储用户信息,注重隐私保护,并支持从多个搜索引擎聚合结果,用户可以自建部署,打造一个无广告、可定制的搜索平台。 🔍 什么是 SearxNG? SearxNG 是 Searx 的一个积极维护的分支(fork),意在改进…...

基于支持向量机(SVM)的P300检测分类

基于支持向量机&#xff08;SVM&#xff09;的P300检测分类MATLAB实现&#xff0c;包含数据预处理、特征提取和分类评估流程&#xff1a; %% P300检测分类完整流程&#xff08;SVM实现&#xff09; clc; clear; close all;%% 1. 数据加载与模拟生成&#xff08;实际应用需替换…...

Oracle学习日记--Oracle中使用单个inert语句实现插入多行记录

目录 前言&#xff1a; 问题现象&#xff1a; 问题分析&#xff1a; 解决方法&#xff1a; 1、insert into ... union all句式 2、insert all into ...select 1 from dual句式 总结&#xff1a; 前言&#xff1a; 最近项目中使用到了Oracle数据库&#xff0c;由于Oracle数…...

利用边缘计算和工业计算机实现智能视频分析

在人工智能和物联网取得重大进步的时代&#xff0c;智能视频分析&#xff08;IVA&#xff09;正在通过整合先进的人工智能技术来改变视频监控和分析。这项革命性的技术增强了视觉智能&#xff0c;是关键行业创新解决方案的驱动因素。在本文中&#xff0c;我们将介绍IVA的好处、…...

tomcat一闪而过,按任意键继续以及控制台中文乱码问题

问题描述 今天在打开tomcat,启动startup.bat程序时 tomcat直接闪退,后面查找资料后发现,可以通过编辑startup.bat文件内容,在最后一行加入pause即可让程序不会因为异常而终止退出 这样方便查看tomcat所爆出的错误: 然后,我明确看到我的tomcat启动程序显示如下的内容,没有明确…...

go 集成base64Captcha 支持多种验证码

base64Captcha 是一个基于 Go 语言开发的验证码生成库&#xff0c;主要用于在 Web 应用中集成验证码功能&#xff0c;以增强系统的安全性。以下是其主要特点和简介&#xff1a; base64Captcha主要功能 验证码类型丰富&#xff1a;支持生成多种类型的验证码&#xff0c;包括纯…...

【数据结构】线性表--栈

【数据结构】线性表--栈 一.什么是栈二.栈的实现1.栈结构定义&#xff1a;2.栈的初始化&#xff1a;3.栈的销毁&#xff1a;4.插入函数&#xff1a;5.删除函数&#xff1a;6.求栈顶元素&#xff1a;7.求数据个数&#xff1a;8.判空&#xff1a; 三.总结 一.什么是栈 栈是一种重…...

基于亚博K210开发板——麦克风录播测试

开发板 亚博K210开发板 实验目的 本次测试主要学习 K210 通过 I2S 接收和发送的功能&#xff0c;麦克风录音&#xff0c;扬声器播放。 实验准备 实验元件 扬声器、麦克风 元件特性 K210 开发板的麦克风同样是使用 I2S 传输数据&#xff0c;只不过麦克风使用的是 I2S…...

操作系统-锁/内存/中断/IO

文章目录 锁自旋锁互斥锁悲观锁和乐观锁 内存管理物理/虚拟内存页表段表虚拟内存布局写时复制copy on writebrk&#xff0c;mmap页面置换算法 中断中断分类中断流程 网络I/OI/O模型服务器处理并发请求 锁 自旋锁 自旋锁是一种基于忙等待&#xff08;Busy-Waiting&#xff09;…...

割点与其例题

割点 定义&#xff1a; 若一个点在图中被去掉后&#xff0c;图的连通块个数增加&#xff0c;那么这个点就被称为“割点”。如下图所示红点。 定义说白了就是若去掉一个点&#xff0c;图被“断开”的点称为割点。 朴素算法&#xff1a; 枚举每个点 u。遍历图&#xff0c;如果…...