RTC 体验优化的“极值”度量与应用

news2024/11/20 10:32:48

随着线上互动需求的增加,直播连麦、语音/视频聊天的应用越来越广泛。我们一直在说“追求用户的极致体验”,但是体验是一个抽象的概念,很难量化和统计。如何从用户的行为中得到所在场景的优化“极值”,如何依据“极值”建立统一的质量指标体系以指导业务优化?如何迁移抖音的服务经验,满足toB用户的体验需求?LiveVideoStackCon 2022北京站邀请到火山引擎RTC团队负责人——杨智超,为大家介绍在实时通信场景下火山引擎RTC对体验的理解与应用落地。

文/杨智超

编辑/LiveVideoStack

大家好,本次和大家分享的题目是RTC体验优化的“极值”度量与应用,重点在于“极值”二字,因为RTC很多时候很难定义体验天花板,如何通过数据手段定义天花板并指导团队进行极致体验优化?

我是杨智超,火山引擎RTC体验团队的负责人。

f04d40a334061776bb800610ef971b01.png

本次分享包括以下方面:

一、RTC指标体系及目标;

二、直接指标的“极值”探索-以进房为例、间接指标的“极值”探索-以卡顿为例、“异常特征库”指标:这三类指标在日常的使用和分析过程中的思路不同;

三、体验优化的能力迁移与最佳实践:用实例说明以上三类指标如何提升用户体验。

-01-

RTC指标体系及目标

fc8339748542f134d26dcb6edaa83f47.png

为什么要花大精力做指标呢?因为很多团队做RTC时在指标体系花的精力并不大,很多是算出来,我刚进字节的前两年管理RTC供应商,他们为我提供了非常多指标,但在过程中遇到了一些事情让我意识到指标的重要性。在一次重大事故中,抖音连麦持续40+分钟无法成功进房,只能直播无法连麦,而进房指标依然99%+,我们对此表示怀疑,供应商提出的理由是一个旁路服务器出现了故障,但这也同时体现出了指标定义的问题。

7d3e78a820994d6bfc9d46964ba39ef2.png

在日常工作中,即使整体的服务业务没有波动,指标有时也会持续变化,且变化的范围在绝对值20%-30%。直观地看来是服务业务的某一环节出现了问题,但在实际排查后得到的回应往往是没有达到阈值,暂时无需关注。当达到阈值后,又会发现供应商侧的报警形同虚设,也无法排查出原因,此时得到的建议是再观察两天,而最终结果要么是过两天指标自动恢复正常,要么是持续处于高位,供应商便会问我们的用户体验反馈有何变化,如果没有变化,那就直接调整较高的阈值后继续观察。

ef9442bcf1b28bcd90ea5bc84fb8703e.png

在多次发生此类事件后,我们便开始自己做指标。经过两年的沉淀后,指标体系也变得“稳、准、狠”。

  • ——极小波动,月初14日的核心指标的方差<0.003,选取月初14天的原因是国内套餐在月初14天的网络波动较小。非核心指标包括进房、80ms音频卡顿及500ms视频卡顿的方差基本在万分级的水平波动。

  • ——波动即有因,在出现问题时要找准大致方向排查原因,在进行了大量的归因分析后,我们定下了归因比例>95%的目标,只有达到此水平,才能看出指标的整体波动趋势,有章可循,反之没有分析出原因的波动是无意义的。核心指标的归因比例如进房达到98.23%、80ms音频卡顿是94.92%,这个比较低,因为小的卡顿没有必要归因,500ms视频卡顿是97.36%。

  • ——有因必有果,报警的时候必须查明原因,近一个月的报警次数是41次,近一年能查出确切原因的比例是92.7%。

f808c81a826f6dfecba1d097d627ac0a.png

