TDengine TIMEDIFF() 函數用戶使用手冊

在這里插入圖片描述

TDengine TIMEDIFF() 函數詳細使用手冊

目錄

  • 功能概述
  • 函數語法
  • 參數說明
  • 返回值說明
  • 版本變更說明
  • 技術特性
  • 使用場景及示例
  • 時間單位處理
  • 數據類型兼容性
  • 注意事項
  • 常見問題
  • 最佳實踐

功能概述

TIMEDIFF() 函數用于計算兩個時間戳的差值,返回 expr1 - expr2 的結果。結果可能為負值,并可以近似到指定的時間單位。該函數在時序數據分析中特別有用,可以用于計算事件間隔、數據延遲、持續時間等場景。

函數語法

TIMEDIFF(expr1, expr2 [, time_unit])

參數說明

參數類型說明是否必需
expr1BIGINT、TIMESTAMP、VARCHAR、NCHAR時間戳表達式(被減數)
expr2BIGINT、TIMESTAMP、VARCHAR、NCHAR時間戳表達式(減數)
time_unitSTRING返回結果的時間單位,可選參數

計算公式

結果 = expr1 - expr2 (以 time_unit 為單位)

返回值說明

  • 數據類型:BIGINT
  • 計算結果:expr1 與 expr2 的差值,以指定時間單位表示
  • 正負值
    • 正值:expr1 > expr2
    • 負值:expr1 < expr2
    • 零值:expr1 = expr2
  • NULL處理:當 expr1 或 expr2 為 NULL 時,返回 NULL

版本變更說明

?? 重要版本差異

v3.3.3.0 之前版本

  • 返回結果為 絕對值(始終為正數)
  • 計算公式:ABS(expr1 - expr2)

v3.3.3.0 及之后版本

  • 返回結果可能為 負值
  • 計算公式:expr1 - expr2
-- 示例:版本行為差異
SELECT TIMEDIFF('2025-09-03 10:00:00', '2025-09-03 10:05:00', 1s) as `時間差`;-- v3.3.3.0 之前:返回 300 (絕對值)
-- v3.3.3.0 及之后:返回 -300 (真實差值)

技術特性

支持的數據類型

expr1 和 expr2 支持的類型:
  1. BIGINT:時間戳數值
  2. TIMESTAMP:標準時間戳類型
  3. VARCHAR/NCHAR:符合 ISO8601/RFC3339 標準的日期時間格式字符串
支持的時間格式示例:
-- ISO8601 格式
'2025-09-03T10:30:45.123Z'
'2025-09-03T10:30:45+08:00'-- RFC3339 格式  
'2025-09-03 10:30:45.123'
'2025-09-03 10:30:45'-- 時間戳數值(根據數據庫精度)
1693737045123  -- 毫秒時間戳
1693737045123456  -- 微秒時間戳

支持的時間單位

時間單位符號說明換算關系
納秒1bnanosecond基礎單位
微秒1umicrosecond1,000 納秒
毫秒1amillisecond1,000,000 納秒
1ssecond1,000,000,000 納秒
分鐘1mminute60 秒
小時1hhour60 分鐘
1dday24 小時
1wweek7 天

時間精度規則

  • 輸入時間戳精度:由所查詢表的精度確定
  • 未指定表時:默認精度為毫秒
  • 最小時間單位:不能小于數據庫的時間分辨率
  • 未指定 time_unit:使用數據庫的時間分辨率作為時間單位

使用場景及示例

1. 基礎時間差計算

-- 創建簡單的事件表
CREATE STABLE events (ts TIMESTAMP,event_name NCHAR(50)
) TAGS (device_id INT);CREATE TABLE device_01 USING events TAGS (1);-- 插入測試數據
INSERT INTO device_01 VALUES ('2025-09-03 10:00:00', '開機'),('2025-09-03 10:30:00', '運行'),('2025-09-03 11:00:00', '關機');
簡單的時間差計算
-- 計算每個事件距離開機時間的差值
SELECT ts,event_name,TIMEDIFF(ts, '2025-09-03 10:00:00', 1m) as `分鐘差`,TIMEDIFF(ts, '2025-09-03 10:00:00', 1s) as `秒數差`
FROM device_01
ORDER BY ts;

