性能優化 - 高級進階: Spring Boot服務性能優化

文章目錄

    • 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;表示一個**“事件驅動…