【论文速读】Optimization-based Prompt Injection Attack to LLM-as-a-Judge

基于优化的提示词注入攻击

  • 摘要
  • 引言
  • 问题描述
    • LLM-as-a-judge
    • 威胁模型
    • 攻击者知道什么
  • JUDGEDECEIVER 细节
    • 概述
    • 生成影子候选回复
    • 公式化为优化问题
      • Target-aligned generation loss
      • Target-enhancement loss
      • Adversarial perplexity loss
      • 优化问题
    • 求解优化问题

摘要

LLM-as-a-Judge 利用一个大型语言模型(LLM)从一组候选答案中选择给定问题的最佳回答。LLM-as-a-Judge 有许多应用,例如 LLM 驱动的搜索、带有 AI 反馈的强化学习(RLAIF)和工具选择。在这项工作中,提出了 JudgeDeceiver,这是一种针对 LLM-as-a-Judge 的基于优化的提示注入攻击。JudgeDeceiver 将一个精心设计的序列注入到攻击者控制的候选回答中,使得 LLM-as-a-Judge 无论其他候选回答是什么,都会为攻击者选择的问题选择该候选回答。具体来说,我们将寻找这样的序列作为一个优化问题,并提出了一种基于梯度的方法来近似解决它。我们广泛的评估表明,JudgeDeceiver 非常有效,并且比现有的手动制作注入序列的提示注入攻击和扩展到我们问题的越狱攻击更有效。我们还通过三个案例研究,即 LLM 驱动的搜索、RLAIF 和工具选择,展示了 JudgeDeceiver 的有效性。此外,我们考虑了包括已知答案检测、困惑度检测和困惑度窗口检测在内的防御措施。我们的结果表明,这些防御措施是不足够的,突出了开发新的防御策略的迫切需要。

引言

现有的提示注入和越狱攻击对 LLM-as-a-Judge 的效果不佳,如第 4 节详细说明。这是因为现有的提示注入攻击依赖于基于启发式手动制作的注入序列。此外,现有的提示注入和越狱攻击假设攻击者知道输入到 LLM 的全部数据,而 LLM-as-a-Judge 面临一个独特的挑战:攻击者不知道除了目标回应之外的候选回应集。这种技术差异为 LLM-as-a-Judge 提示注入创造了不同的挑战,我们的工作解决了这个问题。

提出了 JudgeDeceiver,这是针对 LLM-as-a-Judge 的首个基于优化的提示注入攻击。这个注入序列被添加到提交给 LLM-as-a-Judge 的目标回答中,从而误导法官倾向于这个回答,如图 1 所示。
在这里插入图片描述
注入的目标回答可以抵御 LLM-as-a-Judge 采用的位置交换防御机制

首先构建一个影子候选回答数据集,旨在模拟攻击场景,从而使 JudgeDeceiver 能够生成具有更好泛化的注入序列。攻击目标是操纵 LLM-as-a-Judge 生成一个明确的攻击目标输出,例如“输出(索引)更好”,其中“索引”指的是目标回答的特定索引。为了实现这一点,我们提出了一个目标对齐生成损失(target-aligned generation loss),旨在最小化受注入序列影响的输出与定义的攻击目标输出之间的差异。

然而,随着影子候选回答数量的增加,一个关键挑战出现了:由于目标回答的随机位置索引,优化变得更加复杂。为了应对这一挑战,我们提出了一个额外的目标增强损失项(target-enhancement
loss term)在优化问题中,它专注于最大化输出中目标回答的索引标记的可能性

这个损失函数确保了无论目标回答的位置索引如何,评估结果都与我们预定义的攻击目标紧密对齐。具体来说,这个损失项专注于攻击目标的位置特征,并减轻了回答位置的潜在混杂效应,从而增强了我们的攻击对位置偏见的一致性和鲁棒性。

此外,我们引入了一个对抗性困惑度损失(adversarial perplexity loss),以**减少注入序列的困惑度,这对抗基于困惑度检测的潜在防御。**注入序列的生成是通过最小化三个损失项的加权和来表述的,我们提出了一种基于梯度下降的方法来解决优化问题。

