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

2.5 python接口编程

在现代软件开发的复杂生态系统中,不同系统、模块之间的交互协作至关重要。接口编程作为一种关键机制,定义了组件之间的通信规范与交互方式。Python 凭借其卓越的灵活性、丰富的库资源以及简洁易读的语法,在接口编程领域占据了重要地位,广泛应用于各类项目开发中,从 Web 应用到数据处理,再到自动化测试等场景。​

一、接口编程基础概念​

(一)接口的定义​

从本质上讲,接口是一种抽象的规范,它规定了一组方法或行为的签名,但不涉及这些方法的具体实现。在 Python 中,虽然没有像 Java 或 C++ 那样严格意义上的接口关键字,但可以通过抽象基类(ABC)以及抽象方法来模拟接口的概念。例如,使用abc模块创建一个抽象基类,其中的抽象方法强制子类必须实现特定行为,从而确保不同类在遵循相同接口规范下进行交互。​

(二)接口编程的作用​

接口编程最大的优势在于解耦。通过定义清晰的接口,不同模块或系统之间可以独立开发、测试和维护。当一个模块需要与其他模块交互时,只需关注接口所定义的输入输出和行为,而无需了解其内部实现细节。这不仅提高了代码的可维护性,也增强了系统的扩展性。例如,在一个电商系统中,订单处理模块与支付模块通过接口进行交互,支付模块可以随时替换为不同的支付提供商实现,只要它遵循订单处理模块所期望的接口规范,整个系统的其他部分无需进行大规模改动。​

二、Python 接口编程的优势​

(一)动态语言特性​

Python 作为动态语言,在接口编程中展现出极大的灵活性。它允许在运行时动态地绑定方法和属性,这意味着可以在程序运行过程中根据实际需求来调整接口的行为。相比静态语言,Python 无需在编译阶段就确定接口的具体实现,降低了开发的复杂性,提高了开发效率。例如,在编写一个数据处理接口时,可以根据输入数据的类型在运行时动态选择不同的处理函数,而不需要事先定义大量的静态类型检查。​

(二)丰富的库支持​

Python 拥有庞大的标准库和第三方库生态系统,这为接口编程提供了有力支持。例如,Flask和Django等 Web 框架用于构建 Web 接口,它们提供了便捷的路由系统、请求处理机制以及与数据库的交互接口,使得开发 RESTful API 变得轻而易举。FastAPI则专注于高性能的 API 开发,利用 Python 的类型提示功能,在保证代码可读性的同时,能自动生成 API 文档。在数据交换方面,requests库用于发送 HTTP 请求,方便地与其他系统的接口进行通信;pandas库可以高效处理结构化数据,常用于接口数据的解析和转换。​

三、Python 接口编程的实现方式

(一)Web 接口开发

1. 基于 Flask 框架​

Flask 是一个轻量级的 Web 框架,非常适合快速搭建小型 Web 接口。在创建接口时,首先需要安装 Flask 库,通过pip install flask即可完成安装。接着,导入Flask类并创建应用实例。例如,定义一个简单的获取用户信息的接口:

from flask import Flask, jsonifyapp = Flask(__name__)@app.route('/api/user/<int:user_id>', methods=['GET'])
def get_user(user_id):# 这里模拟从数据库获取用户信息user = {'id': user_id, 'name': 'John Doe', 'email': 'johndoe@example.com'}return jsonify(user)if __name__ == '__main__':app.run(debug=True)

在上述代码中,@app.route装饰器用于定义接口的 URL 路径,<int:user_id>是动态参数,methods=['GET']指定该接口仅接受 GET 请求。jsonify函数将 Python 字典转换为 JSON 格式的数据返回给客户端。

2. 基于 Django 框架​

Django 是一个功能强大、全栈式的 Web 框架,适用于开发大型复杂的 Web 接口。创建 Django 项目后,在views.py文件中定义视图函数来处理接口请求。例如,创建一个处理用户注册的接口:

