简介: 多目标(Multi Objective Learning)是MTL中的一种。在业务场景中,经常面临既要又要的多目标问题。而多个目标常常会有冲突。如何使多个目标同时得到提升,是多任务多目标在真实业务场景中存在的意义。

作者 | 志阳、文静

来源 | 阿里技术公众号

一 背景

1 多任务多目标学习

多任务(Multi Task Learning)是深度学习时代非常普遍的建模方式。在NLP、CV、CTR诸多领域有非常广泛的应用。

多目标(Multi Objective Learning)是MTL中的一种。在业务场景中,经常面临既要又要的多目标问题。而多个目标常常会有冲突。如何使多个目标同时得到提升,是多任务多目标在真实业务场景中存在的意义。如下图,视频推荐任务,既要点击率又要完播率;电商排序,既要点击率又要转化率。如今,CTR预估领域采用多任务多目标是非常主流的建模方式。值得我们深入研究。

首先来厘清一些名词概念。如下图,解释了Multi-Task 与 Multi-Label等相关概念的关系。

Multi-Task learning:多任务学习建模多个任务之间的关联关系,任务输入可以是不同的feature/sample,如BERT的MLM预训练任务与NSP任务,两个任务先后训练,输入是不同的feature和sample。这是Multi-Input & Multi-Output (MIMO) 的类型,常用的训练模式是pre-train+finetuning 和 多任务co-train交替训练。

Multi-Label learning:还有一种是Single-Input & Multi-Output (SIMO) ,就是非常常见的Multi-Label Learning,建模相同feature、相同Sample上多个label之间的关系。也常称之为多目标Multi-Objective。如CV领域中,对同一image,可以同时对semantic classification,depth regression,instance regression等诸多经典任务目标共同学习。CTR领域,对同一输入样本同时预估点击率、转化率多个目标。常用的训练模式是Joint-train的模式,形式化地表达如下:

其中\theta^{sh}是多任务共享参数,\theta^{t}是任务t 的独享参数,Joint-train的总Loss是各个子任务对应Loss的带权求和。本文后面称的多任务多目标学习,默认是这种建模方式。

2 优势&挑战

多目标共同学习的结果,有4种状态,如下示意图。“well done”: 最好的状态,所有share任务实现共同提升。“还不错”:其次的状态,所有任务不降低,至少一个任务提升。如果是主任务 + 辅助任务的搭配,能够实现牺牲辅助任务达到主任务提升的效果,也是well done。“不理想”:跷跷板现象,任务有涨有跌。“无法接受”:负迁移现象,所有任务都不如从前。

多任务多目标学习的优势:有潜力做到“还不错”和“well done”。

多任务多目标学习的挑战:

(1)如何把“无法接受”和“不理想”两个状态往“还不错”和“well done”迁移;

(2)最大限度激发“还不错”和“well done”的效果;

共享参数!1 + 1 > 2 【还不错/well done】

共享参数在效果 + 性能层面带来很多优势。效果层面,多任务的优势通过隐式数据增强达到。多个相关任务共同学习,参数共享,相互借鉴,缓解某些任务的样本稀疏带来的过拟合现象,获得更好的泛化性能。在性能层面,多任务较N个单任务网络参数量总和显著降低,在实时预测场景下MTL模型效率也更高。

共享参数! 1 + 1 < 1 【无法接受/不理想】

多任务多目标为了实现 1+1>2,在任务参数空间上设置了假设,例如:任务参数应该彼此靠近,w.r.t.一些距离度量,共享一个共同的概率先验,或驻留在一个低维子空间或流形。当所有任务都是相关的时候,这些假设可以很好地工作,但是如果在不相关的任务之间发生信息共享,则大概率导致效果下降,出现跷跷板、负迁移现象。

因此,引出了领域研究的核心问题:如何能够利用好“共享参数”,让多个任务和谐共存、相辅相成、相得益彰?

二 多任务多目标方案概览

研究上述核心问题,有两个方向,一个是Architectures,一个是Optimization Strategy,如下图所示。

