[论文阅读] 异常检测 Deep Learning for Anomaly Detection: A Review(三)总结梳理-疑点记录

《深度异常检测综述》总结梳理

在这里插入图片描述

目录

      • 一、研究背景与挑战
      • 二、深度异常检测方法分类
      • 三、实验评估
      • 四、结论
      • 在这篇文章中,**异常检测的异构性**主要从以下几个方面来理解:
      • 如何理解多源数据融合的困难
      • “学习正常性的特征表示”与“用于特征提取的深度学习”在以下几个方面存在区别:
      • 在深度异常检测的背景下,“学习正常性的特征表示”是一种用于检测异常的策略,具体含义如下:
      • 基于距离的异常度量的固有弱点主要包括以下几点:
    • 维度诅咒
    • 对数据分布假设的依赖
    • 对数据关系捕捉能力不足
    • 对噪声敏感
    • 缺乏语义理解
    • 计算复杂度高

一、研究背景与挑战

  • 异常检测的重要性及复杂性:异常检测在诸多领域至关重要,但由于异常的罕见性、异构性、数据的高维性、标记数据获取困难等因素,使得传统方法面临诸多挑战,如低检测召回率、高维数据中异常难察觉、数据高效学习困难、抗噪声能力弱、复杂异常检测难以及缺乏异常解释等(CH1 - CH6)。
  • 深度异常检测的优势:深度方法能够进行端到端优化、学习定制表示、处理复杂关系和异构数据,有助于应对上述挑战,在提高召回率、利用标记数据、提供异常解释等方面有重要作用。

二、深度异常检测方法分类

  • 用于特征提取的深度学习:利用深度学习从高维和/或非线性可分数据中提取低维特征表示用于下游异常检测,特征提取与异常评分完全脱节。如直接使用预训练模型或明确训练深度特征提取模型,其优点是有现成模型可用、降维能力强且易实现,但存在特征提取与评分脱节导致次优分数及预训练模型受限等缺点。
  • 学习正常性的特征表示
    • 通用正常性特征学习
      • 自动编码器:通过学习数据重建来获取低维特征表示,以重建误差作为异常分数。有多种正则化自动编码器变体,广泛应用于不同类型数据检测异常,但学习的特征可能受训练数据影响,且目标函数并非专为异常检测设计。
      • 生成对抗网络:学习生成网络的潜在特征空间,以真实与生成实例间残差定义异常分数。如AnoGAN及其改进方法,虽能有效检测异常,但存在计算效率低等问题,后续改进方法通过添加网络等方式解决。
      • 预测性建模:利用先前实例表示预测当前数据实例,以预测误差定义异常分数,适用于序列数据异常检测,能学习时间依赖关系,但仅限于序列数据且计算可能昂贵、表示未必最优。
      • 自监督分类:构建自监督分类模型学习正常性表示,将与分类模型不一致的实例识别为异常,在无监督和半监督设置下工作,基于梯度等属性评分,但特征变换依赖数据且分数推导可能非最优。
    • 依赖异常度量的特征学习:针对特定现有异常度量优化特征表示,包括基于距离、单类分类、基于聚类的度量等。
      • 基于距离的度量:克服传统基于距离的异常度量在高维数据中的局限,通过将数据投影到低维空间并以距离相关函数定义损失函数来学习特征表示,但计算成本可能高且受距离度量固有弱点限制。
      • 基于单类分类的度量:学习针对单类分类的异常检测定制的特征表示,如结合一类SVM与神经网络或研究SVDD的深度模型,有良好理论基础,但在复杂分布数据集上效果可能不佳且依赖于异常度量。
      • 基于聚类的度量:先将数据映射到低维空间再进行聚类操作并据此定义损失函数优化特征表示,基于聚类思想有清晰理论基础和应用场景,但聚类算法性能及参数选择会影响检测效果。
  • 端到端异常分数学习:以端到端方式学习标量异常分数,不依赖现有异常度量,通过新的损失函数驱动神经网络学习。包括排序模型、先验驱动模型、softmax似然模型、端到端单类分类模型等。
    • 排序模型:学习排序模型根据可观察序变量对数据实例排序,可基于序数回归设计损失函数。有监督设置下能利用标记异常学习优化分数,无监督设置下也能通过自训练等方式工作,但至少需某种形式标记异常且可能无法推广到未知异常。
    • 先验驱动模型:利用先验分布编码和驱动异常分数学习,可施加于分数学习函数内部模块或输出。如基于贝叶斯逆强化学习的方法及对异常分数施加先验的其他方法,能利用先验信息引导学习,但先验设定需了解数据且方法相对复杂。
    • softmax似然模型:基于softmax函数构建学习框架,通过最大化似然函数优化异常分数学习,能基于数据分布规律学习,但需合理划分类别且计算成本可能高。
    • 端到端单类分类模型:学习区分正常和异常类的分类器并直接输出异常分数,基于铰链损失等训练,流程简化且易实现,但在数据分布复杂或存在多种异常类型时可能表现不佳。

