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

前端Python应用指南(五)用FastAPI快速构建高性能API

《写给前端的python应用指南》系列:

  • (一)快速构建 Web 服务器 - Flask vs Node.js 对比
  • (二)深入Flask:理解Flask的应用结构与模块化设计
  • (三)Django vs Flask:哪种框架适合构建你的下一个Web应用?
  • (四)Django实战:创建一个简单的博客系统

在前几篇博文中,我们分别介绍了Flask和Django,讲解了它们在构建Web应用方面的优势和应用场景。今天,我们将探讨另一个Python Web框架——FastAPI,它以其高性能、易用性和现代化的特性迅速成为构建API的热门选择。本文将引导你使用FastAPI快速构建一个高性能的API,帮助你更好地理解FastAPI的核心特性及其优势。

一、FastAPI简介

FastAPI是一个现代的、快速(高性能)的Web框架,用于构建API。它基于Python 3.6+的类型提示,具有自动生成API文档的功能,同时还具有非常出色的性能,接近于Go和Node.js等编程语言的表现。FastAPI的设计灵感来自于Flask和Pydantic,并利用了Python的类型提示和异步编程模型,使得开发者可以用更少的代码实现更高效、更安全、更易于维护的API。

1.1 FastAPI的核心特点
  • 高性能:FastAPI基于Starlette和Uvicorn构建,充分利用了异步编程模型,因此在处理高并发请求时具有非常优秀的性能。
  • 自动化文档生成:FastAPI内置了对OpenAPI和JSON Schema的支持,自动生成交互式的API文档,可以通过Swagger UI或者ReDoc来查看。
  • 类型提示和验证:FastAPI利用Python类型提示自动生成请求和响应的验证和文档,从而减少了手动验证的工作量。
  • 异步支持:FastAPI原生支持异步API处理,能够在IO密集型任务中显著提高性能。
  • 简单易用:通过类型注解和现代化的语法,使得FastAPI的学习曲线较低,开发者可以快速上手。

二、FastAPI与Flask、Django对比

  • 与Flask对比:Flask是一个轻量级的Web框架,专注于灵活性和扩展性,而FastAPI在灵活性的基础上,提供了更强的性能、类型安全和自动化文档生成。Flask适合中小型项目,FastAPI则适用于对性能要求较高的API服务。

  • 与Django对比:Django是一个全栈框架,通常用于构建复杂的Web应用,而FastAPI更专注于API构建,特别是在性能和开发效率上具有优势。Django适用于大型Web应用,FastAPI适用于构建高效、可扩展的API服务。

三、快速上手FastAPI

3.1 安装FastAPI和Uvicorn

首先,确保你已安装了Python 3.6或更高版本。接着,你可以通过以下命令安装FastAPI和Uvicorn。

pip install fastapi uvicorn
  • FastAPI:Web框架本身。
  • Uvicorn:ASGI服务器,用于运行FastAPI应用。
3.2 创建一个简单的API

让我们创建一个简单的FastAPI应用,包含一个基本的GET请求和POST请求。

  1. 创建一个名为main.py的文件,并添加以下代码:
from fastapi import FastAPI
from pydantic import BaseModel# 创建FastAPI实例
app = FastAPI()# 定义一个请求体模型
class Item(BaseModel):name: strdescription: str = Noneprice: floattax: float = None# 定义一个GET请求
@app.get("/")
def read_root():return {"message": "Hello, World!"}# 定义一个POST请求
@app.post("/items/")
def create_item(item: Item):return {"name": item.name, "price": item.price, "tax": item.tax}
3.3 解释代码
  • FastAPI实例app = FastAPI() 创建了一个FastAPI应用实例。
  • 请求体模型Item类使用Pydantic库来定义API请求体的模型。Pydantic支持数据验证和自动生成OpenAPI文档。
    • namedescriptionpricetax分别表示商品的名称、描述、价格和税费。
  • 路由处理函数
    • read_root:该函数响应GET请求,并返回一条简单的JSON消息。
    • create_item:该函数响应POST请求,接收一个Item对象作为请求体,并返回商品的名称和价格。
