严选算法模型质量保障

news2024/12/29 10:47:57

在算法模型整个生命周期**(算法模型生命周期:初始训练数据 --> 模型训练 --> 模型评估 --> 模型预估 --> 训练数据)**中,任何环节的问题引入都可能导致算法模型质量问题。所以我们在做模型质量保障的过程中,需要关注各个阶段的质量。

1. 背景

目前算法模型已经被广泛应用于严选各个方面,可以说算法无处不在:

在C端为严选APP提供搜索、推荐能力;

在智能触达营销系统中提供个性化营销能力;

在外部广告实时竞价交易平台中提供智能竞价能力;

在B端为供应链提供预估商品补货量能力;

……

随着业务的不断发展,算法模型质量保障的完善也日趋紧急。算法模型质量保障在严选的起步相对较晚,最近两年才开始起步,本文将对严选当前的模型质量保障体系做一下简单的总结,谈一谈模型质量保障的手段以及严选优先落地的保障手段。

算法在严选的应用核心主要可以分为三大块:召回、排序、重排。

召回层首先通过算法模型从多个目标候选集中召回资源(如商品、榜单、活动、话题等);

排序层的模型主要是精排的深度学习模型,按照预估的点击率、加购率、转化率等进行排序;

重排层主要是重排算法和策略,包括流量决策算法、多样性重排算法等。

最后将个性化的结果展示给用户,然后用户是否点击、加购、购买等行为再进行埋点落数仓,提取出训练样本,用来更新模型,如此形成一个良性的闭环系统。

我们对算法模型系统生命周期进行了抽象,以此来探索算法全方位质量保障,算法模型生命周期大概经过以下流程:初始训练数据 -> 模型训练(生成模型) -> 模型评估(测试模型) -> 模型预估(使用模型) -> 模型应用(反馈模型),最终形成闭环。

模型训练过程是通过训练样本和答案得出算法模型的过程;

模型评估是通过评估样本和刚训练完成的模型得出新答案的过程,因为评估样本是已知答案的,所以可以通过对比新答案和参考答案,来评估模型效果;

模型预估是通过预估样本和模型得出答案的过程,在商品推荐场景中预估样本可以理解为用户+商品,而我们预估的就是用户对商品的点击或者购买概率,只是是否点击、购买发生在未来;

模型应用是反馈模型生成新的训练样本的过程,在商品推荐场景中就是将推荐商品展现给用户,然后获取用户真实的点击、购买等行为数据。

在算法模型生命周期中,任何环节的问题引入都会导致算法质量问题。

图片

我们也分析了一下算法测试相比其他服务端测试的难点:

首先,其他服务端的行为基于不同的输入预先确定,而算法的测试输入为特征(比如用户特征是实时更新的),测试输出是预估值存在不确定性,可解释性方面由于深度学习模型的神经网络不可解,所以可解释性差,在结果验证方面无法确认输入对应输出的逻辑是否准确;

测试周期方面,由于模型版本会自更新,随时间变化模型预估效果可能会出现偏差,所以我们无法在模型上线后就确定测试完成不会发生模型类问题,需要持续关注;

测试关注点上,不仅要关注模型质量,还要关注特征质量、数据质量;

除此之外,相对于其他服务端测试,模型问题抽象度高,难分析定位。

下面通过算法模型生命周期,进行模型问题分析。

2. 模型问题分析

我们对算法模型系统抽象出来了一个闭环,讲到任何环节的问题引入都会导致算法模型质量问题。所以接来下我们会从算法模型闭环出发,以算法问题视角讲述算法会出现的典型问题,引出算法的全方位质量保障手段。

我们从模型应用阶段开始分析,模型应用是模型预估后反馈模型的一个过程,比如严选推荐场景中推荐的商品曝光给用户,用户会产生点击、收藏、加购、购买等一系列行为,这些数据是建立机器学习的第一步,而这个阶段容易出现数据质量问题。

在模型应用到模型训练的过程中,算法工程师会根据原始数据经过一系列拼接、计算等得到训练用的特征,而这个过程中容易出现特征质量问题(也可以归为数据质量问题)。

在模型训练阶段,容易出现欠拟合、过拟合等一系列问题,但是这些问题是算法工程师需要关注的,QA可以不过多关注。

