【程序化广告】相关技术(RTB竞价原理、Cookie映射流程、数据统计原理、程序化创意、防作弊方法)

news2025/1/23 7:11:15

上一篇介绍了【程序化广告】广告投放流程/漏斗/要素/策略/指标,本篇介绍一下程序化广告所使用到的相关技术,包括RTB竞价原理、Cookie映射流程、数据统计原理、程序化创意、防作弊方法等。

1. RTB竞价原理

1)竞价逻辑

用户开启电脑,打开浏览器,访问某媒体网站(如今日头条toutiao.com),媒体网站页面通常会有广告位。以今日头条右上角250*250的广告位为例子,假设此位置已加入RTB交易市场。用户从进入网站,到250*250广告位置向用户呈现广告,整个过程在毫秒级内发生。期间到底经过了哪些流程?

流程1:用户A在Web浏览器访问今日头条首页。

流程2:今日头条通知广告交易平台:首页右上角250*250广告位要向用户A展示广告。

流程3:广告交易平台根据这个竞价请求组织一次竞价。由竞价发起服务向各需求方发送竞价请求(Bid Request),询问是否需要竞价,并传输用户A的User ID(广告交易平台的用户cookie或者移动设备ID等)、用户IP和广告位信息(页面URL、广告位置等)。

流程4:需求方竞价监听服务接收到广告交易平台发来的竞价请求后,将竞价请求信息传输给竞价引擎。

流程5:竞价引擎根据广告交易平台UserID向用户数据中心查询用户相关信息。如果是PC端,竞价引擎需要查询cookie mapping数据库,得出用户在需求方系统的cooke ID(如果需求方对应的cookie不存在,则向广告交易平台请求cookie mapping)。

流程6:用户数据中心向竞价引擎返回用户A的信息,如性别、年龄、兴趣爱好等。返回的具体用户信息需要参照用户数据中心的信息维度而定。

流程7:竞价引擎将用户数据和投放需求进行匹配,决定是否参与出价以及CPM出价。

流程8:竞价监听服务向广告交易平台发送出价响应(Bid Response),并发送CPM价格和广告代码。如果不参与竞价,则不响应。

流程9:广告交易平台接收到所有需求方的出价响应后由竞价决策服务进行竞拍。价高者得,次高价结算,即出价最高的需求方赢得本次展示,并以第二高的投标价格(通常比第二高多1分钱)跟广告交易平台结算。同时,竞价决策服务需要为供应方(今日头条)返回赢得本次竞价的需求方的竞价信息(CPM价格和广告代码)。

流程10:Web浏览器向需求方请求广告物料的展示。

流程11:需求方物料管理服务返回对应的广告物料。需要说明的是,广告物料必须先经过CDN服务再呈现在广告位。另外,需求方平台还会收到广告交易平台发送的竞价消息(Win Notice),表示该次展示已经竞价成功。

流程12:用户A看到广告,当前竞价流程结束

广告投放管理平台

广告主在广告投放管理平台设置投放时间、预算、地区定向、用户属性等投放策略。竞价引擎需要将用户信息跟广告主设置的投放策略进行匹配,由此判断是否参与竞价。

算法模型

算法模型是实时竞价过程中最主要的决策部分,主要围绕广告主投放需求、媒体质量、人群属性、创意内容、用户场景、市场环境(实时竞价市场中的竞争激烈程度)这六大模块细分不同维度,并通过不断升维和降维进行自动调优,以达到价格和效果的最优值。比如算法模型会根据历史投放数据、用户数据等信息判断/预估哪些用户是高质量用户,是否值得竞价以及应该出价多少。

CDN加速服务

CDN全称Content Delivery Network,即内容分发网络,可以使广告内容的传输和加载更快更稳定。对于图片、Flash、特别是视频FLV等类型的广告物料,必须经过CDN加速,媒体环境才能更快地加载广告物料内容(加载时间控制在1s内),让用户能够快速看到广告内容。

竞价过滤