Architectures从网络结构设计方向思考哪些参数共享,在什么位置,如何共享。

Optimization Strategy多目标优化策略从loss、Gradient的视角去思考任务与任务之间的关系。平衡loss体量(Magnitude),调节loss更新速度(velocity),优化Gradient更新方向(direction)。在微观层面缓解梯度冲突,参数撕扯,在宏观层面达到多任务的balance。

1 多任务多目标网络结构设计

Architectures从网络结构设计方向思考哪些参数共享,在什么位置,如何共享。合理的共享网络结构设计对于效果提升有举足轻重的作用。至今,多任务的研究焦点依然在于如何结合任务来设计共享结构。本文主要介绍CTR领域的多任务结构。如上图,较为常见的结构有Share-Bottom【hard】,无需赘述。2018年google提出MMOE,将hard的参数共享变成多个expert,通过门控来控制不同loss对每个expert的影响,2019年google提出SNR,借助简单的 NAS(Neural Architecture Search),对 Sub-Network 进行组合,为不同目标学习各自的网络结构。2020年tencent提出PLE,在MMOE的基础上增加了各任务独有的Expert。

如下图,是Share Bottom、MMoE、PLE的网络结构和简单说明,细节不展开。

  • Shared Bottom->MMoE:MMoE将shared bottom分解成多个Expert,然后通过门控网络自动控制不同任务对这些Expert的梯度贡献。
  • MMoE->PLE:PLE在MMoE的基础上又为每个任务增加了自有的Expert,仅由本任务对其梯度更新。

演进是朝着一个更加灵活的参数共享方向,思考为什么这样的演进可以带来效果的提升?我们常看到效果提升对解释是:不同的expert负责学习不同的信息内容,然后通过gate来组合这些信息,通过不同任务gate的softmax的热力分布差异,来表明expert对不同的目标各司其责,从而提升了效果。如果将视角从宏观切换到微观,从“更加灵活的参数共享”这个角度来看,MMoE对参数使用了“化整为零”的策略,PLE则是“化整为零+各有所得”。

如下图,更加形象地理解,在Share Bottom的结构上,整个共享参数矩阵如同质量较大的物体,在梯度更新的环节,两个loss反向计算的梯度向量分别是g1和g2,是这个物体收到的两个不同方向不同大小的力,这两个力同时来挪动这个物体的位置,如果在多次更新中两个力大概率方向一致,那么就能轻松达到和谐共存、相辅相成。反之,多个力可能出现彼此消耗、相互抵消,那么任务效果就会大打折扣。在这样的背景下,使得“如何选取设计多个任务,考虑任务之间相关性”成为Share-Bottom MTL能够取得成功的关键因素。

MMoE做了一个聪明的事情,“化整为零”。把一个共享参数矩阵化成多个结合gate的共享Expert,这样不同的loss在存在相互冲突的时候,在不同的expert上,不同loss可以有相对强弱的表达,那么出现相互抵消的情况就可能减少,呈现出部分experts受某task影响较大,部分experts受其他task主导,这种“各有所得”的状态。但是MMoE并不保证“各有所得”,PLE增加了spcific experts,保障“各有所得”,能够在“共享参数”的撕扯争夺上,有了最基础的保障。

在我们自己的数据集上,做了一个简单对比。3个预估目标,CTR、CVR、R3。Share-Bottom出现了翘翘板现象,但是PLE能够实现多目标的共赢现象,下表展示了模对于single task的相对提升。

未来,CTR领域多任务多目标的升级,我认为依然会朝着“更加灵活的参数共享”来提升效果。“化整为零”的方式更加灵活(例如,根据任务任务之间的相似性来动态决定共享参数的多和少,相似的任务多share一些,不太相似的任务少share一些),“个有所得”的途径更加多样(例如,从expert视角来动态确定当前时刻受哪个task主导)。

2 多任务多目标优化策略