在模型评估阶段,容易出现验证集和训练集划分不均等问题导致模型评估失真,但是这些问题同样是算法工程师需要关注的。

在模型训练到模型预估的过程中,容易出现模型延时问题,严选目前对模型实效性要求不高,但是后续也会升级到小时级更新,延时问题会更突出。

在模型预估阶段,容易出现策略机制一致性问题(模型实际效果不符合调研预期)、数据质量问题(样本数据问题、特征计算问题)、功能、性能问题等。

图片

首先根据问题症状的明显度,我们先把问题进行了大致分类,偏急性的问题,问题症状严重,表现明显,这类问题则需要拦截;偏慢性的问题,初始症状不明显,但是积累渐变,这类问题则需要召回。分析整个算法模型闭环,我们把问题分成5大类:

第一类是主要针对搜索推荐等容易出现的Badcase;

第二类是策略机制一致性问题,出现在模型预估阶段;

第三类是模型延时问题,出现在模型评估到模型预估的过程中;

第四类是数据质量问题,出现在模型预估阶段或者模型预估到模型训练的过程中;

第五类是功能、性能问题,出现在模型预估阶段。

其中两类是急性问题,两类是慢性问题,还有一类比较特殊,他就是Badcase。Badcase更准确来讲应该是一种结果而出现这种结果的原因可能包含其他四种问题,所以Badcase挖掘可以理解为把整个算法系统当作黑盒来测试。

分析这些问题可以发现,最终导致的结果可以分为三种:

第一种是Badcase;

第二种是算法模型效果问题,包括策略机制一致性问题,模型延时问题,数据质量问题、性能问题等都会影响最终的模型效果;

第三种是功能策略问题。

因此也引出算法模型质量问题保障的重点:Badcase挖掘、算法模型效果问题发现、功能策略问题发现。

算法模型效果的质量保障是模型质量保障的重点和难点,影响模型效果的因素多样,导致模型问题抽象度高,难分析定位。考虑到优先级和投入产出比,算法模型效果质量保障是一个由浅入深的过程,或者说是一个从问题可知、可测到问题可控的过程。

所以前期我们对算法模型效果质量的保障的目标是做到问题可知,因为模型离线评估是算法同学完成的,如果评估指标下降会拦截模型作用到线上,所以我们可以通过模型先验和后验效果一致性来发现实际效果问题,然后在此基础上关注了性能问题对实际效果的影响。对于数据质量问题、策略机制一致性问题、模型延时问题等是后续需要进一步深入完善的。另外,在模型上线效能上我们通过pipeline上线自动化验证实现了进一步提升。

3. 模型质量保障重点

3.1 Badcase挖掘

因为算法模型原因,线上搜索、推荐可能存在较明显Badcase,比如检索词和搜索结果不相符,推荐结果出现不应该出现的商品,推荐等。这些Badcase对用户体验伤害很大,甚至会影响转化、收入。

那我们要做的就是在线下尽可能拦截这类问题,在线上尽早召回问题。因此问题分析可以概括为两点:

从模型评估到模型预估的过程中,缺少高效率、高覆盖的算法模型Badcase线下验证、拦截能力;

在模型预估过程中,缺少有效的算法模型Badcase线上召回能力。

对此我们平台化打造了Badcase挖掘能力,作为模型升级、新模型上线前质量保障的重要环节,实现模型可能引起的Badcase线下可拦截;通过属性条件筛选用户,以及自动挖掘,实现测试用户高覆盖、高效率。在这之前我们线下挖掘Badcase只能看自己账号测试APP,覆盖低;或者构造用户手动请求接口获取搜索推荐商品ID,然后再把ID通过小工具可视化,效率低。

Badcase挖掘平台化主要经历了两个阶段:

阶段一是人工挖掘,通过平台人工查看模型作用下给用户推荐的商品,或者用户搜索到的商品,分析为该用户推荐某商品,或者搜索到某商品的原因,从而确认模型效果。但是,人工评测的模式强依赖测试人员经验积累,门槛高,且每次只能评测单个用户的推荐、搜索商品,效率较低、用户覆盖面有限,因此需要寻求低门槛、更高效、高覆盖的模型线下效果验证能力。