3.4 运行应用

运行FastAPI应用非常简单,只需在终端中执行以下命令:

uvicorn main:app --reload
  • main: 指的是文件名(不需要加.py后缀)。
  • app: 指的是FastAPI实例。
  • --reload: 启用自动重载功能,适合开发时使用。

访问 http://127.0.0.1:8000,你将看到FastAPI自动生成的文档界面,支持Swagger UI和ReDoc。

3.5 交互式文档

FastAPI自动生成的API文档非常直观,访问 http://127.0.0.1:8000/docs 你将看到Swagger UI界面,它展示了所有可用的API端点、请求方式、请求参数以及响应结构。

如果你更喜欢ReDoc风格的文档,可以访问 http://127.0.0.1:8000/redoc。

四、更多功能

FastAPI不仅仅是构建简单API那么简单,它提供了很多强大的功能,帮助开发者在构建生产级别API时提高效率和可靠性。

4.1 请求参数验证

FastAPI支持从查询参数、路径参数和请求体中自动提取数据,并进行类型验证。

例如,以下是通过查询参数传递数据:

@app.get("/items/")
def read_item(skip: int = 0, limit: int = 10):return {"skip": skip, "limit": limit}

访问路径 /items/?skip=5&limit=20 时,FastAPI会自动验证并解析查询参数。

4.2 依赖注入

FastAPI的依赖注入系统使得你可以轻松地复用代码,处理认证、数据库连接、配置等功能。通过Depends,你可以将某些逻辑抽象为可重用的组件。

from fastapi import Dependsdef common_parameters(q: str = None, skip: int = 0, limit: int = 10):return {"q": q, "skip": skip, "limit": limit}@app.get("/items/")
def read_items(commons: dict = Depends(common_parameters)):return commons
4.3 异步支持

FastAPI原生支持异步编程,能够显著提高IO密集型任务(如数据库查询、外部API请求等)的性能。

import asyncio@app.get("/items/")
async def read_items():await asyncio.sleep(1)return {"message": "This was a slow response"}
4.4 安全和认证

FastAPI内置了对OAuth2、JWT、API密钥等认证方式的支持,确保你的API具备高安全性。

例如,使用OAuth2认证:

from fastapi import Security
from fastapi.security import OAuth2PasswordBeareroauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")@app.get("/items/")
def read_items(token: str = Depends(oauth2_scheme)):return {"token": token}

五、性能优势

FastAPI的一个显著特点是其卓越的性能,接近Go和Node.js的速度。FastAPI利用异步编程、Pydantic验证和Starlette的高效路由等特性,在处理大量并发请求时具有显著的优势。根据官方基准测试,FastAPI的性能在所有Python Web框架中位居前列。

5.1 性能测试

你可以通过uvicorngunicorn组合来运行FastAPI应用,进一步提高并发性能。以下是一个使用gunicorn来部署FastAPI应用的命令:

gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app
  • -w 4:表示启动4个工作进程。
  • -k uvicorn.workers.UvicornWorker:指定使用Uvicorn的工作进程来运行FastAPI应用。

六、总结

通过本篇博文,我们快速入门了FastAPI,并使用它构建了一个简单的API。FastAPI不仅高效、易用,而且能够自动生成API文档,简化了开发过程中的许多繁琐任务。它的异步支持和类型验证功能使得它非常适合构建高性能、可维护的API服务。
FastAPI的优势在于其高性能和开发效率,非常适合处理高并发、高请求量的应用场景。如果你正在寻找一个现代、快速且功能强大的Python API框架,FastAPI无疑是一个非常不错的选择。

希望通过本篇教程,你能够了解FastAPI的基本功能,并在你的项目中实现更高效、更稳定的API构建。

相关文章:

前端Python应用指南(五)用FastAPI快速构建高性能API