在广告交易平台发过来的竞价请求中,需求方平台会根据广告主设置的投放条件和KPI要求以及流量质量等进行过滤,过滤掉的流量将不应答出价。另外,有反作弊能力的需求方平台还会对作弊流量进行过滤,保障投放效果,减少投放浪费。

需求方平台内部竞争机制

需求方平台会在满足参与竞价条件的众多广告主中,根据内部平台每个广告主的出价高低、转化预估等综合标准来判断由谁胜出内部竞争,再用胜出者的出价返回给广告交易平台。

图片

2)竞价结算规则

DSP会先从内部挑选出最高的价格与外部DSP竞争,AdX/SSP综合各家DSP提交的价格进行拍卖,把广告展示给出价最高的DSP。如下图,DSP A里面的最高价是广告主A.1的¥3,次高价是广告主A.2的¥2.5,但是对于AdX/SSP来说,收到的价格分别是DSP A的¥3、DSP B的¥2、DSP C的¥1.9,因此此次广告展示由DSP A竞得,展示广告主A.1的广告,并以¥2.01(比次高价多1分)的价格与AdX/SSP结算,而不是以DSP A的次高价¥2.5结算。

图片

3)竞价相关指标

图片

PS: QPS(Query Per Second)即每秒查询率,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。DSP可以在AdX/SSP管理后台设置能接受的QPS值。

2. Cookie映射流程

程序化广告生态是以人为本的生态,要实现精准定向人群,首先要解决识别人群中每个个体的问题。在PC上,通常用cookie作为“人”的唯一标识,为每个“人”打标识的技术业内叫“种cookie”。

在程序化广告的“参与者”图中可以看到,人群流向轨迹是网站->AdX或SSP->DSP->广告主官网。在这些环节中,每个参与者都需要对PC上的用户打cookie进行标识,而不同参与者命名cookie的方式都不同,即使同一个用户,DSP可能命名为123,AdX可能命名为ABC。

我们应该怎样将各参与者的cookie串联起来,识别出它是同一个用户呢?这时就需要用到cookie映射技术(cookie mapping或cookie matching)。通过映射,将DSP家的用户123和AdX家的用户ABC对应起来。

PS: 

移动设备ID映射

移动端用设备号ID(如IMEI号、Android-ID或IDFA)识别用户,这些ID都是固定的,并且能够在不同APP中共享。一般情况下,移动设备ID不需要mapping映射,但由于部分AdX发给DSP的ID会采用加密方式(如md5加密),因此,DSP方需要将竞价请求中的加密ID与原始ID进行映射,才能更好地进行移动端的人群标签定向。

假设用户A正在使用浏览器访问网站。在此用户A浏览器中,AdX的cookieID为AdX-UID,并且DSP未在此种过cookie。

图片

流程1:AdX发送竞价请求给DSP,携带AdX-UID。

流程2:DSP根据AdX-UID查找映射表,如果不存在此映射关系,则需要向AdX发起cookie mapping请求,并在竞价成功后返回广告投放代码Ad Tag,此Ad Tag将携带1*1的透明像素图片<img src="AdX域名的cookie mapping URL" />。注意,这里的cookie mapping是由DSP发起的,不过,部分AdX也支持主动发起cookie mapping。

流程3:AdX发送DSP的Ad Tag到浏览器。

流程4:浏览器触发该Ad Tag中的1*1透明像素图片,触发AdX的cookie mapping服务。

流程5:AdX的cookie mapping服务查找DSP设置的cookie mapping URL(DSP对接AdX时,设置对应的cookie mapping URL),并进行302跳转,重定向到DSP并携带AdX-UID。AdX传送给DSP的AdX-UID通常是原始的AdX的cookie ID,部分AdX会对此ID加密。

流程6:DSP发送1*1的透明像素图片(携带cookie ID,假设为DSP-UID)到浏览器,种上DSP cookie,并保存此DSP-UID和AdX-UID的映射关系。需要说明的是,谁发起cookie映射以及谁负责保存映射关系并不是硬性规定的,可以经由双方协商确认。

PS:

强制cookie映射