阶段二是自动挖掘,通过平台选择批量的用户生成批量的测试结果,自动计算模型评测指标,自动筛选出Badcase风险等级高的结果,最后再人工确认高风险结果,通过这样的方式提高测试用户覆盖,提高测试效率。

3.2 模型效果质量

问题分析中讲到算法模型效果质量的保障这块我们优先实现了问题可知,我们第一步建立了模型后验效果监控,实现了模型效果问题T+1可知。在此基础上,我们建立了精细化的性能监控,对性能问题实时可知。后续我们还会进一步深入保障数据质量,模型延时等方面。

3.2.1模型后验效果

模型效果的评估指标有很多,我们需要做的是根据不同场景和业务,选择合适的指标,这样通过观察评估指标就能判断模型实际效果,从而协助模型升级和迭代。

一般模型主要包括分类、回归、聚类模型,我们首先分析下这些模型通用的模型效果评估指标:

分类模型通用评估指标包括查准率、查全率、正确率、F1分数、AUC/GAUC、KS值、PSI值等;

回归模型通用评估指标包括平均绝对值误差、均方误差、均方根误差、均值平方对数误差、中位数绝对值误差、决定系数等;

聚类模型通用评估指标包括纯度、F1分数等。

虽然搜索、推荐、广告等通常使用回归模型,但是它们的衡量标准其实是是否点击、是否转化,是一种分类问题,所以使用分类模型评估指标更加合理。另一方面,我们发现模型离线评估其实通常是由算法同学完成的,只有通过离线评估的模型才会作用到线上,所以我们在评估模型实际效果的时候不应该盲目去评估所有的指标,而应该以离线评估指标为基准。

以严选为例,搜索、推荐、广告等模型的离线评估使用点击、加购或者转化的AUC/GAUC,所以在线模型评估需要关注的指标也是点击、加购或者转化的AUC/GAUC,在此基础上完善其他指标可以辅助多维度分析模型效果。

理想情况下某个用户对某个商品的兴趣分通过模型预估流和模型评估流结果是一样的,因此我们可以通过先验和后验效果一致性来发现这种问题。那什么是先验效果和后验效果?

所谓先验效果就是模型评估效果(发生在模型生效前),而后验是指非实时的,需要通过应用反馈的曝光、点击、转化数据来计算线上实际的效果指标。

如图是模型预估和模型评估两条流的逻辑抽象:

在这里插入图片描述

先验、后验效果一致性的原理图

在模型评估阶段,我们通过对已知答案的评估样本计算特征,使用模型再排序的方式,观察是否把转化的样本尽量排在前面来评估模型效果(先验效果),如果模型的目标是点击或者转化,那么先验效果可以通过点击AUC/GAUC或者转化AUC/GAUC来衡量。

在模型预估阶段,我们类似的对预估样本计算特征,使用模型计算预估值的方式进行排序,未来用户会产生真实的点击、购买行为,这样就可以计算模型实际效果(后验效果),同样的,后验效果指标可以去对齐先验效果指标。

但是很多时候模型评估和预估阶段,采用了不同的评价体系,在线只是通过实验方式对比新老模型点击、转化、UV价值等业务效果指标,包括我们也有这样的情况,这样做的问题在于不知道线上点击率、转化率达到多少或者提升多少才算达到预期,所以对模型效果问题的判断其实是不够的。

3.2.2 性能监控

性能问题和大多数工程服务问题存在着共通性,想必大家都是比较了解的。比如活动期间流量往往会成倍上升,算法服务如果存在性能问题会导致大量超时:

如果是召回阶段的大量超时,则会导致召回商品没有用户相关性关联而效果差,影响转化、收入,甚至开天窗的可能;

如果是精排模型或者重排算法的大量超时,则会导致线上没有算法加成效果大打折扣,影响转化、收入。

对此,我们监控了所有场景下各链路召回耗时、精排耗时、重排耗时,召回超时量/率、精排超时量/率、重排耗时量/率,以及前处理耗时、后处理耗时、pipeline耗时、总耗时等,及时召回所有场景各个阶段的超时问题并处理。

3.3 pipeline上线自动化验证

