【路由交换方向IE认证】BGP选路原则之Local Preference属性
文章目录
- 一、路由器BGP路由的处理过程
- 控制平面和转发平面
- 选路工具
- 二、BGP的选路顺序
- 选路的前提
- 选路顺序
- 三、Local Preference属性选路原则
- Local Preference选路方法
- Local Preference选路时的方向、方式设置
- 直接更改Local Preference值
- 使用route-map更改Local Preference值
- 四、BGP邻居建立配置
一、路由器BGP路由的处理过程
路由器对BGP路由的处理过程,简单来说就是BGP中的选路过程
控制平面和转发平面
一、控制平面 :是从起点到目的地所使用的IGP,BGP等路由协议从而控制产生路由表,VPNV4路由表,标签转发表等,由这些表去控制我们的FIB表,也就是数据转发表
二、转发平面 :也叫做数据平面,根据刚刚产生的路由表,VPNV4路由表,标签转发表从而产生一个数据转发表(FIB表)去进行数据的从起点到目的地的转发,
如图1-1,
选路工具
在 BGP 选路中有两个重要的概念:
一、策略机 : 相当于route-map,能够对属性值进行修改,影响路由表的生成(在控制平面上:是一个过程),从而影响用户的数据转发
①输入策略机:路由进入本地时的route-map,我们可以理解为 in 方向,会影响自身和下游的路由器
②输出策略机:路由离开本地时的route-map,我们可以理解为 out 方向,只会影响下游的路由器,不会影响自身
二、路由决策 : 根据刚刚的策略机(route-map)选择出最佳的路径,并且将最佳的路径添加到路由表中,简单来说就是去哪里,哪条路比较方便或近
如图1-2,就是BGP路由的处理过程
二、BGP的选路顺序
选路的场景主要面对同一个目的网络存在多种去的方式
如图2-1,对于R3来说,去往192.168.10.0/24有去往R1或R2两条路可以选
选路的前提
我们选路的前提是路由的下一跳可达,如果说路由的下一跳不可达的话,那么选路将不具有任何意义
选路顺序
-
我们之前学过的那么多个BGP属性都是能够应用到BGP路由的选路当中的,但是也是存在依照属性进行选路的顺序的,并且如果较为前的属性已经选出最佳路径,那么后面的属性将不会影响到属性
-
例如:路由器已经依照Local Preference选出了最佳的路径,而MED值无论在怎么进行修改都是无济于事的
选路顺序如下
- 优选Weight值较高的;
- 优选Local Preference值较高的;
- 优选AS-Path长度较短的;
- 按照Origin属性为IGP、EGP、Incomplete类型的路由进行选路;(IGP > EGP > Incomplete)
- 优选MED值较小的路由
- 按照EBGP路由,接着是联盟EBGP路由,最后是IBGP路由的顺序
- 优越最近的IGP邻居通告的路由
- 执行等价负载均衡(默认是没有开启等价负载均衡的)
- 优选BGP Router-ID 小的 Peer 通告的路由
- 优选Cluster-list长度较短的路由
- 优选较小的 Peer 地址路由器通告的路由
这么多一串顺序我们将会逐一进行讲解,本文章所分享的是排位第二个的属性,Local Preference属性
讲解Weight属性的文章:【路由交换方向IE认证】BGP选路原则之Weight属性-CSDN博客
三、Local Preference属性选路原则
Local Preference选路方法
1、Loca Preference属性选路的原则为,Local Preference值越大越优先,默认值为100,并且只在IBGP Peer中进行传递
2、当EBGP Peer收到了来自其它 AS 的路由中携带LP属性,则会出发Notifaction报文,即错误通告,最终造成 BGP Peer的会话中断
如图3-1,位于AS 100的R1收到位于AS 200的R2携带Local Preference属性的路由时,R1将会触发Notifaction报文,并且 BGP 的会话也会断开
Local Preference选路时的方向、方式设置
由于Local Preference属性仅在本地 AS 中可以传递的,所以在哪里设置LP值,拥有很多种选择性
将AS 200设置为本公司,如图3-2,拥有三种的方向可以进行设置
- EBGP Peer 的 in 方向
- IBGP 的 in/out 方向
除此之外,我们在配置 route-map 的位置也有多种可能性
- 重分布的时候使用route-map
- IBGP 的 in/out 方向 route-map
- EBGP 的 in 方向上使用 route-map
直接更改Local Preference值
我们可以直接对IBGP Peer的发送固定的LP值,以达到选路的目的
如图3-3,我们将R3发送出去的路由所有的LP值全部都修改为150,使得R4去往1.1.1.1和1.1.2.1都是走R3这条路
在R3上进行配置
R3(config)#router bgp 200
R3(config-router)#bgp default local-preference 150
R3(config-router)#ex
由于BGP更新的时间比较慢,所以要想在R4上看到我们配置的效果,还需要额外地在R4上配置一条命令,进行软刷新的触发
R4>en
R4#clear ip bgp * soft
Reset ALL BGP peers! [yes/no]:yes
R4#show ip bgp
如图3-4,对于R4,1.1.1.1和1.1.2.1下一跳为3.3.3.3的路由LP值都从原来的100修改到了现在的150
并且选路的结果也发生了变化,全部都走3.3.3.3这条路径了,说明我们的配置是成功的
使用route-map更改Local Preference值
由于使用 route-map 的灵活性很大,拥有多种设置的方式和位置,我们以两个案例为主
如图3-5,我们需要控制AS 200出(去AS 100)的路由,可以选择分别是在R2上对R4发出的1.1.2.1这条路由的LP值修改为150,和在R3上对R4发出的1.1.1.1这条路由的LP值修改为150
根据Local Preference属性越大越优先的原则,R4去往1.1.1.1将会走R3这条路,去往1.1.2.1将会走R2这条路
如图3-6,由于选路的本质是属性值的修改,所以我们只要合理地设置属性值的参数,就能达到只更改一台设备,从而实现Local Preference属性的选路
在R3上
R3#en
R3#conf
Enter configuration commands, one per line. End with CNTL/Z.
R3(config)#access-li 10 per 1.1.1.1 0.0.0.0
R3(config)#access-li 20 per 1.1.2.1 0.0.0.0
R3(config)#route-map LP per 10
R3(config-route-map)#mat ip add 10
R3(config-route-map)#set local-pre 150
R3(config-route-map)#ex
R3(config)#route-map LP per 20
R3(config-route-map)#mat ip add 20
R3(config-route-map)#set local-pre 50
R3(config-route-map)#ex
R3(config)#route-map LP per 30
R3(config-route-map)#ex
R3(config)#router bgp 200
R3(config-router)#nei 4.4.4.4 route-map LP out
R3(config-router)#ex
在R4上对BGP路由进行软刷新
R4#en
R4#clear ip bgp * soft
Reset ALL BGP peers! [yes/no]:yes
R4#
如图3-7,在R4上使用show ip bgp 也可以看到路由表上的LocPrf已经发生了变化,并且选路也根据LP属性的原则越大越优先,从而进行了我们的想要的选路
四、BGP邻居建立配置
附上配置过程
R1
Router(config)#hos R1
R1(config)#int g0/0
R1(config-if-GigabitEthernet 0/0)#ip add 12.1.1.1 24
R1(config-if-GigabitEthernet 0/0)#ex
R1(config)#int g0/1
R1(config-if-GigabitEthernet 0/1)#ip add 12.1.2.1 24
R1(config-if-GigabitEthernet 0/1)#ex
R1(config)#int lo0
R1(config-if-Loopback 0)#ip add 1.1.1.1 32
R1(config-if-Loopback 0)#ex
R1(config)#int lo1
R1(config-if-Loopback 1)#ip add 1.1.2.1 32
R1(config-if-Loopback 1)#ip add 1.1.2.1 32
R1(config-if-Loopback 1)#ex
R1(config)#router bgp 100
R1(config-router)#bgp router-id 1.1.1.1
R1(config-router)#nei 12.1.1.2 remote-as 200
R1(config-router)#nei 12.1.2.3 remote-as 200
R1(config-router)#netw 1.1.1.1 mask 255.255.255.255
R1(config-router)#netw 1.1.2.1 mask 255.255.255.255
R1(config-router)#ex
R2
R2>en
R2#conf
R2(config)#hos R2
R2(config)#int g0/0
R2(config-if-GigabitEthernet 0/0)#ip add 12.1.1.2 24
R2(config-if-GigabitEthernet 0/0)#ex
R2(config)#int g0/1
R2(config-if-GigabitEthernet 0/1)#ip add 12.1.3.2 24
R2(config-if-GigabitEthernet 0/1)#ex
R2(config)#int lo0
R2(config-if-Loopback 0)#ip add 2.2.2.2 32
R2(config-if-Loopback 0)#ex
R2(config)#router ospf 10
R2(config-router)#rou 2.2.2.2
Change router-id and update OSPF process! [yes/no]:yes
R2(config-router)#netw 2.2.2.2 0.0.0.0 area 0
R2(config-router)#netw 12.1.3.0 0.0.0.255 area 0
R2(config-router)#ex
R2(config)#router bgp 200
R2(config-router)#bgp router-id 2.2.2.2
R2(config-router)#nei 12.1.1.1 remote-as 100
R2(config-router)#nei 4.4.4.4 remote-as 200
R2(config-router)#nei 4.4.4.4 update-sou lo0
R2(config-router)#nei 4.4.4.4 next-hop-self
R2(config-router)#ex
R3
Router>en
Router#conf
Router(config)#hos R3
R3(config)#int g0/0
R3(config-if-GigabitEthernet 0/0)#ip add 12.1.2.3 24
R3(config-if-GigabitEthernet 0/0)#ex
R3(config)#int g0/1
R3(config-if-GigabitEthernet 0/1)#ip add 12.1.4.3 24
R3(config-if-GigabitEthernet 0/1)#ex
R3(config)#int lo0
R3(config-if-Loopback 0)#ip add 3.3.3.3 32
R3(config-if-Loopback 0)#ex
R3(config)#router ospf 10
R3(config-router)#rou 3.3.3.3
Change router-id and update OSPF process! [yes/no]:yes
R3(config-router)#netw 3.3.3.3 0.0.0.0 area 0
R3(config-router)#netw 12.1.4.0 0.0.0.255 area 0
R3(config-router)#ex
R3(config)#router bgp 200
R3(config-router)#bgp router-id 3.3.3.3
R3(config-router)#nei 12.1.2.1 remote-as 100
R3(config-router)#nei 4.4.4.4 remote-as 200
R3(config-router)#nei 4.4.4.4 update-sou lo0
R3(config-router)#nei 4.4.4.4 next-hop-self
R3(config-router)#ex
R4
R4>en
R4#conf
R4(config)#hos R4
R4(config)#int g0/0
R4(config-if-GigabitEthernet 0/0)#ip add 12.1.3.4 24
R4(config-if-GigabitEthernet 0/0)#ex
R4(config)#int g0/1
R4(config-if-GigabitEthernet 0/1)#ip add 12.1.4.4 24
R4(config-if-GigabitEthernet 0/1)#ex
R4(config)#int lo0
R4(config-if-Loopback 0)#ip add 4.4.4.4 32
R4(config-if-Loopback 0)#ex
R4(config)#int lo1
R4(config-if-Loopback 1)#ip add 4.4.3.4 32
R4(config-if-Loopback 1)#ex
R4(config)#router ospf 10
R4(config-router)#rou 4.4.4.4
Change router-id and update OSPF process! [yes/no]:yes
R4(config-router)#netw 4.4.4.4 0.0.0.0 area 0
R4(config-router)#netw 12.1.3.0 0.0.0.255 area 0
R4(config-router)#netw 12.1.4.0 0.0.0.255 area 0
R4(config-router)#ex
R4(config)#router bgp 200
R4(config-router)#nei 2.2.2.2 remote-as 200
R4(config-router)#nei 2.2.2.2 update-sou lo0
R4(config-router)#nei 3.3.3.3 remote-as 200
R4(config-router)#nei 3.3.3.3 update-sou lo0
R4(config-router)#netw 4.4.4.4 mask 255.255.255.255
R4(config-router)#net 4.4.3.4 mask 255.255.255.255
R4(config-router)#ex
相关文章:
【路由交换方向IE认证】BGP选路原则之Local Preference属性
文章目录 一、路由器BGP路由的处理过程控制平面和转发平面选路工具 二、BGP的选路顺序选路的前提选路顺序 三、Local Preference属性选路原则Local Preference选路方法Local Preference选路时的方向、方式设置直接更改Local Preference值使用route-map更改Local Preference值 四…...
MTK-Android12 13 屏蔽掉Viewing full screen
去掉ROOM 开机第一次提示全屏弹框 文章目录 需求参考资料修改文件实现方案 解决思路grep 源码查找信息grep 查找 grep -rn "Viewing full screen" 找string 字段grep 查找 grep -rn immersive_cling_title 布局grep 查找 grep -rn layout.immersive_mode_cling 对应的…...
Elasticsearch 查询排序报错总结
Elasticsearch 查询sort报错总结 文章目录 Elasticsearch 查询`sort`报错总结错误1、使用Es对 `sort` 进行排序字段类型的要求1.1、数值类型(如 `integer`、`long`、`float`、`double`)1.2、日期类型(如 `date`)1.3、字符串类型(如 `keyword`、`text`)1.4、布尔类型(`bo…...
Docker私有仓库页面访问实现
通过 docker run -d -p 5000:5000 --name registry registry:2 命令搭建的Docker私有仓库默认不提供网页访问界面。它是一个基于API的后端服务,主要用于镜像的存储和管理。但可以通过以下两种方式实现网页访问: 一、通过第三方Web UI工具扩展 1. 使用 D…...
TVS管与ESD保护二极管详解:原理、区别与应用选型
一、TVS管(瞬态电压抑制二极管) 1. 基本定义 TVS管(Transient Voltage Suppressor) 是一种用于抑制瞬态高压脉冲的半导体器件,通过雪崩击穿效应快速钳位电压,保护后端电路。 2. 核心特性参数 参数定义公…...
基于问题解决的Python编程教学对高中学生计算思维能力的培养研究
一、引言 1.1 研究背景与意义 在数字化时代飞速发展的当下,人工智能、大数据、云计算等新兴技术深刻地改变着人们的生活与工作方式。计算思维作为一种运用计算机科学的基础概念进行问题求解、系统设计以及人类行为理解的思维活动,已成为 21 世纪公民必…...
基于Vue Node.js的电影售票网站的设计与实现(源码+lw+部署文档+讲解),源码可白嫖!
摘要 互联网技术的成熟和普及,势必会给人们的生活方式带来不同程度的改变。越来越多的经营模式中都少不了线上运营,互联网正强力推动着社会和经济发展。国人对民族文化的自信和不同文化的包容,再加上电影行业的发展,如此繁荣吸引…...
Golang Event Bus 最佳实践:使用 NSQite 实现松耦合架构
Go Event Bus 最佳实践:使用 NSQite 实现松耦合架构 什么是 Event Bus? Event Bus(事件总线)是一种消息传递模式,它允许应用程序的不同组件通过发布/订阅机制进行通信,而不需要直接相互依赖。这种模式特别…...
XSS 跨站Cookie 盗取表单劫持网络钓鱼溯源分析项目平台框架
漏洞原理:接受输入数据,输出显示数据后解析执行 基础类型:反射 ( 非持续 ) ,存储 ( 持续 ) , DOM-BASE 拓展类型: jquery , mxss , uxss , pdfxss , flashx…...
LeetCode算法题(Go语言实现)_49
题目 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。 一、代码实现(快速选择…...
运维面试题(十四)
6.将日志从一台服务器保存到另一台服务器中的方法 1.使用 rsync 同步日志文件 2.使用 scp 手动或脚本化传输 3.配置日志服务(如 syslog 或 rsyslog )远程传输 4.编写脚本定时上传:结合 cron 定时任务和传输工具,编…...
从零开始构建 Ollama + MCP 服务器
Model Context Protocol(模型上下文协议)在过去几个月里已经霸占了大家的视野,出现了许多酷炫的集成示例。我坚信它会成为一种标准,因为它正在定义工具与代理或软件与 AI 模型之间如何集成的新方式。 我决定尝试将 Ollama 中的一…...
Oracle--了解Oracle
前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 一、Oracle简介 Oracle是甲骨文公司开发的一款关系型数据库,是一款可移植性好、使用简单、功能强大的关系型数据库。它为各行业在各类环境…...
Hadoop集群部署教程-END
Hadoop集群部署教程-END 第二十九章:总结与展望 29.1 核心内容回顾 技术体系总结: 分布式存储架构:基于HDFS的多副本机制[^6]计算框架演进:从MapReduce到Spark/Flink的生态演进资源调度优化:YARN的多租户资源隔离方案…...
面试题:谈谈你对覆盖索引的理解
覆盖索引详解 一、定义 覆盖索引(Covering Index)是指索引本身包含查询所需的所有字段数据,使得数据库引擎无需访问实际数据行即可完成查询。这种技术通过减少磁盘I/O和避免回表操作来提升查询性能:ml-citation{ref“1,5” data“cit…...
「Java EE开发指南」用MyEclipse开发EJB 3无状态会话Bean(二)
本教程介绍在MyEclipse中开发EJB 3无状态会话bean,由于JPA实体和EJB 3实体非常相似,因此本教程不涉及EJB 3实体Bean的开发。在本教程中,您将学习如何: 创建EJB 3项目创建无状态会话bean部署并测试bean 在上文中(点击…...
QML ListView:实现可拖拽排序的组件
目录 引言相关阅读工程结构示例代码详解主窗口(Main.qml)可拖拽列表视图(DraggableListView.qml)基础结构列表项委托拖拽功能实现动画效果 运行效果总结下载链接 引言 在现代UI设计中,可拖拽排序的列表视图是一种常见…...
面向Java程序员的Python AI开发教程
一、Java与Python核心语法对比(快速迁移指南) 代码结构与类型系统 代码块定义 Java使用{}定义作用域,Python依赖缩进(4空格或制表符)。例如循环结构: // Java for (int i0; i<10; i) {System.out.print…...
【开篇:机器学习:新能源汽车研发的“数据炼金术“】
机器学习:新能源汽车研发的"数据炼金术" 一、为什么工程师需要机器学习? 在新能源车试验场,每一次碰撞测试要消耗70万元,电池包循环测试耗时超过1000小时,ADAS场景库建立需要数万个corner cases。这不是简…...
【李宏毅深度学习——分类模型的PyTorch架构】Homework 2:Phoneme Classification
目录 一、数据集介绍 1、数据来源 2、数据预处理与格式 二、数据处理方面代码分析 1、下载数据集 2、为全项目过程设置随机数种子 3、预处理相关函数定义 (1)第一个函数:加载特征数据 load_feat (2)第二个函数…...
如何实现一个“纯净”的空对象(无原型链属性)?
在 JavaScript 中,要创建一个完全“纯净”的空对象(无原型链属性,即对象的原型链指向 null),可以通过以下方法实现: 核心方法:Object.create(null) const pureObject Object.create(null);特性…...
STM32江科大----------PID算法
声明:本人跟随b站江科大学习,本文章是观看完视频后的一些个人总结和经验分享,也同时为了方便日后的复习,如果有错误请各位大佬指出,如果对你有帮助可以点个赞小小鼓励一下,本文章建议配合原视频使用❤️ 如…...
计算机视觉相机模型与标定:如何让计算机“看懂”三维世界?
计算机视觉相机模型与标定:如何让计算机“看懂”三维世界? 一、前言二、相机模型基础2.1 针孔相机模型2.1.1 模型原理2.1.2 代码示例2.2 透视变换与相机内参2.2.1 透视变换矩阵2.2.2 内参矩阵的作用2.3 相机外参2.3.1 世界坐标系与相机坐标系的转换2.3.2 外…...
ETL数据集成平台在制造业有哪些应用场景
在制造业的数字化转型中,数据如同散落的拼图——生产线的实时参数、供应链的物流轨迹、质量检测的海量报告……每一块都承载着关键信息,却因系统割裂、格式混乱而难以拼出完整价值图谱。如何让数据从“成本负担”变为“战略资产”?ETL&#x…...
Redis-07-常见Redis使用场景
文章目录 01.缓存数据(Cache)02.布式锁(Distributed Lock)03.计数器(Counter)04.排行榜(Leaderboard)05.消息队列(Message Queue)06.限流(Rate Li…...
开源模型应用落地-Podcastfy-从文本到声音的智能跃迁-Gradio(一)
一、前言 在当今信息呈现方式越来越多样化的背景下,如何将文字、图片甚至视频高效转化为可听的音频体验,已经成为内容创作者、教育者和研究者们共同关注的重要话题。Podcastfy是一款基于Python的开源工具,它专注于将多种形式的内容智能转换成…...
【AI News | 20250416】每日AI进展
AI Repos 1、Tutorial-Codebase-Knowledge 自动分析 GitHub 仓库并生成适合初学者的通俗易懂教程,清晰解释代码如何运行,还能生成可视化内容来展示核心功能。爬取 GitHub 仓库并从代码中构建知识库;分析整个代码库以识别核心抽象概念及其交互…...
iOS内存管理中的强引用问题
iOS内存管理 关于强引用循环 强引用循环是 ARC 无法自动处理的常见问题。如果两个对象互相强引用对方,就会造成引用计数不为零,导致对象无法释放。典型的情况是在闭包中引用 self 时,self 和闭包之间可能会互相持有,形成强引用循…...
电脑一直不关机会怎么样?电脑长时间不关机的影响
现代生活中,许多人会让自己的电脑24小时不间断运行,无论是为了持续的工作、娱乐,还是出于忘记关机的习惯。然而,电脑长时间不关机,除了提供便利之外,也可能对设备的健康产生一系列影响。本文将为大家介绍电…...
openGauss DataVec + Dify,快速搭建你的智能助手平台
在当今数字化和智能化的时代,大语言模型(LLM)的应用正以前所未有的速度改变着各个领域的工作方式和用户体验。Dify 作为一个开源的大语言模型应用开发平台,为开发者们提供了便捷且强大的工具,助力构建从基础智能体到复…...
React 入门教程:构建第一个 React 应用
本教程将带你从零开始构建你的第一个 React 应用。我们将创建一个简单的计数器应用,涵盖 React 的基本概念和开发流程。 准备工作 在开始之前,请确保你的开发环境满足以下要求: Node.js (建议使用最新的 LTS 版本) npm 或 yarn (Node.js 安…...
【数字图像处理】数字图像空间域增强(3)
图像锐化 图像细节增强 图像轮廓:灰度值陡然变化的部分 空间变化:计算灰度变化程度 图像微分法:微分计算灰度梯度突变的速率 一阶微分:单向差值 二阶微分:双向插值 一阶微分滤波 1:梯度法 梯度࿱…...
mapstruct使用详解
一、背景:为什么需要 mapstruct 在 Java 开发中,对象之间的映射(如 DTO 转实体类、实体类转 VO)是一项高频且繁琐的任务。手动编写映射代码存在以下问题: 冗余代码多:每个类都需要重复编写 setter 和 get…...
Token与axios拦截器
目录 一、Token 详解 1. Token 的定义与作用 2. Token 的工作流程 3. Token 的优势 4. Token 的安全实践 5. JWT 结构示例 二、Axios 拦截器详解 1. 拦截器的作用 2. 请求拦截器 3. 响应拦截器 4. 拦截器常见场景 5. 移除拦截器 三、完整代码示例 四、总结 五、…...
windows上安装Jenkins
1. 下载windows版 jenkins安装包 2. 配置本地安全策略 在 Windows 11/10 上打开本地安全策略。 Secpol.msc 或本地安全策略编辑器是一个 Windows 管理工具,允许您在本地计算机上配置和管理与安全相关的策略。 安全设置-》本地策略-》用户权限分配-》作为服务登录…...
鸿蒙NEXT开发文件预览工具类(ArkTs)
import { uniformTypeDescriptor } from kit.ArkData; import { filePreview } from kit.PreviewKit; import { FileUtil } from ./FileUtil; import { AppUtil } from ./AppUtil; import { WantUtil } from ./WantUtil;/*** 文件预览工具类* 提供文件预览、加载、判断等功能。…...
【WPF-VisionMaster源代码】应用OpenCVSharp仿Vision Master页面开发的软件源代码
一、目的:开放WPF-VisionMaster源代码 二、简介 WPF-Vision Master 视觉处理软件源码 WPF-Vision Master是基于WPF-Control的UI框架与OpenCVSharp计算机视觉库联合,并参考Vision Master界面开发的视觉处理软件。该平台深度融合WPF强大的界面控制能力和Op…...
软件研发过程中的技术债
引言:数字时代的“技术利息” 在金融领域,债务是推动发展的杠杆;而在软件开发中,技术债(Technical Debt)却是一把双刃剑。据行业调查显示,70%的软件项目存在技术债,其中超过半数团队…...
鸿蒙应用(医院诊疗系统)开发篇2·Axios网络请求封装全流程解析
一、项目初始化与环境准备 1. 创建鸿蒙工程 src/main/ets/ ├── api/ │ ├── api.ets # 接口聚合入口 │ ├── login.ets # 登录模块接口 │ └── request.ets # 网络请求核心封装 └── pages/ └── login.ets # 登录页面逻辑…...
重新定义“边缘”:边缘计算如何重塑人类与数据的关系
在数字化浪潮中,云计算曾是科技界的宠儿,但如今,边缘计算正在悄然改变游戏规则。它不仅是一种技术进步,更是对人类与数据关系的一次深刻反思。本文将探讨边缘计算如何从“中心化”走向“分布式”,以及它如何在效率、隐…...
Flink CDC 出现错误码 1236 和 SQL 状态 HY000 的原因及解决方法
Flink CDC 出现错误码 1236 和 SQL 状态 HY000 的原因及解决方法 常见原因 server-id 冲突:当多个 Flink CDC 任务连接同一个 MySQL 实例,且使用了相同的 server-id 时,会导致该冲突。因为 MySQL 服务器通过 server-id 来区分不同的从服务器,如果多个 Flink CDC 任务使用相…...
如何解除Excel只读状态?4种方法全解析
在日常办公中,我们经常会遇到Excel文件被设置为只读模式的情况。只读模式可以防止文件被意外修改,但在需要编辑时,解除只读模式就显得尤为重要。下面小编分享退出Excel只读方式的4种方法,让你能够轻松编辑工作表。 方法1…...
深度学习与 Flask 应用常见问题解析
在深度学习和 Flask 应用开发过程中,我们常常会遇到一些关键的知识点和容易混淆的问题。下面我们就来对这些问题进行详细的解析。 一、卷积神经网络(CNN)常用层 在定义卷积神经网络时,有一些常用的层: Conv2D&#x…...
零浪费,最高效率:通往0%废品率的道路
在工业自动化领域,努力实现废品率为 0% 是最大的挑战之一。这意味着不生产任何有缺陷的产品 —— 从而减少浪费、降低成本,并提高客户满意度。尽管实现这一目标颇具雄心壮志,但企业可以采取几个步骤来改进自身流程,以达成这一目标…...
【c++深入系列】:new和delete运算符详解
🔥 本文专栏:c 🌸作者主页:努力努力再努力wz 💪 今日博客励志语录: “生活不会向你许诺什么,尤其不会向你许诺成功。它只会给你挣扎、痛苦和煎熬的过程。但只要你坚持下去,终有一天&…...
基础(测试用例:介绍,测试用例格式,案例)
目录 测试用例介绍 测试用例编写格式 案例 测试用例介绍 用例:用户使用软件的案例场景 测试用例:是为测试项目而设计的测试执行文档 测试用例的作用: 防止漏测是实施测试的标准可以作为测试工作量的评估 测试用例编写格式 用例编号 用例…...
MCP协议,.Net 使用示例
服务器端示例 基础服务器 以下是一个基础的 MCP 服务器示例,它使用标准输入输出(stdio)作为传输方式,并实现了一个简单的回显工具: using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.H…...
Node.js 数据库 事务 项目示例
1、参考:JavaScript语言的事务管理_js 函数 事务性-CSDN博客 或者百度搜索:Nodejs控制事务, 2、实践 2.1、对于MySQL或MariaDB,你可以使用mysql或mysql2库,并结合Promise或async/await语法来控制事务。 使用 mysql2…...
【AI插件开发】Notepad++ AI插件开发实践:支持多平台多模型
引言 上篇文章我们的Notepad插件介绍到Dock窗口集成,本篇将继续完善插件功能,主要包括两个部分: 支持多平台、多模型支持多种授权验证、接口类型 一、多平台 原先的配置项很简单: // PluginConf.h class PlatformConf { publ…...
微信小程序数字滚动效果
效果图 .wxml <view class"container"><view class"container-num" wx:for"{{number}}" wx:key"index"><view class"num-container" style"--h:{{h}}px;--y:{{-item * h }}px;"><view wx:f…...