如果DSP在某些AdX的投放量很小,按照上述流程可知,cookie mapping的机会也比较少,导致DSP在这些AdX上可识别的人群也不多。如果需要投放人群标签的话,可能会导致投不出量或者很少量。

DSP可以通过强制cookie映射扩大可识别的人群数量。强制cookie映射是指DSP在某家AdX赢得展示后,除了可以与该AdX进行cookie映射外,还可以在广告曝光时发起其它AdX的cookie映射请求,比如曝光时发送AdX A的映射URL后,由AdX A进行302重定向返回DSP,DSP继续302重定向到AdX B的映射URL......可以持续进行多个AdX的映射,但是并不代表可以无限映射,因为浏览器会限制跳转次数,而且不同浏览器限制的次数不同。

DSP与DMP映射

如果DSP需要对接第三方DMP或者其它第三方服务的数据,同样需要cookie映射。跟强制cookie mapping原理一样,DSP在广告曝光时发起DMP或者其它第三方服务的cookie映射请求。

衡量指标

衡量需求方平台购买精准人群的实力,除了是否对接了大量流量资源之外,通常还会考量需求方平台与广告交易平台或其它数据供应方之间的cookie mapping比例,以及需求方平台与数据供应方的“人群匹配率”。

cookie mapping比例越高,代表需求方平台能识别的人群越大。能识别的人群库足够大,才能帮需求方采购更多的精准人群。

另外,还需要考量第三方数据在需求方平台的“人群匹配率”。匹配率越高,人群标签能够在流量池中被命中的机会就越大,需求方平台才有可能大面积地覆盖所需人群。

3. 数据统计原理

不管是广告投放中还是投放后,我们都需要对广告效果进行验证观察,才能更好的评估、制定和调整投放策略。同时还需要根据每个用户的行为数据进行广告、网站或APP优化,从而提升用户转化和留存。收集广告投放数据和用户行为数据,需要通过部署统计代码或技术对接来实现。

1)网站统计逻辑

流程1:浏览器向网站Web Server发起请求URL。

流程2:网站Web Server解析请求URL并生成Html文档响应返回给浏览器。

流程3:浏览器解析Html文件,加载外部脚本、样式表和图片等,触发JS统计代码。

流程4:解析并执行JS脚本,请求数据收集脚本。通过浏览器内置JS收集域名、URL、页面标题、分辨率、客户端语言、referrer、cookie(如果在此用户浏览器种过cookie,则能获取到对应cookie信息;如无,则通过流程6.1种cookie)等信息,以及自定义事件(如注册等)数据。

流程5:传输收集的信息给后端脚本。

流程6:流程6.1后端脚本生成透明1*1像素图片,在浏览器中种入cookie标识访客。流程6.2后端脚本解析并发送流程5得到的信息,并从网站Web Server获取IP、访问时间等信息,写入日志Log队列。

流程7:日志信息发送至实时统计服务。实时统计后数据入库至实时数据库。

流程8:离线统计服务从实时数据库调用数据进行离线分析,并入库至离线数据库。

流程9:查询数据库,并进行可视化数据报表呈现。

图片

PS:

浏览器指纹

用户使用浏览器浏览网站时,该用户浏览器相关的数据和操作称为指纹,如userAgent(包含浏览器版本号等信息)、http_accept(http协议头中的一个字段)、plugins(浏览器安装的插件信息)、timezone(时区信息)、fonts(系统安装字体)等。这些指纹信息都与用户的个人习惯、使用环境有关,综合用户其它信息(如IP地址等)时,可以有效辨别用户特征,因此称为浏览器指纹。进行反作弊工作时,经常需要用到这些指纹信息。

2)APP统计逻辑

流程1:APP应用客户端向App应用服务端发起请求。

流程2:APP应用服务端响应请求并返回应用信息。

流程3:APP应用客户端调用统计SDK并初始化,同时通过API接口(OC/Java)写入版本、渠道等信息,并进行数据埋点。

流程4:收集应用运行信息,包括访问者唯一标识、访问时间、应用版本号、运营商、联网方式、操作系统等。移动端访问者唯一标识通常是IMEI号、Android-ID或IDFA等。