严选为了适应不同场景下的搜索、推荐,召回、排序、重排使用的模型、算法、策略都是以算子的概念任意配置组装的,因为配置是人工操作的,所以策略、算法作用到模型预估阶段容易出现因为配置错误导致的策略、算法问题,甚至模型未生效等情况,影响模型效果质量。因为模型后验效果是T+1问题可知的,问题可知滞后,所以这个阶段基本的验证是有必要的,可以有效拦截大部分策略、算法问题作用到线上。我们已经将自动化验证结果作为pipeline上线的卡点,只有验证通过的pipeline才能上线。

在上线前这个阶段,我们可以做策略、算法有效性的校验,以及Badcase挖掘等。在有效性校验中,验证多通道召回的召回类型、算法得分,排序前后位置变化、排序模型得分,重排前后位置变化等。在Badcase挖掘中,根据不同场景配置不同的自动挖掘指标。

在自动化验证前,pipeline上线没有严格的卡点,依赖算法同学自己验证导致线上问题频现。另外验证需要一系列的操作:配置pipeline -> 配置实验 -> 手动用例请求 -> 手动验证 -> 上线,耗时1小时以上。接入pipeline自动化验证后只需要操作:配置pipeline -> 自动化验证 ->上线,整个过程的操作下降到分钟级别,其中自动化验证耗时2分钟以内。通过这样的方式,大大提升了pipeline上线效率。

4. 模型质量平台

基于模型质量保障重点中的保障点,我们通过平台化的方式落地了其中的测试、监控能力。下面会介绍平台的设计、展示等。

4.1 模型质量平台设计

4.1.1 平台架构设计

图片

目前我们将Badcase挖掘、模型效果质量、pipeline上线自动化验证卡点等能力都综合到了算法模型质量平台。

模型评估指的是在线模型评估,对原始数据进行处理生成曝光转化、曝光加购、曝光点击等数据,再进行评估指标计算分析,将分析结果保存在MySQL中,最后通过平台实现灵活配置、可视化,监控报警。目前平台内的评估指标包括各个场景下不同模型目标、算子类型、模型版本、坑位等的AUC、GAUC、CTR、PCTR、CVR、PCVR、PCOC等。

图片

模型评测模块提供Badcase挖掘功能,包括手动挖掘和自动挖掘,通过获取真实用户推荐结果或搜索结果,再进行计算分析,并将分析结果保存在MySQL中。

模型验证模块为pipeline上线提供自动化验证的能力,综合pipeline有效性自动验证结果和Badcase自动挖掘结果。pipeline有效性验证为其中各个算子的有效性验证,Badcase挖掘包括重合度、打散度、覆盖度等。该模块根据平台配置的各个场景下验证项和阈值,触发一键验证后,通过计算中心计算结果判断是否可以上线。

图片

4.2 模型质量平台展示

4.2.1 Badcase挖掘

进入“自动挖掘”界面 -> 根据筛选条件查询用户 -> 批量选择测试的用户 -> 选择想要测试的接口(模型) -> 生成批量请求数据 -> 编辑、确认请求数据 -> 发送请求,开始Badcase挖掘。

图片

挖掘报告界面:

上部为所有测试用户评测指标的均值,可以反映模型表现在各评测指标的整体趋势。

下部为所有单测试用户评测指标,可以快速筛选出Badcase风险等级较高的测试用户。

图片

查看详情可以进一步人工确认是否为Badcase,然后进行反馈:

图片

4.2.2 模型后验效果

模型后验效果的计算依赖客户端埋点数据,经过拼接、计算后可以得到曝光点击、曝光转化等数据。

图片

图片

然后通过计算得到模型评估指标。目前我们对指标进行了精细化,模型目标包括点击、加购、转化,算子类型包括召回、精排、重排,编排版本包括线上生效的所有版本,坑位包括全坑位以及靠前的多个坑位,另外还区分了新老用户。通过这样的方式多维度分析模型实际效果。

在指标上,我们优先落地了AUC、GAUC、PCOC、CTR、PCTR、CVR、PCVR等。

图片

最后根据平台配置对异常点及时报警。

4.2.3 pipeline上线自动化验证

联合算法一体化平台,在预发布阶段一键触发自动化验证,只有验证通过才能上线。

图片

然后可以进一步查看测试报告详情,定位问题。