《写给前端的python应用指南》系列: (一)快速构建 Web 服务器 - Flask vs Node.js 对比(二)深入Flask:理解Flask的应用结构与模块化设计(三)Django vs Flask:哪种框架适…...

c#多线程之生产者-消费者模型

在 C# 中实现 生产者-消费者模式&#xff0c;通常需要多个线程来处理数据的生产和消费。我们可以使用 Queue<T> 来作为存储数据的队列&#xff0c;并使用 Thread、Mutex 或 Monitor 来确保线程安全。BlockingCollection<T> 是 C# 提供的一个线程安全的集合&#xf…...

2011-2020年各省城镇职工基本医疗保险年末参保人数数据

2011-2020年各省城镇职工基本医疗保险年末参保人数数据 1、时间&#xff1a;2011-2020年 2、来源&#xff1a;国家统计局 3、指标&#xff1a;省份、时间、城镇职工基本医疗保险年末参保人数 4、范围&#xff1a;31省 5、指标解释&#xff1a;参保人数指报告期末按国家有关…...

Python基础语法知识——列表、字典、元组与集合

列表&#xff08;list&#xff09;、字典(dictionary)、元组(tuple)与集合(set)都可以看成存储数据的容器&#xff0c;但是前两者常用&#xff0c;后两者用得相对较少。 目录 1 列表&#xff08;list) 1.1列表入门 1 列表&#xff08;list) 1.1列表入门 class1["李白…...

Mysql数据库中,监测某张表中某字段的修改情况(被哪个ip所修改、新老值)

在Mysql数据库中&#xff0c;通过写一个触发器&#xff0c;来监测某张表(q_device)字段(run_status)的改变情况。 【示例】 -- 1. 创建监测日志表 CREATE TABLE change_log (id INT AUTO_INCREMENT PRIMARY KEY,table_name VARCHAR(255),column_name VARCHAR(255),old_value T…...

迁移学习 详解及应用示例

简介&#xff1a; 迁移学习是一种机器学习技术&#xff0c;其核心思想是利用在一个任务上已经学到的知识&#xff08;源任务&#xff1a;任务已经有一个训练好的模型&#xff0c;然后我们将这个模型的某些部分或知识迁移到一个新的但相关的“目标任务”上。&#xff09;来帮助解…...

ubuntu控制器多网口配置

在Ubuntu系统中配置多网口&#xff0c;可以通过编辑网络配置文件&#xff08;Netplan 或旧版 /etc/network/interfaces&#xff09;实现。这适用于需要管理多个网络接口&#xff08;如 eth0、eth1 等&#xff09;的场景&#xff0c;例如负载均衡、网络隔离或多路径通信。 以下…...

接口调用限频(代理模式+滑动窗口)

目录 代码示例 接口 代理 接口实现 限流工厂 限流处理器接口 直接交换处理器 限流处理器 限流配置 滑动窗口限流 通过代理模式滑动窗口&#xff0c;限流请求第三方平台&#xff0c;避免出现第三方平台抛出限流异常&#xff0c;影响正常业务流程&#xff0c;从出口出发…...

FFmpeg在python里推流被处理过的视频流

链式算法处理视频流 视频源是本地摄像头 # codinggbk # 本地摄像头直接推流到 RTMP 服务器 import cv2 import mediapipe as mp import subprocess as sp# 初始化 Mediapipe mp_drawing mp.solutions.drawing_utils mp_drawing_styles mp.solutions.drawing_styles mp_holis…...

2- Linux系统的命令帮助

Linux 命令行帮助信息使用指南 一、引言 对于初学者来说,Linux命令行可能会显得复杂和难以捉摸。然而,一旦掌握了如何有效地利用命令行的帮助信息,您将发现它是一个强大而灵活的工具,可以极大地提高您的工作效率。本指南旨在为新手介绍如何在Linux中获取命令的帮助信息,…...

Mysql事务

一、数据库事务基础 1.1. 什么是事务 简单来说&#xff0c;事务就是要保证一组数据库操作&#xff0c;要么全部成功&#xff0c;要么全部失败。在 MySQL 中&#xff0c;事务支持是在引擎层实现的。 比如 MySQL 原生的MyISAM引擎就不支持事务&#xff0c;这也是MyISAM被InnoDB…...