流程5:在APP启动/关闭时或收集的信息数量达到某一上限时,传送信息给后端。

流程6:后端脚本解析并发送流程5得到的数据包,写入日志Log队列。

流程7:日志信息发送至实时统计服务。实时统计后数据入库至实时数据库。

流程8:离线统计服务从实时数据库调用数据进行离线分析,并入库至离线数据库。

流程9:查询数据库,并进行可视化数据报表呈现。

图片

3)S2S对接

iOS类广告主由于涉及应用上架审核相关原因,一般都不愿意加广告商的统计SDK,但是广告商在广告投放时需要转化数据(如安装激活)来评估效果并调整策略。目前常用方式是广告商(这里以DSP为例)通过与广告主S2S(ServerToServer,服务器对服务器)对接来接收转化数据。

流程1:用户A在手机上打开媒体APP,看到广告后产生兴趣,并点击广告。

流程2:媒体APP请求DSP的跳转URL,携带用户A的设备信息(如设备号IDFA)。

流程3:DSP进行302跳转至广告主的中转URL,携带IDFA和曝光/点击ID等信息。

流程4:广告主服务器保存IDFA和曝光/点击ID信息,并302跳转至APPStore。

流程5:用户产生下载并安装广告主APP。第1次打开广告主APP时,APP触发广告主服务器会带上设备信息(如果用户不下载,则这次点击没有对应的转化数据)。

流程6:广告主服务器匹配流程4中保存的信息,并查找最近一次点击,将激活匹配到该点击(这里我们假设最后一次点击是该DSP产生的),传送激活信息给DSP。

流程7:DSP收到激活信息,根据曝光/点击ID将此次激活和对应的设备ID计入对应的推广活动。

图片

PS:

有些广告主使用的是第三方移动监测服务,这种情况下,流程中的广告主服务器部分也可以由该监测服务提供商代替,如TalkingData、热云等。

另外,如果有些媒体APP无法提供IDFA,可以用设备的“IP+userAgent”信息代替,前提是广告主愿意接受这种方式,只是精准度不如IDFA,因为用户IP会变化。

4. 程序化创意

程序化创意,就是实现从创意制作到投放优化整个过程的程序化。针对不同受众的不同消费需求,或者同一受众在不同时期不同场景的不同消费需求,程序化自动生成个性精准创意,最大化刺激消费需求,提升创意制作效率和广告投放效果。

1)DCO原理

动态创意优化(Dynamic Creative Optimization,简称DCO):根据用户的标签属性匹配相应的创意,并根据他们的行为实时调整策略,自动选择最优方案。

图片

流程1:PCP通过商品对接服务对接客户的商品信息,包括商品的名称、价格、页面、库存等。需要注意的是,商品库存和价格信息对实时性有要求(试着想像一下,用户点击某广告进入想购买,结果收到库存不足或者价格变化的提醒),其它数据对实时性要求没那么高。商品库对接方式:JS代码、Feed接口、FTP方式、Excel/CSV导入等。

流程2:商品信息入库。

流程3:创意管理平台调用商品库的商品信息和用户数据中心的用户信息设置动态创意规则,设置好需要推荐的商品、展示方式、创意样式等(如库存量低于某个值时,该商品不推荐;一次推荐5个商品,按销量降序排列等)。PCP将设置好的动态创意规则生成创意代码Ad Tag,发送到DSP。

流程4:DSP竞价成功后,发送Ad Tag到浏览器。

流程5:浏览器向PCP创意渲染服务发起创意请求,携带当前用户的唯一标识User ID。

流程6:创意渲染服务向推荐引擎请求该User ID对应展示的创意内容,并携带Ad Tag对应的商品规则。

流程7:推荐引擎向用户数据中心查询该User ID的用户信息,如兴趣爱好、行为数据等。

流程8:用户数据中心返回用户信息。

流程9:推荐引擎根据用户信息以及商品规则,得出要推荐展示的商品,并从商品库查询调用商品信息,返回到创意渲染服务。

