Airbnb(三) Managing Diversity in Airbnb Search 搜索多样性

news/2024/4/25 18:16:36/文章来源:https://blog.csdn.net/tiangcs/article/details/129269940

abstract

搜索系统中一个长期的问题是结果多样性。从产品角度讲,给用户多种多样的选择,有助于提升用户体验及业务指标。
多样性需求和模型的目标是相矛盾的,因为传统ctr模型是 point wise,只看单个相关性不管相邻之间item差异。
论文解决多样性的问题,从启发式的方法开始,最后介绍了结合RNN 的创新性的 DL 方法。

多样性问题背景

多样性问题背景:发现对一些热门location的排序展示结果,top几个都非常相似,在可见的listing属性上,如价格、类型、容量、位置等。

这种现象对那些没有在top中找到满意结果的用户不利,因为他们可能会觉得,怎么推出来的都是相似的,并且还不满意,就会减少搜索欲望。

DNN 会给相似属性的item打相似分,所以排序结果上相似属性的item会集中在一块。

下图是Airbnb房源库中多种风格的item 示例。

在这里插入图片描述

为了对精排结果进行二次排序以保证item多样性,在排序架构上增加了重排模块(Second Stage Ranker)

在这里插入图片描述

重排方法1 贪心Ranker

MMR

https://blog.csdn.net/m0_62577727/article/details/125585630

在这里插入图片描述

MRR更适合推荐业务,在搜索业务的重排序阶段不太适合,很多推荐业务还是会用 MMR来做初始的多样性 baseline

MLR (Mean Listing Relevance)

在这里插入图片描述

几点不同:

  1. 想要在多样性中考虑 positional bias,item相关性 = book概率 * 位置衰减函数权重

    在这里插入图片描述

  2. 和 MMR 相比,衡量多样性部分,不是用 max而是用 mean。

    1. mean会使得多样性的惩罚更加平滑。原来的 max
    2. MMR有个假设前提,用户只对一个类别中的一个item感兴趣,适合推荐,因为推荐可以推不同类别,但是search结果的范围更小,所以这个限制在搜索上过于严格

实践中,N 至少是一个页面大小,即最终呈现给用户的一页listing是多样性重排之后的

  1. 注意之前的MRR是 -,这里是 +,因为之前是 相似度函数,越大越相似,所以是-。 这里是距离函数,距离越小越相似。

💡 但是不管是 MLR 还是 MRR,都有一个问题:如何表示一个 listing的向量?

listing向量表示

当然可以用深度学习方法,抽取item embedding向量,但是这种方式过于黑盒,不太适合于业务初期。所以这里 airbnb 用listing可解释属性表示成一个向量,如 [价格、经纬度位置、容量、浴室数量、房间数量、房间类型], 确定了用哪些属性之后,这个向量的长度就是固定的。其中属性特征可以分为两类:

  • 连续性特征:计算均值和方差,进行标准归一化,上一篇论文讲过的手段
  • 类别特征:one-hot

表示后的向量 通过tsne 二维平面聚类可视化,kmeans分成6个类,然后分析每一类的 Listing属性,每一堆确实有共性属性。之所以用可解释属性,没有用word2vec等embedding向量表示,是因为这些属性有业务含义,比较好解释。

在这里插入图片描述

选出来的多样性好坏如何衡量

MLR算法,是来选出多样性重排的 topK,那这 topK的列表该怎么衡量好不好呢?思路就是把这 topK 列表和理想(上帝视角)的多样性列表分布进行对比,那么
如何找到理想(上帝视角)的多样性分布?airbnb选取了两个方面的多样性来衡量:

  1. Location diversity 地理位置多样性
  2. Price diversityzh 价格多样性

假设找到了这个上帝视角的多样性分布,那么如何对比当前列表和理想列表的差距呢?对比差距当然是用距离函数了,这里用的是 Hellinger 距离,专门用于衡量两个离散概率分布相似性,并且值域是 [0,1]

在这里插入图片描述