探索了针对judgedeception的三种基于检测的防御:已知答案检测[43]、困惑(PPL)检测[32]和困惑窗口(PPL- w)检测[32]。特别是,已知答案检测无法检测包含注入序列的目标响应。PPL检测和PPL- w检测都能检测到注入序列的部分目标响应,但仍有很大一部分缺失。例如,当LLM为Llama-3-8B时,当PPL-W错误地将<1%的干净响应检测为目标响应时,注入序列的70%的目标响应未检测到。

贡献:

  • 提出了第一个针对LLM-as-a-Judge的基于优化的提示注入攻击——judgedeception

问题描述

LLM-as-a-judge

简单点就是按如下方法组织提示词,针对question q q q, 从response r i , { i = 1 , . . . , n } r_i, \{i=1,...,n\} ri,{i=1,...,n}中选择一个最佳回答,返回索引。
在这里插入图片描述

威胁模型

攻击者的目标如下所述:给定一个目标问题 q q q 和一组候选回答 R R R,攻击者从 R R R 中选择一个目标回答 r t r_t rt

这个选择,记作对 q , r t q, r_t q,rt,构成了攻击者的目标。攻击者旨在欺骗 LLM-as-a-Judge,使其在 R R R 中选择目标回答 r t r_t rt作为最佳回答,即使它对 q q q是不准确甚至恶意的。实现这种欺骗的核心是向目标回答 r t r_t rt注入一个序列 δ \delta δ,构造这个序列是为了利用 LLM 的统计依赖性和对微妙的语言和上下文异常的脆弱性来操纵其评估。这里, δ = T 1 , T 2 , … , T l \delta = T_1, T_2, \ldots, T_l δ=T1,T2,,Tl 包含 l l l个标记,表示应用于原始目标回答 r t r_t rt 的注入序列,旨在扭曲 LLM 的评估准确性。函数 A ( ⋅ ) A(\cdot) A()表示将 δ \delta δ以各种形式附加到 r t r_t rt的过程:它可以作为后缀、前缀或前后缀的组合添加到目标回答中。因此,攻击者目标的表述可以定义为:

E p header ⊕ q ⊕ r 1 ⊕ ⋯ ⊕ A ( r t , δ ) ⊕ ⋯ ⊕ r n ⊕ p trailer = o t Ep_{\text{header}} \oplus q \oplus r_1 \oplus \cdots \oplus A(r_t, \delta) \oplus \cdots \oplus r_n \oplus p_{\text{trailer}} = o_t Epheaderqr1A(rt,δ)rnptrailer=ot

其中 o t o_t ot 代表目标输出(攻击者期望的 LLM-as-a-Judge 的判断), t t t 是输入提示中目标回答的索引。LLM-as-a-Judge 在注入序列 δ \delta δ后选择回答 r t r_t rt 作为最优选择。

攻击者知道什么

假设攻击者知道要操作的目标问题-响应对。考虑了LLM-as-a-Judge使用开源llm的攻击场景。攻击者无法访问与目标响应一起评估的候选响应𝑅的完整集合,也不知道这些响应的总数𝑛。此外,攻击者不知道LLM输入提示符中目标响应的特定嵌入位置索引。

认为攻击者可以操纵由LLM-as-a-Judge评估的目标响应。攻击者也是LLM-as-a-Judge的用户,可以通过迭代测试了解LLM-as-a-Judge的输出模板。通过利用该模板,攻击者可以设计期望的目标,这可以作为制定优化问题以生成最优注入序列 δ \delta δ 的基础。

JUDGEDECEIVER 细节

概述

与以往的手动提示注入攻击方法不同,judgedeception使用了一种新的目标优化函数来生成注入序列。该优化函数包括三个损失组成部分:目标对齐生成损失(target-aligned generation loss)、目标增强损失(target enhancement loss)和对抗困惑损失(adversarial perplexity loss)。每个组件处理攻击的不同方面,总体目标是最小化它们的加权和。此外,提出了一种利用梯度下降和位置自适应的逐步算法来求解优化函数。

生成影子候选回复