流程10:创意渲染服务根据推荐引擎返回的商品信息和Ad Tag对应的创意样式等,生成个性化创意,并展示到浏览器中。

2)创意制作流程

为了实现程序化自动批量生成创意,我们需要在创意管理平台制作和管理创意。首先定好创意基本框架(称为创意模板),框架里面的内容可以分成5部分,也可以称为5个元素:

Key Vision(主视觉):显示创意的主要内容,通常是指商品图片。

Logo(品牌标识):用于显示广告主的Logo。

Information(文案说明):主视觉的补充说明信息,通常是商品名称、价格、折扣信息等。

Call to Action(行为召唤):与用户进行互动,一般是转化通道,如下载、注册、购买按钮等。

Background(背景图):背景图,一般用来美化衬托创意。

图片

以上列举的是通用模板,当然,这5个元素不是必须同时存在,也不限于这5个元素,但制作思路基本一致。

动态创意制作流程:

流程1:上传各元素内容,形成物料库。包括Logo、商品信息(包括图片、名称、价格、折扣等信息)、按钮等。商品信息一般对接广告主商品库批量导入。

流程2:制作模板,定义好尺寸比例、各元素的位置及内容来源(比如主视觉引用商品库的商品图片,文案说明引用商品库对应商品的名称和价格)等。

流程3:设置创意规则,比如对女性用户展示模板A、商品内容为该用户加入到购物车的信息、每个动态创意自动轮播展示5个商品、商品展现顺序按热销度降序排列等。

流程4:将模板和规则应用到广告投放,程序化自动生成创意展现给用户。

5.用户数据中心

图片

流程1:将第一方、第二方、第三方数据输入到用户数据中心,包括:通过收数接口传输广告主通过加代码埋点时统计到的网站或APP的数据、通过收数接口传输广告投放时的业务数据(如曝光、点击数等)、通过对接接口传输外部数据(包括广告主CRM数据、电商交易数据、第三方DMP数据等)。

流程2:传输数据信息并写入日志Log,包括2.1的收数接口和2.2的对接接口传输数据到日志整理存储。需要注意的是,由于数据输入的来源较多,用户标识不一致,特别是PC环境下的cookie,因此需要用户ID映射表将所有来源的数据用唯一ID打通。

流程3:日志管理存储将汇总后的数据信息(包括结构化数据、半结构化数据和非结构化数据)发给数据处理服务。

流程4:数据处理服务对日志信息进行标准化处理,发送到分析引擎。

流程5:分析引擎对数据进行清洗,过滤作弊数据和其它异常数据,将有效数据发送到算法中心。

流程6:算法中心结合标签规则模型对数据进行机器学习和数据挖掘,将数据标签化处理后返回给标签管理平台。

流程7:标签管理平台通过输出接口同步数据到各数据应用平台,如DSP、PCP、AdX/SSP或其它平台。

6. 反作弊

1)作弊环节

从整个广告投放流程来看,作弊节点不外乎存在于曝光、点击和转化(包括但不限于注册、激活、互动、购买等)三个环节:

曝光环节:针对曝光环节的作弊最简单粗暴,也最高效,常见于用CPM结算的媒体。

点击环节:常见于用CPC结算的媒体。随着广告主越来越看重CTR,一些非CPC结算的媒体,也会为了提升CTR在点击上做手脚。

转化环节:广告主为了降低风险,直接跟媒体谈判CPA甚至CPS的结算方式。但是上有政策下有对策,来自流量端的作弊手段的进化速度已经超过了广告主的应变速度。

2)作弊方式

大多数情况下,需求方都把焦点放在了非人类流量上,然而作弊远远不止那些机器人流量。下面简单列举几种常见的作弊方式:

假用户:一般是利用机器人,不断地变换IP、cookie甚至设备ID等来伪装成不同的“用户”去刷广告页面或点击广告。

真用户假流量:这类作弊是机器人作弊的进阶版。它利用了真实的用户设备,使得作弊流量的用户属性特征更接近真实流量。常见手段有:广告容器设置为1x1像素、利用插件植入不可见的广告位置、肉鸡刷广告、雇佣“枪手”刷广告等。

