计算广告(五)
Nobid
Nobid(在某手有时也叫MCB,在Facebook叫Lowest Cost)是指广告主不用(也不能)对转化成本进行出价,而是出一个预算(大多数是日预算),然后投放平台的目标是在时间范围内,尽量平稳高效地把这些预算全部花出去,然后获得尽可能低的转化成本的一种投放方式。“四点三率两控制一加强”里的两控制中,一个控制是成本控制,另外一个控制就是预算控制。Nobid就是预算控制中的最主要产品。(还有成本控制和预算控制同时生效的产品)。
Nobid在过去一年可能算是国内各大媒体平台都比较火热的一种投放出价模式,据说消耗占比一直在增加。但是这种投放方式其实一点也不新鲜,早在10年前就已经有了(当然现在在具体技术实现上有了长足的进步)。Nobid为什么会重新热起来呢?
一、Nobid适合哪些广告主投放?适合对成本敏感的广告主吗?
Nobid在最初设计的时候,主要是为了预算有限的广告主(而不是那些“成本达标,预算无限”的广告主)。这些广告主,可能是因为业务规模限制,或者资金周转周期等原因,即使投放出来的转化成本再低,也不能在短期内增加预算。
另外,投放直播的广告主也是非常适合Nobid的初衷的,因为一场直播持续的时间比较短,大多数是提前就固定好预算,就这么多钱,几个小时花完。
那对于对转化成本非常在意的广告主,Nobid是不是就不适合了?先说结论,答案是也是适合的,具体的原因下面再展开。
二、Nobid出价的基本原理是什么,和“成本出价”在一起是如何竞价的?
Nobid和“成本出价“的排序公式都是一样的,都是(以单出价为例)
编辑
添加图片注释,不超过 140 字(可选)
对于“成本出价”,调整后的转化出价=广告主原始转化出价*Ratio,其中Ratio由调价系统自动计算出。对于Nobid,“调整后的转化出价”由调价系统自动计算出。
虽然在Nobid下,广告主原始转化出价对于平台并不知晓。但是等价地,我们也可以认为,调整后的转化出价=广告主原始转化出价*Ratio,而Ratio由调价系统自动计算出。
因此可以等价认为,不管Nobid还是“成本出价”,排序公式都是:
编辑
添加图片注释,不超过 140 字(可选)
其中Ratio是系统调价因子(某条叫风控因子)。“成本出价”和Nobid差别在于计算Ratio的方式不一样而已。
最后所有的广告,不管是“成本出价”还是Nobid模式的,都根据eCPM来排序,前一位或者N位的广告进行曝光和计费。
对于“成本出价”而言,Ratio调整的一种基本实现原理很简单(事实上的逻辑要复杂不少,但是可以用这个实现来理解)。
就是如果现在超成本,就把Ratio调低一些。如果现在欠成本,就把Ratio调高一些。例如,现在消耗1000,转化10个,转化成本为100元,广告主转化出价80元。
那么这个时候就应该调低Ratio,使得转化成本降下来。最终希望通过Ratio的调节,使得实际成本接近广告主的转化出价。
对于Nobid而言,目标是希望把预算平稳高效地花出去,然后最大化买到的转化数。一个直观的做法是先做一个规划,每个小时,应该花出去多少钱。
如果现在实际花出去的预算,比计划中截止到现在应该花出去的消耗少了,那么就提高出价。如果是比计划花得多了,就降低出价。比如截止到下午14点,
计划花出去1w,但是现在只花出去8k,那么就应该提高出价了,反之亦然。所以现在的核心问题就变为如何来制定这个消耗计划。
一天每个小时消耗的计划,可能有几种情况,如图所示:
编辑切换为居中
添加图片注释,不超过 140 字(可选)
(a) 第一种情况是在一天还没有结束的时候,预算就已经花完了。这大概率不是一种最优的情况,因为剩下几个小时里,性价比比较高的流量就没有机会被购买到了。
(b) 第二种情况是一天内的消耗非常的随机波动,一会高一会低,这大概率也不是比较好的情况,消耗不平稳。
(c) 第三种情况是一天内平均分配,刚好在一天结束把预算花完,且很平稳。但是问题是一天的流量在1-6点比较低,中午晚上比较高。这样相当于在1-6点的时候买量相对大盘来说比例是更高的,中午晚上反而是更低的,也不好。
(d) 第四种情况是按一天的流量来决定消耗的花费速度,看起来是比较合理了,这个也是大多数Nobid最基础的方案。
(e) 第五种情况是按一天的能购买到的流量的性价比来分配,假设中午和晚上的竞争没有那么激烈,某客户可以以比较低的成本买到转化更好的流量,那么就应该在中午和晚上多购买一些流量。当然因为一天中流量的性价比是事先不知道的,而且受竞争对手的买量策略影响,相对比较难预测。
一般来说,各家的Nobid策略不尽相同,但大多数的基本原理是符合d或者e,不会是abc。
三、用Nobid相比原来的“成本出价”的方式,有什么好处,有什么缺点?
前面也提到,对于对成本也敏感的广告主,也是可以用Nobid的。
针对这些客户的需求,我们来探讨下“成本出价”的方式,有些什么弱点或者改进空间。为什么Nobid在这些方面有可能能做得更好。
-
“成本出价“方式下,平台承担了素材冷启动的部分成本,但是平台无法充分利用人对素材的先验判断 短视频素材的冷启动是大多数广告主都要面临的问题。展示广告的载体,经历了一个从文字到图片到视频的过程。在原来文字广告或者图片广告时代好像并没有素材冷启动的问题。 这可能有几个原因: 一个是短视频素材的制作成本较高,原拍的一般至少都几百块,文字图片成本较低,不起量就拉倒; 第二是文字和图片广告的平均cpm低于短视频的,单位成本下能给每个素材曝光的数量就会更少,模型能积累的样本就更少; 第三是,短视频的机器理解难度,明显高于文字和图片素材,使得模型很难利用机器学习技术去理解这个素材。 举个例子来说,文字素材可以做一些关键词分析,基本就知道这个广告是什么广告。而一个视频,对于机器要理解这个视频是讲什么的,技术上的难度是非常高的。 所以对于短视频素材来说,模型在预估转化率的时候,除了参考一些同广告主/同产品历史素材的转化率,以及做一些力所能及的内容理解分析之外,可以拿到的信息量并不太多,主要还是得靠实际投放出去试试看,然后收集这些样本给模型。也就是要经历一个冷启动的过程。这个冷启动的过程,是在模型还预估不太准的时候进行投放。即使这个素材是个好素材,冷启动期也会因为投放人群不够准确,浪费掉不少预算;更不要说如果素材质量不高,那么冷启动期的投放大概率是超成本。 可见素材的冷启动是需要付出额外成本的。但测出好的素材后,对广告主和平台都是有益的。因此很多投放平台,会对冷启动期的素材做补贴,承担了部分冷启动的成本。另外,如果冷启动的素材导致了超成本,满足了转化数要求后,平台也是赔付的。这些情况下,也是平台在承担广告主的部分冷启动成本。当然很多时候,也是广告主自己通过提高出价,或者使用“一键起量”(某手叫“加速探索”)等产品来加速冷启动,这些产品都是不赔付的,也就是说由广告主自己来承担这部分成本。 因为部分平台会补贴冷启动素材以及赔付冷启动素材导致的超成本,从机制上广告主就有动力大量新增素材。从而给广告投放系统的整体匹配增加了很大的负担。这可能也是今年一些头部平台,开始管控素材量的其中一个原因(但肯定不是唯一原因)。 在Nobid下,如果一个单元里有新素材,Nobid会尽量买那些当前模型(虽然当前还不太准)认为尽量好的流量,把钱都花掉,但不保证成本。Nobid的目标不是成本达成, 而是预算达成,因此也就没有赔付。 另外如果再把冷启动补贴也去掉,那么素材冷启动的成本就都由广告主来承担。听起来好像对广告主是不利的,但是从机制上,从长远来上说,很可能是个更好的选择。 因为优化师是人,在视频理解上,人比机器还是要靠谱得多。优化师对素材转化率的先验判断,要比模型更加靠谱。 一个更合理的机制下,是谁更有能力做好就应该由谁来做。而冷启动投放成本由广告主(优化师)来承担,则让优化师真正有动力把这个事情做好,而不是盲目堆砌基建。 广告主可能会发现,即使没有冷启动补贴和赔付,最后的冷启动成本反而更低了。整体效率提高了,最终对广告主和平台可能都是好事。
-
平台的调价策略,未必是最适合每个广告主的差异化需求 因为Nobid的目标是在指定时间内把钱花掉,因此不会有所谓的“不起量”的问题,具体原理是因为当消耗达不到计划的消耗时,Ratio会逐渐提升,出价提升到足够高,消耗总是能花出去的。 等到消耗追上计划消耗,Ratio(及出价)再降回来。其实很多广告主之前会自己采用这个冷启动策略,当新素材起不了量的时候,自己主动提价,等积累了一定的数据后,再把价格降下来。 而如果用原来的“成本出价”,是不一定会有这个先提价跑量再降回原价的策略的(有一些可能会有防止长时间没有消耗的小策略,不在此讨论范围内)。 而事实上,Nobid在这方面的优势,倒不是说自带的这个“肯定能跑量”策略对于所有广告主都是更优的选择。而是它能更多地把调价的控制权交还给了广告主。 虽然广告主还不能直接控制最后的Ratio(也就是不能控制“调整后的转化出价”),但是对Ratio的控制力明显增加了。例如把预算翻一倍,基本上出价也会明显提高。如果把预算减少一倍,基本上出价也会明显下降。举个例子,广告主真实想要的是80元的转化成本,如果现在成本是60元,那么把预算提一些,Ratio也会增加一些,虽然幅度可能不一样,但是肯定会增加,从而让成本更接近目标80元,当然也会获得更多的量。并且Ratio的增加幅度相对来说是随时间相对稳定的。 而在“成本出价”的情况下,虽然也可以通过出价来影响Ratio。例如目标还是80元,现在成本是60元,为了影响Ratio,把出价修改为90元。但是调价系统隐含的逻辑是不确定的。它认为你真正的目标就是要成本达到90元。因此它可以选择突然提一个很高的价格,有跑量再降回来;也可能慢慢把价格提上去,发现没有明显影响成本,又加一个较大的幅度。这些逻辑是不太确定的,且Ratio的提高幅度可能是随着时间变化的。 所以我们可以理解为,Nobid是把更多的调价控制权交还给了广告主。让广告主/优化师可以根据自己的业务特点,和独特的投放方法论,来达到可能更好的投放效果。 但是聊到这里,有个问题肯定会冒出来。那一开始为什么我们要让平台来调价,完全交给广告主自己来调行不行? 从机制上来说,在计费点之后的部分,都可以交给广告主自己来干,是不会影响激励兼容的机制的。也就是说,如果计费点在曝光,点击率/转化率预估和调价都可以交给广告主自己来干。从机制上来说没问题,但是这里还需要考虑谁能干得更好的问题。 对于点击率/转化率预估来说,显然平台是能预估得更准确的,因为平台通常拥有更多的数据。对于调价,机制上来说给广告主自己控制也是没有问题的(不过相应地,平台就不会承担赔付的义务了)。只是对于很多技术能力不强的广告主来说,是比较难比平台做得更好的。但是Nobid的出现,其实就相当于平台在适当地把这些选择权交还给了广告主。 广告主可以自己更多地影响调价,如果能获得更好的投放效果,那么皆大欢喜。否则也还可以继续用“成本出价”,让系统来做控制。可以类比下,“成本出价”好比自动挡的汽车,Nobid则好比是手动挡的汽车。对于赛车手来说,手动挡是比自动挡更加好的选择;而对于普通司机来说,用手动挡则可能是手忙脚乱的情况。
-
平台的风险控制程度,未必是最适合每个广告主的
讲这个之前,首先要讲一下“归因视角”和“上报视角”的知识作为基础。大家都知道,现在很多链路越来越深,很多事件的回传延迟高达几个小时,甚至几天。因此就有了两种不同视角。对于“上报视角”,只看当天发生的事件,曝光和消耗看当天的,转化也只看当天回传的;对于“归因视角”,是希望能把曝光和消耗,和因为这些曝光造成的转化给对应起来。
以两种视角下的转化成本为例,我们来看下面这个例子(这个例子假设所有的转化有一半当天回传,有一半第二天回传):
编辑切换为居中
添加图片注释,不超过 140 字(可选)
以6月8日为例,上报视角的转化成本,等于今天的总消耗200元,除以(昨天曝光带来的延迟到今天回传的50个转化+今天曝光带来且今天回传的100个转化)=200/150=1.333元。但是在归因视角看来,则等于今天的总消耗200元,除以(今天曝光带来的且今天回传的100个转化+今天曝光带来的且延迟到明天回传的100个转化)=1元。
我们都知道在“成本出价”调价系数调整Ratio的时候,主要是参考广告主目标成本和实际转化成本的关系。那么这里的实际成本,是应该看上报视角的转化成本,还是归因视角的转化成本呢?据我的了解,业界都有,有看归因视角的,也有看上报视角的,也有两者结合的。
从原理上看,应该是看归因视角是更好的选择。要理解这一点,我们需要再理解一下为什么需要有Ratio,为什么需要调价?eCPM=CTR * CVR * 广告主出价,不就已经是eCPM了吗?为啥还需要后面再乘以Ratio?
因为我们的最终目标是:转化成本= 广告主出价,但是如果我们按eCPM=CTR * CVR * 广告主出价可能达不到这一点。有几个原因:
-
模型的预估可能是不准确的。例如假设CTR稳定偏高10%,那么最后就会超成本大概10%。 所以调价的第一个作用是模型纠偏。 有偏估计和模型纠偏是统计学和机器学习领域中的概念。 有偏估计(biased estimation)是指在对一个参数进行估计时,估计量的期望值与真实参数值存在系统性差距。换句话说,有偏估计是一种不精确的估计方法,它可能会导致对某个参数的预测偏离真实值。有偏估计的一个常见原因是数据收集过程中的不公平性或误差,如抽样偏差、测量误差等。 模型纠偏(model debiasing)是指在训练或应用机器学习模型时,采用一定方法来修正模型预测中的偏差。这种偏差可能是由于数据集不平衡、有偏估计、过拟合等原因造成的。模型纠偏的目标是使模型预测更接近真实值,提高模型的泛化能力。有多种纠偏方法,如重新采样、使用权重调整的损失函数、对抗性训练等。 总的来说,有偏估计描述了一种统计学现象,即参数估计可能不准确;而模型纠偏则是一种应对策略,旨在通过改进模型和数据处理方法来减小预测中的偏差。
-
GSP计费模式下,计费小于ecpm,因此如果不调价,CTR CVR假设完全预估准,最终也是欠成本。
所以调价的第二个作用是弥补计费比。
(3)假设因为模型预估问题或者计费问题导致当前投放单元已经欠成本或者超成本,那么后面的Ratio应该往对应方向调整,来使得最终的转化成本=广告主出价。
所以调价的第三个作用是弥补历史超欠。
对于模型纠偏来说,归因视角是更好的选择,因为模型是按归因视角来训练的(归因需要把转化和曝光对应起来,来学习怎么样的曝光能带来转化)。
对于弥补计费比来说,因为计费比通常是个常量,也就是对应的调整比例基本上是个相对固定的值,我们可以不用太考虑这个。
对于弥补历史超欠来说,其实感觉归因或者上报都可以。
所以总体来说,看归因视角是更好的选择。
那么为什么还会有公司选择看上报视角,或者上报视角和归因视角结合的呢?我们还是从上面的例子来理解。假设今天就是上面例子中的6月7日,今天投放了100元钱,买了1000个曝光。假设真实的转化率是10%,也就是会有100个转化。假设这些转化有一半延迟到明天回传。那么在今天结束的时候,我们的成本是2元,假设我们的目标成本是1元。那么我们这个时候从上报视角看就已经严重超成本了,从归因视角看是正好达成的。但问题是,我们是不可能提前知道明天会有50个转化延迟回传的,也就是说归因视角的转化成本,是不可能提前知道的。
如果万一明天没有更多的回传怎么办?那么可能就超成本了。我们需要控制这个风险,如果调价系统是选择按上报视角来调价,这个时候就会开始降低出价,做更保守的投放。所谓“落袋为安”。因此上报视角的调价,其实是从控制风险的角度来考虑的。这可能也是为什么在某节,调价因子叫做风控系数的原因。但如果我们这个素材的转化率我们心里很有数,或者我们对于有一半样本会回传这个很确定,那么可能我们就更有把握冒这个风险,不把Ratio调低,则可以买到更多的量。
铺垫了这么多,回顾下我们其实是想搞清楚为什么Nobid在这方面,可能比“成本出价”会更好。现在我们可以来回答了,
因为不同广告主对不同的广告投放单元,风险的承受能力是不一样的(出于对素材效果的有把握程度,或者仅仅是因为财大气粗可以承担更多的分时超成本风险)。
而平台自动的调价,是很难替广告主做出这些非常个性化的判断的。而根据前面说的,Nobid让广告主更多拥有了对Ratio(或者最终出价)的控制权。那么广告主就有可能自己来判断,更多地来调整和影响出价,从而可能取得更好的投放效果。
最后有人可能会问,如果要让广告主有更多对Ratio的控制能力,为什么还需要通过设定预算来影响,而不直接让广告主来设定Ratio就好了?个人觉得一个原因是Nobid本来能满足部分预算有限广告主的需求,只是发现刚好也能扩展应用到对成本敏感的广告主,可以兼顾两种需求,未必一开始就是这么设想的;另外一个原因是用预算来影响会平滑得多,如果直接设定Ratio,很难人工控制。就像大多数车的方向盘和轮胎的旋转角度并不是严格对应的,方向盘转1圈半,轮胎大概转个几十度。另外方向盘的细微晃动会有平滑机制,不会体现在轮胎上。这样的平滑设计能让转向更加精确和平稳。当然以后随着行业发展,也不排除广告主更直接影响Ratio的可能性。毕竟F1赛车的方向盘转向比就比家用车小许多。
四、 Nobid的投放有哪些要注意的?
我们发现前面介绍的三个方面,总结一下都可以认为Nobid是平台把更多的权利和义务交给了优化师,包括判断冷启动素材跑量的权利和义务,冷启动策略或其他调价策略的制定,风控策略的把握。对于优化师的发挥空间更大了,但是投放也变得更加复杂。有几个注意点可以注意下:
-
原来“成本出价”的一些方法论,可能不一定也适合Nobid:很多规律可能会变,大家需要结合Nobid的原理去理解和推演新的投放逻辑,沉淀Nobid下的投放方法论。 不过换个角度,原来“成本出价”投放效果不如其他人的优化师,在积累了足够的Nobid投放经验后,也可能弯道超车。
-
注意Nobid和“成本出价”的互相结合:Nobid和“成本出价”并不是一个二选一的选择。而是可以配合起来使用。一辆车除了有自动挡,手动挡,还可以有手自一体。这样一方面可以实现需要自己来控制的时候,自己控制;自己做得不如平台的时候,把控制权交还给平台的调价系统。另外一方面,底层投放的数据是在某些层面(例如素材)是相通的,可以利用好这一点来探索新的玩法。例如可以用Nobid做冷启动阶段,发挥自己对素材更准确的判断,以更低成本积累了一定数据,再用“成本出价”来铺量(只是举例一种策略,不一定work或不一定适合所有客户)。
-
需要更多考虑产品的特性:因为不够考虑自己产品的特性,那么大概率就不能比平台自己做更好。以风控策略为例,广告主有规模大的也有规模小的,或者不同优化师的投放预算也有多有少。就类似投资领域,基金的资金规模和每个基金经理的AUM(Asset Under Management)不尽相同,那么风控策略也不应该一样。有的人炒股票,完全跟着很多专业的机构买,机构买啥他买啥,为啥最后机构赚了,散户还是亏了呢?因为散户的风险控制和有大资金量的机构的风控,肯定是不能一样的。资金少的,风险要控制得紧一些,反之亦然。
五、Nobid会完全取代“成本出价”吗?
答案是不会完全取代,大概率是共同配合。上面好像说了Nobid的很多优点,但是大都是有条件成立的。
首先,对优化师的水平要求更高了。根据前面的分析,对于有成本要求的广告主,要做到质和量比“成本出价”更好,则需要优化师对素材质量和是否能起量要有更精准的判断,另外需要能制定好最适合产品的冷启动或者其他调价及风控策略,并通过调整来落实策略。有的优化师能做到,有的则不一定。
第二,每个广告主具有差异化的程度不同。有的广告主的产品和其他产品差异化特别大,素材跑量能力难判断,冷启动策略差异大,风控标准很不同。那么可能在Nobid上拿到更好的结果的概率就更大。反之,这个收益空间可能就不会特别大。
第三,人工主观操作的一致性不如机器。类比量化交易和人工主观交易。人工主观交易在结合领域知识等方面有优势,但是量化交易至少在执行的纪律性和一致性比人操作要更好。一致性带来的第一个好处是保障一个策略的严格有效执行;另外一个好处是容易积累到足够的数据来得到一个置信的规律。这一点,可能给广告主侧的投放平台,创造了更多的空间。有能力的广告主,可以通过搭建自己的投放平台,来实现更稳定的策略执行和更科学的策略迭代。
六、Nobid为什么会在最近重新热起来呢?
这个没有标准答案,个人认为有两个主要原因:
一是,现在优化的链路越来越深,所以延迟回传的时间越来越久。根据上面的讨论,如果还是在优化点击或者很浅度事件的时代,素材冷启动,冷启动策略和风险控制问题都小很多。平台自己做就能做得很好了,空间并不大。但是在现在越做越深的情况下,情况就相反了,这里的空间变得不可以忽略。
二是,因为随着最近的经济格局的变化和竞争的日趋激烈,以及各大平台和广告主仍然需要新的增量。而Nobid则提供了这种释放增量效率,打开天花板的可能性。平时开车可能开自动挡就可以了(有的还上了自动驾驶),简单有效,有利于新司机上手。现在竞争更激烈了,要在赛道上比拼速度,那么就得上手动挡或者手自一体了。
其他:还有一些产品是支持同时出预算和成本出价。例如facebook的cost cap等。此时哪个限制先达到,哪个约束就先起作用。例如如果预算花不完,但是成本已经快超了,则调价系统不会继续提价。如果成本一直欠着,但是预算已经撞线了,也不会继续提价。这种模式的好处是让广告主把自己所有的诉求都表达出来(预算和成本),然后平台知道了广告主更全面的需求,可以更好地满足广告主的诉求。但是按我们前面的逻辑来说,如果现在的目的是为了把更多权利和义务交还给广告主来打开效果天花板的话,这个方式的出发点刚好是相反的(广告主把需求都告诉平台,平台来全部保障效果)。
总结,Nobid除了适合预算有限的广告主或者直播广告主,也适合对成本敏感的广告主使用。它的出价公式和“成本出价”等价一致,仅仅是调价策略(风控系数策略)的差异。Nobid按预算达成来调整,“成本出价”按成本达成来调整。Nobid通过三个方面释放了更多的权利和义务给广告主/优化师,从而有可能提高了匹配效率。三个方面分别是
判断冷启动素材质量,
冷启动策略或其他调价策略的制定,
风控策略的制定。
优化师在投放Nobid的时候,建议不能固守原来的投放方法论,可以综合考虑和“成本出价”的结合,以及更多考虑自己产品投放的差异化。
相关文章:

计算广告(五)
Nobid Nobid(在某手有时也叫MCB,在Facebook叫Lowest Cost)是指广告主不用(也不能)对转化成本进行出价,而是出一个预算(大多数是日预算),然后投放平台的目标是在时间范围…...

排序输入的高效霍夫曼编码 | 贪心算法 3
前面我们讲到了 贪心算法的哈夫曼编码规则,原理图如下: 如果我们知道给定的数组已排序(按频率的非递减顺序),我们可以在 O(n) 时间内生成霍夫曼代码。以下是用于排序输入的 O(n) 算法。1.创建两个空队列。2.为每个唯一…...

奇异值分解(SVD)和图像压缩
在本文中,我将尝试解释 SVD 背后的数学及其几何意义,还有它在数据科学中的最常见的用法,图像压缩。 奇异值分解是一种常见的线性代数技术,可以将任意形状的矩阵分解成三个部分的乘积:U、S、V。原矩阵A可以表示为&#…...

Java如何从yml文件获取对象
目录一、背景二、application.yml三、ChinaPersonFactory.java四、使用示例一、背景 在 SpringBoot 中,我们可以使用 Value 注解从属性文件(例如 application.yml 或 application.properties)中获取配置信息,但是只能获取简单的字…...

vue使用tinymce实现富文本编辑器
安装两个插件tinymce和 tinymce/tinymce-vue npm install tinymce5.10.3 tinymce/tinymce-vue5.0.0 -S 注意: tinymce/tinymce-vue 是对tinymce进行vue的包装,主要作用当作vue组件使用-S保存到package.json文件 2. 把node_modules/tinymce下的目录&a…...