指标做“准”的要求有三个:

  • 目标清晰。这是非常关键的一点,对于RTC来说,目标包括相背的两方面:一个是商业化,要求指标尽可能准,波动不大;另一个是敏感,只要出现问题,就要提前出现波动,能够展示每一个case并分析原因。我们调研市场中的其他方案,他们都将其当成两套指标执行,但我们在拉着产品和研发讨论后认为要做成一套指标,将另一套指标的经验放在这套指标的研究上,争取把这套指标研究透彻,向业务方展现更多细节,使其更加信任我们。

  • 态度。每个数据的问题是否能在下一版本上线?火山引擎本身非常关注AB实验,大家对数据的需求非常重视,这点做的非常好。

  • 落到实地。我总结要将指标做准的三个词,最小行为粒度、API行为对齐、对其体验感受的最小阈值。

1badb224b45be9a32c2c54f41ae75ac2.png

在会议场景中,从进房到发言、Mute自己、Unmute自己,再到发言,其中包含了两次首帧发送,每次首帧发送都是一个样本,这一点在指标定义中非常重要,要找到最小行为粒度并将其定义为最小的指标粒度。

7e5d454a97ec7d9b7aef5f7a14eb27a2.png

这是典型的成功率指标的计算模型,从过程开始到成功/失败/超时,成功后还有其他事件。但计算指标的时候只会选取B事件或者A/B1事件,如果不考虑所有的ABC三类事件,指标很容易随着日志上报量的波动而波动,考虑所有ABC事件是和用户调用API行为完全对齐的,不会出现用户已经无法进房,而指标仍然99%的情况。

e7f535a6f1d4f4a29bb92e76a923e237.png

RTC指标中有许多阈值,最简单的是音频卡顿率阈值,业内音频卡顿率一般是80ms、100ms、200ms,我们定指标的时候如何判断阈值呢?RTC主要使用Opus编码器,编码器出现卡顿时会有补偿,当补偿到4帧时,它会把声音分为清音、谐音和噪音进行编码,谐波的衰减系数已经降到0.48,一般衰减系数降至0.5以下,其实已经完全听不清了。所以最多补齐4帧,也就是80ms,正常人说话发一个音节的声音也是80ms,可以理解为,当发“和/he”的音时,如果“h音”出现了卡顿,那么对面听到的就是“额/e”,如果大于80ms,声音已经发生了偏移,不是原来的声音,这是无法接受的,所以我们在定义指标的时候针对此原则确定最小阈值。

3cde0f0f24b8a9df58596373b6502946.png

做出指标体系后,如何对其进行打磨?这个过程持续了大概两年,原理是当一个指标非常稳定的时候,它是符合正态分布的,也就是3倍标准差范围的概率是99.7%,也就是说一旦超过了3倍标准差的范围,那么会有99.7%的可能性出现了问题。

8d4e1ef5896b6de71c5e99528afc28ba.png

0f4f11b2c5198b40f7fda6005e66f8f2.png

c6426ca762d918a4736fb8b5bef1e2e2.png

去年5月19日,我们的5s进房成功率变为99.3%,拉长看好像没什么问题,但将其单抽出来,可以看到前14天的平均值是99.342%,标准差是0.013%,监控阈值判定是99.303%,也就是99.3%的实际值中有超过99.7%的可能性是线上出现了问题,根据当时的归因,5月19日的ICE建联获取节点失败也在上涨。我们由此牵引开始排查,发现服务器上线了一个概率非常小的bug,有一定的可能拒绝连接,影响进房成功率不到0.01%。这正是因为指标非常准确,及时发现问题,才能够避免它在线上一直存在且随时可能爆发。

c1dc99e95aefe5ae6a6987ca39ea0e1e.png

指标体系分为三类:直接指标、间接指标和异常特征库指标。

直接指标包括进房类、首帧类、Crash等,间接指标包括卡顿类、延迟类、CPU、内存等,两者是0和1的关系,对单个语音用户来说,进房要么成功要么失败。而间接指标如卡顿可以是50ms、100ms等,是一种程度的关系。

异常特征库指标解决的是QoS指标无法覆盖的无声问题、噪音问题、回声问题等。

本文分别通过举例具体介绍这三类指标。

-02-

直接指标的“极值”探索——以进房为例

79f0d37dd7f1eba697bedc8d0702b98c.png

c963a27f4e9e2809d6cf9e3b625dba87.png

