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

(八九)如何与InfluxDB交互InfluxDB HTTP API

以下内容来自 尚硅谷,写这一系列的文章,主要是为了方便后续自己的查看,不用带着个PDF找来找去的,太麻烦!

第 8 章 前言:如何与InfluxDB交互

1、InfluxDB启动后,会向外提供一套HTTP API。外部程序可以也仅能通过HTTP API与InfluxDB进行通信。我们后面要讲到的influx命令行、Web UI 和各编程语言的客户端库,其内部都是封装的对HTTP API的调用。

在这里插入图片描述

2、所以各种客户端同InfluxDB交互时,都离不开API TOKEN。因为HTTP是一种支持官方且简单的协议,这也方便了用户进行二次开发。

第 9 章 InfluxDB HTTP API

1、InfluxDB提供了丰富的API和客户端库,可以随时和你的应用程序集成。你也可以随时使用curl和ApiPost、Postman这类程序来测试API接口。

2、本文章会先带大家看一些最常用的API,然后再告诉大家如何使用API文档。但本文中不会对InfluxDB的全部API进行讲解。

9.1 准备token

1、在你想尝试使用HTTP API与InfluxDB进行交互时,首先应该用账号和密码登到WebUI上选择或创建一个对应的API TOKEN。课程中,我们使用tony’s Token,这是一个具有全部权限的API Token,实际开发时应谨慎使用,防止Token被劫持出现安全问题。

在这里插入图片描述
2、在后面的操作中,你每次发出HTTP请求时都需要在请求头上携带token。

9.2 准备接口测试工具

1、在shell中你可以使用curl测试接口,不过带图形界面的程序终归是更易用一些。本文选用ApiPost这一专门的接口测试软件进行演示。ApiPost是一款国产软件,对标的是google的postman,截至视频课录制时,ApiPost的最新版本是 6 ,易用性比上一个
版本有大幅提升,用起来很顺手。

9.2.1 安装ApiPost

1、大家可以直接访问ApiPost的官网下载对应系统的安装包 https://www.apipost.cn/

在这里插入图片描述

9.2.2 准备调试环境

1、在左侧的目录栏上有一个文件夹 按钮,点一下,创建一个新的目录。

在这里插入图片描述

2、给目录命名,同时为这个目录添加一个公用header。这样这个目录下的所有接口都会自动带上这个header,不需要我们再一个个地手动设置了。我们之前提到过,要想使用InfluxDB的API,请求头上必须要加上token。所以,我们就把token设为公用header。

在这里插入图片描述

9.3 接口的授权

9.3.1 Token授权方式

9.3.1.1 成功什么样

1、现在我们先来看一下授权是否是成功的。

  • 首先,点击左侧的目录名称,右键会弹出一个菜单栏。点击新建接口
    在这里插入图片描述
  • 你可以自定义一个接口的名称,然后在接下来的 URL 栏里,填写 http://localhost:8086/api/v2/authorizations 点击发送。
    在这里插入图片描述
  • 接下来我们可以看到页面的下方弹出了返回的数据。这个接口返回的数据我们InfluxDB上目前所有的Token信息,包括他们拥有什么权限。成功看到数据,说明我们的Token是有效的。

在这里插入图片描述

  • 最后记得点击保存,或者使用Ctrl+S快捷键。这样,我们目录下面才会真正留下一个接口。方便你日后访问。

在这里插入图片描述

9.3.1.2 失败什么样

1、我们也可以看一下授权失败是什么效果。

  • 在目录上点击右键,再点击编辑目录。

在这里插入图片描述

  • 将Authotization请求头关掉. 点击右下角的保存

在这里插入图片描述

  • 现在回到我们的接口调试页面上,再次点击发送。可以看到状态码为 401 ,而且数据的json告诉我们没有授权。

在这里插入图片描述

  • 记得回去将目录的公共请求头放开,继续进行后面的操作。

9.3.2 登录授权方式

1、登录授权其实是留给Web UI用的,但是你也可以尝试用这种方式获取授权。InfluxDB服务端会判断你的cookie是否合法、以及是否过期。符合要求的话就能调用接口实现一系列操作。

2、进行接下来的操作前,记得关闭目录下的公用请求头。

