【C#生态园】从云服务到HTTP请求:探索.NET开发环境中的六大热门库

news2024/9/22 3:51:42

构建可靠性系统的利器:RabbitMQ、Kafka、Redis等消息中间件详解

前言

随着云计算和网络通信技术的迅速发展,越来越多的开发者开始利用.NET平台构建基于云服务的应用程序。在这种背景下,各种针对.NET开发环境的软件开发工具包和库层出不穷,为开发者提供了丰富的选择。

本文将重点介绍一些在.NET平台上常用的云服务相关库,如AWS SDK for .NET、Google Cloud Client Library,以及一些简化HTTP请求和处理异常的库,如Flurl和Polly,还有用于JSON序列化和反序列化的Newtonsoft.Json,最后会介绍一个全功能的C# REST API框架ServiceStack。

欢迎订阅专栏:C#生态园

文章目录

  • 构建可靠性系统的利器:RabbitMQ、Kafka、Redis等消息中间件详解
    • 前言
    • 1. RabbitMQ:一个开源的消息代理和队列服务器
      • 1.1 简介
        • 1.1.1 核心功能
        • 1.1.2 使用场景
      • 1.2 安装与配置
        • 1.2.1 安装指南
        • 1.2.2 基本设置
      • 1.3 API 概览
        • 1.3.1 发布与订阅
    • 2. Google Cloud Client Library:Google Cloud Platform 的 .NET 客户端库
      • 2.1 简介
        • 2.1.1 核心功能
        • 2.1.2 使用场景
      • 2.2 安装与配置
        • 2.2.1 安装方法
        • 2.2.2 基本设置
      • 2.3 API 概览
        • 2.3.1 功能一
          • 存储服务文件上传示例
        • 2.3.2 功能二
          • 身份认证示例
    • 3. Flurl:用于简化HTTP请求的库
      • 3.1 简介
        • 3.1.1 核心功能
        • 3.1.2 使用场景
      • 3.2 安装与配置
        • 3.2.1 安装指南
        • 3.2.2 基本配置
      • 3.3 API 概览
        • 3.3.1 URL构建
        • 3.3.2 请求发送
    • 4. ActiveMQ: 高性能,多协议,异步消息队列
      • 4.1 简介
        • 4.1.1 核心功能
        • 4.1.2 使用场景
      • 4.2 安装与配置
        • 4.2.1 安装指南
        • 4.2.2 基本设置
      • 4.3 API 概览
        • 4.3.1 消息持久化
        • 4.3.2 JMS支持
    • 5. NATS: 云原生应用的消息通信系统
      • 5.1 简介
        • 5.1.1 核心功能
        • 5.1.2 使用场景
      • 5.2 安装与配置
        • 5.2.1 安装指导
        • 5.2.2 基本设置
      • 5.3 API 概览
        • 5.3.1 发布与订阅模型
        • 5.3.2 跨服务通信
    • 6. ServiceStack:一个全功能的C# REST API框架
      • 6.1 简介
        • 6.1.1 核心功能
        • 6.1.2 使用场景
      • 6.2 安装与配置
        • 6.2.1 安装指南
        • 6.2.2 基本设置
      • 6.3 API 概览
        • 6.3.1 服务创建
        • 6.3.2 数据访问
    • 总结

1. RabbitMQ:一个开源的消息代理和队列服务器

RabbitMQ 是一个由 Rabbit Technologies 开发的开源消息代理软件,实现了高级消息队列协议(AMQP)。它是一个轻量级、可靠、快速的消息代理,适用于大型分布式系统和微服务架构。

1.1 简介

1.1.1 核心功能

RabbitMQ 提供了可靠的消息传递,支持多种消息协议,包括 AMQP、STOMP 和 MQTT。其核心功能包括消息的路由、负载均衡、消息持久化、集群部署等。

1.1.2 使用场景

RabbitMQ 在以下场景中非常适用:

  • 异步通信
  • 解耦系统组件
  • 流量削峰填谷
  • 消息日志记录与追踪
  • 分布式系统集成

1.2 安装与配置

1.2.1 安装指南

RabbitMQ 的安装可以参考官方文档 Installation Guide。根据操作系统选择合适的安装方式,如基于 Windows 平台的安装、基于 Linux 平台的安装等。

1.2.2 基本设置

安装完成后,需要进行一些基本的配置设置。具体的配置信息可参考 Configuration。

1.3 API 概览

1.3.1 发布与订阅