輸出結果

+---------------------+-----------+--------+--------+
| ts                  | event_name| 分鐘差 | 秒數差 |
+---------------------+-----------+--------+--------+
| 2025-09-03 10:00:00 | 開機      | 0      | 0      |
| 2025-09-03 10:30:00 | 運行      | 30     | 1800   |
| 2025-09-03 11:00:00 | 關機      | 60     | 3600   |
+---------------------+-----------+--------+--------+

2. 不同數據類型的使用

-- 字符串格式時間
SELECT TIMEDIFF('2025-09-03 11:00:00', '2025-09-03 10:00:00', 1h) as `小時差`;
-- 結果: 1-- 時間戳數值(毫秒)
SELECT TIMEDIFF(1693742400000, 1693738800000, 1h) as `小時差`;
-- 結果: 1-- 混合類型
SELECT TIMEDIFF('2025-09-03 11:00:00', 1693738800000, 1m) as `分鐘差`;
-- 結果: 60

3. 正負值示例

-- 正值:第一個時間大于第二個時間
SELECT TIMEDIFF('2025-09-03 11:00:00', '2025-09-03 10:00:00', 1h) as `正值`;
-- 結果: 1-- 負值:第一個時間小于第二個時間  
SELECT TIMEDIFF('2025-09-03 10:00:00', '2025-09-03 11:00:00', 1h) as `負值`;
-- 結果: -1-- 零值:時間相同
SELECT TIMEDIFF('2025-09-03 10:00:00', '2025-09-03 10:00:00', 1h) as `零值`;
-- 結果: 0

4. 不同時間單位的轉換

-- 同一時間差用不同單位表示
SELECT TIMEDIFF('2025-09-03 10:05:30', '2025-09-03 10:00:00', 1s) as ``,TIMEDIFF('2025-09-03 10:05:30', '2025-09-03 10:00:00', 1m) as `分鐘`,TIMEDIFF('2025-09-03 10:05:30', '2025-09-03 10:00:00', 1a) as `毫秒`;

輸出結果

+-----+------+-------+
| 秒  | 分鐘 | 毫秒  |
+-----+------+-------+
| 330 | 5    | 330000|
+-----+------+-------+

5. 傳感器數據簡單分析

-- 創建溫度傳感器表
CREATE STABLE temperature (ts TIMESTAMP,temp FLOAT
) TAGS (sensor_id INT);CREATE TABLE sensor_01 USING temperature TAGS (1);-- 插入數據
INSERT INTO sensor_01 VALUES ('2025-09-03 14:00:00', 25.0),('2025-09-03 14:05:00', 26.0),('2025-09-03 14:10:00', 24.5);-- 計算采集間隔
SELECT ts,temp,TIMEDIFF(ts, '2025-09-03 14:00:00', 1m) as `經過分鐘數`
FROM sensor_01
ORDER BY ts;

6. NULL 值處理

-- NULL 值示例(基于實際測試結果)
SELECT TIMEDIFF(NULL, NULL, 1h) as `結果1`;
-- 結果: NULLSELECT TIMEDIFF('2025-09-03 11:00:00', NULL, 1h) as `結果2`;
-- 結果: NULLSELECT TIMEDIFF(NULL, '2025-09-03 10:00:00', 1s) as `結果3`;
-- 結果: NULLSELECT TIMEDIFF('2025-09-03 10:00:00', '2025-09-03 09:00:00', NULL) as `結果4`;
-- 結果: 使用默認單位(數據庫精度)

7. 錯誤格式處理

-- 有效格式
SELECT TIMEDIFF('2025-09-03 10:00:00', '2025-09-03 09:00:00', 1h) as `有效格式`;
-- 結果: 1-- 無效格式(返回 NULL)
SELECT TIMEDIFF('2025/09/03 10:00:00', '2025/09/03 09:00:00', 1h) as `無效格式`;
-- 結果: NULL

8. 實際應用場景