在这里插入图片描述

9.3.2.1 创建登录会话

1、在InlfluxDB api v2 目录下创建一个新的接口

在这里插入图片描述

2、给接口自定义一个名称

在这里插入图片描述

3、请求的类型选择POST,填写目标的URL

4、配置登录信息

  • 在请求连接的下方点击一下“认证”按钮
  • 在认证方式上选择 Basic auth 认证
  • 在下方的输入框上输入InfluxDB的用户名和密码,课程中是tony, 11111111 。

5、点击发送。

9.3.2.2 登录原理

1、 什么是Basic auth认证

你常见的认证方式可能是将用户名和密码放到post请求的请求体中,再发送给服务端进行认证。不过我们刚才并没有在请求体里放用户名和密码,而是配置了一个叫Basic auth认证的东西。这个功能叫做http基本认证,是http协议的一部分。
基本认证的默认实现是:
( 1 )把用户名和密码用英文冒号拼起来,也就成了tony:11111111
( 2 )再将拼起来的字符串用 Base64算法编码。(tony:11111111的Base64编码为
dG9ueToxMTExMTExMQ==)
( 3 )给编码结果 dG9ueToxMTExMTExMQ==,添加一个前缀Basic所以最后的结果
就是。
Basic dG9ueToxMTExMTExMQ==
( 4 )把这个字符串放到一个key为authorization 的请求头中,发送给服务端。

2、查看请求头

在这里插入图片描述
3、所以,你可以在页面下方查看这次请求的请求头,如图所示,它就是我们基本认证的结晶。在众多的编程语言中,base 64 算法都会作为标准库的一部分存在。你可以在python中验证tony:11111111的base64编码结果。
在这里插入图片描述

4、查看响应头,我们还可以看一下这次请求的响应头,你可以看到响应头上有一个key为set-cookie的键值对。set-cookie键其实会向浏览器,或者编程语言中的 Session对象添加一个全局 cookie。

在这里插入图片描述
5、以后每次的请求就会自动携带这个cookie,以后InfluxDB的接口服务就会依据这个cookie来判断请求方是否有权限进行相关操作。ApiPost也有记录cookie的功能,你可以在ApiPost的Cookie管理器中,查看已经设置的全局cookie。

6、查看Cookie管理器

  • ApiPost的Cookie管理器在页面的最上方。

在这里插入图片描述

  • 弹出的窗口就是Cookie管理器。下面首先会列出你的域名或者host,老师这里是localhost,点一下,可以看到它下面的全部cookie。

在这里插入图片描述

  • 再点一下influxdb-oss-seesion,就可以看到这个cookie的内容可,可以看到它跟刚才响应头的set-cookie内容一模一样。

9.3.2.3 验证授权效果

1、接下来,我们会到之前的列出所有 token的接口里去,在目录共享请求头关闭的前提下,调用api。

在这里插入图片描述
2、直接点击发送按钮

在这里插入图片描述

3、响应码为 200 ,且成功出现了数据,说明我们现在是有权限的,可以点击下面的请求头按钮,看一下这次请的请求头。
在这里插入图片描述

9.3.2.4 关闭全局cookie再查看效果

1、接下来我们关闭全局cookie再查看效果。

  • 在ApiPost中打开Cookie管理器,按图中操作,关闭Cookie。

在这里插入图片描述

  • 再次向 /api/v2/authorizations 发送请求。可以看到我们这次没权限了

在这里插入图片描述

  • 再次查看请求头。这次我们失去了cookie。
    在这里插入图片描述

9.3.2.5 小结

1、这一节,我们了解用登录的方式获取授权。但是,大家还要注意两点

  • http基本认证默认实现的安全问题

我们前面讲过,http基本认证其实就是把tony:11111111的Base64编码放在的请求头上,但是Base64只是一种数据的编码方式,它不是加密算法也不是信息摘要算法。这也就是说,一旦我的请求被拦截,那对方就能看到我的用户名和密码,对我实施中间人攻击。

2、如图所示,Base64编码的字符串也可以被解码为明文。
在这里插入图片描述
3、所以,从安全角度考虑,不应当在开发时将Web UI暴露在公网上。而且集成应用时,授权也千万不可以用登录方式,应该全部使用token。