from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
import json@csrf_exempt
def register_user(request):if request.method == 'POST':try:data = json.loads(request.body)username = data.get('username')password = data.get('password')# 这里进行用户注册逻辑,如保存到数据库return JsonResponse({'status':'success','message': 'User registered successfully'})except json.JSONDecodeError:return JsonResponse({'status': 'error','message': 'Invalid JSON data'}, status = 400)else:return JsonResponse({'status': 'error','message': 'Only POST method is allowed'}, status = 405)

3. 基于 FastAPI 框架

FastAPI 基于 Python 的类型提示功能,能快速高效地开发 API。安装 FastAPI 和uvicorn(用于运行 FastAPI 应用)后,编写如下代码创建一个接口:

from fastapi import FastAPI
from pydantic import BaseModelapp = FastAPI()class Item(BaseModel):name: strprice: float@app.post('/api/item/')
def create_item(item: Item):return {'item': item.dict(),'message': 'Item created successfully'}if __name__ == '__main__':import uvicornuvicorn.run(app, host='0.0.0.0', port = 8000)

(二)RPC 接口实现

1. XML - RPC

Python 标准库中提供了xmlrpc模块,用于实现 XML - RPC。它使用 XML 格式在网络上传输数据,是一种简单且跨语言的 RPC 解决方案。以下是一个简单的 XML - RPC 服务器和客户端示例:

服务端

from xmlrpc.server import SimpleXMLRPCServerdef add_numbers(a, b):return a + bserver = SimpleXMLRPCServer(('localhost', 8000))
print("Listening on port 8000...")
server.register_function(add_numbers, 'add')
server.serve_forever()

客户端

import xmlrpc.clientproxy = xmlrpc.client.ServerProxy('http://localhost:8000')
result = proxy.add(3, 5)
print(f"The result of addition is: {result}")

2. json-rpc

与 XML - RPC 类似,但使用 JSON 格式传输数据,在数据量和解析效率上更具优势。jsonrpclib - simple是 Python 中常用的 JSON - RPC 库。以下是一个简单示例:

服务器

from flask import Flask
from jsonrpclib.SimpleJSONRPCServer import SimpleJSONRPCServerapp = Flask(__name__)
server = SimpleJSONRPCServer(('localhost', 8001))def multiply_numbers(a, b):return a * bserver.register_function(multiply_numbers,'multiply')@app.route('/')
def index():return "JSON - RPC Server is running"if __name__ == '__main__':server_thread = threading.Thread(target=server.serve_forever)server_thread.start()app.run(debug=True)

客户端

import jsonrpclibserver = jsonrpclib.Server('http://localhost:8001')
result = server.multiply(4, 6)
print(f"The result of multiplication is: {result}")

3. gRPC

由 Google 开发的高性能 RPC 框架,它使用 Protocol Buffers 作为接口定义语言和数据序列化格式。在 Python 中使用 gRPC,首先需要定义.proto文件来描述服务和消息结构,然后通过工具生成 Python 代码。以下是一个简单的步骤示例:

定义proto:

syntax = "proto3";package helloworld;service Greeter {rpc SayHello(HelloRequest) returns (HelloReply) {}
}message HelloRequest {string name = 1;
}message HelloReply {string message = 1;
}

使用protoc工具生成 Python 代码

服务器代码:

import time
import grpc
from concurrent import futures
import helloworld_pb2
import helloworld_pb2_grpcclass Greeter(helloworld_pb2_grpc.GreeterServicer):def SayHello(self, request, context):return helloworld_pb2.HelloReply(message=f"Hello, {request.name}!")def serve():server = grpc.server(futures.ThreadPoolExecutor(max_workers = 10))helloworld_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server)server.add_insecure_port('[::]:50051')server.start()try:while True:time.sleep(86400)except KeyboardInterrupt:server.stop(0)if __name__ == '__main__':serve()

客户端

import grpc
import helloworld_pb2
import helloworld_pb2_grpcdef run():channel = grpc.insecure_channel('localhost:50051')stub = helloworld_pb2_grpc.GreeterStub(channel)request = helloworld_pb2.HelloRequest(name='Python Client')response = stub.SayHello(request)print("Greeter client received: " + response.message)if __name__ == '__main__':run()

