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 API
      version: 1.0.0
    paths:
      /api/books:
        get:
          summary: 获取书籍列表
          parameters:
            - in: query
              name: page
              schema:
                type: integer
                default: 1
              description: 当前页码
            - in: query
              name: pageSize
              schema:
                type: integer
                default: 10
              description: 每页显示的书籍数量
          responses:
            '200':
              description: 成功响应
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      total:
                        type: integer
                      books:
                        type: array
                        items:
                          type: object
                          properties:
                            id:
                              type: integer
                            title:
                              type: string
                            author:
                              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 {

    @Override
    public 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)首选的注册中心解决方案之一。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

去除el-tabs 下面的灰色横线,并修改每一项的左右间距,和字体颜色

HTML <el-tabs v-model"activeName" class"demo-tabs" tab-click"handleClick"><el-tab-pane label"全部" :name"null"></el-tab-pane><el-tab-pane label"问答陪练" name"general-t…

笔上云世界微服务版

目录 一、项目背景 二、项目功能 一功能介绍 三、环境准备 • 需要开发的端口 • Mysql 导入数据库 ​编辑 • Redis ​编辑 • RabbitMQ ​编辑 在创建blog虚拟主机(方法如下) • Nacos • Nginx 四、前端部署 五、后端部署 六、测试计划操作 一功能测试 二…

厦门大学联合网易提出StoryWeaver,可根据统一模型内给定的角色实现高质量的故事可视化

厦门大学联合网易提出StoryWeaver&#xff0c;可以根据统一模型内给定的角色实现高质量的故事可视化。可根据故事文本生成与之匹配的图像&#xff0c;并且确保每个角色在不同的场景中保持一致。本文的方法主要包括以下几个步骤&#xff1a; 角色图构建&#xff1a;设计一个角色…

vscode 多项目冲突:进行 vscode 工作区配置

问题&#xff1a;多个项目&#xff0c;每次打开会因为配置问题/包版本冲突&#xff0c;花费过长时间。 解决&#xff1a;可以通过启用工作区&#xff0c;使得各个项目的开发环境隔离。 vscode官网 对此有两种方法&#xff1a;方法一&#xff1a;启用工作区&#xff08;workspa…

Unity3D仿星露谷物语开发14之Custom Property Attribute

1、目标 创建自定义属性特性&#xff0c;类似于[SerializeField]的属性标签。 当用该自定义属性特性标记变量时&#xff0c;可以在Inspector面板中看到相应的效果。 2、Property类 &#xff08;1&#xff09;PropertyAttribute类 propertyAttribute是Unity中用于派生自定义…

赛博周刊·2024年度工具精选(图片资源类)

1、EmojiSpark emoji表情包查找工具。 2、fluentui-emoji 微软开源的Fluent Emoji表情包。 3、开源Emoji库 一个开源的emoji库&#xff0c;目前拥有4000个emoji表情。 4、中国表情包大合集博物馆 一个专门收集中国表情包的项目&#xff0c;已收录5712张表情包&#xff0c;并…

RK3588,基于 Npu 实现 yolov11 Segment 推理

Ultralytics YOLO11是一款尖端的、最先进的模型,它在之前YOLO版本成功的基础上进行了构建,并引入了新功能和改进,以进一步提升性能和灵活性。YOLO11设计快速、准确且易于使用,使其成为各种物体检测和跟踪、实例分割、图像分类以及姿态估计任务的绝佳选择。 https://github.…

MySQL启动报错:发生系统错误 5。拒绝访问。

参考:https://blog.csdn.net/qq_40762011/article/details/105768798/ 1、错误样式 错误样式&#xff0c;如下图所示&#xff1a; 2、导致原因 未使用管理员角色进行此操作&#xff1b; 3、解决办法 3.1、临时办法 不需要更改任何东西&#xff0c;只需要在打开CMD命令提示符时…

数势科技:解锁数据分析 Agent 的智能密码(14/30)

一、数势科技引领数据分析变革 在当今数字化浪潮中&#xff0c;数据已然成为企业的核心资产&#xff0c;而数据分析则是挖掘这一资产价值的关键钥匙。数势科技&#xff0c;作为数据智能领域的领军者&#xff0c;以其前沿的技术与创新的产品&#xff0c;为企业开启了高效数据分析…

网络编程原理:回显服务器与客户端通信交互功能