如前文小节 2.2 所述,攻击者面临一个难题,即很难直接获取由大模型判别器(LLM-as-a-Judge)评估的真实候选响应。为了解决此问题,我们借鉴了先前研究中的一些见解 [33, 57, 66],构建了一组用于模拟潜在攻击场景的“影子候选响应”(shadow candidate response)。对于每一个目标问题 q q q,我们使用一个公开可访问的语言模型,记为 L L L,生成 N N N 个影子响应。为确保这些响应的多样性和全面性,我们使用一个重构语言模型(如 GPT-4)对问题 q q q 生成多个不同的提示语。这一过程涉及将一个手动设计的提示语转化为一组多样化的提示语,记为 P g e n = { p 1 , p 2 , ⋅ ⋅ ⋅ , p N } P_{gen} = \{ p_1, p_2, ···, p_N \} Pgen={p1,p2,⋅⋅⋅,pN},其中的示例见附录 A.5 中的表 14。集合 P g e n P_{gen} Pgen 中的每个提示语与目标问题 q q q 结合生成一个多样化的“影子数据集”(shadow dataset)候选响应,记作 D s = L ( P g e n , q ) D_s = L(P_{gen}, q) Ds=L(Pgen,q)。因此,与目标问题 q q q 相关的影子候选响应数据集可以表示为 D s = { s 1 , s 2 , ⋅ ⋅ ⋅ , s N } D_s = \{ s_1, s_2, ···, s_N \} Ds={s1,s2,⋅⋅⋅,sN}。该影子候选响应数据集为攻击准备阶段的关键步骤,它使得攻击者在不访问真实候选响应的情况下分析大模型判别器的行为,从而生成一个用于针对性和广义化提示注入攻击的注入序列。

公式化为优化问题

发起攻击时,攻击者无法完全获取关于候选响应数量和内容的详细信息,以应对此限制,我们构建了一个候选响应集 R s = { s 1 , ⋅ ⋅ ⋅ , s t − 1 , r t , s t + 1 , ⋅ ⋅ ⋅ , s m } R_s = \{ s_1, ···, s_{t-1}, r_t, s_{t+1}, ···, s_m \} Rs={s1,⋅⋅⋅,st1,rt,st+1,⋅⋅⋅,sm},其中包含目标响应 r t r_t rt 和从影子候选响应数据集 D s D_s Ds 中随机选择的 ( m − 1 ) (m - 1) (m1) 个响应。数据集 R s R_s Rs 为在缺乏真实候选响应的完整信息的情况下,制定优化问题提供了基础。为了增强提示注入攻击对不同真实候选响应的泛化能力,我们在多个影子候选响应集 R s ( i ) i = 1 M { R^{(i)}_s }^M_{i=1} Rs(i)i=1M 上优化注入序列 δ \delta δ。如方程 (2) 所述,有效攻击的目标是增加“大模型判别器”生成攻击者期望的目标输出的可能性,即识别目标响应为最匹配的响应。该目标可通过以下函数表示:
max ⁡ δ ∏ i = 1 M E ( o t i ∣ p h e a d e r ⊕ q ⊕ s 1 ( i ) ⊕ ⋅ ⋅ ⋅ ⊕ A ( r t i , δ ) ⊕ ⋅ ⋅ ⋅ ⊕ s m ( i ) ⊕ p t r a i l e r ) , \max_{\delta} \prod_{i=1}^M E(o_{ti} | p_{header} \oplus q \oplus s^{(i)}_1 \oplus ··· \oplus A(r_{ti}, \delta) \oplus ··· \oplus s^{(i)}_m \oplus p_{trailer}), δmaxi=1ME(otipheaderqs1(i)⋅⋅⋅A(rti,δ)⋅⋅⋅sm(i)ptrailer),
其中 r t i r_{t_i} rti 表示目标响应, o t i o_{t_i} oti 表示目标输出。我们使用 t i t_i ti 表示目标响应在 R s ( i ) R^{(i)}_s Rs(i) 中的位置索引。鉴于“大模型判别器”本质上是一个生成函数,我们定义了一个优化损失函数以实现预期的攻击目标。通过优化注入序列 δ = ( T 1 , T 2 , ⋅ ⋅ ⋅ , T l ) \delta = (T_1, T_2, ···, T_l) δ=(T1,T2,⋅⋅⋅,Tl),我们可以操控“大模型判别器”生成与预定义的目标输出一致的结果。这种基于优化的方法能够精确控制模型的生成行为,确保输出与攻击目标匹配,因为输入的提示通过贪婪生成过程唯一地决定输出。具体而言,我们设计了三项损失构成该优化损失函数:目标对齐生成损失(target-aligned generation loss)、目标增强损失(target-enhancement loss)、以及对抗困惑度损失(adversarial perplexity loss)。