設備運行時長統計
-- 計算設備今天的運行時長
SELECT '設備運行時長' as `統計項目`,TIMEDIFF(NOW(), '2025-09-03 08:00:00', 1h) as `運行小時數`,TIMEDIFF(NOW(), '2025-09-03 08:00:00', 1m) as `運行分鐘數`;
數據延遲監控
-- 檢查數據是否及時到達
SELECT ts,temp,TIMEDIFF(NOW(), ts, 1m) as `延遲分鐘數`,CASE WHEN TIMEDIFF(NOW(), ts, 1m) > 10 THEN '數據延遲'ELSE '正常'END as `狀態`
FROM sensor_01
ORDER BY ts DESC;
事件持續時間
-- 計算事件持續時間
SELECT '系統維護' as `事件`,'2025-09-03 02:00:00' as `開始時間`,'2025-09-03 04:30:00' as `結束時間`,TIMEDIFF('2025-09-03 04:30:00', '2025-09-03 02:00:00', 1h) as `持續小時`,TIMEDIFF('2025-09-03 04:30:00', '2025-09-03 02:00:00', 1m) as `持續分鐘`;

時間單位處理

1. 時間單位精度限制

-- 時間單位不能小于數據庫精度
-- 假設數據庫精度為毫秒(ms)SELECT TIMEDIFF('2025-09-03 10:00:01.000', '2025-09-03 10:00:00.000', 1a) as `有效毫秒`,   -- 有效TIMEDIFF('2025-09-03 10:00:01.000', '2025-09-03 10:00:00.000', 1u) as `微秒近似`, -- 可能無效或近似TIMEDIFF('2025-09-03 10:00:01.000', '2025-09-03 10:00:00.000', 1b) as `納秒近似`; -- 可能無效或近似

2. 時間單位近似處理

-- 時間差的近似處理示例
SELECT ts,-- 精確到秒的計算TIMEDIFF(ts, '2025-09-03 10:00:00.000', 1s) as `秒數精確`,-- 精確到分鐘的計算(會進行近似)TIMEDIFF(ts, '2025-09-03 10:00:00.000', 1m) as `分鐘近似`
FROM device_01;

數據類型兼容性

1. 時間戳數值與字符串混用

-- 創建包含不同時間戳格式的表
CREATE TABLE mixed_time_data (ts TIMESTAMP,ts_bigint BIGINT,ts_varchar VARCHAR(30),value FLOAT
);-- 插入混合格式數據
INSERT INTO mixed_time_data VALUES ('2025-09-03 10:00:00.000', 1693737600000, '2025-09-03 10:00:00', 100.0),('2025-09-03 10:05:00.000', 1693737900000, '2025-09-03 10:05:00', 200.0);-- 混合類型的時間差計算
SELECT -- TIMESTAMP 與 VARCHARTIMEDIFF(ts, ts_varchar, 1s) as `時間戳與字符串差`,-- BIGINT 與 TIMESTAMP  TIMEDIFF(ts_bigint, ts, 1s) as `數值與時間戳差`,-- VARCHAR 與 BIGINTTIMEDIFF(ts_varchar, ts_bigint, 1s) as `字符串與數值差`
FROM mixed_time_data;

2. 不同精度數據庫的行為

-- 微秒精度數據庫
CREATE DATABASE microsec_db PRECISION 'us';
USE microsec_db;-- 在微秒精度下的計算
SELECT TIMEDIFF('2025-09-03 10:00:00.123456', '2025-09-03 10:00:00.123000', 1u) as `微秒差`;
-- 結果:456-- 納秒精度數據庫  
CREATE DATABASE nanosec_db PRECISION 'ns';
USE nanosec_db;-- 在納秒精度下的計算
SELECT TIMEDIFF('2025-09-03 10:00:00.123456789', '2025-09-03 10:00:00.123456000', 1b) as `納秒差`;
-- 結果:789

注意事項

1. 版本兼容性

-- 檢查 TDengine 版本
SELECT SERVER_VERSION();-- 針對不同版本的兼容性處理
-- v3.3.3.0 之前:需要手動處理負值
SELECT CASE WHEN expr1 >= expr2 THEN TIMEDIFF(expr1, expr2, 1s)ELSE -TIMEDIFF(expr2, expr1, 1s)  -- 手動處理負值END as `兼容差值`
FROM some_table;-- v3.3.3.0 及之后:直接使用
SELECT TIMEDIFF(expr1, expr2, 1s) as `現代差值` FROM some_table;