Fast adaptively balanced min-cut clustering

#0.论文信息 标题&#xff1a;Fast adaptively balanced min-cut clustering期刊&#xff1a;Pattern Recognition作者: Feiping Nie , Fangyuan Xie , Jingyu Wang ,Xuelong Li机构: China Telecom, Northwestern Polytechnic al University.代码链接&#xff1a; #1.摘要 …...

vue3和springboot使用websocket通信

前端端口&#xff1a;9090 后端端口&#xff1a;8080 vue3 引入依赖&#xff1a; npm install sockjs-client stomp/stompjs vue页面 <template><div><h1>WebSocket 示例</h1><button click"sendMessage">发送消息</button>…...

Log4j2的Policies详解、SizeBasedTriggeringPolicy、TimeBasedTriggeringPolicy

文章目录 一、Policies二、SizeBasedTriggeringPolicy:基于文件大小的滚动策略2.1、文件达到指定大小就归档 三、TimeBasedTriggeringPolicy&#xff1a;基于时间间隔的滚动策略3.1、验证秒钟归档场景3.2、验证分钟场景3.3、验证小时场景 四、多策略组合使用五、扩展知识5.1、S…...

js版本之ES6特性简述【Proxy、Reflect、Iterator、Generator】(五)

目录 Proxy Reflect 静态方法 部分实例 Iterator 实际开发迭代器的使用实例 迭代器&#xff08;Iterator&#xff09;应用 Generator Proxy Proxy 是 ES6 中新增的对象 Proxy 是JavaScript中的内置对象&#xff0c;它提供了一种机制&#xff0c;可以拦截并自定义各种…...

微信V3支付报错 平台证书及平台证书序列号

1.平台证书及平台证书序列号设置错误报错&#xff1a; 错误1&#xff1a; Verify the response’s data with: timestamp1735184656, noncea5806b8cabc923299f8db1a174f3a4d0, signatureFZ5FgD/jtt4J99GKssKWKA/0buBSOAbWcu6H52l2UqqaJKvrsNxvodB569ZFz5G3fbassOQcSh5BFq6hvE…...

【开发问题记录】执行 git cz 报require() of ES Module…… 错误

文章目录 1、问题2、解决3、参考链接 1、问题 在对 commitizen 进行完&#xff0c;一系列的初始化以后 &#xff0c; 对代码进行 提交 到暂存区&#xff0c;然后要提交到 本地仓库 的报错 然后因为安装了 commitizen 所以是想用 git cz 进行提交的&#xff0c; 执行命令的时候…...

Kubernetes 安装 Nginx以及配置自动补全

部署 Nginx &#xff1a; [rootk8s-master ~]# kubectl create deployment nginx --imagenginx:1.14-alpine deployment.apps/nginx created暴露端口&#xff1a; [rootk8s-master ~]# kubectl expose deployment nginx --port80 --typeNodePort service/nginx exposed查看服…...

JS中的闭包和上下文

变量提升 和 函数提升 这里要提到一个提升的概念&#xff0c;即在JS中&#xff0c;在解析代码之前还有一个预处理的过程&#xff0c;这个过程中会把部分变量和函数声明提前到代码的最顶部&#xff0c; 会在其他所有代码之前执行。虽然当我们按照规范&#xff08;严格模式或者T…...

element-ui表格多级表头固定列和合并单元格

多级表头固定列 代码示例-不能直接运行&#xff0c;仅供参考 <el-table ref"table" class"table":data"list"style"width: 100%":header-cell-style"headerCellStyle"v-loading"dataLoading":span-method&qu…...

视频汇聚融合云平台Liveweb一站式解决视频资源管理痛点

随着5G技术的广泛应用&#xff0c;各领域都在通信技术加持下通过海量终端设备收集了大量视频、图像等物联网数据&#xff0c;并通过人工智能、大数据、视频监控等技术方式来让我们的世界更安全、更高效。然而&#xff0c;随着数字化建设和生产经营管理活动的长期开展&#xff0…...