Optimization Strategy多目标优化策略从loss、Gradient的视角去思考任务与任务之间的关系。在微观层面缓解梯度冲突,参数撕扯,在宏观层面达到多任务的balance。如下表列出了目前常见的方法【后文会详细介绍其中几种方法的原理和推导】。

我们对相关文献的调研总结后,认为多任务多目标优化策略主要focus在三个问题:

Magnitude(Loss量级):Loss值有大有小,出现取值大的Loss主导的现象,怎么办?

Velocity (Loss学习速度): 任务有难有易,Loss学习速度有快有慢,怎么办?

不同任务因为样本的稀疏性、学习的难度,在学习过程中,存在学习速度不一样的情况。不加以调整,可能会出现某个任务接近收敛甚至过拟合的时候,其他任务还是欠拟合的状态。

Direction(Loss梯度冲突):多个Loss的反向梯度,更新方向冲突,出现翘翘板、负迁移现象,怎么办?

不同Loss对共享参数W_{sh}进行更新, 梯度有大小、方向,相同参数被多个梯度同时更新的时候,可能会出现冲突,导致相互消耗抵消。就会出现跷跷板、甚至负迁移现象。

后文,将分别从网络结构和优化策略两个方向,抽一些文章来分享一下。

三 多任务多目标网络结构

MMoE:Google KDD 2018,提出后就成为了CTR领域MTL的标配。

这个文章中,有一个非常有意思的做法:人工控制两个任务的相似度,然后观测不同网络结构在不同任务相似度的表现效果。得出一个结论:MMoE在多任务之间的的相关性( relatedness )比较低的时候,效果也能很不错。

如下图,首先OMoE 和 MMoE的效果都是明显好于Baseline,表明化整为零的Experts对效果提升有非常重要的作用。近一步,如果任务相关度非常高(Correlation = 1.0),则OMoE和MMoE的效果近似,但是如果任务相关度很低(Correlation = 0.5),则OMoE的效果相对于MMoE明显下降,说明MMoE中的Multi-gate的结构对于任务差异带来的冲突有一定的缓解作用。

SNR:Google AAAI 2019,对MMoE的改进,但没有找到官方开源,目前follow的相关工作不多。

这个文章的思路与网络自动搜索(NAS)接近。多任务各自采用哪些sub-network,动态学习出来。可见的收益主要寄希望于能够自动学习出来相似任务能够共享多一些。

PLE :Tencent RecSys 2020, 对MMoE的改进,结构简洁,效果显著。

在MMoE的基础上,为每个任务增加了自己的specific expert,上文中已经解释了为什么specific expert为什么有效。看下图右上角的子图,PLE是唯一做到多任务共赢“well done”。MMoE是唯一做到“还不错”【一平一涨】。其余方法是跷跷板现象。Hard Sharing是负迁移。观察在不同相似度的多任务上,PLE都表现优秀。

四 多任务多目标优化策略

1 UncertaintyWeight

文章:《Multi-task learning using uncertainty to weigh losses for scene geometry and semantics》

这个文章估计是多目标Loss优化策略中,最常被提及的方法。但是目前在我们的任务上,没有取得明显的效果【ps. 据大多数使用过的同学反馈,都是没啥效果的】。

文章希望直接建模单个任务中的uncertainty,然后通过uncertainty来指导权重的调节。

经验tips:loss大->uncertainty多->权重小,loss小->uncertainty少->权重大。这个在我们自己的实验中也得到了验证,甚至会出现loss小的那个任务的权重是其他loss大的任务的权重的几十倍情况(如CTR、CVR、Pay目标建模的时候,Pay的loss量级最小,这个方法给了Pay目标非常大的权重,导致很快出现过拟合。)而且因为后面log项的存在,会使总的loss可能出现为负的情况。如果你的多任务设计,需要使用这个属性:loss大->uncertainty多->权重小,loss小->uncertainty少->权重大,那么这个方法可以尝试套用一下(我们也尝试过分类 + 回归的多任务,回归任务Loss大,UncertaintyWeight给予小权重,整体效果正向)。