2. 時區處理

-- TDengine 中的時間戳處理建議
-- 確保輸入的時間字符串格式一致
SELECT TIMEDIFF('2025-09-03T10:00:00+08:00', '2025-09-03T02:00:00Z', 1h) as `時區差`;

3. NULL 值處理的最佳實踐

-- 安全的 NULL 值處理
SELECT ts,temp,CASE WHEN TIMEDIFF(NOW(), ts, 1m) IS NULL THEN -1ELSE TIMEDIFF(NOW(), ts, 1m)END as `延遲分鐘數`
FROM sensor_01;-- 數據有效性檢查
SELECT ts,temp,CASE WHEN ts IS NULL THEN '時間為空'WHEN TIMEDIFF(NOW(), ts, 1m) IS NULL THEN '計算失敗'WHEN TIMEDIFF(NOW(), ts, 1m) < 0 THEN '未來時間'WHEN TIMEDIFF(NOW(), ts, 1m) > 1440 THEN '超過24小時'ELSE '正常'END as `數據狀態`
FROM sensor_01;

常見問題

Q1: TIMEDIFF 的參數順序是什么?

答案TIMEDIFF(expr1, expr2, time_unit)

  • expr1:被減數(結束時間)
  • expr2:減數(開始時間)
  • 結果 = expr1 - expr2
-- 正確理解參數順序
SELECT TIMEDIFF('2025-09-03 10:05:00', '2025-09-03 10:00:00', 1s) as `300`,TIMEDIFF('2025-09-03 10:00:00', '2025-09-03 10:05:00', 1s) as `300`;

Q2: 如何處理版本差異?

-- 創建兼容的查詢方式
SELECT CASE WHEN expr1 >= expr2 THEN TIMEDIFF(expr1, expr2, 1s)ELSE -TIMEDIFF(expr2, expr1, 1s)END as `兼容結果`
FROM your_table;

Q3: 為什么某些時間格式返回 NULL?

答案:TIMEDIFF 對時間格式要求嚴格,必須符合 ISO8601/RFC3339 標準。

-- 有效格式
SELECT TIMEDIFF('2025-09-03 10:00:00', '2025-09-03 09:00:00', 1h);     -- 返回 1
SELECT TIMEDIFF('2025-09-03T10:00:00Z', '2025-09-03T09:00:00Z', 1h);   -- 返回 1-- 無效格式  
SELECT TIMEDIFF('2025/09/03 10:00:00', '2025/09/03 09:00:00', 1h);     -- 返回 NULL
SELECT TIMEDIFF('09-03-2025 10:00:00', '09-03-2025 09:00:00', 1h);     -- 返回 NULL

Q4: 如何選擇合適的時間單位?

-- 根據應用場景選擇時間單位
-- 高頻監控:使用毫秒或微秒
SELECT TIMEDIFF(end_time, start_time, 1a) as `響應時間毫秒` FROM api_logs;-- 業務分析:使用秒或分鐘
SELECT TIMEDIFF(logout_time, login_time, 1m) as `會話時長分鐘` FROM user_sessions;-- 長期統計:使用小時或天
SELECT TIMEDIFF(current_date, created_date, 1d) as `活躍天數` FROM user_accounts;

常用時間單位速查

單位符號含義示例
1sTIMEDIFF(end_time, start_time, 1s)
1m分鐘TIMEDIFF(end_time, start_time, 1m)
1h小時TIMEDIFF(end_time, start_time, 1h)
1dTIMEDIFF(end_time, start_time, 1d)
1a毫秒TIMEDIFF(end_time, start_time, 1a)

最佳實踐

1. 數據類型統一

-- 推薦:在表設計時統一使用 TIMESTAMP 類型
CREATE STABLE sensor_data (ts TIMESTAMP,                    -- 統一的時間戳類型temperature FLOAT,humidity FLOAT
) TAGS (device_id INT, location NCHAR(50));-- 避免:混用多種時間類型
CREATE STABLE mixed_data (ts_timestamp TIMESTAMP,ts_varchar VARCHAR(30),          -- 避免ts_bigint BIGINT,               -- 避免value FLOAT
) TAGS (id INT);