三、实验评估

  • 数据集:选择合适数据集如MNIST、CIFAR - 10、KDD Cup 99、UCI机器学习库中的数据集等,根据研究目的和方法特点确定,不同数据集有不同特征用于不同场景的实验。
  • 评估指标:常用召回率、精度、F1分数、平均绝对误差等指标衡量异常检测方法性能,各指标有不同侧重点,需综合考虑。
  • 实验设置:确定训练集、验证集、测试集划分,模型架构和参数,学习率、迭代次数等训练参数,以保证实验结果可靠及模型性能最佳。
  • 实验结果:关注不同方法在不同数据集上各评估指标表现、对不同类型异常的检测能力以及在不同训练参数下的性能变化,以了解方法优缺点及参数影响。

四、结论

  • 深度异常检测的成效:深度异常检测在提高检测准确性、处理高维数据、应对复杂异常等方面有良好效果,通过系统分类和综述介绍了多种具体方法及其特点。
  • 现存问题与未来方向:仍存在提高检测准确性、处理复杂数据异常、提供有效异常解释等未解决问题,未来可探索新方法、加强异常解释研究、更好利用标记数据和未标记数据等方向进一步发展该领域。

在这篇文章中,异常检测的异构性主要从以下几个方面来理解:

一、数据类型层面的异构性

  1. 不同数据模态
    • 异常检测可能涉及多种数据类型,如表格数据(像UCI机器学习库中的Iris数据集、Wine数据集等)、图像数据(如MNIST数据集、CIFAR - 10数据集)、网络连接记录数据(如KDD Cup 99数据集)等。这些不同的数据模态具有完全不同的结构和特征表示方式。例如,表格数据通常是由行和列组成的结构化数据,其中每一列代表一个特征,而行代表一个数据实例;而图像数据是由像素点组成的二维或三维结构,其特征表示需要考虑像素之间的空间关系和颜色信息等。
  2. 数据特征的多样性
    • 即使在同一类型的数据中,特征也可能存在异构性。以图像数据为例,可能包括外观特征(如物体的形状、颜色)、纹理特征、空间关系特征等。对于复杂的高维数据,特征之间的相互作用和耦合方式也各不相同,有些特征可能是线性相关的,而有些可能是高阶、非线性的关系。例如,在检测视频数据中的异常时,不仅要考虑每一帧图像的特征,还要考虑帧与帧之间的时间序列特征,如物体的运动轨迹、速度变化等,这些不同类型的特征组合构成了数据特征的异构性。

二、异常行为层面的异构性

  1. 异常类型的不同
    • 异常可以分为点异常、条件异常和组异常等多种类型。点异常是指单个数据实例相对于其他数据表现出异常;条件异常是在特定条件下才表现出的异常,例如在某个时间区间或者满足某种外部条件时的数据异常;组异常是一组数据实例整体呈现异常行为。这些不同类型的异常在行为表现上差异很大,需要不同的检测策略来识别。例如,在网络流量异常检测中,点异常可能是单个异常的网络连接请求,条件异常可能是在特定服务器负载情况下出现的异常流量模式,组异常可能是一批协同的恶意网络攻击行为。
  2. 异常模式的多样性
    • 即使是同一种类型的异常,其具体的模式也可能不同。例如,在图像数据中,异常可能是由于物体的形状扭曲、颜色异常、物体在场景中的不合理位置等多种原因造成的。这些不同的异常模式在数据空间中的分布和表现形式各异,增加了异常检测的难度。

