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

【论文笔记】Attention Prompting on Image for Large Vision-Language Models

🍎个人主页:小嗷犬的个人主页
🍊个人网站:小嗷犬的技术小站
🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。


基本信息

标题: Attention Prompting on Image for Large Vision-Language Models
作者: Runpeng Yu, Weihao Yu, Xinchao Wang
发表: ECCV 2024
arXiv: https://arxiv.org/abs/2409.17143

基本信息

摘要

与大型语言模型(LLMs)相比,大型视觉语言模型(LVLMs)也能接受图像作为输入,从而展现出更多有趣的涌现能力,并在各种视觉语言任务上表现出令人印象深刻的表现。

受LLMs中的文本提示启发,视觉提示已被探索以增强LVLM感知视觉信息的能力。

然而,之前的视觉提示技术仅处理视觉输入,不考虑文本查询,限制了模型遵循文本指令完成任务的能力。

为了填补这一空白,在这项工作中,我们提出了一种名为Attention Prompting on ImageAPI)的新提示技术,它简单地在原始输入图像上叠加一个由文本查询引导的注意力热图,从而有效地增强了LVLM在各种任务上的表现。

具体来说,我们使用类似于CLIP的辅助模型根据文本查询生成输入图像的注意力热图。

然后,热图简单地乘以原始图像的像素值,以获得LVLM的实际输入图像。

在各个视觉语言基准上的大量实验验证了我们的技术的有效性。

例如,API在MM-Vet和LLaVA-Wild基准上分别将LLaVA-1.5提高了3.8%和2.9%。

主要贡献

  • 我们发现,当前的视觉提示技术严重修改输入图像,而没有考虑文本查询,限制了模型准确遵循指令的能力。
  • 为了填补这一空白,我们提出了API方法,探讨如何从各种类型的VLM模型中提取有价值的归因图,并将它们作为视觉提示来提供视觉感知的线索,从而提高性能。
  • 我们的实验证明了该方法在各种数据集上对广泛VLM模型的有效性。此外,我们的方法在解决幻觉问题上也已被证明是有效的。

方法

Attention Prompting on Image

使用一个辅助的大型视觉语言模型结合输入图像和文本提示,生成一个由文本查询引导的注意力热图,再将注意力热图叠加在原始图像上。

Obtaining Attribution Map from CLIP

CLIP模型 g clip g_{\text{clip}} gclip 由一个视觉编码器和一个文本编码器组成,在隐空间中计算输入图像和文本之间的相似度 s i m ( I ^ , T ^ ) sim(\hat{I}, \hat{T}) sim(I^,T^),其中 I ^ = g clip img ( I ) \hat{I} = g_{\text{clip}}^{\text{img}}(I) I^=gclipimg(I) T ^ = g clip text ( T ) \hat{T} = g_{\text{clip}}^{\text{text}}(T) T^=gcliptext(T)。该相似度用于度量整张图像和文本之间的相关性。为了获得文本查询到每个图像patch的相关度图,我们需要对图像级别的相似度特征 I ^ \hat{I} I^ 进行分解,以此得到每个图像patch特征与文本特征 T ^ \hat{T} T^ 的相似度。

由于存在残差连接,视觉编码器的最终输出 I ^ \hat{I} I^ 实际上包括了每一层的影响。因此, I ^ \hat{I} I^ 可以表示为每一层类别标记位置值的线性组合:

I ^ = L ( [ Z cls 0 ] ) + ∑ l = 1 L L ( [ MSA ⁡ l ( Z l − 1 ) ] cls ) + ∑ l = 1 L L ( [ MLP ⁡ l ( Z ^ l ) ] cls ) \hat{I} = \mathcal{L}\left(\left[Z_{\text{cls}}^{0}\right]\right) + \sum_{l=1}^{L}\mathcal{L}\left(\left[\operatorname{MSA}^{l}\left(Z^{l-1}\right)\right]_{\text{cls}}\right) + \sum_{l=1}^{L}\mathcal{L}\left(\left[\operatorname{MLP}^{l}\left(\hat{Z}^{l}\right)\right]_{\text{cls}}\right) I^=L([Zcls0])+l=1LL([MSAl(Zl1)]cls)+l=1LL([MLPl(Z^l)]cls)

