yii 使用 有赞sdk_有赞ABTest系统:数据驱动增长实践

‍‍f10bcdc0a2ad4e7d82a945b74db7e46f.png

点击关注“有赞coder”

获取更多技术干货哦~

1ea6efc1adb0a05e9273b12d9815132a.png作者:子固部门:数据中台

一、背景

有赞是一个商家服务公司,致力于帮助每一位重视产品和服务的商家成功。随着移动互联网的流量增长红利渐渐褪去,商家获得新的流量越来越困难,帮助商家实现更有效的流量转化与长期目标的增长是有赞SaaS服务的应有之义;同时,随着有赞SaaS功能的不断完善,服务的商家不断增多,而业务场景也越来越复杂,考虑到有限的研发资源,提升产品和技术的迭代效率成为当务之急。

在硅谷,增长黑客等数据驱动增长的方法论,正在帮助如Facebook、Google等如此体量的公司实现持续的业务高速增长;在国内,通过数据手段来驱动业务增长也取得了共识,数据成为赋能增长的核心手段。其中,A/B测试作为数据驱动增长的核心工具,可以有效地提升流量的转化效率和产研的迭代效率。 因此,作为数据团队,基于对数据驱动增长的思考,我们首先构建了有赞ABTest系统。

二、A/B测试概览

2.1 简介

A/B 测试是一种对比分析方法,通过对流量进行细分和随机实验,并监控和跟踪实验效果,来判断实验所代表的策略的可行性和有效性。

  • 对比:通过对流量的随机细分,来进行有效的独立随机实验,可以排除外在条件的影响,因此更加科学。

  • 分析:通过跟踪和分析实验的事实效果数据,来判断实验的可行性和有效性,因此更加精确。

如下图所示,示例 A/B 测试将目标人群随机划分为A、B两组,分别展示不同的页面,然后通过跟踪和对比A、B两组用户的转化率,来比较A、B页面的效果;显而易见的,A组页面的转化效果好于B组页面。

d6e727447ac0c124bd212dde1000fefa.png

相比原有基于时间的如T+30的效果对比,A/B测试可以排除时间和人为因素等外在所有因素的影响,并且保障同时进行的场景实验相互独立互不干扰,可以准确而且高效地评估实验效果。

2.2 应用场景

bdd49b7558159055fcc0da96bdc39308.png

A/B 测试解决的是策略优化的问题,即从多个可选策略里找出最优策略。常见的应用场景包括:

  • 灰度发布:技术&算法迭代
  • 功能优化:界面模块、样式风格、交互方式等
  • 内容优化:推广海报、落地页、内容模块、文案等
  • 运营优化:运营策略、沟通话术等

2.3 核心概念

我们参考了Google的论文《Overlapping Experiment Infrastructure: More, Better, Faster Experimentation》,考虑到流量的隔离、复用以及细分,引入了以下几个核心概念:

25c8725f47311e72d1ef71de8d15de9f.png

应用:应用是对流量和系统的划分,比如商详页可以是一个应用,推荐系统也可以是一个应用。应用实现对流量的隔离,一个应用下可以包含多个场景。场景: 场景是指需要对比不同策略的业务场景,场景是进行A/B测试的业务单元,一个场景下可以包含1个或1个以上的实验(测试中的场景通常至少包含2个实验)。流量在同一应用下的不同场景之间可以被复用。实验: 实验代表场景下的策略,由实验配置来描述,即一份实验配置对应一个业务策略。同一场景下的实验相互之间是互斥的,场景的分流结果返回且仅返回一个实验。实验的主要配置如下图所示(示例场景为ABTest平台的底部答疑提示):

8f32ebf8357942df6401dead78995511.png

流量来源: 流量来源用来指定实验流量细分的粒度和比例,流量来源可以是具体的上一层某个实验,也可以是不指定实验即来源于大盘流量。一个实验可以有一个或多个流量来源。

2.4 增长测试迭代