图片

图片

4.3 模型质量平台总结

模型质量平台经过一年多时间的打磨演进,经历了多个阶段。Badcase挖掘从一开始人工挖掘到自动挖掘,再到成为自动化验证项;模型后验效果从脚本工具阶段到平台化;模型上线流从手动验证到一键自动化验证。实现了严选算法模型质量保障很多方面的从无到有,降低了模型质量保障的技术门槛,同时提高了效率。

5. 展望

模型质量平台目前已经实现了自动化、工具化、服务化、可视化等能力。未来我们期望可以实现模型训练、模型评估、模型预估、模型应用等阶段的全流程质量保障闭环:

  • 首先从算法模型质量保障的深度上来说,还有待进一步深入到特征质量、 数据质量。
  • 其次从实效性方面考虑,目前的模型后验效果是T+1问题可知,当天问题无法召回,需要进一步提升实效性。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

在这里插入图片描述

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!  

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

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

相关文章

【日常笔记】使用Server过程中可能遇到的一些问题

使用Server过程中可能遇到的一些问题 1. 如何查找GPU型号与驱动版本之间的关系?2. 如何查看当前Server的内核版本?3. 使用Nvidia过程中可能用到的命令4. 对Jupyter Notebook的一些配置5. TensorFlow的一般操作6. 使用PyTorch的一些操作7. 修改安装源为国…

【漏洞复现】网互联路由器存在密码泄露

漏洞描述 蜂网互联-让链接无限可能,灵活的多线分流,强大的策略分流,灵活调度各种软件应用,深度识别系统,各种应用一网打尽,灵活调整优先级,最简单的路由器,简洁易学的配置&#xff…

MySQL——多表查询

多表查询 多表查询的出现,是为了解决当我们的数据不能存放在一张表上,或者我们的数据本身就是存在多张表上,需要根据字段之间的关系,联合多张表查询出想要的数据。那么根据业务实现的关系,表与表之前也出现了三种基本…

构建微服务项目时启动网关服务失败的解决方案

启动网关服务时报“Unable to create the temporary folder: C:\WINDOWS\TEMP\/nio-file-upload”错误。 代码与之前没有任何变化,但就是启动不了,观察错误意思大概是不能创建临时文件夹:C盘下的WINDOWS下的TEMP目录下的nio-file-upload这个东…

C#,数值计算——多项式微分(Binomial Deviates)的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// 二项式偏差 /// Binomial Deviates /// </summary> public class Binomialdev : Ran { private double pp { get; set; } private double p…

day57 补

647. 回文子串 力扣题目链接(opens new window) 给定一个字符串&#xff0c;你的任务是计算这个字符串中有多少个回文子串。 具有不同开始位置或结束位置的子串&#xff0c;即使是由相同的字符组成&#xff0c;也会被视作不同的子串。 示例 1&#xff1a; 输入&#xff1a…

机器学习——boosting之提升树

提升树和adaboost基本流程是相似的 我看到提升树的时候&#xff0c;懵了 这…跟adaboost有啥区别&#xff1f;&#xff1f;&#xff1f; 直到看到有个up主说了&#xff0c;我才稍微懂 相当于&#xff0c;我在adaboost里的弱分类器&#xff0c;换成CART决策树就好了呗&#xff1…

Yolov8-pose关键点检测:模型轻量化创新 | ​BiLevelRoutingAttention 动态稀疏注意力 | CVPR2023 BiFormer

💡💡💡本文解决什么问题:BiLevelRoutingAttention ,通过双层路由(bi-level routing)提出了一种新颖的动态稀疏注意力(dynamic sparse attention ) ​BiLevelRoutingAttention | GFLOPs从9.6降低至8.5,参数量从6482kb降低至6134kb, mAP50从0.921提升至0.926 Yolov8…

云备份服务端——实用类工具实现

一&#xff0c;文件实用类设计实现 不管是客户端还是服务端&#xff0c;文件的传输备份都涉及到文件的读写&#xff0c;包括数据管理信息的持久化也是如此&#xff0c;因此首先设计封装文件操作类&#xff0c;这个类封装完毕之后&#xff0c;则在任意模块中对文件进行操作时都将…

SLAM ORB-SLAM2(1)总体框架

