文章目录

    • Pre
    • 引言:为何提前暴露指标与分析的重要性
    • 指标暴露与监控接入
      • Prometheus 集成
    • 性能剖析工具:火焰图与 async-profiler
      • async-profiler 下载与使用
      • 结合 Flame 图优化示例
    • HTTP 及 Web 层优化
      • CDN 与静态资源加速
      • Cache-Control/Expires 在 Nginx 中配置示例
      • 减少域名数量
      • Gzip 及资源压缩配置
      • Keep-Alive 配置
    • SpringBoot 容器调优
      • 自定义嵌入式 Tomcat
      • 替换 Undertow
      • JVM 参数回顾
    • 应用性能监控与分布式追踪
      • SkyWalking 集成
    • 各层优化思路
      • Controller 层
      • Service 层
        • 传统事务 vs 柔性事务
      • DAO 层
      • 缓存优化
      • 资源与线程管理
      • 端到端测试与压测
    • 小结

在这里插入图片描述


Pre

性能优化 - 理论篇:常见指标及切入点

性能优化 - 理论篇:性能优化的七类技术手段

性能优化 - 理论篇:CPU、内存、I/O诊断手段

性能优化 - 工具篇:常用的性能测试工具

性能优化 - 工具篇:基准测试 JMH

性能优化 - 案例篇:缓冲区

性能优化 - 案例篇:缓存

性能优化 - 案例篇:数据一致性

性能优化 - 案例篇:池化对象_Commons Pool 2.0通用对象池框架

性能优化 - 案例篇:大对象的优化

性能优化 - 案例篇:使用设计模式优化性能

性能优化 - 案例篇:并行计算

性能优化 - 案例篇:多线程锁的优化

性能优化 - 案例篇:CAS、乐观锁、分布式锁和无锁

性能优化 - 案例篇: 详解 BIO NIO AIO

性能优化 - 案例篇: 19 条常见的 Java 代码优化法则

性能优化 - 案例篇:JVM垃圾回收器

性能优化 - 案例篇:JIT

性能优化 - 案例篇:11种优化接口性能的通用方案

性能优化 - 高级进阶:JVM 常见优化参数


引言:为何提前暴露指标与分析的重要性

在正式进行性能优化之前,必须先“看得到”系统运行状况:缓存命中率、数据库连接池使用情况、响应时长分布、CPU/内存消耗、垃圾回收停顿等。只有掌握真实数据,才能有针对性地优化;盲目调整往往事倍功半,甚至适得其反。


指标暴露与监控接入

Prometheus 集成

  1. Maven 依赖

    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency><groupId>io.micrometer</groupId><artifactId>micrometer-core</artifactId>
    </dependency>
    <dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus</artifactId>
    </dependency>
    
  2. application.properties / application.yml 配置

    management.endpoint.metrics.enabled=true
    management.endpoint.prometheus.enabled=true
    management.endpoints.web.exposure.include=health,info,prometheus,metrics
    management.metrics.export.prometheus.enabled=true
    management.endpoint.health.show-details=always
    # 可根据需要开放其他端点,如 httptrace、threaddump
    
  3. 启动与访问

    • 启动后,访问 http://<host>:<port>/actuator/prometheus 可看到所有默认与自定义指标。

    • 配置 Prometheus server 抓取该 endpoint,例如在 prometheus.yml:

      scrape_configs:- job_name: 'springboot-app'metrics_path: '/actuator/prometheus'static_configs:- targets: ['app-host:port']
      
  4. 自定义业务指标示例

    @RestController
    public class TestController {private final MeterRegistry registry;public TestController(MeterRegistry registry) {this.registry = registry;}@GetMapping("/test")public String test() {registry.counter("app_test_invocations", "from", "127.0.0.1", "method", "test").increment();return "ok";}
    }
    
    • 在 Prometheus 中可见指标如 app_test_invocations_total{from="127.0.0.1",method="test"} 5.0