进房类指标对用户来说进不去房是最大的的体验损失,最初对接抖音的时候,对方提出的要求是任何一次进房失败都是不可接受的,而当时我们的结论是,这样的要求也是不可接受的,甚至认为这是不可能的,于是我们理直气壮地和业务方PK。

PK的结果是抖音给我们看了连麦的流程图:用户A邀请用户B后,业务侧转发给B,AB一起进房开始连麦。然后抖音提出两个问题,第一,如果说断网是由于网络不好,那为什么前面的业务请求都是好的,却总是在你这里断网?第二,一个开直播都卡的用户,为什么要去连麦呢?他不应该先解决直播卡的问题吗?

我们认为业务侧视角的解读很有道理,于是定了一个目标,实现进房成功率100%。

7e13aee48b17128005272441ec41cbcb.png

9a5bfc8b0cedd1f9dfb0609f896e3a93.png

经过分析,我们认为要扎扎实实做好拆解与归因,典型的例子便是“ICE建联失败不等于网络不好”。在之前排查case的时候,大部分建联失败的原因会归结于网络不好,但业务方并不认可这个结果,他们认为是业务内部的bug导致失败。

后来我们内部明确了一个观念,分析指标的时候,拆解和归因完全是两件事情,ICE建联失败只能说是一个步骤的失败,并不能说是这次失败的原因。第一步要明确拆解的步骤,在做进行具体归因的时候需要达到“技术认可,业务理解”的标准,如果业务不理解,只能说是技术的“自嗨”,如果技术认可,业务理解,那么便可以达成共识并为此100%努力。

关于上文业务方提到的网络问题,后续的解决方法是我们在进房的同时会发出标准http请求,标准到完全和业务方对齐,覆盖全球30+域名,每次请求至少选中3个域名,当这些请求失败时,我们认为业务网络不通是由用户网络不通所导致,这次的归因也得到了业务方的认可。相应地便有了第二条归因:http成功但ICE建联失败,这是技术和业务都认可的,是技术内部的bug,需要继续优化,这是因为ICE建联本身应该比http更易成功。

此外还有一些归因:在欧洲比较常见的,用户只支持ipV6导致的失败;用户调用的时候有bug,导致在进房的同时出现crash;域名质量不佳等。

e58ef36e4472b6a960bddce6c31b8df6.png

2735c02d75e202b71e0e3c10967f345d.png

b75f2ad3a26f8fd634a0df0310fb9b03.png

进行了以上工作后,我们能够回答两个问题:

①对抖音来说,距离100%还有多少优化空间?

②对其他业务来说,距离抖音还有多少优化空间?之前针对这个问题的回答是,进房率优化到99%就达到了抖音水平。但业务方会说,他们的用户是高端用户,进房率应该高于99%。如何回答这个问题?

每个归因会在具体计算理论的优化数后,结合核算出的指标同抖音进行对比就可以得出此业务和抖音优化空间的区别,同时可以得到优化天花板是多少。

-03-

间接指标的“极值”探索——以卡顿为例

72b1974201098d4984f9b1113f91935c.png

间接指标对于单个用户及不同场景来说标准各不相同,比如主播PK和语音聊天室对卡顿的忍受程度完全不同,前者主要为了提升人气,一旦和主播连麦的时候,对方出现了卡顿,他很可能会结束连麦,换下一个人PK,但后者更注重聊天室积累,主播可以和观众聊一整天,不会轻易的换房间。再细分到语音聊天室会发现主播和嘉宾对卡顿的容忍度也不同,主播为了保证直播间热度,出现卡顿的时候不会轻易离开,但嘉宾可能会直接更换聊天室。

对此,我们制定了一个目标,找到一种能够尽可能适应多场景的衡量用户不爽的方法。

bfc43ec39e02bad28ff6cb2b08ca96e6.png

上图是站在用户的角度,根据不同的卡顿累计时长及严重程度,用户做出的不同反应:

  • 一点点卡顿如100ms时,用户无法感受到;

  • 卡顿大一点在500-700ms时,用户会忍一忍;

  • 持续秒级的卡顿时,用户虽然发牢骚,但还会坚持看;

  • 卡顿达到5s以上,大部分用户会选择退出重进或直接结束;

  • 多次持续的卡顿时,用户会试着进行反馈;

  • 当反复重试都没用时,用户会认为该服务不行,不再使用。