yolov4实战训练数据
1、克隆项目文件 项目Github地址:https://github.com/AlexeyAB/darknet 打开终端,克隆项目 git clone https://github.com/AlexeyAB/darknet.git无法克隆的话,把https修改为git git clone git://github.com/AlexeyAB/darknet.git修改Makef…...

第十四章 DOM的Diff算法与key
React使用Diff算法来比较虚拟DOM树和真实DOM树之间的差异,并仅更新必要的部分,以提高性能。key的作用是在Diff算法中帮助React确定哪些节点已更改,哪些节点已添加或删除。 我们以案例来说明。 使用索引值和唯一ID作为key的效果 1、使用索引…...

MySQL调优
MySQL调优常见的回答如何回答效果更好业务层的优化如果只能用mysql该如何优化代码层的优化SQL层面优化总结常见的回答 SQL层面的优化——创建索引,创建联合索引,减少回表。再有就是少使用函数查询。 回表指的是数据库根据索引(非主键&#…...

《Flutter进阶》flutter升级空安全遇到的一些问题及解决思路
空安全出来挺久了,由于业务需求较紧,一直没时间去升级空安全,最近花了几天去升级,发现其实升级也挺简单的,不要恐惧,没有想象中的多BUG。 flutter版本从1.22.4升到3.0.5; compileSdkVersion从1…...

最值得入手的五款骨传导耳机,几款高畅销的骨传导耳机
骨传导耳机是一种声音传导方式,主要通过颅骨、骨骼把声波传递到内耳,属于非入耳式的佩戴方式。相比传统入耳式耳机,骨传导耳机不会堵塞耳道,使用时可以开放双耳,不影响与他人的正常交流。骨传导耳机不会对耳朵产生任何…...

HashMap源码分析 (1.基础入门) 学习笔记
本章为 《HashMap全B站最细致源码分析课程》 拉钩教育HashMap 学习笔记 文章目录1. HashMap的数据结构1. 数组2. 链表3. 哈希表3.1 Hash1. HashMap的数据结构 数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端。 1. 数组 在生成数组的时候数…...

6 使用强制类型转换的注意事项
概述 在C语言中,强制类型转换是通过直接转换为特定类型的方式来实现的,类似于下面的代码。 float fNumber = 66.66f; // C语言的强制类型转换 int nData = (int)fNumber; 这种方式可以在任意两个类型间进行转换,太过随意和武断,很容易带来一些难以发现的隐患和问题。C++为…...

Leetcode.939 最小面积矩形
题目链接 Leetcode.939 最小面积矩形 Rating : 1752 题目描述 给定在 xy平面上的一组点,确定由这些点组成的矩形的最小面积,其中矩形的边平行于 x 轴和 y 轴。 如果没有任何矩形,就返回 0。 示例 1: 输入࿱…...

Springboot项目快速实现过滤器功能
前言很多时候,当你以为掌握了事实真相的时间,如果你能再深入一点,你可能会发现另外一些真相。比如面向切面编程的最佳编程实践是AOP,AOP的主要作用就是可以定义切入点,并在切入点纵向织入一些额外的统一操作࿰…...

基于springboot的简历系统的实现
摘 要 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,简历系统当然也不能排除在外。简历系统是以实际运用为开发背景,运用软件工程原理和开发方法,采用…...

Vue3中watch的用法
watch函数用于侦听某个值的变化,当该值发生改变后,触发对应的处理逻辑。 一、watch的基本实例 <template><div><div>{{ count }}</div><button click"changCount">更改count的值</button></div> …...

MS python学习(18)
学习Pandas.DataFrame(2) load csv(comma seperated variable) files to DataFrame and vice versa upload csv files read/write csv files load data into jupyter notebook, create a new folder and then upload the csv files into it. (CSV comma seperated variable)…...

java笔记
前言 以下是一名java初学者在自学过程中所整理的笔记,欢迎大家浏览并留言,若有错误的地方请大家指正。 java语言特性 简单性:相对于其他编程语言而言,java较为简单,例如:java不再支持多继承,C…...

对象的构造及初始化
目录 一、如何初始化对象 二、构造方法 1.概念 2.特性 三、默认初始化 四、就地初始化 总结 一、如何初始化对象 在Java方法内部定义一个局部变量的时候,我们知道必须要进行初始化。 public class Test4 {public static void main(String[] args) {//未初始化…...

Socket 读取数据
1. Socket 配置参数中添加 1.1 读取 Socket 字节时的字节序 1.2 读取数据时,单次读取最大缓存值 1.3 从 Socket 读取数据时,遵从的数据包结构协议 1.4 服务器返回数据的最大值,防止客户端内存溢出 /*** Description: Socket 配置参数*/public…...

小白的Git入门教程(一)
这是本人的git的入门过程仅供参考 先是在官网下载git版本下载链接,安装步骤可以搜索其他大神的文章然后就是创建一个属于你的git本地库首先是创建一个文件夹作为根目录,这里我创建了一个叫test_git文件夹紧接着便进去新建文件夹,点击这里的g…...

第一个Vue程序
第一个Vue程序 <body> <!--view层 变成了一个模板--> <div id"app">{{message}} </div><!--导入vue.js--> <script src"https://cdn.jsdelivr.net/npm/vue2.5.16/dist/vue.min.js"></script> <script>va…...

2023上学期学习计划
目前:根据答辩的情况来看,目前去项目组,着重写好算法是相对较优的打算,先将项目写好,之后着重提升算法水平,这学期主要啃《算法导论》与《大话数据结构》这俩本书,同时刷题量要达到160题 四月份…...

深入了解MySQL锁机制及应用场景
深入了解MySQL锁机制及应用场景锁的概述锁的分类锁的应用场景数据库事务管理多线程程序开发数据库的备份和恢复对于在线游戏等高并发应用场景锁的具体使用方法锁的应用实例总结锁的概述 MySQL锁是操作MySQL数据库时常用的一种机制。MySQL锁可以保证多个用户在同时执行读写操作…...

Java类和对象
目录 一、什么是面向对象? 二、类与对象的基本概念 1.类 2.对象 三、类的定义格式 四、类与对象的定义与使用 1.什么是实例化 2.实例化对象 3.类的使用 4.类与对象的说明 总结 一、什么是面向对象? 面向对象是一种现在最为流行的程序设计方法&a…...

aspnet053+sqlserver在线考试系统xns
目 录 基于.NET的考试系统 1 摘 要 3 前 言 4 第一章 系统概述 5 1.1 本课题的研究意义 5 1.2 本论文的目的及内容 5 第二章 在线考试系统概述 7 2.1 现行在线考试系统现状 7 2.2 电子管理平台的开发方法介绍 8 2.2.1 B/S体系结构 8 2…...

新一代大学英语(提高篇)
词汇题(55道) 1. You should carefully think over_____ the manager said at the meeting. A. that B. which C. what D. whose 1.选C,考察宾语从句连接词,主句谓语动词think over后面缺宾语,后面的宾语从句谓语动…...

阿里云OSS 203 Non-Authoritative Information问题解决
问题描述: 203 Non-Authoritative Information 问题分析: 1、跨域问题,阿里云OSS没有配置跨域规则。 解决办法请参考以下博客。 阿里云OSS No ‘Access-Control-Allow-Origin‘ header is present on the requested resource问题解决_旭东…...

【数据结构】你真的认识“”吗?它真的就只是“取地址”吗?或许你一直都在误解它。
我们有时候在看数据结构相关书籍时,经常会看到这样的写法: void StackInit(ST& ps) {assert(ps);ps.a NULL;ps.top 0;ps.capacity 0; } 注意,这里的&可不是表示取地址。如果你把它理解为取地址,那就在错误的路上狂奔&…...

[深入理解SSD 21] 固态硬盘GC机制 | GC 分类 | GC 过程 | GC 和 Trim 的关系
Hello 大家好, 我是元存储~主页:元存储的博客_CSDN博客-深入理解SSD:固态存储特性与实践,深入浅出SSD:固态存储原理与特性,深入理解Flash:闪存特性与实践领域博主前言SSD上已经被写入过的Page页在重新被写入之前,必须要将page页所在的block块…...