三、模型应对层面的异构性挑战

  1. 通用模型的局限性
    • 由于数据和异常行为的异构性,很难设计一种通用的异常检测模型能够适用于所有类型的数据和异常情况。传统的异常检测方法往往在处理特定类型的数据或异常时效果较好,但在面对异构数据和复杂异常时表现不佳。例如,一些基于距离的异常检测方法在处理低维、独立同分布的数据时可能有效,但在高维、非独立的数据以及复杂的图像或视频数据中就难以发挥作用。
  2. 多源数据融合的困难
    • 在许多应用中,需要检测来自多个异构数据源的异常,例如同时考虑图像和文本描述来判断一个事件是否异常。将这些不同来源的数据进行融合并有效检测异常是一个具有挑战性的问题。不同数据源的数据可能具有不同的尺度、特征表示和语义信息,如何将它们整合到一个统一的异常检测框架中是应对异构性的重要方面。深度异常检测方法虽然在一定程度上能够学习异构数据的统一表示,但仍然面临如何更好地融合多源异构数据以提高异常检测准确性的挑战。

如何理解多源数据融合的困难

  1. 数据尺度差异
    • == 不同数据源==的数据在数值范围和单位等方面可能存在很大差异。例如,在一个包含传感器数据和文本数据的多源数据场景中,传感器数据可能是连续的数值,如温度传感器记录的温度值范围可能在 - 20℃到50℃之间,其精度可能到小数点后一位;而文本数据通常是由单词或字符组成的离散数据,没有这样的数值范围概念。将这样尺度不同的数据进行融合时,很难直接确定一个统一的标准来衡量它们对异常的贡献程度。如果简单地将它们组合在一起,数值较大的传感器数据可能会掩盖文本数据中的重要信息,导致在异常检测过程中无法有效利用文本数据中的特征。
  2. 特征表示差异
    • 不同数据源的数据具有不同的特征表示方式。以图像数据和音频数据为例,图像数据的特征通常基于像素的颜色、位置和纹理等信息来提取,可能会使用卷积神经网络来获取层次化的特征表示,如边缘特征、物体形状特征等;而音频数据的特征则侧重于声音的频率、振幅、音色等,一般通过傅里叶变换等方法来提取特征。这些不同的特征表示方式使得在融合时很难找到一个合适的空间来整合它们。即使将它们都转换为向量形式,由于其特征的本质含义不同,如何在这个统一的向量空间中确定它们的相互关系和权重,以准确地检测异常是一个难题。
  3. 语义信息差异
    • 不同数据源的数据蕴含着不同的语义信息。例如,在一个结合医疗影像数据和病历文本数据的医疗异常检测场景中,医疗影像数据中的语义信息主要是关于人体器官的形态、结构和病变情况等直观信息;而病历文本数据则包含患者的症状描述、病史、治疗过程等更抽象的语义信息。在融合这两种数据时,需要理解它们之间的语义关联,例如影像中的某个病变特征与病历中记录的症状之间的联系。但由于语义的复杂性和模糊性,很难建立一个有效的模型来准确地捕捉和利用这些语义信息进行异常检测。
  4. 数据同步和对齐问题
    • 当涉及多个数据源时,数据的采集时间、频率和顺序等可能不同。例如,在一个智能交通系统中,车辆的位置信息可能每秒更新一次,而交通摄像头拍摄的图像可能每5秒获取一张。在融合这些数据进行异常检测时,需要将它们在时间轴上进行同步和对齐。如果不能正确地处理数据的同步问题,可能会导致错误地关联数据,从而影响异常检测的准确性。比如,将错误时间点的车辆位置信息和交通图像进行融合,可能会将正常的交通状况误判为异常。
  5. 模型融合的复杂性
    • 针对不同数据源的数据,可能已经有了一些专门设计的异常检测模型,这些模型具有不同的架构和参数。例如,对于网络流量数据可能使用基于深度学习的时间序列分析模型,对于网络安全日志数据可能使用基于文本分类的模型。将这些不同的模型进行融合来构建一个统一的多源数据异常检测模型是非常复杂的。需要考虑如何整合不同模型的输出,是采用简单的加权求和还是更复杂的融合策略,以及如何调整各个模型的参数以适应多源数据融合的需求等问题。

