背景

实时直播经过去年的千播大战后已经成为互联网应用的标配技术,但直播平台的成本却一直居高不下,各个平台除了挖主播、挖网红以外,其背后高额的带宽费用也是他们最大的一块成本。

现阶段直播技术在传输方面分为两块:CDN 和连麦系统,CDN 负责流媒体的分发传输,连麦系统负责解决同时多个主播间互动的实时通信传输问题。我们始终认为基于 CDN+ 连麦系统的直播技术是一个高成本高消耗的技术,从各大直播平台纷纷亏损来看就验证了这一点。除了带宽成本,延迟问题也是现在直播技术的一个硬伤。我们很早就意识到现在这种传统的直播技术是无法大规模进行在线教育互动直播的,所以学霸君从 2016 年下半年就开始研发基于 UDP 和 P2P 技术的互动直播系统。整个系统的设计目标是:

  • 端到端延迟控制在秒级范围之内。
  • 在不影响视频质量的情况下尽力节省分发带宽。

基于 P2P 技术的整个分发架构在一个 10W+ 直播平台上进行了 9 个月的测试和调优,初步达成了设计目标。那整个系统是怎么设计的?使用了哪些技术来达成目标?接下来我来重点分享一下架构设计和技术细节。

P2P 分发网络架构

传输分发网络中我们把连麦系统和分发系统合二为一,将分布式推流与边缘节点分发作为一套传输体系,通过服务之间的 P2P 通信和路由选择来实现连麦的最小时延,架构如下图:

P2P如何将视频直播带宽降低75%?

整个传输分发网络分为三部分:推流部分、服务之间 P2P 和客户节点 P2P。这个传输网络有一个系统锚点:假定推流者 speaker 推到 Edge server 上是不会发生丢包和延迟的,Edge server 会通过服务间 P2P 快速将收到的流数据分发到其他的 Edge server,而且在这个过程也不会发生延迟和丢包。为什么需要这样一个锚点?因为在客户节点的 P2P 网络需要保证流畅性和最小延迟,也就是要求所有的 Edge server 在最短时间周期内拥有完整的数据,至于为什么要这样,后面我们在流补偿环节重点介绍。

我将通过整个流数据传输过程来解析具体的技术细节,但在这之前首先要解决的就是媒体数据分片问题,所有的传输过程会基于分片 (segment) 来设计。

媒体数据分片

媒体数据分片是整个分发传输系统中最为基础的部分,我们在设计分片时主要考虑的是时延和消耗的问题,分片如果太大,传输的时延就会越高,例如 HLS;如果分片太细,网络中回馈报文就会很多,对 P2P 网络来说额外的消耗也是个问题。最后我们借鉴了 RTP 和 FLV 中的经验,采用按帧来做数据分片,这样做有以下几个好处:

  • 按帧分片延迟粒度小,可以在帧传输进行延时优化。
  • 实现简单,与编解码器编码原则一致。
  • 组合灵活,可以实现播放 buffer 无缝结合。

每一个分片称作为 segment,用一个自增长的 32 位 ID 来表示唯一性,传输过程都是以这个 ID 为标示来确定数据的完整性。

推流与连麦

确定好了媒体分片就可以进行推流了,我们把推流和分发的路径合二为一,上麦者是将流数据 segment 推送到离自己最近的 Edge server 上,而不是推送到专门的连麦系统上。我们推流传输使用的是 RUDP 传输算法,这个 RUDP 是采用了类似 BBR 基于延迟和丢包来设计的拥塞算法,并且对报文做了拥塞丢弃,示意图如下:

P2P如何将视频直播带宽降低75%?

关于 RUDP 的细节可以参考我的另一篇文章《怎么让不可靠的UDP 可靠?》。至于为什么不采用 RTP 或者 RTMP/TCP 来推流,因为 RTP 虽然是基于 UDP 的,但需要通过 RTCP 和 NACK 来保证可靠性,需要设计拥塞算法,也需要对 RTP 进行改造扩展,而且还受 RTP 协议本身的限制,所以我们并没有直接采用 RTP。使用 RTMP/TCP 来设计是很简单的,但在弱网环境延迟很大,而且容易引起重连,所以在设计之初也否定了。

Server 间的 P2P

