边缘智能-大模型架构初探

R2Cloud接口
机器人注册
请求和应答
注册是一个简单的 HTTP 接口,根据机器人/用户信息注册,创建一个新机器人。
请求 URL
| URL | http://ip/robot/reg |
|---|---|
| Type | POST |
| HTTP Version | 1.1 |
| Content-Type | application/json |
请求参数
| Param | 含义 | Rule | 是否必须 | 缺省 |
|---|---|---|---|---|
| robotid | 机器人唯一 ID | md 5 加密后的值 | 必填 | NULL |
| robotPwd | 机器人密码 | md 5 加密后的值 | 必填 | NULL |
| nickName | 昵称 | 不超过 32 个字符 | 可选 | NULL |
| 邮箱 | 符合 email 规范 | 可选 | NULL | |
| userName | 用户名称 | 不超过 32 个字符 | 可选 | NULL |
服务示例
返回结果参数
| 名称 | 含义 | 规则说明 |
|---|---|---|
| code | 结果值 | 0:成功 1:失败 2:机器人存在 |
调用接口
{"robotid":"ced165163e51e06e01dc44c35fea3eaf","robotPwd":"3687f20fbdfab8dd7e645f1e2f95268b","nickName":"jarvis","email":"Jarvis@joysonrobot.com","userName":"gv"
}
返回值
{"code":0
}
处理逻辑

客户端提交的密码需要使用 md5 加密,不能提供明文的密码。
机器人上线(登录)
请求和应答
登录,根据机器人的登录信息,连接到云平台。
请求URL
| URL | http://ip/robot/login |
|---|---|
| Type | POST |
| HTTP Version | 1.1 |
| Content-Type | application/json |
请求参数
| Param | 含义 | Rule | 是否必须 | 缺省 |
|---|---|---|---|---|
| robotid | 机器人唯一 ID | md 5 加密后的值 | 必填 | NULL |
| robotPwd | 机器人密码 | md 5 加密后的值 | 必填 | NULL |
服务示例
返回结果参数说明
| 名称 | 含义 | 规则说明 |
|---|---|---|
| code | 结果值 | 0:成功 1:失败 |
| token | 令牌 | 每次上线后,生成的token不一样,后续请求需要带上token |
调用接口
http://ip/robot/login
参数
{"robotid":"ced165163e51e06e01dc44c35fea3eaf","robotPwd":"3687f20fbdfab8dd7e645f1e2f95268b"
}
返回结果
{"code":0,"token":"3a58ca22317e637797f8bcad5c047446"
}
处理逻辑

Token验证
Token 的中文有人翻译成 “令牌”,意思就是,你拿着这个令牌,才能过一些关卡。
Token 是一个用户自定义的任意字符串。在成功提交了开发者自定义的这个字符串之后,Token 的值 会保存到服务器后台。只有服务器和客户端前端知道这个字符串,于是 Token 就成了这两者之间的 密钥,它可以让服务器确认请求是来自客户端还是恶意的第三方。
使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。大概的流程是这样的:
- 客户端使用用户名和密码请求登录;
- 服务器收到请求,验证用户名和密码;
- 验证成功后,服务端生成一个Token,这个Token可以存储在内存、磁盘、或者数据库里,再把这个Token发送给客户端;
- 客户端收到Token以后可以存储起来,比如放在Cookie或者Local Storage;
- 客户端每次向服务器请求资源时必须带着服务器签发的Token;
- 服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回 请求的数据。
私有文件1
请求URL
| URL | http://ip/file/ownfile?cmd=count |
|---|---|
| Type | POST |
| HTTP Version | 1.1 |
| Content-Type | application/json |
请求参数
| Param | 含义 | Rule | 是否必须 | 缺省 |
|---|---|---|---|---|
| token | token | 同上 | 必填 | NULL |
| robotid | 机器人唯一 ID | 不超过32个字符 | 必填 | NULL |
服务示例
返回结果参数说明
| 名称 | 含义 | 规则说明 |
|---|---|---|
| code | 结果值 | 0:验证成功 1:验证失败 |
| total | 文件数量 |
调用接口
http://ip/file/ownfile?cmd=count
参数
{"token":"3a58ca22317e637797f8bcad5c047446","robotid":"ced165163e51e06e01dc44c35fea3eaf"
}
返回结果
{"total":1,"code":0
}
没有文件返回
{"total":0,"code":0
}
处理逻辑