而业务侧视角则是一直有反馈,此起彼伏,且留存及连麦平均时长降低。连麦平均时长可以作为重要的和QoS打通的QoE指标,原因是当一次连麦不爽的时候会再连一次,一段时间内连麦次数多了,相应的平均连麦时长自然会降低,业务的指标就会向下走。

b8754c3a471ecee62cecdeed2d925c9f.png

在上文的反应链下,我们大胆假设,首先明确什么是QoE?我们唯一能够控制并能用自己的锚点能够表述的就是“用户退出”动作。

卡顿时长逐渐增长时,退出的比例如下图所示,刚开始用户感知不到,退房用户比例很低,而随着卡顿时长增长到某一点时,大部分用户便开始退房,斜率会增大到极值。达到此点后,会发现有些用户对卡顿无感,他们由于一些固定的原因而必须连麦,比如参加早会,早会的内容如何不重要,重要的是参加,此时卡顿再严重,用户也不会退房。我们发现,不同的场景都会有一定的堕化比例,所以最终选择用户行为的敏感点作为卡顿是否影响用户体验的阈值。

755ba83c8641cc9e44e84fa555c81c2f.png

以上是整体的假设,图中是具体到抖音中的数据。

1v1PK对卡顿非常敏感,在2s左右便出现用户大规模退出重连,主播基本没有曲线形状,他对卡顿容受程度非常高,嘉宾的忍受程度介于1v1 PK和主播之间。中间是抖音的IM通话,这里主叫和被叫的曲线完全一致,代表场景完全一致。

这张图最有趣的在于不会随着时间而转移,无论是每个月的第一周,前半年还是后半年,在不同时间段验证,这张图都几乎重叠,完全和用户体验场景和APP对应的用户群体相关。

151c87f43fb0e55df5baac113241b3a3.png

我们在此基础上根据每个图算出敏感点,以此为基础,分析超过敏感点的卡顿原因并做拆解,得到以上两图,并指导用户进行线上优化。这样可以得到更容易引起QoE变化的结果。

-04-

“异常特征库”指标

b4f15bad41a9ec9e43543bd2ee0c8aa6.png

26d5bc2f7d583fc3f7cad9164cf9c823.png

4663bdda30ceffc4678cda486b3288b2.png

在支持各种业务包括内部创新业务、保密项目及对外的toB业务时发现,业务方对我们用QoS指标做出的东西并不感冒,他们之间存在很大的Gap。C端用户很容易用QoS指标衡量,但B端业务方会受到关键人即老板的影响。我们经常收到一些反馈说又卡了,需要排查原因,于是业务方便认为我们的RTC不过关。还有一种情况是,部分用户会自行反馈或APP自带反馈功能,当我们拿着很好的QoS指标跟业务方沟通汇报时,他们只会质疑,这么多的反馈,你跟我说质量变好了?

一开始我们认为业内都用QoS指标衡量系统质量,怎么在这就和业务方说不通呢?经过分析得出这类case有三个特点:

①很难用指标来衡量,因为每次问题都是随机的;

②我们与业务方都有可能出现问题,也许是业务方调用错了或是调用的时候改变逻辑才导致了问题;

③量小虽然不影响线上指标,但很影响用户体验,对单个用户来说,他发生较大的卡顿并且都开始反馈了,说明在他自己的场景下很容易闭线,这是非常严重的问题。

为了解决此类问题,我们分析了许多类似的case,得出了“用户比老板更早发现问题”的结论,老板发现的问题都在之前的用户反馈中出现过,没有重视的原因是反馈体量较小,数据量波动较大,很难抽取有用的信息,而且对反馈不太关注。于是针对反馈,我们做出了一套异常特征库指标,希望它能够体验用户的评价体系。

4c27844984ec5701faec06a58b069c7b.png

能做成这套指标的基础是抖音集团的特点——在意用户反馈,我们公司的食堂屏幕会无删减地播放用户反馈。

f762fc840d126758d2f7cec5c33e607e.png

bc77c239020b57a9b5a37c108ec11d1f.png

