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

swagger,showdoc,apifox,Mock 服务,dubbo,ZooKeeper和dubbo的关系

Swagger、ShowDoc 和 Apifox 之间的区别与优势

Swagger、ShowDoc 和 Apifox 都是用于 API 文档管理和测试的工具,但它们各有特色和适用场景。以下是详细的比较,并附上每个工具的具体用法示例。

1. Swagger

特点与优势:

  • 广泛采用:
    • Swagger 是最流行的 API 文档生成和测试框架之一,拥有庞大的社区支持和丰富的插件生态系统。
  • 标准规范:
    • 基于 OpenAPI 规范(以前称为 Swagger 规范),确保了与多种工具和服务的良好兼容性。
  • 自动化文档生成:
    • 支持从代码注释中自动生成 API 文档,减少了手动编写文档的工作量。
  • 强大的 UI 工具:
    • 提供了交互式的 Swagger UI,用户可以直接在浏览器中查看 API 文档并进行调用测试。
  • 多语言支持:
    • 支持多种编程语言和框架,方便不同技术栈的团队使用。

用法示例:

假设我们有一个简单的 RESTful API /api/books,它允许获取书籍列表。我们将展示如何使用 Swagger 来定义和测试这个 API。

  1. 定义 API (YAML 格式):

    openapi: 3.0.0
    info:title: Bookstore APIversion: 1.0.0
    paths:/api/books:get:summary: 获取书籍列表parameters:- in: queryname: pageschema:type: integerdefault: 1description: 当前页码- in: queryname: pageSizeschema:type: integerdefault: 10description: 每页显示的书籍数量responses:'200':description: 成功响应content:application/json:schema:type: objectproperties:total:type: integerbooks:type: arrayitems:type: objectproperties:id:type: integertitle:type: stringauthor:type: string
    
  2. 使用 Swagger UI 测试 API:

    • 将上述 YAML 文件上传到 Swagger Editor 或者集成到项目中。
    • 在 Swagger UI 中,你可以直接点击“Try it out”按钮来测试 API,查看请求和响应。
2. ShowDoc

特点与优势:

  • 简单易用:
    • 用户界面友好,容易上手,特别适合中小型企业或个人开发者。
  • 实时协作:
    • 支持多人同时编辑同一个项目,所有更改都会实时同步,极大提高了团队协作效率。
  • 内置 Mock 服务:
    • 内置 Mock 服务器,允许前端开发人员在后端接口未完成前进行 UI 开发。
  • 开放 API:
    • 提供了 RESTful API 接口,使得外部系统可以通过 API 自动化地与 ShowDoc 进行交互。
  • 免费开源:
    • 完全开源且免费,降低了使用门槛。

用法示例:

假设我们要为一个在线书店应用创建一个获取书籍列表的 API /api/books。我们将展示如何使用 ShowDoc 来管理和维护这个 API。

  1. 安装 ShowDoc:

    • 如果你还没有安装 ShowDoc,可以通过 Docker 或者直接在服务器上安装。
    • 使用 Docker 安装:
      docker pull showdoc/showdoc:latest
      docker run --name showdoc -p 80:80 showdoc/showdoc
      
    • 访问 http://localhost(如果你是在本地运行),或者访问你的服务器 IP 地址。
  2. 创建项目:

    • 登录后进入 ShowDoc 控制台首页。
    • 点击页面右上角的“新建项目”按钮。
    • 输入项目名称为“Online Bookstore API”,然后点击“创建”。
  3. 添加 API 文档:

    • 在项目主页左侧菜单中选择“接口文档”。
    • 点击右上角的“添加接口”按钮。
    • 基本信息:
      • 接口名称: 获取书籍列表
      • URL: /api/books
      • 请求方式: GET
      • 描述: 获取所有书籍列表
      • 标签: “Books”
    • 请求参数:
      • 分页参数:
        • 名称: page
        • 类型: integer
        • 必填: 是
        • 描述: 当前页码,默认值为 1
      • 每页数量参数:
        • 名称: pageSize
        • 类型: integer
        • 必填: 否
        • 描述: 每页显示的书籍数量,默认值为 10
    • 响应体:
      • 成功响应 (200 OK):
        {"total": 100, // 总记录数"books": [{"id": 1,"title": "Effective Java","author": "Joshua Bloch"},{"id": 2,"title": "Clean Code","author": "Robert C. Martin"}]
        }
        
  4. 添加 Mock 数据:

    • 在接口编辑页面中,切换到“Mock 数据”选项卡。
    • 点击“开启 Mock”按钮,启用 Mock 功能。
    • 设置默认的 Mock 规则或自定义规则。
    • 示例:
      • 设置 Mock 响应时间为 500ms,状态码为 200 OK。
      • 自定义 Mock 规则以返回固定数量的书籍条目(例如,总是返回 2 条记录)。