A/B 测试通常是一个持续的迭代过程,包含5个步骤,即产生实验想法、评估实验优先级、设计和开发实验、分析数据以及应用结果。《硅谷增长黑客实战笔记》将其视为一个数据驱动增长的标准流程,因此我们也称之为增长测试迭代流程。

  1. 产生实验想法。产生实验想法是进行实验的第一步,要求尽可能多地提出有可能提升业务目标的实验想法。

  2. 评估实验优先级。由于产品研发资源是有限的,不同的实验想法对于提升业务目标的效果也各不相同,我们需要评估实验想法的优先级,优先选择产出大、置信度高且容易实现(即ICE标准)的想法来进行尝试。ABTest系统通常假设实验想法已确定,实验想法的产生和评估我们会在增长分析平台里实现(将在后续文章中介绍)。

  3. 设计和开发实验。主要包括:1)确定实验变量和分流策略;2)在ABTest平台上配置应用、场景、实验以及流量来源;3)根据示例代码,完成ABTest SDK接入;4)测试、验证并上线应用和实验场景。

  4. 分析数据。主要包括:1)确定实验评价的核心度量指标;2)配置通用数据度量模型,或者接入自定义度量数据;3)查看ABTest平台效果报表,判断试验的有效性和显著性。

  5. 应用结果。判断最优实验,并通过实验100%切流上线或者实验下线来应用实验结果。

三、ABTest系统设计

3.1 交互流程

ABTest系统主要包括三个部分,分别为ABTest平台、ABTest SDK以及数据流。ABTest 系统交互流程如下图所示:

0bb980dff797408df13655454c0ace8a.png

3.2 ABTest平台

ABTest平台是用户(管理员)与ABTest系统的主要交互接口,主要提供以下功能:

  • ABTest元数据管理。用户可以在ABTest平台上完成完备的元数据管理操作,包括应用、场景与实验的创建、编辑和删除以及配置的发布等。

  • ABTest接入的开发和测试支持。用户可以方便地查看完整可用的接入示例代码,可以输入分流用户标识进行测试,以及查询实时日志等。

  • 实时报表和离线效果报表。实时报表包含实时请求、曝光和点击等数据,效果报表支持实验的请求/曝光/点击/转化等相关指标的对比,同时支持点击率、转化率、千次曝光转化等指标的显著性判断。

  • 异常监控和告警。平台实时监控 SDK 上报的 ABTest 请求数、失败数和延迟时间等数据,一旦发现异常即发出告警。

e530cde0d1224531c5c3f2b1a6175a2c.png

3.3 ABTest SDK

考虑到目前有赞的技术栈现状,ABTest系统提供了Java和Node两种客户端SDK。ABTest SDK主要实现以下3种能力:

  • 实验配置动态分发。SDK实现了针对场景标识+用户分流标识的一致性哈希算法,根据场景的实验流量配置,进行实验配置的动态分发。
  • 上报ABTest请求日志、业务自定义日志以及监控日志。
  • 基于ABTest埋点规范生成前端埋点标识。SDK 生成包括abTraceId(请求唯一标识)和bcm(请求结果标识)等追踪标识,用以透传到前端埋点来追踪用户行为。

3.4 数据流

数据流负责收集ABTest相关的日志并产出实时和离线报表数据,如下图所示:

623321df9cef016479a88ee299502f28.png

主要涉及以下数据组件:

  • NSQ:收集SDK上报的ABTest后端请求日志和自定义上报日志
  • Kafka:收集前端埋点日志和NSQ后端日志
  • Flink:实时数据处理,产出实时报表数据
  • Hive/Spark:离线数据处理,产出实验效果数据和评价数据
  • HBase:存储实时报表和离线报表的数据,并支持ABTest平台查询
  • Druid:存储ABTest实时监控数据和抽样日志,并支持ABTest平台查询

四、ABTest的可用性保障

业务方接入ABTest会有两个核心关切,包括ABTest接入成本与易用性ABTest数据价值,即业务方希望以尽量低的成本简单可靠地接入ABTest,然后获取准确且充分的ABTest度量数据。

可用性保障解决的是ABTest接入成本与易用性的问题。我们的工作主要包括提升平台易用性、优化SDK、开发和测试方案支持以及监控和告警等方面。

提升平台易用性

  • 支持完备的ABTest元数据管理,实现较好的用户体验
  • 实现应用级的角色和权限
  • 支持场景修改配置的发布和审批
  • 支持实验的商家id或者用户分流标识的白名单

优化Java和Node SDK

  • 优化SDK性能。考虑到商详页Node端的场景等对CPU性能比较敏感,我们使用了很多方法来优化计算性能,包括基于推送来更新配置、使用多级缓存、简化计算链路和逻辑、后端日志批量上报等(对于极端性能敏感场景,可以使用前端分流的方案)。
  • 实现客户端配置自动化和透明化。例如NSQ的配置和上报日志的开关等,均通过ABTest平台推送来配置和更新,用户(开发)在代码层面不用关心。SDK因此也不依赖于用户的配置而可以实现一些对用户透明的能力,比如监控日志上报等。
  • 优化一致性哈希算法。实验流量配比基于权重值计算,支持最细粒度为 1/16384 的流量划分,基于MurmurHash和模数映射实现一致性哈希,并尽量降低因流量切换带来的体验不一致的影响。