d0ac2b32c9a1e5b2855bb47f32e73cb7.png

bfa44d430dc68247c74c406fafeb12d1.png

fb4b99d1676fdb0e81a7e6ee379c7aeb.png

ea0d534b1d61767fa8a331550da9f7ef.png

在此之前,我们统一了抖音集团的所有实时通信相关反馈并将其分类。

其次,抖音集团每天线上的反馈多达3W+,都是用户一个字一个字打出来的。我们将其细分维度分析依然很稳定,这对后续分析帮助很大。

我们还设计了一套流程:单个用户做反馈时,会有一波人对其进行分析,再落到异常特征库中,通过两套系统的调用,智能服务助手主动发送给SA,SA能够直接和用户沟通,并根据客户的特点将信息转换为服务落实下去。

这里的关键在于两点:

  • 第一点是定义概念:“问题”包括无声问题;“反馈”,无声问题对应的反馈包括“我听不到对方”和“对方听不到我”,看上去没有区别,但这两个bug在同一优化上的走势是完全不同的;“现象归因”,比如audio_level==127是无声问题最重要的现象归因,即采集音量为零。对应采集这一现象归因后便是第四点,“技术归因”,如无声问题,光是audio_level==127就有30+个归因。

  • 第二点是归因标准,我们之前也将反馈内容抽象出来作为标准规则供大家使用,但存在的问题是标准是否通用或是反馈强相关?对此,我们定了三个强制标准:

    • 目标用户反馈率高于整体反馈率1倍以上,右图是实际内容,大部分反馈的归因对应的反馈率是整体反馈率的2倍以上,最高的达到8倍,说明这一特征对应的无声反馈最明显,基本出现这个特征便会出现无声问题。

    • 迁移到有录制的场景,回放人工验证>80%,由于底层的埋点是通用的,所以在某一场景发现问题后,如在会议场景下很难验证此归因是不是无声的,往往只有看录像才能验证,但会议又不可能保留录像,于是我们把会议规则迁移至有录像的连麦场景下,通过人工验证的方式验证规则是否准确。所有的规则要求验证时准确率>80%。

    • 整体覆盖率>95%。前两项标准是为了说明归因的规则和无声的反馈是非常强相关的,而这一项是为了能将以上规则拟合成QoS指标,和QoE反馈的动作强相关。

24065e68b97134caba1147102e80892d.png

图中是通过反馈优化发现的问题,如“组合必然无声”体现的是产品兼容性问题,这是代码迭代过程中出现的,当时的无声反馈突然增多,于是在业务方反馈之前便排查并修正了bug。还有一种无声问题是由业务方调用或客户设备所造成,典型的是麦克风被占用。右图是收到了啸叫反馈,许多用户没戴耳机使用电脑开会时,会和会议室的设备产生啸叫,此时系统会主动提示“是否采用无音频模式入会”,由此解决问题。

-05-

体验优化的能力迁移与最佳实践

4e48ab019f6178db04260c99df0ab8ab.png

e43ecbd47e88760fc21b1b90204cd215.png

2d49ef206873fcd101fd8b681610eaf7.png

56519163bf10f58aabdd4a04578949dd.png

70d611bd402ac4335265122f32d8333c.png

c6131399322c9090138168212fec602c.png

d41e24da3fc394d5208a0114b483bff2.png

这个是无声的案例,此类情况在抖音其实无时无刻都在发,我们以复盘角度展开:

8月12日 11:40  自发巡检发现抖音无声反馈升高

8月12日 11:45  根据技术归因大盘,明确为“采集帧率异常”和“首帧发送异常”,此时前者持续增高,后者开始回落

8月12日 22:31  明确为“首帧发送异常”之前已经处理问题。当前主要为“采集帧率异常”(若非进行了细致的分析,此时会得出和供应商相同的结论,“问题已经解决了,再观察两天”)

8月16日 00:15  明确为业务调用问题,RTC没有实际问题

8月26日 17: 24  业务方复现并明确了问题,由于他们调用多线程,导致在接电话时会给客户设置Mute

9月14日 bug接触之后,“对方听不到我”的反馈率下降,“我听不到对方”的反馈率无明显变化,并且产出新归因——采集启动失败