文章目录 路由器及网络概念网络通信基础TCP/IP 五层协议封装和分用封装分用 网络编程&#xff08;网络协议&#xff09;UDP类 API使用实现回显通信程序回显服务器(UDP代码)回显客户端(UDP代码) TCP API使用回显服务器(TCP代码)回显客户端(TCP代码) 路由器及网络概念 网络发展是…

云手机+Facebook:让科技与娱乐完美结合

移动互联网时代&#xff0c;Facebook作为全球最大的社交媒体平台之一&#xff0c;早已成为企业、品牌和组织竞相角逐的营销阵地。而云手机的出现&#xff0c;则为Facebook营销注入了新的活力&#xff0c;其独特的优势让营销活动更加高效、精准且灵活。本文将深入探讨云手机在Fa…

git使用指南-实践-搭建git私服

一.创建git私服的核心基础 所谓的git私服&#xff0c;其实就是在一个服务器上创建一个个的git仓库&#xff0c;并且这些仓库允许其在一个网络上被其他用户访问。 创建一个最素的git私服&#xff1a;随便找一台linux服务器&#xff0c;这里假设其ip为192.168.0.6&#xff0c;使…

KAFKA入门:原理架构解析

文章目录 一、认识kafka二、架构介绍2.1 工作流程2.2 Kafka可靠性保证2.3 Kafka存储 一、认识kafka Kafka到底是个啥&#xff1f;用来干嘛的&#xff1f; 官方定义如下&#xff1a; Kafka is used for building real-time data pipelines and streaming apps. It is horizont…

深度学习——损失函数汇总

1. 连续值损失函数 总结:主要使用胡贝儿损失函数,应用于连续数值的预测之间的误差损失,参考地址 import torch import torch.nn as nna = torch.tensor([[1, 2], [3, 4]], dtype=torch.float) b = torch.tensor([[3, 5], [8, 6]], dtype=torch.float)loss_fn1 = torch.nn.M…

2025.01.01(IO模型分类,超时检测,抓包分析,机械臂客户端)

作业&#xff1a;基于机械臂服务器写出客户端代码并执行 #include <myhead.h> #define IP "192.168.124.62" #define PORT 8888int main(int argc, const char *argv[]) {//1.创建套接字int cfd socket(AF_INET,SOCK_STREAM,0);if(cfd-1){perror("socke…

Pandas-数据透视表

文章目录 一. Pandas透视表概述1. pivot_table函数介绍 二. 栗子-零售会员数据分析1. 案例业务介绍2. 会员存量、增量分析① group by② 透视表③ 可视化 一. Pandas透视表概述 数据透视表&#xff08;Pivot Table&#xff09;是一种交互式的表&#xff0c;可以进行某些计算&am…

STM32-笔记26-WWDG窗口看门狗

一、简介 窗口看门狗用于监测单片机程序运行时效是否精准&#xff0c;主要检测软件异常&#xff0c;一般用于需要精准检测程序运行时间的场合。 窗口看门狗的本质是一个能产生系统复位信号和提前唤醒中断的6位计数器&#xff08;有的地方说7位。其实都无所谓&#xff0…

【超好用远程工具】跨平台SSH工具WindTerm免费开源

WindTerm WindTerm概述免费开源、免费开源、免费开源下载、安装屏幕截图主窗口 &#xff08;zsh&#xff09;&#xff1a;拆分视图&#xff1a;DigeWhite 主题&#xff1a; 基本设置连接到服务器SSH 连接Telnet 连接串口连接SFTP 连接使用多标签页 高级功能脚本和自动化会话管理…

开源存储详解-分布式存储与ceph

ceph体系结构 rados&#xff1a;reliable, autonomous, distributed object storage, rados rados采用c开发 对象存储 ceph严格意义讲只提供对象存储能力&#xff0c;ceph的块存储能力实际是基于对象存储库librados的rbd 对象存储特点 对象存储采用put/get/delete&#xf…

Postman[2] 入门——界面介绍

可参考官方 文档 Postman 导航 | Postman 官方帮助文档中文版Postman 拥有各种工具、视图和控件&#xff0c;帮助你管理 API 项目。本指南是对 Postman 主要界面区域的高级概述&#xff1a;https://postman.xiniushu.com/docs/getting-started/navigating-postman 1. Header&a…