真用户真流量:这类作弊相较于前两种作弊方式而言逼格更高。表现一就是“挂羊头卖狗肉”,用劣质流量滥竽充数卖高价。表现二是通过http或者DNS进行流量劫持,不完全算是作弊流量,叫它“非法流量”可能更准确。

3)反作弊方法

反作弊工作需要事前预防、事后追溯、人工排查、智能算法等方式多管齐下。下面从“用户标识、用户行为、广告来源”三个角度讲解反作弊的基础理论和方法,基于这些理论和方法,我们才能更好地去完善反作弊算法和人工排查。

图片

用户标识

一般是根据IP、cookie(或设备ID)作为分辨用户的依据,统计某些用户是否存在高频次或高频率曝光或点击。有些媒体会通过机器人来变换IP,干扰视线,这种情况下就必须综合考虑浏览器指纹等信息来识别作弊流量。比如:当IP或者cookie都不一样,但是这群IP或者cookie的浏览器型号、分辨率、用户窗口大小、操作系统版本号、设备品牌都相同时,就需要引起特别注意。

用户行为

(1) 广告浏览/点击

对用户的广告浏览频次/频率和点击的频次/频率进行分析。常见的作弊行为模式包括:

1. 同一用户、同一时间在多个广告位产生了浏览或点击行为,或短时间内在同一广告位产生多次曝光或点击;

2. 同一用户的广告浏览或点击时间间隔过于规律;

3. 曝光数和点击数在某个时间点暴涨;

4. 用户未浏览广告就直接产生了点击行为,通常表现为出现大量无曝光的点击;

5. 用户浏览广告的面积和时长数据异常,可用广告可见度(Viewability)衡量和分析;

6. 用户点击广告的位置过于规律或过于集中,一般用广告位热图来观察分析;

7. 用户行为的各环节(浏览广告->点击广告->到站->转化)遵循严谨的时间先后顺序,如果点击广告的时间早于浏览广告的时间,或浏览和点击行为之间的时间间隔异常,一般可以判断为作弊。

(2) 到站情况

综合考量用户留存、停留时间,访问深度等指标,用于分析转化用户的质量。同时,还得关注用户的站内交互情况(点击、滚动、输入等操作)。和广告点击作弊一样,为了制造用户活跃的假象,作弊的媒体供应方可能会利用机器产生大量页面点击,同样地,我们可以利用点击的区域、次数、频率、页面窗口大小等指标去伪存真。

广告来源

对到站流量进行来源页面(一般叫refer)的侦查。将refer数据与投放媒体进行匹配,如果出现以下情况,则可以判定为作弊流量:

1.出现大量无refer的广告流量:一般是通过非法手段直接刷广告点击代码,而不是通过媒体页面上的广告点击跳转。

2.refer与所投放的媒体不对应,例如要求投向A网站,refer却出现大量B网站。

7.品牌保护

由于品牌广告宣传的是品牌的美誉度,因此对投放环境的要求非常高。比如品牌广告不允许出现在色情网站、敏感时事新闻等媒体上,否则用户可能会对此品牌产生负面印象,严重时还会影响品牌形象。

品牌广告的投放需要品牌保护(Brand Safety)的保障,这个保障通常会有专门的品牌保护供应商(也就是我们前面提到的广告验证平台)提供服务,广告主通过广告验证平台设置敏感或非法的关键词/页面的黑名单,投放时过滤此黑名单的流量。

DSP平台需要提前对接好这些广告验证平台,用于支持品牌广告的投放,此对接分为Pre-bid和Post-bid,可以理解为竞价前和竞价后的品牌保护。

Pre-bid:DSP平台在出价前会先询问广告验证平台,根据此流量是否符合广告主设置的条件来决定是否出价,将效果差和内容敏感的流量排除在外,而不产生流量费用。

Post-bid:DSP平台在竞价成功后询问广告验证平台,广告验证平台根据广告主设置的条件返回结果。如果流量符合条件,则展示广告主广告;反之,则用空白或者其它图片代替。由于是在竞价成功后才进行流量的判断,因此,不管流量是否符合条件,广告主都需要为此流量付费。

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

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