L L L 表示视觉编码器中Transformer层的数量,其中 MSA ⁡ \operatorname{MSA} MSA MLP ⁡ \operatorname{MLP} MLP 分别代表Transformer中的多头自注意力结构和多层感知器结构; L \mathcal{L} L 代表包括全连接层和Transformer结构之后计算相似度得分之前执行的归一化操作的线性变换; Z l Z^l Zl 表示第 l l l 个Transformer层的输入token序列; [ Z ] cls [Z]_\text{cls} [Z]cls 表示token序列 Z Z Z 中cls token的值。这些输出的cls token通过残差连接聚合,形成视觉编码器的输出。

在这些求和项中,MSA最后几层的输出起着决定性作用,而来自浅层MSA层输出、MLP输出以及与输入图像无关的 Z cls 0 Z^0_\text{cls} Zcls0 项的贡献可以视为对最终相似度测量的忽略不计。因此,相似度 s i m ( I ^ , T ^ ) sim(\hat{I}, \hat{T}) sim(I^,T^) 可以通过计算 T ^ \hat{T} T^ 与深层MSA的聚合输出的相似度来近似:

sim ⁡ ( I ^ , T ^ ) ≈ sim ⁡ ( ∑ l = L ′ L L ( [ MSA ⁡ l ( Z l − 1 ) ] cls ) , T ^ ) \operatorname{sim}(\hat{I}, \hat{T}) \approx \operatorname{sim}\left(\sum_{l=L^{\prime}}^{L}\mathcal{L}\left(\left[\operatorname{MSA}^{l}\left(Z^{l-1}\right)\right]_{\text{cls}}\right), \hat{T}\right) sim(I^,T^)sim(l=LLL([MSAl(Zl1)]cls),T^)

其中 L ′ L^{\prime} L 代表预定义的起始层索引。为进一步计算文本查询对每个patch的归因,我们展开多头自注意力机制的操作:

[ MSA ⁡ l ( Z l − 1 ) ] c l s = ∑ h H [ A ( l , h ) V ( l , h ) W ( l , h ) ] c l s + B l = ∑ t = 1 T [ ∑ h H A c l s , t ( l , h ) V t , : ( l , h ) W ( l , h ) + 1 H T B l ] ⏟ The MSA output corresponding to the  t -th patch(token) ≜ ∑ t = 1 T η t l \begin{align*} {\left[\operatorname{MSA}^{l}\left(Z^{l-1}\right)\right]_{cls}} &= \sum_{h}^{H}\left[A^{(l, h)} V^{(l, h)} W^{(l, h)}\right]_{cls} + B^{l} \\ &= \sum_{t=1}^{T} \underbrace{\left[\sum_{h}^{H} A_{cls, t}^{(l, h)} V_{t,:}^{(l, h)} W^{(l, h)} + \frac{1}{H T} B^{l}\right]}_{\text{The MSA output corresponding to the }t\text{-th patch(token)}} \triangleq \sum_{t=1}^{T} \eta_{t}^{l} \end{align*} [MSAl(Zl1)]cls=hH[A(l,h)V(l,h)W(l,h)]cls+Bl=t=1TThe MSA output corresponding to the t-th patch(token) [hHAcls,t(l,h)Vt,:(l,h)W(l,h)+HT1Bl]t=1Tηtl

在第 l l l 层中, A ( l , h ) A(l,h) A(l,h) V ( l , h ) V(l,h) V(l,h) 分别是对应于第 h h h 个注意力头的注意力图和Value矩阵; W ( l , h ) W(l,h) W(l,h) 是第 l l l 层中用于合并多个注意力头的权重矩阵,对应于第 h h h 个头; B ( l ) B(l) B(l) 是第 l l l 层中用于合并多个注意力头的偏置矩阵; A c l s , t ( l , h ) A_{cls, t}^{(l, h)} Acls,t(l,h) 表示cls token对第 t t t 个token的注意力值; V t , : ( l , h ) V_{t,:}^{(l,h)} Vt,:(l,h) 表示 V ( l , h ) V(l,h) V(l,h) 的第 t t t 行; H H H T T T 分别是注意力头的数量和token的数量;而值 T T T 等于patch数 P × P + 1 P \times P + 1 P×P+1

