项目/代码规范与Apifox介绍使用

目录

目录

一、项目规范:

(一)项目结构:

(二)传送的数据对象体

二、代码规范:

(一)数据库命名规范:

(二)注释规范:

(三)命名规范:

(四)前后端规范:

(五)其他规范:

三、Apifox使用:

(一)下载与安装:

(二)新建项目与邀请你的队友:

(三)接口文档的书写规范

四、Debug功能(后端必须要会)

五、测试类

六、注意事项:

(一个人是打不了江山的!!!)


一、项目规范:

(一)项目结构:

其中具体的:

(1)Entity层:实体层,就是存放具体的对象实体,与数据库中的对象相对应。

(2)DAO层:(可以细分两层(dao的接口层与dao的实现层))就是与数据库进行交互的层,涉及到一些数据库的增删改查操作。

(3)Service层(可以细分两层(service的接口层与service的实现层)):主要负责业务模块的逻辑应用设计。

(4)Controller层:Controller层负责具体的业务模块流程的控制,controller层负责前后端交互,接受前端请求,调用service层,接收service层返回的数据,最后返回具体的页面和数据到客户端。

(5)Util层:工具层,放置常用的工具类,比如可以把一些通用的方法写成一个util的函数,然后可以简化整体的代码。

(6)Exception层:可以写一下统一的返回异常层。

(7)Filter层:过滤层,比如统一过滤一下身份验证,如果没有过滤通过,则只是游客模式。

(二)传送的数据对象体

DTO就是前端发送请求传来的数据结构体。

VO就是后端针对前端发送的请求进行返回的响应。

PO就是对象实体和数据库对象这个表的实际对应关系。

BO就是在业务处理过程中的对象实体。

二、代码规范:

要英文命名,不要汉语拼音。

要通俗易懂,不要花里胡哨。

要驼峰命名,不要平平范范。

要间隔换行,不要大段书写。

要注释注解,不要个人主义。

Java语言编码规范 - Java语言编码规范(中文版) - 在线文档 - JAVA 编程资料牛鼻站 (javanb.com)icon-default.png?t=N7T8http://doc.javanb.com/code-conventions-for-the-java-programming-language-zh/index.html#312

不要用关键字、保留字等在java本身有特殊含义的 命名!!!

(一)数据库命名规范:

(1)表名是唯一的,不能多个表命名使用同一个名称。

(2)表名采用小写字母和下划线的组合形式,尽量避免使用大写字母或特殊字符,含义清晰,使用“user_info”类似这种,或者“tbl_user”,"tbl_user_info"这种。 

(3)不要与关键字冲突,禁用保留字,如 like、desc、range、match、delayed 等,请参考 MySQL 官方保留字。 

(4)数据库字段名:采用26个英文字母(区分大小写)加上下划线'_'组成,例如“user_id","user_name","user_password","user_register_time","user_login_time".

(5)主外键规范:

主键索引名为 pk_字段名;唯一索引名为 uk_字段名;普通索引名则为 idx_字段名。
说明: pk_即 primary key;uk_即 unique key;idx_即 index 的简称。

主键:pk_+表名
例如:pk_main
外键:fk_+从表名+_+主表名
例如:fk_sub_main

(6)小数类型为 decimal,禁止使用 float 和 double。
(7)表必备三字段:id,create_time,update_time。

(二)注释规范:

(1)类注释:

   类注释(Class)主要用来声明该类用来做什么,以及创建者、创建日期版本、包名等一些信息:

/**
 * @version: V1.0
 * @author: fendo
 * @className: user
 * @packageName: user
 * @description: 这是用户类
 * @data: 2024-07-01 12:20
 **/

(2)方法注释(Constructor):

      方法内部单行注释,在被注释语句上方另起一行,使用 // 注释。方法内部多行注释使用 /* */
注释,注意与代码对齐。所有的抽象方法(包括接口中的方法)必须要用 Javadoc 注释、除了返回值、参数异常说明 外,还必须指出该方法做什么事情,实现什么功能。 方法注释(Constructor)还可以用来声明该类的参数、返回等信息:

/**
* @author:  fendo
* @methodsName: addUser
* @description: 添加一个用户
* @param:  xxxx
* @return: String
* @throws: 
*/

(3)代码块注释:解释你某一部分代码的用途

/**
 * 实例化一个用户
 * xxxxxxx
 */
User user=new User();

(4)单句注释:注释你单独的代码

User user=new User(); //实例化一个用户

(三)命名规范:

命名要让别人能看懂,驼峰命名,区分大小写。

(1)类名使用 UpperCamelCase 风格:
例如:UserController,FileController,BookService
(2)方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格。
例如:getUserName(),userLogin(),getMessage();
(3)常量命名应该全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。
例如:MAX_STOCK_COUNT / CACHE_EXPIRED_TIME
(4)抽象类命名使用 Abstract 或 Base 开头;异常类命名使用 Exception 结尾,测试类命名以它要 测试的类的名称开始,以 Test 结尾。
(5)包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用 单数
式,但是类名如果有复数含义,类名可以使用复数形式。
(6)Service / DAO 层方法命名规约:
1)获取单个对象的方法用 get 做前缀。
2)获取多个对象的方法用 list 做前缀,复数结尾,如:listObjects
3)获取统计值的方法用 count 做前缀。
4)插入的方法用 save / insert 做前缀。
5)删除的方法用 remove / delete 做前缀。
6)修改的方法用 update 做前缀。
(7)领域模型命名规约:
1)数据对象:xxxDO,xxx 即为数据表名。
2)数据传输对象:xxxDTO,xxx 为业务领域相关的名称。
3)展示对象:xxxVO,xxx 一般为网页名称。
(8)所有整型包装类对象之间 值的比较 ,全部使用 equals 方法比较。
说明: 对于 Integer var = ? 在 -128 至 127 之间的赋值,Integer 对象是在 IntegerCache.cache 产生,会复用已有对象,这个区间内的 Integer 值可以直接使用 == 进行判断,但是这个区间之外的所有数据,都会在堆上产生,并不会复
用已有对象,这是一个大坑,推荐使用 equals 方法进行判断。
(9)浮点数之间的等值判断,基本数据类型不能使用 == 进行比较,包装数据类型不能使用 equals 进行判断。 BigDecimal 的等值比较应使用 compareTo() 方法,而不是 equals() 方法
正例:
(1)指定一个误差范围,两个浮点数的差值在此范围之内,则认为是相等的。
float a = 1.0F - 0.9F ;
float b = 0.9F - 0.8F ;
float diff = 1e-6F ;
if ( Math . abs ( a - b ) < diff ) {
System . out . println ( "true" );
}
(2)使用 BigDecimal 来定义值,再进行浮点数的运算操作。
BigDecimal a = new BigDecimal ( "1.0" );
BigDecimal b = new BigDecimal ( "0.9" );
BigDecimal c = new BigDecimal ( "0.8" );
BigDecimal x = a . subtract ( b );
BigDecimal y = b . subtract ( c );
if ( x . compareTo ( y ) == 0) {
System . out . println ( "true" );
}
标识符类型命名规则例子
包(Packages)一个唯一包名的前缀总是全部小写的ASCII字母并且是一个顶级域名,通常是com,edu,gov,mil,net,org,或1981年ISO 3166标准所指定的标识国家的英文双字符代码。包名的后续部分根据不同机构各自内部的命名规范而不尽相同。这类命名规范可能以特定目录名的组成来区分部门(department),项目(project),机器(machine),或注册名(login names)。com.sun.eng
com.apple.quicktime.v2
edu.cmu.cs.bovik.cheese
类(Classes)命名规则:类名是个一名词,采用大小写混合的方式,每个单词的首字母大写。尽量使你的类名简洁而富于描述。使用完整单词,避免缩写词(除非该缩写词被更广泛使用,像URL,HTML)class Raster;
class ImageSprite;
接口(Interfaces)命名规则:大小写规则与类名相似interface RasterDelegate;
interface Storing;
方法(Methods)方法名是一个动词,采用大小写混合的方式,第一个单词的首字母小写,其后单词的首字母大写。驼峰命名run();
runFast();
getBackground();
变量(Variables)除了变量名外,所有实例,包括类,类常量,均采用大小写混合的方式,第一个单词的首字母小写,其后单词的首字母大写。变量名不应以下划线或美元符号开头,尽管这在语法上是允许的。
变量名应简短且富于描述。变量名的选用应该易于记忆,即,能够指出其用途。