4、Cookie有过期时间

当你和别的应用进行集成时,也不应该使用登录的方式,登录授予的cookie是有过期时间的,大概半小时,cookie就会过期。用户必须重新登录拿到新的 cookie 才能和InfluxDB继续交互。授权的内容就说到这了。

5、大家进行后面操作的时候,记得恢复目录的公用请求头,并关闭Cookie。这样,我们就还是使用token授权的方式完成后面的一系列操作。

9.4 接口安全:配置HTTPS

1、HTTP是一种纯文本通信协议。早期很多互联网协议都是使用明文的方式来传输数据的。这样,最大的问题就是如果我们的网络请求被劫持,那么劫持的一方可以看到我们请求中的所有数据(包括Token),这样就算是使用Token进行授权比user:password安全一些,但泄漏Token也会带来很多麻烦事。所以,InfluxDB官方强烈建议我们开启HTTPS

9.4.1 使用openssl生成证书

1、下面是官方给出的命令模板。

sudo openssl req -x509 -nodes -newkey rsa:2048 \
- keyout /etc/ssl/influxdb-selfsigned.key \
- out /etc/ssl/influxdb-selfsigned.crt \
- days <NUMBER_OF_DAYS>

2、自己跑的时候可以参考做一下调整命令解释:

  • req -x509,指定生成自签名证书的格式。
  • newkey rsa:2048,生成证书请求或者自签名整数时自动生成密钥,然后生成的密钥
    名称由keyout指定。rsa:2048意思是产生rsa密钥,位数是 2048 。
  • keyout,指定生成的密钥名称。
  • out,证书的保存路径
  • days,证书的有效期限,单位是day(天),默认是 365 天。

3、现在,我们执行下面的命令:

openssl req -x509 -nodes -newkey rsa:2048 \- keyout /opt/module/influxdb2_linux_amd64/selfsigned.key \
- out /opt/module/influxdb2_linux_amd64/selfsigned.crt \
- days 60

4、执行这个命令后,会让你输入更多信息。你可以直接全部敲回车,将这些字段留空。不影响生成我们有效的证书文件。执行完这个命令后,/opt/module/influxdb2_linux_amd/ 目录下会产生两个文件,一个是 selfsigned.crt(证书文件)另一个是selfsigned.key(密钥文件)。而且他们的有效期是 60 天

5、至此,你的密钥文件就成功生成了!

9.4.2 确保启动influxd的用户对密钥整数文件有读取权限

在这里插入图片描述

9.4.3 启动influxd服务时指定证书和密钥路径

1、使用influxd命令启动InfluxDB服务时,记得指定一下整数的密钥的路径。

./influxd
--tls-cert="/opt/module/influxdb2_linux_amd64/selfsigned.crt" \
- -tls-key="/opt/module/influxdb2_linux_amd64/selfsigned.key"

9.4.4 验证HTTPS协议是否生效

1、回到我们的ApiPost6,再次向http:/localhost:8086/api/v2/authorizations发送GET请求。
在这里插入图片描述

2、可以看到,我们使用http的协议头再进行访问,响应的状态码为 400 ,并提示我们向HTTPS服务器发送了一个HTTP请求。现在我们将URL前面的http改成https再试一下。

在这里插入图片描述
3、如果你也能达到这个效果,说明influxd的ssl/tls认证已经开启,服务端和客户端传递的将会是加密数据而非明文数据。

9.4.5 记得更改已存在的telegraf配置和Scrapers

1、我们之前在WebUI中配置过Telegraf配置和指标的抓取任务,当时我们配的是http协议的URL ,现在也需要全部换成https。

在这里插入图片描述

9.5 其他生产安全考虑

1、HTPS是InfluxDB开发时,最基础也是最该考虑的安全措施,除此之外InfluxDB在设计时还为用户考虑了其他的安全措施,这里给大家简单地介绍一下,不再进行操作演示。

9.5.1 IP白名单

1、可以参考: https://docs.influxdata.com/influxdb/v2.4/security/enable-hardening/这个IP白名单并不是限制谁可以访问我的。
而是限制,我InfluxDB的查询可以访问谁的。因为FLUX语言具有发送网络请求的能力,你可以使用InfluxDB的相关配置限定,FLUX脚本可以向哪些地址发送请求。

