【C#生态园】加速 .NET 开发:六款不可错过的模拟和虚拟化库

接口测试、文档生成、客户端代码自动生成:.NET 平台必备工具大揭秘

前言

在软件开发过程中,模拟和虚拟化是非常重要的技术手段,它们可以帮助开发人员进行接口测试、文档生成和客户端代码的自动生成。本文将介绍几个用于 .NET 平台的模拟和虚拟化库,它们分别是 WireMock.Net、NSwag、Mountebank、MockServer、Hoverfly 和 Pact.Net。通过对这些库的功能、安装配置以及 API 概览的介绍,读者可以更好地了解并选择适合自己项目需要的工具。

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

文章目录

  • 接口测试、文档生成、客户端代码自动生成:.NET 平台必备工具大揭秘
    • 前言
    • 1. WireMock.Net:一个用于 .NET 的 WireMock 客户端
      • 1.1 简介
        • 1.1.1 核心功能
        • 1.1.2 使用场景
      • 1.2 安装与配置
        • 1.2.1 安装指南
        • 1.2.2 基本配置
      • 1.3 API 概览
        • 1.3.1 模拟服务器创建
        • 1.3.2 请求匹配
    • 2. NSwag:一个用于生成 .NET API 文档和客户端代码的库
      • 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. Mountebank:一个用于服务虚拟化的库
      • 3.1 简介
        • 3.1.1 核心功能
        • 3.1.2 使用场景
      • 3.2 安装与配置
        • 3.2.1 安装指南
        • 3.2.2 基本配置
      • 3.3 API 概览
        • 3.3.1 模拟服务创建
        • 3.3.2 请求响应配置
    • 4. MockServer:一个用于模拟HTTP和HTTPS的库
      • 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 请求验证
    • 5. Hoverfly:一个用于模拟和记录HTTP请求的库
      • 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. Pact.Net:一个用于契约测试的库
      • 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. WireMock.Net:一个用于 .NET 的 WireMock 客户端

WireMock.Net 是一个用于 .NET 平台的轻量级 HTTP 模拟服务器和模拟客户端。它可以帮助开发人员模拟 REST 服务、创建自定义响应规则以及进行单元测试等。

1.1 简介

1.1.1 核心功能

WireMock.Net 的核心功能包括:

  • 模拟 HTTP 服务器
  • 请求匹配
  • 响应配置
  • 记录请求日志
  • 与其他测试框架集成
1.1.2 使用场景

WireMock.Net 可以被广泛应用于以下场景:

  • 单元测试中模拟外部 REST 服务
  • 集成测试中模拟第三方 API
  • 快速创建原型或演示
  • 模拟网络故障和异常情况

1.2 安装与配置

1.2.1 安装指南

通过 NuGet 包管理器安装 WireMock.Net:

Install-Package WireMock.Net
1.2.2 基本配置

在项目中引入 WireMock.Net 命名空间:

using WireMock.Server;

1.3 API 概览

1.3.1 模拟服务器创建

使用 WireMock.Net 创建一个简单的模拟服务器,并指定基本配置:

var server = WireMockServer.Start();

更多关于模拟服务器的高级配置和操作,请参考官方文档

1.3.2 请求匹配

针对特定的请求,设置匹配规则并返回自定义的响应:

server.Given(Request.Create().WithPath("/api/resource").UsingGet()).RespondWith(Response.Create().WithStatusCode(200).WithBody("Hello world!"));

以上代码将设置当收到路径为 “/api/resource” 的 GET 请求时,返回状态码为 200 和消息体为 “Hello world!” 的响应。

更多关于请求匹配的详细配置,请参考官方文档

以上是 WireMock.Net 的基本介绍、安装配置和 API 概览,希望对你有所帮助。

2. NSwag:一个用于生成 .NET API 文档和客户端代码的库

2.1 简介

NSwag 是一个用于生成 .NET API 文档和客户端代码的强大库,它能够帮助开发人员轻松地生成 OpenAPI/Swagger 规范的文档,并且可以根据 API 定义生成客户端代码。

2.1.1 核心功能

NSwag 的核心功能包括:

  • 生成 OpenAPI/Swagger 规范的 API 文档
  • 自动生成客户端代码
  • 支持多种 .NET 平台
2.1.2 使用场景

NSwag 可以广泛应用于以下场景:

  • Web API 项目的文档生成
  • 基于 API 定义自动生成客户端代码
  • 与其他前端或后端团队协作时,统一 API 标准

