STP介绍
目录
STP概述
二层环路带来的问题
1.广播风暴
2.MAC地址漂移问题
3.多帧复制---这个好理解,同一个数据帧被重复收到多次,被称为多帧复制。
802.1D生成树
STP的BPDU
BPDU主要分为两大类
配置BPDU
RPC
COST
配置BPDU的工作过程
TCN BPDU
TCN BPDU的工作原理
STP的角色
STP角色选举
1.根网桥选举
2.根端口选举
3.指定端口选举
4.非指定端口选举
STP的接口状态
接口状态的迁移
STP的收敛时间
首次收敛
结构突变
1.根桥故障
2.直连链路故障
STP基本配置
RSTP
802.1D生成树的缺点
RSTP的改进点改进点
改进点1:端口角色
改进点2:端口状态
改进点3: RST BPDU
改进点4:配置BPDU的处理
改进点5:快速收敛机制
PIA机制详解
改进点6:拓扑变更机制
改进点7:保护功能
MSYP
MSTP概述
MST Region
MSTP的基本配置
STP概述
以太网交换网络中为了进行链路备份,提高网络可靠性,通常会使用冗余链路。但是使用冗余链路会在交换网络上产生环路,引发广播风暴以及MAC地址表不稳定等故障现象,从而导致用户通信质量较差,甚至通信中断。为解决交换网络中的环路问题,提出了生成树协议STP (Spanning Tree Protocol)。
1.随着局域网规模的不断扩大,越来越多的交换机被用来实现主机之间的互连。如图,接入层交换机单链路上联,则存在单链路故障,也就是如果这根上联链路发生故障,交换机下联用户就断网了。另一个问题的单点故障,也就是交换机如果宕机,交换机下联用户也就断网了。
2.为了解决此类问题,交换机在互连时一般都会使用冗余链路来实现备份。冗余链路虽然增强了网络的可靠性但是也会产生环路,而环路会带来一系列的问题,继而导致通信质量下降和通信业务中断等问题。
BCMSN三层架构
三层架构:
接入层:提供端口的密度,用于用户终端的接入—二层交换机、AP
汇聚层(分布层):流量的集合,DHCP/VLAN/STP/HSRP/VRRP/channel…
QOS/ACL
核心层:nat、高速路由转发
冗余—备份 线路、设备、网关、UPS(电源)
二层环路带来的问题
1.广播风暴
(1)根据交换机的转发原则,如果交换机从一个端口上接收到的是一个广播帧,或者是一个目的MAC地址未知的单播帧,则会将这个帧向除源端口之外的所有其他端口转发。如果交换网络中有环路,则这个帧会被无限转发,此时便会形成广播风暴,网络中也会充斥着重复的数据帧。
(2)本例中,SW3收到了一个广播帧将其进行泛洪,SW1和SW2也会将此帧转发到除了接收此帧的其他所有端口,结果此帧又会被再次转发给SW3,这种循环会一直持续,于是便产生了广播风暴。交换机性能会因此急速下降,并会导致业务中断。
2.MAC地址漂移问题
(1)交换机是根据所接收到的数据帧的源地址和接收端口生成MAC地址表项的。
(2)本例中,SW3收到一个广播帧泛洪,SW1从GEO/0/1接口接收到广播帧后学习且泛洪,形成MAC地址5489-98EE-788A与GEO/0/1的映射;SW2收到广播帧后学习且泛洪,SW1再次从GEO/0/2收到源MAC地址为5489-98EE-788A的广播帧并进行学习,5489-98EE-788A会不断地在GEO/0/1与GEO/0/2接口之间来回切换,这被称为MAC地址漂移现象。
3.多帧复制---这个好理解,同一个数据帧被重复收到多次,被称为多帧复制。
为了保证备份链路的存在,并且不会出现二层环路,所以,我们设计了STP协议。
(1)STP通过构造—棵树来消除交换网络中的环路。
(2)运行STP算法,判断网络中存在环路的地方并阻断冗余链路,将环路网络修剪成无环路的树型网络,从而避免了数据帧在环路网络中的增生和无穷循环。
(1)交换机上运行的生成树协议会持续监控网络的拓扑结构,当网络拓扑结构发生变化时,生成树能感知到这些变化,并且自动做出调整。
(如图,交换机上运行STP协议,会通过报文监控网络的拓扑结构,正常情况下是将SW3上的一个接口进行阻塞(Block),从而打破环路,当监控到SW1与SW3之间出现链路故障,则恢复阻塞端口进入转发状态。)
(2)因此,生成树既能解决二层环路问题,也能为网络的冗余性提供一种方案。
生成树协议原理:在二层交换网络中,逻辑的阻塞部分的接口,实现从根交换机到所有节点唯一的路径且为最佳路径,生成一个没有环路的拓扑。当最佳路径出现故障时,个别被阻塞的接口将打开,形成备份链路。
802.1D生成树
生成树是相对比较早的一个协议了,所以,也经历了多种版本的更替。我们现在常见的主要是802.1D生成树(最早期的生成树种类),RSTP(快速生成树协议---定义在802.1W中,也被称为802.1W生成树),MSTP(多生成树协议---定义在802.1S中,也被称为802.1S生成树。)
我们首先需要关注的是最基本的802.1D生成树协议,其他版本都是在802.1D的基础上改进的本质原理相同。
STP的BPDU
所谓BPDU --- Bridge Protocol Data Unit,网桥协议数据单元---其实就是STP生成树需要发送的数据包的叫法。
1.BPDU是STP能够正常工作的根本。BPDU是STP的协议报文。
2.STP交换机之间会交互BPDU报文,这些BPDU报文携带着一些重要信息,正是基于这些信息,STP才能够顺利工作。
BPDU主要分为两大类
1.配置BPDU
2.TCN BPDU
其中,配置BPDU是STP进行拓扑计算的关键;TCN BPDU只在网络拓扑发生变更时才会被触发
配置BPDU
配置BPDU的报文格式
1.配置BPDU是STP进行拓扑计算的关键
2.只有根网桥主动发送配置BPDU,其他非根网桥都只是转发根网桥发送的配置BPDU。
RPC
COST
接口cost是已经激活了STP的接口所维护的一个开销值,该值存在默认值,与接口的速率有关联,并且设备使用不同的算法时,相同的接口速率对应不同的Cost值。
(华为设备默认采用的是802.1t标准;华三设备默认使用的是自定义标准)
配置BPDU的工作过程
所有交换机刚启动,所有接口都激活STP,一开始,并不知道谁是根,则所有设备都将判定自己为根网桥,从字节的所有激活了STP的接口发送配置BPDU,则其中将包含本机参数。之后,所有设备都交换参数后,将根据参数数值进行选举,之后,将选举出一个真正的根网桥。之后,只有根网桥将周期的发送配置BPDU,而其他非根网桥只能在接受到根网桥发送的BPDU后进行转发。(转发时可以修改其中的参数。)--发送周期为2S,MAX AGE --- 20S。
TCN BPDU
TCN BPDU的报文格式
仅拥有配置BPDU的前三个参数,其中BPDU类型字段为Ox80。
TCN BPDU的工作原理
TCN BPDU ---本地交换链路故障后,STP将重新收敛,为了加快刷新交互机的MAC地址表,将向本地所有STP接口发出TCN BPDU,邻居交换机收到TCN BPDU后将回复一个TCA位置1的配置BPDU,用于可靠性传出,之后将TCN BPDU逐级转发到根网桥处,由根网桥下发TC标记位置1的配置BPDU,逐级下发给所有的交换机,所有交换机在收到后将临时的将300S的MAC地址老化时间改为15S。
STP的角色
1.STP中一共存在四种角色
1.根网桥(也叫根桥)--- RB
(1)STP的主要作用之一是在整个交换网络中计算出一棵无环的“树”(STP树)。
(2)根桥是一个STP交换网络中的“树根"。
(3)STP开始工作后,会在交换网络中选举一个根桥,根桥是生成树进行拓扑计算的重要“参考点”,是STP计算得出的无环拓扑的“树根"。
2.根端口--- RP
(1)每台非根网桥有且仅有一个接口将被选择为根端口,用来接受根网桥的BPDU
(2)一个非根桥设备上会有多个端口与网络相连,为了保证从某台非根桥设备到根桥设备的工作路径是最优且唯一的,就必须从该非根桥设备的端口中确定出一个被称为“根端口"的端口,由根端口来作为该非根桥设备与根桥设备之间进行报文交互的端口。
(3)在选举出根桥后,根桥仍然持续发送BPDU,而非根桥将持续不断的收到根桥发送的BPDU。因此,在所有非根桥上选举一个距离根桥"最近"的端口(根端口),在网络收敛后,根端口将不断的收到来自根桥的BPDU。
(4)即:根端口保证了交换机与根桥之间工作路径的唯一性和最优性。
3.指定端口--- DP
(1)每条链路存在一个接口为指定接口,用来发送或者转发根网桥的BPDU
(2)网络中的每个链路与根桥之间的工作路径必须是唯一的且最优的。当一个链路有两条及以上的路径通往根桥时(该链路连接了不同的交换机,或者该链路连接了同一台交换机的不同端口),与该链路相连的交换机(可能不止一台)就必须确定出一个唯一的指定端口。
(3)因此,每个链路(Link)选举一个指定端口,用于向这个链路发送BPDU。
4.非指定端口--- NDP
(1)所有剩余接口,没有任何角色,都属于非指定接口,非指定接口将被阻塞。
STP角色选举
1.根网桥选举
如图:根桥的选举先比较优先级,交换机SW1、2、3的优先级相等,则比较MAC地址,也优选最小的,所以SW1的BID最小,因此sw1为根桥,SW2和SW3为非根桥。
2.根端口选举
选举过程:
1.交换机有多个端口接入网络,各个端口都会收到BPDU报文,报文中会携带"RootID、RPC.BID、PID"等关键字段,端口会针对这些字段进行PK。
⒉.首先比较根路径开销(RPC),STP协议把根路径开销作为确定根端口的重要依据。RPC值越小,越优选,因此交换机会选RPC最小的端口作为根端口。
3.当RPC相同时,比较上行交换机的BID,即比较交换机各个端口收到的BPDU中的BID,值越小,越优选,因此交换机会选上行设备BID最小的端口作为根端口。
4.当上行交换机BID相同时,比较上行交换机的PID,即比较交换机各个端口收到的BPDU中的PID,值越小,越优先,因此交换机会选上行设备PID最小的端口作为根端口。
5.当上行交换机的PID相同时,则比较本地交换机的PID,即比较本端交换机各个端口各自的PID,值越小,越优先,因此交换机会选端口PID最小的端口作为根端口。
3.指定端口选举
指定端口也是通过比较RPC来确定的,选择RPC最小的作为指定端口,如果RPC相同,则比较BID和PID
1.首先比较根路径开销(RPC),值越小,越优选,因此交换机会选RPC最小的端口作为指定端口。
2.若RPC相等,则比较链路两端交换机的BID,值越小,越优选,因此交换机会选BID最小的交换机的端口作为指定端口。
3.若BID相等,则比较链路两端端口的PID,值越小,越优选,因此交换机会选PID最小的交换机的端口作为指定端口。
4.非指定端口选举
1.STP会对这些非指定端口进行逻辑阻塞,即这些端口不能转发由终端计算机产生并发送的帧用户数据帧)。
2.—旦非指定端口被逻辑阻塞后,STP树(无环路工作拓扑)就生成了。
3.注意:非指定端口可以接收并处理BPDU。
STP的接口状态
接口状态的迁移
图中所示为STP的端口状态迁移机制,运行STP协议的设备上端口状态有5种:
1.Forwarding:转发状态。端口既可转发用户流量也可转发BPDU报文,只有根端口或指定端口才能进入Forwarding状态。
2.Learning:学习状态。端口可根据收到的用户流量构建MAC地址表,但不转发用户流量。增加Learning状态是为了防止临时环路。
3.Listening:侦听状态。端口可以转发BPDU报文,但不能转发用户流量。
4.Blocking:阻塞状态。端口仅仅能接收并处理BPDU,不能转发BPDU,也不能转发用户流量。此状态是预备端口的最终状态。
5.Disabled:禁用状态。端口既不处理和转发BPDU报文,也不转发用户流量。
STP的收敛时间
802.1D生成树在收敛时主要是基于计时器收敛的。
首次收敛
首次收敛,所有设备最先进入的是阻塞状态,需要先停留20S(最大寿命时间)之后进入侦听,此状态停留15秒选举角色,之后进入学习状态,再停留15S,总共50S。
结构突变
1.根桥故障
根桥故障
(1)在稳定的STP网络,非根桥会定期收到来自根桥的BPDU报文。
(2)如果根桥发生了故障,停止发送BPDU,下游交换机就无法收到来自根桥的BPDU报文。
(3)如果下游交换机一直收不到BPDU报文,Max Age计时器(缺省:20s)就会超时,从而导致已经收到的BPDU报文失效,此时,非根桥会互相发送配置BPDU,重新选举新的根桥。
端口状态:
(1)SW3的预备端口,20s后会从Blocking状态进入到Listening状态,再进入Learning状态,最终进入到Forwarding状态,进行用户流量的转发。
收敛时间:
(1)根桥故障会导致50s左右的恢复时间,等于Max Age加上2倍的Forward Delay收敛时间。
2.直连链路故障
直连链路故障:
(1)当两台交换机间用两条链路互连时,其中一条是主用链路,另一条为备用链路。
(2)当网络稳定时,交换机SWB检测到根端口的链路发生故障,则其备用端口会进入用户流量转发状态。
端口状态:
(1)备用端口会从Blocking状态,迁移到Listening-Learning-Forwarding状态。
收敛时间:
(1)直连链路故障,备用端口会经过30s后恢复转发状态。
3.非直连链路故障
非直连故障
(1)在稳定的STP网络,非根桥会定期收到来自根桥的BPDU报文。
(2)若SW1与SW2之间的链路发生了某种故障(非物理故障),因此SW2一直收不到来自根桥SW1的BPDU报文,Max Age计时器(缺省:20 s)就会超时,从而导致已经收到的BPDU报文失效。
(3)此时,非根桥SW2会认为根桥失效,并且认为自己是根桥,从而发送自己的配置BPDU给SW3,通知SW3自己是新的根桥。
(4)在此期间,SW3的预备端口一直收不到包含根桥ID的BPDU,Max Age计时器超时后,端口进入到Listening状态,开始向SW2“转发"从上游发来的包含根桥ID的BPDU。
(5)因此,Max Age定时器超时后,SW2和SW3几乎同时收到对方发来的BPDU,再进行STP重新计算,SW2发现SW3发来的BPDU更优,就放弃宣称自己是根桥并重新确定端口角色。
端口状态:
(1)SW3预备端口20s后会从Blocking状态进入到Listening状态,再进入Learning状态,最终进入到Forwarding状态,进行用户流量的转发。
收敛时间:
(1)非直连故障会导致50s左右的恢复时间,等于Max Age加上2倍的Forward Delay收敛时间。
STP基本配置
1.配置生成树工作模式
R是根端口,D是指定端口,A是阻塞端口
RSTP
802.1D生成树的缺点
1.STP协议虽然能够解决环路问题,但是由于网络拓扑收敛慢,影响了用户通信质量。如果网络中的拓扑结构频繁变化,网络也会随之频繁失去连通性,从而导致用户通信频繁中断,这是用户无法忍受的。
2.STP没有细致区分接口状态和接口角色,不利于初学者学习及部署。
3.网络协议的优劣往往取决于协议是否对各种情况加以细致区分。
(1)从用户角度来讲,Listening、Learning和Blocking状态并没有区别,都同样不转发用户流量。
(2)从使用和配置角度来讲,接口之间最本质的区别并不在于接口状态,而是在于接口扮演的角色。
(3)根接口和指定接口可以都处于Listening状态,也可能都处于Forwarding状态。
4.STP算法是被动的算法,依赖定时器等待的方式判断拓扑变化,收敛速度慢。
5.STP算法要求在稳定的拓扑中,根桥主动发出配置BPDU报文,而其他设备进行处理,传遍整个STP网络。这也是导致拓扑收敛慢的主要原因之一。
RSTP的改进点改进点
改进点1:端口角色
通过端口的增补,简化了生成树协议的理解于部署。
1.RSTP的端口角色共有4种:根端口、指定端口、Alternate端口和Backup端口。
2.根端口和指定端口的作用同STP中定义,Alternate端口和Backup端口的描述如下:
(1)从配置BPDU报文发送角度来看:
Alternate端口就是由于学习到其它网桥发送的配置BPDU报文而阻塞的端口。
Backup端口就是由于学习到自己发送的配置BPDU报文而阻塞的端口。
(2)从用户流量角度来看:
Alternate端口提供了从指定桥到根的另一条可切换路径,作为根端口的备份端口。
Backup端口作为指定端口的备份,提供}另一条从根桥到相应网段的备份通路。
3.给一个RSTP域内所有端口分配角色的过程就是整个拓扑收敛的过程。
改进点2:端口状态
RSTP的状态规范缩减为3种,根据端口是否转发用户流量和学习MAC地址来划分:
1.Discarding状态:不转发用户流量也不学习MAC地址;
2.Learning状态:不转发用户流量但是学习MAC地址;。
3.Forwarding状态:既转发用户流量又学习MAC地址。
改进点3: RST BPDU
1.RSTP的配置BPDU充分利用了STP报文中的Flag字段,明确了端口角色。
2.除了保证和STP格式基本一致之外,RSTP作了如下变化:
(1)Type字段:配置BPDU类型不再是0而是2,所以运行STP的设备收到RSTP的配置BPDU时会丢弃。
(2)Flag字段:使用了原来保留的中间6位,这样改变的配置BPDU叫做RST BPDU。
3.RST BPDU报文格式:
4.RST BPDU与STP配置BPDU报文格式不同点,包括:BPDU类型和Flag字段。
(1)BPDU类型,1 Byte,RST BPDU的类型值为Ox02。
(2)标志,1 Byte,包括:
bit 7: TCA,表示拓扑变化确认;
bit 6: Agreement,表示同意,用于P/A机制;.bit 5: Forwarding,表示转发状态;
bit 4: Learning,表示学习状态;
bit 3和bit2:表示端口角色,00表示未知端口,01表示替代或备份端口,10表示根端口,11表示指定端口;
bit 1 : Proposal,表示提议,用于P/A机制;. bit 0:TC,表示拓扑变化。
改进点4:配置BPDU的处理
改进点5:快速收敛机制
边缘接口的UP和Down不会引起拓扑的变动
注意:这个PIA机制是RSTP快速收敛的核心手段,因为他改变了STP依照计时器收敛的方法,可以理解为完成选举后立即切换状态,完成收敛。
1.事实上对于STP,指定端口的选择可以很快完成,主要的速度瓶颈在于:为了避免环路,必须等待足够长的时间,使全网的端口状态全部确定,也就是说必须要等待至少一个ForwardDelay所有端口才能进行转发。
2.而RSTP的主要目的就是消除这个瓶颈,通过阻塞自己的非根端口来保证不会出现环路。而使用P/A机制加快了上游端口进入Forwarding状态的速度。
PIA机制详解
改进点6:拓扑变更机制
1.在STP中,如果拓扑发生了变化,需要先向根桥传递TCN BPDU,再由根桥来通知拓扑变更,泛洪TC置位的配置BPDU。
2.在RSTP中,通过新的拓扑变更机制,TC置位的RST BPDU会快速的在网络中泛洪。·如上图所示:
(1)SW3的根端口收不到从根桥发来的RST BPDU后,Alternate端口会快速切换为新的根端口,启动TC WhileTimer,并清空状态发生变化的端口学习到的MAC地址。然后向外发出TC置位的RST BPDU。
(2)SW2接收到RST BPDU后,会清空接收口以外所有端口学习到的MAC地址,同时开启计时器,并向外发送TC置位的RST BPDU。
2.最终,RST BPDU会在全网泛洪。
改进点7:保护功能
BPDU保护
根保护
环路保护
MSYP
1.RSTP在STP基础上进行了改进,实现了网络拓扑快速收敛。但在划分VLAN的网络中运行RSTP/STP,局域网内所有的VLAN共享一棵生成树,被阻塞后的链路将不承载任何流量,无法在VLAN间实现数据流量的负载均衡,导致链路带宽利用率、设备资源利用率较低
2.为了弥补RSTP/STP的缺陷,IEEE于2002年发布的802.1S标准定义了MSTP ( MultipleSpanning Tree Protocol,多生成树协议)。MSTP兼容STP和RSTP,通过建立多棵无环路的树,解决广播风暴并实现冗余备份。
MSTP概述
1.MSTP是IEEE 802.1S中定义的生成树协议,MSTP兼容STP和RSTP,既可以快速收敛,又提供了数据转发的多个冗余路径,在数据转发过程中实现VLAN数据的负载均衡。
2.MSTP可以将一个或多个VLAN映射到一个Instance (实例),再基于Instance计算生成树,映射到同一个lnstance的VLAN共享同一棵生成树。
3.如图中例子,经计算,最终生成两棵生成树:
(1)lnstance1对应的生成树以SW1为根交换设备,转发VLAN1~VLAN10的报文。
(2)lnstance2对应的生成树以SW2为根交换设备,转发VLAN11~VLAN20的报文。
(3)不同VLAN的报文沿不同的路径转发,实现了负载分担。
注意:生成树不是基于VLAN运行的,而是基于Instance运行的
MST Region
1.同一个MST域的设备具有下列特点:
(1)都启动了MSTP。
(2)具有相同的域名。
(3)具有相同的VLAN到生成树实例映射配置。
(4)具有相同的MSTP修订级别配置。
2.Instance0是缺省存在的,而且缺省时,华为交换机上所有的VLAN都映射到了Instance0。
3.通过设置VLAN映射表(即VLAN和MSTI的对应关系表),把VLAN和MSTIl联系起来。
(1)每个VLAN只能对应一个MSTI,即同一VLAN的数据只能在一个MSTI中传输,而一个MSTI可能对应多个VLAN
MSTP的基本配置
[r1]stp mode mstp
默认存在组0,且所有vlan默认处于该组;优先级= 32768+0
分组
[sw1]stp enable
[sw1]stp region-configuration
[sw1-mst-region]region-name a 所有设备应在一个组内
[sw1-mst-region]instance 1 vlan 1 to 5
[sw1-mst-region]instance 2 vlan 6 to 10
[sw1-mst-region]active region-configuration 激活当前配置(必须配置该指令)
切记:若将创建某个组,但该组内的vlan,在本交换机上没有创建,同时没有为该vlan服务的接口;该组将没有任何信息;整个交换网络中所有设备的分组信息必须完全一致;
定义本地为组1 的主根,组2 的备份根
stp instance 1 root primary 优先级修改为0
stp instance 2 root secondary 优先级修改为4096
相关文章:
STP介绍
目录 STP概述 二层环路带来的问题 1.广播风暴 2.MAC地址漂移问题 3.多帧复制---这个好理解,同一个数据帧被重复收到多次,被称为多帧复制。 802.1D生成树 STP的BPDU BPDU主要分为两大类 配置BPDU RPC COST 配置BPDU的工作过程 TCN BPDU TCN…...
numpy 和 tensorflow 中的各种乘法(点乘和矩阵乘)
嗨喽,大家好呀~这里是爱看美女的茜茜呐 👇 👇 👇 更多精彩机密、教程,尽在下方,赶紧点击了解吧~ python源码、视频教程、插件安装教程、资料我都准备好了,直接在文末名片自取就可 点乘和矩阵乘…...
(图论) 1020. 飞地的数量 ——【Leetcode每日一题】
❓ 1020. 飞地的数量 难度:中等 给你一个大小为 m x n 的二进制矩阵 grid ,其中 0 表示一个 海洋单元格、1 表示一个 陆地单元格。 一次 移动 是指从一个陆地单元格走到另一个相邻(上、下、左、右)的陆地单元格或跨过 grid 的边…...
c++ 重载、重写、覆盖
重载:指在同一作用域内,有多个同名但参数不同的函数的现象,叫重载;可以是任何用户定义的函数,例如 类成员函数、类静态函数、普通函数重写:子类重写父类的同名函数,只要子类出现有父类的同名函数…...
Python异步编程高并发执行爬虫采集,用回调函数解析响应
一、问题:当发送API请求,读写数据库任务较重时,程序运行效率急剧下降。 异步技术是Python编程中对提升性能非常重要的一项技术。在实际应用,经常面临对外发送网络请求,调用外部接口,或者不断更新数据库或文…...
SpriteKit与Swift配合:打造您的第一个简易RPG游戏的步骤指南
1. 简介: RPG(Role-Playing Game)游戏是一种角色扮演游戏,它允许玩家在一个虚拟的游戏世界中扮演一个或多个角色。在本教程中,我们将使用Apple的2D游戏框架SpriteKit和Swift编程语言来创建一个简单的RPG游戏。我们将从…...
服务网格的面临挑战:探讨服务网格实施中可能遇到的问题和解决方案
🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…...
leetcode61 旋转链表
题目 给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。 示例 输入:head [1,2,3,4,5], k 2 输出:[4,5,1,2,3] 解析 这道题属实不好想:需要计算出链表的长度,然后在k > n的…...
【学习笔记】各类基于决策单调性的dp优化
文章目录 对于决策单调性的一般解释关于决策单调性的证明四边形不等式一维dp区间dp一种二维dp一些满足四边形不等式的函数类 与图形相结合 决策单调性的常见优化手段二分队列二分栈分治类莫队做法 SMAWKWQS二分WQS多解情况满足四边形不等式的序列划分问题的答案凸性以及WQS二分…...
【C++】构造函数初始化列表 ⑤ ( 匿名对象 生命周期 | 构造函数 中 不能调用 构造函数 )
文章目录 一、匿名对象 生命周期1、匿名对象 生命周期 说明2、代码示例 - 匿名对象 生命周期 二、构造函数 中调用 构造函数1、构造函数 中 不能调用 构造函数2、代码示例 - 构造函数中调用构造函数 构造函数初始化列表 总结 : 初始化列表 可以 为 类的 成员变量 提供初始值 ;…...
Knife4j系列--使用方法
原文网址:Knife4j系列--使用/教程/实例/配置_IT利刃出鞘的博客-CSDN博客...
pmp项目管理考试是什么?适合哪些人学?
PMP,简单点说,就是美国PMI为考察项目管理人士的专业能力而设立的考试。 该流程以知识和任务驱动型指南评估从业者的能力,同时确定项目经理能力行业标准,包括各项知识、任务和技能的特点、重要性与运用频率。(考纲原文…...
CSDN博客可以添加联系方式了
csdn博客一直不允许留一些联系方式,结果是官方有联系方式路径 在首页,往下拉,左侧就有 点击这个即可添加好友了~ 美滋滋,一起交流, 学习技术 ~...
小程序隐私弹窗的实现
小程序的开发者对于微信官方来说是有爱有恨,三天二头整事是鹅厂的一贯风格。 隐私弹窗的几个要点 回归正题,小程序隐私弹窗的几个要点: 1、何时弹出用户隐私协议的弹窗? 2、是每次进小程序都弹出来吗? 这两个想明…...
【JavaEE】多线程案例-单例模式
文章目录 1. 前言2. 什么是单例模式3. 如何实现单例模式3.1 饿汉模式3.2 懒汉模式4. 解决单例模式中遇到的线程安全问题4.1 加锁4.2 加上一个判断解决频繁加锁问题4.2 解决因指令重排序造成的线程不安全问题 1. 前言 单例模式是我们面试中最常考到的设计模式。什么是设计模式呢…...
社区分享|MeterSphere变身“啄木鸟”,助力云帐房落地接口自动化测试
云帐房网络科技有限公司(以下简称为“云帐房”)成立于2015年3月,以“成为最值得信赖的税务智能公司”为愿景,运用人工智能、大数据等互联网技术,结合深厚的财税行业服务经验,为代账公司和中大型企业提供智能…...
fpga内嵌逻辑分析仪使用方法
文章目录 前言一、方法1 — 使用 IP 核创建 ILA 调试环境1、创建 ILA ip 核2、进行例化3、生成比特流文件4、下载程序5、进行在线调试 二、方法2 — 使用 Debug 标记创建 ILA1、Debug 标记相关信号2、综合操作3、设置 Set Up Debug4、生成比特文件5、下载程序6、进行在线调试 前…...
第14章 结构和其他数据形式
本章介绍以下内容: 关键字:struct、union、typedef 运算符:.、-> 什么是C结构,如何创建结构模板和结构变量 如何访问结构的成员,如何编写处理结构的函数 联合和指向函数的指针 设计程序时,最重要的步骤之…...
vue 把echarts封装成一个方法 并且从后端读取数据 +转换数据格式 =动态echarts 联动echarts表
1.把echarts 在 methods 封装成一个方法mounted 在中调用 折线图 和柱状图 mounted调用下边两个方法 mounted(){//最早获取DOM元素的生命周期函数 挂载完毕console.log(mounted-id , document.getElementById(charts))this.line()this.pie()},methods里边的方法 line() {// …...
Python基础08 面向对象的基本概念
Python使用类(class)和对象(object),进行面向对象(object-oriented programming,简称OOP)的编程。 面向对象的最主要目的是提高程序的重复使用性。我们这么早切入面向对象编程的原因是,Python的整个概念是基于对象的。…...
APP自动化之Poco框架
今天给大家介绍一款自动化测试框架Poco,其脚本写法非常简洁、高效,其元素定位器效率更快,其本质基于python的第三方库,调试起来也会非常方便,能够很好的提升自动化测试效率,节省时间。 (一)背景…...
c++拷贝构造【显式调用】和运算符=重载构造【隐式调用】解析
深拷贝 vs. 浅拷贝 深拷贝:开辟新内存,独立对象,堆区浅拷贝:共享内存,引用对象,栈区 深拷贝:深拷贝是一种拷贝方式,它会在堆区重新分配内存并复制对象的内容。 这意味着原对象和新…...
无涯教程-JavaScript - LCM函数
描述 LCM函数返回整数的最小公倍数。最小公倍数是最小的正整数,它是所有整数参数number1,number2等的倍数。使用LCM添加具有不同分母的分数。 语法 LCM (number1, [number2] ...)争论 Argument描述Required/OptionalNumber1, number2... 您想要最小公倍数的1到255个值。 如…...
Java多线程篇(3)——线程池
文章目录 线程池ThreadPoolExecutor源码分析1、如何提交任务2、如何执行任务3、如何停止过期的非核心线程4、如何使用拒绝策略 ScheduledThreadPoolExecutor源码分析 线程池 快速过一遍基础知识 7大参数 corePoolSize : 核心线程数 maximumPoolSize: 最…...
那些年我们遇到过的关于excel的操作
本文为直接从百度上搜索的关于excel的函数使用,方便以后用,希望会持续补充 excel中筛选出两列重复的数据【场景:A、B两列数据个数不同且无序,想找出A列中的数据在B列中不存在的,通过比较后单元格为空的代表该行不存在的…...
Angular变更检测机制
前段时间遇到这样一个 bug,通过一个 click 事件跳转到一个新页面,新页面迟迟不加载; 经过多次测试发现,将鼠标移入某个 tab ,页面就加载出来了。 举个例子,页面内容无法加载,但是将鼠标移入下图…...
Redis之String类型
文章目录 Redis之String类型1. 赋值/获取值2. 同时设置/获取多个键值3. 数值增减4. 获取字符串长度5. 向尾部追加值6. 分布式锁7.应用场景 Redis之String类型 Redis命令不区分大小写 1. 赋值/获取值 赋值:set key value 取值:get key (当键不存在时候&…...
使用redis中的zset实现滑动窗口限流
使用redis和zset实现滑动窗口限流 文章目录 使用redis和zset实现滑动窗口限流Zset**初始化一个ZSet**:其中包含所有用户的ID和时间戳。**添加元素到ZSet**:当用户发起请求时,将当前时间戳和用户ID作为元素添加到ZSet中。**删除过期的元素**&a…...
Linux下C语言使用 netlink sockets与内核模块通信
netlink简介 Netlink套接字是用以实现用户进程与内核进程通信的一种特殊的进程间通信(IPC) ,也是网络应用程序与内核通信的最常用的接口。在Linux标准内核中,系统默认集成了很多netlink实例,比如日志上报、路由系统等,netlink消息是双向的&a…...
excel中的引用与查找函数篇3
1、INDEX(array,row_num,[col_num]):获取指定范围中指定行号和列号对应的数据 index(查询范围,行号,列号) 行号和列号是相对选中查询范围来写的:分别把第二行第三列的数据和第四行第二列的数据查找出来。 数据是单行或单列,后面只需要给一个参…...
青岛西海岸新区城市建设局网站/b2b免费发布信息网站
第一篇:计算机技术与通信技术融合探析摘要:随着计算机技术和通信技术不断进步,在网络技术强大基础支撑下,计算机技术与通信技术已经开始实现融合,并将成为未来社会强大物质技术基础。从社会要求来看,计算机…...
免费的x网站域名/最近有新病毒出现吗
MySQL数据库、Qt数据库、MySQLworkbench1、Qt中的数据库编程:1、在Qt中,所有和数据库编程相关的类都归在命名空间QSql中,这些类主要包含:QSqlDriver(数据库驱动)、QSqlDatabase(数据库)、QSqlQuery(数据库在线操作)2、QSqlDriver(…...
视频添加到wordpress/东莞推广平台有哪些
2019独角兽企业重金招聘Python工程师标准>>> 一般启动Tomcat时,都会用到的命令 nohup ./start.sh & nohup 命令 用途:退出终端后不挂断运行的命令,原程序的的标准输出被自动改向到当前目录下的nohup.out文件 & 的意思是直…...
如何选择wordpress主机/强强seo博客
2019独角兽企业重金招聘Python工程师标准>>> 什么是Shell脚本? Shell脚本(英语Shellscript)是一种电脑程序与文本文件内容由一连串的shell命令组成经由UnixShell直译其内容后运作被当成是一种脚本语言来设计其运作方式与直译语言相…...
四川通信建设工程有限公司网站/百度的广告推广需要多少费用
今天做了一个图表页面,效果图如下: 上图红框中的部分,是指的table表格中,鼠标移入某行后,出现的背景颜色。默认的背景颜色是一种灰色。 鼠标移入后的行背景颜色修改 通过css即可实现: .el-table--enabl…...
如何做凡客网站/口碑营销策略有哪些
在之前我们只用过父传子,子传父进行传数据,这时候当组件嵌套比较深或比较复杂的情况,这时候就用到了事件总线 (EventBus) 如何理解事件总线呢,你可以理解为用来传输数据的一条线 注意点:有组件发布事件后 剩余的所有…...