Spring Cloud 微服务(负载均衡策略深度解析)
📌 摘要
在微服务架构中,负载均衡是实现高可用、高性能服务调用的关键机制之一。Spring Cloud 提供了基于客户端的负载均衡组件 Ribbon,结合 Feign 和 OpenFeign,实现了服务间的智能路由与流量分配。
本文将深入讲解 Spring Cloud 中 Ribbon 的负载均衡策略原理与实战应用,内容涵盖:
- 负载均衡的基本概念
- 客户端 vs 服务端负载均衡对比
- Ribbon 的核心工作原理
- 常见负载均衡算法详解(轮询、随机、响应时间权重等)
- 如何自定义负载均衡策略
- 集成 Feign 实现声明式远程调用
- 结合 Nacos / Eureka 实现动态服务发现
- 生产环境配置建议与性能优化
适合初学者入门及中高级开发者进阶提升,帮助你打造稳定、高效的微服务调用链路。
🧱 一、什么是负载均衡?
✅ 定义:
负载均衡(Load Balancing)是一种将请求或任务分发到多个服务器上的技术,目的是提高系统吞吐量、降低延迟、避免单点故障。
📌 核心作用:
功能 | 描述 |
---|---|
请求分发 | 将客户端请求合理分配给多个服务实例 |
故障转移 | 自动跳过宕机或不健康的节点 |
流量控制 | 控制每个实例的请求压力,防止雪崩 |
性能优化 | 通过算法选择最优的服务实例响应请求 |
🔍 二、客户端负载均衡 vs 服务端负载均衡
对比项 | 客户端负载均衡(Ribbon) | 服务端负载均衡(Nginx、Zuul) |
---|---|---|
实现位置 | 服务消费者本地 | 网关或反向代理服务器 |
分发逻辑 | 在客户端决定目标地址 | 由网关统一调度 |
优点 | 更灵活、支持动态服务发现 | 易于集中管理、适合静态部署 |
缺点 | 需要维护本地缓存 | 增加网络跳转、延迟略高 |
典型框架 | Ribbon + Feign | Nginx、HAProxy、Zuul、Gateway |
🏗️ 三、Ribbon 架构与工作原理
1. Ribbon 的核心组件
组件 | 功能 |
---|---|
ServerList | 获取可用服务列表(如从 Eureka 或 Nacos 获取) |
IRule | 负载均衡策略接口,决定请求如何分发 |
IPing | 健康检查机制,判断服务是否可用 |
LoadBalancerContext | 上下文信息,记录当前请求相关信息 |
LoadBalancerStats | 记录负载均衡器统计信息(如失败次数、响应时间等) |
2. Ribbon 工作流程图解
- 阶段一:请求拦截与服务发现
- 阶段二:负载均衡与请求转发
🔄 四、常见的负载均衡策略详解(IRule 实现类)
Spring Cloud Ribbon 支持多种内置的负载均衡策略,均继承自 com.netflix.loadbalancer.IRule
接口。
1. RoundRobinRule(轮询策略)
- 默认策略
- 按顺序轮流访问服务实例
- 不考虑实例状态和响应时间
@Bean
public IRule ribbonRule() {return new RoundRobinRule();
}
2. RandomRule(随机策略)
- 随机选择一个服务实例
- 适用于对所有实例无差异感知的场景
@Bean
public IRule ribbonRule() {return new RandomRule();
}
3. AvailabilityFilteringRule(可用性过滤策略)
- 过滤掉短路或并发连接数超限的服务实例
- 优先选择可用性强的实例
@Bean
public IRule ribbonRule() {return new AvailabilityFilteringRule();
}
4. WeightedResponseTimeRule(响应时间权重策略)
- 根据响应时间计算权重,响应越快的实例被选中的概率越高
- 启用方式需先开启定时更新权重:
# application.yml
user-service:ribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule
5. BestAvailableRule(最佳可用策略)
- 忽略并发请求过多的实例,选择当前最空闲的实例
- 依赖 LoadBalancerStats 数据
@Bean
public IRule ribbonRule() {return new BestAvailableRule();
}
6. ZoneAvoidanceRule(区域回避策略)
- 默认策略(Spring Cloud 2020.0.0+)
- 优先选择同一区域的服务实例,避免跨区域调用延迟过高
@Bean
public IRule ribbonRule() {return new ZoneAvoidanceRule();
}
🧩 五、自定义负载均衡策略
你可以通过实现 IRule
接口来自定义负载均衡策略,例如实现“根据服务版本号选择”、“根据地理位置选择”等功能。
示例:自定义策略类
public class CustomRule extends AbstractLoadBalancerRule {@Overridepublic Server choose(Object key) {ILoadBalancer lb = getLoadBalancer();List<Server> upList = lb.getReachableServers(); // 可用实例列表if (upList == null || upList.isEmpty()) {return null;}// 自定义逻辑:返回第一个实例(示例)return upList.get(0);}@Overridepublic void initWithNiwsConfig(IClientConfig clientConfig) {// 初始化配置(可选)}
}
注册自定义策略:
@Bean
public IRule ribbonRule() {return new CustomRule();
}
📦 六、集成 Feign 实现声明式远程调用
Feign 是 Spring Cloud 提供的声明式 HTTP 客户端,底层默认集成了 Ribbon,实现自动负载均衡。
1. 添加依赖(pom.xml)
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2. 启用 Feign 客户端
@SpringBootApplication
@EnableFeignClients
public class OrderServiceApplication {public static void main(String[] args) {SpringApplication.run(OrderServiceApplication.class, args);}
}
3. 定义 Feign 接口
@FeignClient(name = "user-service")
public interface UserClient {@GetMapping("/users/{id}")String getUserById(@PathVariable("id") Long id);
}
📊 七、结合 Nacos / Eureka 实现动态服务发现
Ribbon 会自动从注册中心(如 Eureka、Nacos)拉取服务实例列表,并进行负载均衡。
示例:使用 Nacos 作为注册中心
application.yml:
spring:cloud:nacos:discovery:server-addr: localhost:8848user-service:ribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule
🧪 八、常见问题与解决方案
问题 | 原因 | 解决方案 |
---|---|---|
服务调用总是同一个实例 | 使用了默认的轮询策略 | 更换为 WeightedResponseTimeRule 或 ZoneAvoidanceRule |
Ribbon 未生效 | 未启用 Feign 或未注入 IRule Bean | 检查 @EnableFeignClients、IRule Bean 配置 |
服务实例未更新 | 本地缓存未刷新 | 设置 refreshInterval 参数 |
调用失败但未切换实例 | 健康检查未触发 | 检查 IPing 配置、设置重试策略 |
多个服务名共用同一策略 | 未指定服务名 | 使用 <service-name>.ribbon.NFLoadBalancerRuleClassName 指定 |
💡 九、生产环境优化建议
优化方向 | 建议 |
---|---|
策略选择 | 优先使用 ZoneAvoidanceRule 或 WeightedResponseTimeRule |
健康检查 | 合理设置 IPing 检测频率,避免误判 |
缓存刷新 | 设置合适的刷新间隔(默认30秒),平衡实时性与性能 |
日志监控 | 开启 Ribbon 日志,观察负载均衡行为 |
多实例部署 | 每个服务至少部署两个实例,保证高可用 |
结合熔断降级 | 配合 Resilience4j 或 Sentinel 实现容错机制 |
💡 十、总结
通过本文的学习,你应该已经掌握了:
- 负载均衡的基本概念与分类
- Ribbon 的核心组件与工作流程
- 7种常见负载均衡策略的适用场景
- 如何自定义负载均衡规则
- Feign 如何集成 Ribbon 实现远程调用
- 如何结合 Nacos / Eureka 实现动态服务发现
掌握 Ribbon 的负载均衡策略,是构建高可用、高性能微服务系统的必备技能。
📚 十一、参考资料
- Spring Cloud 官方文档
- Netflix Ribbon GitHub
- 如果你在学习过程中遇到任何疑问,欢迎在评论区留言交流!
- 👍 如果你觉得这篇文章对你有帮助,别忘了点赞、收藏、转发哦!
相关文章:
Spring Cloud 微服务(负载均衡策略深度解析)
📌 摘要 在微服务架构中,负载均衡是实现高可用、高性能服务调用的关键机制之一。Spring Cloud 提供了基于客户端的负载均衡组件 Ribbon,结合 Feign 和 OpenFeign,实现了服务间的智能路由与流量分配。 本文将深入讲解 Spring Clo…...
从单体架构到微服务:微服务架构演进与实践
一、单体架构的困境与演进 (一)单体应用的初始优势与演进路径 在系统发展的初期,单体架构凭借其简单性和开发效率成为首选。单体应用将整个系统的所有功能模块整合在一个项目中,以单一进程的方式运行,特别适合小型系…...
Infineon AURIX TriCore TC3xx芯片内存专题报告
作者: DBGAUTOMAN 日期: 2025-06-28 摘要 本报告旨在深入分析Infineon AURIX TriCore TC3xx系列微控制器的内存架构。通过对官方技术文档的系统性研究,报告详细阐述了TC3xx的内存配置、架构设计、存储器技术特性、系统级内存管理以及性能优化策略,为相关技术开发和系统设计…...
WPF中获取主窗体
在WPF的MVVM模式中,通常不直接引用主窗体(MainWindow),而是通过依赖注入、事件聚合器或命令参数传递等方式实现逻辑解耦。以下是几种推荐方法: 方法1:依赖注入(推荐) 在ViewModel中…...
【龙泽科技】新能源汽车故障诊断仿真教学软件【吉利几何G6】
产品简介 新能源汽车故障诊断仿真教学软件是依托《全国职业院校技能大赛》“新能源汽车维修”赛项中“新能源汽车简单故障诊断与排除” 竞赛模块,自主开发的一款仿真教学软件。软件采用仿真技术模拟实际的新能源汽车故障诊断过程,主要通过对新能源汽车常…...
SpringBoot -- 以 jar 包运行(以及常见错误分析)
7.SpringBoot 以 jar 包运行 打包 在打包之前先要导入一个maven项目的打包插件,使用 springInitializr 创建的 maven 项目,已经自动导入了。如果没有需要手动导入。将下面代码,放进 Pom.xml 里面即可。 <build><plugins><p…...
求职招聘小程序源码招聘小程序搭建招聘小程序定制开发
身份:求职者、企业 求职者:完善简历,简历投递 企业:企业入驻,查看简历 企业会员:半年 、年度 权益:每日发布条数、刷新条数,简历下载数量 聊天:求职者可以和企业聊…...
Day44 预训练模型
目录 一、预训练的概念 二、常见的分类预训练模型 2.1 CNN架构预训练模型 2.2 Transformer类预训练模型 2.3 自监督预训练模型 三、图像预训练模型的发展史 四、预训练的策略 五、预训练代码实战:resnet18 六、尝试在cifar10对比alexnet 七、尝试通过ctrl进…...
【菜狗的记录】模糊聚类最大树、图神经网络、大模型量化——20250627
每日学习过程中记录的笔记,从各个网站整理下来,用于当日复盘。 如果其中的知识点能帮到你,也很荣幸呀。 -------------------------------------------------------20250622------------------------------------------------------------- …...
【Linux 设备模型框架 kobject 和 kset】
Linux 设备模型框架 kobject 和 kset 一、Linux 设备模型概述二、kobject 与 kset 的核心概念1. kobject2. kset3. 关键数据结构 三、kobject 与 kset 的实现源码四、源码解析与使用说明1. kset 的创建与初始化2. kobject 的创建与属性3. sysfs 属性操作4. 用户空间访问示例 五…...
leetcode.2014 重复k次的最长子序列
题目描述 解题思路 这一题本来在想怎么样做才能获得通用解,因为乍一看总感觉遍历的时间代价会非常高。直到后面看到提示: 提示里面专门包含了一个n < k * 8,这太反常了。后面仔细一想,有道理,最后答案的字符个数一定…...
机器学习3——参数估计之极大似然估计
参数估计 问题背景: P ( ω i ∣ x ) p ( x ∣ ω i ) P ( ω i ) p ( x ) p ( x ) ∑ j 1 c p ( x ∣ ω j ) P ( ω j ) \begin{aligned} & P\left(\omega_i \mid \mathbf{x}\right)\frac{p\left(\mathbf{x} \mid \omega_i\right) P\left(\omega_i\right)…...
利用python实现NBA数据可视化
大家好,今天我们利用python爬取NBA球星每年的比赛数据并进行可视化展示。主要用到三个模块:xpath、matplotlib。其中xpth负责爬取网站上的信息。Matplotlib是Python开发人员常用的Python绘图库,可以用来绘制各种2D图形,具有绘图质…...
杭州西湖断桥不断:3D扫描还原‘残雪‘视觉骗局
“断桥残雪”是西湖十景之一,所谓“视觉骗局”指的是在特定条件下,从远处看断桥仿佛断开的奇妙视觉效果。利用3D扫描技术还原这一效果可按以下步骤进行: 数据采集 3D扫描断桥:使用高精度的3D激光扫描仪对断桥及其周边环境进行全面…...
Dubbo服务调用超时问题解决方案
Dubbo服务调用超时问题解决方案 Dubbo服务调用超时通常由网络延迟、服务端性能瓶颈、配置不当或资源竞争引发。以下解决方案基于根本原因分类,优先采用高可信度实践: 🔍 一、排查问题根源 网络诊断 使用 ping、telnet 检查服务提供者网络连…...
视觉疲劳检测如何优化智能驾驶的险情管理
视觉分析疲劳检测在智能驾驶中的应用研究 一、背景与需求 近年来,智能驾驶领域因疲劳驾驶引发的交通事故频发,如2025年某品牌智能汽车因驾驶员疲劳导致高速追尾事件,暴露了现有技术对复杂场景的适应不足。传统疲劳检测依赖单一生理信号或车…...
C++ 第三阶段 并发与异步 - 第二节:异步任务(std::async)
目录 一、std::async 概述 1. std::async 的定义 二、std::async 的基本用法 1. 基本语法 (1) 函数调用 (2) Lambda 表达式 三、执行策略详解 1. std::launch::async 2. std::launch::deferred 3. 默认策略(std::launch::any) 四、std::futur…...
OpenCV图像添加水印
一、前言 在数字图像处理中,为图片添加水印是一项常见且重要的技术。无论是版权保护、品牌宣传还是防止未经授权的使用,水印都能发挥重要作用。OpenCV作为一款强大的计算机视觉库,提供了丰富的功能来实现各种水印效果。本教程将详细介绍如何…...
Linux信号机制:从入门到精通
嘿,小伙伴们!今天我要和大家聊一个Linux系统中非常有趣又重要的话题——信号机制。别担心,虽然信号听起来有点高深,但我会用最通俗易懂的语言,配合清晰的图表,带你彻底搞懂这个概念! 什么是信号…...
EXCEL数据报表
客单价成交金额*成交客户数 —— 提取年份 YEAR() 视图-窗口-新建窗口,就能将excel的一个子表格单拎出来成为独立窗口,方便对比查看 数据报表的单元格尽量都用公式来填补,链接到源表上去。这样当源表有新数据更新进来后,报表也…...
openGL学习(VAO和VBO)
理论 VBO void prepare() {//创建一个VBO,但是还没有分配显存GLuint vbo 0;GL_CALL( glGenBuffers(1, &vbo));cout << "vbo " << vbo << endl;//销毁一个VBOGL_CALL(glDeleteBuffers(1, &vbo));cout << "delete vbo "…...
【请关注】制造企业机械加工数据脱敏解决方案
制造企业机械加工数据脱敏解决方案 一、方案概述 在制造企业尤其是机械加工领域,数字化转型带来了生产效率的大幅提升,大量生产数据、设备运行数据、供应链数据以及客户订单数据等成为企业发展的关键驱动力。然而,这些数据中包含众多敏感信息,如客户定制产品的设计图纸(…...
2025.6.27总结
最近工作又开始内耗了,一位同事的转岗直接让我破防了,明明他工作干得很不错,会得又多,性格又好,我还经常请教他业务上的问题。我和他的关系并不算太好,但他加入其他部门,竟然让我有些不舍&#…...
Python打卡:Day38
知识点回顾: Dataset类的__getitem__和__len__方法(本质是python的特殊方法)Dataloader类minist手写数据集的了解 浙大疏锦行...
Ubuntu18.04/Mysql 5.7 建立主备模式Mysql集群
一、数据库的安装 详见https://www.jianshu.com/p/5073177eedf2 本文实验环境为阿里云的两台ubuntu18.04服务器: master ip: 172.26.138.7 slave ip: 172.26.0.209 二、修改Master的配置(# 的行是我后增加的部分): 编辑 /etc/mysql/mysql.conf.d/mysqld.…...
Linux journal 日志大小限制与管理详解
文章目录 Linux journal 日志大小限制与管理详解journal 日志的默认存储位置journal 日志大小限制配置查看当前日志占用情况手动清理日志文件按大小清理日志按时间清理日志按文件数清理日志 journald 日志机制原理简析(适当加点原理)日志筛选与导出技巧&…...
Linux基本指令篇 —— tac指令
tac 是 Linux 系统中一个非常实用的文本处理命令,它是 cat 命令的反向操作(名称也是 "cat" 的反写)。tac 是一个简单但功能强大的工具,特别适合需要反向处理文本数据的场景: 目录 一、基本功能 二、基本语法…...
【Yonghong 企业日常问题08 】永洪BI的Apache Tomcat版本升级指南
文章目录 前言操作步骤登录验证 前言 某公司业务永洪BI系统使用tomcat 9.0.97版本,接到总公司漏洞扫描整改要求需要将tomcat版本升级到9.0.97以上。 目标:tomcat 9.0.97》 9.0.98 1、下载tomcat所需要的版本 地址:https://tomcat.apache.org/download-…...
动手学Python:从零开始构建一个“文字冒险游戏”
动手学Python:从零开始构建一个“文字冒险游戏” 大家好,我是你的技术向导。今天,我们不聊高深的框架,也不谈复杂的算法,我们来做一点“复古”又极具趣味性的事情——用Python亲手打造一个属于自己的文字冒险游戏&…...
【C/C++】C++26新特性前瞻:全面解析未来编程
展望未来:C26 新特性全面解析 随着 C 标准每三年一次的迭代节奏,C26(预计于 2026 年底正式发布)正在逐步成型。相比 C20 的革命性更新和 C23 的“修补增强”,C26 继续推进现代 C 的理念——更安全、更高效、更模块化&…...
Linux系统日志与守护进程开发实战指南
Linux系统日志与守护进程开发实战指南 系统日志与守护进程 ├── 系统日志syslog │ ├── 日志路径: /var/log/syslog │ └── 核心API │ ├── openlog │ ├── syslog │ └── closelog └── 守护进程daemon└── 创建步骤├── um…...
兰洋科技上合组织论坛发表专题分享,全球液冷布局引领绿色算力未来
2025年6月17-19日,中国—上海合作组织数字技术合作发展论坛在新疆克拉玛依市举办。作为第四次上海合作组织成员国信息通信技术发展部门负责人会议的配套会议,论坛以“数字化转型助力可持续发展,数字包容促进上合共同繁荣”为主题,…...
桌面小屏幕实战课程:DesktopScreen 11 SPI 水墨屏
飞书文档https://x509p6c8to.feishu.cn/docx/doxcnlzpIgj3gosCZufBTCZxlMb SPI说明 SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上占用…...
小知识点五、无刷电机闭环控制(电流)
0 前言 该部分只用于自学使用,作为笔记方便后续自查。 资料参考:http://dengfoc.com 硬件:2208云台电机MT6701磁编码器 1 电流控制理论 1.1 待解决的问题 简单回顾一下在之前的学习中,我们通过 U q U_q Uq和电角度 θ \the…...
Java 编程之备忘录模式
前言 有时候,我们真希望人生能有“CtrlZ”。在日常生活中,我们经常使用“撤销”功能,例如在写 Word、画图、写代码时一不小心操作失误,就希望能回到之前的状态。这种**“状态快照 恢复”**机制,在设计模式中就叫做&a…...
SQL SERVER存储过程
什么是存储过程 SQL 存储过程(Stored Procedure)是一个在数据库中预编译并存储的一组 SQL 语句。它们可以包含查询、插入、更新、删除等数据库操作,甚至包括控制流语句(如条件判断、循环等)。存储过程可以通过调用来执…...
Vue样式绑定与条件渲染详
一、Vue样式绑定 在Vue中,我们可以通过多种方式动态地绑定样式,让界面根据数据状态变化而自动更新样式。 1. class样式绑定 (1) 字符串写法 适用场景:样式的类名不确定,需要动态指定 <template><div><!-- 绑定…...
python基于协同过滤的动漫推荐系统
目录 技术栈介绍具体实现截图系统设计研究方法:设计步骤设计流程核心代码部分展示研究方法详细视频演示试验方案论文大纲源码获取/详细视频演示 技术栈介绍 Django-SpringBoot-php-Node.js-flask 本课题的研究方法和研究步骤基本合理,难度适中…...
光场操控新突破!3D 光学信息处理迎来通用 PSF 工程时代--《自然》子刊:无需复杂算法,这一技术让 3D 光学成像实现 “即拍即得”念日
导语 在光学成像领域,如何突破分辨率与成像速度的瓶颈,一直是科研人员探索的焦点。近日,加州大学洛杉矶分校(UCLA)的研究团队在《Light: Science & Applications》发表论文,提出了一种通用点扩散函数&a…...
ubuntu20.04如何给appImage创建快捷方式
ubuntu20.04如何给appImage创建快捷方式 1. 确保AppImage是可执行的 chmod x /path/to/your/appimage2. 创建.desktop文件 在~/.local/share/applications/目录下创建一个新的 .desktop 文件: vi ~/.local/share/applications/your-appname.desktop添加以下内容…...
网络安全之SQL RCE漏洞
引言 堡垒机(Bastion Host),也称为跳板机或运维安全审计系统,是一种用于管理和控制对内部网络资源访问的安全设备。它的主要作用是作为运维人员访问内部服务器和网络设备的唯一入口,通过集中化的身份认证、权限管理和…...
DeepSeek网页版随机点名器
用DeepSeek帮我们生成了一个基于html5的随机点名器,效果非常棒,如果需要加入名字,请在代码中按照对应的格式添加即可。 提示词prompt 帮我生成一个随机点名的HTML5页面 生成真实一点的名字数据 点击随机按钮开始随机选择 要有闪动的效果 &…...
Elasticsearch索引字段的类型
在 Elasticsearch 中,索引字段的类型(即 Mapping 中的字段类型)对搜索和存储性能影响很大。下面是各种常用数据类型的用途及推荐使用场景总结: 1. keyword 类型(精确匹配) 适合数据: 不需要分词…...
大模型在慢性病毒性肝炎预测及诊疗方案制定中的应用研究
目录 一、引言 1.1 研究背景与意义 1.2 研究目的与创新点 二、慢性病毒性肝炎概述 2.1 疾病定义与分类 2.2 发病机制与病理特征 2.3 流行病学现状 三、数据收集与预处理 3.1 数据来源 3.2 数据清洗 3.3 特征工程 四、大模型选择与构建 4.1 模型选择依据 4.2 模型…...
DAY 43 复习日
浙大疏锦行https://blog.csdn.net/weixin_45655710 第一步:寻找并准备图像数据集 在Kaggle等平台上,你可以找到大量用于图像分类任务的数据集,例如英特尔图像分类数据集 (Intel Image Classification) 或手写数字识别数据集 (Digit Recogni…...
SQL学习笔记3
SQL常用函数 1、字符串函数 函数调用的语法:select 函数(参数); 常用的字符串函数有: 拼接字符串,将几个字符串拼到一起:concat (s1,s2,……); select concat(你好,hello); update mytable set wherefo concat(中…...
JVM调优实战 Day 7:JVM线程分析与死锁排查
【JVM调优实战 Day 7】JVM线程分析与死锁排查 文章标签 jvm调优, 线程分析, 死锁排查, JVM监控, Java性能优化, JVM参数配置 文章简述 在Java应用的高并发场景中,线程管理与死锁问题往往是性能瓶颈的根源。本文作为“JVM调优实战”系列的第7天,深入解析…...
Android-Layout Inspector使用手册
Layout Inspector Android Layout Inspector 是 Android Studio 中用于调试应用布局的工具 启动方法: 通过下载Layout Inspector插件,在 “View - Tool Windows - Layout Inspector” 或 “Tools - Layout Inspector” 启动。 主要界面区域:…...
【51单片机5毫秒定时器】2022-6-1
缘由单片机的代码,求大家来帮帮我-编程语言-CSDN问答 #include "REG52.h" unsigned char code smgduan[]{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0,64}; //共阴0~F消隐减号 unsigned char Js0, miao0;//中断…...
Flutter 多平台项目开发指南
Flutter 多平台项目开发指南 本指南将帮助你从 0 到 1 创建并适配一个支持 Android / iOS / Web / Windows / macOS / Linux 的 Flutter 多平台项目。 ✅ 一、创建支持多平台的 Flutter 项目 flutter create my_multi_platform_app cd my_multi_platform_app默认会生成支持以…...