开发和测试方案支持

  • 支持分别针对Java和Node端的示例代码,包括引入代码库、初始化、获取实验配置以及前端埋点等。
  • 支持daily、QA、预发、生产等4种应用环境。
  • 支持输入分流用户标识获取实验配置,以测试和还原A/B分流结果。
  • 支持实时日志明细查询,查询条件包括日志类型、实验以及以及分流用户标识等。
监控和报警
  • ABTest SDK自动采集并上报性能数据。
  • ABTest平台支持监控数据的计算和基于规则的异常检测,并接入有赞告警平台,实现异常告警。

五、ABTest的度量数据产出

对于业务方来说,ABTest系统的核心价值在于实验的度量数据。度量数据的产出解决的是业务方对ABTest数据价值的核心关切,即通过产出ABTest相关数据、提升数据的准确性并充分挖掘数据的意义,来科学地评价实验的可行性和有效性。

ABTest系统的数据产出主要包括ABTest数仓数据、实时报表和监控数据以及效果报表。

5.1 数据仓库数据

主要的ABTest相关数据都会维护到数据仓库,包括:

  • ABTest元数据维度快照表,如应用、场景、实验和流量配置等
  • ABTest日志,包括请求日志、自定义上报日志、曝光和点击日志等
  • ABTest效果数据,包括原始效果数据和效果归因数据等
  • 以上明细数据的ETL处理数据,包含中间层(dwd)、汇总层(dwa)以及产出层等粒度

5.2 实时报表和监控数据

目前实验的实时报表主要包括实验的请求、曝光和点击等的5分钟粒度汇总数据,基于Flink产出,主要用于展示ABTest场景的实时分流情况。

监控数据由ABTest SDK上报,经Flink处理后接入Druid,产出监控指标以供ABTest平台查询。监控指标主要为性能数据,包括ABTest请求量、请求失败量、日志上报时延、待上报日志量、待执行和被拒绝的线程数等。ABTest平台在应用首页展示实时监控数据,同时后台会定时查询,发现异常则告警给应用负责人。

5.3 效果报表

实验效果是指用于评价ABTest实验表现是否好坏的数据指标,即实验的评价标准。效果报表是ABTest平台数据报表的核心,包含了ABTest具体实验的评价数据,如下图所示:

38239137a4b4838efb91317e9550fb05.png

我们的主要工作包括:

通用效果模型

考虑有赞主要提供的是电商SaaS服务,有赞商家经营的主要目标是提升销售额。因此,我们实现了基于实验的请求→曝光+点击→成交的转化归因模型,用于产出ABTest实验的请求/曝光/点击/支付等相关指标(如请求量、点击量、支付金额)及其衍生指标(如点击率、转化率、千次曝光转化金额)的数据。这就是ABTest平台的通用效果模型,用于为ABTest场景提供默认的实验度量。

效果归因模型把曝光和点击视为“因”,成交转化视为“果”,优先级计算时直接效果优先于间接效果、浏览优于点击优于曝光、登录用户id优于前端埋点标识,并采用末次归因。

ABTest埋点规范

通用效果模型依赖于前端埋点的曝光和点击日志的上报,即实验场景只要执行了任意实验,都需要上报ABTest的埋点日志。这里的曝光和点击是指ABTest实验的曝光和点击,前端同学容易误解成前端组件的曝光和点击,导致ABTest返回不展示前端组件时而错误地没有上报ABTest日志。

  • 事件参数:abTraceId(必填)、bcm(选填),均可从返回实验配置里直接透传到前端。
  • 事件标识:曝光(事件标识包含view);点击(推荐页面浏览事件即enterpage,参数写入URL,或者点击事件即事件标识包含click,二选一)。

对于ABTest接入的前端埋点成本,我们考虑使用无痕埋点的方式完全规避掉,大致方案是埋点SDK静默生成和上报pv_id并在后端实现透传。

支持次数和人数指标

由于曝光、点击、支付、点击率、转化率以及平均曝光转化金额等指标都涉及到次数和人数两种口径类型,不同的业务场景可能关注的指标类型各不相同。效果报表专门对次数和人数指标做出区分,并在前端支持查询。

