Knife4j的原理及应用详解(三)

本系列文章简介:

        在当今快速发展的软件开发领域,API(Application Programming Interface,应用程序编程接口)作为不同软件应用之间通信的桥梁,其重要性日益凸显。随着微服务架构的兴起,API的数量和复杂度急剧增加,如何高效地管理和维护这些API文档成为了开发者们面临的一大挑战。传统的文档编写方式往往依赖于手工操作,不仅效率低下且容易出错,难以满足现代软件开发的需求。

        Swagger,作为一款开源的API文档生成工具,凭借其自动化生成文档、支持多种语言及框架等特点,迅速在开发者中赢得了广泛的认可。然而,Swagger的默认UI界面在美观性和用户体验方面仍有提升空间,特别是对于追求高效和良好用户体验的现代应用而言。

        正是在这样的背景下,Knife4j应运而生。作为Swagger的增强解决方案,Knife4j不仅继承了Swagger强大的文档生成能力,还通过定制化的UI界面、增强的交互功能以及更灵活的配置选项,为开发者们提供了一个更加高效、易用且美观的API文档管理工具。

        本系列文章旨在深入探讨Knife4j的原理及其应用。首先,我们将简要介绍Knife4j的基本概念、主要功能及特点,以便读者对其有一个初步的了解。随后,我们将深入分析Knife4j的工作原理,包括它是如何与Swagger集成的、如何解析Swagger注解并生成API文档的,以及它如何通过定制化的UI界面和增强的交互功能来提升用户体验。

        希望通过全面而深入的剖析,帮助大家更好地理解并掌握Knife4j的原理及其应用,从而为现代软件开发中的API文档管理提供有力的支持。

        欢迎大家订阅《Java技术栈高级攻略》专栏(PS:近期会涨价),一起学习,一起涨分!

目录

一、引言

二、Knife4j的原理

2.1 Swagger基础原理

2.1.1 Swagger注解与文档生成流程

2.1.2 OpenAPI规范介绍

2.2 Knife4j对Swagger的扩展与增强

2.2.1 UI界面的定制与优化

2.2.2 文档生成机制的增强

2.2.3 支持Swagger注解以外的扩展机制

2.3 核心技术解析

三、Knife4j的应用

四、Knife4j与其他工具的对比

五、案例分析

六、结论与展望

七、结语


一、引言

        Knife4j是一个基于Swagger构建的开源Java API文档工具,它为Java开发者提供了生成、展示和调试API文档的强大功能。Knife4j的前身是swagger-bootstrap-ui,取名Knife4j是希望它能像一把匕首一样小巧、轻量且功能强悍。Knife4j是专为Java MVC框架集成的Swagger生成Api文档的增强解决方案,旨在简化接口文档的编写和管理过程。

        本文将跟随《Knife4j的原理及应用详解(二)》的进度,继续介绍Knife4j。希望通过本系列文章的学习,您将能够更好地理解Knife4j的内部工作原理,掌握Knife4j的使用技巧,以及通过合理的设计完成最佳实践,充分发挥优化Knife4j的潜力,为系统的高效运行提供有力保障。

二、Knife4j的原理

2.1 Swagger基础原理

2.1.1 Swagger注解与文档生成流程

Swagger注解与文档生成流程是一个高效、自动化的过程,它允许开发者在编写代码的同时,通过添加特定的注解来自动生成API文档。以下是Swagger注解与文档生成的详细流程:

1. 添加Swagger依赖

首先,需要在项目的构建文件中(如Maven的pom.xml或Gradle的build.gradle)添加Swagger的依赖项。这些依赖项通常包括Swagger的核心库(如springfox-swagger2)和Swagger UI库(如springfox-swagger-ui),用于生成和展示API文档。

例如,在Maven项目中,可以添加如下依赖:

<!-- Swagger2 --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> <!-- 注意:版本号可能随时间更新,请根据实际情况选择 --> </dependency> <!-- Swagger-UI --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.9.2</version> <!-- 注意:版本号应与springfox-swagger2保持一致 --> </dependency>

2. 配置Swagger

接下来,需要创建一个配置类来配置Swagger。在这个配置类中,通常会定义一个或多个Docket实例,用于指定哪些包或类应该被Swagger扫描以生成API文档。此外,还可以在这个类中自定义API文档的元数据,如标题、描述和版本信息等。

例如:

@Configuration @EnableSwagger2 // 启用Swagger2 public class SwaggerConfig { @Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage("com.yourcompany.yourproject")) // 指定扫描的包 .paths(PathSelectors.any()) .build(); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("你的项目API文档") .description("这里是项目的详细描述") .version("1.0") .build(); } }

3. 在代码中使用Swagger注解

在完成了Swagger的依赖添加和配置之后,就可以在代码中通过添加Swagger注解来生成API文档了。Swagger提供了多种注解,用于描述API的不同方面,如接口、方法、参数和响应等。

常用的Swagger注解包括:

  • @Api:用于Controller类上,描述整个类的作用。
  • @ApiOperation:用于Controller类中的方法上,描述方法的作用。
  • @ApiParam:用于方法参数上,描述参数的作用。
  • @ApiModel:用于实体类上,描述实体类的作用。
  • @ApiModelProperty:用于实体类的属性上,描述属性的作用。

例如:

@RestController @Api(tags = "用户管理") public class UserController { @GetMapping("/users/{id}") @ApiOperation(value = "根据ID查询用户", notes = "根据用户ID查询用户信息") @ApiImplicitParam(name = "id", value = "用户ID", required = true, dataType = "Long") public User getUserById(@PathVariable Long id) { // 方法实现 } }

4. 访问Swagger UI

最后,启动项目并访问Swagger UI的URL(通常是http://localhost:<端口>/swagger-ui.html),就可以看到自动生成的API文档了。在这个页面上,可以浏览API的接口列表、查看接口的详细信息、进行接口测试等。

总结

Swagger注解与文档生成流程是一个简单而强大的工具,它可以帮助开发者在编写代码的同时自动生成API文档,极大地提高了开发效率和API文档的可用性。通过遵循上述步骤,开发者可以轻松地在自己的项目中集成和使用Swagger。

2.1.2 OpenAPI规范介绍

Swagger基础原理中的OpenAPI规范介绍,可以从以下几个方面进行阐述:

1、OpenAPI规范概述

OpenAPI规范(OpenAPI Specification,OAS),以前称为Swagger规范,是一种用于描述RESTful API的规范和工具集合。它为HTTP API定义了一个与语言无关的标准接口,使得人和计算机都可以在不使用源代码、文档或监听网络通信的情况下,具备发现和理解服务的能力。OpenAPI规范允许开发者以一种标准化的方式描述他们的API,包括API的路径、请求参数、响应参数、认证方法等,从而提高了API的可读性和可维护性。

2、OpenAPI规范的主要特点

  1. 语言无关性:OpenAPI规范是一种与编程语言无关的标准,因此它适用于各种编程语言和平台。
  2. 标准化:OpenAPI规范为RESTful API提供了一个统一的描述格式,使得不同的系统和组件之间可以更加方便地进行交互。
  3. 机器可读性:OpenAPI规范采用YAML或JSON格式编写,这使得机器可以轻松地解析和处理API描述文件。
  4. 丰富的功能:OpenAPI规范支持多种高级功能,如请求和响应的验证、参数传递方式等,为开发者提供了更多的灵活性和控制能力。

3、OpenAPI规范的应用场景

  1. API文档生成:使用OpenAPI规范可以自动生成API文档,这些文档包含了API的所有相关信息,如请求参数、响应参数、错误码等,方便开发者了解和使用API。
  2. 代码生成:基于OpenAPI规范,可以生成各种编程语言的服务器和客户端代码,从而加速API的开发和部署过程。
  3. API测试和调试:OpenAPI规范支持多种测试和调试工具,如Postman、Apifox等,这些工具可以根据OpenAPI规范定义的API描述文件进行测试和调试工作。

4、OpenAPI规范与Swagger的关系

Swagger是一套围绕OpenAPI规范构建的开源工具,它提供了多种工具来帮助开发者设计、构建、记录和使用REST API。Swagger工具包括Swagger Editor(基于浏览器的编辑器,用于编写OpenAPI规范)、Swagger UI(将OpenAPI规范呈现为交互式API文档的工具)、Swagger Codegen(将OpenAPI规范生成为服务器存根和客户端库的工具)等。通过使用Swagger工具,开发者可以更加方便地管理和使用OpenAPI规范定义的API。

5、总结

OpenAPI规范是现代软件开发中用于描述RESTful API的一种重要规范和工具集合。它提供了一种标准化的方式来描述API,使得不同的系统和组件之间可以更加方便地进行交互。同时,OpenAPI规范还支持多种高级功能和工具,为开发者提供了更多的灵活性和控制能力。通过学习和使用OpenAPI规范,开发者可以更加高效地开发和管理RESTful API。

2.2 Knife4j对Swagger的扩展与增强

2.2.1 UI界面的定制与优化

Knife4j对Swagger的扩展与增强主要体现在UI界面的定制与优化上,以下是对这一方面的详细阐述:

1、Knife4j简介

Knife4j是一个基于Swagger UI的增强版UI框架,专为Java MVC框架集成Swagger以生成API文档提供增强型解决方案。它源自swagger-bootstrap-ui,经过升级和重塑,现在更专注于微服务环境下的灵活性与高效性。Knife4j旨在提供一个轻量化、功能强大的工具,使开发者能够轻松构建和维护高质量的API文档。

2、Knife4j对Swagger UI界面的定制与优化

  1. UI界面的美化
    • 更加美观的UI设计:Knife4j在Swagger UI的基础上进行了改进和优化,提供了更加美观的界面设计,提升了用户的视觉体验。
    • 支持多语言:Knife4j支持多种常用语言,如中文、英文、日文等,可以在配置文件中设置语言属性来配置文档界面语言,方便不同地区的用户使用。
  2. 增强的交互体验
    • 实时调试功能:Knife4j内置了接口调试功能,允许开发者在文档页面上进行实时测试,直接看到接口的响应结果,大大提高了开发效率。
    • 接口排序与搜索:Knife4j提供了接口排序和搜索功能,方便开发者快速定位到需要查看或测试的接口。
    • 参数预填充:对于某些需要频繁输入的参数,Knife4j支持参数预填充功能,减少了重复输入的工作量。
  3. 高度定制化
    • 前端源码开放:Knife4j提供了Vue2.0和Vue3.0版本的前端源码,方便开发者根据项目需求进行定制和扩展。
    • 模块化设计:Knife4j采用了模块化设计,开发人员可以根据项目需求选择合适的组件进行集成和使用。
  4. 适应微服务架构
    • 前后端解耦:Knife4j的设计使得前后端可以解耦,方便在微服务架构中独立部署和使用。
    • 分布式系统支持:在分布式系统中,每个服务都可以独立部署Knife4j,实现API文档的自动化生成和管理。

3、整合与使用

要在Spring Boot项目中整合Knife4j,通常需要进行以下步骤:

  1. 添加依赖:在项目的pom.xml文件中添加Knife4j的依赖项。
  2. 配置Swagger和Knife4j:在Spring Boot的配置文件(如application.propertiesapplication.yml)中添加Swagger和Knife4j的相关配置。
  3. 编写API文档:使用Swagger注解(如@Api@ApiOperation等)编写API文档。
  4. 访问Knife4j界面:启动Spring Boot应用后,通过配置的访问路径(如http://localhost:8080/doc.html)访问Knife4j的UI界面。

4、总结

Knife4j通过对Swagger UI界面的定制与优化,提供了更加美观、易用、功能强大的API文档管理工具。它不仅美化了界面设计,还增强了交互体验,支持多语言、实时调试、接口排序与搜索等高级功能。同时,Knife4j的高度定制化特性和对微服务架构的支持,使得它成为Java开发环境下构建高质量API文档的首选工具。

2.2.2 文档生成机制的增强

Knife4j作为Swagger的一个增强工具,在文档生成机制上进行了多方面的扩展与增强。以下是Knife4j对Swagger文档生成机制的增强点:

1. 更好的UI界面与用户体验

  • 美观的界面设计:Knife4j在原生Swagger-UI的基础上进行了大量优化,提供了更美观、更直观的UI界面,使得API文档的查阅和测试体验更加友好。
  • 实时更新:支持实时更新接口文档,当代码发生变化时,文档内容会自动同步更新,确保文档与实际代码始终保持一致。
  • 响应示例折叠/展开:提供响应示例的折叠/展开功能,方便开发者查看和测试API的响应数据。

2. 强大的个性化定制能力

  • 个性化配置项:Knife4j支持接口地址、接口description属性、UI增强等个性化配置功能,满足不同团队的个性化需求。
  • 离线文档导出:提供离线文档导出功能,方便开发者在没有网络的环境下查阅API文档。
  • 全局参数设置:支持全局参数设置,减少在每个接口中重复设置参数的繁琐。

3. 丰富的扩展功能

  • 接口排序与筛选:允许用户按照接口分组、标签、路径等多种方式对API进行排序和筛选,方便快速定位所需接口。
  • 在线调试:提供在线调试功能,开发者可以直接在Knife4j界面中发送请求并查看响应结果,无需编写额外的测试代码。
  • 模型树结构展示:对于复杂的请求或响应模型,Knife4j以树形结构展示其属性,使得模型结构更加清晰易懂。

4. 安全与权限控制

  • OAuth2认证支持:Knife4j无缝集成OAuth2认证,支持多种授权类型,便于在安全环境下调试API。
  • 生产环境屏蔽:提供生产环境屏蔽功能,可以在生产环境中关闭Swagger/Knife4j的访问,确保API文档的安全性。

5. 易于集成与配置

  • 快速集成:Knife4j提供了starter包,使得在Spring Boot项目中集成Knife4j变得非常简单快捷。
  • 灵活配置:通过配置文件或注解的方式,可以轻松配置Knife4j的各项参数和功能。

6. 持续的更新与维护

  • 活跃的社区支持:Knife4j由国人程序员萧明于2017年开源,至今仍在持续更新和维护中,拥有活跃的社区支持。
  • 广泛的兼容性:Knife4j与Swagger保持高度兼容,同时也在不断扩展和优化自身的功能。

综上所述,Knife4j在文档生成机制上通过提供更好的UI界面、强大的个性化定制能力、丰富的扩展功能、安全与权限控制、易于集成与配置以及持续的更新与维护等方面的增强,极大地提升了Swagger文档生成机制的实用性和易用性。

2.2.3 支持Swagger注解以外的扩展机制

Knife4j作为Swagger的增强工具,不仅保留了Swagger的核心功能,如通过注解自动生成API文档,还提供了多种扩展机制来进一步满足开发者的需求。以下是Knife4j支持Swagger注解以外的扩展机制的几个方面:

1. 丰富的UI界面定制

  • 界面美化:Knife4j对Swagger UI进行了深度定制和优化,提供了更加美观、易用的界面,增强了用户体验。
  • 布局调整:开发者可以根据项目需求,调整文档页面的布局、颜色、字体等,以符合项目的整体风格。

2. 多种注解配置方式

  • 扩展注解:除了支持Swagger的原生注解外,Knife4j还提供了额外的注解或配置方式,使开发者能够更加灵活地定义API文档。
  • 分组管理:通过配置类,开发者可以对API进行分组管理,使得文档结构更加清晰。

3. 插件扩展机制

  • 内置插件:Knife4j内置了多种插件,如权限控制、接口排序、搜索功能等,这些插件可以直接使用,无需额外开发。
  • 自定义插件:Knife4j提供了插件开发接口,开发者可以根据自己的需求,编写自定义的插件来扩展Knife4j的功能。

4. 动态配置与属性调整

  • 配置文件:Knife4j支持通过配置文件来调整API文档的属性,如文档标题、描述、版本等,无需修改代码即可实现动态更新。
  • 动态调整:在部分场景下,开发者可能需要在运行时动态调整API文档的某些属性。Knife4j提供了相应的机制,允许开发者通过编程方式来实现这一需求。

5. 安全性与权限控制

  • OAuth2支持:Knife4j无缝集成OAuth2认证,支持多种授权类型,可以在安全环境下调试API。
  • 权限管理:开发者可以通过配置或编写自定义插件来实现对API文档的权限管理,确保只有授权用户才能访问敏感信息。

6. 社区与生态支持

  • 活跃社区:Knife4j拥有活跃的社区支持,开发者可以在社区中交流经验、提出问题并获得帮助。
  • 生态扩展:随着Knife4j的不断发展,越来越多的开发者和团队开始使用它,并为其贡献插件和扩展功能,进一步丰富了Knife4j的生态系统。

综上所述,Knife4j通过丰富的UI界面定制、多种注解配置方式、插件扩展机制、动态配置与属性调整、安全性与权限控制以及社区与生态支持等方面的扩展机制,为开发者提供了更加灵活、强大的API文档生成和管理工具。

2.3 核心技术解析

       详见《Knife4j的原理及应用详解(四)

三、Knife4j的应用

       详见《Knife4j的原理及应用详解(五)

四、Knife4j与其他工具的对比

       详见《Knife4j的原理及应用详解(六)

五、案例分析

        详见《Knife4j的原理及应用详解(七)

六、结论与展望

        详见《Knife4j的原理及应用详解(七)

七、结语

        文章至此,已接近尾声!希望此文能够对大家有所启发和帮助。同时,感谢大家的耐心阅读和对本文档的信任。在未来的技术学习和工作中,期待与各位大佬共同进步,共同探索新的技术前沿。最后,再次感谢各位的支持和关注。您的支持是作者创作的最大动力,如果您觉得这篇文章对您有所帮助,请分享给身边的朋友和同事!

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

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

相关文章

价值投资者什么时候卖出股票?

经常有人说&#xff0c;会买的只是徒弟&#xff0c;会卖的才是师傅。 在阅读《战胜华尔街》的过程中&#xff0c;也多次感受到林奇先生的卖出逻辑&#xff0c;当股票的价格充分体现了公司的价值的时候&#xff0c;就是该卖出股票的时候。但这只是理论上的&#xff0c;从林奇先…

数据中台指标管理系统

您所描述的是一个数据中台指标管理系统&#xff0c;它基于Spring Cloud技术栈构建。数据中台是企业数据管理和应用的中心平台&#xff0c;它整合了企业内外部的数据资源&#xff0c;提供数据服务和数据管理能力。以下是您提到的各个模块的简要概述&#xff1a; 1. **首页**&am…

JSP WEB开发(四) MVC模式

MVC模式介绍 MVC&#xff08;Model-View-Controller&#xff09;是一种软件设计模式&#xff0c;最早出现在Smalltalk语言中&#xff0c;后来在Java中得到广泛应用&#xff0c;并被Sun公司推荐为Java EE平台的设计模式。它把应用程序分成了三个核心模块&#xff1a;模型层、视…

2024年有多少程序员转行了?

疫情后大环境下行&#xff0c;各行各业的就业情况都是一言难尽。互联网行业更是极不稳定&#xff0c;频频爆出裁员的消息。大家都说2024年程序员的就业很难&#xff0c;都很焦虑。 在许多人眼里&#xff0c;程序员可能是一群背着电脑、进入高大上写字楼的职业&#xff0c;他们…

SVN 80道面试题及参考答案(2万字长文)

目录 解释SVN的全称和主要功能。 SVN与CVS相比,有哪些主要改进? 描述SVN的工作流程。 什么是版本库(repository)?它存储了什么? 解释工作副本(working copy)的概念。 SVN如何处理文件的版本控制? SVN中的“commit”是什么意思? 解释“update”操作的作用。 如何…

Datawhale AI 夏令营 机器学习挑战赛

一、赛事背景 在当今科技日新月异的时代&#xff0c;人工智能&#xff08;AI&#xff09;技术正以前所未有的深度和广度渗透到科研领域&#xff0c;特别是在化学及药物研发中展现出了巨大潜力。精准预测分子性质有助于高效筛选出具有优异性能的候选药物。以PROTACs为例&#x…

Hi3861 OpenHarmony嵌入式应用入门--MQTT

MQTT 是机器对机器(M2M)/物联网(IoT)连接协议。它被设计为一个极其轻量级的发布/订阅消息传输 协议。对于需要较小代码占用空间和/或网络带宽非常宝贵的远程连接非常有用&#xff0c;是专为受限设备和低带宽、 高延迟或不可靠的网络而设计。这些原则也使该协议成为新兴的“机器…

AutoMQ 生态集成 Kafdrop-ui

Kafdrop [1] 是一个为 Kafka 设计的简洁、直观且功能强大的Web UI 工具。它允许开发者和管理员轻松地查看和管理 Kafka 集群的关键元数据&#xff0c;包括主题、分区、消费者组以及他们的偏移量等。通过提供一个用户友好的界面&#xff0c;Kafdrop 大大简化了 Kafka 集群的监控…

量产工具一一UI系统(四)

目录 前言 一、按钮数据结构抽象 1.ui.h 二、按键处理 1.button.c 2.disp_manager.c 3.disp_manager.h 三、单元测试 1.ui_test.c 2.上机测试 前言 前面我们实现了显示系统框架&#xff0c;输入系统框架和文字系统框架&#xff0c;链接&#xff1a; 量产工具一一显…

Redis 底层数据结构

• 简单动态字符串 • 链表 • 字典 • 跳跃表 • 整数集合 • 压缩列表 • 对象 SDS 增加了len和free属性&#xff0c;记录buf数组的使用空间和剩余空间。好处:strken函数直接读取len值&#xff0c;时间复杂度是O(1)&#xff1b;预分配buf长度&#xf…

集控中心操作台材质选择如何选择

作为集控中心的核心组成部分&#xff0c;操作台不仅承载着各种设备和工具&#xff0c;更是工作人员进行监控、操作和管理的重要平台。因此&#xff0c;选择适合的集控中心操作台材质显得尤为重要。 一、材质选择的考量因素 在选择集控中心操作台材质时&#xff0c;我们需要综合…

SpringCloud跨微服务的远程调用,如何发起网络请求,RestTemplate

在我们的业务流程之中不一定都会是自己模块查询自己模块的信息&#xff0c;有些时候就需要去结合其他模块的信息来进行一些查询完成相应的业务流程&#xff0c;但是在SpringCloud每个模块都相对独立&#xff0c;数据库也有数据隔离。所以当我们需要其他微服务模块的信息的时候&…

什么是SpringCloud Stream?

Spring Cloud Stream 是一个构建消息驱动微服务的框架&#xff0c;其基于Spring Boot来开发&#xff0c;并使用Spring Integration来连接消息代理中间件。该项目的目标是提供一套用于开发消息驱动应用的通用模型&#xff0c;并定义了用于发送和接收消息的绑定器&#xff08;Bin…

前端javascript中的排序算法之选择排序

选择排序&#xff08;Selection Sort&#xff09;基本思想&#xff1a; 是一种原址排序法&#xff1b; 将数组分为两个区间&#xff1a;左侧为已排序区间&#xff0c;右侧为未排序区间。每趟从未排序区间中选择一个值最小的元素&#xff0c;放到已排序区间的末尾&#xff0c;从…

玩转springboot之为什么springboot可以直接执行

为什么springboot可以直接执行 先看一下springboot打包生成的MANIFEST.MF内容是什么 Manifest-Version: 1.0Implementation-Title: exam-adminImplementation-Version: 1.0-SNAPSHOTStart-Class: com.zhanghe.exam.ApplicationSpring-Boot-Classes: BOOT-INF/classes/Spring-Bo…

小米采取措施禁止国行版设备安装国际版系统 刷机后将报错无法进入系统

据知名官改版系统 Xiaomi.EU 测试者 Kacper Skrzypek 发布的消息&#xff0c;小米目前已经在开机引导中新增区域检测机制&#xff0c;该机制将识别硬件所属的市场版本&#xff0c;例如中国大陆市场销售的小米即将在安装国际版系统后将无法正常启动。 测试显示该检测机制是在开…

1.DDR3 SO-DIMM 内存条硬件总结

最近在使用fpga读写DDR3&#xff0c;板子上的DDR3有两种形式与fpga相连&#xff0c;一种是直接用ddr3内存颗粒&#xff0c;另一种是通过内存条的形式与fpga相连。这里我们正好记录下和ddr3相关的知识&#xff0c;先从DDR3 SO-DIMM 内存条开始。 1.先看内存条的版本 从JEDEC下载…

四步带你实现【Open3d】--边缘检测

Open3D边缘检测技术从3D数据中精准识别并提取边界&#xff0c;对于场景解析、物体轮廓提取等任务至关重要。Open3D提供多种算法&#xff0c;帮助用户高效实现边缘检测&#xff0c;促进3D数据的深度分析和应用。 一、安装 pip install open3d # 即可 二、使用 首先&#…

《算法笔记》总结No.5——递归

一.分而治之 将原问题划分为若干个规模较小而结构与原问题相同或相似的子问题&#xff0c;然后分别解决这些子问题&#xff0c;最后合并子问题的解&#xff0c;即可得到原问题的解&#xff0c;步骤抽象如下&#xff1a; 分解&#xff1a;将原问题分解为若干子问题解决&#x…

用VLM训练实时计算机视觉模型

经过数十亿个参数训练的 AI 模型非常强大&#xff0c;但并不总是适合实时使用。但是&#xff0c;它们可以通过自动监督快速专用模型的标注来减少人力投入。 ‍ 如果你曾经构建过计算机视觉模型&#xff0c;就就会知道监督需要大量工作——人类花时间&#xff08;数小时或数天&a…