相关文章:

2.5 python接口编程

在现代软件开发的复杂生态系统中&#xff0c;不同系统、模块之间的交互协作至关重要。接口编程作为一种关键机制&#xff0c;定义了组件之间的通信规范与交互方式。Python 凭借其卓越的灵活性、丰富的库资源以及简洁易读的语法&#xff0c;在接口编程领域占据了重要地位&#x…...

睡不着运动锻炼贴士

在快节奏的现代生活中&#xff0c;失眠似乎已成为许多人的“夜间伴侣”。夜晚辗转反侧&#xff0c;白天精神不振&#xff0c;这样的恶性循环让许多人苦不堪言。其实&#xff0c;除了调整作息和饮食习惯&#xff0c;适当的运动也是改善睡眠的一剂良药。今天&#xff0c;就让我们…...

【Python入门】一篇掌握Python中的字典(创建、访问、修改、字典方法)【详细版】

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;《Python/PyTorch极简课》_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目…...

深入理解 HTML 表单与输入

在网页开发的广袤领域中&#xff0c;HTML 表单如同搭建用户与服务器沟通桥梁的基石。它是收集用户输入信息的关键渠道&#xff0c;承载着交互的重任。今天&#xff0c;就让我们一同深入探索 HTML 表单与输入的奥秘。​ HTML 表单在文档中划定出一片独特的区域&#xff0c;这片…...

宝塔docker切换存储目录