因为整个传输分发网络是分布式的,由多个 Edge server 组成,所以基于系统锚点,媒体数据分片到 Edge server 上必须尽快分发到其他 Edge server 上。最早我们是统一用 BGP server 来中转,这样耗费的 BGP 带宽很多,而且 BGP server 一旦异常,整个 Edge server 之间的通信就中断了。其实大部分时间跨运营商的 Edge server 之间延迟也没有想象的那么大,这可以考虑使用 Edge server 之间点对点通信来解决问题,所以我们设计了一个基于 RUDP 无窗口多路径的传输模型来进行 Edge server 之间的通信,如下图:

P2P如何将视频直播带宽降低75%?

上图的通信模型是一个多路径并联通信模型,我们在 RUDP 发送前添加了一个路径路由表,这个路由表记录了各个路径的分发概率,RUDP 每次向接收端发送包时会通过路由表中的概率来选取路径。那么确定路由表概率就是一个非常重要的事情。我们通过 RUDP 实时 ACK 反馈和路径实时 ping 探测来得到网络的状态 (丢包、延迟、抖动),再将网络状态参数输入到逼近函数 f(x) 来确定各条路由的概率,这里有条原则:如果 Edge server 之间直连的延迟和丢包足够小的情况下,直连通信路由的概率将会接近 100%,如果某一条路由出现周期性断开或者延迟超过 200ms,它的概率会接近 0。以下是整个路由概率评估的过程示意图:

P2P如何将视频直播带宽降低75%?

P2P 网络构建过程

媒体流数据通过 Edge server 间的 P2P 多路径传输网络到达各个 Edge server 上,接下来每个 Edge server 需要将流数据分片下发到各个客户节点上,我们针对上麦节点做了传输特殊处理让时延更小,过程和普通的 RTC 通信模型相似,这里就不赘述了。观看节点上分发采用自组织 P2P 网络,既然是通过 P2P 下发的,那么就要在客户节点群构建一个 P2P 网络,这个网络是怎么构建的?具体分为三步:连接、评估、分层

连接

客户节点程序是运行在客户机上的,大部分客户节点都会在路由器或者 NAT 后面,他们之间要相互建立连接,必须穿越彼此的 NAT 和防火墙。虽然现在穿越 NAT 的方法有很多,如 STUN、ICE 等,但穿越连通率始终是一个问题,如果穿越率太低,会让很多优质的节点资源得不到充分利用。在设计穿越方案时我们将直连连通率放在第一位,通过修改 STUN 协议设计了一种基于端口多次猜测和尝试的穿越机制。首先通过类似 STUN 协议判断 NAT 类型、NAT 端口变化规律、NAT 是否有黑名单机制等信息,然后将这些信息存到辖区连接中的 Edge server 中,当有伙伴节点来与它穿越,会交换彼此的这些信息,不同的排列组合会有不同的穿越策略,每一次穿越的过程和结果都会记录到我们的后台数据库,我们会周期性地将这些数据进行分析并调整协商穿越策略。如下图:

P2P如何将视频直播带宽降低75%?

穿越完成后,节点之间就会进行连接握手和身份证书认证(关于为什么要证书后面细讲),建立通信联系和邻居关系。那么邻居关系是怎么动态变化的呢?

邻居关系与评估

邻居问题

连接一旦完成,节点与节点之间就成为邻居,彼此会进行状态交换和心跳,那么问题来了,一个直播系统有成千上万的节点参与,如果都两两相连的话光心跳通信就可以将客户节点的上传带宽占满。我们设计了一个节点 LRU 淘汰链表,链表中保持 40 个联系的邻居节点,老的节点会退出,新的节点会加入,LRU 会根据邻居与自己的通信状态来进行 LRU 新增和淘汰,原则如下:

  • 就近原则,内网优先,同城同一运营商网络次之。
  • 周期性评测延迟和媒体分片命中率,末位淘汰。
  • 当 LRU 列表中节点不足 40 个时会从备用节点列表中选取新的节点进行连接并加入到 LRU 中。

节点评估

每个客户节点的计算能力、通信能力和网络分区等都不一样,这使得我们必须对每个节点做一个评价,对一个节点的评价分为两部分:邻居节点对自己的评价自己对自己的评估。邻居评价主要是:

  • RTT
  • 丢包率
  • 请求命中率

通过这三个参数会对每个邻居计算出一个亲和力分值 score,这个值会用于后面的分发选择。

主要评估自己这几点:

  • CPU、内存
  • 网络类型:WIFI/4G/ 有线网络
  • 上传带宽

节点会周期性计算这两类参数,通过一个网络 QOS 收敛函数 f(x) 来计算节点能力和对邻居 QOS 策略。