特别地,针对人数指标,考虑到跨天去重,由于ABTest平台支持用户选定时间范围进行查询,一开始我们采用HyperLogLog的基数去重计数。采用基数去重的好处是可以基于天级增量数据进行累加,可以支持用户的灵活查询;缺点是存在一定误差,在某些场景比如算法优化下是不可接受的。因此我们做了支持精确去重计数的重构,基于查询截止日期回溯枚举30天来做精确人数计算。

区分直接和间接转化效果

直接效果指商品效果,效果归因时要求曝光&点击和支付都发生在同一个商品上;间接效果即店铺效果,效果归因只要求是同一个店铺。通常来说,店铺级的优化会关注店铺整体的影响即间接转化效果,而直接提升商品转化的优化则关注直接效果。

两类效果数据ABTest平台都有产出,并且在实验场景的设置中支持自定义选择。

接入自定义归因效果数据

在ABTest的实际应用场景里,不同场景可能对转化效果的口径和归因的口径等要求各不相同,比如营销插件(如优惠券)的转化效果定义为插件的核销金额,商品推荐的转化效果定义为点击进入推荐商品详情页后的成交金额。

因此,ABTest效果数据除了提供默认的通用效果模型,还支持了自定义归因效果数据的接入,允许业务方提供定制的归因数据口径;而对于重要场景的归因数据定制,我们也可以提供支持。

还有一类重要的转化效果数据,即实验引导的用户行为事件。ABTest平台计划打通埋点系统,使用户可以指定任意用户行为事件作为转化目标,从而产出用户行为转化效果。

反作弊过滤

考虑爬虫和刷单等行为及其近似行为对ABTest效果的影响,单个用户的极端行为,如大量的曝光与支付、大金额订单,都可能会给实验的评价指标带来决定性的变化。因此实验评价数据有必要对异常用户的数据进行过滤。

我们主要结合绝对值规则和分布3σ原则,对前端日志数据和支付数据进行用户过滤,ABTest平台默认展示过滤后数据,同时也支持原始数据的查询。

显著性判断

ABTest本质上是抽样实验,ABTest效果数据反映的是当前实验覆盖的用户的表现现状,考虑到样本量和随机性,实验组的效果指标比基准组好不一定能说明实验组就更好。

显著性判断就是基于统计学的假设检验方法来科学地判断同一场景下的实验两两之间到底孰优孰劣。有赞ABTest场景的样本量较大,我们采用Z检验法来做假设检验。根据检验统计量:

c7127e6628b4ac4170bcfd8a011bc4e8.png

来计算z-score及其对应的显著性水平p-value;通过对比p-value与指定显著性水平如95%,来判断实验组是否显著好于基准组。

六、ABTest系统的评价

ABTest解决的是选择最优策略的问题,当我们在诸多可选策略里并不清楚哪个策略是最优的时候,ABTest可以帮助我们:1)选择更优的策略;2)避免选择更差的策略。因此,ABTest的价值包含两个方面,即更优策略的价值增量和更差策略的规避风险。考虑到有赞的业务场景,我们将极限提升GMV指标作为ABTest系统的北极星指标。

极限提升GMV的定义为:在拥有两个及以上实验的场景中,平均请求转化金额最好的实验对最差实验的提升量相对于场景全部请求量的提升GMV之和,即:

e74fd03aaa9ec7ad8b4b88d4d44439ad.png

其中,i为拥有两个及以上实验的场景,(i,j)为场景i中的实验j,Gmv为归因到实验的互斥GMV,Req为实验请求量。

极限提升GMV是一个理想的指标,度量了ABTest系统的价值。更全面的,ABTest系统的评价指标包括:

9fc0343b1457d9732ccb289c06b81c89.png

我们应该努力提升ABTest的覆盖面,并且重点投入到GMV提升量更大、影响力更高的实验场景中去。

七、展望和总结

7.1 展望

目前ABTest系统还远没达到完全成熟的状态,接下来我们会持续投入,继续努力提升ABTest系统的可用性和数据价值。重点工作包括:

  1. 实现ABTest前端无痕埋点,以消除前端埋点的接入成本。
  2. 增长分析接入ABTest平台,实现ABTest数据的自助分析和数据洞察,帮助业务方更好的理解数据并优化实验。
  3. 更丰富的自定义转化目标,包括与埋点系统打通以及支持自定义转化目标等。
  4. 上线评测报告功能,通过自动化产出实验评测报告,来给场景实验做全面充分的评价。
  5. 努力提升ABTest系统在公司的影响力,让数据驱动增长成为小伙伴们的共识。