在这里插入图片描述

  • 对于缓存命中率,可在缓存拦截或 CacheManager 事件中注册 Counter/Gauge,例如:

    Cache<Object, Object> cache = ...; // 若使用 Caffeine,可 attach 监听
    // 当命中时 registry.counter("cache_hit", "cache", "myCache").increment();
    // 当未命中时 registry.counter("cache_miss", "cache", "myCache").increment();
    
  1. Grafana 可视化与 AlertManager

    • 在 Grafana 中配置 Prometheus 数据源,创建 Dashboard 展示:

      • JVM 内存、GC 停顿、线程数
      • HTTP 请求速率、延迟分布(可借助 Histogram/Summary)
      • 缓存命中率:hit/(hit+miss)
      • 数据库连接池使用率:活跃连接数 vs 最大连接数
    • AlertManager 配置告警规则,例如:

      • 95% 延迟超过阈值
      • GC 停顿时长过长
      • 连接池耗尽告警
    • 此部分可参考 Prometheus 与 Grafana 官方文档,自行搭建实验环境。

在这里插入图片描述


性能剖析工具:火焰图与 async-profiler

async-profiler 下载与使用

  1. 从 GitHub 下载 async-profiler release 包,解压至服务器目录,如 /opt/async-profiler

  2. 启动 SpringBoot 应用时,添加 javaagent 参数:

    java -agentpath:/opt/async-profiler/build/libasyncProfiler.so=start,svg,file=profile.svg -jar your-app.jar
    
  3. 运行一段业务场景(压测或真实流量),然后停止进程或通过 async-profiler 提供的 CLI 停止采样:

    # 若不想重启,可 attach 模式:
    ./profiler.sh -d 30 -f profile.svg <pid>
    
  4. 查看生成的 profile.svg,用浏览器打开:

在这里插入图片描述

  • 横轴表示消耗的采样比例,宽度越大表示更耗时的方法。
  • 纵向为调用栈层级。
  • 从最宽处逐层向下分析,找到热点方法,结合源代码定位优化点。

结合 Flame 图优化示例

  • 若热点在某个慢方法,可查看方法内部逻辑:是否存在不必要的循环、I/O 阻塞,或可并行优化。
  • 若热点在序列化/反序列化,可考虑更高效的库或减小返回对象结构。
  • 若大量时间在 GC,可结合 GC 日志分析堆配置是否合理。

HTTP 及 Web 层优化

在这里插入图片描述

CDN 与静态资源加速

  • 将常用静态资源(JS、CSS、图片)托管于 CDN,减轻后端压力;用户访问时由地理就近节点提供。
  • 对第三方库可使用公共 CDN;自有资源可上传到 CDN 或静态文件服务器。

Cache-Control/Expires 在 Nginx 中配置示例

location ~* \.(ico|gif|jpg|jpeg|png|css|js)$ {add_header Cache-Control "max-age=31536000, immutable";
}
  • 根据资源更新策略设置版本号或文件指纹,保证缓存命中又可及时更新。

减少域名数量

  • 将静态资源和 API 接口合理合并域名;避免过多不同子域导致 DNS 查询延迟。
  • 可启用 HTTP/2 时,多路复用可减少域名依赖,但 HTTP/2 支持需服务器和客户端皆启用。

Gzip 及资源压缩配置

gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_comp_level 6;
gzip_http_version 1.1;
gzip_types text/plain application/javascript text/css application/json;
  • 确保对动态 JSON 接口开启 gzip,减小响应体体积。
  • 对大型静态文件可在构建时先行压缩(如 Brotli),结合 Nginx 支持。

Keep-Alive 配置

  • 客户端与 Nginx:

    http {keepalive_timeout  60s 60s;keepalive_requests 10000;
    }
    
  • Nginx 与 SpringBoot 后端长连接:

    location / {proxy_pass http://backend;proxy_http_version 1.1;proxy_set_header Connection "";
    }
    
  • SpringBoot/Tomcat 默认支持 Keep-Alive;可通过自定义 Connector 调整超时。

SpringBoot 容器调优

自定义嵌入式 Tomcat

如果项目并发量比较高,想要修改最大线程数、最大连接数等配置信息,可以通过自定义Web 容器的方式,代码如下所示。