私有文件2
请求URL
| URL | http://ip/file/ownfile?cmd=normal |
|---|---|
| Type | POST |
| HTTP Version | 1.1 |
| Content-Type | application/json |
请求参数
| Param | 含义 | Rule | 是否必须 | 缺省 |
|---|---|---|---|---|
| token | token | 同上 | 必填 | NULL |
| robotid | 机器人唯一 ID | 不超过32个字符 | 必填 | NULL |
| count | 文件个数 | 私有文件数量>0 | 必填 | NULL |
| start | 开始位置 | 必填 | NULL |
服务示例
返回结果参数说明
| 名称 | 含义 | 规则说明 |
|---|---|---|
| files | 文件结果集 | “code”:0正常,1失败, “count”:当前文件数量, “total”:私有文件数量, “robotid”:机器人唯一ID, “md5”:md5的值, “create_time”:创建时间, “file_name”:文件名, “share_status”:共享状态, “pv”:使用次数, “url”:URL, “size”:文件大小, “type”:文件类型 |
调用接口
http://ip/file/ownfile?cmd=normal
参数
{"count":2,"start":0,"token":"3a58ca22317e637797f8bcad5c047446","robotid":"ced165163e51e06e01dc44c35fea3eaf"
}
返回结果
{"code":0,"total":2,"files":[{"robotid":"ced165163e51e06e01dc44c35fea3eaf","md5":"6c5fa2864bb264c91167258b3e478fa0","create_time":"2024-01-01 11:11:00","file_name":"111.jpg","share_status":0,"pv":1,"url":"http://ip/group1/M00/00/00/eBuDxWCfQHSATopyAAV8AJV_1mw866.111","size":"1024","type":"jpg"}]
}
处理逻辑

私有文件3
请求URL
| URL | http://ip/file/ownfile?cmd=pvasc |
|---|---|
| Type | POST |
| HTTP Version | 1.1 |
| Content-Type | application/json |
请求参数
| Param | 含义 | Rule | 是否必须 | 缺省 |
|---|---|---|---|---|
| token | token | 同上 | 必填 | NULL |
| robotid | 机器人唯一 ID | 不超过32个字符 | 必填 | NULL |
| count | 文件个数 | 私有文件数量>0 | 必填 | NULL |
| start | 开始位置 | 必填 | NULL |
服务示例
返回结果参数说明
| 名称 | 含义 | 规则说明 |
|---|---|---|
| files | 文件结果集 | “code”:0正常,1失败, “count”:当前文件数量, “total”:私有文件数量, “robotid”:机器人唯一ID, “md5”:md5的值, “create_time”:创建时间, “file_name”:文件名, “share_status”:共享状态, “pv”:使用次数, “url”:URL, “size”:文件大小, “type”:文件类型 |
调用接口
http://ip/file/ownfile?cmd=normal
参数
{"count":2,"start":0,"token":"3a58ca22317e637797f8bcad5c047446","robotid":"ced165163e51e06e01dc44c35fea3eaf"
}
返回结果
{"code":0,"total":2,"files":[{"robotid":"ced165163e51e06e01dc44c35fea3eaf","md5":"6c5fa2864bb264c91167258b3e478fa0","create_time":"2024-01-01 11:11:00","file_name":"111.jpg","share_status":0,"pv":1,"url":"http://ip/group1/M00/00/00/eBuDxWCfQHSATopyAAV8AJV_1mw866.111","size":"1024","type":"jpg"}]
}
处理逻辑