7.2 总结

A/B 测试是数据驱动增长的核心工具,我们希望通过构建ABTest系统来帮助产研小伙伴更好地做产品技术迭代和帮助商家更好地实现增长,从而也为我们接下来的数据驱动增长的探索奠定基础。本文主要介绍了A/B测试的概念、ABTest系统的设计以及我们做的一些工作与思考。由于篇幅所限,很多细节没有完整表述,欢迎有兴趣的同学联系我们一起探讨,有表述错误的地方也欢迎指正。

对于数据驱动增长中ABTest系统没有覆盖到的部分,对于基于数据增长想法的产生,我们会基于增长分析来解决,尝试跨越数据分析与业务落地的鸿沟;对于用户行为数据等的采集和挖掘,我们基于埋点与采集平台来解决,并构建有赞用户行为核心数据资产。ABTest系统增长分析平台以及埋点与采集平台共同构成了数据增长团队的“增长三剑客”,我们的实践成果会继续在后续文章中介绍。

扩展阅读
  1. 有赞埋点实践

  2. 有赞埋点质量保障

  3. Flink 滑动窗口优化

  4. 基于时间加权的用户购买类目意愿计算

  5. 有赞推荐系统关键技术

  6. 有赞数据中台建设实践

  7. 数据资产,赞之治理

  8. SparkSQL在有赞大数据的实践(二)

  9. HBase Bulkload 实践探讨

Vol.320

最后打个小广告

有赞数据中台团队

长期招人,期待你的加入~

如果你是

数据增长、数据仓库、数据产品、算法、基础组件以及平台系统等方面的人才

如果你也是聪明、皮实、有要性的小伙伴

如果你对电商、SaaS有更多想法

欢迎投递简历:

zigu@youzan.com

加入我们,一起enjoy!

2bad5c091cad59188220bd5b8cb482fb.png‍‍

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

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

相关文章

分布式数字签名令牌TokenProvider

在分布式系统中,令牌签发系统往往需要跟令牌应用系统分离,并且应用系统可以独立验证令牌,无需请求签发系统接口。数字签名令牌属于发明专利《基于令牌协议的令牌组网构建方法》(已授权专利号201510213377.X)的一部分&a…

热力地图高德_高德地图:最新动态

高德地图是国内最专业的手机地图,超过3.2亿用户在使用!高德地图是应用商店上数据准确率最高、最省流量、躲避拥堵功能最强大的手机地图,平均每天为用户省油61万升!高德地图今日宣布上线货车导航功能,帮助全国3000万货车…

有效处理 Java 异常三原则

Java中异常提供了一种识别及响应错误情况的一致性机制,有效地异常处理能使程序更加健壮、易于调试。 异常之所以是一种强大的调试手段,在于其回答了以下三个问题: 什么出了错? 在哪出的错? 为什么出错? 在有效使用异常的情况下&#x…

人口危机 资本剥削导致生育率低迷

不久前,相关部门公布数据,2020年出生并已经到公安机关进行户籍登记的新生儿共1003.5万。对此,铁流先不做评论,我们先看数据。以下是1949年和1981年以来人口出生情况:1949年: 1275万......1981年:2064万1982…

连不上网_手机连不上网?四种方法教你如何解决,建议收藏以备不时之需

随着科技的进步,现在家家户户大街小巷都是Wifi信号,所以无线基地已经成为生活中不可缺少的一环,但也因为这样无线干扰的情况,常常听到有人抱怨怎么无线又突然断线啦?我的wifi又连不上了?为什么无线上网速度…

关于机器学习,你应该至少学习这8个落地案例|干货集锦

机器学习、深度学习、强化学习、迁移学习,这些你到底了解多少?各种深度学习框架如TensorFlow、Caffe、MXNet等又该如何选择?如何将机器学习整合到正在开发的应用中?机器学习在金融、电商、外卖、教育等领域有哪些落地案例&#xf…

c++经典编程题_全国青少年软件编程等级考试C语言经典程序题10道十

全国青少年软件编程等级考试C语言经典程序题10道十【程序91】题目:时间函数举例11.程序分析:2.程序源代码:#include "stdio.h"#include "time.h"void main(){ time_t lt; /*define a longint time varible*/lttime(NULL)…

使用SQL Server分区表功能提高数据库的读写性能