List <User> userList;

String userName;

常量(Constants)类常量和ANSI常量的声明,应该全部大写,单词间用下划线隔开。(尽量避免ANSI常量,容易引起错误)static final int MIN_WIDTH = 4;
static final int MAX_WIDTH = 999;
static final int GET_THE_CPU = 1;

(四)前后端规范:

(1)请求方法:对具体操作的定义,常见的请求方法如下:
a)GET:从服务器取出资源。           (可以看作select操作)
b)POST:在服务器新建一个资源。 (可以看作insert操作)
c)PUT:在服务器更新资源。           (可以看作update操作)
d)DELETE:从服务器删除资源。    (可以看作delete操作)
(2)请求的返回信息:
  • code:http的status code
    • 如果有自己定义的额外的错误,那么也可以考虑用自己定义的错误码
  • message:对应的文字描述信息
    • 如果是出错,则显示具体的错误信息
    • 否则操作成功,一般简化处理都是返回OK
  • data
    • 对应数据的json字符串
      • 如果是数组,则对应最外层是[]list
      • 如果是对象,则对应最外层是{}dict
{"code": 200,"message": "new user has created","data": {"id": "user-4d51faba-97ff-4adf-b256-40d7c9c68103","firstName": "crifan","lastName": "Li","password": "654321","phone": "13511112222","createdAt": "2016-10-24T20:39:46","updatedAt": "2016-10-24T20:39:46"......}
}

(3)响应的状态码

出错问题:

  • 1xx(信息性状态码):表示接收的请求正在处理。
  • 2xx(成功状态码):表示请求正常处理完毕。  200就是请求返回成功。
  • 3xx(重定向状态码):需要后续操作才能完成这一请求。
  • 4xx(客户端错误状态码):表示请求包含语法错误或无法完成。 400 404 401 403 都是前端发送请求时候出的错误,前端先要查看问题,也有可能是后端写的出了错误。
  • 5xx(服务器错误状态码):服务器在处理请求的过程中发生了错误。 后端问题,有可能抛出异常,服务器错误等等。

2XX 成功


200 ok(请求成功)
204 no content (请求成功,但是没有结果返回)
206 partial content (客户端请求一部分资源,服务端成功响应,返回一范围资源)


3XX 重定向


301 move permanently (永久性重定向)
302 found (临时性重定向)
303 see other (示由于请求对应的资源存在着另一个 URI,应使用 GET
方法定向获取请求的资源)
304 not modified (表示在客户端采用带条件的访问某资源时,服务端找到了资源,但是这个请求的条件不符合。跟重定向无关)
307 temporary redirect (跟302一个意思)


4XX 客户端错误


400 bad request (请求报文存在语法错误)
401 unauthorized (需要认证(第一次返回)或者认证失败(第二次返回))
403 forbidden (请求被服务器拒绝了)
404 not found (服务器上无法找到请求的资源)


5XX 服务器错误


500 internal server error (服务端执行请求时发生了错误)
503 service unavailable (服务器正在超负载或者停机维护,无法处理请求)

(五)其他规范:

(1)HTTP 请求通过 body 传递内容时,必须控制长度,超出最大长度后,后端解析会出错。
说明: nginx 默认限制是 1MB,tomcat 默认限制为 2MB,当确实有业务需要传较大内容时,可以调大服务器端的限制。
(2) 不要在 finally 块中使用 return
说明: try 块中的 return 语句执行成功后,并不马上返回,而是继续执行 finally 块中的语句,如果此处存在 return 语句, 则会在此直接返回,无情丢弃掉 try 块中的返回点。
(3)事务场景中 抛出异常被 catch 后 如果需要回滚 一定要注意手动回滚事务。
(4)可以使用日志进行记录信息, 使用日志框架 (SLF4J、 JCL—Jakarta Commons Logging) 中的 API.