私有文件4
请求URL
| URL | http://ip/file/ownfile?cmd=pvdesc |
|---|---|
| Type | POST |
| HTTP Version | 1.1 |
| Content-Type | application/json |
请求参数
| Param | 含义 | Rule | 是否必须 | 缺省 |
|---|---|---|---|---|
| token | token | 同上 | 必填 | NULL |
| robotid | 机器人唯一 ID | 不超过32个字符 | 必填 | NULL |
| count | 文件个数 | 私有文件数量>0 | 必填 | NULL |
| start | 开始位置 | 必填 | NULL |
服务示例
返回结果参数说明
| 名称 | 含义 | 规则说明 |
|---|---|---|
| files | 文件结果集 | “code”:0正常,1失败, “count”:当前文件数量, “total”:私有文件数量, “robotid”:机器人唯一ID, “md5”:md5的值, “create_time”:创建时间, “file_name”:文件名, “share_status”:共享状态, “pv”:使用次数, “url”:URL, “size”:文件大小, “type”:文件类型 |
调用接口
http://ip/file/ownfile?cmd=normal
参数
{"count":2,"start":0,"token":"3a58ca22317e637797f8bcad5c047446","robotid":"ced165163e51e06e01dc44c35fea3eaf"
}
返回结果
{"code":0,"total":2,"files":[{"robotid":"ced165163e51e06e01dc44c35fea3eaf","md5":"6c5fa2864bb264c91167258b3e478fa0","create_time":"2024-01-01 11:11:00","file_name":"111.jpg","share_status":0,"pv":1,"url":"http://ip/group1/M00/00/00/eBuDxWCfQHSATopyAAV8AJV_1mw866.111","size":"1024","type":"jpg"}]
}
处理逻辑

上传文件md5
用于秒传文件的请求。
文件上传的时候:
- 先调用md5接口判断服务器是否有该文件,如果md5成功则说明服务器有该文件,不需要upload;
- 如果不成功则调用upload。
请求URL
| URL | http://ip/file/md5 |
|---|---|
| Type | POST |
| HTTP Version | 1.1 |
| Content-Type | application/json |
请求参数
| Param | 含义 | Rule | 是否必须 | 缺省 |
|---|---|---|---|---|
| token | token | 同上 | 必填 | NULL |
| robotid | 机器人唯一 ID | 不超过32个字符 | 必填 | NULL |
| md5 | md5值 | 不超过32个字符 | 必填 | NULL |
| filename | 文件名称 | 不超过128个字符 | 必填 | NULL |
服务示例
返回结果参数说明
| 名称 | 含义 | 规则说明 |
|---|---|---|
| code | 结果值 | 0: 秒传成功 1: 秒传失败 4: token 校验失败 5:文件已存在 |
调用接口
http://ip/file/md5
参数
{"filename":"ui_bottongroup.h","md5":"a89390d867d5da18c8b1a95908d7c653","token":"3a58ca22317e637797f8bcad5c047446","robotid":"ced165163e51e06e01dc44c35fea3eaf"
}
返回结果
{"code":0
}
处理逻辑
每个文件都有一个唯一的 MD5 值(比如 2bf8170b42cc7124b04a8886c83a9c6f),就好比每个人的指 纹都是唯一的一样,效验 MD5 就是用来确保文件在传输过程中未被修改过。
- 客户端在上传文件之前先将文件的md5码上传到服务器;
- 服务器判断是否存在这个md5码,如果存在,说明文件存在,则此文件无需再次上传,在此文件的计数器上加1,说明文件多了一个用户共用;
- 如果服务器没有这个md5码,则说明。传的是新文件,需要上传

上传文件upload
请求URL
| URL | http://ip/file/upload |
|---|---|
| Type | POST |
| HTTP Version | 1.1 |
| Content-Type | application/json |
返回结果参数说明
| 名称 | 含义 | 规则说明 |
|---|---|---|
| code | 结果值 | 0: 秒传成功 1: 上传失败 |
处理逻辑

共享/删除1
请求 URL
| URL | http://ip/file/dealfile?cmd=share |
|---|---|
| Type | POST |
| HTTP Version | 1.1 |
| Content-Type | application/json |
请求参数
| Param | 含义 | Rule | 是否必须 | 缺省 |
|---|---|---|---|---|
| token | token | 同上 | 必填 | NULL |
| robotid | 机器人唯一 ID | 不超过32个字符 | 必填 | NULL |
| md5 | md5值 | 不超过32个字符 | 必填 | NULL |
| filename | 文件名称 | 不超过128个字符 | 必填 | NULL |
服务示例
返回结果参数说明
| 名称 | 含义 | 规则说明 |
|---|---|---|
| code | 结果值 | 0: 成功 1: 失败 3: 另外的机器人已经共享 4: token 验证失败 |
调用接口
http://ip/file/dealfile?cmd=pv
参数
{"filename":"Makefile","md5":"602fdf30db2aacf517badf4565124f51","token":"3a58ca22317e637797f8bcad5c047446","robotid":"ced165163e51e06e01dc44c35fea3eaf"
}
返回结果
{"code":0
}
处理逻辑

