长时间预测模型DLiner、NLiner模型(论文解读)

news2025/7/21 21:53:15

前言

  • 今年发布8月份发布的一篇有关长时间序列预测(SOTA)的文章,DLinerNLine在常用9大数据集(包括ETTh1、ETTh2、ETTm1、ETTm2、Traffic等)上MSE最低,模型单变量、多变量实验数据:
    请添加图片描述
    请添加图片描述

  • 在计算资源与效率上,DLiner模型时间复杂度为O(L),且模型非常小巧,下面为其他Transformer时间预测模型计算资源与效率:
    请添加图片描述

  • 论文下载:Are Transformers Effective for Time Forecasting,代码以及使用说明GitHub项目地址

  • 这是我第一次做论文解读,建议大家去认真读一读原文,这篇文章写作很棒,也很值得学习,作者对于Transformer模型在长时间序列问题上效用做了非常详细的分析。

摘要

  基于Transformer的长时间序列预测模型不断涌现,并且性能在过去几年力不断提高,但Transformer是否对长时间序列问题有效?

  具体来说,Transformer是提取长序列中各元素间语义关联最成功的模型,但是在时间序列模型中,我们需要在一个有序的连续点集合中提取时间关系。虽然采用位置编码和使用tokens嵌入子序列有利于保留一些排序信息,但变化无常的自注意力机制不可避免的导致部分时间信息丢失。所以为了验证我们的想法,我们引入了一组名为LTSF-Linear的简单单层线性模型,实验结果表明LTSF-Linear在所有数据集上都出乎意料的优于现有基于Transformer的复杂LSTF模型,而且往往有很大优势。

  此外我们还进行了全面的验证实验,探讨LTSF模型各种设计元素对时间关系提取能力的影响,我们也主张在未来重新检查Transformer对其他时间序列分析任务的有效性。

简介

  在当今数据驱动的世界中,时间序列无处不在。考虑到历史数据,时间序列预测(TSF)是一项长期的任务,具有广泛的应用,包括但不限于交通流量估计、能源管理、金融投资。在过去十几年里,(TSF)解决方案经历了从传统的统计方法(如ARIMA)和机器学习技术(如GBRT)到基于深度学习的解决方案,如循环神经网络(RNN)和时间卷积网络(TCN)的发展。

  Transformer可以以说是最成功的序列模型架构。在自然语言处理(NLP)、语音识别和计算机视觉等各种方面有着非常显著的优势。最近,基于Transformer的时间序列预测模型也在不断涌现,最值得注意的是专注于解决长期时间序列预测(LTSF)问题的模型,包括LogTrans(NeurIPS2019),Informer(AAAI2021最佳论文)。Autoformer(NeurIPS 2021),Pyraformer(ICLR2022 Oral),Triformer(IJCAI 2022)和FED-former(ICML 2022)。

  Transformer主要依赖多头注意力机制工作,它具有提取长序列中各元素(如文本中的单词或图像中的块)之间语义关联显著的能力。然而自注意力机制在某种程度上是无序的(特征之间没有空间位置关系)。虽然使用各种类型的位置编码技术可以保留一些排序信息,但在这些技术之上应用自注意力机制后,仍然不可避免会有部分信息损失。这对于NLP等语义丰富的应用来说,通常不是一个严重的问题,例如,即使我们对句子中的一些词重新排序,句子的语义也基本保留下来。但是,在分析时间序列数据时,数值型数据缺乏语义,而我们主要对连续点间趋势变化进行建模,也就是说顺序本身起着最关键的作用,因此,我们提出以下耐人寻味的问题。Transformer对长时间序列预测真的有效吗?

  此外,虽然现有基于Transformer的LTSF模型显示出比传统方法更好的结果,在所有实验中,被比较的(非Transformer)基线都形成了自回归或多步骤迭代预测(IMS),这些方法在LTSF问题上有显著的误差积累效应。因此在这项工作中,我们用多步骤直接预测(DWS)策略与基于Transformer的模型进行对比,以验证其实际性能。

  并非所有的时间序列都是可预测的,更不用说长期预测了(例如对于混乱的系统而言)。我们假设,长期预测只对那些具有相对明确趋势和周期性的时间序列可行。由于线性模型已经可以提取这样的信息,我们引入一组名为LTSF-Liner的简单线性模型作为新的比较基线。LTSF-Liner用单层线性模型对历史时间序列进行回归,以直接预测未来的时间序列。我们在9个广泛使用的基准数据集上进行了广泛的实验,这些数据集包含了各种现实生活中的应用交通、能源、经济、天气和疾病。令人惊讶的是,我们的结果显示,LTSF-Liner线性模型在所有情况下都优于现有基于Transformer的复杂模型,而且往往有很大的优势(20%~50%)。此外,我们发现,与现有Transformer模型中的主旨相比,大部分Transformer模型都未能提取出长序列时间上的关系,也就是说,预测误差并没有随着回视窗口大小的增加而减少(有时甚至增加)。最后我们对现有基于Transformer模型进行了各种分析研究,以研究其中各种设计元素的影响,总而言之,这项工作包括:

  • 这是一项挑战Transformer模型对长期时间序列预测任务的有效性工作
  • 根据LTSF-Liner在9个基准数据集上的表现,LTSF-Liner可以成为LSTF问题的一个新基线
  • 对现有基于Transformer模型各个方面进行全面实证研究,包括对长输入的建模能力,对时间序列顺序的敏感性,位置编码和子序列嵌入的影响,模型复杂度比较
      综上所述,我们认为,至少对于LTSF-Liner来说,基于Transformer的模型对长时间序列预测任务的有效性被严重夸大了。同时,虽然LTSF-Liner取得了较好的准确率,但它只是作为未来研究TSF问题的一个简单基线,我们也主张在未来重新审视基于Transformer的模型在其他时间序列分析任务中的有效性。