2. 錯誤處理機制

-- 建立完善的錯誤處理
SELECT ts,event_name,CASE WHEN TIMEDIFF(NOW(), ts, 1s) IS NULL THEN 0ELSE TIMEDIFF(NOW(), ts, 1s)END as `安全時間差`
FROM events
ORDER BY ts;

3. 選擇合適的時間單位

-- 短時間間隔用秒或分鐘
SELECT TIMEDIFF('10:05:00', '10:00:00', 1m);  -- 5分鐘-- 長時間間隔用小時或天  
SELECT TIMEDIFF('2025-09-04', '2025-09-03', 1d);  -- 1天

4. 處理可能的 NULL 值

-- 方法1:使用 CASE WHEN 提供默認值
SELECT ts,temp,CASE WHEN TIMEDIFF(NOW(), ts, 1m) IS NULL THEN 0ELSE TIMEDIFF(NOW(), ts, 1m)END as `延遲分鐘數`
FROM sensor_01;-- 方法2:在 WHERE 子句中過濾 NULL
SELECT ts,temp,TIMEDIFF(NOW(), ts, 1m) as `延遲分鐘數`
FROM sensor_01
WHERE TIMEDIFF(NOW(), ts, 1m) IS NOT NULL;-- 方法3:確保輸入參數不為 NULL
SELECT TIMEDIFF(CASE WHEN end_time IS NULL THEN NOW() ELSE end_time END,CASE WHEN start_time IS NULL THEN '2025-09-03 00:00:00' ELSE start_time END,1m) as `安全的分鐘差`
FROM some_table;

總結

TIMEDIFF() 函數是 TDengine 中功能強大的時間差計算工具:

核心特性

  • 靈活的數據類型支持:TIMESTAMP、BIGINT、VARCHAR/NCHAR
  • 多樣的時間單位:從納秒到周的完整時間單位支持
  • 版本演進:v3.3.3.0 版本重要變更(支持負值)
  • 精度適配:自動適配數據庫時間精度設置

關鍵優勢

  • 類型兼容性強:支持多種時間數據類型混合計算
  • 精度控制靈活:可指定返回結果的時間單位
  • 錯誤處理完善:無效格式和 NULL 值的妥善處理
  • 性能表現優異:適合大規模時序數據分析

應用建議

  • 根據業務場景選擇合適的時間單位
  • 注意版本差異對結果符號的影響
  • 統一使用 TIMESTAMP 類型以獲得最佳性能
  • 建立完善的錯誤處理和數據質量檢查機制

正確使用 TIMEDIFF() 函數可以大大提升時序數據分析的效率和準確性,是 TDengine 時間序列處理的重要工具。

關于 TDengine

TDengine 是一款專為物聯網、工業互聯網等場景設計并優化的大數據平臺,其核心模塊是高性能、集群開源、云原生、極簡的時序數據庫。

它能安全高效地將大量設備每天產生的高達 TB 甚至 PB 級的數據進行匯聚、存儲、分析和分發,并提供 AI 智能體對數據進行預測與異常檢測,提供實時的商業洞察。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/921244.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/921244.shtml
英文地址,請注明出處:http://en.pswp.cn/news/921244.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據結構:棧和隊列(上)

匯總代碼見&#xff1a;登錄 - Gitee.com 上一篇文章&#xff1a;數據結構&#xff1a;雙向鏈表-CSDN博客 與本文相關的結構體傳參&#xff1a;自定義類型&#xff1a;結構體-CSDN博客 1.棧 1.1概念和結構 棧&#xff1a;一種特殊的線性表&#xff0c;其只允許在固定的一端…

文檔抽取技術:提取非結構化文檔中的關鍵信息,提升檔案管理、金融保險和法律合規領域的效率與準確性

在信息爆炸的時代&#xff0c;各種機構、企業等都面臨著海量非結構化文檔數據的挑戰。報告、合同、票據、檔案記錄、法律文書等文檔中蘊藏著巨大的數據&#xff0c;但傳統依靠人工閱讀、理解和錄入的方式效率低下、成本高昂且容易出錯。文檔抽取技術作為人工智能和自然語言處理…