2 GradNorm

3 DWA

文章:《End-to-End Multi-Task Learning with Attention》

定义了一个指标来衡量任务学习的快慢,然后来指导调节任务的权重。

用这一轮loss除以上一轮loss,这样可以得到这个任务loss的下降情况用来衡量任务的学习速度,然后直接进行归一化得到任务的权重。当一个任务loss比其他任务下降的慢时,这个任务的权重就会增加,下降的快时权重就会减小。是只考虑了任务下降速度的简化版的Gradient normalization,简单直接。

经验tips:对最终能够达到的收敛状态,没有啥影响。

4 PE-LTR

文章:《A Pareto-Efficient Algorithm for Multiple Objective Optimization in E-Commerce Recommendation》

淘系主搜2019年的文章。首先需要白话一下问题建模。多任务的loss公式是可以建模为了多目标优化的,也就是优化可能冲突的目标的集合。

满足这些条件的solution,被称之为一个 Pareto Stationary Point【所有帕累托最优都是Pareto Stationary Point,但反之不一定成立】。上述优化问题,可以转化成为

转化后的解释就是,找到一组w,能够尽量平衡各任务在共享参数部分的梯度。如果优化到0,就满足了KKT条件,没有优化到0,也能找到一个方向是降低全局所有任务的总Loss。

新优化目标仍然是一个难解的二次规划问题。论文提出一个两步求解算法来解这个问题。1、只考虑等式约束来放松问题,然后通过解析解来获得松弛后问题的解。但是此时得出的解可能是不满足不等式约束。2、投影步,从第一步获得可行解中获得一个满足所有约束条件的有效解。

经验tips:目前源码demo是开源的,但目前并非开箱即用的状态,我们优化适配到自己场景中,在每一轮迭代中,各个任务的w取值,颇为稳定,但目前还没有在我们的场景中取得理想的效果。

这个方法是探索任务级别的平衡关系,求解w。WWW 2021年微信文章《Personalized Approximate Pareto-Efficient Recommendation》提出来在视频推荐任务中不同用户在意侧重的目标(视频点击率 vs 视频完播率)是不一样的,求解的w不应该是在任务维度,而是每个用户样本,都应当有自己的一组w。这个出发点是有价值的,但在我们的业务中,更有价值的可能是按照人群group来得到自己的一组w,如新用户更加注重引导点击,老用户更家注重引导交易,如消费品行业更加注重交易,非消行业着重引导询盘,实现多目标共同增长。国家/行业/用户分层等群体目标差异的优化,也是一个有意思有价值的点。

5 PCGrad & GradVac

文章:PCGrad -《Gradient Surgery for Multi-Task Learning》,GradVac - 《Gradient Vaccine: Investigating and Improving Multi-task Optimization in Massively Multilingual Models》

这两篇文章是Google近期的研究,PCGrad投ICLR 2020被拒后,投中NIPS 2020。这个文章首次直面gradient冲突源头。采用简单、直接的方式做gradient调整。ICLR 2021 GradVac是PCGrad的改进,应用在多语种机器翻译任务上。

PCGrad指出MTL多目标优化存在3个问题:1. 方向不一致,导致撕扯,需要解决;2. 量级不一致,导致大gradients主导,需要解决;3. 大曲率,导致容易过拟合,需要解决。本文以方向不一致作为切入点,打破这个问题。怎样打破的? 白话一下首先通过cosine相似度来定义两个任务在共享参数上是否是冲突的,如下图,conflicting是夹角大于90度,non-conflicting是小于90度。如果两个两个梯度向量存在冲突,则把 gi 向量中与 gj 冲突的分量给减去。剩下的则是没有冲突的部分。这就是核心。

GradVac应用在机器翻译领域,给出了3个非常有意思的观察:

1.梯度的相似性 vs language相似性 => close tasks enjoy similar loss geometries, Gradient Similarities reflect language proximities