RabbitMQ 提供了丰富的客户端库,包括官方提供的各种语言的 client。下面以 C# 为例,演示如何使用 RabbitMQ 实现发布与订阅的功能。

首先,需要安装 RabbitMQ 的 C# 客户端库 RabbitMQ.Client。你可以通过 NuGet 进行安装:

Install-Package RabbitMQ.Client

然后,我们可以编写 C# 代码来连接 RabbitMQ 服务器,并实现消息的发布和订阅:

using System;
using RabbitMQ.Client;

class Program
{
    static void Main()
    {
        var factory = new ConnectionFactory() { HostName = "localhost" };
        using (var connection = factory.CreateConnection())
        using (var channel = connection.CreateModel())
        {
            channel.QueueDeclare(queue: "hello",
                                 durable: false,
                                 exclusive: false,
                                 autoDelete: false,
                                 arguments: null);

            string message = "Hello World!";
            var body = Encoding.UTF8.GetBytes(message);

            channel.BasicPublish(exchange: "",
                                 routingKey: "hello",
                                 basicProperties: null,
                                 body: body);
            Console.WriteLine(" [x] Sent {0}", message);
        }
    }
}

以上代码演示了如何向名为 “hello” 的队列发送消息。更多关于发布与订阅的详细信息,请参考 RabbitMQ .NET/C# Client API Reference。

2. Google Cloud Client Library:Google Cloud Platform 的 .NET 客户端库

2.1 简介

Google Cloud Client Library 是 Google Cloud 平台的官方 .NET 客户端库,为开发人员提供了访问多种 Google Cloud 服务的便捷方式。通过这个库,开发人员可以轻松地与 Google Cloud Platform 上的各种服务进行交互,包括但不限于存储、数据库、机器学习等。

2.1.1 核心功能
  • 提供对 Google Cloud Platform 各项服务的封装和访问接口
  • 支持对云端数据存储、身份认证、消息传递等操作
  • 可以有效管理和监控在 Google Cloud Platform 上部署的应用程序
2.1.2 使用场景

Google Cloud Client Library 可以广泛应用于需要与 Google Cloud Platform 进行集成的 .NET 应用程序中,例如 Web 应用、移动应用、IoT 设备等。

2.2 安装与配置

2.2.1 安装方法

使用 NuGet 包管理器来安装 Google Cloud Client Library。

Install-Package Google.Cloud.Storage

或者通过 Visual Studio 中的 NuGet 包管理界面搜索并安装。

官方链接:Google.Cloud.Storage

2.2.2 基本设置

在开始使用 Google Cloud Client Library 之前,需要先进行一些基本的设置工作,主要包括创建 Google Cloud Platform 项目、获取 API 密钥等。

官方文档:Getting Started with Authentication

2.3 API 概览

2.3.1 功能一

在这里列举一个具体的功能,比如存储服务的文件上传和下载。

存储服务文件上传示例
using Google.Cloud.Storage.V1;
using System;

public class StorageSample
{
    public void UploadObject(string bucketName, string localPath, string objectName)
    {
        var storage = StorageClient.Create();
        using (var f = File.OpenRead(localPath))
        {
            storage.UploadObject(bucketName, objectName, null, f);
        }
        Console.WriteLine($"Uploaded {objectName} to {bucketName}.");
    }
}

官方文档:Cloud Storage - .NET Client

2.3.2 功能二

类似地,在这里展示另一个功能的具体示例,比如身份认证服务的使用。

身份认证示例
using Google.Apis.Auth.OAuth2;
using Google.Cloud.Storage.V1;
using System;

public class AuthSample
{
    public void AuthenticateWithJsonKey(string projectId, string jsonPath)
    {
        GoogleCredential credential = GoogleCredential.FromFile(jsonPath);
        var storage = StorageClient.Create(credential);
        // Use the storage client as normal.
        Console.WriteLine("Authenticated with Google Cloud Storage.");
    }
}

官方文档:Authentication Overview

通过以上示例代码以及官方链接,可以更加深入地了解 Google Cloud Client Library 在 .NET 应用中的使用方法和相关功能。

以上是 Google Cloud Client Library 的简要介绍和使用指南,希望能够帮助你开始在 .NET 应用中集成 Google Cloud 平台的服务。

3. Flurl:用于简化HTTP请求的库

Flurl 是一个用于简化 HTTP 请求的库,它可以帮助我们更便捷地发送和处理 HTTP 请求。接下来将介绍 Flurl 的核心功能、使用场景、安装与配置以及 API 概览。

3.1 简介

3.1.1 核心功能