雷柏VT1 MAX評測:原生中小手形電競鼠標 但既不僅限于中小手形 也不僅限于電競

一、前言&#xff1a;真正針對中小手形設計的電競鼠標 雷柏第二代VT系列電競鼠標我們已經體驗過很多款了&#xff0c;基本都是針對大中手形設計的外形模具&#xff0c;只有VT3s系列是VT3系列的縮小版&#xff0c;更適合中小手形使用&#xff0c;但也只是對中大手形模具重新優化…

新客戶 | TDengine 時序數據庫賦能開源鴻蒙物聯展區實時監控與展示

在工業物聯網快速發展的當下&#xff0c;企業普遍面臨著兩大挑戰&#xff1a;一是設備種類繁多、接入標準不一&#xff0c;導致系統建設容易陷入“數據孤島”&#xff1b;二是實時監控和多場景聯動的需求越來越強烈&#xff0c;但傳統數據庫在高頻寫入與多維分析上難以兼顧&…

深入剖析 ConcurrentHashMap:Java 并發編程的基石

目錄 【1】Java 7 中 ConcurrentHashMap 的實現原理 1.分段鎖&#xff08;Segment&#xff09; 2. 數據結構 3. 操作流程 【2】Java 8 中 ConcurrentHashMap 的改進 1.紅黑樹的引入 2.CAS 操作 3.數據結構的變化 【3】ConcurrentHashMap 的常用方法及使用示例 1.put(…

【會員專享數據】2020-2022年我國鄉鎮的逐日地表氣壓數據(Shp/Excel格式)

之前我們分享過2020—2022年中國0.01分辨率逐日地表氣壓柵格數據&#xff08;可查看之前的文章獲悉詳情&#xff09;&#xff01;該數據是研究者張凌, 胡英屹等發布在國家冰川凍土沙漠科學數據中心平臺上的高分辨地表氣壓數據。很多小伙伴拿到數據后反饋柵格數據不太方便使用&a…

第二階段WinForm-12:UI控件庫

1_驗證碼與條形碼 1.1_條碼基礎知識 條碼&#xff1a;條碼是由一組按一定編碼規則排列的條、空符號組成&#xff0c;用以表示一定的字符、數字及符號組成的信息 1.2_一維碼 &#xff08;1&#xff09;Code 128 Code 128 是一種密度很高的字母數字代碼系統&#xff0c;可對其…

別再誤會了!Redis 6.0 的多線程,和你想象的完全不一樣

技術解析核心誤區&#xff1a;Redis 6.0是完全多線程的嗎&#xff1f;No. Redis 6.0引入的多線程&#xff0c;只用于網絡I/O的讀寫和數據的解析。而核心的命令執行&#xff08;比如 GET, SET, HGETALL 等&#xff09;依然是單線程的。Redis的架構演進&#xff0c;就像是把一個復…

23種設計模式——抽象工廠模式(Abstract Factory Pattern)詳解

?作者簡介&#xff1a;大家好&#xff0c;我是 Meteors., 向往著更加簡潔高效的代碼寫法與編程方式&#xff0c;持續分享Java技術內容。 &#x1f34e;個人主頁&#xff1a;Meteors.的博客 &#x1f49e;當前專欄&#xff1a;設計模式 ?特色專欄&#xff1a;知識分享 &#x…

本地部署開源數據生成器項目實戰指南

本地部署開源數據生成器項目實戰指南 前言 在當今大數據和人工智能時代&#xff0c;高質量數據集對于模型訓練和算法開發至關重要。然而&#xff0c;獲取真實且合規的數據集往往面臨隱私、成本和法律等多重挑戰。合成數據生成技術為此提供了優雅的解決方案&#xff0c;它能夠…

2025React面試題集錦

1. React 是什么?它有哪些主要特點? React 是由Facebook開發的開源JavaScript庫,用于構建用戶界面(UI),尤其適合開發復雜的單頁應用(SPA)。 主要特點: 聲明式編程:只需描述UI應該是什么樣子(如return <div>Hello</div>),React會自動處理DOM更新,無需…