2.2 安装与配置

2.2.1 安装指南

NSwag 可以通过 NuGet 包管理器来安装。在 Visual Studio 中,可以通过 NuGet 包管理器控制台执行以下命令安装 NSwag:

Install-Package NSwag.AspNetCore

更多详细的安装指南,请参考 NSwag 官方文档

2.2.2 基本配置

在使用 NSwag 前,需要进行一些基本配置,例如在 Startup.cs 文件中添加 NSwag 服务并配置生成 API 文档的选项。以下是一个基本的配置示例:

public void ConfigureServices(IServiceCollection services)
{services.AddOpenApiDocument(document =>{document.Title = "My API";document.Version = "v1";});
}

更多关于配置的内容,可以参考 NSwag 配置文档

2.3 API 概览

2.3.1 文档生成

NSwag 提供了多种方式来生成 API 文档,其中最常见的是使用 NSwag.AspNetCore 库来集成到 ASP.NET Core 项目中。以下是一个简单的示例:

app.UseOpenApi();
app.UseSwaggerUi3();

在上述示例中,UseOpenApi() 方法用于启用生成的 Swagger 文档,UseSwaggerUi3() 方法用于提供 Swagger UI 来展现生成的文档。

更多关于文档生成的内容,可以参考 NSwag 文档生成教程

2.3.2 客户端代码生成

除了生成 API 文档外,NSwag 还可以根据 API 定义自动生成客户端代码。以下是一个简单的示例:

var document = await OpenApiYamlDocument.FromUrlAsync("https://api.example.com/swagger/v1/swagger.yaml");
var codeGen = new CSharpClientGenerator(document);
var code = codeGen.GenerateFile();

在上述示例中,首先通过 URL 获取 OpenAPI/Swagger 规范的 YAML 文档,然后使用 CSharpClientGenerator 类生成 C# 客户端代码。

更多关于客户端代码生成的内容,可以参考 NSwag 客户端代码生成教程

3. Mountebank:一个用于服务虚拟化的库

Mountebank 是一个开源的服务虚拟化工具,它允许用户模拟复杂的系统行为。通过创建模拟服务和配置这些服务的行为,开发人员和测试人员可以轻松地模拟和测试各种场景,从而提高系统的可靠性和稳定性。

3.1 简介

3.1.1 核心功能

Mountebank 的核心功能包括:

  • 模拟服务:可以创建 HTTP、HTTPS、TCP、SMTP 等各种类型的模拟服务。
  • 请求响应配置:可以根据请求的匹配规则,返回指定的响应内容。
  • 丰富的断言支持:支持多种断言,可以验证请求是否符合预期。
  • 数据生成器:可以生成动态数据,模拟真实系统的行为。

详细信息请参考 Mountebank 官方文档。

3.1.2 使用场景

Mountebank 可以被广泛应用于以下场景:

  • 单元测试:模拟外部服务,使得单元测试更加独立和可靠。
  • 集成测试:模拟系统间的交互,进行集成测试,而不依赖于真实的外部服务。
  • 性能测试:模拟大量请求并观察系统的性能表现。
  • 契约测试:通过模拟服务,验证服务间的契约是否得到满足。

3.2 安装与配置

3.2.1 安装指南

Mountebank 可以通过 npm 进行安装,确保已经安装了 Node.js 和 npm,然后执行以下命令进行安装:

npm install -g mountebank

更多安装信息请参考 Mountebank 官方安装指南

3.2.2 基本配置

Mountebank 的基本配置可以通过创建 Imposters 文件进行定义,Imposters 文件是一个 JSON 文件,描述了要模拟的服务和其行为。

{"imposters": [{"protocol": "http","port": 3000,"stubs": [{"responses": [{"is": {"statusCode": 200,"headers": { "Content-Type": "application/json" },"body": { "message": "Hello, world!" }}}]}]}]
}

更多配置信息请参考 Mountebank 官方配置文档

3.3 API 概览

3.3.1 模拟服务创建

下面是使用 Mountebank 创建 HTTP 模拟服务的 C# 实例代码:

using System;
using System.Net.Http;namespace MountebankDemo
{class Program{static void Main(){using (var client = new HttpClient()){var response = client.GetAsync("http://localhost:3000").Result;if (response.IsSuccessStatusCode){var content = response.Content.ReadAsStringAsync().Result;Console.WriteLine(content);}}}}
}