总体验证思路:

  1. 找到这次query请求对应的理想localtion分布/price分布
  2. 计算当前重排列表 topk的 localtion分布/price分布
  3. 用Hellinger距离计算1和2两个分布的距离,距离越小越接近理想分布,多样性越好

接下来用这三步来看下是如何验证多样性列表好坏的,个人觉得这里的做法还是挺有意思的?

location diversity

上帝视角的理想分布必然是不存在,回到现实还是要通过历史搜索日志去构建,比较历史搜索中含有用户的真实反馈,这些反馈信息是实打实的。

  1. 找到这次query请求对应的理想price分布
    1. KD-Tree 把地球划分为listing密度大概相同 的叶节点,每个叶节点就是一个桶
    2. 对过去的一个具体搜索Q,book了 listingA,则在 listingA的叶节点中放入Q,计数加1
    3. 不断重复2,则每个历史query都会落在一个桶中
    4. 递归合并数量不满足某个阈值的叶节点,直到超过这个阈值
    5. 最终每个query都落入一个桶中,并且这个桶中的 Listing数和命中的query数是固定的
    6. 假设总共ABCDE 5个桶,每个桶的理想概率=命中query数/ listing 数,则可以得到5个理想概率 [20/100, 10/30, 5/40, 6/50, 10/20],这表示什么意思呢?就是对于任意一个列表,落入每个桶的比例已经知道了并且这个比例就是理想比例,这个比例构成的向量就是在地里位置维度的多样性分布
  2. 计算当前重排列表的localtion分布
    1. 线上query请求 -> 精排 [L1, L2, … L1000] -> 重排 [L2, L9, L1, … L100] 得到一个长为100的重排列表
    2. 计算当前列表落入每个桶的概率,得到5个概率值,假设是
      [20/100, 0/100, 40/100, 10/100, 30/100],表示这个列表落入A桶20个,B桶0个,以此类推
  3. 计算 1和2两个概率分布的 Hellinger 距离,距离越小说明重排的地理位置多样性越好

price diversity

理想的价格多样性应该符号正态分布,以某个期望价格为中心,同时具有多个其它区间价格。并且期望价格肯定是不同的query条件不一样的,这里用一个回归神经网络对不同query条件进行预测得到期望价格

  1. 找到这次query请求对应的理想price分布:通过回归神经网络预测出来
    1. 训练:训练数据是 query侧特征,比如人数、价格、地理位置、住几晚等,label是这次搜索产生book的listing的价格。
    2. 预测:输入是线上的query侧特征,输出是这此query的理想期望价格 Ep
      有了期望价格怎么找理想区间?因为Ep上下误差范围内都可以认为是理想的。其实就是人工指定超参数来控制,定义最小值最大值,pmin= α * EP, pmax = β * Ep
      这个[pmin, pmax],就表示对于当前query,理想的listing的价格应该处于这个区间。
    3. 怎么找其它的多样性区间以及理想概率?根据paper描述,个人猜测应该是这样的:
      1. 比如 Ep=100,pmin=80, pmax=120, 则区间大小=40
      2. 找左右其它区间,如 …, [40, 80], [80, 120], [120, 160], … ,假设有10个价格区间
      3. 每个区间做归一化 (x-Ep)/Ep, 如 [80, 120] -> [-0.2, 0.2]
      4. 正态分布计算落入每个区间的概率,如落入理想区间 [-0.2, 0.2]的概率是可以算出来的,这样就得到10个概率分布向量,这个向量就是 理想价格多样性分布
  2. 计算当前重排列表的price分布
    1. 线上query请求 -> 精排 [L1, L2, … L1000] -> 重排 [L2, L9, L1, … L100] 得到一个长为100的重排列表
    2. 计算当前列表落入每个价格区间的概率,得到10个概率值,假设是 [2/100, 6/100, 10/100, 10/100, 30/100,...],表示这个列表落入第一个区间桶2个,第二个区间6个,以此类推
  3. 计算 1和2两个概率分布的 Hellinger 距离,距离越小说明重排的价格多样性越好