Flurl 的核心功能包括:

  • 链式调用:通过链式调用的方式构建和发送 HTTP 请求,使代码更加清晰和易读。
  • URL 构建:提供便捷的 API 来构建 URL,支持添加查询参数、路径参数等。
  • 异步支持:支持异步操作,避免 HTTP 请求阻塞主线程。
  • 内置测试工具:提供内置的测试工具,便于对 HTTP 请求进行单元测试。
3.1.2 使用场景

Flurl 适用于各种场景,包括但不限于:

  • 与 RESTful API 进行交互
  • 向外部服务发送 HTTP 请求
  • 编写自动化测试时模拟 HTTP 请求

3.2 安装与配置

3.2.1 安装指南

通过 NuGet 包管理器或者 .NET CLI 可以很方便地安装 Flurl:

dotnet add package Flurl.Http
3.2.2 基本配置

安装完成后,可以在项目中引入 Flurl.Http 命名空间,并开始使用 Flurl。

3.3 API 概览

3.3.1 URL构建

Flurl 提供了一套用于构建 URL 的 API,示例代码如下:

using Flurl;

var url = "https://api.example.com"
    .AppendPathSegment("users")
    .SetQueryParam("id", 1);

更多关于 URL 构建的内容,请参考 Flurl 官方文档。

3.3.2 请求发送

Flurl 提供了简洁的 API 来发送 HTTP 请求,示例代码如下:

using System;
using Flurl.Http;

public async Task GetExampleAsync()
{
    var result = await "https://api.example.com/users/1".GetJsonAsync();
    Console.WriteLine(result);
}

更多关于请求发送的内容,请参考 Flurl 官方文档。

4. ActiveMQ: 高性能,多协议,异步消息队列

Apache ActiveMQ 是一个流行的、开源的消息队列和消息驱动中间件,它是基于 Java Message Service (JMS) 的。ActiveMQ 提供了跨语言的支持,在多种编程语言中都可以方便地使用。

4.1 简介

4.1.1 核心功能

ActiveMQ 提供了强大的消息处理能力,包括点对点和发布/订阅模式的消息传递、事务性消息、消息拦截等。此外,它还提供了优雅的集群支持、高级的安全特性以及可插拔的传输协议。

4.1.2 使用场景

ActiveMQ 在企业应用程序中被广泛应用,常见的使用场景包括异步通信、解耦系统、消息代理、任务调度等。

4.2 安装与配置

4.2.1 安装指南

你可以从 ActiveMQ 官方网站 下载页面 下载最新版本的 ActiveMQ。安装过程相对简单,只需解压安装包并启动即可。

4.2.2 基本设置

在安装完成后,你可以通过编辑 ActiveMQ 的配置文件来进行基本的设置,例如端口号、认证方式、持久化方式等。

4.3 API 概览

4.3.1 消息持久化

ActiveMQ 支持消息的持久化,确保消息不会因为系统故障或重启而丢失。下面是一个使用 C# 编写的发送和接收持久化消息的示例:

// 发送持久化消息
var connectionFactory = new Apache.NMS.ActiveMQ.ConnectionFactory("tcp://localhost:61616");
using (var connection = connectionFactory.CreateConnection())
{
    connection.Start();
    using (var session = connection.CreateSession())
    {
        var destination = session.GetQueue("TestQueue");
        var producer = session.CreateProducer(destination);
        producer.DeliveryMode = MsgDeliveryMode.Persistent;

        var message = session.CreateTextMessage("Hello, ActiveMQ!");
        producer.Send(message);
    }
}

// 接收持久化消息
var consumer = session.CreateConsumer(destination);
var message = consumer.Receive();
if (message is ITextMessage textMessage)
{
    Console.WriteLine("Received message: " + textMessage.Text);
}

更多关于消息持久化的信息可以查看 ActiveMQ Persistence。

4.3.2 JMS支持

ActiveMQ 提供了对 JMS 的全面支持,下面是一个使用 C# 编写的 JMS 示例代码:

// 创建连接工厂
var connectionFactory = new Apache.NMS.ActiveMQ.ConnectionFactory("tcp://localhost:61616");

// 创建连接
using (var connection = connectionFactory.CreateConnection())
{
    connection.Start();

    // 创建会话
    using (var session = connection.CreateSession())
    {
        // 创建目的地
        var destination = session.GetQueue("TestQueue");

        // 创建生产者
        var producer = session.CreateProducer(destination);

        // 创建消息
        var message = session.CreateTextMessage("Hello, ActiveMQ!");

        // 发送消息
        producer.Send(message);
    }
}