三、Apifox使用:

(一)下载与安装:

链接:点击链接,直接下载apifox(下载最新版就行)。Apifox - API 文档、调试、Mock、测试一体化协作平台。拥有接口文档管理、接口调试、Mock、自动化测试等功能,接口开发、测试、联调效率,提升 10 倍。最好用的接口文档管理工具,接口自动化测试工具。icon-default.png?t=N7T8https://apifox.com/

(二)新建项目与邀请你的队友:

1.新建你的团队与新建项目:

邀请你的队友

2.新建接口与新建数据模型:

(1)确定好是什么请求(POST,GET,PUT,DELETE):

(2)测试环境一定统一好,不同的环境url不一样:

(3)请求参数配置好:

有什么参数配置什么参数,给出参数示例,中文名,参数说明要有。

(4)响应要配置好:

比如不同的状态下返回什么样子的信息要规定好,成功示例,异常示例要有(方便前端)。

{"code": 200,"message": "登入成功","data": {"user_id": 27,"user_name": "孟霞","user_password": "123456","user_age": "15","user_photo": "http://dummyimage.com/400x400","user_last_time": "1996-12-11 09:03:49","user_indentity": "messager","user_birthday": "2024-02-23"}
}

(5)可以创建数据模型:

可以创建几个数据模型,在返回响应字段的适合很方便,也方便前端查看你的数据域东西。

(三)接口文档的书写规范

apifox的书写规范、与具体细节。

Apifox 快速入门 | Apifox 帮助文档icon-default.png?t=N7T8https://apifox.com/help/

(1)在 API 接口文档的开头,应该有一部分介绍。这部分可以包括以下内容:

  • API 接口的名称和版本号
  • API 接口的功能和用途
  • API 接口的设计目的和原则
  • API 接口的适用范围和限制

这部分的目的是为了让读者了解该 API 接口的基本情况和背景信息。

(2)接口列表

接着,在 API 接口文档中,我们需要列出所有的接口。每个接口应该包含以下信息:

  • 接口名称和描述
  • 请求方法(GET、POST、PUT、DELETE 等)
  • 请求路径(URL)
  • 请求参数(包括 Query 参数和 Body 参数)
  • 请求示例(可以包含请求头和请求体的完整示例)
  • 响应状态码和描述
  • 响应参数(包括 Header 参数和 Body 参数)
  • 响应示例(可以包含响应头和响应体的完整示例)

这部分的目的是为了让读者能够快速了解每个接口的基本信息,并且能够根据文档中的示例来正确地使用接口。

(3) 请求参数和响应参数说明

在接口列表之后,我们需要详细说明每个接口的请求参数和响应参数。这部分应该包括以下信息:

  • 参数名称和描述
  • 参数类型和格式
  • 是否必填和默认值
  • 参数示例

对于参数类型和格式,可以使用标准的数据类型和格式,也可以根据具体情况定义自己的数据类型和格式。对于是否必填和默认值,需要根据实际情况来确定。

(4) 错误码说明

在使用 API 接口时,有时候会发生错误,此时需要返回一个错误码来说明错误的类型和原因。因此,在 API 接口文档中,我们需要详细说明所有可能的错误码。这部分应该包括以下信息:

  • 错误码和描述
  • 错误类型和原因
  • 接口返回的错误码示例

这部分的目的是为了让读者了解所有可能的错误类型和原因,并且能够根据文档中的示例来正确地处理错误。

四、Debug功能(后端必须要会)

2分钟教会你如何Java中DeBug【IDEA中Java】_java工程中没有案例如何debug-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/qq_43436117/article/details/113859737

五、测试类

(1)具体的操作:

定义一个测试类

建议:

测试类名:被测试的类名Test CalculatorTest
包名:xx.xx.xx.test cn.itcast.test
定义测试方法:可以独立运行

建议:

方法名:test测试的方法名 testAdd()
返回值:void
参数列表:空参
给方法加 @Test

导入Junit依赖环境

判定结果:

红色:失败
绿色:成功
我们一般使用Assert类下的静态方法assertEquals(expected, actual)去处理我们的期望结果和输出结果

Assert.assertEquals(3, result);

两个参数分别是:期望值 程序结果值

为什么要使用Assert.assertEquals(expected, actual)去处理测试结果呢?

因为我们规定红色代表失败,绿色代表正确。当我们使用一个测试方法去测试一个计算机的加法方法时,最后只是输出这个结果(假如没有异常的发生)。如果我们输入1和3,我们期望得到结果4,但是我们输出的是2,我们期望得到的是4,这个时候得到的结果不符合我们的预期,但是运行结果仍然是绿色的(代表正确),是不是就不太正确,这个时候我们可以在最后使用Assert的assertEquals方法比较预期值和程序输出的结果值,如果相等,就会使绿色的,不相等就是红色的。这个时候是不是就符合我们对绿色和红色的定义了。

package cn.itcast.test;import cn.itcast.junit.Calculator;
import org.junit.Assert;
import org.junit.Test;public class CalculatorTest {/*** 测试add方法*/@Testpublic void testAdd(){Calculator  c = new Calculator();int a = 1, b = 2;int result = c.add(1, 2);Assert.assertEquals(3, result);}/*** 测试sub方法*/@Testpublic void testSub(){Calculator  c = new Calculator();int a = 1, b = 2;int result = c.sub(1, 2);Assert.assertEquals(-1, 2);}
}

@Before
在一个测试方法之前加上@Before它就成为了初始化方法,在所有测试方法执行之前都会自动先执行该方法,一般用于资源的申请

@After
在一个测试方法之前加上@After它就成为了释放资源方法,在所有测试方法执行之后都会自动执行该方法。

被@Before修饰的方法会在测试方法执行之前先被执行

被@After修饰的方法会在测试方法执行之后被执行

被@Before或被@After修饰的方法无论测试方法是否出一场都会执行

(2)自动生成Test类插件

Java 项目自动生成单元测试插件推荐-腾讯云开发者社区-腾讯云 (tencent.com)icon-default.png?t=N7T8https://cloud.tencent.com/developer/article/1910893

六、注意事项:

(1)接口文档后端书写,要写的清晰明确,能让你的前端看明白,规范书写,不要写了就自己能看明白,改写的名称默认值接口响应要写好。

(2)除了教的东西,可以自行学一些其他的东西,比如邮箱验证注册,验证码登入,c3p0,MD5加密,log日志,Result风格等等等。

(3)代码书写也要规范,逻辑要严谨;(cookie,session)该设置的设置;需要判空的地方要判空,可以增加安全性的地方可以学学,

(4)前后端要配合好,不要后端只做自己的,一句话也不跟前端说。前后端的交互响应,同样也是考核的一部分,占很大一部分,你们写的接口,仅仅在apifox跑通是不可以的,呈现在具体的前端页面上有没有出错,有没有逻辑问题等等这都可能需要考虑。

(一个人是打不了江山的!!!)

(5)在需求分析的时候,就规定好你们自己要做的功能和接口,如果你做了什么功能,前端没有做,你可以push她,如果她做了的东西需要你后端的接口/数据,你没有写,那就好好反思反思,多沟通多交流。

可以对标一下真正可以运行的项目或者相似的东西,比如购物网站。那你就对标淘宝,这个网站可能有的后端接口,可能有的功能模块,具体的细节。

(6)不要一味的追求多,要逻辑合理,能够简化的部分要学会简化。但是基本的接口数量和代码量也是要保证的。(我们当初写的接口基本都是40多)

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

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

相关文章

【JSP+Servlet+Maven】——优质外卖订餐系统之概论部分