9.5.2 机密管理

1、这一块的内容可以参考:https://docs.influxdata.com/influxdb/v2.4/security/secrets/

2、假如,我们的自己的应用程序和InfluxDB集成,而用到的一段FLUX脚本刚好需要使用某个第三方服务的用户名和密码(比如查询mysql)。

3、比如:

import "influxdata/influxdb/secrets"
import "sql"
sql.from(
driverName: "postgres",
dataSourceName: "postgresql://tony:11111111@localhost",
query:"SELECT * FROM example-table",
)

4、应用和InfluxDB服务之间走的也是HTTP通信,那么写在脚本中的用户名和密码是有可能泄漏的。这个时候,你可以把用户名和密码用键值的方式放到InfluxDB管理起来,然后,你就可以在脚本里用key的方式在InfluxDB里获取tony的用户名和密码了。

import "influxdata/influxdb/secrets"
import "sql"username = secrets.get(key: "POSTGRES_USERNAME")
password = secrets.get(key: "POSTGRES_PASSWORD")
sql.from(
driverName: "postgres",
dataSourceName: "mysql://${username}:${password}@localhost",
query:"SELECT * FROM example-table",
)

这样,我们Mysql的用户名和密码,就没有在网络上泄漏的风险了。

9.5.3 token管理

1、可以参考:https://docs.influxdata.com/influxdb/v2.4/security/tokens/

2、我们之前讲过在Web上去创建token。这里再给大家补充一下Token的类型。

  • 操作者Token。操作者令牌有跨越组织的管理权限,它对InfluxDB OSS 2.x上的所有组织和资源有完全的读写访问权限。某些操作必须需要操作员权限(比如 查看服务器配置)。操作者 Token是在InfluxDB初始化设置的过程中创建的。要想再创建一个操作者Token,就必须使用先有的操作者Token。

3、由于操作者Token对InfluxDB中所有的组织具有完全的读写访问权限。因此InfluxDB建议为每个组织创建一个全权限Token,并用这些Token来管理InfluxDB。这有助于防止组织间不小心误操作对方资源。

  • 全权限Token。对单个组织中所有资源的完全读取和写入访问权限
  • 读/写 Token。对组织中特定的存储桶进行读取和写入。

9.5.4 禁用部分开发功能

1、可以参考:https://docs.influxdata.com/influxdb/v2.4/security/disable-devel/

2、nfluxDB的API中,有一部分是为了方便外部系统去监控和观测InfluxDB的状态和性能的。如果你觉得这部分可能影响安全,那么你可以随时把它们禁了。

3、比如:

  • /metrics,上文给大家演示过,这里面有各种监控InfluxDB运行的指标
  • Web UI,用户的图形界面交互。
  • /debug/pprof,这个接口里面是Go语言程序的运行时指标,比如堆内存用了多少,有多少线程数等等。

9.6 如何使用API文档

9.6.1 查看API文档

1、可以直接在浏览器上访问 http(s)😕/localhost:8086/docs ,这样可以直接看到对应当前InfluxDB版本对应的API文档。

2、另外也可以在InfluxDB官网上查看在线文档 https://docs.influxdata.com/influxdb/v2.4/api/

9.6.2 测试工具与OpenAPI

1、如果你访问的是本地部署的 InfluxDB,那么访问http://localhost:8086还能下载相应的 OpenAPI文档。

在这里插入图片描述

2、访问http://localhost:8086/doc 页面的顶部有一个Download按钮,点一下。浏览器里会
说下载了一个json文件。

可以打开看一下,这其实是一个符合 OpenApi 3 .0格式的API文档定义文件。现在的ApiPost和Postman对这一格式都能自动生成接口测试。此处我们拿postman作为演示。

在这里插入图片描述

9.6.3 示例:Postman快速生成测试项目

9.6.3.1 使用postman导入openapi

1、在postman的左侧目录上方,有一个import按钮,点一下,会弹出一个对话框。

在这里插入图片描述

2、可以看到,这里他说支持上传OpenApi格式的文件。点击Upload Files按钮,选择刚才下载的swagger(2).json。

在这里插入图片描述