下图是10个区间的理想价格多样性分布

在这里插入图片描述

重排方法2 Location diversity ranker

同时优化多个多样性比较难,所以集中在比较重要的地理位置的多样性上,构造新的 Loss,同时考虑 了地理位置多样性和相关性:

在这里插入图片描述

  • S: 精排的打分列表

  • Lq:是对于query Q在KD-Tree节点的理想位置分布

  • Ls:S中的每个候选,在 KD-Tree上的先验分布

  • H : 用重排序结果和理想地理分布的距离,表示重排结果的多样性得分。两个离散距离后验概率列表的 Hellinger distance,范围是[0,1]

  • NDCGf:把精排阶段分数作为 ground truth label, 用来衡量当前重排 列表 S 和 精排打分排序后的列表 S‘的 NDCG差值,衡量和精排相关性的偏离程度。如 精排序是 [1,2,3,4,5], 重排后是 [3,2,1,4,5],范围是[0,1]

    以精排阶段分数作为ground truth label, 来衡量重排序结果和精排结果的偏差,表示重排结果的相关性得分

  • λloc\lambda_{loc}λloc 是超参数来平衡相关性和多样性,值越大,多样性惩罚越大,越在意相关性

  • loss值越小越好,说明越接近理想分布同时相关性最好

如何求解 loss?

标准的 SGD方法不能优化,因为地理位置表示的映射是固定的,导致 Lq 和 Ls都是固定的,没办法通过梯度下降优化。

用模拟退火算法,多次迭代进化。每次迭代通过交换重排序结果列表中两个item的位置生成新的结果,如果交换后, loss下降则接受这次交互,否则以一定概率接受。

重排方法3 Combined Loss Function

前面几种方法,计算 relevance 和 diversity 相分离,限制了重排序的效果。为了更好的建模 listing 、query 和 diversity 目标间的复杂交互关系,作者提出了将多个目标融合到一个可以用SGD优化的损失函数的方法

基于以下假设,将重排序优化问题,转化为优化生成结果和目标结果多样性分布的Hellinger距离:

在这里插入图片描述

几个需要明确的前提:

  • 每个训练样本包含 N 个 listing
  • 地理位置的目标分布是离散化的,对应 K 个可能的 bucket
  • 每个listing到bucket的映射是固定的
  • 最小化 TopT listing 的目标分布与经验分布之间的Hellinger distance,这里T <= N。

但是,直接使用Hellinger距离作为loss function是不可行的:因为每个listing对应的bucket是常数,和DNN的权重没有直接依赖,所以无法用SGD优化。然后设计了一个巧妙的替代loss,总体思想是,对于每个桶而言,我们可以有个二元判别器,来判别候选房宿分布中的这个桶里面的值是不是超过了理想分布中这个桶的固定值。

设计替代loss

如果item集合中,落入某个bucket的 item数量超过理想分布阈值,就缩小该bucket的item的打分,这个item的打分时 DNN可以控制

基于此思想,定义总体损失函数为相关性的 Pairwise loss 、位置多样性loss、价格多样性loss 的和 Lh=Lr+Ldl+LdpL_h = L_r + L_dl + L_dpLh=Lr+Ldl+Ldp,其中相关性 loss LrL_rLr
保证了重排序结果的相关性,位置分布多样性loss LdlL_{dl}Ldl 、价格分布loss LdpL_{dp}Ldp, 保证了重排序结果的多样性。

在这里插入图片描述

某个item所属的bucket中listing数超过一定阈值,则说明该桶的相关性比较大了,因此优化方向将使得bucket中的listing数量减少并向目标阈值移动