分类方法中:前两种分类方式的区别是什么?

“学习正常性的特征表示”与“用于特征提取的深度学习”在以下几个方面存在区别:

一、目标导向

  1. 用于特征提取的深度学习
    • 主要目标是利用深度学习技术从高维和/或非线性可分数据中提取低维特征表示,以用于下游的异常检测。这里的重点是降维,使得数据在新的低维空间中更易于处理,特征提取和异常评分是完全脱节且相互独立的过程。例如,直接使用预训练的深度模型(如AlexNet、VGG和ResNet)提取低维特征,或者明确训练一个深度特征提取模型(如自动编码器网络)来获取低维表示,之后再将一个与特征提取过程没有连接的异常评分方法应用于新空间以计算异常分数。
  2. 学习正常性的特征表示
    • 目标是学习能够体现数据正常状态的特征表示,并且将这种表示与异常检测紧密耦合。不是简单地提取特征后再单独进行异常评分,而是在学习特征的过程中就考虑如何利用这些特征来区分正常和异常数据。例如,通过自动编码器学习数据重建,使得正常数据能够被很好地重建,而异常数据重建误差较大,从而根据重建误差来判断异常;或者通过生成对抗网络学习生成网络的潜在特征空间,让正常数据能更好地被生成,通过真实与生成实例的差异来检测异常,特征学习和异常检测是相互关联的过程。

二、特征与异常检测的关联性

  1. 用于特征提取的深度学习
    • 深度学习在这里仅仅充当特征提取器的角色,提取的特征并不一定针对异常检测进行优化。提取的特征可能只是数据的一种通用表示,后续的异常检测方法可能是基于传统的、与特征提取过程没有内在联系的方式。例如,用主成分分析(PCA)或随机投影等传统降维方法与用深度学习进行特征提取后的异常检测过程,在与特征的关联紧密程度上没有本质区别,== 深度学习提取的特征没有被强制要求去捕捉数据中的正常 - 异常差异==。
  2. 学习正常性的特征表示
    • 特征学习过程是围绕异常检测展开的,所学习到的特征具有明确的用于区分正常和异常的目的。
    • 例如,在基于距离的度量的特征学习中,会优化特征表示,使得在表示空间中异常与其最近邻的距离较远,正常实例位于密集邻域中,这种特征表示是直接为了更好地进行基于距离的异常检测而学习的。

三、模型结构和训练方式

  1. 用于特征提取的深度学习
    • 模型结构相对简单,主要是利用已有的深度学习架构(如多层感知机、卷积神经网络等)进行特征提取。训练方式通常是无监督的预训练(如果使用预训练模型)或者以最小化重建误差等方式进行监督训练(如果是专门训练的特征提取模型),训练目标主要是学习到数据的有效低维表示,与异常检测的目标函数没有直接关联
  2. 学习正常性的特征表示
    • 模型结构可能更复杂,因为它需要将特征学习和异常检测的目标融合在一起。例如,在生成对抗网络用于学习正常性特征表示时,需要同时训练生成器、判别器,并且根据生成实例和真实实例的差异来定义异常分数,训练过程涉及到生成对抗的博弈过程以及与异常检测相关的损失函数优化。在自监督分类方法中,**需要构建自监督任务来学习正常性表示,训练过程也与异常检测的目标紧密结合,**如通过最小化分类不一致性来学习特征。

在深度异常检测的背景下,“学习正常性的特征表示”是一种用于检测异常的策略,具体含义如下:

一、总体概念

这种方法的核心是学习能够代表数据正常状态的特征表示。其目的是通过对正常数据的学习,构建一个模型,使得正常数据在这个模型所定义的特征空间中有特定的表示模式。当新的数据实例进入这个模型时,如果其特征表示与正常数据的特征表示模式有较大差异,就会被判定为异常。