&#x1f3bc;个人主页&#xff1a;【Y小夜】 &#x1f60e;作者简介&#xff1a;一位双非学校的大二学生&#xff0c;编程爱好者&#xff0c; 专注于基础和实战分享&#xff0c;欢迎私信咨询&#xff01; &#x1f386;入门专栏&#xff1a;&#x1f387;【MySQL&#xff0…

XLSX + LuckySheet + LuckyExcel + Web Worker实现前端的excel预览

文章目录 功能简介简单代码实现web worker 版本效果参考 功能简介 通过LuckyExcel的transformExcelToLucky方法&#xff0c; 我们可以把一个文件直接转成LuckySheet需要的json字符串&#xff0c; 之后我们就可以用LuckySheet预览excelLuckyExcel只能解析xlsx格式的excel文件&a…

别催了别催了,我这周肝快爆了。。

大家好&#xff0c;我是程序员鱼皮。每月一次&#xff0c;给大家分享一下最近一个月我的工作和生活情况。 哦不对&#xff0c;最近一个月&#xff0c;基本没有生活。。 上个月&#xff0c;我主要的重心放在了 3 件事上&#xff1a;产品、技术建设、自媒体。 6 月复盘 产品 …

不锈钢焊条A022

说明&#xff1a;A022是钛钙型药皮的不锈钢焊条。交直流两用&#xff0c;操作性能良好。熔敷金属有良好的耐热、耐腐蚀及抗裂性能。 用途&#xff1a;用于焊接尿素、合成纤维等设备及相同类型的不锈钢结构&#xff0c;也可用于焊后不能进行热处理的铬不锈钢以及复合钢和异种钢等…

机器学习的遗忘——基于文章“Forgetting“ in Machine Learning and Beyond: A Survey

文章概要 这篇调查文章仅关注选择性遗忘&#xff0c;承认遗忘某些信息可以通过允许模型优先考虑和保留更重要或相关的信息&#xff0c;以及保护用户隐私&#xff0c;从而带来好处。选择性遗忘&#xff08;Selective forgetting&#xff09;涉及有选择地忽略无关或噪声数据。这…

128陷阱(超详细)

int x 128;int y 128;int n 127;int m 127;Integer d Integer.valueOf(x);Integer g Integer.valueOf(y);Integer z Integer.valueOf(n);Integer v Integer.valueOf(m);System.out.println(d g);System.out.println(z v); 思考一下他的结果是什么&#xff1f; 为什么…

快速搭建发卡独立站(完全免费)

本文介绍如何使用开源项目&#xff0c;零成本&#xff0c;无需服务器的方式搭建一套自己的数字商品/发卡独立站&#xff0c;不需要任何开发能力&#xff0c;即便是小白用户也能搭建。 感兴趣可直接查看开源项目地址&#x1f449; https://github.com/iDataRiver/theme-basic …

JavaScript基础笔记

前言 在JavaScript诞生的前几年&#xff0c;有人说: JavaScript是一门四不像的语言;JavaScript是一门没有规范的语言;JavaScript是一门兼容糟糕的语言;JavaScript是一门不精准的语言;JavaScript是一个半成品语言;JavaScript是一门糟糕的语言;JavaScript只是一个玩具胶水语言;…

基于java+ssm+jsp实现的网上购物系统(文末源码+lw+ppt)23-45

1 摘 要 本文首先实现了网上购物系统设计与实现管理技术的发展随后依照传统的软件开发流程&#xff0c;最先为系统挑选适用的言语和软件开发平台&#xff0c;依据需求分析开展控制模块制做和数据库查询构造设计&#xff0c;随后依据系统整体功能模块的设计&#xff0c;制作系…

掌上教务系统-计算机毕业设计源码84604

摘要 在数字化教育日益成为主流的今天&#xff0c;教务管理系统的智能化和便捷性显得尤为重要。为满足学校、教师、学生及家长对教务管理的高效需求&#xff0c;我们基于Spring Boot框架设计并实现了一款掌上教务系统。该系统不仅具备课程分类管理功能&#xff0c;使各类课程信…