3. Apifox

特点与优势:

  • 一站式解决方案:
    • 不仅提供 API 文档管理,还集成了 Mock 服务、自动化测试等功能,形成了一个完整的 API 生命周期管理平台。
  • 高效的团队协作:
    • 强大的权限管理系统和版本控制功能,便于团队成员之间的高效协作。
  • 智能解析和导入:
    • 支持从 Postman、Swagger 等格式的文件中智能解析 API 定义,并可以一键导入到 Apifox 中。
  • 丰富的插件库:
    • 拥有丰富的插件市场,用户可以根据需求安装各种插件来扩展平台的功能。
  • 详尽的统计分析:
    • 提供详细的 API 调用统计和性能分析,帮助开发者优化 API 性能。

用法示例:

假设我们要为一个在线书店应用创建一个获取书籍列表的 API /api/books。我们将展示如何使用 Apifox 来管理和维护这个 API。

  1. 注册并登录 Apifox:

    • 访问 Apifox 官网 并注册一个账号。
    • 登录后进入仪表板,开始探索可用的功能和服务。
  2. 创建 API 项目:

    • 在仪表板中点击“创建项目”按钮。
    • 输入项目名称为“Online Bookstore API”,然后点击“创建”。
  3. 添加 API 文档:

    • 在项目主页左侧菜单中选择“接口文档”。
    • 点击右上角的“添加接口”按钮。
    • 基本信息:
      • 接口名称: 获取书籍列表
      • URL: /api/books
      • 请求方式: GET
      • 描述: 获取所有书籍列表
      • 标签: “Books”
    • 请求参数:
      • 分页参数:
        • 名称: page
        • 类型: integer
        • 必填: 是
        • 描述: 当前页码,默认值为 1
      • 每页数量参数:
        • 名称: pageSize
        • 类型: integer
        • 必填: 否
        • 描述: 每页显示的书籍数量,默认值为 10
    • 响应体:
      • 成功响应 (200 OK):
        {"total": 100, // 总记录数"books": [{"id": 1,"title": "Effective Java","author": "Joshua Bloch"},{"id": 2,"title": "Clean Code","author": "Robert C. Martin"}]
        }
        
  4. 添加 Mock 数据:

    • 在接口编辑页面中,切换到“Mock 数据”选项卡。
    • 点击“开启 Mock”按钮,启用 Mock 功能。
    • 设置默认的 Mock 规则或自定义规则。
    • 示例:
      • 设置 Mock 响应时间为 500ms,状态码为 200 OK。
      • 自定义 Mock 规则以返回固定数量的书籍条目(例如,总是返回 2 条记录)。
  5. 编写测试用例:

    • 切换到“调试”选项卡,你可以在这里进行简单的调试和测试。
    • 测试用例 1: 请求第一页书籍列表,期望返回前 10 条记录。
      • 请求配置:
        • URL: /api/books?page=1&pageSize=10
        • HTTP 方法: GET
      • 断言:
        • 响应状态码为 200
        • JSONPath 断言:$.books.length == 10
    • 测试用例 2: 请求第二页书籍列表,期望返回接下来的 10 条记录。
      • 请求配置:
        • URL: /api/books?page=2&pageSize=10
        • HTTP 方法: GET
      • 断言:
        • 响应状态码为 200
        • JSONPath 断言:$.books.length == 10
        • JSONPath 断言:$.books[0].id > 10 (确保是第二页的数据)
  6. 分享和协作:

    • 分享文档链接给前端开发者:
      • 将生成的文档 URL 分享给前端团队,以便他们在没有真实后端接口的情况下进行 UI 开发。
    • 邀请团队成员加入项目:
      • 邀请其他开发人员、测试工程师等加入项目,共同维护 API 文档和测试用例。
  7. 监控和优化:

    • 使用 Apifox 提供的统计分析工具,监控 API 的调用情况,了解性能瓶颈。
    • 根据反馈不断优化 API 设计和实现,确保其稳定性和高效性。