10月12日 规则 review 过程中,修订规则为“同一用户连续多次连麦,首次正常,后面无声”,因为“首次正常”代表客户设备没有问题,而“后面无声”代表某一环节出现了问题

11月20日 明确规则后放入特征库,发现某内部创新业务同样存在问题,已经优化上线

整体上,我们便是通过以上方式逐步提升用户体验。以上是本次的分享,谢谢!


2e422266fd5447b6eae8ecdcbaaf0630.png

LiveVideoStackCon 2023上海讲师招募中

LiveVideoStackCon是每个人的舞台,如果你在团队、公司中独当一面,在某一领域或技术拥有多年实践,并热衷于技术交流,欢迎申请成为LiveVideoStackCon的讲师。请提交演讲内容至邮箱:speaker@livevideostack.com。

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

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

相关文章

macOS Ventura 13.4 RC2(22F63)发布

系统介绍 根据黑果魏叔官网提供&#xff1a;5 月 12 日消息&#xff0c;苹果今天面向开发人员&#xff0c;发布了 macOS Ventura 13.4 的第 2 个候选 RC 版本&#xff08;内部版本号 22F63&#xff09;&#xff0c;距离上个候选版本相隔数天时间。 macOS Ventura 带来了台前调…

VS2022安装NuGet 包

手动安装 在 解决方案资源管理器 中加载项目&#xff0c;然后选择“项目>管理 NuGet 包”。系统会打开“NuGet 包管理器”窗口。 2、 选择“ 浏览 ”选项卡&#xff0c; 使用左上角的搜索框搜索特定包。 从列表中选择一个包&#xff0c;在右侧窗格中显示其信息&#xff0c;…

MySQL(表的约束)

文章目录 0. 前言1. 空属性2. 默认值3. 列描述4. zerofill5. 主键6. 自增长7. 唯一键8. 外键 0. 前言 真正约束字段的是数据类型&#xff0c;但是数据类型约束很单一&#xff0c;需要有一些额外的约束&#xff0c;更好的保证数据的合法性&#xff0c;从业务逻辑角度保证数据的正…

【ChatGPTMidjourney】许多职业即将消失,AI 即将战胜人类了吗?

文章目录 前言一、人类科技发展史二、 AI浪潮下的挑战1. 数据安全和隐私保护问题2. 带来新的伦理和道德问题3. 版权和知识产权问题 三、对传统行业和就业的冲击1.传统文本编辑行业受到冲击2.就业岗位的变化3.工作流程的变化4.创意版权问题 四、AI浪潮下的机遇1.提高效率和创意性…

不用网闸、FTP的话 如何实现内外网数据交换?

网络隔离已然成为很多企业首选的数据保护方式&#xff0c;即使是内部人员之间&#xff0c;也是不能随意的发送敏感文件的。但是&#xff0c;文件的流转交互&#xff0c;又是不可避免的&#xff0c;网络隔离保障了企业网络安全&#xff0c;但在具体实践中仍需解决各隔离网间的数…

基于html+css图展示57

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

Ubuntu一条命令下载MCU固件

现在很多项目开发都逐渐的迁移到Linux环境下。但是Linux开发单片机就没有像Windows下开发那么方便&#xff0c;它没有对应开发工具&#xff08;KEIL&#xff0c;IAR等&#xff09;&#xff0c;它们自带烧录等功能。所以在Linux上开发单片机需要安装下载固件的工具–JLink。 J…

小程序上线流程

1.配置服务器域名 小程序接口API 2.业务域名配置 ​首先配置小程序的业务域名&#xff0c;将下载txt文件放在A 域名根目录下&#xff0c;然后才可以配置业务域名为 A 。主要应用场景为&#xff0c;小程序页面跳转其他小程序 3. npm run build:weapp 编译&#xff0c;小程序代…

【ChatGPT】 AI 手把手一步一步教学 Self-Attention:这些动图和代码让你一次读懂ChatGPT背后的“自注意力”