1、 停止 Docker 服务 sudo systemctl stop docker2、迁移 Docker 数据目录 sudo mkdir -p /newpath/docker sudo rsync -avz /var/lib/docker/ /newpath/docker/3、修改 Docker 配置文件 vi /etc/docker/daemon.json 内容 {"data-root": "/newpath/docker&q…...

IPoIB驱动中RSS与TSS技术的深度解析:多队列机制与性能优化

在高速网络通信中,IP over InfiniBand(IPoIB) 是实现低延迟、高吞吐的关键技术之一。为了充分发挥多核处理器的性能潜力,IPoIB驱动通过 接收侧扩展(RSS) 和 发送侧扩展(TSS) 技术,实现了数据包处理的多队列并行化。本文结合源码实现与性能优化策略,深入解析其核心机制…...

目前人工智能的发展,判断10年、20年后的人工智能发展的主要方向,或者带动的主要产业

根据2025年的最新行业研究和技术演进趋势&#xff0c;结合历史发展轨迹&#xff0c;未来10-20年人工智能发展的主要方向及带动的产业将呈现以下六大核心趋势&#xff1a; 一、算力革命与底层架构优化 核心地位&#xff1a;算力将成为类似“新能源电池”的基础设施&#xff0c;…...

DeepSeek-prompt指令-当DeepSeek答非所问,应该如何准确的表达我们的诉求?

当DeepSeek答非所问&#xff0c;应该如何准确的表达我们的诉求&#xff1f;不同使用场景如何向DeepSeek发问&#xff1f;是否有指令公式&#xff1f; 目录 1、 扮演专家型指令2、 知识蒸馏型指令3、 颗粒度调节型指令4、 时间轴推演型指令5、 极端测试型6、 逆向思维型指令7、…...

并发编程面试题二

1、java线程常见的基本状态有哪些&#xff0c;这些状态分别是做什么的 &#xff08;1&#xff09;创建&#xff08;New&#xff09;&#xff1a;new Thread()&#xff0c;生成线程对象。 &#xff08;2&#xff09;就绪&#xff08;Runnable&#xff09;:当调用线程对象的sta…...

【NLP】 8. 处理常见词(Stopwords)的不同策略

处理常见词&#xff08;Stopwords&#xff09;的不同策略 在自然语言处理 (NLP) 和信息检索 (IR) 任务中&#xff0c;常见词&#xff08;Stopwords&#xff09; 是指在文本中频繁出现但通常对主要任务贡献较小的词&#xff0c;例如 “the”、“is”、“in”、“and” 等。这些…...

【Java基础】java中的lambda表达式

Java Lambda表达式深度解析&#xff1a;语法、简化规则与实战 前言 Java 8的Lambda表达式通过简化匿名内部类和引入函数式编程&#xff0c;极大提升了代码的简洁性和可读性。 一、Lambda表达式的核心语法 Lambda表达式由参数列表、->符号和表达式主体组成&#xff0c;其基…...

【RS】OneRec快手-生成式推荐模型

note 本文提出了一种名为 OneRec 的统一生成式推荐框架&#xff0c;旨在替代传统的多阶段排序策略&#xff0c;通过一个端到端的生成模型直接生成推荐结果。OneRec 的主要贡献包括&#xff1a; 编码器-解码器结构&#xff1a;采用稀疏混合专家&#xff08;MoE&#xff09;架构…...

DQN 玩 2048 实战|第一期!搭建游戏环境(附 PyGame 可视化源码)

视频讲解&#xff1a; DQN 玩 2048 实战&#xff5c;第一期&#xff01;搭建游戏环境&#xff08;附 PyGame 可视化源码&#xff09; 代码仓库&#xff1a;GitHub - LitchiCheng/DRL-learning: 深度强化学习 2048游戏介绍&#xff0c;引用维基百科 《2048》在44的网格上进行。…...

练习题:87

目录 Python题目 题目 题目分析 代码实现 代码解释 列表推导式部分&#xff1a; 变量赋值和输出&#xff1a; 运行思路 结束语 Python题目 题目 使用列表推导式生成一个包含 1 到 100 中所有偶数的列表。 题目分析 本题要求使用 Python 的列表推导式生成一个包含 …...

二叉树的层序遍历(102)

102. 二叉树的层序遍历 - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a; /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* …...

NVMe集群:加速数据处理

随着大数据和云计算的快速发展&#xff0c;企业面临着前所未有的数据处理挑战。传统的存储技术和架构已经难以满足现代应用对高性能和低延迟的需求。在这种背景下&#xff0c;NVMe&#xff08;Non-Volatile Memory Express&#xff09;集群应运而生&#xff0c;它以其卓越的性能…...

JUC并发编程:共享模型之管程

一、共享带来的问题 &#xff08;1&#xff09;Java的体现 两个线程对初始值为 0 的静态变量一个做自增&#xff0c;一个做自减&#xff0c;各做 5000 次&#xff0c;结果是 0 吗&#xff1f; &#xff08;2&#xff09;问题分析 以上的结果可能是正数、负数、零。为什么呢…...

Java构造方法详解:从入门到实战

目录 一、什么是构造方法&#xff1f; 二、构造方法的作用 三、构造方法分类与使用 1. 默认构造方法 2. 有参构造方法 3. 构造方法重载 四、注意事项&#xff08;避坑指南&#xff09; 五、经典面试题解析 六、实战应用场景 七、总结 一、什么是构造方法&#xff1f; …...

Uniapp 字体加载问题(文件本地存储)

项目场景&#xff1a; 在最近公司开发一款小程序&#xff0c;但是小程序的文字需要用艺术字&#xff0c;就是那种不能用切图绕开的那种&#xff01; 问题描述 我们在使用uni.loadfontface Api请求数据字体文件的时候总是会报错&#xff0c;就是那种网上也找不到解决方法的那种…...

HTML 新手入门:从零基础到搭建第一个静态页面(一)

开启 HTML 学习之旅 在互联网的广袤世界中&#xff0c;网页是我们与信息交互的主要窗口。而 HTML&#xff0c;作为构建网页的基石&#xff0c;就像是搭建房屋的砖块&#xff0c;是网页开发中不可或缺的基础。无论你是对网页开发充满好奇的小白&#xff0c;还是渴望系统学习前端…...

使用multiprocessing实现进程间共享内存

在 Python 中,可以使用多种方法来实现几个进程之间的通信。 简单消息传递:使用 multiprocessing.Queue 或 multiprocessing.Pipe。 共享简单数据:使用 multiprocessing.Value 或 multiprocessing.Array。 共享复杂数据:使用 multiprocessing.Manager。 进程间信号控制:使用…...

在IDEA中连接达梦数据库:详细配置指南

达梦数据库&#xff08;DM Database&#xff09;作为国产关系型数据库的代表&#xff0c;广泛应用于企业级系统开发。本文将详细介绍如何在IntelliJ IDEA中配置并连接达梦数据库&#xff0c;助力开发者高效完成数据库开发工作。 准备工作 1. 下载达梦JDBC驱动 访问达梦官方资…...

docker无法正常拉取镜像问题的解决

目录 1.前言 2.解决方案 1.前言 安装docker后拉取镜像&#xff0c;遇见了如下问题&#xff1a; Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded whil…...

如何在保持安全/合规的同时更快地构建应用程序:DevOps 指南

随着敏捷思维方式的兴起&#xff0c;开发和 DevOps 团队都面临着持续的压力&#xff0c;他们需要以迭代方式缩短发布周期并加快部署速度&#xff0c;以满足不断增长的客户期望。随着这种对速度的追求越来越强烈&#xff0c;维护安全性和合规性标准的复杂性也随之增加。 当今 D…...

SQL Server查询优化

最常用&#xff0c;最有效的数据库优化方式 查询语句层面 避免全表扫描 使用索引&#xff1a;确保查询条件中的字段有索引。例如&#xff0c;查询语句 SELECT * FROM users WHERE age > 20&#xff0c;若 age 字段有索引&#xff0c;数据库会利用索引快速定位符合条件的记…...

iOS底层原理系列04-并发编程

在移动应用开发中&#xff0c;流畅的用户体验至关重要&#xff0c;而并发编程是实现这一目标的关键技术。本文将深入探讨iOS平台上的并发编程和多线程架构&#xff0c;帮助你构建高性能、响应迅速的应用程序。 1. iOS线程调度机制 1.1 线程本质和iOS线程调度机制 线程是操作…...

企业数字化转型数据治理解决方案(119页PPT)(文末有下载方式)

资料解读&#xff1a;企业数字化转型数据治理解决方案 详细资料请看本解读文章的最后内容。 在当今数字化时代&#xff0c;数据已经成为企业最宝贵的资产之一。然而&#xff0c;随着数据量的激增和数据来源的多样化&#xff0c;如何有效管理和利用这些数据成为了企业面临的一…...

git报错:“fatal:refusing to merge unrelated histories“

新建仓库&#xff0c;克隆本地项目到新仓库&#xff0c;首次同步本地已提交的代码到远程时&#xff0c;报错&#xff1a;"fatal:refusing to merge unrelated histories" 。 报错意思是&#xff1a;致命的&#xff1a;拒绝合并无关的历史。 一、问题背景&#xff…...

Jmeter下载及环境配置

Jmeter下载及环境配置 java环境变量配置配置jdk环境变量检查是否配置成功JMeter下载 java环境变量配置 访问地址&#xff1a; https://www.oracle.com/cn/java/technologies/downloads/ 注意&#xff1a;需要自己注册账号 下载完成&#xff0c;解压后的目录为&#xff1a; …...

K8S学习之基础二十四:k8s的持久化存储之pv和pvc

K8S的存储之pv和pvc 在 Kubernetes (k8s) 中&#xff0c;持久化存储是通过 PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) 来实现的。PVC 是用户对存储资源的请求&#xff0c;而 PV 是集群中的实际存储资源。PVC 和 PV 的关系类似于 Pod 和 Node 的关系。 Persisten…...

1.5、Java构造方法重载

构造方法重载的实现 &#xff08;1&#xff09;定义多个构造方法 class Person {private String name;private int age;// 无参构造方法public Person() {this.name "Unknown";this.age 0;}// 带一个参数的构造方法public Person(String name) {this.name name;…...

领域驱动设计(DDD)技术分享:从三层架构到DDD的进化之旅

一、开篇话&#xff1a;我们为什么要聊DDD&#xff1f; 如果你像我一样有着Java开发背景&#xff0c;那Spring的三层架构可能是你的老朋友了。Controller-Service-DAO这种模式简直就像我们编程的"家常便饭"。但是&#xff0c;随着业务越来越复杂&#xff0c;你是否也…...

LeetCode - #227 基于 Swift 实现基本计算器

摘要 在这篇文章中&#xff0c;我们将实现一个基于 Swift 语言的基本计算器。该计算器能够解析和计算包含 、-、* 和 / 的数学表达式&#xff0c;并且遵循运算符的优先级规则。整数除法仅保留整数部分&#xff0c;不能使用 eval() 这样的内置解析方法。 描述 给你一个字符串表…...

Elasticsearch Java High Level Client [7.17] 使用

es 的 HighLevelClient存在es源代码的引用&#xff0c;结合springboot使用时&#xff0c;会存在es版本的冲突&#xff0c;这里记录下解决冲突和使用方式&#xff08;es已经不建议使用这个了&#xff09;。 注意es服务端的版本需要与client的版本对齐&#xff0c;否则返回数据可…...

[多线程]基于环形队列(RingQueue)的生产者-消费者模型的实现

标题&#xff1a;[多线程]基于环形队列&#xff08;RingQueue&#xff09;的生产者-消费者模型 水墨不写bug 一、模型实现 接下来我们要实现一个基于环形队列&#xff08;RingQueue&#xff09;的生产者-消费者模型。该模型使用信号量和互斥锁来保证生产者和消费者之间的同步与…...

HAL库STM32常用外设—— CAN通信(一)

文章目录 一、CAN是什么&#xff1f;1.1 CAN应用场景1.2 CAN通信优势 二、CAN基础知识介绍2.1 CAN总线结构2.2 CAN总线特点2.2.1 CAN总线的数据传输特点2.2.2 位时序和波特率 2.3 CAN位时序和波特率2.3 CAN物理层2.3.1 CAN 物理层特性2.3.2 CAN 收发器芯片介绍 2.4 CAN协议层2.…...

分页查询的实现

目录 前言 一.问题描述 二.后端实现步骤 2.1配置PageHelper插件 ①导入依赖 ②在application.yml配置文件中添加相关配置 2.2编写一个入门的程序&#xff0c;体验分页过程 2.3定义一个vo&#xff0c;用来收集分页后的所有信息 2.4修改serviceImpl层的代码 2.5动态设…...

Sourcetree——使用.gitignore忽略文件或者文件夹

一、为何需要文件忽略机制&#xff1f; 1.1 为什么要会略&#xff1f; 对于开发者而言&#xff0c;明智地选择忽略某些文件类型&#xff0c;能带来三大核心优势&#xff1a; 仓库纯净性&#xff1a;避免二进制文件、编译产物等污染代码库 安全防护&#xff1a;防止敏感信息&…...

Thinkphp的belongsToMany(多对多) 和 hasManyThrough(远程一对多)的区别是什么?

虽然 belongsToMany&#xff08;多对多&#xff09; 和 hasManyThrough&#xff08;远程一对多&#xff09; 都会使用 JOIN 查询&#xff0c;但它们的核心区别在于 关联关系的本质不同&#xff0c;具体如下&#xff1a; 1️⃣ belongsToMany&#xff08;多对多&#xff09; &a…...

DataWhale 大语言模型 - 大模型技术基础

本课程围绕中国人民大学高瓴人工智能学院赵鑫教授团队出品的《大语言模型》书籍展开&#xff0c;覆盖大语言模型训练与使用的全流程&#xff0c;从预训练到微调与对齐&#xff0c;从使用技术到评测应用&#xff0c;帮助学员全面掌握大语言模型的核心技术。并且&#xff0c;课程…...

Docker+Flask 实战:打造高并发微服务架构

DockerFlask 实战&#xff1a;打造高并发微服务架构 今天我们要深入探讨一个非常热门且实用的主题&#xff1a;基于 Docker 部署 Python Flask 应用。Docker 作为当下最流行的容器化技术&#xff0c;已经广泛应用于各种开发和部署场景&#xff0c;尤其是在微服务架构中。而 Fl…...

前端跨域如何调试,以及相关概念梳理【环境变量 本地代理 正向代理 反向代理 OPTIONS请求 CDN 等】

跨域报错 一 前端日常开发时&#xff0c;项目的部署地址和接口请求的地址一般是同源的&#xff0c;不会跨域。 例如项目的测试环境部署在https://my-dev.BeatingWorldLine.com/xxx, 测试环境的访问接口域名也要相同来保证不跨域https://my-dev.BeatingWorldLine.com/api/xxx, …...

【区块链】以太坊

学习视频源链接&#xff1a; https://www.bilibili.com/video/BV1Vt411X7JF/ 本文是根据肖老师的视频进行的笔记记录 bitcoin 1.0 区块链 以太坊 2.0区块链 以太坊 设置了 memory hard mining puzzle &#xff0c;这造成了asic resistance&#xff0c; 后续 proof of work &a…...

MCU的工作原理:嵌入式系统的控制核心

MCU的工作原理可以概括为以下几个步骤&#xff1a; 1. 初始化 上电后&#xff0c;MCU从Flash存储器中加载程序代码&#xff0c;并初始化外设和寄存器。 2. 任务执行 根据程序逻辑&#xff0c;MCU执行数据处理、外设控制和通信等任务。通过中断系统实时响应外部事件。 3. 低…...

离线服务器ollama新增qwen2:0.5b模型

离线服务器ollama新增qwen2:0.5b模型 Dify集成ollama前面已经介绍过离线服务器CentOS使用的docker安装的ollama&#xff0c;其中在ollama中已经安装了deepseek-r1:1.5b。目前的需求是需要再安装一个qwen2:0.5b的模型&#xff0c;那么如何安装呢&#xff1f; 1.首先在有网的服…...

Ubuntu20.04安装运行DynaSLAM

目录 一、安装Anaconda 二、相关依赖库安装 1、boost安装 2、Eigen 3安装 3、opencv安装 4、Pangolin安装 三、配置Mask_RCNN环境 四、DynaSLAM编译 五、DynaSLAM运行 一、安装Anaconda 打开以下链接&#xff1a; Index of / 下载和自己系统匹配的安装包。这里下…...

Apache Shiro反序列化漏洞深度剖析:从原理到利用

引言 在Web安全的世界里&#xff0c;反序列化漏洞一直是最危险的漏洞类型之一。今天&#xff0c;我们将深入探讨Apache Shiro框架中的两个著名反序列化漏洞.通过通俗易懂的解释和详细的实例&#xff0c;帮助你理解这类漏洞的本质和危害。 Shiro框架与"记住我"功能简…...

Android UI 组件系列(二):Button 进阶用法

引言 在上一篇博客中&#xff0c;我们介绍了 Button 的基本用法和常见属性&#xff0c;掌握了 Button 的基础知识。然而&#xff0c;在实际开发中&#xff0c;Button 远不止于简单的点击功能&#xff0c;它还可以支持不同的变体、丰富的自定义样式&#xff0c;以及更灵活的状态…...

CentOS-7安装Docker(更新时间:2025-03-12)

CentOS-7安装Docker 该文章记录在CentOS 7上安装Docker的过程和步骤&#xff0c;以及在安装过程中遇到的困难和解决方案。 目录 CentOS-7安装Docker一、环境准备二、安装Docker1.验证服务器是否接入互联网2. 检查CentOS内核版本3.使用root权限登录CentOS。确保yum包更新到最新…...

网络空间安全(31)安全巡检

一、定义与目的 定义&#xff1a; 安全巡检是指由专业人员或特定部门负责&#xff0c;对各类设施、设备、环境等进行全面或重点检查&#xff0c;及时发现潜在的安全隐患或问题。 目的&#xff1a; 预防事故发生&#xff1a;通过定期的安全巡检&#xff0c;及时发现并解决潜在的…...