因此,第 t t t 个patch的特征可以表示为 ψ t ≜ ∑ l = L ′ L L ( η t l ) \psi_{t}\triangleq\sum_{l=L^{\prime}}^{L}\mathcal{L}\left(\eta_{t}^{l}\right) ψtl=LLL(ηtl),我们可以计算文本查询与第 t t t 个图像patch之间的相似性。相应地,归因图 Ψ c l s ∈ R P × P \Psi^{cls} \in \mathbb{R}^{P \times P} ΨclsRP×P 被定义为:

Ψ i , j c l s ≜ s i m ( ψ t , T ^ ) , where  t = 1 + j + P ∗ ( i − 1 ) . \Psi^{cls}_{i,j} \triangleq sim(\psi_{t}, \hat{T}), \quad\text{where}\ t = 1 + j + P * (i - 1). Ψi,jclssim(ψt,T^),where t=1+j+P(i1).

通过对 cls token进行分解,我们可以识别哪些patch与查询更为相关。当查询包含特定实体时,这种方法特别有效,允许进行精确的定位。然而,在复杂的视觉问答(VQA)任务中,查询中往往没有明确提及实体,或者回答问题所涉及的逻辑和分析过程可能依赖于查询中没有明确提及的实体。为了解决这个问题,我们还定义了另一个互补归因图 Ψ c o m p \Psi^{comp} Ψcomp。该图旨在捕捉与查询具有潜在或隐含相关性的区域。

我们实验观察到,在CLIP的视觉Transformer中,查询特征 T ^ \hat{T} T^ 与最终层中除cls token外的token的相似度得分可以(反向)选择重要区域。对应图像背景或大块单色区域的patch与 T ^ \hat{T} T^ 的相似度得分显著高于代表特定实体(这些实体可能不一定出现在查询中)的token。一个可能的解释是,这些“空白”token本身缺乏有价值的信息,被Transformer视为寄存器。Transformer最初利用它们存储来自其他token的信息,随后通过注意力机制过滤和汇总这些存储的信息到cls token,以形成最终的预测。因此,与 T ^ \hat{T} T^ 具有高相似度得分的除cls token外的token,代表信息含量低的patch,可以不予考虑。我们定义互补归因图如下:

Ψ i , j c o m p ≜ 1 − s i m ( L ( Z t L ) , T ^ ) , where  t = 1 + j + P ∗ ( i − 1 ) . \Psi^{comp}_{i,j} \triangleq 1 - sim(\mathcal{L}(Z^L_t), \hat{T}), \quad\text{where}\ t = 1 + j + P * (i - 1). Ψi,jcomp1sim(L(ZtL),T^),where t=1+j+P(i1).

Z t L Z^L_t ZtL 表示最后一个Transformer层的第 t t t 个输出token。互补归因图与相似度成反比,表明缺乏信息的patch被忽略,仅保留具有潜在相关性的patch。

因此,我们获得了两张相互补充的归因图: Ψ c l s \Psi^{cls} Ψcls 明确识别与查询实体直接相关的区域,但可能遗漏一些可能相关的区域。 Ψ c o m p \Psi^{comp} Ψcomp 同样识别所有可能相关的区域,但缺乏特异性,无法突出显示与查询实体直接相关的区域。

通过以下操作整合两个归因图,我们得到CLIP的最终归因图:

Ψ i , j ≜ Ψ i , j c l s + Ψ i , j c o m p − Ψ i , j c l s ∗ Ψ i , j c o m p \Psi_{i,j} \triangleq \Psi^{cls}_{i,j} + \Psi^{comp}_{i,j} - \Psi^{cls}_{i,j} * \Psi^{comp}_{i,j} Ψi,jΨi,jcls+Ψi,jcompΨi,jclsΨi,jcomp