BERT 及其多种变体已经在多种语言理解任务上取得了非常出色的表现,这些架构全都基于 Transformer,而 Transformer 又使用了一种名为「自注意力」的方法。本文将通过图示和代码对自注意力机制进行透彻的解读。当然,在阅读本文之前,你可能也想了解什么是注意力机制。没有问题…

【JS】js常用工具类:

文章目录 一、 将对象拼接到url地址后面二、正则获取url中的图片名称三、获取多数组之间的差集四、数组遍历判断是否需要拼接地址五、 数组去重六、如果值不存在就 push 进数组&#xff0c; 反之不处理七、过滤对象中为NaN&#xff0c;undefined的属性八、字符串中插入千位分隔…

基于SpringBoot+Vue的校园疫情防控系统(附源码和数据库)

文章目录 第一章2.主要技术第三章第四章 系统设计4.1功能结构4.2 数据库设计4.2.1 数据库E/R图4.2.2 数据库表 第五章 系统功能实现5.1系统功能模块5.2后台功能模块5.2.1管理员功能 源码咨询 第一章 springboot校园疫情防控系统演示录像2022 一个好的系统能将校园疫情防控的管理…

ChatGPT网站如何像软件一样可以安装下载

今天给大家分享一下, 如何实现网站能够在手机端像软件一样下载在桌面保存, 这样下次就能像打开app一样访问网站了, 是不是听了之后会很心动呢, 接下来我们就一起来学习一下知识, 快来试试这样的效果吧, 最后分享一下我做的一个chatGPT网站, 欢迎大家免费试玩chatGPT, 不过我的免…

JVM系列-第8章-执行引擎

执行引擎 执行引擎概述 执行引擎概述 执行引擎是Java虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念&#xff0c;这两种机器都有代码执行能力&#xff0c;其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的&#xff0c;而虚拟…

GreatSQL社区月报 | 2023.04

GreatSQL 是一个开源的 MySQL 技术路线数据库社区&#xff0c;社区致力于通过开放的社区合作&#xff0c;构建国内自主 MySQL 版本及开源数据库技术&#xff0c;推动中国开源数据库及应用生态繁荣发展。 为了帮助社区的小伙伴们更好地了解 GreatSQL 社区的实时进展&#xff0c…

项目经理什么事都做,只会让你成为工具人

每个人拥有的时间都是一样的&#xff0c;每天二十四个小时&#xff0c;为什么有的项目经理每天提前完成工作下班喝酒撸串&#xff0c;为什么有的项目经理每天熬夜加班到天明&#xff1f; 为什么总是你的时间不够用&#xff0c;每天都很忙碌呢。很可能是你的时间没有管理好。 …

笔记-指针的进阶

1.字符指针 char arr[] "hello bit." char * p arr 这里p指向的是数组的首元素&#xff0c;arr数组是可以修改的。 &#xff08;const&#xff09;char * pstr "hello bit." 这里的字符串是常量字符串&#xff0c;不能修改。 这里有一个面试题&#xf…

LeetCode_二叉树_中等_113.路径总和 II

目录 1.题目2.思路3.代码实现&#xff08;Java&#xff09; 1.题目 给你二叉树的根节点 root 和一个整数目标和 targetSum &#xff0c;找出所有从根节点到叶子节点路径总和等于给定目标和的路径。 叶子节点是指没有子节点的节点。 示例 1&#xff1a; 输入&#xff1a;root…

网络基础知识(1)——从OSI七层模型和TCP/IP说起

网络通信概述 网络通信本质上是一种进程间通信&#xff0c;是位于网络中不同主机上的进程之间的通信&#xff0c;属于 IPC 的一种&#xff0c; 通常称为 socket IPC&#xff0c;如图中所示。所以网络通信是为了解决在网络环境中&#xff0c;不同主机上的应用程序之间的通信问题…

U盘上的文件删除了可以恢复吗 U盘上的文件怎么在电脑上恢复

随着数据时代的到来&#xff0c;人们使用U盘来存储和传输文件已经成为一种普遍的方式。然而&#xff0c;有时候人们会不小心将重要的文件从U盘上删除&#xff0c;或者由于其他原因导致文件丢失&#xff0c;这会给人们带来很多麻烦和不必要的损失。因此&#xff0c;在这篇文章中…