更多关于 ActiveMQ 对 JMS 的支持可以查看 ActiveMQ JMS Support。

5. NATS: 云原生应用的消息通信系统

NATS 是一种轻量级、高性能的开源消息传递系统,专为云原生应用程序设计。它提供了基于发布/订阅模型的消息传递和跨服务通信功能。

5.1 简介

5.1.1 核心功能

NATS 提供了简单、可扩展和高效的消息传递方案。其核心功能包括:

  • 发布/订阅模型
  • 请求/响应模型
  • 可靠消息传递
  • 跨服务通信
5.1.2 使用场景

NATS 适用于以下场景:

  • 云原生应用程序中的服务间通信
  • 分布式系统中的事件驱动架构
  • 微服务架构中的服务发现与消息传递

5.2 安装与配置

5.2.1 安装指导

NATS 的安装十分简单。您可以从官方网站 NATS.io 下载并安装适合您操作系统的版本。以下是一个简单的安装过程示例:

# 在 macOS 上使用 Homebrew 安装 NATS
brew install nats-server
5.2.2 基本设置

安装完成后,默认情况下 NATS 将在本地启动,并监听在默认端口 4222 上。您可以通过编辑配置文件来进行更多自定义设置。

# 配置文件 nats.conf
port: 4222

5.3 API 概览

5.3.1 发布与订阅模型

NATS 提供了多种客户端库,以便您使用各种编程语言来与其交互。以下是 C# 中使用 NATS 进行发布与订阅的示例代码:

// 引入 NATS 客户端库
using NATS.Client;

class Program
{
    static void Main()
    {
        // 连接至 NATS 服务器
        using (IConnection connection = new ConnectionFactory().CreateConnection("nats://localhost:4222"))
        {
            // 订阅主题
            IAsyncSubscription subscription = connection.SubscribeAsync("subject", (sender, args) =>
            {
                string message = System.Text.Encoding.Default.GetString(args.Message.Data);
                Console.WriteLine(message);
            });
            
            // 发布消息
            connection.Publish("subject", Encoding.UTF8.GetBytes("Hello, NATS!"));
        }
    }
}
5.3.2 跨服务通信

NATS 支持跨服务通信,允许不同服务之间进行快速、可靠的消息传递。以下是使用 C# 进行跨服务通信的示例代码:

// 连接至 NATS 服务器
using (IConnection connection = new ConnectionFactory().CreateConnection("nats://nats.example.com:4222"))
{
    // 发布消息
    connection.Publish("service-A", Encoding.UTF8.GetBytes("Message from Service A"));

    // 订阅消息
    IAsyncSubscription subscription = connection.SubscribeAsync("service-B", (sender, args) =>
    {
        string message = System.Text.Encoding.Default.GetString(args.Message.Data);
        Console.WriteLine(message);
    });
}

通过以上示例,您可以了解到 NATS 的基本使用方式。要了解更多关于 NATS 的详细信息,请参阅 NATS 官方文档.

6. ServiceStack:一个全功能的C# REST API框架

ServiceStack 是一个全功能的、高性能的 C# REST API 框架,它提供了一整套轻量级、易用的工具和库,可帮助开发者快速构建高效的 Web 服务。本文将介绍 ServiceStack 的核心功能、使用场景、安装与配置以及 API 概览。

6.1 简介

6.1.1 核心功能

ServiceStack 提供了以下核心功能:

  • 快速创建 REST API
  • 数据访问
  • 强大的插件系统
  • 代码优先、约定优于配置的开发模式

ServiceStack 还内置了许多功能强大的工具,如 JSON、CSV、Protobuf 和 MessagePack 序列化等。

6.1.2 使用场景

ServiceStack 适用于构建各种规模的 Web 服务和应用程序,包括企业级后端服务、移动应用后端、IoT 服务等。其高性能和丰富的功能使其成为 C# 开发者首选的 REST API 框架之一。

6.2 安装与配置

6.2.1 安装指南

可以通过 NuGet 安装 ServiceStack 的相关包。在 Visual Studio 中打开 NuGet 包管理器控制台,并执行以下命令来安装 ServiceStack:

PM> Install-Package ServiceStack
6.2.2 基本设置

安装完成后,在 C# 项目中引用 ServiceStack 的命名空间即可开始使用框架提供的功能:

using ServiceStack;

6.3 API 概览

6.3.1 服务创建