这种整合可以被视为一种soft OR操作。

Obtaining Attribution Map from LLaVA

LLaVA模型是一种MLLM,它利用多头自注意力机制从文本查询和图像patch中提取信息,预测后续的token。给定长度为 N N N 的文本token序列 Z text = { Z t text } t = 1 N Z^\text{text} = {\{Z^\text{text}_t \}}_{t=1}^{N} Ztext={Zttext}t=1N,以及长度为 P × P P \times P P×P 的图像token序列 Z img = { Z t img } t = 1 P × P Z^\text{img} = {\{Z^\text{img}_t \}}_{t=1}^{P \times P} Zimg={Ztimg}t=1P×P,LLaVA生成一个长度为 M M M 的新token序列 Z out = { Z t out } t = 1 M Z^\text{out} = {\{Z^\text{out}_t \}}_{t=1}^{M} Zout={Ztout}t=1M。我们直接使用token Z t out Z^\text{out}_t Ztout 与每个图像token之间的注意力权重作为 Z t out Z^\text{out}_t Ztout 对该图像patch的归因。类似于CLIP模型的策略,我们选择深层的注意力图来提取注意力权重。最终的归因图在整个生成的token序列和所有注意力头之间平均。形式上,归因图 Ψ \Psi Ψ 定义为:

Ψ i , j ≜ 1 M H ∑ m = 1 M ∑ h = 1 H A m , t ( L ˉ , h ) , where  t = j + P ∗ ( i − 1 ) . \Psi_{i, j} \triangleq \frac{1}{M H} \sum_{m=1}^{M} \sum_{h=1}^{H} A_{m, t}^{(\bar{L}, h)}, \quad\text{where}\ t = j + P * (i - 1). Ψi,jMH1m=1Mh=1HAm,t(Lˉ,h),where t=j+P(i1).

在定义中, A ( L ˉ , h ) A^{(\bar{L}, h)} A(Lˉ,h) 是第 L ˉ \bar{L} Lˉ 层的第 h h h 个头对应的注意力图,其中 L ˉ \bar{L} Lˉ 是一个超参数集合;为了符号的简洁性,此处 A ( L ˉ , h ) A^{(\bar{L}, h)} A(Lˉ,h) 是整个注意力图的一个子矩阵,仅包括 Z out Z^\text{out} Zout Z img Z^\text{img} Zimg 之间的交叉注意力; A m , t ( L ˉ , h ) A_{m, t}^{(\bar{L}, h)} Am,t(Lˉ,h) 仍然表示从第 m m m 个token到第 t t t 个token的注意力值。

From Token Space to Pixel Space

Ψ ∈ R P × P \Psi \in \mathbb{R}^{P \times P} ΨRP×P 的归因图在token空间中生成。我们首先将其调整回像素空间以获得原始热图 Φ ^ ≜ Resize ⁡ ( Ψ ) \hat{\Phi} \triangleq \operatorname{Resize}(\Psi) Φ^Resize(Ψ)。由于patch的方形形状, Φ ^ \hat{\Phi} Φ^ 中的掩码模式也呈矩形。为了减轻矩形掩码模式与物体不规则形状不匹配的问题,我们应用均值滤波器以获得最终热图 Φ ≜ M e a n k ⁡ ( Φ ^ ) \Phi \triangleq \operatorname{Mean_k}(\hat{\Phi}) ΦMeank(Φ^),其中 k k k 是滤波器的核大小。然后,将最终热图 Φ \Phi Φ 通过将其用作 alpha 通道叠加到原始图像上,得到标注后的最终图像 I a I^a Ia

实验

主实验

Comparison of our method with previous textual and visual prompting methods for various LVLMs

与先前针对各种LVLMs的文本和视觉提示方法的比较。

消融实验

Ablation study on the auxiliary VLM Scale

关于辅助VLM Scale的消融实验。

Ablation study on the mean filter kernel size

关于均值滤波器核大小的消融实验。

Ablation study on the Transformer layer for attribution map extraction

关于用于归因图提取的Transformer层的消融实验

The comparison between our method and textual self-reflection method and their combination