第五十九章 假脱机设备

文章目录 第五十九章 假脱机设备介绍打开和使用假脱机设备用于假脱机设备的 OPEN 和 USE 命令USE 命令 第五十九章 假脱机设备 介绍 IRIS数据平台使能够将打印输出直接发送到您的打印机或屏幕&#xff0c;或将其保留在后台打印中以供以后打印。IRIS 假脱机独立于您的操作系统…...

Maven Wrapper 报错“未找到有效的 Maven 安装”

1. 检查 Maven Wrapper 配置&#xff1a; 确保你的项目中包含 .mvn/wrapper/maven-wrapper.properties 文件。 检查该文件中的 distributionUrl 属性&#xff0c;确保它指向一个有效的 Maven 发行版 URL。 2.确认 Maven Wrapper 脚本存在&#xff1a; 在项目根目录下&#x…...

yarn list --pattern vuex-module-decorators

dgqdgqdeMac-mini spid-admin % yarn list --pattern vuex-module-decorators yarn list v1.22.22 └─ vuex-module-decorators0.16.1 ✨ Done in 0.24s.好的&#xff0c;这段代码是一个典型的 Vuex 模块定义&#xff0c;使用了 vuex-module-decorators 库。这个库为 Vuex 提…...

day19-Linux软件包

科普&#xff0c;什么是代码文件。 电脑程序Program&#xff0c;就是某一个编程语言编写的一个代码文件&#xff0c;里面包含了该语言特有的指令&#xff0c;以及各种字符、符号。 linux自带的network管理脚本&#xff0c;shell脚本 什么是软件程序。 软件程序&#xff0c;就…...

【网络分析工具】WireShark的使用(超详细)

网络分析工具——WireShark的使用 简介WireShark软件安装Wireshark 开始抓包示例WireShark抓包界面WireShark 主要分为这几个界面TCP包的具体内容Wireshark过滤器设置wireshark过滤器表达式的规则Wireshark抓包分析TCP三次握手Wireshark分析常用操作 简介 WireShark是非常流…...

React 高级组件开发:动态逻辑与性能优化

React 高级组件开发&#xff1a;动态逻辑与性能优化 引言一、动态逻辑与配置化组件1. 动态组件的设计 二、自定义 Hooks 解决复杂状态管理1. 自定义 Hook 的优势 三、高阶组件&#xff08;HOC&#xff09;模式1. 高阶组件的应用场景 四、性能优化1. 使用 React.memo 优化渲染2.…...

Vue 3 与 Tauri 集成开发跨端APP

1、安装RUST 下载地址&#xff1a;Install Rust - Rust Programming Language 安装&#xff1a; 安装完成后&#xff0c;在命令行里运行: rustup 2、安装 Node.js 与 npm 或 pnpm &#xff0c;如果已经安装&#xff0c;可以忽略 # 使用 nvm 安装 Node.js 最新版本 nvm install…...

FreeRTOS中xPortPendSVHandler()和vPortSVCHandler()这两个函数的作用

在 FreeRTOS 中&#xff0c;xPortPendSVHandler() 和 vPortSVCHandler() 是两个重要的中断服务例程&#xff08;ISR&#xff09;&#xff0c;它们负责处理与操作系统相关的异常。这些函数对于实现上下文切换和任务管理至关重要。下面分别解释这两个函数的作用&#xff1a; xPo…...

【RK3588 Linux 5.x 内核编程】-内核IO复用与poll

内核IO复用与poll 文章目录 内核IO复用与poll1、IO复用2、Poll的使用2.1 用户空间程序中使用Poll2.2 在内核空间实现Poll3、驱动程序实现4、用户空间程序实现5、验证让我们假设应用程序想要根据其状态读取/写入许多 IO(输入和输出)的情况。 在这种情况下我们该怎么办? 我们必…...