Node.js介绍 , 安装与使用

1.Node.js 1 什么是Node.js 官网&#xff1a;https://nodejs.org/zh-cn/ 中文学习网&#xff1a;http://nodejs.cn/learn1.Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。 2.前端的底层 html…

Java-Redis-Clickhouse-Jenkins-MybatisPlus-Zookeeper-vscode-Docker

文章目录 Clickhouse基础实操windows docker desktop 下载clickhousespringboot项目配置clickhouse Redis谈下你对Redis的了解&#xff1f;Redis一般都有哪些使用的场景&#xff1f;Redis有哪些常见的功能&#xff1f;Redis支持的数据类型有哪些&#xff1f;Redis为什么这么快…

《Nature》文章:ChatGPT帮助我学术写作的三种方式

图片翻译 ** 文章内容** 忏悔时间&#xff1a;我使用生成式人工智能&#xff08;AI&#xff09;。尽管在学术界关于聊天机器人是积极力量还是消极力量的争论不休&#xff0c;但我几乎每天都使用这些工具来完善我所写论文中的措辞&#xff0c;并寻求对我被要求评估的工作进行替…

人脸检测(Python)

目录 环境&#xff1a; 初始化摄像头&#xff1a; 初始化FaceDetector对象&#xff1a; 获取摄像头帧&#xff1a; 获取数据&#xff1a; 绘制数据&#xff1a; 显示图像&#xff1a; 完整代码&#xff1a; 环境&#xff1a; cvzone库&#xff1a;cvzone是一个基于…

视频翻译英文的软件有哪些?打破语言障碍就用这5个

打算趁着暑假假期悄悄努力惊艳所有人的小伙伴在哪呢~ 相信不少朋友自学都会首选在家看网课&#xff0c;不过有时候面对全英的外语课程&#xff0c;难免总会听得一头雾水~ 但其实这个问题很好解决&#xff01;码好以下这5款视频翻译工具&#xff0c;语言障碍的问题也就都迎刃而…

数据中台设计书及建设指南(中台及大数据解决技术方案)

1. 中台概念 2. 推动企业组织模式演进 3. 建设方法 4 .中台内容 5. 数据安全体系 中台内容围绕数据中台建设评估、整体框架、数据采集&#xff0c;结构化、半结构化、非结构化的数据采集&#xff0c;数据计算能力、存储计算引擎、数据架构、数据挖掘、各种不同数据层建设、模型…

Redis官方可视化管理工具

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl RedisInsight是一个Redis可视化工具&#xff0c;提供设计、开发和优化 Redis 应用程序的功能。RedisInsight分为免费的社区版和一个付费的企业版&#xff0c;免费版具有基本…

RPA影刀 | 循环 + 嵌套循环 + 循环中的continue和break

一、循环 循环的构成 重复在做的事&#xff08;不变的&#xff09;&#xff1a;循环体每次操作的对象&#xff08;变化的&#xff09;&#xff1a;循环项 二、ForEach列表循环 三、循环相似元素 四、For次数循环 五、嵌套循环 测试目标&#xff1a;遍历所有页面&#xff0…

蓝牙资讯|三星新智能戒指专利曝光,将搭载屏幕显示心率

科技媒体 91Mobile 挖掘美国专利数据库&#xff0c;发现三星获批一项新的设计专利&#xff0c;展示了全新的智能戒指设计方案&#xff0c;未来可能以 Galaxy Ring 2 的名义发布。 根据专利分享的外观设计&#xff0c;采用了有别于 Galaxy Ring 的全圆环设计&#xff0c;专利中智…

YOLOv5+DecoupleHead解耦头(YOLOx)

一、解耦头原理 在目标检测中,分类任务和回归任务之间的冲突是一个众所周知的问题。因此,用于分类和定位的解耦头被广泛应用于大多数一级和二级探测器。但是,由于YOLO系列的主干和特征金字塔(如FPN, PAN)不断演化,它们的检测头仍然是耦合的。 从下表可以看出,头耦合时端…