本文方法与文本self-reflection方法的比较及结合。

The performance of our method on hallucination datasets

本文方法在幻觉数据集上的表现。

总结

在这项工作中,我们介绍了一种名为Attention Prompting on Image(API)的新型视觉提示技术,该技术结合了一个辅助的LVLM,根据文本查询在图像上生成注意力热图。

我们广泛的实验证明了我们的提示方法在不同基准上对不同LVLM的优势。

此外,我们的方法为使用视觉信号进行LVLM集成和LVLM自我反思提供了新的见解。

相关文章:

【论文笔记】Attention Prompting on Image for Large Vision-Language Models

🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。 基本信息 标题: Attention Prompting on I…...

VScode设置系统界面字体

现象: 系统界面字体太大,导致菜单栏字体显示不全,每次使用都要先点然后才能打开终端和帮助 缩小字体应该就可以实现全部都看到的效果 步骤 Window: Zoom Level 调整所有窗口的默认缩放级别。大于“0”的每个增量(例如“1”&…...

Java中常见的异常类型

1、Exception和Error有什么区别? 首先Exception和Error都是继承于Throwable类,在Java中只有Throwable类型的实例才可以被抛出(throw)或者捕获(catch),它是异常处理机制的基本组成类型。 Except…...

Java学习Day58:相声二人组!(项目统计数据Excel图表导出)

<!DOCTYPE html> <html xmlns"http://www.w3.org/1999/html"><head><!-- 页面meta --><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><title>瑞通健康</tit…...

springboot 自动装配和bean注入原理及实现

装配&#xff1a;创建bean&#xff0c;并加入IOC容器。 注入&#xff1a;创建bean之间的依赖关系。 1、类自动装配 SpringBoot 自动装配使得开发人员可以轻松地搭建、配置和运行应用程序&#xff0c;而无需手动管理大部分的 bean 和配置。 Spring Boot 的自动装配机制与模块…...

解决Redis缓存穿透(缓存空对象、布隆过滤器)

文章目录 背景代码实现前置实体类常量类工具类结果返回类控制层 缓存空对象布隆过滤器结合两种方法 背景 缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#xff0c;这样缓存永远不会生效&#xff0c;这些请求都会打到数据库 常见的解决方案有两种&#xff0c;分别…...

初探Flink的序列化

Flink中的序列化应用场景 程序通常使用(至少)两种不同的数据表示形式[2]&#xff1a; 1. 在内存中&#xff0c;数据保存在对象、结构体、列表、数组、哈希表和树等结构中。 2. 将数据写入文件或通过网络发送时&#xff0c;必须将其序列化为字节序列。 从内存中的表示到字节序列…...

QT 机器视觉 (3. 虚拟相机SDK、测试工具)

本专栏从实际需求场景出发详细还原、分别介绍大型工业化场景、专业实验室场景、自动化生产线场景、各种视觉检测物体场景介绍本专栏应用场景 更适合涉及到视觉相关工作者、包括但不限于一线操作人员、现场实施人员、项目相关维护人员&#xff0c;希望了解2D、3D相机视觉相关操作…...

1分钟解决Excel打开CSV文件出现乱码问题

一、编码问题 1、不同编码格式 CSV 文件有多种编码格式&#xff0c;如 UTF - 8、UTF - 16、ANSI 等。如果 CSV 文件是 UTF - 8 编码&#xff0c;而 Excel 默认使用的是 ANSI 编码打开&#xff0c;就可能出现乱码。例如&#xff0c;许多从网络应用程序或非 Windows 系统生成的 …...

基于SpringBoot+Vue的仓库管理系统【前后端分离】

基于SpringBootVue的仓库管理系统设计与实现 摘要 仓库管理系统在现代企业物流中具有重要作用&#xff0c;能够有效提高库存管理效率&#xff0c;优化资源配置。本系统采用Spring Boot作为后端框架&#xff0c;Vue作为前端框架&#xff0c;通过前后端分离的开发模式构建一个现代…...

vue和django接口联调

vue访问服务端接口 配置跨域 前端跨域 打开vite.config.js&#xff0c;在和resolve同级的地方添加配置。 proxy代表代理的意思 "/api"是以/api开头的路径走这个配置 target代表目标 changeOrigin: true,是开启跨域请求 rewrite是编辑路径。 (path) > pa…...

2-141 怎么实现ROI-CS压缩感知核磁成像

怎么实现ROI-CS压缩感知核磁成像&#xff0c;这个案例告诉你。基于matlab的ROI-CS压缩感知核磁成像。ROI指在图像中预先定义的特定区域或区域集合&#xff0c;选择感兴趣的区域&#xff0c;通过减少信号重建所需的数据来缩短信号采样时间&#xff0c;减少计算量&#xff0c;并在…...

开源库 FloatingActionButton

开源库FloatingActionButton Github:https://github.com/Clans/FloatingActionButton 这个库是在前面这个库android-floating-action-button的基础上修改的&#xff0c;增加了一些更强大和实用的特性。 特性&#xff1a; Android 5.0 以上点击会有水波纹效果 可以选择自定义…...

技术选型不当对项目的影响与补救措施

在项目管理中&#xff0c;初期技术选型与项目需求不匹配的情况并不罕见&#xff0c;这可能导致项目延误、成本增加和最终成果的不理想。补救的关键措施包括&#xff1a;重新评估技术选型、加强团队沟通、实施有效的需求管理以及建立持续的反馈机制。其中&#xff0c;重新评估技…...

Spring的核心类: BeanFactory, ApplicationContext 笔记241103

Spring的核心类: BeanFactory, ApplicationContext, ConfigurableApplicationContext, WebApplicationContext, WebServerApplicationContext, ClassPathXmlApplicationContext, FileSystemXmlApplicationContext, XmlWebApplicationContext, AnnotationConfigServletWebServer…...

UE5移动端主要对象生命周期及监听

1、GameInstance 1、首先加载GameInstance,全局唯一,切换Map也是唯一的,用于做一些全局操作,比如监听Map加载,监听App进入前台、退出后台 // Fill out your copyright notice in the Description page of Project Settings.#include "Core/Base/MyGameInstance.h&q…...

LLM | 论文精读 | CVPR | SelTDA:将大型视觉语言模型应用于数据匮乏的视觉问答任务

论文标题&#xff1a;How to Specialize Large Vision-Language Models to Data-Scarce VQA Tasks? Self-Train on Unlabeled Images! 作者&#xff1a;Zaid Khan, Vijay Kumar BG, Samuel Schulter, Xiang Yu, Yun Fu, Manmohan Chandraker 期刊&#xff1a;CVPR 2023 DOI…...

kafka里的consumer 是推还是拉?

大家好&#xff0c;我是锋哥。今天分享关于【kafka里的consumer 是推还是拉&#xff1f;】面试题&#xff1f;希望对大家有帮助&#xff1b; kafka里的consumer 是推还是拉&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在Kafka中&#xff0c;消费者&…...

针对物联网边缘设备基于EIT的手部手势识别的1D CNN效率增强的组合模型压缩方法

论文标题&#xff1a;Combinative Model Compression Approach for Enhancing 1D CNN Efficiency for EIT-based Hand Gesture Recognition on IoT Edge Devices 中文标题&#xff1a;针对物联网边缘设备基于EIT的手部手势识别的1D CNN效率增强的组合模型压缩方法 作者信息&a…...

商品满减、限时活动、折扣活动的计算最划算 golang

可以对商品的不同活动&#xff08;如满减、限时价和折扣&#xff09;进行分组&#xff0c;并在购物车中显示各个活动标签下的最优价格组合。以下代码将商品按活动类别进行分组计算&#xff0c;并输出在购物车中的显示信息。 package mainimport ("fmt""math&qu…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

tomcat入门

1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效&#xff0c;稳定&#xff0c;易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...

适应性Java用于现代 API:REST、GraphQL 和事件驱动

在快速发展的软件开发领域&#xff0c;REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名&#xff0c;不断适应这些现代范式的需求。随着不断发展的生态系统&#xff0c;Java 在现代 API 方…...