ServiceStack 允许开发者通过简单的语法来创建 REST 服务。以下是一个简单的示例,演示了如何创建一个返回 “Hello, World!” 的服务:

[Route("/hello")]
public class HelloRequest : IReturn<HelloResponse> { }

public class HelloResponse
{
    public string Result { get; set; }
}

public class HelloService : Service
{
    public object Any(HelloRequest request)
    {
        return new HelloResponse { Result = "Hello, World!" };
    }
}

更多关于服务创建的信息,请参考 ServiceStack 官方文档。

6.3.2 数据访问

ServiceStack 提供了多种数据访问方式,包括对 ORM(Object-Relational Mapping)的支持,如使用 OrmLite 进行数据库操作。以下是一个使用 OrmLite 进行数据库查询的示例:

var customer = db.Single<Customer>(x => x.Id == 1);

这里的 db 是一个已经初始化好的 OrmLite 数据库连接对象。更多关于数据访问的信息,请参考 ServiceStack 官方文档。

通过本文的介绍,相信你对 ServiceStack 已有了初步的了解。如果想要深入学习,可以阅读ServiceStack官网获取更多详细信息和示例代码。

总结

本文系统地介绍了各种在.NET开发环境中常用的云服务相关库和工具,包括AWS SDK for .NET、Google Cloud Client Library等用于云服务开发的工具包,以及Flurl、Polly、Newtonsoft.Json等用于简化HTTP请求、处理异常和进行JSON序列化的工具库,最后介绍了ServiceStack这一全功能的C# REST API框架。通过对这些工具的介绍和分析,读者可以更好地选择适合自己项目需求的工具和库,提高开发效率和项目质量。

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

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

相关文章

数据类型转换中存在的问题分析

本文档包含内容有&#xff1a; 数据类型转换中的隐式类型转换存在的风险&#xff1b; 整型提升存在的风险 标准算数转换存在的风险数据类型转换中存在的数据类型范围溢出风险&#xff1b;数据类型转换中存在的数据精度问题&#xff08;数据截断&#xff09;。 隐式类型转换&a…

此框架你到底了解多少???

1.简述对Spring中IOC/DI的理解 IOC&#xff1a;控制反转&#xff0c;将创建和管理的对象的任务交给外部的Spring容器 DI&#xff1a;依赖注入&#xff0c;对象之间存在依赖关系&#xff0c;创建对象时&#xff0c;对其依赖的对应直接进行赋值 2.有哪些依赖注入的方式 基于注…

【计算机网络】详解UDP套接字网络字节序IP地址端口号

一、网络字节序 我们已经知道, 内存中的多字节数据相对于内存地址有大端和小端之分, 磁盘文件中的多字节数据相对于文件中的偏移地址也有大端小端之分, 网络数据流同样有大端小端之分. 发送主机通常将发送缓冲区中的数据按内存地址从低到高的顺序发出; 接收主机把从网络上接到…

软考中级软设背诵内容

冯诺依曼结构、哈佛结构 冯诺依曼结构: 程序指令和数据都采用二进制表示 程序指令和数据在同一个存储器中混合 程序的功能都由中央处理器&#xff08;CPU&#xff09;执行指令来实现 程序的执行工作由指令进行自动控制 SRAM、DRAM 与DRAM相比&#xff0c;SRAM集成率低、功…

页面布局实现-左侧横向滑动展示隐藏数据,右侧固定展示操作按钮。可上下滑动联动

效果图 1.布局排版 <LinearLayoutandroid:layout_width"match_parent"android:layout_height"match_parent"android:orientation"vertical"android:padding"1dp"><LinearLayoutandroid:id"id/lltList"android:lay…

Java:Clonable 接口和拷贝

一 Clonable 接口 在 Java SE 中&#xff0c;Cloneable 是一个标记接口&#xff08;Marker Interface&#xff09;&#xff0c;它位于 java.lang 包中。这个接口的主要目的是标识实现该接口的类能够被合法地克隆&#xff08;即可以调用 Object 类中的 clone() 方法&#xff09…

Electron应用程序打包后运行报错cannot find module ‘@vue/cli-service‘

本项目打包运行后报错问题的解决办法&#xff0c;类似于其他cannot find module XXX’的报错&#xff0c;也基本可以解决 文章目录 electron应用程序打包后运行报错排查问题解决办法 electron应用程序打包后运行报错 错误如下&#xff1a; 提示找不到该模块 排查问题 本项…

互联网广告产品基础知识