二、具体方式

  1. 通用正常性特征学习
    • 自动编码器(AE)
      • 这是一种常见的学习正常性特征表示的方法。AE由一个编码网络和一个解码网络组成。编码网络将原始数据映射到低维特征空间,而解码网络试图从投影的低维空间中恢复数据。正常实例可以从压缩空间中比异常更好地重建,因为在训练过程中,AE通过最小化重建误差来学习特征表示。异常很难从得到的表示中重建,所以具有较大的重建误差,这个重建误差就可以直接用作异常分数。例如,在处理图像数据时,正常的图像经过编码 - 解码过程后能够较好地还原,而含有异常物体(如添加了不属于正常场景的物体)的图像重建误差会比较大。
    • 生成对抗网络(GAN)
      • 学习生成网络的潜在特征空间来捕获给定数据背后的正常性。在GAN中,正常数据实例可以从生成网络的潜在特征空间中比异常更好地生成。例如,在训练好的GAN中,对于正常数据,生成器能够生成与之相似的实例;而对于异常数据,很难找到潜在空间中的对应生成实例,使得真实实例和生成实例之间的某种残差可以定义为异常分数。
    • 预测性建模
      • 通过使用时间窗口内先前实例的表示作为上下文来预测当前数据实例,从而学习特征表示。正常实例通常很好地遵循时间/顺序和循环依赖关系并且可以被很好地预测,而异常往往违反这些依赖关系并且是不可预测的。例如,在视频序列异常检测中,正常的视频帧可以根据之前的帧很好地预测出来,而包含异常事件(如突然闯入的物体)的视频帧则很难预测,预测误差就用于定义异常分数。
    • 自监督分类
      • 通过构建自监督分类模型来学习正常性的表示,并将与分类模型不一致的实例识别为异常。正常实例比异常更符合自监督分类器。例如,对于图像数据,通过对正常训练图像应用不同组合的几何变换操作构建预测模型,在增强数据上训练深度多类分类模型。正常实例在推理时与分类模型有更强的一致性,而异常实例则与之不一致,通过这种不一致性来检测异常。
  2. 依赖异常度量的特征学习
    • 基于距离的度量
      • 旨在学习针对特定类型基于距离的异常度量进行优化的特征表示。假设异常与其最近邻的距离较远,而正常实例位于密集邻域中。例如,通过将数据投影到低维空间,利用基于随机邻居距离的异常度量来驱动从超高维数据中学习低维表示,使得在表示空间中异常的随机最近邻距离大于正常实例的最近邻距离,这个距离就可以作为异常分数。
    • 基于单类分类的度量
      • 学习针对后续基于单类分类的异常检测定制的特征表示。假设所有正常实例来自单个(抽象)类,可以由一个紧凑模型概括,异常不符合该模型。例如,将一类SVM与神经网络相结合,从神经网络启用的低维表示空间学习一类超平面,使得正常实例位于超平面一侧,异常实例位于另一侧,从而实现异常检测。
    • 基于聚类的度量
      • 学习针对基于聚类的异常检测进行优化的特征表示。正常数据点倾向于聚集在紧密的聚类中,而异常点则要么远离任何聚类中心,要么处于规模较小的聚类中。例如,先将数据通过神经网络映射到低维表示空间,然后在这个空间中进行聚类操作,根据数据点到聚类中心的距离、聚类规模等因素定义损失函数来优化特征表示,进而根据这些因素计算异常分数。

基于距离的异常度量的固有弱点主要包括以下几点:

维度诅咒

  • 在高维空间中,数据点之间的距离变得难以准确衡量,距离的计算结果可能会受到数据维度的干扰,导致异常判断不准确。例如,随着维度的增加,数据点之间的平均距离会增大,所有的数据点看起来可能都离得很远,或者数据点的分布变得非常稀疏,使得基于距离的度量难以有效区分正常点和异常点.

对数据分布假设的依赖

  • 基于距离的异常度量通常假设数据在特征空间中是均匀分布的,或者至少是具有某种已知的分布规律。然而,在实际应用中,数据的分布往往是复杂多样的,可能是非均匀分布、存在多个聚类等情况,这就导致基于距离的度量方式难以适应数据的真实分布,从而影响异常检测的准确性。

对数据关系捕捉能力不足

  • 这种度量方式难以捕捉数据中的复杂关系,如序列数据中的时间依赖关系、图数据中的节点连接关系等。对于具有层次结构或关联关系的数据,如社交网络数据、生物信息数据等,单纯的距离度量很难深入理解数据点之间的内在联系,可能会忽略数据点在序列中的位置和变化趋势等重要因素,从而无法准确地识别异常.