精选9个自动化任务的Python脚本精选

大家好&#xff0c;我是老邓&#xff0c;今天我们来一起学习如何用Python进行一些常见的自动化操作&#xff0c;涉及文件处理、网络交互等实用技巧。即使你没有任何Python基础也没关系&#xff0c;我会用最通俗易懂的语言来讲解。 1. 对目录中的文件进行排序 import osdef so…...

使用JFLASH批量烧录程序导入生产的简易设置

基于上一篇帖子我们可以把任意厂家的MCU导入jflash来使用 首先&#xff0c;我使用的是V699C版本&#xff0c;目前使用了一段时间没有问题 我尝试过换不同的电路板烧录连续烧录&#xff0c;当单片机里没有程序的时候&#xff0c;问题不大&#xff0c;但是一旦单片机里有程序的话…...

计算机体系结构期末复习1:分支预测

目录 一、为什么需要分支预测 1.存在分支的指令 2.控制相关的处理方式一&#xff1a;stall(阻塞&#xff09;流水线 二、分支预测方法 1.预测正确与预测错误的性能损失 2.减少预测错误的惩罚 3.提高分支预测的准确度 1&#xff09;编译时&#xff08;静态方法&#xff…...

获取页面上所有的img,并保存到本地

浏览器的 JavaScript 环境中受限于安全和隐私原因&#xff0c;不允许直接指定下载文件夹或访问本地文件系统。因此&#xff0c;无法通过纯 JavaScript 在浏览器控制台中实现下载图片到指定文件夹的功能。 然而&#xff0c;您可以使用 Web API 提供的文件系统访问 API 进行一定…...

Day56 图论part06