Target-aligned generation loss

目标对齐生成损失(target-aligned generation loss),记为 L aligned L_{\text{aligned}} Laligned,旨在提高 LLM 生成目标输出 o t i = ( T 1 ( i ) , T 2 ( i ) , ⋅ ⋅ ⋅ , T L ( i ) ) o_{t_i} = (T^{(i)}_1, T^{(i)}_2, ···, T^{(i)}_L) oti=(T1(i),T2(i),⋅⋅⋅,TL(i)) 的概率。在此背景下,用 x ( i ) x^{(i)} x(i) 表示用于评估 R s ( i ) R^{(i)}_s Rs(i) 的输入序列,特别是排除注入序列 δ \delta δ 的情况。 L aligned L_{\text{aligned}} Laligned 的形式化定义如下:
L aligned ( x ( i ) , δ ) = − log ⁡ E ( o t i ∣ x ( i ) , δ ) , L_{\text{aligned}}(x^{(i)}, \delta) = - \log E(o_{t_i} | x^{(i)}, \delta), Laligned(x(i),δ)=logE(otix(i),δ),
其中 E ( o t i ∣ x ( i ) , δ ) E(o_{t_i} | x^{(i)}, \delta) E(otix(i),δ) 定义为:
E ( o t i ∣ x ( i ) , δ ) = ∏ j = 1 L E ( T j ( i ) ∣ x 1 : h i ( i ) , δ , x h i + l + 1 : n i ( i ) , T 1 ( i ) , ⋅ ⋅ ⋅ , T j − 1 ( i ) ) . E(o_{t_i} | x^{(i)}, \delta) = \prod_{j=1}^L E(T^{(i)}_j | x^{(i)}_{1:h_i}, \delta, x^{(i)}_{h_i+l+1:n_i}, T^{(i)}_1, ···, T^{(i)}_{j-1}). E(otix(i),δ)=j=1LE(Tj(i)x1:hi(i),δ,xhi+l+1:ni(i),T1(i),⋅⋅⋅,Tj1(i)).
在这里, x 1 : h i ( i ) x^{(i)}_{1:h_i} x1:hi(i) 表示注入序列 δ \delta δ 之前的输入标记, x h i + l + 1 : n i ( i ) x^{(i)}_{h_i+l+1:n_i} xhi+l+1:ni(i) 表示 δ \delta δ 之后的输入标记。 h i h_i hi 表示注入序列 δ \delta δ 之前的标记长度,而 n i n_i ni 是 LLM 处理的输入标记总长度。

Target-enhancement loss

目标增强损失(target-enhancement loss)旨在在优化过程中关注位置特征,以提高攻击在输入提示中目标响应位置变化时的鲁棒性。该损失项通过聚焦于成功攻击所需的关键单个标记来补充目标对齐生成损失。目标增强损失的公式如下:
L enhancement ( x ( i ) , δ ) = − log ⁡ E ( t i ∣ x ( i ) , δ ) , L_{\text{enhancement}}(x^{(i)}, \delta) = - \log E(t_i | x^{(i)}, \delta), Lenhancement(x(i),δ)=logE(tix(i),δ),
其中, t i t_i ti 表示 LLM-as-a-Judge 中目标响应的位置信息标记。此公式旨在最大化目标输出中位置信息标记 t i t_i ti 的概率,从而使注入序列 δ \delta δ 的优化更加直接和高效,以达到预期的攻击目标。

Adversarial perplexity loss

对抗困惑度损失(adversarial perplexity loss)旨在规避基于困惑度检测的防御机制 [3]。此类防御机制通过计算候选响应的对数困惑度来检测提示词注入攻击的存在。通常,候选响应中的注入序列会降低文本质量,导致更高的困惑度。我们通过在优化注入序列时使用对抗困惑度损失,以减轻其对整体文本困惑度的影响,使其更自然地融入目标文本,从而提高其在基于困惑度的防御机制下的隐蔽性。