节点分层

节点评估最终的目的是让有能力的节点成为超级节点(super node)来分担 Edge server 的分发压力。那么一个节点成为超级节点的条件是什么呢?有以下几个条件:

  • 有足够的上传带宽,4G 和弱 WIFI 下不能成为超级节点。
  • 有空闲的 CPU 和内存,计算能力不够的低端移动设备不能成为超级节点。
  • 对邻居通信友好,不是通信孤岛。
  • 得到 Edge server 的任命,和 Edge server 之间通信顺畅。

超级节点如果性能衰减了怎么办?答案是会退化成普通节点,因为节点评估是周期性实时进行的,如果发现节点性能衰减,Edge server 会让其退化。

既然任命了超级节点,那么超级节点是怎么工作的?每一个超级节点在被任命时都会分配到一个分组 ID,Edge server 会根据自己辖区的超级节点数量进行分组,每个分组由多个超级节点组成,分组内的超级节点负担自己分组的媒体分片分发。例如:有 5 个超级节点分组,这时单位周期内有 1 ~ 20 个 segment,那么第一个分组负责 1、6、11、16 编号的 segment 分发,以此类推第二组负责 2、7、12、17 ……这样做是为了防止单个超级节点失效,增强了 P2P 分发的稳定性。示意图如下:

P2P如何将视频直播带宽降低75%?

P2P 流媒体分发过程

通过上面的 P2P 网络构建过程我们知道整个 P2P 网络其实是一个分层有向图分发网络,那么具体是怎么进行流数据分发的呢?也分三步:先推 (push)、后拉 (pull)、再补偿,下面来仔细解释是怎么实现的。

push

在介绍超级节点时有提到会根据 segment ID 将数据推到对应的超级节点分组群上,超级节点收到这些 segment 后怎么进行处理呢?按照 P2P 设计的原理应该将数据转发到其他分组的超级节点或者普通节点上,但是如果都这样推有可能会造成网络发送冗余而消耗过多的带宽。

为了解决这个问题我们设计了一个预先订阅机制,原理就是每个 P2P 客户节点会根据自己缓冲区最大的 segment ID 来进行预订,提前预订 10 秒以后的媒体数据分片,预订请求要根据节点评估出来的亲和力值 score 做权衡,收到这些请求的超级节点会将预订的分片请求信息保存下来,等到 Edge server 推送这个分片到这个超级节点,它就会无条件转发这些被预订的报文给发起预订的节点,如下图所示:

P2P如何将视频直播带宽降低75%?

从上图中可以看出以下几个原则:

  • 从 Edge server 到所有节点路径最多两层,这样做是为了控制链路延迟。
  • 不同分组 super node 之间会相互订阅对应分组的 segment。
  • 普通 node 只会向 super node 发起订阅。

pull

数据 segment 通过预先订阅的方式进行 push 推送到各个客户节点,但网络是会丢包的,super node 也有可能会中途退出,这样就会造成最终的节点发生丢包,那丢包了我们怎么办?我们设计一个向邻居拉取缺失分片的机制,大致的流程如下:

  1. 节点周期性检查丢失分片的信息和收到分片的信息,构建一个 gossip 协议向邻居交换缓冲区信息。
  2. 节点收到邻居的 gossip 信息,将对方拥有的分片信息记录到本地。
  3. 本地根据记录邻居的分片信息查找自己丢失的分片,通过邻居亲和力值 score 进行权衡随机选取邻居,并向选取的邻居发起 pull 请求。
  4. 收到邻居拉取分片请求,将分片发往请求的节点。

整个步骤会周期性尝试多次拉取,示意图如下:

P2P如何将视频直播带宽降低75%?

这里值得一说的是因为会周期性交换缓冲区的 gossip 信息,这意味着缓冲区的 gossip 信息越小越好,我们设计了一个类似 bloom filter 来描述 gossip 信息,不仅可以减小 gossip 报文的数据大小,而且比对速度也很快。

补偿

因为 P2P 的客户节点是不稳定的,有可能某个 segment 通过拉取多次还是没有收到,这个 segment 又临近播放位置,那么缺失这个 segment 的节点会直接向 Edge server 请求补偿让其尽快传送这个分片,这样做的目的是防止因为 P2P 通信造成丢包的卡顿。这也就是说每个 Edge server 需要拥有所有分片数据,这也就是系统的锚点。流程入下图:

P2P如何将视频直播带宽降低75%?