假设 batch=1, num_listing=3, num_bucket = 5,总共有 ABCDE个切好的bucket

  1. 输入变量:

    1. top_rank_logits: 重排网络预测分数 shape=[1, 3]
    2. bucket_vals: shape=[1,3,5] 当前列表每个item落入的bucket的 one-hot表示
    3. target_dist: query理想分布, shape[1, 5],value都是0-1的小数, 如

    [ 0.2, 0.3, 0.4, 0.1, 0.5] 表示大数据统计的 每个桶应该落入的理想比例

  2. distribution: [1, 5] ,重排列表落入每个桶的listing的比例

    1. ABCDE五个桶,3个listing分布属于 [A, A, C], 则桶分布=[2/3, 0, 1/3, 0, 0]
  3. direction_mask: [1, 5],当前distribution 是否小于 target_distribution,对应每个listing所属的桶是否超标了,0是超标,1是没有。

    [2/3, 0, 1/3, 0, 0] < [0.2, 0.3, 0.4, 0.1, 0.5]

  4. mask_tiled:mask=[B, N] → [B, N, L] → [B, L, N]。比如 [0,1,0,1,0] 是BD 两个桶超标了,则这个向量复制3份,也就是每个 listing 都知道这个信息

    [0,1,0,1,0, 0,1,0,1,0, 0,1,0,1,0]# [B, L, N], 每个listing都知道当前列表,哪个桶超标了
    [ [0,1,0,1,0,],[0,1,0,1,0,],[0,1,0,1,0,]
    ]
    
  5. sg_label:

    1. filtered_bucket:没说是啥,但应该是把一个列表里的多个1过滤掉只留一个1,因为后面要进行 sum变成2分类的问题。从物理意义上来说,只要有一个桶超标,就说明这个列表是需要多样性的

    2. filtered_buckets * mask_tile → [1, 3, 5],每个值是0或者1

    3. axis=2 进行 reduce_sum → [1, 3] ,每个值是0或者1,表示这个列表是否有在地里位置上超标

      [ [0,1,0,1,0,],[0,1,0,1,0,],[0,1,0,1,0,]
      ] 
      - > [1, 1,1] 表示当前列表不满足位置多样性了,有的桶落入过多item了
      
  6. sqdiff: [1, 5] ,当前 distribution和理想 distribution之间的 Hellinger 距离,

    1. [B, N, L] → [B, L, N] ,每个listing知道每个桶的 H 距离
  7. target_weight:

    1. sq_diff* bucket_vals,每个listing 知道自己落入的那个桶的 H 距离, buckt_val是 one_hot,所以没有落入的桶都成0 了
    2. reduce_sum, shape=[B, L]。结果就是每个 item所落入的 bucket的 H 距离。shape=[1, 3]
  8. sg_loss:label=sg_label, logit = top_rank_logit 算交叉熵loss,然后再乘 target_weight

使用这种方法,我们现在可以定义一个整体损失,它是标准pairwise损失,位置分布损失和价格分布损失的线性组合。然后,我们使用此组合损失函数训练了第二阶段模型。

重排方法4 利用上下文特征

我们的目标是使模型学习与给定查询相关的结果,但是缺少的一个关键数据是检索集本身的上下文。例如,很可能预订了一个listing,因为它是热门区域中仍然可用的少数几个listing之一

把搜索本身的上下文信息编码到模型中,作者加入了一些上下文特征,例如目标位置空闲房子数量,query对应的top K结果的价格、位置、房间类型、可容纳客人数的平均值和方差等信息。

在模型中加入人工的聚合特征,mean and variance of the price, location, room type, and person capacity,期望模型能利用这些特征学到列表维度的上下文信息。

重排方法5 query context embedding

非常吃基建设施,两个模型,利用上下文信息来做re-rank,这对架构通路其实要求较高

4的方法使用的人为定义的上下文特征,使用手工聚合可能不是代表查询上下文的最佳方法,因为缺乏一定准确度和泛化性,为了更好的建模 query context特征,使用深度学习 RNN来建模 query对应的精排结果(Learning a deep listwise context model for ranking refinement, SIGIR 2018),表示为 listwise context

最后一个时刻的 cell的输出状态 hn,作为 整个列表的 sequence emebedding,用来概括该列表的全部信息。