更多关于模拟服务创建的API信息,请参考 Mountebank 官方 API 文档

3.3.2 请求响应配置

除了模拟服务的创建,Mountebank 也支持丰富的请求响应配置,开发人员可以根据需要灵活配置请求和相应。以下是一个使用 C# 实例代码进行请求响应配置的示例:

// 引入相关命名空间
using System;
using System.Net.Http;class Program
{static HttpClient client = new HttpClient();static async void AddStub(){var request = new HttpRequestMessage{RequestUri = new Uri("http://localhost:4545/imposters/4546/stubs"),Method = HttpMethod.Post,Content = new StringContent("{\"responses\": [{\"is\": {\"statusCode\": 200, \"body\": \"Hello, world!\"}}]}")};var response = await client.SendAsync(request);Console.WriteLine(response.Content.ReadAsStringAsync().Result);}static void Main(){AddStub();}
}

上述代码演示了如何使用 C# 在 Mountebank 上配置请求响应,更多详细信息可以参考 Mountebank 官方文档。

4. MockServer:一个用于模拟HTTP和HTTPS的库

MockServer 是一个用于模拟 HTTP 和 HTTPS 请求的库,它可以帮助开发人员在测试环境中模拟服务器行为,方便进行接口调试、单元测试等工作。

4.1 简介

4.1.1 核心功能

MockServer 主要提供以下核心功能:

  • 模拟 HTTP 和 HTTPS 请求
  • 请求验证
  • 生成响应
4.1.2 使用场景

MockServer 可以被广泛应用于以下场景:

  • 开发环境中的接口测试
  • 单元测试时模拟外部依赖
  • 接口文档编写

4.2 安装与配置

4.2.1 安装方法

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

Install-Package MockServer
4.2.2 基本设置

安装成功后,你需要在代码中引入 MockServer 的命名空间:

using MockServer;

4.3 API 概览

4.3.1 模拟服务器配置

使用 MockServer 来模拟一个简单的 HTTP 服务器非常简单。以下是一个基本的示例:

var server = new Server();
server.On("/hello").Respond((req, res) => res.Body("Hello, World!"));
server.Start();

以上代码创建了一个名为 server 的 HTTP 服务器,并在根路径下响应 “Hello, World!”。

4.3.2 请求验证

MockServer 也支持对请求的验证,例如验证请求的 URL、方法、头部等信息是否符合预期。以下是一个验证请求的示例:

var server = new Server();
server.On("/validate").Respond((req, res) => res.Body("Validated!")).Verify((req, res) => req.Method == HttpMethod.Get);
server.Start();

以上代码创建了一个路由为 “/validate” 的服务器,并验证了请求的方法是否为 GET。

通过以上示例,你可以快速了解 MockServer 的基本用法。更多详细信息,请参阅 MockServer 文档。

5. Hoverfly:一个用于模拟和记录HTTP请求的库

5.1 简介

Hoverfly 是一个用于模拟和记录 HTTP 请求的轻量级模拟服务器。它可以帮助开发人员在测试环境中模拟外部依赖,以及记录并回放实际 HTTP 流量。这使得在离线环境中进行 API 开发和测试变得更加简单。

5.1.1 核心功能
  • 模拟外部依赖:通过模拟外部服务的行为,来测试应用程序的不同情况。
  • 记录与回放:记录实际的 HTTP 请求并在需要时进行回放。
5.1.2 使用场景
  • 开发过程中对外部 API 进行测试
  • 模拟特定条件下的服务端响应
  • 回放真实的 HTTP 流量

5.2 安装与配置

5.2.1 安装指导

你可以在 Hoverfly 的官方网站 上找到最新版本的安装指南。但通常情况下,你可以使用以下命令来安装 Hoverfly:

brew install SpectoLabs/tap/hoverfly
5.2.2 基本配置

安装完成后,你可以通过以下命令来启动 Hoverfly:

hoverfly start

5.3 API 概览

5.3.1 模拟服务器启动

你可以使用 Hoverfly 提供的 API 来启动模拟服务器。以下是一个基本的 C# 实例代码:

using System;
using System.Net.Http;namespace HoverflyExample
{class Program{static void Main(string[] args){// 创建一个 HttpClient 实例using (var client = new HttpClient()){// 向 Hoverfly 发送 POST 请求来启动模拟服务器var response = client.PostAsync("http://localhost:8888/api/v2/simulation/start", null).Result;// 打印响应内容Console.WriteLine(response.Content.ReadAsStringAsync().Result);}}}
}

你也可以在 Hoverfly 的官方文档 中找到更多关于模拟服务器启动的 API 信息。

5.3.2 请求记录与回放

Hoverfly 允许你记录实际的 HTTP 请求,并在需要时进行回放。以下是一个使用 C# 的示例代码:

using System;
using System.Net.Http;namespace HoverflyExample
{class Program{static void Main(string[] args){// 创建一个 HttpClient 实例using (var client = new HttpClient()){// 向 Hoverfly 发送 POST 请求来开始记录var startRecordingResponse = client.PostAsync("http://localhost:8888/api/v2/transactions/start", null).Result;// 发起一个实际的 HTTP 请求var actualResponse = client.GetAsync("https://api.example.com/data").Result;// 停止记录var stopRecordingResponse = client.DeleteAsync("http://localhost:8888/api/v2/transactions/finish").Result;// 打印被记录的请求var recordedRequestsResponse = client.GetAsync("http://localhost:8888/api/v2/transactions").Result;Console.WriteLine(recordedRequestsResponse.Content.ReadAsStringAsync().Result);// 回放请求var playbackResponse = client.PostAsync("http://localhost:8888/api/v2/simulation/playback", null).Result;// 打印响应内容Console.WriteLine(playbackResponse.Content.ReadAsStringAsync().Result);}}}
}

更多请求记录与回放的 API 信息可以在 Hoverfly 的官方文档 中找到。

以上是关于 Hoverfly 的一个简单概述和使用示例。如有更多疑问或需求,请查阅 [官方网站](

6. Pact.Net:一个用于契约测试的库

Pact是一种流行的契约测试工具,它允许开发人员在消费者和提供者之间定义和测试接口。Pact.NET是Pact的.NET版本,它提供了一组.NET核心库和一组支持库,以便.NET开发人员可以使用Pact进行契约测试。

6.1 简介

6.1.1 核心功能

Pact.NET的核心功能包括:

  • 支持消费者驱动契约测试(Consumer Driven Contract Testing, CDCT)。
  • 提供易于使用的API,用于定义契约和执行契约验证。
  • 支持多种.NET平台,包括.NET Core。
6.1.2 使用场景

Pact.NET通常适用于以下场景:

  • 在微服务架构中,希望实现消费者和提供者之间的接口契约测试。
  • 希望通过模拟服务来进行快速、可靠的端到端测试。

6.2 安装与配置

6.2.1 安装指南

可以通过NuGet包管理器或.NET CLI来安装Pact.NET。在Package Manager控制台中执行以下命令:

Install-Package PactNet

或者使用.NET CLI:

dotnet add package PactNet
6.2.2 基本设置

安装完成后,可以在项目中引入Pact.NET,并根据需要进行配置。

6.3 API 概览

6.3.1 契约定义

Pact.NET提供了简洁明了的API,用于定义契约。以下是一个简单的例子:

var pact = new PactBuilder(new PactConfig { SpecificationVersion = "2.0.0" }).ServiceConsumer("Consumer").HasPactWith("Provider");pact.UponReceiving("a request to get alligators").With(new ProviderServiceRequest{Method = HttpVerb.Get,Path = "/alligators",Headers = new Dictionary<string, object>{{ "Accept", "application/json" }}}).WillRespondWith(new ProviderServiceResponse{Status = 200,Headers = new Dictionary<string, object>{{ "Content-Type", "application/json; charset=utf-8" }},Body = new{alligators = Match.Type("number")}});

以上代码示例中,展示了如何使用Pact.NET定义一个契约,描述了当服务消费者向服务提供者发送获取鳄鱼信息的请求时,服务提供者应该如何响应。

6.3.2 契约验证

除了定义契约,Pact.NET还提供了简单易用的API用于执行契约验证。以下是一个示例:

var pactVerifier = new PactVerifier(config);
pactVerifier.ServiceProvider("Provider", providerBaseUri) //服务提供者名称及其基本URI.HonoursPactWith("Consumer") //与哪个消费者遵守契约.PactUri(pactFile) //契约文件路径.Verify();

在上面的示例中,展示了如何使用Pact.NET的API来验证契约,确保服务提供者的实际响应与契约定义保持一致。

官网链接:Pact.NET

通过该文章你可以了解到Pact.NET这个契约测试库的基本介绍、安装配置方法以及API的使用方法。

总结

本文对六个 .NET 平台下的模拟和虚拟化库进行了介绍,涵盖了 WireMock.Net、NSwag、Mountebank、MockServer、Hoverfly 和 Pact.Net。这些库各有特色,能够帮助开发人员实现接口测试、文档生成、客户端代码自动生成和契约测试等功能。通过本文的阅读,读者可以更好地了解和掌握这些工具,从而提升软件开发效率和质量。

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

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

相关文章

Mysql基本理解

系列文章目录 Mysql的基础理论知识 目录 系列文章目录 文章目录 一、数据库概述 1.数据库概念 2.数据库的作用 3.什么是关系型数据库&#xff1f; 4.Mysql的优点 5.数据库术语 6.SQL语言分类 二、Mysql安装 三、 Mysql使用 1.登录数据库、退出登录 2.创建、列出数据库 3.选择…

Node.JS有什么用?给谁用?怎么学?通俗易懂,超级详细!

现在&#xff0c;nodejs主要是前端的小伙伴来用的。前端小伙伴也不用说去怎么学node&#xff0c;而是把node当做是一个环境。我们利用这个环境去搭建上层的一些应用&#xff0c;去使用一些工具。就像学习Windows一样&#xff0c;我们没有必要深入了解Windows的每一个细节&#…

【hot100-java】【环形链表 II】

印象题 /*** Definition for singly-linked list.* class ListNode {* int val;* ListNode next;* ListNode(int x) {* val x;* next null;* }* }*/ public class Solution {public ListNode detectCycle(ListNode head) {ListNode fasthea…

建筑工程系列专业职称评审条件大全

我们都知道&#xff0c;职称是分很多系列&#xff0c;今天甘建二主要是从建筑工程系列讲起来&#xff0c;从技术员到初级职称再到中级职称然后到高级职称&#xff0c;各个等级的评审条件给您一一解析&#xff0c;赶紧收藏起来。 ✨技术员1️⃣理工类或建筑工程相关专业大学专科…

视频生成技术分享

文本到视频&#xff08;T2V&#xff09;生成是一种技术&#xff0c;它通过将文本描述转换为视频内容&#xff0c;允许用户根据自然语言生成动态视觉媒体。近年来&#xff0c;扩散模型在这一领域取得了显著进展&#xff0c;但现有模型在处理多个对象和复杂场景时&#xff0c;面临…

android 跑了一个网易云信v1.0的app, 编译的过程中报错Entry name ‘assets/sm2/r.jks‘ collided的处理

1、一开始并没有报这个错误&#xff0c;然后直接就不知道注了什么信息以后&#xff0c;就报错&#xff0c;是因为下面的warning&#xff1a; 2、然后编译的时候就直接报下面的错误&#xff1a; 3、然后我们再之前的注解放开&#xff1a; 这样一切就正常了。 4、那么这个究竟是…

【动态规划】(五)动态规划——子序列问题

动态规划——子序列问题 子序列问题☆ 最长递增子序列&#xff08;离散&#xff09;最长连续递增序列&#xff08;连续&#xff09;最大子序和&#xff08;连续&#xff09;最长重复子数组&#xff08;连续&#xff09;☆ 最长公共子序列&#xff08;离散-编辑距离过渡&#xf…

【动态规划】(四)动态规划——打家劫舍与买卖股票

打家劫舍与买卖股票 打家劫舍问题打家劫舍打家劫舍II打家劫舍III 买卖股票问题买卖股票的最佳时机买卖股票的最佳时机II买卖股票的最佳时机III买卖股票的最佳时机IV最佳买卖股票时机含冷冻期买卖股票的最佳时机含手续费 股票问题总结 打家劫舍问题 给定一个数组&#xff0c;相…

day-59 两两交换链表中的节点

思路 只需将链表两两交换节点即可&#xff0c;如果是奇数个节点&#xff0c;最后一个节点则不用交换 解题过程 可以先自定义一个头结点thead&#xff0c;这样更便于思考交换&#xff0c;最后返回thead.next即可 Code /*** Definition for singly-linked list.* public class…

SAM+无监督学习!能发顶会的高端局组合!idea效果绝佳

学过SAM的朋友都知道&#xff0c;SAM需要对训练数据进行全面的手动标记&#xff0c;每张图像都要超过20分钟...效率有待提升。那么如何解决这个短板&#xff1f;我们考虑SAM无监督学习。 这是因为无监督学习具有无需人工标注数据的特点&#xff0c;通过将两者结合&#xff0c;…

【LeetCode】动态规划—删除并获得点数(附完整Python/C++代码)

动态规划—#740. 删除并获得点数 前言题目描述基本思路1. 问题定义:2. 理解问题和递推关系:3. 解决方法:4. 进一步优化:5. 小总结: 代码实现Python3代码实现Python 代码解释C代码实现C 代码解释 总结: 前言 给你一个整数数组 n u m s nums nums &#xff0c;你可以对它进行一…

DownShift: Tuning Shift Reduction With Reliability for Racetrack Memories

目录 DownShift: Tuning Shift Reduction With Reliability for Racetrack Memories文章摘要&#xff1a;文章的主要贡献包括&#xff1a;文章的结构如下&#xff1a;DownShiftDownShift通过以下方式改进了现有的数据放置策略&#xff1a; GROGU&#xff08;Generating Reliabi…

2024最受欢迎的3款|数据库管理和开发|工具

1.SQLynx&#xff08;原SQL Studio&#xff09; 概述&#xff1a; SQLynx是一个原生基于Web的SQL编辑器&#xff0c;由北京麦聪软件有限公司开发。它最初被称为SQL Studio&#xff0c;后改名为SQLynx&#xff0c;支持企业的桌面和Web数据库管理。SQLynx支持所有流行的数据库&a…

工业一体机实现接口与模块选配

在现代工业自动化和智能制造的浪潮中&#xff0c;工业一体机因其集成化、稳定性高和适应性强的特性而逐渐成为企业生产过程中不可或缺的设备。为了满足不同客户的需求&#xff0c;工业一体机的接口与模块选配功能显得尤为重要。 一、工业一体机的基本概念 工业一体机是将计算、…

跟着B战学习JAVA面试八股文

学习链接&#xff1a;https://www.bilibili.com/video/BV1gm411S7EX/?spm_id_from333.337.search-card.all.click&vd_sourceefbaa07876b231ae3225ba8999116807 创建线程的几种方式&#xff1f; 继承Thread类实现Runnable接口实现Callable接口通过线程池来创建线程 为什么…

【官方Mamba库】原理简述和代码解析

目录 1 代码原理简述1.1 原始结构——SSM1.2 结构改进——S4&#xff08;Structured State Space for Sequences&#xff09;1.2.1 离散化1.2.2HiPPO 1.3 最终版本——Mamba&#xff08;又称S6或selective SSMs&#xff09; 2 代码库目录结构2.1 mamba_simple.py主体结构2.1.1 …

OLED(2)驱动篇

文章目录 1 概述2 代码简述2.1 OLED 对象2.2 OLEDProtocol 对象2.3 OLEDFont 对象 3 成果展示 1 概述 1&#xff09;代码仓库&#xff1a;这里尝试了两种面向对象的方式&#xff0c;不足之处敬请指正。 OOP 方式&#xff1a;https://gitee.com/luyaocf/demo-jlc_stm32f407_oop.…

Unity 设计模式 之 行为型模式-【命令模式】【责任链模式】

Unity 设计模式 之 行为型模式-【命令模式】【责任链模式】 目录 Unity 设计模式 之 行为型模式-【命令模式】【责任链模式】 一、简单介绍 二、命令模式&#xff08;Command Pattern&#xff09; 1、什么时候使用命令模式 2、使用命令模式的好处 3、使用时的注意事项 三…

FME学习笔记

读取数据 方法一&#xff1a;add reader 通过读模块来进行数据的读取 方法二&#xff1a;FeatureReader Parameters 通过转换器来进行数据的读取 可以通过空间范围进行筛选 在FME中&#xff0c;所有数据处理都要用到的&#xff0c;绝对的重点&#xff1a;转换器&#xff…

【Python】PyCharm: 强大的 Python 开发环境

⭕️宇宙起点 &#x1f4e2; 引言&#x1f3ac; 什么是 PyCharm&#xff1f;&#x1f528; PyCharm 的核心特性1. 智能代码编辑2. 调试和测试3. 项目和代码结构导航4. 集成 AI 助手5. 远程开发6. 集成数据库7. 科学工具8. 版本控制集成9. Web 开发 &#x1f4e6; 安装 PyCharm&…