a.任务是翻译任务,不同的翻译语料共享一个大模型。如上图热力图,每一个格子的得分含义是:Baltic翻译成en的任务对应的gradient,与 Turkic翻译成en任务对应的gradient 之间的cosine similarity

b.语言越相近,gradient的cosine similarity也越相似。

2.梯度的相似性与模型效果正相关

a.回答一个问题:相似性越高的任务进行joint trainnig,是否能够带来更好的效果?

i.答案是肯定的! 相似度越高的任务进行MTL的训练,效果是更好的。

ii.有研究表明en-x相对于x-en是更加困难的,从下面的gradient similarity也可以观察到,x-en的梯度相似性更高。

iii.以en-fr pair作为锚点,分别加入相似性更高的/更低的任务去联合训练得到不同的模型。然后都在相同的测试集合en-fr上进行评估【以en-fr为主人物,其他语种对为辅助任务】,去对比gradient similarity更高的pair 和 更低的pair,观察他们在BLEU指标上的效果,添加相似性更高的语种作为辅助人物会有更好的效果。

3.梯度相似性随着训练步骤和网络层级(transformer的layer)在不断的演变

a.随着训练step的改变:gradient similarity会逐渐收敛到一个水位

b.随着layer的改变:x-en【越靠近输出位置的layer,越相似】,en-x 【越低level相似】,因为都是从en出发的,这个容易解释,也make sense。

我觉得这些观察非常重要,GradVac本身怎样做,甚至都显得没那么重要了。白话一下GradVac的做法

  1. PCGrad只是设置了一个下界。让两个任务的cosine相似度至少是大于等于0的,不能出现负数。这个下界非常容易达到。
  2. 基于上文提及的观察3,两个任务的真实相似度,其实是会逐渐收敛到一个水位。这个值可以认为是两个任务的真实相似度。
  3. 两个任务的Gradinet相似度,应当去靠近这个相似度,而不是只满足PCGrad设置的下界。

经验tips:改造代码,尝试中,目前没有可分享的经验。有后续再追加。

五 小结

多任务多目标出现跷跷板、负迁移现象,微观的梯度冲突是本质。不论是从Architecture 还是 Optimization strategy两个维度来优化升级,殊途同归,都是要缓解冲突,减少多任务间的内耗。

总结一下,从实践角度来看,要做一个共赢的多任务多目标模型,技术层面几点经验tips:

(1)网络结构backbone,目前优选PLE;

(2)多任务的设计和构造,要考虑任务间的相似性;如主 + 辅任务,辅助任务和主任务的关系需要考虑;

  • 目前还没有一种权威的方法或者指标来度量任务与任务之间的相似性,那么实操中,怎么办?【PS. 多任务间的相似性度量,应该也是一个有意思的研究点】
  • 多任务两个Loss,只训练其中一个Loss,另一个Loss也在缓慢下降! => 任务相关(get)

    • 三个loss,ctr/cvr/contra loss, 仅仅 training ctr/cvr主任务loss,观察另一个辅助contra loss也会跟随下降。实验表明引入这个辅助loss一起train会带来很好的离线效果提升。

  • 多任务两个Loss,只训练其中一个Loss,另一个Loss没有变化甚至波动增加! => 如果不是刻意而为之,慎重联合

(3)优化策略方面,留意多个Loss的量级,如果差异很大,注意约束和控制;上图contra loss 与 ctr cvr的loss,差了一个量级。

(4)梯度冲突的解决,一种技能是pareto,另一种是以pcgrad为代表的直接对梯度进行调整的方法,可选用。

多任务多目标的优化,有两种典型的方式:

  1. 主任务 + 主任务:解决业务场景既要又要的诉求;多个任务都要涨;
  2. 主任务 + 辅任务:辅助任务为主任务提供一些知识信息的增强,帮助主任务提升;

不同的业务诉求下,会有任务目标不同的侧重、关联、取舍。多任务多目标,有非常多的组合盲盒,等待打开。

Reference