TSF问题表述

  对于包含 C C C变量的时间序列,给定历史数据 X = X 1 t , . . . , X C t t = 1 L X = {X_1^t,...,X_C^t}_{t = 1}^L X=X1t,...,XCtt=1L,其中 L L L是回看窗口的大小, X i t X_i^t Xit是变量 i i i t t t时刻的值。时间序列预测的任务是预测 X ^ = { X ^ 1 t , ⋯   , X ^ C t } t = L + 1 L + T \hat{X} = \{ \hat{X}_1^t,\cdots ,\hat{X}_C^t \}_{t = L+1}^{L+T} X^={X^1t,,X^Ct}t=L+1L+T在未来T个时间步长的数值。当 T > 1 T>1 T>1时,多步迭代(IMS)预测通过学习一个单步预测器,并迭代应用它来获得多步预测;直接多步预测(DWS)直接一次性优化多步预测目标。
  与DMS预测结果相比,IMS预测的方差较小,这要归功于自回归机制,但它们不可避免地受到误差累计的影响。因此,当有一个高度准确的单步预测器,且 T T T相对较小时,IMS预测是最好的。相反,当很难得到一个无偏的单步预测器时,或者 T T T很大时,DMS预测会更准确。

基于Transformer的LSTF解决方案

  基于Transformer的模型在自然语言处理和计算机视觉等许多长期人工智能任务中取得了较好的表现,这都要归功于多头注意力机制的有效性。同时也引发了人们对基于Transformer的时间序列建模的大量研究。特别是大量的研究工作致力于LTSF任务。考虑到Transformer模型擅长捕捉长距离依赖关系的能力,他们中的大多数都集中在探索较少数据的长期预测问题上( T > > 1 T >> 1 T>>1

  当把假想的Transformer模型应用到LSTF任务时,出现了一些局限性。包括原始的自我注意力机制的 O ( L 2 ) O(L^2) O(L2)时间/内存复杂度和auto-regressive解码器设计造成的错误累积。Informer解决了这些问题,并提出了一个新的Transformer架构,降低了时间、内存复杂度,并提出DMS预测策略。后来,更多的Transformer变体在模型中引入了各种时间序列特征来实现性能或效率的提升。我们将现有基于Transformer的LSTM解决方案设计要素总结如下:
在这里插入图片描述

时间序列分解

  对于数据的预处理,在LSF中常见的是zero-mean方法。此外,Autoformer首次在每个神经块后面应用季节性趋势分解,这是时间序列分析中的一种标准方法,可以使原始数据更加可预测。具体来说,该模型使用移动平均核(moving average kernel)来提取时间序列的趋势周期成分。原始序列与趋势成分间差值被视为季节性成分。在Autoformer模型分解方案的基础上,FEDformer进一步提出了专家混合策略,以融合不同移动平均核所提取的趋势成分。

输入embedding策略

  Transformer架构中自我注意力层无法保留时间序列的位置信息,然而局部位置信息(即时间序列的顺序)是很重要的。此外,全局时间信息,如分层时间戳(周、月、年)和不可知的时间戳(假期和事件),也是有信息量的。为了增强时间序列输入的时间背景,在基于SOTATransformer的方法中,一个实用的设计是将7种方法嵌入模型,如固定位置编码、通道投影嵌入和可学习时间模块。此外,还引入了带有时间卷积层的嵌入层或可学习时间戳。

自注意力策略

  Transformer主要依靠自注意力机制来提取成对元素的语义依赖关系,其冬季是为了减少 O ( L 2 ) O(L^2) O(L2)的时间和空间复杂度。Transformer近期工作提出了两种提高效率的策略。一方面,LogTrans使用Logsparse掩码将计算复杂度降低到 O ( L l o g L ) O(LlogL) O(LlogL),而Pyraformer采用金字塔式注意力,以 O ( L ) O(L) O(L)时间和内存复杂度捕捉层次上的多尺度时间依赖。另一方面,InformerFEDformer在自我注意力矩阵中使用了低等级权重(low-rank property)。Informer提出了ProbSparse自注意力机制和自蒸馏操作,将复杂度降低到了 O ( L l o g L ) O(LlogL) O(LlogL) F E D f o r m e r FEDformer FEDformer设计了傅里叶变换增强块和小波增强块。最后,Autoformer设计了串联式自动相关机制来代替原来的自注意力层。

解码器(Decoder)

  vanilla Tranformer解码器以自回归方式输出序列,导致了缓慢的输入速度和错误累积效应,特别是对于长时间序列预测。Informer为DMS预测设计了生成式解码器。其他Transformer变体也采用类似的DMS策略。例如,Pyraformer使用全连接层串联空间时间轴(fully-connected layer concatenating Spatio-temporal axes)作为解码器。Autoformer分别提取趋势、周期特征并与季节成分自动相关机制叠加得到最终的预测结果。FEDformer也使用了相似的频率衰减块分解得到最终结果。

  Transformer模型效果依赖成对元素之间的语义关系,而自注意力机制本身是无序的(permutation-invariant),它对时间关系的建模能力主要取决于与输入标记相关的位置编码。考虑到时间序列中的原始数值数据(如股票价格或电力价值),它们之间几乎没有任何点状的语义关联。在时间序列建模中,我们主要对一组连续点间时间关系感兴趣,这些元素的顺序起着关键性作用,而并非成对关系。虽然采用位置编码和嵌入(embedding)模块有利于保留一些排序信息,但自我注意力机制的性质不可避免的导致时间信息丢失。根据上述观察,我们对重新审视基于Tranformer的LSTF解决方案有了兴趣。

一个简单的基线模型

  现有基于Transformer的LTSF解决方案(T >> 1)实验中所有被比较的非Transformer模型基线都是IMS预测技术,众所周知,这种策略会受到显著的错误累积效应影响。我们假设,这些作品的性能改进主要是由于其使用了DMS策略。
请添加图片描述
  为了验证这一假设,我们通过时间线性层提出了最简单的DMS模型,名为LTSF-Liner,作为比较的基线。LTSF-Liner通过加权和操作直接对历史时间序列做回归,以预测未来。其数学表达式为: X ^ i = W X i \hat{X}_{i} = WX_i X^i=WXi,其中 W ∈ R T × L W \in R^{T \times L} WRT×L是沿时间轴的线性层。 X ^ i \hat{X}_i X^i X i X_i Xi分别为预测值与输入值。值得注意的是,LTSF-Liner在不同变量间共享权重,并且不对任何空间相关进行建模。
   L S T F − L i n e r LSTF-Liner LSTFLiner是一组线性模型。Vanilla Linear是单层线性模型。为了处理不同领域(如金融、交通和能源领域)的时间序列,我们进一步引入了两种预处理方法的变种,名为DLinerNLiner

  • 具体来说,DLinearAutoformerFEDformer中使用位置编码策略与线性层的组合。它首先将原始数据分别分解为移动平均分类量、季节趋势分量。然后将两个单层线性层应用于每个分量,我们将两个特征相加,得到最终预测结果。通过明确的处理趋势,当数据中存在明显趋势时,DLinear增强了vanilla linear性能。
  • 同时,为了提高LTSF-Linear的性能,当数据集出现分布偏移时,NLinear首先用序列最后一个值减去输入。然后,输入经过一个线性层,在进行最终预测之前,将减去的部分加回来。NLinear中加减操作可以看做对输入序列的简单标准化

实验

实验设置

  数据集,我们在9个广泛使用的真实数据集上进行了广泛的实验,包括ETT(电力变压器温度)(ETTh1,ETTh2,ETTm1,ETTm2),交通,电力,天气,ILI,汇率。所有这些变量都是多变量时间序列,我们在附录中留下了数据描述。

  评价指标,按照以前的工作,我们使用平均平方误差(MSE)和平均绝对误差(MAE)作为核心指标来比较性能。

  比较方法,我们包括五个最近基于transformer的方法。FEDformerAutoformerInformerPyraformerLogTrans。此外,我们还包括一个简单的DMS方法。Repeat模型,它重复回视窗口的最后一个值,作为另一个简单的基线。由于FEDformer有两个变种,我们比较了精度更好的一个。

Transformer比较

  在下表中,我们按照上述实验设置,在9个基准上广泛评估了所有提到的Transformer模型。令人惊讶的是,LTSF-Linear的性能在9个基准测试中得到了改善。在大多数情况下,LTSF-Linear比SOTA FEDformer在多变量预测上有20%~50%的改进,其中LTSF-Linear甚至不对变量之间的关联性进行建模。对于不同的时间序列基准,NLinear和DLinear在处理分布偏移和趋势季节性特征方面显示出优越性。我们还在附录中提供了ETT数据集的单变量预测结果,其中LTSF-Linear仍然以很大优势持续优于基于Transformer的LTSF解决方案。
请添加图片描述
  FEDformer在ETTh1数据集上实现了有竞争力的预测精度。这是因为FEDformer采用了经典的时间序列分析技术,如频率处理,这带来了时间序列的归纳偏差,有利于时间特征的提取能力。综上所述,这些研究结果显示,现有基于复杂Transformer模型在现有的9个基准上似乎并不有效,而LTSF-Linear可以成为一个强大的基线。另一个有趣的现象是,尽管Repeat模型在预测长期季节性数据(如电力和交通)时显示出较差的结果,但他在Exchange-Rate数据集上出人意料地超过了所有基于Transformer的方法(超出大约45%)。这主要是由于基于Transformer的方法对趋势错误预测造成的,它可能会对训练数据中突然变化的噪音进行过度拟合,从而导致显著的性能下降。相反Repeat没有偏向性如下图(b)
在这里插入图片描述
  如上图所示,我们绘制了在三个选定时间序列数据集上使用Transformer解决方案和LTSF-Linear的预测结果,这些数据具有不同的时间间隔。当输入为96个时间步长,输出为336个时间步长时,Transformer不能捕捉到电力和ETT2数据的偏向性。此外,它们也很难预测诸如汇率等非线性数据的趋势。这些现象进一步表明现有基于Transformer的解决方案对LTSF任务是不够的。

更多关于LSTF-Transformer的分析

  现有的LSTF-Transformer能否从较长输入序列中很好的提取时间关系?回视窗口(look-back window)大小对预测的准确性影响很大,因为它决定了我们能从历史数据中学习多少。一般来说,一个具有强大时间关系提取能力的LSTF模型应该能够在较大的回视窗口尺寸下取得更好的结果。

  为研究输入回视窗口大小对模型的影响,我们分别使用 { 24 , 48 , 72 , 96 , 120 , 144 , 168 , 192 , 336 , 504 , 672 , 720 } \{24,48,72,96,120,144,168,192,336,504,672,720\} {24,48,72,96,120,144,168,192,336,504,672,720}作为回视窗口大小预测720个时间步长,下图显示了在两个数据集上MSE。与之前研究类似,当回视窗口大小增加时,现有基于Transformer的模型性能会下降或保持稳定,相比之下,所有的LTSF-Linear性能都随着回视窗口大小的增加而明显提升。因此,如果给定一个较长的序列,现有的解决方案倾向于过度拟合时间噪声,而不是提取时间信息,而输入时间步长96正好适合大多数Transformer模型。
请添加图片描述
  虽然回视窗口的时间动态性对短期时间序列预测的准确性有显著影响,但我们假设长期预测取决于模型是否能够很好的捕捉趋势和周期性,也就是说,预测范围越远,回视窗口本身的影响越小。

  为了验证上述假设,在下表中,我们比较了同一数据集两个不同回视窗口对未来720个时间步长的准确性。从实验结果来看,SOTATransformer性能略有下降,表明这些模型只能从相邻时间序列中捕捉到类似的时间信息。由于捕捉数据集的内在特征一般不需要大量的参数,即1个参数可以代表周期性。使用过多参数甚至会导致过拟合,这也部分解释了为什么LSTF-Linear比基于Transformer方法表现更好。
在这里插入图片描述

  自注意力机制对LTSF有效吗?我们验证了现有Transformer中这些复杂的设计是否是有效的。前者(如Informer)是必不可少的。在下表中,我们逐步将Informer转换为Linear。首先,我们将每个自注意力层与一个线性层组合,称为Att.Linear,因为自注意层可以被视为一个权重动态变化的全连接层。此外,我们抛弃了Informer中其他辅助设计(例如FFN),留下嵌入层和线性层,命名为Embed-Linear。最后,我们将该模型简化为一个线性层。令人惊讶的是,Informer的性能随着结构逐渐简化而增长,这表明至少对于现有的LTSF基准来说,自注意力机制和其他复杂模块是不必要的。
在这里插入图片描述
  现有的LSTF-Tansformer模型能否很好的保存时间秩序?自注意力机制在本质上是permutation-invariant的,顺序因素影响不大。然而,在时间序列预测中,序列顺序往往起着关键作用。我们认为,即使有了位置和时间信息的嵌入,现有的基于Transformer的方法仍然会丢失时间信息。在下表中,我们在嵌入策略之前对原始输入进行了洗牌。两种洗牌策略,Shuf:随机清洗整个输入序列。Half-Ex:将输入序列的前一半与后一半交换。有趣的是,在汇率数据集上,与原始输入相比,即使输入序列被随机洗牌,所有基于Transformer的方法性格都没有波动。相反,LTSF-Linear性能却很差。这表明,具有不同位置和时间嵌入的LTSF-Transformer保留了相当有限的时间关系,在嘈杂的金融数据上容易过拟合,而LTSF-Linear可以自然的建立秩序关系,使用较少参数避免过拟合。
在这里插入图片描述

  对于ETTh1数据集,FEDformerAutoformer在其模型中引入了时间序列的inductive bias,使得它们可以在具有明显时间趋势(如周期性)的数据集中提取某些时间信息。因此,在Shuf模式下,模型失去了秩序信息,两模型平均降幅为73.28%和56.91%。此外,InformerShufHalf-Ex模式下收到的影响较小,因为它没有时间上的inductive bias。总的来说,在所有情况下,LTSF-Linear平均降幅都大于基于Transformer的方法,这表明Transformer不能很好的保存时间顺序。

  不同的嵌入策略效果如何?我们研究了基于Transformer的方法中使用的位置和时间戳嵌入的好处。在下表中,如果没有位置嵌入(wo/Pos.),Informer的预测错误会大大增加。如果没有时间戳嵌入(wo/Temp),随着预测长度的增加,Informer性能将逐渐受损。由于Informer对每个标记使用一个时间步长,因此有必要在标记中引入时间信息。
在这里插入图片描述
  FEDformerAutoformer不是在每个标记中使用单一时间步长,而是输入一连串的时间戳来嵌入时间信息。因此,它们可以在没有固定的位置嵌入情况下达到相当的甚至更好的性能。然而,如果没有时间戳嵌入,Autoformer的性能会迅速下降,因为它失去了全局时间信息。相反,由于FEDformer提出的频率增强模块引入了时间上的inductive bias,它在去除任何位置/时间戳后受到的影响较小。

  训练数据的大小是现有LTSF-Transformer的限制因素吗?有些人可能会认为,基于Transformer的解决方案性能不佳是由于基准数据集规模太小。与计算机视觉或自然语言处理任务不同,LTSF是在多姿多彩的时间序列上进行的,因此很难扩大训练数据的规模。事实上,训练数据的大小将对模型的性能产生重大影响。因此,我们对交通数据集进行了实验,比较了在完整数据集(17544 * 0.7小时)、缩短后数据集(8760小时,即1年)上模型的精度。出乎意料的是,如下表,在大多数情况下,减少训练集误差也会随之减少。这可能是因为整年的数据比长但不完整的数据规模更能保持清晰的时间特征。虽然我们不能得出结论:我们应该使用更少的数据进行训练,但这表明训练数据的规模并不是影响AutoformerFEDformer性能的限制性原因。
在这里插入图片描述

结论和展望

结论

  这项工作对新兴的基于Transformer的长时间序列预测问题解决方案的有效性提出质疑。我们使用一个简单的线性模型LTSF-Linear作为DWS预测基线来验证我们的想法。请注意我们的贡献不在于提出了一个线性模型,而在于提出了一个重要的问题,展示了令人惊讶的对比,并通过各种角度证明了为什么LTSF-Transformer并不像这些作品中所说那样有效。我们真诚的希望我们的研究能对这一领域的未来的工作有所帮助。

展望

LSTF-Linear模型效果有限,它只是为未来的研究提供了一个简单而有竞争力的基线,具有很强的可解释性。例如,单层线性网络很难捕捉到由变化点引起的时间动态变化。因此我们认为在新的模型设计、数据处理和基准方面有很大的潜力来解决困难的LSTF问题。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Appium学习日记(二)—— 入门学习(安装Appium和配置环境)

入门 1、安装 Node.js 进入nodejs的官网下载安装包安装,一路点击下一步就行。 安装完毕之后,打开命令行,输入:node -v;显示类似于v10.13.0的版本号信息则表示安装成功。 2、安装Appium以及相关环境配置 Appium可以通过两种方式之…

【Kafka】(1)基础知识汇总

TOC (1)Kafka简介 (1)简单介绍 Kafka是一种消息队列,主要用来处理大量数据状态下的消息队列,一般用来做日志的处理。既然是消息队列,那么Kafka也就拥有消息队列的相应的特性了。 &#xff0…

Python3 VSCode 配置

VSCode(全称:Visual Studio Code)是一款由微软开发的跨平台免费源代码编辑器。VSCode 开发环境非常简单易用,仅需要安装相关的插件进行简易的配置就可以与原有的python环境组成一套具有简单的代码调试运行的开发工具。对于轻量级的…

聚焦“碳中和”,成都超算中心牵手重庆大学唱好“成渝双城记”

为了积极稳妥推进碳达峰碳中和,加快成渝双城经济圈建设。重庆大学牵手国家超算成都中心和成都计算狗数据科技有限公司,开展了关于CO2电催化还原反应的路径计算工作,积极推动川渝两地实现产学研合作和成果落地转化,深入推进能源革命…

【C++】运算符重载

前言&#xff1a;本教程使用到的工具是vs2010&#xff1b; 目录 为什么要重载运算符&#xff1f; 运算符重载 重载就一定要吗&#xff1f; 重载后的运算符和普通运算符有什么区别&#xff1f; 总结 为什么要重载运算符&#xff1f; 先看代码&#xff1a; #include <…

腾讯实时股票数据接口怎么获取行情?

腾讯实时股票数据接口怎么获取行情&#xff1f;以五粮液为例&#xff0c;要获取最新行情&#xff0c;访问数据接口&#xff1a; 返回数据&#xff1a;v_sz000858"51~五 粮 液~000858~27.78~27.60~27.70~417909~190109~227800~27.78~492~27.77~332~27.76~202~27.75~334~27.…

做SEO为什么有的网站收录很难做?

刚开始做网站的时候&#xff0c;经常遇到网站收录难的问题。有时候一个月都没收录&#xff0c;急得还是忍不住。我困惑了很久。每天都在想是什么原因导致我的网站没有被收录&#xff0c;很无奈也很难过。那时候我还不知道搜索引擎的工作原理&#xff0c;也不知道从何入手。我像…

为什么我抓不到baidu的数据包

最近&#xff0c;有位读者问起一个奇怪的事情&#xff0c;他说他想抓一个baidu.com的数据包&#xff0c;体验下看包的乐趣。 但却发现“抓不到”&#xff0c;这就有些奇怪了。 我来还原下他的操作步骤。 首先&#xff0c;通过ping命令&#xff0c;获得访问百度时会请求哪个I…

[TypeScript]Vue/React子组件实例暴露方法

最近几个月都在用TS开发各种项目&#xff0c;框架有涉及到Vue3,React18等&#xff1b; 记录一下Vue/React组件暴露出变量/函数的方法的写法&#xff1b; Vue2 回顾一下Vue2 组件暴露出去方法&#xff0c;它并没有约束&#xff0c;写在methods里的方法都能被调用&#xff0c;da…

UNIAPP实战项目笔记38 购物车的添加商品到购物车功能

UNIAPP实战项目笔记38 购物车的加入购物车功能 通过mapGetters实现此功能 在 shopcart.vue中 使用mapGetters中的 addShopCart方法实现商品数量的增加 核心代码 detail.vue <template><view class"details"><!-- 商品图 --><swiper :indicator…

如何在 JavaScript 中使用三元运算符

随着 React 的版本更新&#xff0c;内置 Hooks 越来越多了。很多 Hook 可能你压根都没听说过。但是 useEffect 这个老牌 Hook&#xff0c;相信每个用 React 的同学应该熟悉。 不优雅的 useEffect 不过对很多刚接触 React 的人来说&#xff0c;使用 useEffect 非常容易出现无限…

figma对比sketch有什么优势和不足?

设计行业的工具层出不穷。在我看来&#xff0c;sketch它在一定程度上被颠覆了PS&#xff0c;如今sketch已成为许多设计团队的设计工具。 那么Figma相对于Sketch有哪些优点&#xff1f;有哪些不便&#xff1f;让我们从几个方面来了解一下。 两款软件非常适合创建UI和组件库。Ske…

【LeetCode】数组系列-双指针

一、双指针算法基本介绍 算法思想&#xff1a;在遍历对象的过程中&#xff0c;不是普通的使用单个指针进行访问&#xff0c;而是使用两个相同方向&#xff08;快慢指针&#xff09;或者相反方向&#xff08;对撞指针&#xff09;的指针进行扫描&#xff0c;从而达到相应的目的…

现代 React Web 开发实战——kanban实现卡片拖拽

前提摘要&#xff1a; 学习宋一玮 React 新版本 函数组件 &Hooks 优先 开篇就是函数组件Hooks 实现的效果如下&#xff1a; 学到第11篇了 照葫芦画瓢&#xff0c;不过老师在讲解的过程中没有考虑拖拽目标项边界问题&#xff0c;我稍微处理了下这样就实现拖拽流畅了 下面就…

Flink基础原理

一、Flink的概述 我感觉就是一个实时的流处理程序,可以实时的从数据源读取数据,然后根据设置好的一系列算法, 对数据进行处理,最终输出到目的存储介质&#xff08;数据库、缓存等&#xff09;中去,和jdk1.8里面的数据流处理很像, 也有并行流、map、fifter等处理。二、Flink的基…

实验八 数据处理与多项式处理(matlab)

实验八 数据处理与多项式处理 1.1实验目的 1.2实验内容 1.3流程图 1.4程序清单 1.5运行结果及分析 1.6实验的收获与体会 1.1实验目的 1&#xff0c;掌握数据统计和分析的方法&#xff1b; 2&#xff0c;掌握数值插值与曲线拟合的方法&#xff1b; 3&#xff0…

如何使用 .Net Core 实现数据库迁移 (Database Migration)

当我们在编写基于数据库的应用程序时&#xff0c;随着需求的增加和改变&#xff0c;我们需要升级我们的数据库&#xff0c;变更数据库表的字段&#xff0c;当我们的系统的不同版本被部署到了不同的客户那里&#xff0c;在需要给客户升级时&#xff0c;我们如何实现数据库模式 (…

注解和反射

注解和反射注解元注解反射注解 注解和注释的区别 注解 annotation写在程序之中&#xff0c;程序可以识别&#xff0c;做出相应的动作处理&#xff0c;具有检查和约束程序的作用 注释 comment 写在程序之中&#xff0c;供人参考&#xff0c;提示使用&#xff0c;程序会自动忽…

云原生系统学习[Kubernetes]——02 Pod、Deployment、Service

云原生系统学习[Kubernetes]——02 Pod、Deployment、Service [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t9RomXCf-1668486830453)(./assets/image-20221103113345300.png)] 参考资料 什么是YAMLk8s官网文档k8s中文社区k8s-book 学多少&#…

Java:继承和多态

文章目录前言一、继承1.继承概念1.1 继承的语法1.2 父类成员方法1.2.1 子类访问父类的成员变量1.2.2 子类访问父类的成员方法1.3 super、this 关键字1.4 子类构造方法1.5 继承的方式1.6 final 关键字1.7 继承与组合二、多态2.1 多态的概念2.2 多态实现的条件2.3 对重写的认识2.…