設計模式:迭代器模式(Iterator Pattern)

文章目錄一、概念二、實例分析三、示例代碼一、概念 迭代器模式 是一種 行為型設計模式&#xff0c;用于在不暴露集合對象內部結構的前提下&#xff0c;順序訪問集合中的元素。 換句話說&#xff1a; 集合類只負責數據存儲&#xff1b;迭代器類負責遍歷集合&#xff1b;使用者…

Vue 3 學習路線指南

階段一:基礎入門 (1-2周) 1.1 環境準備 # 安裝 Node.js (推薦 18+ 版本) # 安裝 Vue CLI 或使用 Vite npm create vue@latest my-vue-app cd my-vue-app npm install npm run dev1.2 Vue 3 核心概念 響應式系統:ref(), reactive(), computed() 組合式 API:setup() 函數 模…

使用 `hover:not-[:has(:hover)]` 避免「父元素和子元素同時 hover」時的樣式沖突

:hover:not-(:has(:hover)) has() CSS 4 引入的“父選擇器”&#xff0c;意思是&#xff1a;匹配那些里面包含某個子元素/狀態的元素。 例如&#xff1a;:has(:hover) 表示「自身包含正在被 hover 的子元素」。 :not() 取反偽類&#xff0c;表示不匹配里面的條件。 比如我…

第三十天-DMA串口實驗

一、DMA概述二、DMA通道注意&#xff0c;想要往串口中寫數據&#xff0c;外部請求信號應該是USARTx_TX&#xff0c;當DR寄存器為空時&#xff0c;產生TX信號&#xff0c;請求DMA。反之&#xff0c;從串口中讀數據&#xff0c;外部請求信號應該是USARTx_RX&#xff0c;當DR寄存器…

C/C++ 中的inline(內聯函數關鍵字)詳解

在 C/C 編程中&#xff0c;函數調用雖然帶來了代碼復用和可讀性提升&#xff0c;但頻繁調用小型函數可能會產生額外的調用開銷&#xff08;call overhead&#xff09;&#xff0c;比如棧幀的建立與銷毀、參數傳遞等。 為了減少這種開銷&#xff0c;C 引入了 inline&#xff08;…

2025 年高教社杯全國大學生數學建模競賽A 題 煙幕干擾彈的投放策略完整成品 思路 模型 代碼 結果 全網首發高質量!!!

煙幕干擾彈主要通過化學燃燒或爆炸分散形成煙幕或氣溶膠云團,在目標前方特定空域形成遮蔽&#xff0c;干擾敵方導彈&#xff0c;具有成本低、效費比高等優點。隨著煙幕干擾技術的不斷發展&#xff0c;現已有多種投放方式完成煙幕干擾彈的定點精確拋撒,即在拋撒前能精確控制煙幕…

嵌入式第四十五天(51單片機相關)

一.1.CPU、MPU、MCU、GPU&#xff1a; CPU&#xff08;中央處理器&#xff09;&#xff1a;計算機的核心部件&#xff0c;負責執行指令和處理數據。 MPU&#xff08;微處理器&#xff09;&#xff1a;通常指更通用的處理器&#xff0c;強調計算能力。 MCU&#xff08;微控制器&…

今天面了一個Java后端工程師,真的讓我猛抬頭

今天面了一個Java后端工程師,真的讓我猛抬頭啊. 現在面試不像傳統的八股文面試,我更多問的都是項目場景相關的問題,但是都能回答的不錯.這一點我還是很驚訝的。 不僅如此,她的技術也很扎實,對Java核心機制&#xff08;JVM、并發、集合等&#xff09;理解深入&#xff0c;回答…

攔截器和過濾器(理論+實操)

攔截器和過濾器 本文旨在夯實基礎以及實戰加深理解,目的是更深的理解以便掌握,希望能跟著動手敲一遍,絕對受益匪淺 在本文,我會先給出兩者的區別(理論知識),隨后是兩者各自的實操實現 文章目錄攔截器和過濾器什么是過濾器和攔截器?1.過濾器2.攔截器執行整體流程攔截器和過濾器…