总结

  • 选择 Swagger 如果你需要一个高度标准化、广泛支持并且能够与现有 CI/CD 流程无缝集成的工具,特别是在大型企业环境中。
  • 选择 ShowDoc 如果你追求简单易用、低成本甚至免费的解决方案,并且希望快速搭建起 API 文档管理系统,尤其是对于小型团队或个人开发者。
  • 选择 Apifox 如果你正在寻找一个全面而专业的 API 管理平台,它不仅涵盖了文档管理,还包括 Mock 服务、自动化测试等附加功能,非常适合那些需要一站式解决方案的团队。

根据你的具体需求和技术背景,可以选择最适合自己的工具。每个工具都有其独特的优势,在不同的应用场景下都能发挥重要作用。

Mock 服务是一种在软件开发和测试过程中用于模拟真实服务行为的技术或工具。它允许开发者创建一个模拟的服务实例,这个实例可以模仿实际服务的响应,但不需要依赖于实际的服务实现。Mock 服务主要用于以下几种场景:

主要用途

  1. 加速开发:

    • 在前后端分离开发中,前端团队可以在后端 API 尚未完成时使用 Mock 服务来模拟 API 响应,从而继续进行页面和功能的开发。
  2. 提高测试效率:

    • 单元测试和集成测试中,Mock 服务可以帮助隔离被测代码与外部依赖,确保测试环境的稳定性和可控性。通过 Mock 服务,可以快速地为不同的测试场景配置相应的输入输出数据,而无需每次调用真实的外部服务。
  3. 减少对外部系统的依赖:

    • 当某些外部系统不可用、不稳定或者难以配置时(例如第三方支付网关),可以通过 Mock 服务提供一致的响应,保证开发和测试工作的连续性。
  4. 容错机制:

    • 在微服务架构中,如 Dubbo 中的 Mock 服务,当服务提供者暂时不可用时,消费者可以调用预定义的 Mock 服务来返回默认数据,避免整个应用程序因为单个服务故障而崩溃。

Mock 服务的工作原理

  • 模拟请求和响应: Mock 服务通常会根据预先设定的规则生成特定格式的数据作为响应,这些规则可以是静态的 JSON 文件、动态生成的数据结构或者是基于某种模式随机生成的数据。

  • 拦截请求: 对于 Web 应用来说,Mock 服务可以通过 HTTP 请求拦截器来捕获并处理来自客户端的请求,然后直接返回模拟的数据,而不是将请求转发给真正的服务器。

  • 环境独立性: Mock 服务可以在开发环境中独立运行,不需要依赖任何外部的真实服务。这使得开发人员可以在本地快速迭代,而不会受到网络延迟或其他因素的影响。

使用方式

  1. 现成的 Mock Server:

    • 可以使用像 MockServer 或 Apifox 这样的工具搭建独立的 Mock 服务,所有接口都会指向该 Mock 服务。这种方式对业务代码完全不具有侵入性,并且通用性强,适合大型项目或团队协作。
  2. 代码中的 Mock 实现:

    • 在单元测试或集成测试中,可以直接在代码里编写 Mock 逻辑,比如使用 Java 的 Mockito 库来模拟对象的行为。这种方式的好处是在代码内部就可以完成 Mock,主要适用于简单的测试场景。
  3. 代理工具:

    • 利用 Fiddler 或 Charles 等代理工具对网络请求进行拦截,并将其替换为自定义的 Mock 数据。这种方法操作相对简单,但对于复杂的项目管理可能不够灵活。
  4. 框架内置支持:

    • 某些框架(如 Spring Boot)提供了内置的支持来轻松启用 Mock 功能,简化了配置过程。