重排序模型H的结构,实际是有两个模型,一个模型用来生成 query context embedding,一个模型

1 生成 query context embedding的网络

在这里插入图片描述

  1. 左下方 LSTM 计算 context embedding。输入是精排 TopN结果 (L),输出是 hN
  2. 右下方DNN,输入是 query和user feature (Q & U)
  3. 将 LSTM 的 sequence embedding和 右侧网络的输出进行拼接
  4. 拼接后加一层全连接,输出为 query context embedding,用来表示理想的 listing embedding

这个网络只是为了得到最终的 query context embedding

2 重排序打分的网络 H

用下面的网络对 listing 列表进行重排序打分

在这里插入图片描述

此时的模型可以学习到匹配模式,如果一个listing是 query附近流行区域里的唯一一个,模型会对这个listing进行强化升级。

我们使用了pairwise损失函数,该函数具有将预订listing embedding移动到更接近查询上下文嵌入的效果,同时将未预订的listing推开

下面代码是 pairwise loss的实现,和 aribnb 2020年paper Improving Deep Learning For Airbnb Search 一样。
在这里插入图片描述

  • query_context_embedding: L Q U
  • 这里用两个子网络表示双塔结构,其实只有一个 网络。只不过输入特征不同,训练数据是很多个pair样本 <booked listing, non-booked listing>,每个pair的label 都是1,两个房源的特征分别输入到同一个网络,得到两个分数。
  • 重排打分时,将精排列表的每个 listing输入到网络中,得到一个基于 欧式距离的 Logit分数,这个分数代表了当前房源与理想房源之间的差距,差距越小越好,所以 loss越小越好。所以线上排序时应该是按 Logit分数从小到大排序。

distance_diff 是未预定listing到理想分布的距离-预定listing到理想分布的距离,越大说明前者是大的后者是小的,因此是越大越好,大是希望看到的。因此logit_diff是 越接近1越好

实验结果

offline

在这里插入图片描述

baseline 是 只用精排模型,exp是加了各个重排方法

线上实验效果