@SpringBootApplication(proxyBeanMethods = false)
public class App implements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> {public static void main(String[] args) {SpringApplication.run(App.class, args);}@Overridepublic void customize(ConfigurableServletWebServerFactory factory) {if (factory instanceof TomcatServletWebServerFactory) {TomcatServletWebServerFactory f = (TomcatServletWebServerFactory) factory;f.setProtocol("org.apache.coyote.http11.Http11Nio2Protocol");f.addConnectorCustomizers(c -> {Http11NioProtocol protocol = (Http11NioProtocol) c.getProtocolHandler();protocol.setMaxConnections(200);protocol.setMaxThreads(200);protocol.setConnectionTimeout(30000);// protocol.setSelectorTimeout(3000); // NIO2 可选项});}}
}
  • 设置协议为 NIO2 可在高并发 I/O 场景下提升性能;需基准测试验证。
  • setMaxThreadssetMaxConnections 值根据服务器硬件资源与业务并发调整,可在压测环境多次尝试并观察响应延迟、CPU 利用率、线程使用情况。
    在这里插入图片描述

替换 Undertow

  • pom.xml 中排除 Tomcat 并引入 Undertow:

    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></exclusion></exclusions>
    </dependency>
    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-undertow</artifactId>
    </dependency>
    
  • Undertow 线程模型和资源占用一般较轻;需要在业务场景中压测对比。

  • 注意部分 Tomcat 特有配置不适用,需调整监控指标对应项。

JVM 参数回顾

  • 结合性能优化 - 高级进阶:JVM 常见优化参数
    ,可启动时传入:

    -XX:+UseG1GC -Xms2048m -Xmx2048m -XX:+AlwaysPreTouch -XX:MaxMetaspaceSize=256m -XX:ReservedCodeCacheSize=240m -XX:MaxDirectMemorySize=512m
    -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/dumps -XX:ErrorFile=/path/to/hs_err_pid%p.log
    -Xlog:gc*,gc+age=trace,safepoint:file=logs/gc.log:utctime,pid,tags:filecount=5,filesize=100m
    
  • 根据硬件和应用特点调整堆大小;若GC停顿问题突出,可结合 async-profiler 和 GC 日志深入分析。


应用性能监控与分布式追踪

SkyWalking 集成

在这里插入图片描述

  1. 下载与部署

    • 下载 SkyWalking Agent 和后端服务(按存储类型,如 Elasticsearch 存储版)。
    • 部署 SkyWalking 后端:配置 Storage、UI、Collector。
  2. 启动应用时添加 Agent

    java -javaagent:/opt/skywalking-agent/skywalking-agent.jar \-Dskywalking.agent.service_name=your-service-name \-Dskywalking.collector.backend_service=collector-host:11800 \-jar your-app.jar
    
  3. 查看调用链与指标

    • 访问 SkyWalking UI,可看到每次请求的调用链图、各段耗时、数据库/HTTP 调用详情、JVM 指标、GC 指标。
    • 结合 Prometheus 等指标,综合判断:若某接口响应慢,可查看是哪一段(查询、序列化、远程调用等)成为瓶颈。
  4. 报警与自动化

    • 可结合 SkyWalking 的告警和 Prometheus AlertManager 设置阈值告警。
    • 定期分析热点接口和突发异常请求流,制定优化计划。

各层优化思路

Controller 层

  • DTO 精简与分页:避免一次性返回过大结果集;对列表数据使用分页或流式方式(如 Spring MVC StreamingResponseBody)。
  • JSON 序列化优化:选择高性能序列化库(Jackson 已较快,可开启 Afterburner 模块),避免将不必要字段序列化。
  • 输入校验与限流:对异常或恶意请求提前拦截,减少无效处理。
  • 幂等性与缓存:对可缓存接口,如 GET 查询,结合 HTTP 缓存头或后端缓存减少重复计算。

Service 层

  • 无状态设计:Service Bean 默认单例无状态,避免在 Bean 中维护请求级状态。

  • 合理拆分与职责分离:将复杂逻辑拆成小模块,便于监控与优化。

  • 异步与并行:对于可并行处理的子任务,可使用 CompletableFuture、异步消息队列等;但要注意线程池配置与上下文传递。

  • 缓存策略

    • 本地缓存(Caffeine):低延迟、减轻远程调用压力;监控命中率,避免缓存污染。
    • 分布式缓存(Redis):适用于共享场景;注意 TTL 策略、防止缓存穿透(布隆过滤、请求预热)、防止雪崩(加随机过期)、防止击穿(互斥锁或预加载)。

  • 避免重复计算与请求合并:对重复请求可合并或去重,减少下游压力。

  • 分布式事务讨论

    • 两阶段提交、TCC、本地消息表、MQ事务消息等方案都会增加延迟与资源占用;仅在必要场景使用。

在这里插入图片描述

  • 优先考虑补偿事务与柔性事务,实现最终一致性;通过幂等设计与补偿逻辑将风险和性能开销控制在可接受范围内。
    在这里插入图片描述

如上图,分布式事务要在改造成本、性能、时效等方面进行综合考虑。有一个介于分布式事务和非事务之间的名词,叫作柔性事务。柔性事务的理念是将业务逻辑和互斥操作,从资源层上移至业务层面。

传统事务 vs 柔性事务

关于传统事务和柔性事务,我们来简单比较一下。

ACID

关系数据库, 最大的特点就是事务处理, 即满足 ACID。

  • 原子性(Atomicity):事务中的操作要么都做,要么都不做。

  • 一致性(Consistency):系统必须始终处在强一致状态下。

  • 隔离性(Isolation):一个事务的执行不能被其他事务所干扰。

  • 持久性(Durability):一个已提交的事务对数据库中数据的改变是永久性的。

BASE

BASE 方法通过牺牲一致性和孤立性来提高可用性和系统性能。

BASE 为 Basically Available、Soft-state、Eventually consistent 三者的缩写,其中 BASE 分别代表:

  • 基本可用(Basically Available):系统能够基本运行、一直提供服务。

  • 软状态(Soft-state):系统不要求一直保持强一致状态。

  • 最终一致性(Eventual consistency):系统需要在某一时刻后达到一致性要求。

互联网业务,推荐使用补偿事务,完成最终一致性。比如,通过一系列的定时任务,完成对数据的修复。


DAO 层

  • ORM 使用注意

    • 懒加载原则:避免无意触发大量关联查询,合理使用 FetchType.LAZY,并在Service层通过显式查询或 DTO 投影避免 N+1。
    • 批量操作:对于大量写场景,使用批量插入/更新。
  • SQL 优化与索引:分析慢查询日志、使用 EXPLAIN 确认索引命中,避免全表扫描。

  • 分库分表注意:理解中间件实现原理,避免误以为简单 SQL 实现即高效;关注路由开销与合并成本。

  • 数据库连接池

    • HikariCP 默认已非常高效,但仍需监控活跃连接数、等待时长;根据业务并发调整最大连接数,避免连接池耗尽或空闲过多浪费资源。
    • 在 Prometheus 中可通过 HikariPool 指标收集连接使用情况,适时调整。

缓存优化

  • Caffeine:适合本地缓存,低延迟;需监控缓存大小、命中率、加载延迟;避免过大导致内存占用过高。

  • Redis

    • 连接池配置:监控和调整 Lettuce/Redisson 连接数;注意阻塞或过度并发导致连接耗尽。
    • 数据序列化:选择高效序列化方式(如 JSON、Kryo、FST 等),兼顾可读性与性能。
    • 缓存策略:参见上文防护策略;结合业务场景设计合理 TTL。
  • 二级缓存:对数据库读密集应用,可考虑本地+分布式二级缓存架构;注意缓存一致性。

资源与线程管理

  • 线程池配置

    • 对于异步任务、自定义 Executor,设置合适的 core/max pool size、queue size;监控线程活跃度、队列长度,防止任务堆积。
    • 对于定时任务,避免过多定时线程争抢资源。
  • 非阻塞与异步

    • 若业务适合,可使用 WebFlux 或 Reactor,但需慎重考虑团队熟悉度与实际场景;异步场景要注意线程切换开销和上下文传递。
    • 对外 HTTP 调用可使用异步 HTTP 客户端(如 WebClient),避免阻塞线程。

端到端测试与压测

  • 压测工具:wrk、JMeter、Locust 等
  • 测前准备:确保监控、日志、profiling 准备完毕;在测试环境部署与生产相近的架构。
  • 测试脚本设计:模拟真实业务流量,包括登录、查询、写入等混合场景。
  • 结果分析:结合 Prometheus/Grafana 监控数据和火焰图,找出瓶颈;反复调优并回归测试,评估改动效果。
  • 负载模型:考虑渐增负载测试、稳定性测试、持久压力测试,观察资源消耗与响应曲线。

小结

  • 指标采集—剖析—优化—验证是闭环流程:始终保持对系统可观测性。
  • 渐进式改动:在非生产环境验证,避免一次性大改带来风险;生产环境小步部署与监控回滚准备。
  • CI/CD 集成:可在持续集成/部署流程中集成简单的健康检查和性能基准测试。
  • 定期回顾:定时检查关键接口的性能指标,防止代码或依赖升级带来性能回退。
  • 团队协作:文档化优化经验,分享给团队成员,形成共识和规范。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/87587.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/87587.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/87587.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣网C语言编程题:除自身以外数组的乘积

一. 简介 本文记录力扣网上涉及数组方面的编程题&#xff0c;主要以 C语言实现。 二. 力扣上C语言编程题&#xff1a;涉及数组 题目&#xff1a;除自身以外数组的乘积 给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i…

SpringBoot扩展——发送邮件!

发送邮件 在日常工作和生活中经常会用到电子邮件。例如&#xff0c;当注册一个新账户时&#xff0c;系统会自动给注册邮箱发送一封激活邮件&#xff0c;通过邮件找回密码&#xff0c;自动批量发送活动信息等。邮箱的使用基本包括这几步&#xff1a;先打开浏览器并登录邮箱&…

【html】iOS26 液态玻璃实现效果

<!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>液体玻璃效果演示</title><style>bo…

探索算法秘境:量子随机游走算法及其在图论问题中的创新应用

目录 ​编辑 一、量子随机游走算法的起源与原理 二、量子随机游走算法在图论问题中的创新应用 三、量子随机游走算法的优势与挑战 四、结语 在算法研究的浩瀚星空中&#xff0c;总有一些领域如同遥远星系&#xff0c;闪烁着神秘而诱人的光芒。今天&#xff0c;我们将一同深…

C# 一维数组和矩形数组全解析

在编程的世界里&#xff0c;数组是一种非常重要的数据结构。今天&#xff0c;我们就来详细了解一下一维数组和矩形数组。 数组基础认知 数组实例是从 System.Array 继承类型的对象。由于它从 BCL 基类派生而来&#xff0c;所以继承了许多有用的成员&#xff1a; Rank 属性&a…

WebStorm编辑器侧边栏

目录 编辑器侧边栏行号配置行号隐藏行号 代码折叠侧边栏图标书签添加匿名书签添加助记符书签 运行和调试管理断点配置断点图标 版本控制配置Git Blame注释 编辑器侧边栏 编辑器左侧的垂直区域。当编写代码时&#xff0c;提供重要信息和操作图标。外观和行为可以根据你的喜好进…

腾讯云TCCA认证考试报名 - TDSQL数据库交付运维工程师(PostgreSQL版)

数据库交付运维工程师-腾讯云TDSQL(PostgreSQL版)认证 适合人群&#xff1a; 适合从事TDSQL(PostgreSQL版)交付、运维、售前咨询以及TDSQL(PostgreSQL版)相关项目的管理人员。 认证考试 单选*40道多选*20道 成绩查询 70分及以上通过认证&#xff0c;官网个人中心->认证考…

attn_mask 为 (1, 1) 时什么意思? 7,7又是什么意思?

在深度学习中&#xff0c;特别是在 Transformer 模型和注意力机制&#xff08;Attention Mechanism&#xff09;中&#xff0c;attn_mask&#xff08;注意力掩码&#xff09;是一个用于控制注意力计算的张量。它决定了在计算注意力分数时&#xff0c;哪些位置应该被关注&#x…

Qt联合Halcon开发二:Halcon窗口绑定Qt控件显示Hobject图像【详细图解流程】

1. 项目准备 在本项目中&#xff0c;我们将使用Qt框架与Halcon库结合&#xff0c;展示图像并进行图像处理。首先&#xff0c;确保你已经配置好Qt和Halcon的开发环境。 环境配置可查看上篇文章 2. 创建Qt界面 在Qt中&#xff0c;创建一个窗口并拖入按钮和Graphics View控件。G…

Redis 持久化机制详解:RDB、AOF 原理与面试最佳实践(AOF篇)

在上一章我们深入学习了 Redis 中重要的数据持久化机制 ——RDB&#xff08;Redis Database&#xff09;&#xff0c;了解了其通过周期性快照将数据以二进制文件形式保存到磁盘的原理&#xff0c;包括触发条件、文件结构以及优缺点等核心内容。 Redis 持久化机制详解&#xff…

【GateWay】和权限验证

【GateWay】网关详解和权限验证 一、Gateway 核心概念与架构二、路由断言&#xff08;Route Predicates&#xff09;详解三、过滤器&#xff08;Filters&#xff09;机制四、权限认证的核心理论模型五、Spring Cloud Gateway Security OAuth2 集成方案六、OAuth2.0 集成 一、…

QSqlDatabase: QSQLITE driver not loaded

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言可能的原因解决办法1. 确认 SQLite 驱动插件文件2. 拷贝插件文件到应用程序目录3. 设置插件搜索路径4. 安装 SQLite 依赖库5. 解决 QCoreApplication 实例问题 …

20250619在荣品的PRO-RK3566开发板的Android13下解决海罗光电有限公司HL070T58C-05屏在启动的时候出现白色条纹的问题【时序】

20250619在荣品的PRO-RK3566开发板的Android13下解决海罗光电有限公司HL070T58C-05屏在启动的时候出现白色条纹的问题 2025/6/19 20:39 缘起&#xff1a;荣品的PRO-RK3566开发板的Android13下&#xff0c;点亮海罗光电有限公司HL070T58C-05屏。 在启动的时候会出现花屏/白色条纹…

docker使用Volume对Nginx进行挂载

需求&#xff1a; 需要将Nginx的欢迎页面也就是index.html文件进行修改。 原始方法&#xff1a;由于docker会为每一个容器创建其对应的文件信息&#xff0c;但是创建的信息内容只有其最基础的运行信息&#xff0c;所以想要直接去访问其index.html就无法做到。 使用volume&am…

基于springboot的宠物服务预约系统

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c;没有什么华丽的语言&#xff0…

idea 2025会在用户目录创建IdeaSnapshots文件夹

推荐一个api管理测试工具 一个简单的API测试和编写文档的工具 idea 2025会在用户目录创建IdeaSnapshots文件夹 解决方案 打开 Profiler 点击 setting 参考 https://youtrack.jetbrains.com/articles/SUPPORT-A-1086/How-to-change-or-turn-off-the-IdeaSnapshots-folder-…

【Mini-F5265-OB开发板试用测评】2、PWM驱动遥控车RX2接收解码带马达驱动控制IC

手头有带转向电机和动力电机小车底盘&#xff0c;买了很久一直在吃灰。 最近查了一下小车的驱动IC是富满微的8D420L,是一款传统的RX2接收解码芯片&#xff0c;带马达驱动。 手头没有TX2发送芯片&#xff0c;所以考虑用MCU直接发送PWM直接接入RX2&#xff0c;可能可以驱动。 一…

Tcpdump网络抓包工具详解!

一、简介 tcpdump就是&#xff1a;dump the traffic on a network&#xff0c;根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump是一个用于截取网络分组&#xff0c;并输出分组内容的工具。凭借强大的功能和灵活的截取策略&#xff0c;使其成为类UNIX系统下用…

Spring Boot的Security安全控制——应用SpringSecurity!

应用Spring Security 前面介绍了在项目开发时为什么选择Spring Security&#xff0c;还介绍了它的原理。本节开始动手实践Spring Security的相关技术。 实战&#xff1a;Spring Security入门 现在开始搭建一个新项目&#xff0c;实践一个Spring Security的入门程序。 &…

FPGA基础 -- Verilog行为级建模之alawys语句

Verilog 中的 always 语句块&#xff0c;这是行为级建模的核心结构之一&#xff0c;在 RTL 级设计中广泛用于时序逻辑和组合逻辑的建模。 一、什么是 always 语句&#xff1f; ✅ 定义&#xff1a; always 语句用于描述可综合的硬件行为逻辑&#xff0c;表示一个**“事件驱动…