示例:Dubbo 中的 Mock 服务

在 Dubbo 中,Mock 服务可以通过 XML 配置、注解或属性文件配置来启用。例如:

<!-- XML 配置 -->
<dubbo:service interface="com.example.MyService" mock="true" />
// 注解配置
@Service(mock = "true")
public class MyServiceImpl implements MyService {// ...
}
# 属性文件配置
dubbo.service.my-service.mock=true

此外,还可以指定具体的 Mock 实现类:

<!-- XML 配置 -->
<dubbo:service interface="com.example.MyService" mock="com.example.MyMockService" />
// 注解配置
@Service(mock = "com.example.MyMockService")
public class MyServiceImpl implements MyService {// ...
}

总之,Mock 服务作为一种有效的工具和技术手段,在现代软件开发和测试实践中扮演着重要角色,有助于提升开发效率、增强测试覆盖率以及降低对外部系统的依赖。

Dubbo 是由阿里巴巴开源的一款高性能的 Java RPC(远程过程调用)框架,主要用于构建分布式服务架构。它提供了诸如服务发现、负载均衡、容错处理等功能,使得开发者可以更轻松地构建和管理大规模微服务应用。以下是关于 Dubbo 的详细解释以及一个简单的例子。

Dubbo 核心特性

1. 透明化的远程方法调用
  • Dubbo 提供了一种类似于本地方法调用的方式来调用远程服务,开发者无需关心底层的网络通信细节。通过代理模式,客户端可以直接像调用本地对象一样调用远程的服务接口。
2. 智能路由与负载均衡
  • 支持多种负载均衡策略(如随机、轮询、最少活跃调用数等),可以根据实际需求选择最适合的方式分配请求到不同的服务提供者,从而提高系统的可用性和性能。
3. 自动服务注册与发现
  • 使用注册中心(如 ZooKeeper、Nacos 等)来管理和维护服务提供者的地址信息。当消费者需要调用某个服务时,它会从注册中心获取最新的服务列表,并根据配置进行调用。
4. 动态配置和服务治理
  • 可以通过配置中心动态调整服务的参数和行为,例如修改超时时间、切换版本等,而不需要重启应用程序。此外,还支持灰度发布、流量控制等高级功能。
5. 集群容错机制
  • 内置了丰富的容错机制,如失败重试、熔断器模式等,确保即使部分节点不可用,整个系统仍然能够正常工作。
6. 监控和统计
  • 提供了详细的监控数据,包括 QPS(每秒查询率)、响应时间、错误率等,帮助运维人员及时发现问题并采取措施。

示例:构建一个简单的 Dubbo 应用

假设我们要创建一个简单的图书管理系统,其中包含两个模块:

  • BookService:负责提供书籍相关的业务逻辑。
  • BookClient:作为消费者,调用 BookService 来获取书籍信息。
1. 引入依赖

首先,在 pom.xml 中添加 Dubbo 和相关组件的依赖:

<dependencies><!-- Dubbo --><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo</artifactId><version>2.7.8</version></dependency><!-- Zookeeper client for registry --><dependency><groupId>org.apache.curator</groupId><artifactId>curator-framework</artifactId><version>4.2.0</version></dependency><dependency><groupId>org.apache.curator</groupId><artifactId>curator-recipes</artifactId><version>4.2.0</version></dependency>
</dependencies>
2. 定义服务接口

创建一个名为 BookService.java 的接口文件,定义书籍相关的操作:

package com.example;public interface BookService {String getBookById(int id);
}
3. 实现服务端 (Provider)

编写 BookServiceImpl.java 文件实现上述接口,并标记为 Dubbo 服务提供者:

package com.example;import org.apache.dubbo.config.annotation.DubboService;@DubboService(version = "1.0.0")
public class BookServiceImpl implements BookService {@Overridepublic String getBookById(int id) {// 这里只是一个简单的示例,实际应用中应该连接数据库或其他数据源return "Book ID: " + id;}
}

配置服务提供者的 application.properties 文件:

# dubbo configuration
dubbo.application.name=book-provider
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
4. 编写客户端 (Consumer)

在客户端项目中引入相同的接口包,并编写 BookClient.java 文件来调用远程服务:

package com.example;import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.stereotype.Component;@Component
public class BookClient {@DubboReference(version = "1.0.0")private BookService bookService;public void printBookInfo(int id) {System.out.println(bookService.getBookById(id));}
}

配置客户端的 application.properties 文件:

# dubbo configuration
dubbo.application.name=book-consumer
dubbo.registry.address=zookeeper://127.0.0.1:2181
5. 启动服务

启动 ZooKeeper 服务器,然后分别启动服务提供者和消费者应用。此时,消费者可以通过 Dubbo 调用远程的服务提供者,就像调用本地方法一样简单。

总结

通过这个简单的例子,我们可以看到 Dubbo 如何简化了分布式服务之间的交互。它隐藏了复杂的网络通信细节,让开发者专注于业务逻辑的实现。同时,Dubbo 提供的一系列特性(如负载均衡、服务发现等)也为构建可靠且高效的微服务架构打下了坚实的基础。

ZooKeeper和dubbo的关系

ZooKeeper 和 Dubbo 之间的关系主要体现在服务注册与发现上。Dubbo 是一个高性能的 Java RPC 框架,而 ZooKeeper 是一个分布式协调服务,常被用作 Dubbo 的注册中心。以下是它们之间关系的详细解释:

1. 服务注册与发现

  • 服务提供者:当服务提供者启动时,它会向 ZooKeeper 注册自己提供的服务信息(如服务名、IP 地址和端口等)。这些信息会被存储在 ZooKeeper 中特定的节点下,通常是以 /dubbo/${serviceName}/providers 这样的路径结构。

  • 服务消费者:服务消费者在启动时会订阅 ZooKeeper 上对应的服务节点,一旦有新的服务提供者上线或下线,ZooKeeper 就会通知所有订阅了该服务的消费者,从而保证消费者始终拥有最新的服务列表。

2. 动态配置管理

  • 使用 ZooKeeper 作为配置中心,可以实现配置的集中管理和动态更新。例如,可以通过修改 ZooKeeper 中的配置来调整服务的参数(如超时时间),而无需重启应用程序。

3. 负载均衡

  • 虽然负载均衡策略本身是由 Dubbo 实现的,但通过 ZooKeeper 可以轻松获取当前所有可用的服务实例,使得 Dubbo 能够根据预设的算法选择最合适的服务提供者进行调用。

4. 集群容错

  • ZooKeeper 提供了高可用性和数据一致性保障,即使某个 ZooKeeper 节点出现故障,其他节点仍然可以继续工作。这确保了即使在网络分区的情况下,Dubbo 应用也能正常运行,并且能够自动恢复对失效节点的访问。

5. 命名服务

  • ZooKeeper 的层次化命名空间非常适合用来维护全局的服务地址列表。每个服务可以在 ZooKeeper 上创建唯一的路径,并将自身的 URL 地址写入到相应的节点中完成服务发布。

6. 事件驱动架构

  • ZooKeeper 支持 Watcher 机制,允许客户端监听特定节点的变化。对于 Dubbo 来说,这意味着它可以实时感知服务提供者的上下线情况,并据此做出相应的处理(比如重新路由请求)。

7. Mastership选举