相关文章

STM32补充——IAP

0 前置知识&#xff1a; FLASH相关内容&#xff1a;前往STM32补充——FLASH STM32三种烧录方式&#xff08;看看就行&#xff09;&#xff1a; 1.ISP&#xff1a;In System Programming&#xff08;在系统编程&#xff09; 执行芯片厂商的 Bootloader 程序进入 ISP 模式&…

Spring Boot中选择性加载Bean的几种方式

说明&#xff1a;用过Spring框架的都知道其自动装配的特性&#xff0c;本文介绍几种选择性加载Bean的方式。Spring自动装配参考以下两篇文章&#xff1a; 基于SpringBoot的三层架构开发&统一响应结果 SpringBoot自动装配原理简单分析 ConditionalOnProperty Conditiona…

AI刷题-策略大师:小I与小W的数字猜谜挑战

问题描述 有 1, 2,..., n &#xff0c;n 个数字&#xff0c;其中有且仅有一个数字是中奖的&#xff0c;这个数字是等概率随机生成的。 Alice 和 Bob 进行一个游戏&#xff1a; 两人轮流猜一个 1 到 n 的数字&#xff0c;Alice 先猜。 每完成一次猜测&#xff0c;主持会大声…

利用Java爬虫获取eBay商品详情:代码示例与教程

在当今的电商时代&#xff0c;获取商品详情数据对于市场分析、价格监控和竞品研究至关重要。eBay作为全球最大的电商平台之一&#xff0c;拥有海量的商品信息。通过Java爬虫技术&#xff0c;我们可以高效地获取这些数据&#xff0c;为商业决策提供支持。本文将详细介绍如何使用…

编译Android平台使用的FFmpeg库

目录 前言 一、编译环境 二、搭建环境 1.安装MSYS2 2.更新系统包 2.1 打开MSYS2 MinGW 64-bit终端&#xff08;mingw64.exe&#xff09; 2.2 更新所有软件包到最新版本 2.3 安装必要的工具和库。 3. 克隆FFmpeg源码 4. 配置编译选项 5. 执行编译 总结 前言 记录学习…

30天开发操作系统 第 17 天 -- 命令行窗口

前言 今天一开始&#xff0c;请大家先回忆一下任务A的情形。在harib13e中&#xff0c;任务A下面的LEVEL中有任务因此FIFO为空时我们可以让任务A进入休眠状态。那么&#xff0c;如果我们并未启动任务B0~ B0~ B2, B2的话&#xff0c;任务A又将会如何呢&#xff1f; 首先&#xf…

阿九的python 爬虫进阶课18.3 学习笔记

文章目录 前言1. 爬取大标题2. 爬取小标题3. 证券栏下的标题4. 某篇文章里的具体内容 前言 网课链接&#xff1a;https://www.bilibili.com/video/BV1kV4y1576b/新浪财经网址&#xff1a;https://finance.sina.com.cn/需先下载库&#xff1a; conda install lxml布置爬取的一…

Qt 5.14.2 学习记录 —— 십팔 对话框

文章目录 1、Qt对话框2、自定义对话框1、代码方式2、图形化方式 3、模态对话框4、QMessageBox5、QColorDialog6、QFileDialog7、QFontDialog8、QInputDialog 1、Qt对话框 Qt的对话框用QDialog类来表示&#xff0c;可以自定义一些类来实现自定义对话框&#xff0c;但需要继承自…

web3py+flask+ganache的智能合约教育平台

最近在学习web3的接口文档&#xff0c;使用web3pyflaskganache写了一个简易的智能合约教育平台&#xff0c;语言用的是python&#xff0c;ganche直接使用的本地区块链网络&#xff0c;用web3py进行交互。 代码逻辑不难&#xff0c;可以私信或者到我的闲鱼号夏沫mds获取我的代码…

java中的String类、StringBuffer类、StringBuilder类的详细讲解(包含相互之间的比较)