3、最后点击右下角的Import按钮。

在这里插入图片描述

9.6.3.2 查看导入效果

1、可以看到,InfluxDB 中的全部API已经导入到postman中了。

在这里插入图片描述
2、但是这里没有文档中的说明性文字了。找回他们的方法是在postman的左边找到draft,点击一下,再点击右方的
Documentation。如下图所示:

在这里插入图片描述
在这里插入图片描述
3、现在,你就可以看到既能阅读,又能立刻进行测试的API 文档了。

相关文章:

(八九)如何与InfluxDB交互InfluxDB HTTP API

以下内容来自 尚硅谷&#xff0c;写这一系列的文章&#xff0c;主要是为了方便后续自己的查看&#xff0c;不用带着个PDF找来找去的&#xff0c;太麻烦&#xff01; 第 8 章 前言&#xff1a;如何与InfluxDB交互 1、InfluxDB启动后&#xff0c;会向外提供一套HTTP API。外部程…...

excel 生成sql技巧

"update 表名 set 字段名"&A2&" where 字段名"&B2&";"...

2023牛客暑期多校训练营2(D/E/F/H/I/K)

目录 D.The Game of Eating E.Square F.Link with Chess Game H.0 and 1 in BIT I.Link with Gomoku K.Box D.The Game of Eating 思路&#xff1a;倒着贪心。因为正着贪会导致一种局面&#xff1a;我选了当前喜爱值最大的菜&#xff0c;但是就算我不选这个菜&#xff0…...

Ubuntu搭建Samba服务-学习记录

文章目录 Ubuntu安装Samba流程Samba配置文件Samba添加账户配置文件修改Samba服务控制设置开机自动启动通过systemctl 启动服务通过 rc.local 启动 Windows访问参考链接 当前文章仅用于记录&#xff0c;在 Ubuntu中安装使用Samba&#xff0c;在Windows访问 系统环境&#xff1a;…...

Unity Shader - if 和 keyword 的指令比较

文章目录 环境TestingIf4Sampleunity shaderlab 中的 TestingIf4Sample.shadergraphics analyzer 中的 TestingIf4Sample.glsl TestingKW4Sampleunity shaderlab 中的 TestingKW4Sample.shadergraphics analyzer 中的 TestingKW4Sample.glsl 比较 环境 Unity : 2020.3.37f1 Pi…...

【C++入门到精通】C++入门 —— 类和对象(了解类和对象)

目录 一、类和对象的历史由来 二、面向过程和面向对象的初步认识 三、类 1.引子 2.类的定义 3.类的访问限定符及封装 ⭕访问限定符 &#x1f6a9;访问限定符解释说明 &#x1f6a9;struct 与 class 的区别 1. 默认访问级别&#xff1a; 2. 继承权限&#xff08;默认的…...

DRS 迁移本地mysql 到华为云

准备工作&#xff1a; 源端的IP地址&#xff08;公网&#xff09;&#xff0c;用户明和密码。如果通过公网迁移&#xff0c;需要在安全组放通drs访问源端数据库的3306端口。目标端的IP地址&#xff0c;用户名和密码。 创建DRS迁移任务 创建迁移任务 登录华为云控制台。单击管…...

腾讯云 Cloud Studio 实战训练营——快速构建React完成点餐H5页面

目录 ​编辑 一、前言 1、什么是腾讯云 Cloud Studio 2、本文实验介绍 二、前期准备工作 1、注册 Cloud Studio 2、初始化工作空间 三、开发一个简版的点餐系统页面 1、安装依赖 1.1、安装 antd-mobile 1.2、安装 less 和 less-loader 1.3、暴露 webpack 配置文件 …...

在 React 中,props(属性)用于在组件之间传递数据

在 React 中&#xff0c;props&#xff08;属性&#xff09;用于在组件之间传递数据。它是父组件向子组件传递信息的一种方式&#xff0c;通过 props&#xff0c;父组件可以向子组件传递数据、回调函数、配置项等。 注意&#xff1a; props 是只读的&#xff0c;它的值由父组件…...

Unity实现camera数据注入RMP推送或轻量级RTSP服务模块