这个流程大部分情况下没有问题,但如果同一时刻大部分客户节点都缺失某几个 segment 分片,会有大量的补偿请求到 Edge server 上,这会造成网络风暴。我们在应对这个问题时设计了一个稀缺评估和拒绝服务的机制。这个机制是指当单位时间内太多个补偿请求到达 Edge server,那么这个 Edge server 会拒绝自己承受能力之外的请求,只重发承受范围之内的分片。而且这个过程还会对补偿请求做稀缺评估,如果某个分片大部分节点都没有,它会主动将这个分片通过 super node 群再推送一次。

缓冲 buffer 与时延控制

通过上面的三个阶段可以将所有数据 segment 分发到每个客户节点上,但客户节点需要一个缓冲 buffer 来配合这个三个阶段和本地的播放,buffer 如果缓冲时间过长,会引起不必要的延迟,如果过短会造成卡顿和三个阶段不完整。为此我们设计了一个三阶段 buffer 动态缓冲区,如下图所示:

P2P如何将视频直播带宽降低75%?

下边解释一下上图各个区间的意思:

  • push 区间:因为分片是通过不同的 super node 推送过来的,那么必然会造成一定的抖动,所以在 buffer 最开始的头上会有一个 jitter 缓冲阶段,直到第一个邻居节点 gossip 信息中有这个分片 push 位置结束,这个阶段一般持续 100 ~ 300ms。
  • pull 区间:分片时序进入 pull 区间后,会周期性检查丢失的分片,根据 gossip 掌握的邻居进行权衡拉取,会进行 3 次尝试,每一次尝试时间是本地节点与邻居之间的 RTT 值。3 次失败则进入补偿区间。
  • 补偿区间:分片时序进入补偿区间后,也会周期检查丢失的分片,根据丢失的分片 ID 直接向 Edge server 请求拉取,尝试 4 次,每次尝试时间为一个本地节点与 Edge server 之间的 RTT。如果 4 失败则进行 waiting 状态,等待邻居 gossip 或者 Edge server 主动推送。
  • 过期区间:被播放后的分片会放到这个过期区间中而不是立即删除,为什么呢?因为每一个节点的播放时间点不同,有可能本地播放的分片正是其他节点丢失的分片,有可能其他节点会通过 pull 来拉取,所以我们会把播放后的分片放在过期区间 3 秒后再删除。

秒开问题

上面分发的三个阶段和 buffer 控制解决了流持续分发和播放延迟控制问题,但现阶段所有的直播技术必须要有秒开,其实 P2P 分发在解决秒开问题上比单纯的 Server CDN 转发要更加简单。秒开就是用户进入直播间时瞬间能看到主播的视频图像,秒开的宗旨是新进入的客户节点要求服务端边缘节点从视频的上一个 GOP 关键帧开始发送数据,客户节点再根据视频编码器从这个 GOP 关键帧零等待加速播放。我们在 P2P 分发网络中新进入的节点会收到 Edge server 的上一个 GOP 关键帧分片 ID,客户节点根据这个 ID 从各个邻居中快速拉取整个 GOP 分片数据,而不是单纯地让 Edge server 来发,秒开的速度平均缩短了 100 毫秒。

P2P 内容授权

直播分发技术除了传输分发以外,还需要考虑内容防盗和授权,P2P 系统中更加需要考虑系统安全性。我们引入了 CA 证书和双端协商加密方案来保证链路的合法性。大致的做法是每个合法的节点单元(Edge server 和所有的客户节点)会向 CA 发起合法校验,如果检验通过,CA 会根据节点的 ID、节点 RSA 公钥、授权起始时间和授权终止时间等信息利用 CA 的 RSA 进行证书生成。每个拿到证书的节点单元需要和其他的节点进行通信,先交换证书,校验对方证书的合法性,然后利用证书中 RSA 公钥加密算法的 KEY 返回给证书方,证书方收到加密的 KEY 后会用 RSA 私钥解密得到对称加密的 KEY,这样双方就完成了合法性校验并利用这个交换的 KEY 进行报文加解密通信。流程如下图:

P2P如何将视频直播带宽降低75%?

线上数据对比

上面的技术分析只是帮助读者理解这个系统的运作机理,除此以外,当然需要公布一下线上数据来佐证下系统可行性,下图是一个 10W+ 在线直播平台使用了这套 P2P 系统后线上的对比数据。我们在同一个 Edge server 上的同一个直播间对象中,把一半的用户节点关闭 P2P,一半的用户开启 P2P,来观察一天中同一个 Edge server 上这两部分用户群的带宽消耗情况。