共享/删除文件2
请求URL
| URL | http://ip/file/dealfile?cmd=del |
|---|---|
| Type | POST |
| HTTP Version | 1.1 |
| Content-Type | application/json |
请求参数
| Param | 含义 | Rule | 是否必须 | 缺省 |
|---|---|---|---|---|
| token | token | 同上 | 必填 | NULL |
| robotid | 机器人唯一 ID | 不超过32个字符 | 必填 | NULL |
| md5 | md5值 | 不超过32个字符 | 必填 | NULL |
| filename | 文件名称 | 不超过128个字符 | 必填 | NULL |
服务示例
返回结果参数说明
| 名称 | 含义 | 规则说明 |
|---|---|---|
| code | 结果值 | 0: 成功 1: 失败 |
调用接口
http://ip/file/dealfile?cmd=del
参数
{"filename":"Makefile","md5":"602fdf30db2aacf517badf4565124f51","token":"3a58ca22317e637797f8bcad5c047446","robotid":"ced165163e51e06e01dc44c35fea3eaf"
}
返回结果
{"code":0
}
处理逻辑

- 先判断此文件是否已经分享
- 判断集合有没有这个文件,如果有,说明别人已经分享此文件(RDS操作)
- 如果集合没有此元素,可能因为 redis 中没有记录,再从 SQL中查询,如果 SQL也没有,说 明真没有(SQL操作)
- 如果 SQL有记录,而 RDS没有记录,那么分享文件处理只需要处理 SQL(SQL操作)
- 如果 RDS有记录,SQL和 RDS都需要处理,删除相关记录
取消共享
请求URL
| URL | http://ip/file/dealsharefile?cmd=cancel |
|---|---|
| Type | POST |
| HTTP Version | 1.1 |
| Content-Type | application/json |
请求参数
| Param | 含义 | Rule | 是否必须 | 缺省 |
|---|---|---|---|---|
| robotid | 机器人唯一 ID | 不超过32个字符 | 必填 | NULL |
| md5 | md5值 | 不超过32个字符 | 必填 | NULL |
| filename | 文件名称 | 不超过128个字符 | 必填 | NULL |
服务示例
返回结果参数说明
| 名称 | 含义 | 规则说明 |
|---|---|---|
| code | 结果值 | 0: 成功 1: 失败 |
调用接口
http://ip/file/dealsharefile?cmd=cancel
参数
{"filename":"ui_buttongroup.h""md5":"a89390d867d5da18c8b1a95908d7c653","robotid":"ced165163e51e06e01dc44c35fea3eaf"
}
返回结果
{"code":0
}
处理逻辑

- 查询共享文件的数量;
- 如果共享文件数量为1则删除共享文件数量对应的行
- 如果共享文件数量>1,则更新共享数量文件-1。
转存文件
请求URL
| URL | http://ip/file/dealsharefile?cmd=save |
|---|---|
| Type | POST |
| HTTP Version | 1.1 |
| Content-Type | application/json |
请求参数
| Param | 含义 | Rule | 是否必须 | 缺省 |
|---|---|---|---|---|
| robotid | 机器人唯一 ID | 不超过32个字符 | 必填 | NULL |
| md5 | md5值 | 不超过32个字符 | 必填 | NULL |
| filename | 文件名称 | 不超过128个字符 | 必填 | NULL |
服务示例
返回结果参数说明
| 名称 | 含义 | 规则说明 |
|---|---|---|
| code | 结果值 | 0: 成功 1: 失败 5: 文件存在 |
http://ip/file/dealsharefile?cmd=save
参数
{"filename":"ui_buttongroup.h""md5":"a89390d867d5da18c8b1a95908d7c653","robotid":"ced165163e51e06e01dc44c35fea3eaf"
}
返回结果
{"code":0
}
处理逻辑