对噪声敏感

  • 数据中的噪声点可能会改变数据点之间的距离关系,从而导致异常分数的计算出现偏差。例如,在一个包含少量噪声的数据集里,噪声点可能会被错误地判定为异常点,或者使得正常点的异常分数升高,进而影响异常检测的结果.

缺乏语义理解

  • 距离度量仅仅基于数据点在特征空间中的位置关系来判断异常,无法理解数据的语义信息。例如,在图像数据中,基于距离的度量可能无法区分图像中的物体是否处于异常位置或状态,因为它不考虑图像的内容和语义含义。

计算复杂度高

  • 计算数据点之间的距离通常需要较高的计算成本,尤其是在处理大规模数据集时。这可能导致异常检测的效率低下,无法满足实时性要求较高的应用场景.

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

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

相关文章

网络爬虫——爬虫项目案例

本节将全面讲解如何通过实战爬虫项目解决复杂问题。结合最新技术和实际开发需求,案例将涵盖完整开发流程,包括需求分析、实现代码、优化方法和常见问题解决。力求实现高效、可扩展的爬虫项目架构,帮助开发者提升实战能力。 案例 1&#xff1a…

实时质检-静音检测分析流程(运维人员使用)

前言 用户在实时质检时,开启了主叫或被叫静音检测功能,但是听录音时,主叫或被叫明明没有任何声音,但是通话没有被挂断。 说明主叫或被叫的静音阈值太低,导致系统没有把很小的声音认定为静音;或者检测非静音…

MetaGPT实现多动作Agent

异步编程学习链接 智能体 LLM观察思考行动记忆 多智能体 智能体环境SOP评审路由订阅经济 教程地址 多动作的agent的本质是react,这包括了think(考虑接下来该采取啥动作)act(采取行动) 在MetaGPT的examples/write_…

【MySQL】MySQL数据库基础

【MySQL】MySQL数据库基础 🥕个人主页:开敲🍉 🔥所属专栏:MySQL🍋 🌼文章目录🌼 1. 数据库基础 1.1 什么是数据库 1.2 主流数据库 1.3 MySQL基本使用 1.3.1 服务器,数据…

进程控制(详解)

一.进程创建 1.fork函数 在linux中fork函数是⾮常重要的函数&#xff0c;它从已存在进程中创建⼀个新进程。新进程为⼦进程&#xff0c;⽽原进 程为⽗进程。 #include <unistd.h>pid_t fork(void);返回值&#xff1a;⾃进程中返回0&#xff0c;⽗进程返回⼦进程id&…

RFSOC 49dr 开发板,支持12收5发

硬件支持: 1,12收5发 2.4X25G光模块 3.J30J扩展接口 4.支持多板同步&#xff0c;多TILE同步

生产制造领域的多元化模式探索

在当今全球化和信息化的时代背景下&#xff0c;生产制造领域正经历着前所未有的变革。随着消费者需求的多样化、市场竞争的加剧以及技术的不断进步&#xff0c;传统的生产制造模式已经难以满足现代企业的需求。因此&#xff0c;多种生产制造模式应运而生&#xff0c;以适应不同…

基于YOLOv8深度学习的智慧农业果园果树苹果类果实目标检测系统(PyQt5界面+数据集+训练代码)

随着智慧农业技术的快速发展&#xff0c;果园管理逐渐向自动化和智能化方向迈进&#xff0c;传统的果园管理方式面临着高成本、效率低以及人工依赖程度大的挑战。在这种背景下&#xff0c;基于人工智能的目标检测技术为果园管理提供了一种全新的解决方案。本研究设计并实现了一…

【泥石流;风险;脆弱性;风险评估;川藏公路北线|论文解读4】川藏高速公路北线泥石流风险评估

【泥石流&#xff1b;风险&#xff1b;脆弱性&#xff1b;风险评估&#xff1b;川藏公路北线|论文解读4】川藏高速公路北线泥石流风险评估 【泥石流&#xff1b;风险&#xff1b;脆弱性&#xff1b;风险评估&#xff1b;川藏公路北线|论文解读4】川藏高速公路北线泥石流风险评…