  • 在某些情况下,Dubbo 集群可能需要选出一个主节点来进行特定的操作(例如调度任务)。ZooKeeper 提供了简单的 Master 选举功能,可以帮助 Dubbo 完成这一过程。

总结

综上所述,ZooKeeper 和 Dubbo 的结合为构建可靠的分布式系统提供了强大的支持。ZooKeeper 不仅充当了 Dubbo 的注册中心,还提供了配置管理、负载均衡、集群容错等功能,极大地简化了微服务架构中的服务治理问题。此外,由于 ZooKeeper 具备良好的扩展性和可靠性,因此成为了很多分布式应用和服务框架(不仅仅是 Dubbo)首选的注册中心解决方案之一。

相关文章:

swagger,showdoc,apifox,Mock 服务,dubbo,ZooKeeper和dubbo的关系

Swagger、ShowDoc 和 Apifox 之间的区别与优势 Swagger、ShowDoc 和 Apifox 都是用于 API 文档管理和测试的工具&#xff0c;但它们各有特色和适用场景。以下是详细的比较&#xff0c;并附上每个工具的具体用法示例。 1. Swagger 特点与优势&#xff1a; 广泛采用: Swagger…...

【自信息、信息熵、联合熵、条件熵、互信息】

文章目录 一、自信息 I(X)二、信息熵&#xff1a;衡量系统的混乱程度信息熵 H(X)联合熵 H(X,Y) 三、条件熵H(Y|X) 联合熵H(X,Y) - 信息熵H(X)四、互信息 I(X,Y)五、总结References 一、自信息 I(X) 自信息(Self-information) 是由香农提出的&#xff0c;用来衡量单一事件发生…...

免费资源网站

记录一下 音效 爱给网制片帮素材...

C++--------继承

一、继承的基本概念 继承是 C 中的一个重要特性&#xff0c;它允许一个类&#xff08;派生类或子类&#xff09;继承另一个类&#xff08;基类或父类&#xff09;的属性和方法。这样可以实现代码的重用和建立类之间的层次关系。 #include <iostream>// 基类 class Base…...

Python PyMupdf 去除PDF文档中Watermark标识水印

通过PDF阅读或编辑工具&#xff0c;可在PDF中加入Watermark标识的PDF水印&#xff0c;如下图&#xff1a; 该类水印特点 这类型的水印&#xff0c;会在文件的字节流中出现/Watermark、EMC等标识&#xff0c;那么&#xff0c;我们可以通过改变文件字节内容&#xff0c;清理掉…...

改进爬山算法之四:概率爬山法(Probabilistic Hill Climbing,PHC)

概率爬山法(Probabilistic Hill Climbing,PHC)是一种局部搜索算法,它结合了随机性和贪婪搜索的特点,是对爬山算法(Hill Climbing Algorithm)的一种变体或扩展。与传统的爬山法不同,PHC不是总是选择最优的邻居作为下一步的移动,而是以一定的概率选择最优邻居,同时以一…...

解读DeepseekV3

本年度还剩几天&#xff0c;Deepseek就发布了这么值得惊喜的产品&#xff0c;我觉得是真正做AI&#xff0c;也喜欢AI同学&#xff0c;对这个魔幻的2024年12月&#xff0c;一定是未来多少年想起都能回忆起这波澜壮阔的岁月。 我见过的最省的GPT4o&#xff0c;Claude&#xff0c…...

【网络安全 | 漏洞挖掘】如何通过竞态条件发现账户接管漏洞

未经许可,不得转载。 文章目录 背景正文设置竞态条件实现漏洞背景 目标应用允许用户创建项目。这些项目中包含多个用户角色,每个角色权限不同(如所有者、管理员、成员管理者等)。用户可通过接受邀请来加入项目,而只有项目所有者才能通过输入邮箱将项目所有权转移给其他用…...

串口通信标准RS232、RS422、RS485有什么区别和不同

目录 第一个区别&#xff1a;硬件管脚接口定义不同&#xff1a; 第二个区别、工作方式不同 第三个区别、通信方式不同 第四个区别&#xff0c;逻辑特性不同 第五个区别、抗干扰性、传输距离和传输速率也不同 RS-232与RS-485对比 RS-422与RS-485对比 今天给大家分享的是&…...

win版ffmpeg的安装和操作

一、ffmpeg软件安装&#xff1a; ffmpeg是一个通过命令行将视频转化为图片的软件。 在浏览器搜索ffmpeg在官网里找到软件并下载&#xff08;不过官网很慢&#xff09;&#xff0c;建议用这个下载。 下载的文件是一个zip压缩包&#xff0c;将压缩包解压&#xff0c;有如下文件…...

力扣56. 合并区间

此题在技巧上需要掌握Lambda表达式&#xff0c;在 C 的 Lambda 表达式 中&#xff0c;[] 是 捕获列表&#xff08;capture list&#xff09;&#xff0c;用于指定 Lambda 表达式如何访问其外部作用域的变量。 [捕获列表](参数列表) -> 返回类型 {函数体 };• 捕获列表&…...

2024基于大模型的智能运维(附实践资料合集)

基于大模型的智能运维是指利用人工智能技术&#xff0c;特别是大模型技术&#xff0c;来提升IT运维的效率和质量。以下是一些关键点和实践案例&#xff1a; AIOps的发展&#xff1a;AIOps&#xff08;人工智能在IT运维领域的应用&#xff09;通过大数据分析和机器学习技术&…...

Android Java 版本的 MSAA OpenGL ES 多重采样

最近多次被小伙伴问到 OpenGL 多重采样&#xff0c;其实前面文章里多次讲过了&#xff0c;就是构建2个缓冲区&#xff0c;多重采样缓冲区和目标解析缓冲区。 代码流程 // Framebuffer IDs private int msaaFBO; private int msaaColorBuffer; private int msaaDepthBuffer;pr…...

YOLO11改进-注意力-引入自调制特征聚合模块SMFA

本篇文章将介绍一个新的改进机制——SMFA&#xff08;自调制特征聚合模块&#xff09;&#xff0c;并阐述如何将其应用于YOLOv11中&#xff0c;显著提升模型性能。随着深度学习在计算机视觉中的不断进展&#xff0c;目标检测任务也在快速发展。YOLO系列模型&#xff08;You Onl…...

VMware虚拟机安装银河麒麟操作系统KylinOS教程(超详细)

目录 引言1. 下载2. 安装 VMware2. 安装银河麒麟操作系统2.1 新建虚拟机2.2 安装操作系统2.3 网络配置 3. 安装VMTools 创作不易&#xff0c;禁止转载抄袭&#xff01;&#xff01;&#xff01;违者必究&#xff01;&#xff01;&#xff01; 创作不易&#xff0c;禁止转载抄袭…...

Elasticsearch-索引的批量操作

索引的批量操作 批量查询和批量增删改 批量查询 #批量查询 GET product/_search GET /_mget {"docs": [{"_index": "product","_id": 2},{"_index": "product","_id": 3}] }GET product/_mget {"…...

【Android】application@label 属性属性冲突报错

错误记录 What went wrong: Execution failed for task :app:processDebugMainManifest. > Manifest merger failed : Attribute applicationlabel value(string/app_name) from AndroidManifest.xml:8:9-41is also present at [:abslibrary] AndroidManifest.xml:25:9-47 v…...

手机发烫怎么解决?

在当今这个智能手机不离手的时代&#xff0c;手机发烫成了不少人头疼的问题。手机发烫不仅影响使用手感&#xff0c;长期过热还可能损害手机硬件、缩短电池寿命&#xff0c;甚至引发安全隐患。不过别担心&#xff0c;下面这些方法能帮你有效给手机 “降温”。 一、使用习惯方面…...

【Artificial Intelligence篇】AI 携手人类:共铸未来创作新纪元

引言&#xff1a; 随着科技的飞速发展&#xff0c;人工智能已逐渐渗透到各个领域&#xff0c;尤其是在创作领域&#xff0c;其与人类的合作展现出了前所未有的可能性和潜力。从艺术作品的生成到文学作品的创作&#xff0c;从复杂软件的开发到创新设计的构思&#xff0c;AI 正在…...

小米路由器开启SSH,配置阿里云ddns,开启外网访问SSH和WEB管理界面

文章目录 前言一、开启SSH二、配置阿里云ddns1.准备工作2.创建ddns脚本3.添加定时任务 三、开启外网访问SSH和WEB管理界面1、解除WEB管理页面访问限制2.手动添加防火墙端口转发规则&#xff0c;开启外网访问WEB管理和SSH 前言 例如&#xff1a;随着人工智能的不断发展&#xf…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...