- 先查询是个人文件列表是否已经存在该文件;
- 增加 file_info 表的 count 计数,表是多一个人保存了该文件;
- 个人的 user_file_list 增加一条文件记录;
- 更新个人的 user_file_count。
更新共享文件下载计数
请求URL
| URL | http://ip/file/dealsharefile?cmd=save |
|---|---|
| Type | POST |
| HTTP Version | 1.1 |
| Content-Type | application/json |
请求参数
| Param | 含义 | Rule | 是否必须 | 缺省 |
|---|---|---|---|---|
| robotid | 机器人唯一 ID | 不超过32个字符 | 必填 | NULL |
| md5 | md5值 | 不超过32个字符 | 必填 | NULL |
| filename | 文件名称 | 不超过128个字符 | 必填 | NULL |
服务示例
返回结果参数说明
| 名称 | 含义 | 规则说明 |
|---|---|---|
| code | 结果值 | 0: 成功 1: 失败 5: 文件存在 |
http://ip/file/dealsharefile?cmd=pv
参数
{"filename":"ui_buttongroup.h""md5":"a89390d867d5da18c8b1a95908d7c653","robotid":"ced165163e51e06e01dc44c35fea3eaf"
}
返回结果
{"code":0
}
处理逻辑

- 更新share_file_list的pv值;
- 更新RDS的FILE_PUBLIC_ZSET。
分享文件
请求URL
| URL | http://ip/file/sharefile?cmd=share |
|---|---|
| Type | POST |
| HTTP Version | 1.1 |
| Content-Type | application/json |
请求参数
| Param | 含义 | Rule | 是否必须 | 缺省 |
|---|---|---|---|---|
| token | token | 同上 | 必填 | NULL |
| robotid | 机器人唯一 ID | 不超过32个字符 | 必填 | NULL |
| md5 | md5值 | 不超过32个字符 | 必填 | NULL |
| filename | 文件名称 | 不超过128个字符 | 必填 | NULL |
服务示例
返回结果参数说明
| 名称 | 含义 | 规则说明 |
|---|---|---|
| code | 结果值 | 0: 成功 1: 失败 4: token验证失败 |
| urlmd5 | 分享文件标识 | 取消也要 |
调用接口
http://ip/file/sharefile?cmd=share
参数
{"filename":"ui_buttongroup.h""md5":"a89390d867d5da18c8b1a95908d7c653","token":"3a58ca22317e637797f8bcad5c047446","robotid":"ced165163e51e06e01dc44c35fea3eaf"
}
返回结果
{"code":0,"urlmd5":"602fdf30db2aacf517badf4565121234"
}
处理逻辑

新建分组
新建一个MQTT的Topic,用于协作。
请求URL
| URL | http://ip/msg/newgroup |
|---|---|
| Type | POST |
| HTTP Version | 1.1 |
| Content-Type | application/json |
请求参数
| Param | 含义 | Rule | 是否必须 | 缺省 |
|---|---|---|---|---|
| token | token | 同上 | 必填 | NULL |
| robotid | 机器人唯一 ID | 不超过32个字符 | 必填 | NULL |
| maxsize | 同组最大数量 | >=1 | 必填 | NULL |
服务示例
返回结果参数说明
| 名称 | 含义 | 规则说明 |
|---|---|---|
| code | 结果值 | 0: 成功 1: 失败 4: token验证失败 |
| topic | 加密后的topic | 失败为空 |
调用接口
http://ip/file/msg/newgroup
参数
{"token":"3a58ca22317e637797f8bcad5c047446","robotid":"ced165163e51e06e01dc44c35fea3eaf","maxsize":10
}
返回结果
{"code":0,"topic":"614b0c23f5f4cd3a68ba5581e2169df3"
}
处理逻辑