P2P如何将视频直播带宽降低75%?

从上图可以看出,P2P 模式带宽消耗只有不开启 P2P 模式的 1/4,我们这个 P2P 系统节省了 75% 的带宽成本。这个数据的视频样本是单路 480P 800kps 码率的直播流,高峰期真实节点数 1000+,最终所有终端的平均延迟是 1.07 秒。

后记

到这里关于 P2P 分发网络的技术解析就结束了,P2P 技术从产生到现在已经经历了 19 年,而且 P2P CDN 也是下一代 CDN 的主体技术,P2P 技术和模型也一直变化改进。我们在直播分发领域使用 UDP 和 P2P 是想从成本和延迟上来解决我们教育场景互动的问题,出发点不一样,也就会得到不一样的结果,如果你遇到成本和延迟的困扰,可以尝试使用这种技术来解决问题。

本文转载自网络,感谢(袁荣喜)的分享,转载仅为分享干货知识,如有侵权欢迎联系云豹科技进行删除处理

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

相关文章

  1. 网页制作练习(JS制作浮动窗口和循环滑动窗口)

    网页制作练习(JS制作浮动窗口和循环滑动窗口) 导语: 作为一个刚学习一个月的新手,希望可以将自己的练习分享给和我一样的小伙伴,互相借鉴,可以在实践中提高自己。将自己学习制作的案例分享给大家,并记录自己的进步,希望可以在学习之后找到心仪的工作。 一.案例制作的主…...

    2024/4/27 23:42:31
  2. Nginx学习之路---反向代理配置实战

    这篇博客以一个例子简单记录以下Nginx中反向代理的配置实战。文章目录实现效果:剖析:准备工作:测试: 实现效果: 打开浏览器,在地址框中输入www.mylinux.cn(域名你自己定),可跳转到Tomcat的页面:剖析: 这里先说明一下,Tomcat是在我虚拟机上的8080端口启动的,Nginx是在虚拟…...

    2024/4/30 16:54:25
  3. 【活动】无极链携Lava出席2020全球区块链算力大会

    -2020年的第246天-文章来源:LAVA(中国)官网:http://lavatech.org/2020全球区块链算力大会8月底,2020全球区块链算力大会,暨新基建矿业峰会在成都举办,大会由成都市新经济委、成都市科技局及成都市成华区人民政府指导,由成都市成华区新经济和科技局 、成都市成华区投促局…...

    2024/4/11 15:55:14
  4. 软件测试基本概念

    黑盒测试功能测试/数据驱动测试模拟用户操作,点点点(外科)只测试产品的功能是否正常使用,不考虑内部的结构,代码,以及逻辑穷举输入测试,把所有可能的输入作为测试,找出错误用于产品确认测试白盒测试结构测试/逻辑驱动测试 模拟程序员,代码检查,输入,输出(内科) 测…...

    2024/4/28 2:53:09
  5. vscode配置go环境

    前提是本地配置好了go环境如果想省事,可以直接下载goland,这个是专门用来写golang的,支持的很完美,传送门https://www.jetbrains.com/go/promo/?gclid=EAIaIQobChMIrY7pxbvB6gIVQteWCh1QLw-YEAAYASAAEgI5UfD_BwE如果你想用vscode撸代码,那么你需要做下面的事情1.打开vsco…...

    2024/4/28 19:17:46
  6. Learning Attention-based Embeddings for Relation Prediction in Knowledge Graphs 阅读笔记

    我的博客链接 0. 导读 0.1 文章是关于什么的?(what?) 知识图谱,图神经网络,关系预测,链接预测,图注意力模型 0.2 要解决什么问题?(why?)基于CNN的嵌入模型独立的处理三元组,导致无法覆盖在三元组周围的本地邻居中固有隐含的复杂和隐藏信息。 随着模型深度的增加,…...

    2024/4/29 14:08:31
  7. 开文第一篇,学习一下如何搭建软件环境~

    做点小记录,记录一下我的学习历程吧~ 这篇是记录我学习如何搭建软件环境。 前期准备 这次的项目是猫宁商城。 所需的软件包有这些: 从上往下依次是: MySQL(数据库) Java Tomcat Navicat 猫宁 因为猫宁是由Java编写的,所以我们要搭建一个能读懂Java语言的环境。 安装Java …...

    2024/4/17 14:26:23
  8. Oracle自带异常列表

    一丶Oracle自带异常列表ACCESS_INTO_NULL 未定义对象 CASE_NOT_FOUND CASE 中若未包含相应的 WHEN ,并且没有设置 ELSE 时 COLLECTION_IS_NULL 集合元素未初始化 CURSER_ALREADY_OPEN 游标已经打…...

    2024/4/30 17:25:17
  9. what is Human-in-the-Loop

    人类智慧与机器学习结合──微软的「Human-in-the-Loop」 | 机器之心 https://www.jiqizhixin.com/articles/2016-10-18-7在微软机器学习和数据科学峰会中,我们宣布了一款与 CrowdFlower 合作提供的令人激动的「human-in-the-loop」的产品。CrowdFlower是一个非常流行的数据扩…...

    2024/4/30 17:48:50
  10. 安全规范考试

    判断题 调用Runtime.exec不可信数据使用前使用断言不能直接将只要使用了业界Java代码中引用空指针敏感对象发送在程序中对zip使用正则对外面由于序列化将对象单选题 变量String uerInput D错误 建议A下列哪个场景下列代码存在什么安全风险下列哪项危害不是 A错误Java的安全管理…...

    2024/4/29 20:25:05
  11. iOS 二维码扫描以及二维码生成

    二维码扫描在开发过程中,我们经常会遇到二维码扫描功能,下面是iOS原生扫描二维码的实现类名:ScanViewController.h 文件#import <UIKit/UIKit.h> #import <AVFoundation/AVFoundation.h>@interface ScanViewController : UIViewController<AVCaptureMetadata…...

    2024/4/27 16:27:07
  12. 狂神docker笔记(纯手敲)

    docker 基础篇 帮助命令 docker version #显示docker的版本信息。 docker info #显示docker的系统信息,包括镜像和容器的数量 docker 命令 --help #帮助命令镜像命令 docker images #查看所有本地主机上的镜像 可以使用docker image ls代替docker search #搜索镜像容…...

    2024/4/25 9:07:07
  13. 47 张图带你 MySQL 进阶!!!详解

    MySQL 存储引擎存储引擎概述数据库最核心的一点就是用来存储数据,数据存储就避免不了和磁盘打交道。那么数据以哪种方式进行存储,如何存储是存储的关键所在。所以存储引擎就相当于是数据存储的发动机,来驱动数据在磁盘层面进行存储。MySQL 的架构可以按照三层模式来理解存储…...

    2024/4/11 15:51:16
  14. 大一新生开学,最好提前给自己准备一台电脑,原因就是以下5点

    很多人觉得大一没必要给孩子买电脑,或许会让孩子沉迷于网络游戏,从而荒废了大学四年的学业,其实这样的认知是比较片面的,是否沉迷于网络游戏还是看孩子的自制力如何?因为就算你不给孩子买电脑,大学周边的网吧很多,如果孩子经不住诱惑,还是会迷失自己的方向。所以是否有…...

    2024/4/14 0:34:05
  15. Scratch 实现一个分词算法

    名词解释分词:按照空格拆分单词涉及知识点循环 条件判断 字符操作难点遇到空格则表明一个完整的词结束 最后一个单词末尾没有空格,需要特殊处理运行效果源码代码包下载:https://mianbaoduo.com/o/bread/mbd-Z5mZk5c=...

    2024/4/11 15:51:15
  16. 渗透测试基础(一)

    1.类型溢出什么是类型 我们就针对JAVA这门语言来讲,JAVA有八大基本数据类型,左边是基本数据类型,右边是对应的引用数据类型 int --> Integer short --> Short long --> Long float --> Float double --> Double byte -- >Byte boolean --> Boolean cha…...

    2024/4/11 15:51:13
  17. 413 Request Entity Too Large

    系统上线一段时间后,用户反应附件无法上传,因为服务器正式环境是采用外挂nas磁盘的方式,所有附件图片文档统一交给了文件服务器运维那边负责,因为本身程序端没有做控制,后来联系nas运维那端,反馈也没有做大小控制,而且直接粘贴上传到服务器磁盘确认是可以的,后来最终确…...

    2024/4/19 8:59:32
  18. Paypal支付集成资料及企业账户申请API签名入口

    一、Paypal企业账户申请API签名最近发现Paypal企业账户申请API签名在账户里面不能直接找到了,联系客服之后给出的API申请入口:http://www.paypal.com/api,登录自己的PayPal账户,就可以到API的界面。二、下面整理下Paypal集成时可能会用到的一些地址。1、PayPal开发者站点:…...

    2024/4/11 15:54:52
  19. 大数据分析方法

    大数据挖掘分析最重要的能力是什么,同学们给出了五花八门的答案。针对《浅析大数据分析技术》、《大数据分析流程是什么》、《大数据分析十八般工具》、《大数据分析12大就业方向》的分析同学们很感兴趣,但是对大数据分析的方法不甚了解。在大数据挖掘分析领域中,数据挖掘分…...

    2024/4/11 15:54:51
  20. 学习HTML5开发RPG游戏第四步>游戏对象设计

    游戏对象主要分为以下几类:1、地图单元2、触发器3、物品4、游戏角色地图单元是组成地图的单元格,地图单元中可以放置触发器,主角行走在单元格上会触发放置的触发器事件。触发器只是一个统称,它具体之后可以是宝箱、传送阵等,可以控制游戏的进度。物品包括装备、药品等游戏…...

    2024/4/27 19:19:26