形式上,对于长度为 l l l 的注入序列 δ = ( T 1 , T 2 , ⋯   , T l ) \delta = (T_1, T_2, \cdots, T_l) δ=(T1,T2,,Tl),其对数困惑度定义为该序列在模型下的平均负对数似然,可表示如下:
L perplexity ( x ( i ) , δ ) = − 1 l ∑ j = 1 l log ⁡ E ( T j ∣ x 1 : h i ( i ) , T 1 , ⋯   , T j − 1 ) . L_{\text{perplexity}}(x^{(i)}, \delta) = - \frac{1}{l} \sum_{j=1}^{l} \log E(T_j | x^{(i)}_{1:h_i}, T_1, \cdots, T_{j-1}). Lperplexity(x(i),δ)=l1j=1llogE(Tjx1:hi(i),T1,,Tj1).

优化问题

基于定义的目标和三个不同的损失函数 L aligned L_{\text{aligned}} Laligned L enhancement L_{\text{enhancement}} Lenhancement L perplexity L_{\text{perplexity}} Lperplexity,我们将 JudgeDeceiver 建立为一个优化问题,具体可以表示如下:
L total ( x ( i ) , δ ) = L aligned ( x ( i ) , δ ) + α L enhancement ( x ( i ) , δ ) + β L perplexity ( y ( x ( i ) , δ ) , (8) L_{\text{total}}(x^{(i)}, \delta) = L_{\text{aligned}}(x^{(i)}, \delta) + \alpha L_{\text{enhancement}}(x^{(i)}, \delta) + \beta L_{\text{perplexity}}(y(x^{(i)}, \delta), \tag{8} Ltotal(x(i),δ)=Laligned(x(i),δ)+αLenhancement(x(i),δ)+βLperplexity(y(x(i),δ),(8)
我们的目标是最小化总损失:
min ⁡ δ L total ( δ ) = ∑ i = 1 M L total ( x ( i ) , δ ) . (9) \min_{\delta} L_{\text{total}}(\delta) = \sum_{i=1}^{M} L_{\text{total}}(x^{(i)}, \delta). \tag{9} δminLtotal(δ)=i=1MLtotal(x(i),δ).(9)
其中 α \alpha α β \beta β 是平衡三个损失项的超参数。我们在评估中探索了它们对攻击性能的影响。实验结果表明,所有三个损失项对于 JudgeDeceiver 执行有效且一致的攻击至关重要。

求解优化问题

为了优化公式(9)中描述的损失函数,我们提出了一种基于梯度下降的方法,该方法通过迭代替换注入序列 δ \delta δ 中的标记,借鉴了先前研究的观点 [35, 58, 72]。目标是识别一个优化版本的 δ \delta δ,以最小化 L total ( δ ) L_{\text{total}}(\delta) Ltotal(δ) 的值。该方法系统地通过一系列迭代调整 δ \delta δ,在每一步评估对 L total L_{\text{total}} Ltotal 的影响,以逐步减少损失,直到找到最有效的注入序列。

优化过程开始时计算对修改 δ \delta δ 中第 j j j 个标记的影响的线性近似,量化为梯度:

∇ T j L total ( δ ) ∈ R ∣ V ∣ , (10) \nabla_{T_j} L_{\text{total}}(\delta) \in \mathbb{R}^{|V|}, \tag{10} TjLtotal(δ)RV,(10)

其中 T j T_j Tj 表示 δ \delta δ 中第 j j j 个标记的一热编码向量, V V V 表示完整的标记词汇表。随后,我们识别出具有最负梯度的前 K K K 个索引,作为替换标记 T j T_j Tj 的潜在候选。为每个 δ \delta δ 中的标记 T j T_j Tj 选择候选集后,我们采用与贪婪坐标梯度(GCG)算法 [72] 相同的标记搜索策略。

该策略随机选择一小部分 B ≤ K ∣ δ ∣ B \leq K |\delta| BKδ 个标记,评估此子集内每个潜在替换的损失,然后执行产生最小损失的替换。

为了应对与候选响应的位置信息相关的不确定性,这可能影响攻击的有效性,我们在方法中引入了一个位置适应策略。我们将不同位置索引 t i t_i ti 1 ≤ t i ≤ m 1 \leq t_i \leq m 1tim)下的注入序列 δ \delta δ 的优化目标表示为 L total ( x ( i ) , t i , δ ) L_{\text{total}}(x^{(i)}, t_i, \delta) Ltotal(x(i),ti,δ)。通过聚合不同位置索引的损失来优化注入序列。注入序列 δ \delta δ 的优化被认为是完成的,当它在所有位置索引上始终能够成功进行提示注入攻击时。此外,我们采用逐步优化的方法,在初始候选响应集优化注入序列后,逐步将新的候选响应集纳入优化过程。与同时优化多个候选响应集相比,这一策略加快了优化过程。附录中的算法 1 显示了 JudgeDeceiver 优化注入序列的整个过程。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

单智能体carla强化学习实战工程介绍

有三个工程&#xff1a; Ray_Carla: 因为有的论文用多进程训练强化学习&#xff0c;包括ray分布式框架等&#xff0c;这里直接放了一个ray框架的示例代码&#xff0c;是用sac搭建的&#xff0c;obs没用图像&#xff0c;是数值状态向量值&#xff08;速度那些&#xff09;。 …

PD取电快充协议芯片,XSP08Q在灯具中的应用

前言 随着快充技术不断的发展 USB Type-C端口的普及 PD快充成了电子设备中的宠儿&#xff0c;在各种电子设备领域都能见到PD快充的身影&#xff0c;不得不说快充技术的出现让电子设备在充电的速度上得到前所未有的体验&#xff0c;大大的缩短了设备的充电时间。快充协议芯片不…

【AI开源项目】Botpress - 开源智能聊天机器人平台及其部署方案

文章目录 Botpress 概述Botpress 的定位 Botpress 的主要特点1. OpenAI 集成2. 易于使用3. 定制和扩展性4. 多平台支持5. 集成和扩展 API6. 活跃的社区和详尽的文档 部署方案集成集成开发集成部署机器人示例开发工具代理本地开发先决条件从源代码构建 Botpress 如何解决常见问题…

【天线&运输】交通事故严重程度检测系统源码&数据集全套:改进yolo11-HSFPN

改进yolo11-ASF-DySample等200全套创新点大全&#xff1a;交通事故严重程度检测系统源码&#xff06;数据集全套 1.图片效果展示 项目来源 人工智能促进会 2024.11.01 注意&#xff1a;由于项目一直在更新迭代&#xff0c;上面“1.图片效果展示”和“2.视频效果展示”展示的系…

使用 Elastic、OpenLLMetry 和 OpenTelemetry 跟踪 LangChain 应用程序

作者&#xff1a;来自 Elastic Bahubali Shetti Langchain 应用程序的使用正在增长。构建基于 RAG 的应用程序、简单的 AI 助手等的能力正在成为常态。观察这些应用程序更加困难。考虑到现有的各种选项&#xff0c;本博客展示了如何将 OpenTelemetry 检测与 OpenLLMetry 结合使…

揭秘Scam-as-a-Service:警惕钓鱼攻击的产业化

2024年6月开始&#xff0c;CertiK安全团队监控到大量相似的phishing/drainer transaction&#xff0c;仅6月份监控到的涉案金额就超过5500万美元&#xff0c;进入8、9月份后&#xff0c;相关钓鱼地址的活动更加频繁&#xff0c;钓鱼攻击有愈演愈烈的架势。整个2024年第三季度&a…

前端Election

一.什么是Election 1.一款应用广泛的跨平台和桌面应用开发框架。 2.本质 Election的本质是结合了Chromium与Node.js 3.构建 使用HTML ,CSS,JS等Web技术构建桌面应用程序。 只要最后能转换成html css js即可 二.流程模型 1.主进程 关于node.js的任何api都在这里调用 一个纯…

如何在Linux系统中使用SSH进行安全连接

如何在Linux系统中使用SSH进行安全连接 SSH简介 安装SSH 在Debian/Ubuntu系统中安装 在CentOS/RHEL系统中安装 启动SSH服务 验证SSH是否安装成功 SSH配置 配置监听端口 配置登录方式 SSH客户端 安装SSH客户端 使用SSH客户端 SSH密钥认证 生成SSH密钥对 复制公钥到远程服务器…

SpringBoot源码解析(一)

SpringBoot自动装配原理 SpringBootApplication注解 我们在使用SpringBoot时&#xff0c;通常使用的是SpringBootApplication这个注解&#xff0c;比如&#xff1a; 而这个注解的定义为下图&#xff0c;可以发现这个注解上有另外三个注解&#xff1a;SpringBootConfiguration…

BES2600WM---HiLink RM56 EVK

0 Preface/Foreword 0.1 路径 OpenHarmony/device_soc_bestechnic - 码云 - 开源中国 https://github.com/Hi-LinkDuino/RM56 1 环境搭建 1.1 安装依赖工具 sudo apt-get install build-essential gcc g make zlib* libffi-dev e2fsprogs pkg-config flex bison perl bc ope…

C# 编程语言学习教程

C# 编程语言学习教程 目录 C# 简介 1.1 什么是 C#1.2 C# 的特点1.3 C# 的应用领域 环境搭建 2.1 安装 Visual Studio2.2 创建第一个 C# 项目 基础语法 3.1 数据类型3.2 控制结构3.3 数组与字符串 面向对象编程 4.1 类与对象4.2 继承与多态4.3 接口与抽象类 常用库与框架 5.1 .…

PAT甲级-1092 To Buy or Not to Buy

题目 题目大意 Eva想要买珠子&#xff0c;但是只能按串买。如果串上有她想要买的所有珠子&#xff0c;那么输出“Yes”&#xff0c;再输出需要额外买几个珠子。如果串上缺少她想要的珠子&#xff0c;那么输出“No”&#xff0c;并输出缺少的珠子个数。其中&#xff0c;s1是商店…

使用WebAssembly优化Web应用性能

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用WebAssembly优化Web应用性能 引言 WebAssembly 简介 编译 WebAssembly 模块 使用 Emscripten 编译 C/C 代码 使用 Rust 编译…

【C语言】自定义类型(结构体、枚举、联合的详解)下

写在前面 书接上回&#xff1a;【C语言】自定义类型&#xff08;结构体、枚举、联合的详解&#xff09;上 在上中&#xff0c;不才独篇撰写了结构体的具体细节&#xff0c;本篇笔记主要是把剩下的自定义类型全部展示。 文章目录 写在前面二、位段2.1、位段的定义2.2、位段占用…

初始JavaEE篇 —— 文件操作与IO

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;JavaEE 目录 文件介绍 Java标准库中提供操作文件的类 文件系统操作 File类的介绍 File类的使用 文件内容操作 二进制文件的读写操作…

CSP 2024 入门级第二轮 CSP-J 2024 复赛 第一题 扑克牌

一、题目阅读 [CSP-J 2024] 扑克牌 - 洛谷 二、题目解析 输入 去重 三、题目代码 #include <bits/stdc.h> using namespace std;int main() {map<string, bool> flag;int n, res 52;cin >> n;while (n--) {string s;cin >> s;if (!flag[s]) { // …

面试题:JVM(二)

1. 面试题 简述 Java 类加载机制?&#xff08;百度&#xff09; JVM类加载机制 &#xff08;滴滴&#xff09; JVM中类加载机制&#xff0c;类加载过程&#xff0c;什么是双亲委派模型&#xff1f; &#xff08;腾讯&#xff09; JVM的类加载机制是什么&#xff1f; &#x…

AUTOSAR CP MCAL微控制器抽象层介绍

AUTOSAR(Automotive Open System Architecture)即汽车开放系统架构,它将汽车电子控制单元(ECU)的软件底层做了一个标准的封装,使得开发者能够共用一套底层软件,并通过修改参数来匹配不同的硬件和应用层软件。AUTOSAR CP(Classic Platform)是AUTOSAR架构中的一个重要组…

ElastricSearch 原理以及简单实用(超级通俗)

提到非结构化数据的检索&#xff0c;常常用到 ElasticSearch&#xff0c;他是什么呢&#xff1f; ElasticSearch 是一个基于 Apache Lucene 的分布式搜索引擎&#xff0c;可以作为实时文档存储系统&#xff0c;且文档的每一个内容都可以被检索&#xff0c;能够处理 PB 级别的结…

在线培训知识库:企业培训的新篇章

在当今快节奏的商业环境中&#xff0c;员工培训已成为企业保持竞争力的关键。在线培训知识库作为一种新兴的培训工具&#xff0c;正逐渐成为企业培训体系的核心。它不仅能够提供灵活的学习方式&#xff0c;还能确保培训内容的及时更新和高效传播。本文将探讨在线培训知识库的重…