释放分组
请求 URL
| URL | http://ip/msg/freegroup |
|---|---|
| Type | POST |
| HTTP Version | 1.1 |
| Content-Type | application/json |
请求参数
| Param | 含义 | Rule | 是否必须 | 缺省 |
|---|---|---|---|---|
| token | token | 同上 | 必填 | NULL |
| robotid | 机器人唯一 ID | 不超过32个字符 | 必填 | NULL |
| topic | 加密后的topic | 不超过32个字符 | 必填 | NULL |
服务示例
返回结果参数说明
| 名称 | 含义 | 规则说明 |
|---|---|---|
| code | 结果值 | 0: 成功 1: 失败 4: token 验证失败 5: 非topic管理员 |
调用接口
http://ip/file/msg/freegroup
参数
{"token":"3a58ca22317e637797f8bcad5c047446","robotid":"ced165163e51e06e01dc44c35fea3eaf","topic":"614b0c23f5f4cd3a68ba5581e2169df3"
}
返回结果
{"code":0,
}
处理逻辑

相关文章:
边缘智能-大模型架构初探
R2Cloud接口 机器人注册 请求和应答 注册是一个简单的 HTTP 接口,根据机器人/用户信息注册,创建一个新机器人。 请求 URL URLhttp://ip/robot/regTypePOSTHTTP Version1.1Content-Typeapplication/json 请求参数 Param含义Rule是否必须缺省roboti…...
《python语言程序设计》2018版第8章18题几何circle2D类(上部)
一、利用第7章的内容来做前5个点 第一章之1--从各种角度来测量第一章之2--各种结果第二章之1--建立了针对比对点在圆内的几段第二章之2--利用建立的对比代码,得出的第2点位置 第一章之1–从各种角度来测量 class Circle2D:def __init__(self, x, y, radius):self._…...
nginx upstream转发连接错误情况研究
本次测试用到3台服务器: 192.168.10.115:转发服务器A 192.168.10.209:upstream下服务器1 192.168.10.210:upstream下服务器2 1台客户端:192.168.10.112 服务器A中nginx主要配置如下: log_format main…...
alias 后门从入门到应急响应
目录 1. alias 后门介绍 2. alias 后门注入方式 2.1 方式一(以函数的方式执行) 2.2 方式二(执行python脚本) 3.应急响应 3.1 查看所有连接 3.2 通过PID查看异常连接的进程,以及该进程正在执行的命令行命令 3.3 查看别名 3.4 其他情况 3.5 那么检查这些…...
【远程调用PythonAPI-flask】
文章目录 前言一、Pycharm创建flask项目1.创建虚拟环境2.创建flask项目 二、远程调用PythonAPI——SpringBoot项目集成1.修改PyCharm的host配置2.防火墙设置3.SpringBoot远程调用PythonAPI 前言 解决Pycharm运行Flask指定ip、端口更改无效的问题 首先先创建一个新的flask项目&…...
[今日Arxiv] 思维迭代:利用内心对话进行自主大型语言模型推理
思维迭代:利用内心对话进行自主大型语言模型推理 Iteration of Thought: Leveraging Inner Dialogue for Autonomous Large Language Model Reasoning URL:https://arxiv.org/abs/2409.12618 注:翻译可能存在误差,详细内容建议…...
glTF格式:WebGL应用的3D资产优化解决方案
摘要 glTF作为一种高效的3D资产格式,为WebGL、OpenGL ES和OpenGL运行时的应用提供了强有力的支持。它不仅简化了3D模型的传输与加载流程,还通过优化资产大小,使得打包、解包更加便捷。本文将深入探讨glTF格式的优势,并提供实用的代…...
Unity3D入门(一) : 第一个Unity3D项目,实现矩形自动旋转,并导出到Android运行
1. Unity3D介绍 Unity3D是虚拟现实行业中,使用率较高的一款软件。 它有着强大的功能,是让玩家轻松创建三维视频游戏、建筑可视化、实时三维动画等互动内容的多平台、综合型 虚拟现实开发工具。是一个全面整合的专业引擎。 2. Unity安装 官网 : Unity…...
数据结构与算法——Java实现 8.习题——移除链表元素(值)
祝福你有前路坦途的好运,更祝愿你能保持内心光亮 纵有风雨,依然选择勇敢前行 —— 24.9.22 203. 移除链表元素 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 示…...
如何理解MVCC
MVCC是什么? MVCC,是MultiVersion Concurrency Control的缩写,翻译成中文就是多版本并发控制,多个事务同时访问同一数据时,调控每一个事务获取到数据的具体版本。和数据库锁一样,它也是一种并发控制的解决…...
在 Qt 中使用 QLabel 设置 GIF 动态背景
文章目录 在 Qt 中使用 QLabel 设置 GIF 动态背景本文食用注意目标实现步骤1. 准备工作2. 修改头文件 widget.h3. 实现构造函数和析构函数4. 调整背景大小5. 完整代码分析6. 运行程序 总结 在 Qt 中使用 QLabel 设置 GIF 动态背景 在 Qt 中,如果希望在窗口中设置一…...
Flyway 数据库差异处理
Flyway 数据库差异处理详解 在软件开发过程中,数据库 schema 的变更是不可避免的,尤其是在多人协作、多环境部署时,不同环境中的数据库结构可能出现差异。Flyway 作为一个数据库迁移工具,通过版本控制和自动化迁移,确…...
CSS 选择器的分类与使用要点一
目录 非 VIP 用户可前往公众号进行免费阅读 标签选择器 id 选择器 类选择器 介绍 公共类 CSS 中优先用 class 选择器,慎用 id 选择器 后代选择器 交集选择器 以标签名作为开头 以类名作为开头 连续交集 并集选择器(分组选择器) 通配符* 儿子选择器 >(IE7…...
无人机集群路径规划:麻雀搜索算法(Sparrow Search Algorithm, SSA)求解无人机集群路径规划,提供MATLAB代码
一、单个无人机路径规划模型介绍 无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径,使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一,它可以通过算法和模型来确定无人机的航迹,以避开障碍物、优化…...
harbor集成trivy镜像扫描工具
harbor项目地址:GitHub - goharbor/harbor: An open source trusted cloud native registry project that stores, signs, and scans content. 前置条件:安装好docker和docker-compose 一、安装harbor 1、下载harbor安装包并解压 wget https://github.com/goharbor/harbo…...
DMA学习
一、DMA简介 DMA是一种无需CPU的参与就可以让外设与系统内存之间进行双向数据传输的硬件机制。使用DMA可以使系统CPU从实际的I/O数据传输过程中摆脱出来,从而大大提高系统的吞吐率。 DMA方式的数据传输由DMA控制器(DMAC)控制,在传…...
C语言18--头文件
头文件的作用 通常,一个常规的C语言程序会包含多个源码文件(.c),当某些公共资源需要在各个源码文件中使用时,为了避免多次编写相同的代码,一般的做法是将这些大家都需要用到的公共资源放入头文件ÿ…...
vscode软件在 C发中常用插件
一. 简介 本文简单介绍一下,当做 C开发时 vscode软件常用的插件。 vscode软件是 微软公司目前提供的一款免费的开发软件,可以通过 vscode官网下载 vscode。 二. vscode软件在 C开发中常用插件 注意:vscode软件安装后,可以直接…...
【C++ Primer Plus习题】17.2
大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: #include <iostream> #include <fstream> using namesp…...
Vue Props传值
Props用于父组件向子组件传值 定义类型 // 定义一个接口,用来限制Teacher的属性 export interface Teacher {name: string;age: number;gender: string; }export type teacherList Teacher[];// 一个自定义类型 export type Teachers Array<Teacher>;父组件 <scr…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型
在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重,适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解,并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...
绕过 Xcode?使用 Appuploader和主流工具实现 iOS 上架自动化
iOS 应用的发布流程一直是开发链路中最“苹果味”的环节:强依赖 Xcode、必须使用 macOS、各种证书和描述文件配置……对很多跨平台开发者来说,这一套流程并不友好。 特别是当你的项目主要在 Windows 或 Linux 下开发(例如 Flutter、React Na…...
云安全与网络安全:核心区别与协同作用解析
在数字化转型的浪潮中,云安全与网络安全作为信息安全的两大支柱,常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异,并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全:聚焦于保…...
用递归算法解锁「子集」问题 —— LeetCode 78题解析
文章目录 一、题目介绍二、递归思路详解:从决策树开始理解三、解法一:二叉决策树 DFS四、解法二:组合式回溯写法(推荐)五、解法对比 递归算法是编程中一种非常强大且常见的思想,它能够优雅地解决很多复杂的…...
