平罗门户网站建设/上海seo优化外包公司
OSPF高级特性
一、OSPF_提升故障收敛及网络恢复速度
1.FRR与BFD快速恢复故障
1.1 FRR
在传统转发模式下,当到达同一个目的网络存在多条路由时,路由器总是选择最优路由使用,并且下发到FIB表指导数据转发。
当最优路由故障时,需要等待路由收敛完成,重新选路,然后再把优选路由下发到转发表,业务才能恢复。
在这个过程中,业务中断时间较长,不能满 足业务的要求。
为此FRR快速重路由(Fast Reroute)就提供了解决方案:其核心就是找到一个在主用链路故障后的下一跳邻居节点,如果这个邻居节点到目的节点的最短路径不经过源节点,则这个邻居节点为无环备份下一跳。
源节点:源
邻居节点:源节点的相邻节点
目的节点:目的
通俗介绍:
案例:
1、无FRR情况下查看4.4.4.4路由信息,只能看到一个下一跳。
2、如果启用了FRR功能,将会出现BkNextHop备份下一跳,当主下一跳故障之后将立即切换到由FRR计算的备用链路转发数据。
反转:虽然是具备了备用转发路径,但前提是感知到链路故障之后才会进行切换,如果设备无法快速感知到链路故障,那么实际上还是存在丢包过多的情况。
比如下面这种情况可能会造成设备无法快速感知链路故障:
该结果就是,AR1需要等待40秒的超时时间才能感知到与AR2之间的链路存在故障。因此就非常需要另一项技术进行快速的故障感知(BFD)
FRR的配置
OSPF进程中开启frr并使用LFA算法进行计算无环下一跳
ospf 1frrloop-free-alternate
1.2 BFD
BFD(Bidirectional Forwarding Detection,双向转发检测),提供了一个通用的、标准化的、介质无关和协议无关的快速故障检测机制,用于快速检测、监控网络中链路或者IP路由的转发连通状态。
(1)BFD如何实现快速感知故障的呢?
BFD通过静态或动态的方式建立起BFD会话,并在极短的时间内相互发送BFD报文,如果对方在一定时间内没有回复BFD报文,则BFD会话状态将变成Down表示出现故障。
(2)BFD如何与FRR配合解决故障快速收敛?
以OSPF为例,FRR计算出备份下一跳之后,只要当原先链路断开之后才会快速切换至备份下一跳。当设备无法快速感觉到链路发生故障时,只能等待40秒邻居老化之后才会进行切换。
为此使用BFD与邻居自动建立会话实现故障快速检测,实现当链路断开之后的3秒钟BFD会话断开。
因为BFD与OSPF进行联动,故当BFD会话断开之后,其相应的OSPF邻居关系也会同时断开,从而实现链路故障后的快速切换。
(3)如何应用BFD?
全局启用BFD功能之后,通过静态或动态方式建立起BFD会话,然后将其与OSPF、ISIS等路由协议进行联动,实现网络故障后的快速感知。
例子1:OSPF与BFD联动
# 全局开启BFD功能
[Router] bfd# 进程中应用BFD功能
[Router] ospf 1
[Router-ospf-1] bfd all-interfaces enable# 默认BFD发送和接收间隔均为1秒,丢包3次则为故障,即BFD对端故障后3秒将会检测到。
# 若想继续提高检测速度,可将发送和接收间隔缩短至 500毫秒,即1.5秒后检测到故障。
# 发送间隔
[Router-ospf-1] bfd all-interfaces min-tx-interval 500
# 接收间隔
[Router-ospf-1] bfd all-interfaces min-rx-interval 500
例子2:BFD与ISIS联动
[Router] bfd
[Router-bfd] quit[Router] isis
[Router-isis-1] bfd all-interfaces enable
[Router-isis-1] quit
注:详细介绍与案例于后面章节1.1.0 IGP高级特性之BFD 中继续介绍
2.OSPF的智能定时器 加速网络收敛
2.1 RPC
(Partial Route Calculation,部分路由计算)
当网络上“路由”发生变化的时候,只对发生变化的路由进行重新计算,RPC不计算节点路径,而是根据SPF算法算出来的最短路径树来更新路由。
因为只有“路由”变动,即拓扑本身没有变,变的只是最外边的“树叶”。
如下图:不管R5增加了多少个路由,只要没有影响原先计算好的“拓扑”结构,均可新增入网络中。新增之后R5会向其它节点通告新网络接入。
2.2 I-SPF
(Incremental SPF,增量最短路径优先算法)
当网络拓扑改变的时候,只针对受影响的网络节点进行“路由”和“拓扑”计算,而不是全网节点重新进行路由计算。
如下图:当R5节点下接入新节点R6,那么R5将会把R6新接入的信息通告给其它节点,而其它节点只需要把R6节点在原先计算好的拓扑上增加即可。
2.3 智能定时器
在进行SPF计算和产生LSA的时候会使用到的特殊定时器,他控制着SPF的计算,LSA的更新速度和接收速度,从而加快和减缓网络受影响的时间。
如下图:智能定时器的作用
2.4 智能定时器的介绍与设置
(1)设置LSA接收的间隔,间隔内不接收LSA,间隔后再接收:
默认:接收LSA的最长间隔时间为1000毫秒、初始间隔时间为500毫秒、基数间隔时间为500毫秒
lsa-arrival-interval intelligent-timer 最长间隔 初始间隔 基数间隔
(2)设置LSA更新的间隔,间隔内不更新LSA,间隔后再更新:
默认:更新LSA的最长间隔时间为5000毫秒、初始间隔时间为500毫秒、基数间隔时间为1000毫秒
lsa-originate-interval intelligent-timer 最长间隔 初始间隔 基数间隔
(3)设置路由计算的间隔,间隔内不计算LSA,间隔后再计算:
默认:SPF计算的最长间隔时间为10000毫秒、初始间隔时间为500毫秒、基数间隔时间为1000毫秒
spf-schedule-interval intelligent-timer 最长间隔 初始间隔 基数间隔
注解:三个间隔的表示的含义
- 初次更新LSA的间隔时间由初始间隔参数指定。
- 第n(n≥2)次更新LSA的间隔时间为 基数间隔×2^(n-2)。
- 当 基数间隔×2^(n-2) 达到指定的最长间隔时,OSPF连续3次更新LSA的时间间隔都是最长间隔时间之后,再次返回按照初始间隔时间更新LSA,如此反复。
举例:
更新LSA的最长间隔时间为5000毫秒、初始间隔时间为500毫秒、基数间隔时间为1000毫秒。
设备接入OSPF网络建立邻居关系之后(因为邻居建立后才交互LSA等信息),先等待500ms的初始间隔,收集网络中其它节点的LSA信息,500ms结束后才能发送自己的LSA信息。
第1次更新LSA间隔:初始间隔的500ms
第2次更新LSA间隔:1000ms*2^(2-2)
=1000ms*1
,1000ms后才可更新LSA,1000ms内即使有网络变更也不更新。
第3次更新LSA间隔:1000ms*2^(3-2)
=1000ms*1
,2000ms。
第4次更新LSA间隔:1000ms*2^(4-2)
=1000ms*4
,4000ms。
第5,6,7次更新LSA间隔:1000ms*2^(5-2)
=1000ms*8
,但最长间隔为5000ms,故5、6、7次均为5000ms。
第8次更新LSA间隔:由于连续3次更新均为最长间隔,重置到初始间隔的500ms。
有个很核心的问题,这里所说的更新、接收、计算的LSA是什么?
指的就是OSPF的那1、2、3、4、5、7类等LSA
3.延迟收敛
OSPF的收敛时间相对较快,在不计算LSA同步时间下,广播类型接口建立邻居后40秒选举完DR、BDR才会进入邻接关系,而如果是点对点类型接口则会更快建立起邻接关系。
默认情况下,在不计算路由同步时间下,BGP进入Established状态需要32秒。从TCP建立成功后的Active状态到Established这32秒的延迟(重传定时器)是为了确保网络稳定性,避免因快速切换或网络波动而导致的不稳定情况。
故,如果在BGP网络中使用的IGP协议为OSPF,接口类型为点对点,那么就会出现网络故障后又恢复之时,由于OSPF网络优先收敛完成,而BGP未完成路由同步造成数据包丢失。
3.1 图文解释P1
3.2 图文解释P2
3.3 解决方法
为了防止这种情况出现,通过在OSPF上配置命令:
(1)stub-router
启用之后,默认将该路由器传递的路由度量值设为最大(65535),从而控制其它节点路由器避免数据从此路由器转发。
@未选择on-startup参数,则表示该路由器始终保持为Stub设备,即所有来自这个路由器的路由条目Cost值均设为65535。
(2)stub-router on-startup 恢复时间
表示该路由器仅在重启或者主备倒换时保持为Stub设备,恢复时间结束之后才会恢复成正常的设备。
只有当到达了时间之后,才会将链路切换回来,反之,继续保持之前的状态。
从而避免出现BGP路由黑洞的情况。
(3)ISIS中实现相同效果则是用它独有的超载特性,然后加上on-startup命令选项,控制设备恢复时间。
set-overload on-startup 恢复时间
4.GR平滑重启
路由设备采用了控制和转发分离的技术之后(转控分离),在网络拓扑保持稳定的情况下,控制层面的重启并不会影响转发层面,转发层面仍然可以很好地完成数据转发任务,从而保证业务不受影响。
控制层面:接收处理协议信息,如路由表。
转发层面:负责数据报文转发,如转发表。
GR(Graceful Restart 平滑重启)
技术,属于RFC 3623,该技术保证设备在重启过程中转发层面能够继续指导数据的转发,同时控制层面邻居关系以及路由计算等动作不会影响转发层面的功能(重启过程中其它邻居感知不到该设备正在重启)
,从而避免了路由振荡引发的业务中断,提高了整网的可靠性。
4.1 GR的工作原理
GR实现
1、与重启设备建立OSPF邻居的设备均需要具备GR功能,否则在设备重启之后,会与该邻居断开关系造成网络震荡。
2、在GR中重启设备称为GR Restarter、其邻居叫作GR Helper。
3、GR报文即Grace-LSA属于9类LSA,只能在接口网段中泛洪,因此不会在网络中大量泛洪。
4、GR报文用于在开始GR和退出GR时向邻居通告GR的时间、重启原因以及接口地址等内容。
5、其配置命令只有核心的两条:
[OSPF进程中执行]# 使能设备可以生成和处理9类LSA报文
opaque-capability enable# 使能OSPF GR功能
graceful-restart
6、其中关于graceful-restart的默认参数如下:
参数 | 参数说明 | 取值 |
---|---|---|
period period | 指定平滑重启的周期。 | 整数形式,取值范围是1~1800,单位是秒。缺省值是120秒。 |
planned-only | 指定路由器仅支持Planned GR。 缺省情况下,路由器支持Planned GR和Unplanned GR。 | - |
partial | 指定路由器支持Partial GR。 缺省情况下,路由器支持Totally GR。 | - |
GR“主动倒换”工作的过程
1、GR Restarter设备主动进行倒换,倒换前向邻居发送GR(Grace-LSA)
报文通告自己将要重启,请不要删除与我之间的邻居关系。
注意,倒换前发送GR报文的次数不定,依厂商而定,华为手册写的是倒换前只发送一个GR报文。
2、邻居GR Helper 收到GR报文之后,保证GR Restarter重启中邻居关系依旧保留,同时回复LSAck确认收到对方的GR报文。
此时GR Restarter设备是否收到LSAck都无所谓了,只要GR Restarter设备发送的GR报文被GR Helper收到即可。
3、当GR Restarter设备恢复正常之后,再次发送GR报文通知GR Helper,然后开始进行同步LSDB 。
网络类型接口建立邻居时需要经过40秒选举DR/BDR,但由于先前已经通过GR报文同步了部分OSPF信息,故当GR Restarter设备收到GR Helper的Hello报文之后,将马上进入Exstart状态开始同步LSDB。
4、当同步完成之后,通过发送Flush Grace-LSA报文(Age为3600秒的GR LSA)
,GR Restarter设备可以向GR Helper和其他路由器设备发出一个明确的信号,表示自己已经恢复了正常的运行状态。
为啥需要这个FlushGR报文呢,有何用意?
因为自GR Restarter发送GR报文给GR Helper之后,GR Helper们均一直在维持着与GR Restarter的邻居信息,即一直处于GR Helper状态下。所以在设备恢复之后,为了减少设备负担,通过发送Flush GR报文来终止这种关系。
当然也存在一个定时器,GR的持续时间最长为1800秒,当超过这个时间之后,GR的这种关系也会自动断开,之所以为1800是为了避免重新启动路由器的LSA老化(LSA老化时间)。
下图举例与其中某一台OSPF邻居交互GR报文过程:
GR“被动倒换”工作的过程
1、设备因突发故障导致设备需要断电重启。
2、Restarter设备重新启动之后,需要先向所有接口发送多次GR报文(目的224.0.0.5)
华为中重新启动后会连续发送5次GR报文。
在广播网络上,由于重新启动的路由器不知道其先前的DR状态,因此必须将此GR LSA泛洪到所有路由器。
3、至此,手册与RFC就没有下文了。至于是重新建立OSPF邻居还是怎样,不知道咯。
因为在没有发送GR报文给Helper的情况下,突然重启设备,那么邻居状态固然会断开。
重启完成之后,再发送GR报文的意义是什么呢?
关于GR技术的疑惑点
1、GR设备配置完成之后,如何实现所谓的计划重启?
reboot?还是其它专用重启命令?均没有在手册与RFC中出现。
2、GR突发故障后设备重启如何恢复的过程没有明确讲到。
5.NSF/NSR不间断转发/不间断路由
NSF与NSR的区别
NSF(Non-Stopping Forwarding)不间断转发
NSR(Non-Stopping Routing)不间断路由
两者的应用场景
当网络对丢包的要求、对路由收敛的速度的要求都比较低时,可以使用NSF功能。
当网络对丢包的要求、对路由收敛的速度的要求都比较高时,可以使用NSR功能。
两者的优缺点
类型 | NSR | NSF |
---|---|---|
硬件 | NSR需要配置两块主控板。一块做主用主控板,处于工作状态;一块做备用主控板,处于备份状态。当主用主控板重启时,备用主控板成为新的主用主控板。 NSR需要数据转发和控制分离,除主控板之外有专门的接口板用于数据转发。 主控板主要运行控制层的软件,比如动态路由协议;主控板用于学习和维护路由表,并计算出路由转发表FIB(Forwarding Information Base),使用接口板进行数据转发。 接口板负责根据主控板计算出的转发表进行数据的转发。 | 跟NSR的要求相同。 |
软件 | 主用主控板正常运行的过程中,会把配置信息、接口状态信息、协议状态信息备份到备用主控板。当主用主控板因为硬件或者软件失效出现故障时,备用主控板接管失效的主用主控板的工作,重新启动控制层和转发层。 | 跟NSR的要求相同。 |
协议 | 无特殊要求。 | 各相关网络协议,路由协议如OSPF、IS-IS、BGP等,其他协议如LDP、RSVP等做扩展,需要具备GR技术的能力。 |
优点 | NSR无需通知邻居节点路由信息变化,同时也无需邻居节点的协助。 当多个节点的控制层同时故障时,系统运行情况仍在在可控范围内。 当故障恢复时,短时间内即可恢复数据,且在主备切换中,网络拓扑也能够恢复。 | 当系统正常运行时,NSF对系统的负荷较小,系统性能较高。 |
缺点 | 当系统正常运行时,NSR对系统的负荷较大,系统性能相对较低。 系统软件异常时NSR将失效。 | 需要邻居节点同样具备NSF能力,且需要部署在整网中。当多节点的控制层均故障时,NSF将失效。当故障恢复时,需要花费较长时间恢复数据,且网络拓扑的恢复也相对缓慢。网络拓扑的变化或者接口状态的变化,可能导致NSF失效。 |
NSR的工作原理
NSF的实现过程其实就是通过GR功能进行实现。
原理主要包括以下三个过程:
- 批量备份:NSR功能使能后,备板复位重启过程中,主用主控板将路由信息和转发信息批量备份到备用主控板上。
批量备份过程一定是在实时备份过程之前进行,同时NSR还不具备主备倒换能力。
- 实时备份:当批量备份过程结束后,系统进入实时备份阶段。任何在控制平面和转发平面的改变都将实时从主用主控板备份到备用主控板上。
在该阶段,备用主控板能够随时代替主用主控板工作。
- 主备倒换:在已经完成备份的NSR系统主用主控板发生故障时,备用主控板会通过硬件状态感知到主用主控板故障,并成为新的主用主控板。备用主控板成为新主用后,会自动切换接口板的报文上送通道到新主控板。由于倒换时间足够短,路由协议在主备切换的过程中不会和邻居节点断连。
NSF与NSR的命令实现
# NSR能够实现路由处理及转发业务不中断
switchover mode nonstop-routing# NSF能够大幅减少转发业务中断时间
switchover mode nonstop-forwarding# 查看当前系统HA的工作模式
display switchover mode
相关文章:

IGP高级特性简要介绍(OSPF-上篇)
OSPF高级特性 一、OSPF_提升故障收敛及网络恢复速度 1.FRR与BFD快速恢复故障 1.1 FRR 在传统转发模式下,当到达同一个目的网络存在多条路由时,路由器总是选择最优路由使用,并且下发到FIB表指导数据转发。 当最优路由故障时,需…...

Oracle-Ogg集成模式降级为经典模式步骤
前言: Ogg集成模式降级为经典模式的场景比较少,因为降级为经典模式会导致无法支持压缩表同步,XA事务,多线程模式,PDB模式同步等功能,除非遇到集成模式暂时无法解决的bug或者环境不支持集成模式,比如DG备库环…...

链表面试OJ题(1)
今天讲解两道链表OJ题目。 1.链表的中间节点 给你单链表的头结点 head ,请你找出并返回链表的中间结点。 如果有两个中间结点,则返回第二个中间结点。 示例 输入:head [1,2,3,4,5] 输出:[3,4,5] 解释:链表只有一个…...

[极客大挑战 2019]Upload 1
题目环境: 根据题目和环境可知此题目是一道文件上传漏洞 编写一句话木马脚本<?php eval($_POST[shell]);?>将脚本文件更改为jpg图片文件我这里是flag.jpg上传文件并burpsuite抓包Repeater重放 报错一句话木马里面有<?字符 换一种一句话木马继续编写木马…...