技术背景 随着技术的不断进步和应用的不断深化&#xff0c;Unity3D VR应用的前景非常广阔&#xff0c;它广泛应用于教育、医疗、军事、工业设计、虚拟数字人等多个领域。 教育领域&#xff1a;Unity3D VR技术可以用来创建虚拟现实教室&#xff0c;让学生能够身临其境地体验课…...

CVPR2023新作:3D感知的AI换脸算法

Title: 3D-Aware Face Swapping (3D感知的人脸交换) Affiliation: 上海交通大学人工智能研究所 Authors: Yixuan Li, Chao Ma, Yichao Yan, Wenhan Zhu, Xiaokang Yang Keywords: Face swapping, 3D human faces, Generative Adversarial Network, geometry Summary: (1):…...

Android安卓实战项目(4)---提供给阿尔兹海默症患者的APP(源码在文末)

Android安卓实战项目&#xff08;4&#xff09;—提供给阿尔兹海默症患者的APP&#xff08;源码在文末&#xff09; 一.项目运行介绍 1.大致浏览 &#xff08;1&#xff09;开机界面 &#xff08;2&#xff09;主界面 &#xff08;3&#xff09;Read Instructions界面 &…...

详解Mybatis之自动映射 自定义映射问题

编译软件&#xff1a;IntelliJ IDEA 2019.2.4 x64 操作系统&#xff1a;win10 x64 位 家庭版 Maven版本&#xff1a;apache-maven-3.6.3 Mybatis版本&#xff1a;3.5.6 文章目录 一、Mybatis中的自动映射是什么&#xff1f;二、Mybatis中的自定义映射是什么&#xff1f;三、为什…...

shiro的优点

shiro是一个强大的java安全框架&#xff0c;它的优点有以下&#xff1a; shiro就是权限管理&#xff1a;包括两部分&#xff1a;身份验证、授权 一、它提供了身份验证、授权、密码和会话管理等功能&#xff0c;可以满足各种应用程序的安全需求。 身份认证就是&#xff1a;验证是…...

使用分布式HTTP代理爬虫实现数据抓取与分析的案例研究

在当今信息爆炸的时代&#xff0c;数据已经成为企业决策和发展的核心资源。然而&#xff0c;要获取大规模的数据并进行有效的分析是一项艰巨的任务。为了解决这一难题&#xff0c;我们进行了一项案例研究&#xff0c;通过使用分布式HTTP代理爬虫&#xff0c;实现数据抓取与分析…...

Linux操作系统运维常用集合

目录 1、服务器磁盘查询、管理常见命令&#xff1a; 2、Centos系统挂载移动硬盘或U盘 3、Linux系统磁盘管理方式 4、Linux系统下挂载磁盘格式详解 1、服务器磁盘查询、管理常见命令&#xff1a; lsblk      查看分区和磁盘df -h   …...

UE4/5C++多线程插件制作(十四、MTPAbandonable)

目录 MTPAbandonable h实现 cpp实现 MTPMarco.h 首先是异步任务的宏定义部分:...

集装箱装卸作业相关的知识-Part1

1.角件 Corner Fitting of Container or called Corner Casting. there are eigth of it of one container. 国家标准|GB/T 1835-2006https://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcnoD35857F2200FA115CAA217A114F5EF12 中国的国标&#xff1a;GB/T 1835-2006《系列1集…...

BurpSuite超详细安装教程-功能概述-配置-使用教程---(附下载链接)

一、介绍 BurpSuite是渗透测试、漏洞挖掘以及Web应用程序测试的最佳工具之一&#xff0c;是一款用于攻击web 应用程序的集成攻击测试平台&#xff0c;可以进行抓包、重放、爆破&#xff0c;包含许多工具&#xff0c;能处理对应的HTTP消息、持久性、认证、代理、日志、警报。 二…...

不同局域网下使用Python自带HTTP服务进行文件共享「端口映射」

文章目录 1. 前言2. 视频教程3. 本地文件服务器搭建3.1 python的安装和设置3.2 cpolar的安装和注册 4. 本地文件服务器的发布4.1 Cpolar云端设置4.2 Cpolar本地设置 5. 公网访问测试6. 结语 1. 前言 数据共享作为和连接作为互联网的基础应用&#xff0c;不仅在商业和办公场景有…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...