文章目录 一、String 类1 String 类的介绍2 String 对象创建的两种方式3 测试题加深理解&#xff08;1&#xff09; 例题一&#xff08;2&#xff09;例题二&#xff08;3&#xff09; 例题三 4 String 类的常用方法&#xff08;1&#xff09;equals()&#xff08;2&#xff09…

外设链接与中断

外设链接与中断 PC键盘处理过程 定制键盘的输入过程

考研408笔记之数据结构(五)——图

数据结构&#xff08;五&#xff09;——图 1. 图的基本概念 1.1 图的定义 1.2 有向图和无向图 在有向图中&#xff0c;使用圆括号表示一条边&#xff0c;圆括号里元素位置互换没有影响。 在无向图中&#xff0c;使用尖括号表示一条边&#xff0c;尖括号里元素位置互换则表示…

71,【3】buuctf web [HITCON 2017]SSRFme

进入靶场 左上角是IP地址&#xff0c;下面有一堆代码 <?php // 检查是否存在 HTTP_X_FORWARDED_FOR 头部信息 if (isset($_SERVER[HTTP_X_FORWARDED_FOR])) {// 如果存在&#xff0c;将其按逗号分隔&#xff0c;并将第一个元素作为新的 REMOTE_ADDR$http_x_headers explo…

【TypeScript】模块化和命名空间、类型查找、类型缩小

模块化和命名空间 ts 在模块化中遵循 esm 规范&#xff0c;而且推荐导入类型时前面加上 type 字段&#xff0c;这些可以让一个非TypeScript编译器比如Babel、swc或者esbuild知道什么样的导入可以被安全移除。 TypeScript有它自己的模块格式&#xff0c;名为namespaces&#x…

城市生命线安全保障:技术应用与策略创新

城市生命线工程是维系城市正常运行、满足群众生产生活需要的重要基础设施。随着城市化进程的加快&#xff0c;城市基础设施生命线安全运行的复杂性日益加剧&#xff0c;保障城市居民日常生活正常运行的水、电、气、热等各类地下管线以及桥梁、市政设施、轨道交通等城市基础设施…

MVCC在MySQL中实现无锁的原理

一&#xff1a;基础知识 我们知道MySQL是多线程并发处理任务的。MySQL使用了MVCC来实现事务并发的无锁机制。 而且我们还需要知道MySQL的四种隔离级别&#xff1a;读未提交&#xff0c;读已提交&#xff08;RC&#xff09;&#xff0c;可重复读&#xff08;RR&#xff09;&am…

WPF实战案例 | C# WPF实现大学选课系统

WPF实战案例 | C# WPF实现大学选课系统 一、设计来源1.1 主界面1.2 登录界面1.3 新增课程界面1.4 修改密码界面 二、效果和源码2.1 界面设计&#xff08;XAML&#xff09;2.2 代码逻辑&#xff08;C#&#xff09; 源码下载更多优质源码分享 作者&#xff1a;xcLeigh 文章地址&a…

HTML5 Canvas和JavaScript的3D粒子星系效果

HTML部分 基本结构包括<html>, <head>, 和 <body>标签。<title>标签设置了页面标题为“优化版3D粒子星系”。<style>块定义了一些基本样式&#xff1a; body&#xff1a;无边距&#xff0c;隐藏滚动条&#xff0c;黑色背景&#xff0c;禁用触摸…

再见 Crontab!Linux 定时任务的新选择!

引言 说到 Linux 下定时执行任务&#xff0c;大多数人可能会想到 crontab&#xff1f;没错&#xff0c;它的确是 Linux 下比较通用和方便的方式&#xff0c;但是今天我来介绍一种新的方法来创建定时任务并且支持更多更强大的功能。 Systemd 很多小伙伴应该听说过 Systemd&…

Unity入门1

安装之后无法获得许可证&#xff0c;可以考虑重装 新建项目 单击空白处生成脚本 双击c#文件 会自动打开vstudio 检查引用 如果没有引用&#xff0c;重开vstu&#xff0c;或者重新加载项目 hierarchy层级 scenes场景 assets资产 inspector督察 icon图标 资源链接&…