OpenFeign讲解+面试题
一:OpenFeign是什么? 是一个声明式的web客户端,只需要创建一个接口,添加注解即可完成微服务之间的调用 二:调用微服务的方式? ribbon restTemplate方式调用openFeign通过接口注解的方式调用 三:如何使用OpenFeign&…...

嬴图 | LLM+Graph:大语言模型与图数据库技术的协同
前言 2022年11月以来,大语言模型席卷全球,在自然语言任务中表现卓越。尽管存在一系列伦理、安全等方面的担心,但各界对该技术的热情和关注并未减弱。 本文不谈智能伦理方面的问题,仅集中于Ulitpa嬴图在应用中的一些探索与实践&a…...

微信小程序下载文件和转发文件给好友总结
这段时间公司让我负责小程序的一些功能开发,回想上次开发小程序还是在上一次,这次开发小程序主要实现的功能就是转发文件给好友和下载文件,总结一下这次遇到的各种问题和解决方法。 下载文件 首先正常下载 wx.downloadFile({url: https://img.haihaina.cn/月度支出表.xls,…...

一文掌握 Apache SkyWalking
Apache SkyWalking SkyWalking是一个开源可观测平台,用于收集、分析、聚合和可视化来自服务和云原生基础设施的数据。SkyWalking 提供了一种简单的方法来保持分布式系统的清晰视图,甚至跨云。它是一种现代APM,专为云原生、基于容器的分布式系…...

外贸网站优化常用流程和一些常识
外贸网站google排名,总以为是单个网页标签的优化过程。 显然,这些观点都是错误的,九凌网络是做谷歌优化服务,九凌网络跟大家分享外贸网站Google优化常用流程和一些常识需要做以下几个步骤: 第一步:网站诊断࿰…...

Hive的时间操作函数
目录 前言函数使用介绍实际使用判断该天是星期几判断该天对应的周(包含一周开始和结束) 前言 hive 里面的时间函数有很多,今天单讲dayofweek函数,背景:有时候不仅要出日报,还要出周报,需要很多…...

【Web安全】CORS跨域资源共享漏洞
文章目录 前言一、漏洞概述二、漏洞原理三、CORS响应头类型四、漏洞挖掘五、修复建议前言 本篇文章主要介绍CORS跨域漏洞产生的原理,漏洞复现过程,挖掘手段以及如何进行修复,文章难免会有失误,烦请留下宝贵建议,谢谢! 一、漏洞概述 跨域资源共享(CORS)是一种浏览器机制…...

IntelliJ IDEA 如何修改默认Maven仓库地址
在使用idea过程中,每次新建项目或者打开项目时,maven仓库地址都会变为默认地址。如何修改默认地址,让其保持不变,如下这种方式可以简单快捷的设置。 1.打开idea,取消项目自动加载 2.点击 Customize,然后再点击 All se…...

Vue3 <script setup>是什么?作用?
结论先行: <script setup> 是 Vue3 的语法糖,简化了组合式 API 的写法,实现了 “顶层的绑定”。例如: ① 声明的属性和方法无需 return,就可以直接在模板使用; ② 引入组件的时候,会自…...

2.9 CSS 响应式布局
1.媒体:media 媒体类型: all:检测所有设备。screen:检测电子屏幕,包括:电脑屏幕、平板屏幕、手机屏幕等。print:检测打印机 媒体特性: width:检测视口宽度。max-width:…...

vue使用websocket与springboot通信
WebSocket是HTML5下一种新的协议,它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯的目的 在很多项目中,都要用到websocket,使得前端页面与后端页进行实时通信,例如,实时查询…...

ChatGPT 实际上是如何工作的?
添加图片注释,不超过 140 字(可选) ChatGPT 操作的两个主要阶段 我们再用谷歌来打个比方。当你要求谷歌查找某些内容时,你可能知道它不会——在你提出要求的那一刻——出去搜索整个网络来寻找答案。相反,谷歌会在其数…...

【SSD1306 OLED屏幕测试程序 (开源)orangepi zero2 全志H616 】.md updata: 23/11/07
orangepi zero2 H616 SSD1306 OLED屏幕测试程序 orangepi zero2 配置wiringpi 库后,突发奇想构建一个测试oled屏幕的程序,放一个蜗牛每次移动一个像素点,实时显示蜗牛的步数,后面要显示其他内容在此代码上修改即可,如…...

【python VS vba】(5) 在python中使用xlwt操作Excel(待完善ing)
目录 1 什么是xlwt 2 导入xlwt 3 相关语法 3.1 创建新的workbook 3.2 创建新的sheet 3.3 保存workbook 4 python里表格的形式 4.1 矩阵 4.2 EXCEL的数据形式 完全等于矩阵的数字结构 4.3 python里矩阵 5 具体代码 5.1 代码 5.2 结果 5.3 要注意的问题 5.3.1 不能…...

【Redis】Redis整合SSMRedis注解式缓存Redis中的缓存穿透、雪崩、击穿的原因以及解决方案(详解)
目录: 目录 一,SSM整合redis 二,redis注解式缓存 三,Redis中的缓存穿透、雪崩、击穿的原因以及解决方案(附图) 一,SSM整合redis 1.原因: 整合SSM和Redis可以提升系统的性能、可…...

Linux文件系统的功能规划
对于运行的进程来说,内存就像一个纸箱子,仅仅是一个暂存数据的地方,而且空间有限。如果我们想要进程结束之后,数据依然能够保存下来,就不能只保存在内存里,而是应该保存在外部存储中。就像图书馆这种地方&a…...

入门 SpringCloudStream 之 RocketMq 实践全集
本文概览: 组件介绍工作流程文本消息自定义信道多主题文本消息自定义信道标签过滤获取头信息定向的异常处理与全局异常处理顺序消息 全局顺序消息局部顺序消息 事务消息 当在选取队列组件的时候,通常要结合实际情况,大数据场景Kafka可能是理…...

论文阅读:Ensemble Knowledge Transfer for Semantic Segmentation
论文地址:https://ieeexplore.ieee.org/document/8354272 项目及数据地址:https://github.com/ishann/aeroscapes 发表时间:2018年5月7日 语义分割网络通常以严格监督的方式学习,即它们在相似的数据分布上进行训练和测试。在域转…...

定义函数(简单介绍)-def
定义 函数使用关键字 def,后跟函数名与括号内的形参列表。 函数语句从下一行开始,并且必须缩进。 # 定义一个函数,不包含任何操作或返回值 通常用于占位或作为将来扩展用 def do_nothing():pass def greet(name):#定义一个打招呼的函数retu…...

Mac VsCode g++编译报错:不支持C++11语法解决
编译运行时报错: [Running] cd “/Users/yiran/Documents/vs_projects/c/” && g 1116.cpp -o 1116 && "/Users/yiran/Documents/vs_projects/c/"1116 1116.cpp:28:22: warning: range-based for loop is a C11 extension [-Wc11-extensi…...

react_12
在异步操作里为状态属性赋值,需要放在 runInAction 里,否则会有警告错误 使用 store,所有使用 store 的组件,为了感知状态数据的变化,需要用 observer 包装,对应着图中 reactions import { Input } from …...

Android Mvp案例解析
目录 后端数据接口数据格式 App客户端布局逻辑主界面布局 M(Model)V(View)P(Presenter)OkhttpRetrofitRxJava网络http请求 Mvp架构-初学者MVP架构的契约者 后端数据接口 接口地址:https://apis.…...

vue的双向绑定的原理,和angular的对比
目录 前言 Vue的双向绑定用法 代码 Vue的双向绑定原理 Angular的双向绑定用法 代码 Angular的双向绑定原理 理解 效率: 虽然Vue和Angular的双向绑定原理不同,但它们都致力于提供高效的数据更新机制。但是,由于Vue使用的是数据劫持,其…...

平衡树相关笔记
引入 二叉查找树 二叉查找树(Binary Search Tree),又名二叉搜索树。满足以下性质: 对于非空的左子树,左子树点权值小于根节点。对于非空的右子树,左子树点权值大于根节点。二叉查找树的左右子树均是二叉…...

ASP.net C# 用Aspose.pdf实现pdf合并
直接上代码,供参考,备忘! using System; using System.Collections.Generic; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; using System.Data.SqlClient; using System.Xml; using System…...

C语言实现原码一位除
具体代码如下,直接运行即可。 #include <stdio.h> int main() {int i, a 0, b 0, c 0, flag 3; // flag相当于指针来指明Q的位置char x[6], y[6];int R[6], Q[6], yb[6], y1[6]; // yb是-y的补码,y1为绝对值yprintf("请输入X(带一位符号位四位数值位…...