一 计价与效果 广告产品如何估算收入&#xff1f; 一种是从需求侧计算&#xff1a;按照广告主数量进行拟合&#xff1b;一种是从供给侧计算&#xff1a;按照曝光量和千次曝光单价进行拟合。 需求侧 从需求侧&#xff0c;也就是广告主侧&#xff0c;来计算广告产品的总收入&…

Linux命令:用于创建新的用户组的命令行工具groupadd 详解

目录 一、概述 二、组标识符GID 1、定义 &#xff08;1&#xff09;标识符 &#xff08;2&#xff09;与UID的关系 2、GID的作用 &#xff08;1&#xff09;用户组管理 &#xff08;2&#xff09;文件权限控制 &#xff08;3&#xff09;用户权限管理 &#xff08;4&…

threejs性能优化之gltf文件压缩threejs性能优化之glb文件压缩

在使用Three.js进行3D图形开发时&#xff0c;GLTF&#xff08;GL Transmission Format&#xff09;文件因其高效性和灵活性而广受欢迎。然而&#xff0c;随着模型复杂度的增加&#xff0c;GLTF文件的大小也会显著增加&#xff0c;这可能会对加载时间和渲染性能产生负面影响。为…

插入与冒泡排序(C++)

\一、插入排序 1 简介 插入排序&#xff0c;也称为直接插入排序&#xff0c;其排序思想和我们平时打扑克牌时排序类似。 2 算法步骤 将第一个元素看作已排序序列&#xff0c;第二个到最后一个看作未排序序列。 第二个元素&#xff0c;与之前已排序号的序列进行对比&#x…

【我的 PWN 学习手札】tcache stash with fastbin double free —— tcache key 绕过

参考看雪课程&#xff1a;PWN 探索篇 前言 tcache key 的引入使得 tcache dup 利用出现了困难。除了简单利用 UAF 覆写 key 或者House Of Karui 之外&#xff0c;还可以利用 ptmalloc 中的其他机制进行绕过。 一、Tcache Stash with Fastbin Double Free 之前是 double free …

软考中级软件设计师——知识产权学习记录

软考中级软件设计师——知识产权 著作权人身权著作财产权著作权侵权行为 计算机软件著作权基本知识计算机软件著作权侵权 专利地域性与专利权申请基本知识专利权侵权 职务作品委托开发商业秘密权基本知识商业秘密侵权 商标权与商标注册基本知识商标权侵权 著作权 著作权也称为…

Spring的任务调度

Spring的任务调度 1.概述 Spring框架为任务调度提供了专门的解决方案。在Spring框架的org.springframework.scheduling包中&#xff0c;通过对JDK 的ScheduledExecutorService接口的实例进行封装&#xff0c;对外提供了一些注解和接口&#xff0c;为开发者处理定时任务提供了…

网安面试会问到的:http的长连接和短连接

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…

探索 Python 的火焰:Fire 库的神秘力量

文章目录 &#x1f525; 探索 Python 的火焰&#xff1a;Fire 库的神秘力量第一部分&#xff1a;背景介绍第二部分&#xff1a;Fire 库是什么&#xff1f;第三部分&#xff1a;如何安装 Fire&#xff1f;第四部分&#xff1a;简单库函数使用方法第五部分&#xff1a;场景应用第…

32.递归、搜索、回溯之floodfill算法

0.简介 1.图像渲染 . - 力扣&#xff08;LeetCode&#xff09; 题目解析 算法原理 代码 class Solution {int[] dx { 0, 0, 1, -1 };int[] dy { 1, -1, 0, 0 };int m, n;int prev;public int[][] floodFill(int[][] image, int sr, int sc, int color) {if (image[sr][sc]…

yolov5足球运动分析-速度分析-足球跟踪

足球分析项目 引言 在现代体育分析领域&#xff0c;利用先进的计算机视觉技术和机器学习模型对比赛视频进行深入解析已成为一种趋势。本项目旨在通过YOLO&#xff08;You Only Look Once&#xff09;这一顶级的人工智能目标检测模型来识别并跟踪足球比赛中的球员、裁判以及足球…

【每日一题】LeetCode 2374.边积分最高节点(图、哈希表)

【每日一题】LeetCode 2374.边积分最高节点&#xff08;图、哈希表&#xff09; 题目描述 给定一个有向图&#xff0c;图中包含 n 个节点&#xff0c;节点编号从 0 到 n - 1。每个节点都有一个出边&#xff0c;指向图中的另一个节点。图由一个长度为 n 的整数数组 edges 表示…

江协科技STM32学习- P15 TIM输出比较

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…