最新文章

  1. 机器学习 | 准确率、召回率、精准率、特异度傻傻分不清?ROC曲线怎么看?一篇文章帮你搞定

    一、真正类、假负类、假正类与真负类 二、准确率、召回率、精准率、特异度与假正率 1. 准确率 (Accuracy) 准确率表明成功预测&#xff08;预测为负或为正&#xff09;的结果占总样本的百分比。 准确率 &#xff0c; 2. 召回率/查全率/灵敏度/真正率&#xff08;Recall&a…...

    2024/4/30 18:02:46
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 巨控科技新品发布:全方位升级,引领智能控制新纪元

    标签: #巨控科技 #智能控制 #新品发布 #GRM560 #OPC560 #NET400 在智能控制领域&#xff0c;巨控科技始终以其前沿技术和创新产品引领着市场的潮流。近日&#xff0c;巨控科技再次以其行业领先的研发实力&#xff0c;推出了三大系列的新产品&#xff0c;旨在为各行各业提供更…...

    2024/4/30 1:46:55
  4. K8S容器空间不足问题分析和解决

    如上图&#xff0c;今天测试环境的K8S平台出现了一个问题&#xff0c;其中的一个容器报错&#xff1a;Free disk space below threshold. Available: 3223552 bytes (threshold: 10485760B)&#xff0c;意思服务器硬盘空间不够了。这个问题怎么产生的&#xff0c;又怎么解决的呢…...

    2024/4/30 17:15:32
  5. 416. 分割等和子集问题(动态规划)

    题目 题解 class Solution:def canPartition(self, nums: List[int]) -> bool:# badcaseif not nums:return True# 不能被2整除if sum(nums) % 2 ! 0:return False# 状态定义&#xff1a;dp[i][j]表示当背包容量为j&#xff0c;用前i个物品是否正好可以将背包填满&#xff…...

    2024/4/30 9:36:27
  6. 【Java】ExcelWriter自适应宽度工具类(支持中文)

    工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...

    2024/4/30 0:57:52
  7. Spring cloud负载均衡@LoadBalanced LoadBalancerClient

    LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon&#xff0c;直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件&#xff0c;我们讨论Spring负载均衡以Spring Cloud2020之后版本为主&#xff0c;学习Spring Cloud LoadBalance&#xff0c;暂不讨论Ribbon…...

    2024/4/29 18:43:42
  8. TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案

    一、背景需求分析 在工业产业园、化工园或生产制造园区中&#xff0c;周界防范意义重大&#xff0c;对园区的安全起到重要的作用。常规的安防方式是采用人员巡查&#xff0c;人力投入成本大而且效率低。周界一旦被破坏或入侵&#xff0c;会影响园区人员和资产安全&#xff0c;…...

    2024/4/29 19:40:09
  9. VB.net WebBrowser网页元素抓取分析方法

    在用WebBrowser编程实现网页操作自动化时&#xff0c;常要分析网页Html&#xff0c;例如网页在加载数据时&#xff0c;常会显示“系统处理中&#xff0c;请稍候..”&#xff0c;我们需要在数据加载完成后才能继续下一步操作&#xff0c;如何抓取这个信息的网页html元素变化&…...

    2024/4/29 12:15:33
  10. 【Objective-C】Objective-C汇总

    方法定义 参考&#xff1a;https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...

    2024/4/29 21:07:25
  11. 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】

    &#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】&#x1f30f;题目描述&#x1f30f;输入格…...

    2024/4/30 0:57:50
  12. 【ES6.0】- 扩展运算符(...)

    【ES6.0】- 扩展运算符... 文章目录 【ES6.0】- 扩展运算符...一、概述二、拷贝数组对象三、合并操作四、参数传递五、数组去重六、字符串转字符数组七、NodeList转数组八、解构变量九、打印日志十、总结 一、概述 **扩展运算符(...)**允许一个表达式在期望多个参数&#xff0…...

    2024/4/29 21:25:29
  13. 摩根看好的前智能硬件头部品牌双11交易数据极度异常!——是模式创新还是饮鸩止渴?

    文 | 螳螂观察 作者 | 李燃 双11狂欢已落下帷幕&#xff0c;各大品牌纷纷晒出优异的成绩单&#xff0c;摩根士丹利投资的智能硬件头部品牌凯迪仕也不例外。然而有爆料称&#xff0c;在自媒体平台发布霸榜各大榜单喜讯的凯迪仕智能锁&#xff0c;多个平台数据都表现出极度异常…...

    2024/4/30 0:57:49
  14. Go语言常用命令详解(二)

    文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令&#xff0c;这些命令可以帮助您在Go开发中进行编译、测试、运行和…...

    2024/4/30 14:53:47
  15. 用欧拉路径判断图同构推出reverse合法性:1116T4

    http://cplusoj.com/d/senior/p/SS231116D 假设我们要把 a a a 变成 b b b&#xff0c;我们在 a i a_i ai​ 和 a i 1 a_{i1} ai1​ 之间连边&#xff0c; b b b 同理&#xff0c;则 a a a 能变成 b b b 的充要条件是两图 A , B A,B A,B 同构。 必要性显然&#xff0…...

    2024/4/29 3:43:03
  16. 【NGINX--1】基础知识

    1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息&#xff0c;并安装一些有助于配置官方 NGINX 软件包仓库的软件包&#xff1a; apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...

    2024/4/29 7:41:18
  17. Hive默认分割符、存储格式与数据压缩

    目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限&#xff08;ROW FORMAT&#xff09;配置标准HQL为&#xff1a; ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...

    2024/4/29 3:42:59
  18. 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法

    文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中&#xff0c;传感器和控制器产生大量周…...

    2024/4/29 3:42:59
  19. --max-old-space-size=8192报错

    vue项目运行时&#xff0c;如果经常运行慢&#xff0c;崩溃停止服务&#xff0c;报如下错误 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 因为在 Node 中&#xff0c;通过JavaScript使用内存时只能使用部分内存&#xff08;64位系统&…...

    2024/4/30 0:57:46
  20. 基于深度学习的恶意软件检测

    恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞&#xff0c;例如可以被劫持的合法软件&#xff08;例如浏览器或 Web 应用程序插件&#xff09;中的错误。 恶意软件渗透可能会造成灾难性的后果&#xff0c;包括数据被盗、勒索或网…...

    2024/4/30 0:57:46
  21. JS原型对象prototype

    让我简单的为大家介绍一下原型对象prototype吧&#xff01; 使用原型实现方法共享 1.构造函数通过原型分配的函数是所有对象所 共享的。 2.JavaScript 规定&#xff0c;每一个构造函数都有一个 prototype 属性&#xff0c;指向另一个对象&#xff0c;所以我们也称为原型对象…...

    2024/4/29 3:42:58
  22. C++中只能有一个实例的单例类

    C中只能有一个实例的单例类 前面讨论的 President 类很不错&#xff0c;但存在一个缺陷&#xff1a;无法禁止通过实例化多个对象来创建多名总统&#xff1a; President One, Two, Three; 由于复制构造函数是私有的&#xff0c;其中每个对象都是不可复制的&#xff0c;但您的目…...

    2024/4/29 19:56:39
  23. python django 小程序图书借阅源码

    开发工具&#xff1a; PyCharm&#xff0c;mysql5.7&#xff0c;微信开发者工具 技术说明&#xff1a; python django html 小程序 功能介绍&#xff1a; 用户端&#xff1a; 登录注册&#xff08;含授权登录&#xff09; 首页显示搜索图书&#xff0c;轮播图&#xff0…...

    2024/4/29 8:41:59
  24. 电子学会C/C++编程等级考试2022年03月(一级)真题解析

    C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...

    2024/4/29 3:42:56
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57