mysql的优化

1、概念 在应用开发的初期&#xff0c;由于数据量较小&#xff0c;开发人员更重视功能上的实现&#xff0c;随着应用系统上线后&#xff0c;数据量急剧增长&#xff0c;很多性能问题逐渐显现&#xff0c;对使用的影响也越来越大&#xff0c;此时这些问题语句就称为整个系统的性…

栈的应用,力扣394.字符串解码力扣946.验证栈序列力扣429.N叉树的层序遍历力扣103.二叉树的锯齿形层序遍历

目录 力扣394.字符串解码 力扣946.验证栈序列 力扣429.N叉树的层序遍历 力扣103.二叉树的锯齿形层序遍历 力扣394.字符串解码 看见括号&#xff0c;由内而外&#xff0c;转向用栈解决。使用两个栈处理&#xff0c;一个用String,一个用Integer 遇到数字:提取数字放入到数字栈…

【Python系列】 Base64 编码:使用`base64`模块

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Mac 修改默认jdk版本

当前会话生效 这里演示将 Java 17 版本降低到 Java 8 查看已安装的 Java 版本&#xff1a; 在终端&#xff08;Terminal&#xff09;中运行以下命令&#xff0c;查看已安装的 Java 版本列表 /usr/libexec/java_home -V设置默认 Java 版本&#xff1a; 找到 Java 8 的安装路…

C++ STL - vector/list讲解及迭代器失效

vector 使用 vector 是一个动态数组. 构造/拷贝构造/赋值重载函数 int main() {// 是一个模板, 在实例化的时候, 需要指明类型std::vector<int> first; // 一个空的数组std::vector<int> second (4,100); // 设置初始空间大小为 4 个int, 全部初始化为 100std::v…

libphone desktop编译

linphone-desktop 在ubuntu20.04 下编译 linphone 介绍 Linphone是一款遵循GPL的开源网络视频电话系统&#xff0c;支持多种平台如Windows、Linux、Android等。它基于SIP协议&#xff0c;提供语音、视频通话及即时文本消息功能。核心功能包括SIP用户代理、音频视频Codec支持、…

根据已知站点寻找路网的最短路径

背景 接上期&#xff0c;基于MATSim的交通仿真&#xff0c;其中有一块非常重要的就是公交的仿真&#xff0c;这也是当初选择MATSim技术路线的一个重要原因&#xff0c;现在业务给出的场景是上传一些有序站点及其经纬度&#xff0c;需要通过算法来适配对应的路网&#xff0c;由…

Jenkins + gitee 自动触发项目拉取部署(Webhook配置)

目录 前言 Generic Webhook Trigger 插件 下载插件 ​编辑 配置WebHook 生成tocken 总结 前言 前文简单介绍了Jenkins环境搭建&#xff0c;本文主要来介绍一下如何使用 WebHook 触发自动拉取构建项目&#xff1b; Generic Webhook Trigger 插件 实现代码推送后&#xff0c;触…

leetcode 919.完全二叉树插入器

1.题目要求: 完全二叉树 是每一层&#xff08;除最后一层外&#xff09;都是完全填充&#xff08;即&#xff0c;节点数达到最大&#xff09;的&#xff0c;并且所有的节点都尽可能地集中在左侧。设计一种算法&#xff0c;将一个新节点插入到一棵完全二叉树中&#xff0c;并在…

SSL协议

文章目录 1. 前言2. 基础概念3. SSL协议结构3.1 概述3.2 SSL握手协议3.3 修改密码说明协议3.4 报警协议3.5 SSL记录协议 4. SSL安全性4.1 安全机制分析4.2 脆弱性分析 5. SSL证书 1. 前言 参考《应用系统安全基础》 2. 基础概念 安全套接字层协议&#xff08;Security Socke…

Flink-Source的使用

Data Sources 是什么呢&#xff1f;就字面意思其实就可以知道&#xff1a;数据来源。 Flink 做为一款流式计算框架&#xff0c;它可用来做批处理&#xff0c;也可以用来做流处理&#xff0c;这个 Data Sources 就是数据的来源地。 flink在批/流处理中常见的source主要有两大类…