当前位置: 首页 > news >正文

分布式系统设计(架构能力)

一、微服务架构
  1. 服务治理

    • Nacos 注册中心(AP模式)

      • CAP选择:Nacos 默认采用 AP 模式(可用性 + 分区容忍性),通过心跳检测实现服务健康管理。
      • 服务发现:客户端定时拉取服务列表,支持权重路由和元数据过滤。
      • 配置管理:通过 dataId 和 group 动态推送配置,支持灰度发布。
    • Sentinel 熔断规则持久化

      • 规则存储:将流控、熔断规则持久化到 Nacos/ZooKeeper,避免重启丢失。
      • 动态更新:通过 DataSource 接口监听配置中心变化,实时生效。
      // 示例:Sentinel 规则持久化到 Nacos 
      ReadableDataSource<String, List<FlowRule>> flowRuleDataSource = new NacosDataSource<>( nacosServerAddr, groupId, dataId, source -> JSON.parseObject(source, new TypeReference<List<FlowRule>>() {}) ); FlowRuleManager.register2Property(flowRuleDataSource.getProperty());

  2. 分布式事务

    • Seata AT模式

      • 两阶段流程
        1. 一阶段:执行业务 SQL,生成 UNDO_LOG(数据快照)。
        2. 二阶段:提交时删除 UNDO_LOG;回滚时通过 UNDO_LOG 恢复数据。
      • 全局锁:TC(事务协调器)通过全局锁避免脏写。
    • 最大努力通知型事务

      • 适用场景:跨系统最终一致性(如支付成功后通知商户)。
      • 实现步骤
        1. 本地事务提交后,异步发送通知消息。
        2. 消息队列保证至少一次投递,接收方需幂等处理。
  3. 网关设计

    • Spring Cloud Gateway 过滤器链

      • 核心过滤器
        • GlobalFilter:全局过滤(如鉴权、日志)。
        • GatewayFilter:路由级过滤(如添加请求头)。
      • 自定义过滤器
        @Component 
        public class AuthFilter implements GlobalFilter { @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { if (!checkAuth(exchange.getRequest())) { return exchange.getResponse().setComplete(); // 拦截 } return chain.filter(exchange); } }

    • 动态路由配置

      • 基于Nacos:监听 Nacos 配置变化,刷新路由表。
      • API 动态更新:通过 RouteDefinitionRepository 接口实现。

二、中间件核心
  1. Redis

    • 集群模式

      • Cluster分片
        • 16384个哈希槽,每个节点负责部分槽位。
        • 客户端路由:通过 CRC16(key) % 16384 计算槽位。
      • Codis方案
        • 代理层(Codis-Proxy)负责分片,依赖 ZooKeeper 维护元数据。
    • 持久化策略

      • RDB:定时快照,恢复快但可能丢失数据。
      • AOF:追加日志,数据安全但文件较大。
      • 混合模式:RDB 全量 + AOF 增量(Redis 4.0+)。
    • 缓存问题解决方案

      • 穿透:布隆过滤器(RedissonBloomFilter)拦截无效请求。
      • 击穿:互斥锁(SET key value NX PX 3000)防止并发重建。
      • 雪崩:随机过期时间(基础过期时间 + 随机偏移量)。
  2. Kafka

    • ISR机制

      • In-Sync Replicas:与 Leader 保持同步的副本集合。
      • Leader选举:当 Leader 失效时,从 ISR 中选择新 Leader。
    • 零拷贝技术

      • sendfile系统调用:数据直接从磁盘文件传输到网卡,绕过用户态。
    • Exactly-Once语义

      • 幂等生产者:通过 PID + Sequence Number 去重。
      • 事务消息:跨分区原子性写入(需配合事务协调器)。
  3. RocketMQ

    • 事务消息流程

      1. 发送半消息(对消费者不可见)。
      2. 执行本地事务,提交或回滚。
      3. Broker 根据事务状态提交或丢弃消息。
    • 顺序消息实现

      • MessageQueueSelector:通过相同选择策略(如订单ID哈希)将消息发送到同一队列。
      • 消费者单线程顺序消费。

三、高可用设计
  1. 限流降级

    • 滑动窗口算法

      • 实现:将时间划分为多个小窗口,统计窗口内请求量。
      • 优势:比固定窗口更平滑,避免临界突发流量。
    • 令牌桶实现(Resilience4j)

      // 配置每秒10个令牌 
      RateLimiterConfig config = RateLimiterConfig.custom()                     .limitRefreshPeriod(Duration.ofSeconds(1)) .limitForPeriod(10) .build(); 
      RateLimiter limiter = RateLimiter.of("apiLimiter", config);

  2. 容灾方案

    • 同城双活

      • 数据同步:基于数据库主从复制或 DRBD 块级同步。
      • 流量切换:DNS 或负载均衡器(如 Nginx)切换流量。
    • 异地多活

      • 单元化路由:按用户 ID 哈希路由到指定机房(如用户A固定访问北京机房)。
      • 数据最终一致:通过消息队列异步同步数据。
  3. 压测实战

    • JMeter全链路压测

      1. 脚本录制:使用 JMeter 代理服务器录制用户操作。
      2. 参数化:CSV 文件驱动多用户登录(不同账号)。
      3. 分布式压测:控制机(Master)调度多台压力机(Slave)。
      4. 监控指标:TPS、响应时间、错误率、资源利用率(CPU/内存)。
    • 结果分析

      • 瓶颈定位:数据库慢 SQL、线程池满、缓存命中率低。
      • 优化建议:增加索引、调整线程池参数、预热缓存。

四、总结与实战案例

案例:电商大促系统设计

  • 挑战:秒杀场景下的高并发(10万QPS)、数据一致性。
  • 解决方案
    1. 流量削峰:MQ 队列缓冲请求,异步处理订单。
    2. 库存扣减:Redis Lua 脚本保证原子性,异步同步到数据库。
    3. 降级策略:核心功能(下单)优先,非核心功能(推荐)降级。

通过深入理解上述技术点,并结合实际场景灵活运用,能够设计出高可用、可扩展的分布式系统。

相关文章:

分布式系统设计(架构能力)

一、微服务架构 服务治理 Nacos 注册中心&#xff08;AP模式&#xff09; CAP选择&#xff1a;Nacos 默认采用 AP 模式&#xff08;可用性 分区容忍性&#xff09;&#xff0c;通过心跳检测实现服务健康管理。服务发现&#xff1a;客户端定时拉取服务列表&#xff0c;支持权重…...

CR电路介绍

CR电路&#xff08;RC电路&#xff09;介绍 CR电路&#xff08;电阻-电容电路&#xff09;由电阻&#xff08;R&#xff09;和电容&#xff08;C&#xff09;组成&#xff0c;是电子系统中的基础模块&#xff0c;广泛用于信号处理、定时、滤波等场景。以下是其核心功能、实现方…...

Redis数据结构,渐进式遍历,数据库管理

1.Redis的其他数据结构 前面我们主要讲述了Redis中比较常用的集中数据结构String&#xff0c;List&#xff0c;Hash&#xff0c;Set&#xff0c;Zset&#xff0c;但这并不代表Redis只用这几种数据结构还有如Streams&#xff0c;Geospatial&#xff0c;Hyperloglog&#xff0c;…...

动态规划01背包问题系列一>最后一块石头的重量II

这里写目录标题 题目分析&#xff1a;状态表示&#xff1a;状态转移方程&#xff1a;初始化&#xff1a;填表顺序&#xff1a;返回值&#xff1a;代码呈现&#xff1a;优化版本&#xff1a;代码呈现&#xff1a; 题目分析&#xff1a; 状态表示&#xff1a; 状态转移方程&#…...

GCC编译

目录 gcc编译c语言流程&#xff1a; 步骤 编译器 预处理 编译 汇编 链接 完整编译 多文件编译 其他常用gcc选项 gcc编译c语言流程&#xff1a; 预处理大写-E 编译为大写-S &#xff0c;生成汇编代码文件 汇编为小写-c 链接这里可以加-o 重命名a.out这个可…...

康谋分享 | 3DGS:革新自动驾驶仿真场景重建的关键技术

随着自动驾驶技术的迅猛发展&#xff0c;构建高保真、动态的仿真场景成为了行业的迫切需求。传统的三维重建方法在处理复杂场景时常常面临效率和精度的挑战。在此背景下&#xff0c;3D高斯点阵渲染&#xff08;3DGS&#xff09;技术应运而生&#xff0c;成为自动驾驶仿真场景重…...

Jetson NV 上解决 PyQt5 “Could not load the Qt platform plugin ‘xcb‘“ 错误

在 Jetson NV 上运行 PyQt5 应用程序时&#xff0c;可能会遇到以下错误&#xff1a; qt.qpa.xcb: could not connect to display qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found. This application failed…...

计算机毕业设计Python+DeepSeek-R1大模型微博的话题博文及用户画像分析系统 微博舆情可视化(源码+ 文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

文件上传靶场(1--9关)

实验环境&#xff1a; 1&#xff0c;upload的靶场环境可以去GitHub上自行查找 2&#xff0c;打开小皮面板的nginx和数据库 3&#xff0c;将文件上传的靶场部署到本地&#xff1a; 放到小皮的phpstduy_pro的www下面 小提示&#xff1a; 另外如果你用的是php7的版本建议将版…...

2025年渗透测试面试题总结-字某某动-安全研究实习生(二面)(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 字某某动-安全研究实习生&#xff08;二面&#xff09; 1. 护网行动中的核心工作 2. 防护层级选择&…...

LeetCode 965题详解 | 单值二叉树的“一统江湖”:如何判断所有节点值全等?

题目如下&#xff1a; 解题过程如下&#xff1a; 示例中&#xff0c;即便这个结点是空结点也返回true。 若根结点不为空&#xff0c;那么先判断它的左孩子结点里的值是否与根结点里的值相等&#xff08;这里要先确保左孩子不为空&#xff0c;因为左孩子结点里的值是解引用操作…...

Java阻塞队列深度解析:高并发场景下的安全卫士

一、阻塞队列的核心价值 在电商秒杀系统中&#xff0c;瞬时涌入的10万请求如果直接冲击数据库&#xff0c;必然导致系统崩溃。阻塞队列如同一个智能缓冲带&#xff0c;通过流量削峰和异步解耦两大核心能力&#xff0c;成为高并发系统的核心组件。 二、Java阻塞队列实现类对比 …...

使用 Docker 部署 RabbitMQ 并实现数据持久化

非常好&#xff01;以下是一份完整的 Docker 部署 RabbitMQ 的博客文档&#xff0c;包含从安装到问题排查的详细步骤。你可以直接将其发布到博客中。 使用 Docker 部署 RabbitMQ 并实现数据持久化 RabbitMQ 是一个开源的消息队列系统&#xff0c;广泛应用于分布式系统中。使用…...

VsCode 快捷键备忘

移动光标及选择文本 Ctrl ← / → &#xff1a;以单词为单位移动游标Home / End&#xff1a;光标移到行首/行位Ctrl Home / End&#xff1a;光标移到文件首和文件尾Ctrl Shift \&#xff1a;在匹配的分隔符之间跳转 配对的分隔符 是指分隔代码元素的字符&#xff0c;比如字…...

蓝桥杯备考:动态规划路径类DP之矩阵的最小路径和

如题&#xff0c;要求左上角到右下角的最短路径&#xff0c;我们还是老样子按顺序做 step1:确定状态表示 f[i][j]表示(1,1)到(i,j)的最短距离 step2 :推导状态表达方程 step3:确定填表顺序&#xff0c;应该是从上到下&#xff0c;从左到右 step4:初始化 step5 找结果&#…...

大模型工程师学习日记(十五):Hugging Face 模型微调训练(基于 BERT 的中文评价情感分析)

1. datasets 库核心方法 1.1. 列出数据集 使用 d atasets 库&#xff0c;你可以轻松列出所有 Hugging Face 平台上的数据集&#xff1a; from datasets import list_datasets# 列出所有数据集 all_datasets list_datasets()print(all_datasets)1.2. 加载数据集 你可以通过 l…...

Spring Boot 异步编程

文章目录 一、异步方法的使用1. 开启异步支持2. 定义异步方法3. 调用异步方法踩坑记录心得体会 二、线程池配置1. 自定义线程池2. 使用自定义线程池踩坑记录心得体会 三、异步任务的监控与管理1. 日志记录2. 异常处理3. 线程池监控踩坑记录心得体会 在现代应用程序开发中&#…...

golang并发编程如何学习

《掌握 Golang 并发编程的通关秘籍》 在当今的编程世界中&#xff0c;Golang 并发编程正以其独特的魅力和强大的能力吸引着众多开发者。然而&#xff0c;对于许多小伙伴来说&#xff0c;如何学好这门技术却成了一个头疼的问题。别担心&#xff0c;今天就让我来为大家揭开 Gola…...

Django 中,Form 和 ModelForm的用法和区别

在 Django 中,Form 和 ModelForm 是用于处理表单数据的两种主要方式。它们的主要区别在于是否与模型(Model)直接关联。以下是它们的用法、区别以及高级用法的详细说明: 一、Form 的使用 1. 基本用法 Form 是一个独立的表单类,不与任何模型直接关联。适用于需要手动定义字…...

SQL_语法

1 数据库 1.1 新增 create database [if not exists] 数据库名; 1.2 删除 drop database [if exists] 数据库名; 1.3 查询 (1) 查看所有数据库 show databases; (2) 查看当前数据库下的所有表 show tables; 2 数据表 2.1 新增 (1) 创建表 create table [if not exists…...

Linux网络编程

网络&#xff1a;不同主机&#xff0c;进程间通信 目的 1&#xff0c; 解决主机之间的硬件层面的互联互通 2&#xff0c;解决主机间软件层面的互联互通 IP地址&#xff1a;区分不同主机&#xff08;软件地址&#xff09; MAC地址&#xff1a;硬件地址 端口号&#xff1a;区分同…...

算法·搜索

搜索问题 搜索问题本质也是暴力枚举&#xff0c;一般想到暴力也要想到利用回溯枚举。 排序和组合问题 回溯法 去重问题&#xff1a;定义全局变量visited还是局部变量visited实现去重&#xff1f; 回溯问题 图论中的搜索问题 与一般的搜索问题一致&#xff0c;只不过要多…...

前端跨域设置 withCredentials: true

在做登录认证的时候&#xff0c;会出现请求未登录的情况&#xff0c;查看请求头的时候发现并没有把登录时的cookie设置到第二次的请求头里面。查看资料才知道跨域请求要想带上cookie&#xff0c;必须要在ajax请求里加上 withCredentials: true 再次访问发现请求头可以携带cook…...

使用 Arduino 和 Wi-Fi 控制 RGB LED

通过 WiFi 的 Arduino RGb LED 控制器 &#xff0c;在本文中&#xff0c;我们将介绍下一个基于 IOT 的项目 - 使用 Wi-Fi 的 RGB LED 闪光灯。在这里&#xff0c;我们使用 Arduino 和 ESP8266 Wi-Fi 模块通过 Android 手机通过 Wi-Fi 控制 RGB LED 的颜色。 在这个 RGB Flash…...

html+js 轮播图

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>轮播图示例</title><style>/* 基本样式…...

蓝桥杯 Excel地址

Excel地址 题目描述 Excel 单元格的地址表示很有趣&#xff0c;它使用字母来表示列号。 比如&#xff0c; A 表示第 1 列&#xff0c; B 表示第 2 列&#xff0c; Z 表示第 26 列&#xff0c; AA 表示第 27 列&#xff0c; AB 表示第 28 列&#xff0c; BA 表示第 53 列&#x…...

相机几何与标定:从三维世界到二维图像的映射

本系列课程将带领读者开启一场独特的三维视觉工程之旅。我们不再止步于教科书式的公式推导&#xff0c;而是聚焦于如何将抽象的数学原理转化为可落地的工程实践。通过解剖相机的光学特性、构建成像数学模型、解析坐标系转换链条&#xff0c;直至亲手实现参数标定代码&#xff0…...

SCI期刊推荐 | 免版面费 | 计算机领域:信息系统、软件工程、自动化和控制

在学术研究领域&#xff0c;选择合适的SCI期刊对科研成果的传播与认可至关重要。了解SCI期刊的研究领域和方向是基础&#xff0c;确保投稿内容与期刊主题相符。同时&#xff0c;要关注期刊的影响因子和评估标准&#xff0c;选择具有较高影响力和学术认可度的期刊。阅读期刊的投…...

Cryptography 与 PyCryptodome 源码级解析

目录 Cryptography 与 PyCryptodome 源码级解析一、引言二、Cryptography 库源码解析2.1 Cryptography 库概述与设计理念2.2 核心模块与数据流分析2.2.1 目录结构与模块划分2.2.2 以 AES-GCM 模式为例的加解密实现2.2.3 源码示例解析 2.3 错误处理与边界检测 三、PyCryptodome …...

std::string的模拟实现

目录 string的构造函数 无参数的构造函数 根据字符串初始化 用n个ch字符初始化 用一个字符串的前n个初始化 拷贝构造 用另一个string对象的pos位置向后len的长度初始化 [ ]解引用重载 迭代器的实现 非const版本 const版本 扩容reserve和resize reserve resize p…...

GPU、NPU与LPU:大语言模型(LLM)硬件加速器全面对比分析

引言&#xff1a;大语言模型计算基础设施的演进 随着大语言模型&#xff08;LLM&#xff09;的快速发展与广泛应用&#xff0c;高性能计算硬件已成为支撑LLM训练与推理的关键基础设施。目前市场上主要有三类处理器用于加速LLM相关任务&#xff1a;GPU&#xff08;图形处理单元…...

常见限流算法

限流是指在高并发、大流量请求的情况下&#xff0c;限制新的流量对系统的访问&#xff0c;以保证系统服务的安全性。常见的限流算法及其详细介绍如下&#xff1a; 计数器算法&#xff08;Fixed Window Counter&#xff09; 原理&#xff1a;使用一个固定时间窗口内的计数器来…...

美国国家航空航天局(NASA)的PUNCH任务

地球浸没在来自太阳的物质流中。这种被称为太阳风的流正在冲刷我们的星球,造成令人叹为观止的极光,影响太空中的卫星和宇航员,甚至影响地面基础设施。 美国宇航局 (NASA) 的 PUNCH(统一日冕和日球层旋光仪 Polarimeter to Unify the Corona and Heliosphere)任务将首次…...

REST API前端请求和后端接收

1、get请求&#xff0c;带"?" http://localhost:8080/api/aop/getResult?param123 GetMapping("getResult")public ResponseEntity<String> getResult(RequestParam("param") String param){return new ResponseEntity<>("12…...

OpenBMC:BmcWeb构造connect对象

OpenBMC:BmcWeb server.run-CSDN博客 server在接收了tcp连接请求后,会构造一个ConnectionType对象,然后通过post调度,运行该对象的start函数 1.ConnectionType类型 其实也就是using ConnectionType = Connection<Adaptor, Handler>;类型 由于ConnectionType实例化于…...

ESLint 深度解析:原理、规则与插件开发实践

在前端开发的复杂生态中&#xff0c;保障代码质量与规范性是构建稳健、可维护项目的基石。ESLint 作为一款强大的代码检查工具&#xff0c;其默认规则与插件能满足多数常见需求&#xff0c;但面对特定团队规范或项目独特要求&#xff0c;自定义 ESLint 插件便成为有力的扩展手段…...

ios使用swift调用deepseek或SiliconFlow接口

调用SiliconFlow API 注册并获取API密钥&#xff1a;打开硅基流动平台官网Models&#xff0c;进行注册和认证。登录后&#xff0c;进入首页&#xff0c;点击左上角三个横杠&#xff0c;选择API密钥&#xff0c;生成密钥并复制。配置第三方应用&#xff1a;打开安装好的Chatbox…...

贪心算法一

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;了解什么是贪心算法&#xff0c;并且掌握贪心算法。 > 毒鸡汤&#xff1a;有些事情&#xff0c;总是不明白&#xff0c;所以我不会坚持。早安! >…...

Java进阶:Dubbo

分布式RPC框架Apache Dubbo 1. 软件架构的演进过程 软件架构的发展经历了由单体架构、垂直架构、SOA架构到微服务架构的演进过程&#xff0c;下面我们分别了解一下这几个架构。 1.1 单体架构 架构说明&#xff1a; 全部功能集中在一个项目内&#xff08;All in one&#xf…...

【Day9】make/makeFile如何让项目构建自动化起飞

【Day9】make/makeFile如何让项目构建自动化起飞 使用make命令编写makefile文件依赖管理增量构建makefile注释&#xff1a;#makefile其他语法 make/makefile递归式工作过程 在Linux中&#xff0c;项目自动化构建是指使用一系列工具和脚本来自动执行软件项目的编译、测试、打包和…...

SCI1区TOP:自适应学习粒子群算法SLPSO,深度解析+性能实测

目录 1.摘要2.改进策略3.自适应学习粒子群算法4.结果展示5.参考文献6.获取代码 1.摘要 粒子群算法&#xff08;PSO&#xff09;是一种基于种群的随机搜索方法&#xff0c;广泛应用于科学和工程领域的连续空间优化问题&#xff0c;并已证明其高效性和有效性。许多实际问题的往往…...

迷你世界脚本显示板管理接口:DisPlayBoard

显示板管理接口&#xff1a;DisPlayBoard 迷你世界 更新时间: 2023-04-26 10:21:14 具体函数名及描述如下: 序号 函数名 函数描述 1 showBoard(...) 对玩家显示显示板 2 hideBoard(...) 对玩家隐藏显示板 3 setBoardPicture 对玩家设置显示板的图片…...

如何使用 LLM 生成的术语自动在搜索应用程序上构建 autocomplete 功能

作者&#xff1a;来自 Elastic Michael Supangkat 了解如何在 Elastic Cloud 中&#xff0c;通过使用 LLM 生成的词汇&#xff0c;为搜索应用增强自动补全功能&#xff0c;实现更智能、更动态的搜索建议。 自动补全是搜索应用中的一项关键功能&#xff0c;它通过在用户输入时实…...

电路基础:【1】PN结二极管制作电桥点亮LED灯

第一章&#xff1a;PN结二极管制作电桥点亮LED灯 文章目录 第一章&#xff1a;PN结二极管制作电桥点亮LED灯前言一、电路原理二、电路图与元器件1.电路图 做实验总结 前言 在本章中&#xff0c;我们将探讨如何通过PN结二极管制作电桥电路&#xff0c;并利用该电路点亮LED灯。L…...

蓝桥与力扣刷题(蓝桥 门牌制作)

题目&#xff1a;小蓝要为一条街的住户制作门牌号。 这条街一共有 2020 位住户&#xff0c;门牌号从 1 到 2020编号。 小蓝制作门牌的方法是先制作 0 到 9 这几个数字字符&#xff0c;最后根据需要将字符粘贴到门牌上&#xff0c;例如门牌 1017 需要依次粘贴字符 1、0、1、7&…...

unity console日志双击响应事件扩展

1 对于项目中一些比较长的日志&#xff0c;比如前后端交互协议具体数据等&#xff0c;这些日志内容可能会比较长&#xff0c;在unity控制面板上查看不是十分方便&#xff0c;我们可以对双击事件进行扩展&#xff0c;将日志保存到一个文本中&#xff0c;然后用系统默认的文本查看…...

基于Django创建一个WEB后端框架(DjangoRestFramework+MySQL)流程

一、Django项目初始化 1.创建Django项目 Django-admin startproject 项目名 2.安装 djangorestframework pip install djangorestframework 解释: Django REST Framework (DRF) 是基于 Django 框架的一个强大的 Web API 框架&#xff0c;提供了多种工具和库来构建 RESTf…...

unittest框架 核心知识的系统复习及与pytest的对比

1. unittest 介绍 是什么&#xff1a;Python 标准库自带的单元测试框架&#xff0c;遵循 xUnit 架构&#xff08;类似Java的JUnit&#xff09;。 核心概念&#xff1a; TestCase&#xff1a;测试用例的基类&#xff0c;所有测试类需继承它。 TestSuite&#xff1a;测试套件&a…...

嵌入式硬件设计SPI时需要注意什么?

嵌入式硬件设计SPI时需要注意什么? 1. 硬件设计注意事项 关键点注意事项1. 信号完整性- 缩短SCK、MOSI、MISO的走线长度,避免反射干扰。- 使用屏蔽线或差分信号(高速场景)。- 阻抗匹配(特别是高频信号,如50Ω端接)。2. 电源与地线- 电源去耦:每个SPI芯片的VCC附近放置0…...

vscode远程ssh链接服务器

前提&#xff1a;安装并配置好 ssh 服务,并且远程主机和本地主机在同一个局域网。 降级到1.85.2版本并禁用自动更新&#xff0c;因为最新的vscode不支持remote SSH。 【VS Code】VS Code不再支持remote SSH 1.在vscode 扩展中搜索Remote - SSH,下载安装扩展 2.点击 远程资源管理…...