108.冗余连接 并查集应用类题目,关键是如何把题意转化成并查集问题 代码随想录 import java.util.Scanner;public class Main{public static void main (String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();DisJoint disjoint = new DisJo…...

深度学习助力股市预测:LSTM、RNN和CNN模型实战解析

作者&#xff1a;老余捞鱼 原创不易&#xff0c;转载请标明出处及原作者。 写在前面的话&#xff1a;众所周知&#xff0c;传统的股票预测模型有着各种各样的局限性。但在我的最新研究中&#xff0c;探索了一些方法来高效预测股市走势&#xff0c;即CNN、RNN和LSTM这些深度学习…...

.NET能做什么?全面解析.NET的应用领域

.NET 是由微软开发的一个开源、跨平台的开发框架。它不仅支持构建各种应用程序&#xff0c;还能运行在不同的操作系统上&#xff0c;包括 Windows、Linux 和 macOS。自从 .NET Core 的推出&#xff0c;.NET 成为了一个现代化的开发平台&#xff0c;能够满足企业和开发者日益多样…...

分布式事务入门 一

分布式事务入门 一 您好&#xff0c;我是今夜写代码,今天学习下分布式事务相关理论&#xff0c;以及常见的解决方案&#xff0c;为后续掌握Seata分布式事务框奠定基础。 为什么需要分布式事务? 分布式事务主要由于存储资源的分布性&#xff0c;通常涉及多个数据库。 分布式…...

华为,新华三,思科网络设备指令

1. 设备信息查看 华为 display version # 查看设备版本信息 display device # 查看设备硬件信息 新华三&#xff08;H3C&#xff09; display version # 查看设备版本信息 display device # 查看设备硬件信息 锐捷 show version …...

深入理解HTML页面加载解析和渲染过程(一)

一篇老文章&#xff0c;存在草稿有点可惜 HTML页面呈现通常包括三个主要过程&#xff1a;加载、解析和渲染。让我们详细探讨每个过程。 1. 加载过程 加载过程主要涉及获取页面所需的所有资源。这个过程包括以下步骤&#xff1a; 1.1 URL资源加载 缓存读取&#xff1a;浏览器…...

Odoo 免费开源 ERP:通过 JavaScript 创建对话框窗口的技术实践分享

作者 | 老杨 出品 | 上海开源智造软件有限公司&#xff08;OSCG&#xff09; 概述 在本文中&#xff0c;我们将深入研讨如何于 Odoo 18 中构建 JavaScript&#xff08;JS&#xff09;对话框或弹出窗口。对话框乃是展现重要讯息、确认用户操作以及警示用户留意警告或错误的行…...

Word批量更改题注

文章目录 批量更改批量去除空格 在写文章的时候&#xff0c;往往对图片题注有着统一的编码要求&#xff0c;例如以【图 1- xx】。一般会点击【引用】->【插入题注】来插入题注&#xff0c;并且在引用的时候&#xff0c;点击【引用】->【交叉引用】&#xff0c;并且在交叉…...

电脑缺失libcurl.dll怎么解决?详解电脑libcurl.dll文件丢失问题

一、libcurl.dll文件丢失的原因 libcurl.dll是一个用于处理URL传输的库文件&#xff0c;广泛应用于各种基于网络的应用程序。当这个文件丢失时&#xff0c;可能会导致相关应用程序无法正常运行。以下是libcurl.dll文件丢失的一些常见原因&#xff1a; 软件安装或卸载不完整&a…...

OpenCV相机标定与3D重建(36)计算两幅图像之间基本矩阵(Fundamental Matrix)的函数findFundamentalMat()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 从两幅图像中的对应点计算基本矩阵。 cv::findFundamentalMat 是 OpenCV 中用于计算两幅图像之间基本矩阵&#xff08;Fundamental Matrix&#…...

JQ中的each()方法与$.each()函数的使用区别

介绍 jquery里的 each() 是一个强大的遍历工具&#xff0c;用于迭代集合中的元素&#xff0c;并为每个元素执行指定的函数‌。它既可以用于遍历 jQuery对象集合&#xff0c;也可以用于遍历普通的数组或对象。 each()对象遍历 语法&#xff1a; $(selector).each(function(in…...

浅谈下雪花算法的原理,及在项目中使用需要注意哪些事项

目录 背景 雪花算法原理 算法特点 注意事项 总结 背景 雪花算法是一种分布式ID生成算法&#xff0c;由Twitter提出&#xff0c;用于在分布式系统中生成全局唯一的ID。该算法通过将64位的长整型数字分为符号位、时间戳、工作机器ID和序列号四个部分&#xff0c;确保了ID的…...

洛谷P1536 村村通(c嘎嘎)

题目链接&#xff1a;P1536 村村通 - 洛谷 | 计算机科学教育新生态 题目难度&#xff1a;普及/提高 解题思路&#xff1a;本题很明显考察是并查集&#xff0c;并查集之前我的博客介绍过可以看看这篇 洛谷P1551 亲戚&#xff08;c嘎嘎&#xff09;-CSDN博客&#xff0c;本题是…...

双指针——查找总价格为目标值的两个商品

一.题目描述 LCR 179. 查找总价格为目标值的两个商品 - 力扣&#xff08;LeetCode&#xff09; 二.题目解析 这个题目非常简单&#xff0c;其实就是判断有没有两个数加起来等于target。 三.算法解析 1.暴力解法 暴力解法的话我们可以枚举出所有的情况&#xff0c;然后判…...

智慧园区小程序开发制作功能介绍

智慧园区小程序开发制作功能介绍 智慧园区小程序系统作为一款面向园区企业的一站式线上服务平台&#xff0c;可为企业提供数智化的园区办公服务。智慧园区小程序功能介绍 1、园区公告、政策信息查看足不出户掌握最新动态&#xff0c;“园区公告、政策信息”等信息。首页点击对应…...

【面经】25届 双非本科 字节跳动 北京 四年的总结

点击“硬核王同学”&#xff0c;选择“关注” 福利干货第一时间送达 大家好&#xff0c;我是硬核王同学&#xff0c;最近在做免费的嵌入式知识分享&#xff0c;帮助对嵌入式感兴趣的同学学习嵌入式、做项目、找工作&#xff01; 给大家分享一个25届本科大佬的面经&#xff0c…...