SLAM ORB-SLAM2(1)总体框架 1. 简介2. 框架3. TRACKING4. LOCAL MAPPING5. LOOP CLOSING6. MAP1. 简介 ORB-SLAM2 是一个实时和完整的视觉SLAM系统(包括闭环检测、重定位、地图重用等功能) 提供了利用单目、双目以及RGB-D相机完成稀疏三维重建的功能和接口 2. 框架 总体来说…

c++day3

1> 自行封装一个栈的类&#xff0c;包含私有成员属性&#xff1a;栈的数组、记录栈顶的变量 成员函数完成&#xff1a;构造函数、析构函数、拷贝构造函数、入栈、出栈、清空栈、判空、判满、获取栈顶元素、求栈的大小 #include <iostream>using namespace std; clas…

baichuan2(百川2)本地部署的实战方案

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

Vue3,Typescript中引用组件路径无法找到模块报错

是这么个事&#xff0c;我在vue3新创建的项目里&#xff0c;写了个组件叫headerIndex.vue&#xff0c;放到app.vue中import就会报错 路径肯定没写错&#xff0c;找到了解决方法&#xff0c;但是也没想明白为什么 解决方法如下 在vite-env.d.ts文件中加入 declare module &qu…

《向量数据库》——向量数据库Milvus 和大模型出联名款AI原生Milvus Cloud

大模型技术的发展正加速对千行百业的改革和重塑,向量数据库作为大模型的海量记忆体、云计算作为大模型的大算力平台,是大模型走向行业的基石。而电商行业因其高度的数字化程度,成为打磨大模型的绝佳“战场”。 在此背景下,Zilliz 联合亚马逊云科技举办的【向量数据库 X 云计…

Java类和对象(七千字详解!!!带你彻底理解类和对象)

目录 一、面向对象的初步认知 1、什么是面向对象 2、面向对象和面向过程 &#xff08;1&#xff09;传统洗衣服的过程 &#xff08;2&#xff09;现代洗衣服过程 ​编辑 二、类的定义和使用 1、类的定义格式 三、类的实例化 1、什么是实例化 2、类和对象说明 四、t…

【2023年11月第四版教材】第11章《成本管理》(合集篇)

第11章《成本管理》&#xff08;合集篇&#xff09; 1 章节说明2 管理基础3 管理过程3.1 管理ITTO汇总★★★ 4 规划成本管理4.1 成本管理计划★★★ 5 估算成本5.1 估算成本★★★ &#xff08;19上57&#xff09; &#xff08;19下35&#xff09;5.2 数据分析★★★5.4 成本估…

阿里云免费镜像仓库+金克斯+码云实现自动CI

前提 有阿里云账号&#xff0c;并且已经完成实名认证。最好有一台云服务器&#xff0c;以及码云账号&#xff0c;还有现成的项目以及Dockerfile一、开通阿里云容器镜像服务 1、新建命名空间(一般只需要建一个就行了) 2、在命名空间下&#xff0c;建立镜像仓库&#xff0c;看下…

D. Choosing Capital for Treeland

Problem - 219D - Codeforces 问题描述&#xff1a;Treeland国有 n 个城市, 这 n 个城市连接成了一棵树, 靠单向道路相连, 现在政府想要选择一个城市作为首都, 条件是首都必须能到达其他所有城市, 现在我们不得不将一些道路反转方向, 记反转的条数为 k 条, 我们要找到所有使 k…

c++day2---9.7

1> 思维导图 2> 封装一个结构体&#xff0c;结构体中包含一个私有数组&#xff0c;用来存放学生的成绩&#xff0c;包含一个私有变量&#xff0c;用来记录学生个数&#xff0c; 提供一个公有成员函数&#xff0c;void setNum(int num)用于设置学生个数 提供一个公有成员…

VMware的三种连接模式

目录 目录 前言 系列文章列表 思维导图 1&#xff0c;VMware是什么? 2&#xff0c;VMware的连接模式 2.1,VMware的连接模式是什么? 2.2, VMware的连接模式的分类 3&#xff0c;桥接模式 3.1,图示介绍 3.2,详细介绍 3.3,注意点 4.NAT模式 4.1,NAT协议 4.2,图示…