在这里插入图片描述

  • Greedy Ranker:持平/略负,分析是过于多样性
  • Second Stage Location Diversity Ranker: 正向,尤其是对于新用户,booking +1%,中国的用户+3.6%(之前的策略更倾向于城中心的,现在这个也有其他位置的item
  • Combined Loss Function: 持平,出现了一些极端价格,新用户 booking 降低比较多,推测是对于价格敏感的用户体验有伤害
  • Contextual Features: 持平,推测人工高级特征没有用
  • Query Context Embedding: 正向,online NDCG +1.2%, booking +0.44%, 新用户booking +0.61%,说明多样性对新用户很重要。分析了不同价格档位的位置变动情况

模型行为可解释性

DNN模型比较黑盒,如何去解释模型的行为,验证

在这里插入图片描述

搜索结果的位置分布,更加多样了

在这里插入图片描述

搜索结果的价格分布,更加接近期望价格,减少极端的价格。可以看到绿色的期望价格附近的房源,被重排改动的位置变化更小,而两端的价格对应的房源,被重排带来的位置变化比较大。
如果同一个list中已经出现了极端价格,则对剩余的候选极端价格惩罚加大。物理含义就是避免极端价格的房源重复出现

参考文档

  • https://zhuanlan.zhihu.com/p/359330317
  • https://zhuanlan.zhihu.com/p/239824669
  • https://zhuanlan.zhihu.com/p/369498198
  • https://www.modb.pro/db/580111

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

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

相关文章

设计模式-笔记

文章目录七大原则单例模式桥模式 bridge观察者模式 observer责任链模式 Chain of Responsibility命令模式 Command迭代器模式 Iterator中介者模式 Mediator享元模式 Flyweight Pattern组合模式 composite装饰模式 Decorator外观模式 Facade简单工厂模式工厂方法模式工厂抽象模式…

数学小课堂:无穷小(平均速度和瞬间速度的关系)

文章目录 引言I 速度1.1 平均速度1.2 瞬间速度(某一时刻特定的速度)1.3 解释飞箭是静止的悖论II 导数2.1 概念2.2 导数的现实影响2.3 微积分的意义III 无穷小3.1 贝克莱挑战牛顿(无穷小悖论)3.2 无穷小的定义引言 柯西和魏尔斯特拉斯给出的无穷小的定义: 它不是零;它的绝对…

【GUI】Robo 3T(Studio 3T Free) for Mongodb安装与使用教程

下载 robo 3T现已更名为studio 3T free&#xff0c;官网即可下载 studio 3T free下载地址 安装 mac电脑下载的是dmg安装包&#xff0c;直接正常安装即可&#xff0c;windows电脑也是一样的&#xff0c;不需要配置环境&#xff0c;安装即可使用。&#xff08;前提是你已经安装…

什么是接口测试,我们如何实现接口测试?

1. 什么是接口测试 顾名思义&#xff0c;接口测试是对系统或组件之间的接口进行测试&#xff0c;主要是校验数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及相互逻辑依赖关系。其中接口协议分为HTTP,WebService,Dubbo,Thrift,Socket等类型&#xff0c;测试类型又主…

SkyWalking简介和安装

APM系统 早期的监控系统功能比较单一&#xff0c;主要以监控CPU、内存、网络、I/O等基础设置为主&#xff08;cacti、nagios&#xff09; 后来随着中间件技术的不断发展&#xff0c;监控系统也开始监控缓存、数据库、MQ等各种基础组件的性能&#xff08;zabbix、prommethus&a…

【MinIO】文件断点续传和分块合并

【MinIO】文件断点续传和分块合并 文章目录【MinIO】文件断点续传和分块合并0. 准备工作1. 检查文件是否存在1.1 定义接口1.2 编写实现方法2. 检查分块文件是否存在2.1 定义接口2.2 编写实现方法3. 上传分块文件接口3.1 定义接口3.2 编写实现方法4. 合并分块文件接口4.1 定义接…

Python - Opencv应用实例之CT图像检测边缘和内部缺陷

Python - Opencv应用实例之CT图像检测边缘和内部缺陷 将传统图像处理处理算法应用于CT图像的边缘检测和缺陷检测,想要实现效果如下: 关于图像处理算法,主要涉及的有:灰度、阈值化、边缘或角点等特征提取、灰度相似度变换,主要偏向于一些2D的几何变换、涉及图像矩阵的一些统…

java中使用protobuf总结

基本没怎么接触过java编程&#xff0c;别的团队发过来一个用java编写的存储pb的文件&#xff0c;让拆分和解析&#xff0c;硬着头皮做一下&#xff0c;在此将步骤做个记录&#xff1a;下载安装protobufhttps://github.com/protocolbuffers/protobuf/tags?afterv3.6.1.2编译pro…

AI/CV大厂笔试LeetCode高频考题之基础核心知识点

AI/CV互联网大厂笔试LeetCode高频考题之基础核心知识点算法复习1、二叉树的遍历2、回溯算法3、二分搜索4、滑动窗口算法题5、经典动态规划6、动态规划答疑篇6.1、总结一下如何找到动态规划的状态转移关系7、编辑距离8、戳气球问题9、最长公共子序列 Longest Common Subsequence…

系统性能测试指标

性能测试的目的 1.评估系统的能力&#xff0c;测试中得到的负荷和响应时间数据可以被用于验证所计划的模型的能力&#xff0c;并帮助作出决策。 2.识别体系中的弱点&#xff1a;受控的负荷可以被增加到一个极端的水平&#xff0c;并突破它&#xff0c;从而修复体系的瓶颈或薄…

兴达易控Modbus转Profinet网关将丹佛斯变频器接入西门子1200PLC配置案例

案例简介&#xff1a; 本案例是兴达易控Modbus转Profinet网关连接丹佛斯变频器在西门子1200PLC程序控制实例&#xff0c;实现对变频器频率读写&#xff0c;及工作模式切换。 用到的设备为西门子1200PLC一台&#xff0c;丹佛斯变频器一台,兴达易控Modbus转Profinet网关一个 Modb…

OSPF -- (开放式最短路径优先协议)(公共协议)

OSPF -- &#xff08;开放式最短路径优先协议&#xff09;&#xff08;公共协议&#xff09; 1、属性&#xff1a;无类别链路状态IGP协议 无类别&#xff1a;更新携带精确掩码 链路状态&#xff1a;共享拓扑&#xff08;共享LSA&#xff09;本地计算路由IGP&#xff1a; 基于…

读取/etc/profile时发现错误:

读取/etc/profile时发现错误&#xff1a; /etc/profile:行XX&#xff1a;***************** /etc/profile:行XX&#xff1a;***************** 今天遇到这个错误&#xff0c;发现是首行被我编辑时删错了一个符号导致报错&#xff0c;导致每次开机都会报这个文件错误&#xff0…

SpringBoot解决跨域方式

跨域是指在 Web 应用中&#xff0c;一个服务器资源或应用访问另一个服务器资源或应用的资源时候。由于浏览器的同源策略&#xff0c;一般情况下同一个域中的网站或应用可以互相访问资源&#xff0c;但跨域访问会被浏览器拒绝。浏览器出于安全考虑&#xff0c;会限制跨域访问&am…

Jmeter性能测试 入门

Jmeter是一款优秀的开源测试工具&#xff0c; 是每个资深测试工程师&#xff0c;必须掌握的测试工具&#xff0c;熟练使用Jmeter能大大提高工作效率。 熟练使用Jmeter后&#xff0c; 能用Jmeter搞定的事情&#xff0c;你就不会使用LoadRunner了。 我将会覆盖Jmeter的各个功能…

亿发软件:钉钉移动ERP业务在线,审批、管理更方便!

钉钉系统是企业级智能移动办公平台&#xff0c;平台覆盖大中小微各量级企业&#xff0c;帮助中国企业移动办公管理。企业无需复杂的部署操作&#xff0c;在对应的功能制定流程和相关负责人即可。 亿发企业ERP管理系统于2022年与钉钉系统做了对接&#xff0c;提供一站式的企业管…

大数据系统重点

第一章 大数据计算系统概述 1 大数据计算框架概述 计算框架: 一种抽象&#xff0c;在其中提供相应的通用功能供用户编写代码以实现具体功能&#xff0c;从而形成面向应用的软件。 大数据计算框架&#xff1a;面向大数据的计算框架。 Hadoop Hadoop的运行过程 Hadoop的详细…

腾讯云轻量应用服务器和云服务器CVM有什么区别?

腾讯云新推出的轻量应用服务器Lighthouse和原来的CVM云服务器有什么区别&#xff1f;轻量应用服务器Lighthouse是一种易于使用和管理、适合承载轻量级业务负载的云服务器&#xff0c;主要用于Web网站应用&#xff0c;轻量服务器使用及后期运维更加简单方便&#xff1b;云服务器…

【数据结构(四)】树

文章目录树1 树的基本概念1.1 树的定义1.2 基本术语1.3 数的性质2 二叉树的概念2.1 二叉树的定义与特性2.1.1 定义2.1.2 二叉树的性质2.2 几种特殊的二叉树2.2.1 满二叉树2.2.2 完全二叉树2.3 二叉树的存储结构2.3.1 顺序存储2.3.2 链式存储3 二叉树的遍历和线索二叉树3.1 二叉…

敏捷-期末

什么是敏捷开发&#xff1f; 敏捷开发(Agile Development)是一种以人为核心、迭代、循序渐进的开发方法。 怎么理解呢&#xff1f;它不是一门技术&#xff0c;它是一种开发方法&#xff0c;也就是一种软件开发的流程&#xff0c;它会指导我们用规定的环节去一步一步完成项目的开…