首先祝大家新年快乐,身体健康,万事如意。一般来说一个系统最先出现瓶颈的点很可能是数据库。比如我们的生产系统并发量很高在跑一段时间后,数据库中某些表的数据量会越来越大。海量的数据会严重影响数据库的读写性能。这个时候我们会开始优化…

回顾周杰伦17年间的歌词,才知道他都唱了些什么

每当提到周杰伦的歌时,你首先会想到的是什么呢?双截棍?中国风?还是是方文山?或者更会有人回答说:根本听不清的歌词…… 回想起来,周杰伦的歌可以说陪伴了我们一代甚至是几代人的成长。无论是《晴…

最近公共祖先_[LeetCode] 236. 二叉树的最近公共祖先

题目链接: https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree难度:中等通过率:57.2%题目描述:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:"对于有根树…

开启事物_《原神》全新角色甘雨登场 「浮生孰来」活动祈愿开启_新闻资讯_最新手游时评_原创手游资讯...

璃月地区的方方面面,都由「璃月七星」治理。由他们决议得出的策略牵动着市场的走向,因此每一条都要慎重再三。而会议之后,是谁摘录出要点,编入长长的条例中的,人们便不得而知了。璃月的千头万绪,就是这样被…

AI浪潮席卷而来,现在加入还来得及吗?

当你的朋友圈刚被 AlphaGo、Master 刷屏,没几天就听说日本有公司开始用 AI 取代员工、百度将人工智能列为未来10年最重要战略。同时一夜之间,似乎所有大公司都开始做无人驾驶…… 人工智能正以前所未有的速度,渗透、改造着各行各业。而加速这…

使用 Benchmark.NET 测试代码性能

今天,我们将研究如何使用Benchmark.Net来测试代码性能。借助基准测试,我们可以创建基准来验证所做的更改是否按预期工作并且不会导致性能下降。并非每个项目都需要进行基准测试,但是如果您正在开发的是NuGet程序包或通用dll,则很有…

【直观理解】一文搞懂RNN(循环神经网络)基础篇

推荐阅读时间8min~15min 主要内容简介:神经网络基础、为什么需要RNN、RNN的具体结构、以及RNN应用和一些结论 1神经网络基础 神经网络可以当做是能够拟合任意函数的黑盒子,只要训练数据足够,给定特定的x,就能得到希望的y&#x…

给新手程序员的16个工作必备小妙招,省下时间去LOL吧!

写在前面: 这个文章核心并不是程序优化的具体技巧,而是拿到一个问题如何思考和利用工具的通用方法。比如即使我们不知道 profiler 这个东西,通过搜索"代码 每一行 时间"也可以很快知道有这样的工具叫做 profiler,并且学…

xftp怎么有root权限_许多人都不懂的Linux系统里的特殊权限!!你真的了解嘛?...

有的朋友一听Linux系统文件还有特殊权限,那头就要爆炸了,那还是接着看看/tmp目录和/usr/bin/passwd文件,怎么回事啊!!!看见没有啊!不是应该只有rwx 吗?还有其他的特殊权限( s 跟t )啊…

我是怎样爬下6万共享单车数据并进行分析的(附代码)

共享经济的浪潮席卷着各行各业,而出行行业是这股大潮中的主要分支。如今,在城市中随处可见共享单车的身影,给人们的生活出行带来了便利。相信大家总会遇到这样的窘境,在APP中能看到很多单车,但走到那里的时候&#xff…

使用 Tye 辅助开发 k8s 应用竟如此简单(三)

使用 Tye 辅助开发 k8s 应用竟如此简单(一)使用 Tye 辅助开发 k8s 应用竟如此简单(二)续上篇,这篇我们来进一步探索 Tye 更多的使用方法。本篇我们来了解一下如何在 Tye 中如何对数据库进行链接。Newbe.Claptrap 是一个…

mybatis collection标签_一对多的关系,在MyBatis中如何映射?

# 使用collection标签需求:根据用户id查询用户信息的同时获取用户拥有的角色,一个用户可以拥有1个或多个角色。一般情况下,不建议直接修改数据库表对应的实体类。所以这里我们延用之前博客中新建的类SysUserExtend,并添加如下代码…

上传文件白名单_十大常见web漏洞——文件上传漏洞

漏洞介绍在我们浏览网页时,文件上传是非常常见的,比如我们会上传头像、附件、视频等文件,文件上传漏洞通常由于网页代码中的文件上传路径变量过滤不严造成的,如果文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型…