本文中提及到的参考文献如下

  1. Kendall A, Gal Y, Cipolla R. Multi-task learning using uncertainty to weigh losses for scene geometry and semantics[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2018: 7482-7491.
  2. Rosenbaum C, Cases I, Riemer M, et al. Routing networks and the challenges of modular and compositional computation[J]. arXiv preprint arXiv:1904.12774, 2019.
  3. Tang H, Liu J, Zhao M, et al. Progressive layered extraction (ple): A novel multi-task learning (mtl) model for personalized recommendations[C]//Fourteenth ACM Conference on Recommender Systems. 2020: 269-278.
  4. Ma J, Zhao Z, Yi X, et al. Modeling task relationships in multi-task learning with multi-gate mixture-of-experts[C]//Proceedings of the 24th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining. 2018: 1930-1939.
  5. Chen Z, Badrinarayanan V, Lee C Y, et al. Gradnorm: Gradient normalization for adaptive loss balancing in deep multitask networks[C]//International Conference on Machine Learning. PMLR, 2018: 794-803.
  6. Liu S, Johns E, Davison A J. End-to-end multi-task learning with attention[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2019: 1871-1880.
  7. Lin X, Chen H, Pei C, et al. A pareto-efficient algorithm for multiple objective optimization in e-commerce recommendation[C]//Proceedings of the 13th ACM Conference on recommender systems. 2019: 20-28.
  8. Xie R, Liu Y, Zhang S, et al. Personalized Approximate Pareto-Efficient Recommendation[C]//Proceedings of the Web Conference 2021. 2021: 3839-3849.
  9. Yu T, Kumar S, Gupta A, et al. Gradient surgery for multi-task learning[J]. arXiv preprint arXiv:2001.06782, 2020.
  10. Wang Z, Tsvetkov Y, Firat O, et al. Gradient vaccine: Investigating and improving multi-task optimization in massively multilingual models[J]. arXiv preprint arXiv:2010.05874, 2020.
  11. Sener O, Koltun V. Multi-task learning as multi-objective optimization[J]. arXiv preprint arXiv:1810.04650, 2018.
  12. Ruder S. An overview of multi-task learning in deep neural networks[J]. arXiv preprint arXiv:1706.05098, 2017.
  13. Vandenhende S, Georgoulis S, Van Gansbeke W, et al. Multi-task learning for dense prediction tasks: A survey[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2021.

原文链接

本文为阿里云原创内容,未经允许不得转载。

多任务多目标CTR预估技术的更多相关文章

  1. 微软的一篇ctr预估的论文:Web-Scale Bayesian Click-Through Rate Prediction for Sponsored Search Advertising in Microsoft’s Bing Search Engine。

    周末看了一下这篇论文,觉得挺难的,后来想想是ICML的论文,也就明白为什么了. 先简单记录下来,以后会继续添加内容. 主要参考了论文Web-Scale Bayesian Click-Through R ...

  2. 内容匹配广告投放技术4:网盟CTR预估(百度文库课程)

    原文:http://wbj0110.iteye.com/blog/2043065 该文是百度文库课程<计算广告学之内容匹配广告&展示广告原理.技术和实践>的课程笔记,感谢百度! 课 ...

  3. 主流CTR预估模型的演化及对比

    https://zhuanlan.zhihu.com/p/35465875 学习和预测用户的反馈对于个性化推荐.信息检索和在线广告等领域都有着极其重要的作用.在这些领域,用户的反馈行为包括点击.收藏. ...

  4. CTR预估算法之FM, FFM, DeepFM及实践

    https://blog.csdn.net/john_xyz/article/details/78933253 目录目录CTR预估综述Factorization Machines(FM)算法原理代码实 ...

  5. 深度CTR预估模型中的特征自动组合机制演化简史 zz

    众所周知,深度学习在计算机视觉.语音识别.自然语言处理等领域最先取得突破并成为主流方法.但是,深度学习为什么是在这些领域而不是其他领域最先成功呢?我想一个原因就是图像.语音.文本数据在空间和时间上具有 ...

  6. CTR预估经典模型总结

    计算广告领域中数据特点:    1 正负样本不平衡    2 大量id类特征,高维,多领域(一个类别型特征就是一个field,比如上面的Weekday.Gender.City这是三个field),稀疏 ...

  7. CTR预估模型演变及学习笔记

    [说在前面]本人博客新手一枚,象牙塔的老白,职业场的小白.以下内容仅为个人见解,欢迎批评指正,不喜勿喷![握手][握手] [再啰嗦一下]如果你对智能推荐感兴趣,欢迎先浏览我的另一篇随笔:智能推荐算法演 ...

  8. 【项目】百度搜索广告CTR预估

    -------倒叙查看本文. 6,用auc对测试的结果进行评估: auc代码如下: #!/usr/bin/env python import sys def auc(labels,predicted_ ...

  9. 【项目】搜索广告CTR预估(二)

    项目介绍 给定查询和用户信息后预测广告点击率 搜索广告是近年来互联网的主流营收来源之一.在搜索广告背后,一个关键技术就是点击率预测-----pCTR(predict the click-through ...

  10. CTR预估中的贝叶斯平滑方法及其代码实现

    1. 背景介绍 广告形式: 互联网广告可以分为以下三种: 1)展示广告(display ad) 2)搜索广告(sponsored search ad) 3)上下文广告(contextual ad)   ...

随机推荐

  1. grep 第四天

    grep 第四天 1 使用grep 取 passwd 显示行数 grep -c '' /etc/passwd [root@master ~]# grep -c '' /etc/passwd 135 2 ...

  2. 高校刮起元宇宙风!3DCAT实时云渲染助力川轻化元校园建设

    元宇宙,是一个虚拟的网络世界,它与现实世界相互连接,为人们提供了一个身临其境的数字体验.元宇宙的概念并不新鲜,早在上个世纪就有科幻作家和电影导演对它进行了想象和创造.但是,随着科技的发展,特别是5G. ...

  3. JavaScript利用反射实现方法注入

    1. 引言 反射是一种能够在程序运行时动态访问.修改某个类(对象)中属性和方法的机制 JavaScript在ES6中提供了Reflect 这一个内置的对象,它提供拦截 JavaScript 操作的方法 ...

  4. 超高并发下,Redis热点数据风险破解

    ★ Redis24篇集合 1 介绍 作者是互联网一线研发负责人,所在业务也是业内核心流量来源,经常参与 业务预定.积分竞拍.商品秒杀等工作. 近期参与多场新员工的面试工作,经常就 『超高并发场景下热点 ...

  5. 【VMware ESXi】HP Z4G4 Workstation安装ESXi停留在Shutting down firmware services...的解决办法。

    家里有台HP Z4G4 Workstation工作站,底层安装运行了VMware的ESXi Hypervisor,作为Homelab的All in one环境. 之前安装ESXi 8的时候有个问题,在 ...

  6. 《On Java 8》笔记

    第一章 对象的概念 复用 组合和聚合 组合(Composition)经常用来表示"拥有"关系(has-a relationship).例如,"汽车拥有引擎" 聚 ...

  7. C# 日志监控软件 基于 FileSystemWatcher

    效果: 代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using System. ...

  8. 面试官:说说Spring中IoC实现原理?

    IoC(Inversion of Control)即控制(权)反转,它是一种编程思想,它的核心理念是将对象的创建和管理权力从对象本身转移到外部的容器或框架. IoC 的主要目的是降低代码之间的耦合度, ...

  9. KingbaseES V8R3集群运维案例之---failover故障处理

    ​ 案例说明: 此案例,为KingbaseES V8R3集群failover切换时,通用的故障处理方式.通过对failover.log和recovery.log日志的解读,让大家了解KingbaseE ...

  10. idea创建一个干净的SpringMVC项目

    一.创建普通的maven项目 二.右键添加web支持 三.pom.xml配置maven环境 1 <!--导入依赖--> 2 <dependencies> 3 <depen ...