OpenHarmony之 藍牙子系統全棧剖析:從協議棧到芯片適配的端到端實踐(大合集)

1. 系統架構概述

OpenHarmony藍牙系統采用分層架構設計,基于HDF(Hardware Driver Foundation)驅動框架和系統能力管理(System Ability)機制實現。

1.1 架構層次

┌─────────────────────────────────────────────────────────────┐
│                    應用層 (Application)                      │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐          │
│  │   C API     │  │  ArkTS API  │  │  C++ API    │          │
│  └─────────────┘  └─────────────┘  └─────────────┘          │
├─────────────────────────────────────────────────────────────┤
│                    框架層 (Framework)                        │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐          │
│  │  適配器層    │  │  IPC通信    │  │  接口管理   │          │
│  └─────────────┘  └─────────────┘  └─────────────┘          │
├─────────────────────────────────────────────────────────────┤
│                    服務層 (Service)                        │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐          │
│  │Host Server  │  │Profile服務  │  │GATT服務     │          │
│  └─────────────┘  └─────────────┘  └─────────────┘          │
├─────────────────────────────────────────────────────────────┤
│                    驅動層 (Driver)                         │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐          │
│  │   HDF驅動   │  │  芯片適配   │  │  協議棧     │          │
│  └─────────────┘  └─────────────┘  └─────────────┘          │
└─────────────────────────────────────────────────────────────┘

1.2 核心組件

1.2.1 藍牙框架倉庫
  • 路徑: foundation/communication/bluetooth
  • 功能: 提供C/C++/JS API接口和框架實現
  • 關鍵模塊:
    • frameworks/inner/: 內部框架實現
    • frameworks/c_api/: C語言接口實現
    • frameworks/js/napi/: JS/ArkTS接口實現
    • interfaces/: API接口定義
1.2.2 藍牙服務倉庫
  • 路徑: foundation/communication/bluetooth_service
  • 功能: 系統服務實現,系統能力ID為1130
  • 關鍵配置:
    • sa_profile/1130.json: 系統能力配置
    • services/bluetooth/server/: 服務實現

2. 系統能力管理

2.1 系統能力配置

系統能力ID: 1130 (bluetooth_service)

配置文件: foundation\communication\bluetooth_service\sa_profile\1130.json

{"process": "bluetooth_service","systemability": [{"name": 1130,"libpath": "libbluetooth_server.z.so","run-on-create": true,"distributed": false,"dump_level": 1}]
}

2.2 服務啟動流程

  1. Init進程解析1130.json配置文件
  2. 加載libbluetooth_server.z.so
  3. 創建BluetoothHostServer實例
  4. 注冊系統能力到SystemAbilityManager

3. 核心接口定義

3.1 C API接口

頭文件: foundation\communication\bluetooth\interfaces\c_api\include\oh_bluetooth.h

3.1.1 藍牙開關狀態查詢
/*** @brief 獲取藍牙開關狀態* @param state 輸出參數,返回當前狀態* @return 0表示成功,非0表示錯誤碼*/
Bluetooth_ResultCode OH_Bluetooth_GetBluetoothSwitchState(Bluetooth_SwitchState *state);
3.1.2 狀態枚舉定義

foundation\communication\bluetooth\interfaces\c_api\include\oh_bluetooth.h

typedef enum Bluetooth_SwitchState {BLUETOOTH_STATE_OFF = 0,           // 藍牙關閉BLUETOOTH_STATE_TURNING_ON = 1,    // 藍牙開啟中BLUETOOTH_STATE_ON = 2,            // 藍牙已開啟BLUETOOTH_STATE_TURNING_OFF = 3,   // 藍牙關閉中BLUETOOTH_STATE_BLE_TURNING_ON = 4, // BLE模式開啟中BLUETOOTH_STATE_BLE_ON = 5,        // BLE模式已開啟BLUETOOTH_STATE_BLE_TURNING_OFF = 6  // BLE模式關閉中
} Bluetooth_SwitchState;

3.2 系統服務接口

頭文件: foundation\communication\bluetooth_service\services\bluetooth\server\include\bluetooth_host_server.h

3.2.1 核心服務方法
class BluetoothHostServer : public SystemAbility {int32_t EnableBt() override;                    // 啟用藍牙int32_t DisableBt() override;                   // 禁用藍牙int32_t GetBtState(int32_t &state) override;    // 獲取藍牙狀態int32_t EnableBle(bool noAutoConnect = false);  // 啟用BLEint32_t DisableBle() override;                  // 禁用BLE
};

4. 實現原理

4.1 藍牙狀態管理

4.1.1 狀態轉換圖
[OFF] → [TURNING_ON] → [ON]↑           ↓
[TURNING_OFF] ← [TURNING_OFF][OFF] → [BLE_TURNING_ON] → [BLE_ON]↑           ↓
[BLE_TURNING_OFF] ← [BLE_TURNING_OFF]
4.1.2 狀態同步機制

實現位置: foundation\communication\bluetooth\frameworks\inner\src\bluetooth_host.cpp

// 狀態同步實現
void BluetoothHost::impl::BluetoothHostObserverImp::OnStateChanged(int32_t transport, int32_t status) {// 同步隨機地址到服務if (status == BTStateID::STATE_TURN_ON) {host_.SyncRandomAddrToService();}// 通知所有觀察者host_.observers_.ForEach([transport, status](auto observer) {observer->OnStateChanged(transport, status);});
}

4.2 服務發現機制

4.2.1 SystemAbilityManager交互

init進程可以通過SystemAbilityManager獲取藍牙服務

// 加載藍牙服務
bool BluetoothHost::impl::LoadBluetoothHostService() {auto samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();if (samgr == nullptr) {return false;}// 異步加載系統能力int32_t ret = samgr->LoadSystemAbility(BLUETOOTH_HOST_ABILITY_ID, nullptr);return ret == ERR_OK;
}

4.3 進程間通信(IPC)

4.3.1 IPC接口定義

接口文件: frameworks/inner/ipc/interface/

核心接口:

  • IBluetoothHost: 主機服務接口
  • IBluetoothGattClient: GATT客戶端接口
  • IBluetoothGattServer: GATT服務器接口
  • IBluetoothBleAdvertiser: BLE廣播接口

5. 關鍵源碼路徑

5.1 框架實現

5.1.1 主機管理
  • 文件: foundation/communication/bluetooth/frameworks/inner/src/bluetooth_host.cpp
  • 功能: 藍牙主機狀態管理、服務發現
5.1.2 C API實現
  • 文件: foundation/communication/bluetooth/frameworks/c_api/src/oh_bluetooth.cpp
  • 功能: C語言接口的具體實現

5.2 服務實現

5.2.1 主機服務
  • 文件: foundation/communication/bluetooth_service/services/bluetooth/server/src/bluetooth_host_server.cpp
  • 功能: 系統服務的主要實現
5.2.2 Profile服務
  • 路徑: foundation/communication/bluetooth_service/services/bluetooth/server/src/
  • 包含: A2DP, AVRCP, GATT, HID等Profile服務

5.3 配置文件

5.3.1 系統能力配置
  • 文件: foundation/communication/bluetooth_service/sa_profile/1130.json
  • 功能: 定義藍牙服務的系統能力參數
5.3.2 構建配置
  • 文件: bluetooth/bundle.json
  • 功能: 定義組件依賴和構建參數

6. 調試方法

6.1 日志系統

6.1.1 日志標簽
  • 框架日志: bt_fwk_host
  • C API日志: bt_c_api_ohbluetooth
  • 服務日志: bluetooth_service
6.1.2 日志查看命令
# 查看藍牙框架日志
hilog | grep bt_fwk# 查看藍牙服務日志
hilog | grep bluetooth_service# 查看C API調用日志
hilog | grep bt_c_api

6.2 系統調試

6.2.1 服務狀態檢查
# 進入設備shell
hdc shell# 在設備shell中執行以下命令:
# 查看藍牙服務狀態
ps -ef | grep bluetooth_service# 查看系統能力
samgr list | grep bluetooth# 查看藍牙開關狀態
param get persist.sys.bluetooth.enable# 查看藍牙相關日志
hilog | grep bluetooth
6.2.2 配置文件調試
# 檢查系統能力配置
hdc shell cat /system/etc/sa_profile/1130.json# 檢查服務配置
hdc shell cat /system/etc/init/bluetooth_service.cfg

6.3 開發調試

6.3.1 構建調試版本
# 構建帶調試信息的版本
./build.sh --product-name xxx --gn-args="is_debug=true"# 啟用藍牙調試日志
./build.sh --product-name xxx --gn-args="bt_debug_level=3"
6.3.2 運行時調試
# 設置調試參數
hdc shell param set bluetooth.debug.level 3# 重啟藍牙服務
service_control restart bluetooth_service

7. 常見問題與解決

7.1 服務啟動失敗

  • 癥狀: 藍牙服務無法啟動
  • 檢查: 查看1130.json配置是否正確
  • 解決: 確認libbluetooth_server.z.so存在且權限正確

7.2 狀態同步問題

  • 癥狀: 狀態顯示不一致
  • 檢查: 查看bt_fwk_host日志
  • 解決: 重啟bluetooth_service服務

7.3 API調用失敗

  • 癥狀: C API返回錯誤碼
  • 檢查: 確認參數有效性和權限
  • 解決: 檢查藍牙服務是否已啟動

8. 傳統藍牙設備實現原理

8.1 藍牙耳機實現原理

8.1.1 系統架構

藍牙耳機協議棧架構:

┌─────────────────────────────────────────────────────────────┐
│                    應用層 (音樂APP)                         │
├─────────────────────────────────────────────────────────────┤
│                    框架層 (AVRCP)                         │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐          │
│  │ 媒體控制    │  │  音量管理   │  │  狀態同步   │          │
│  └─────────────┘  └─────────────┘  └─────────────┘          │
├─────────────────────────────────────────────────────────────┤
│                    服務層 (A2DP/AVRCP)                    │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐          │
│  │ A2DP Source │  │ AVRCP CT    │  │ 音頻路由    │          │
│  └─────────────┘  └─────────────┘  └─────────────┘          │
├─────────────────────────────────────────────────────────────┤
│                    協議棧 (藍牙協議)                        │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐          │
│  │   L2CAP     │  │    AVDTP    │  │   AVCTP     │          │
│  └─────────────┘  └─────────────┘  └─────────────┘          │
└─────────────────────────────────────────────────────────────┘
8.1.2 關鍵源碼文件

A2DP源端實現:

  • 文件路徑: foundation/communication/bluetooth_service/services/bluetooth/server/src/bluetooth_a2dp_source_server.cpp
  • 核心類: BluetoothA2dpSourceServer
  • 功能: 音頻流傳輸、編碼配置、連接管理

AVRCP控制器實現:

  • 文件路徑: foundation/communication/bluetooth_service/services/bluetooth/server/src/bluetooth_avrcp_ct_server.cpp
  • 核心類: BluetoothAvrcpCtServer
  • 功能: 媒體控制、音量調節、狀態同步
8.1.3 連接流程
手機藍牙服務A2DP模塊AVRCP模塊耳機發現藍牙耳機發起配對請求配對確認建立A2DP連接配置音頻流參數協商編解碼器建立AVRCP連接注冊媒體控制回調交換控制命令手機藍牙服務A2DP模塊AVRCP模塊耳機
8.1.4 音頻編碼配置

支持的編碼格式:

編碼格式采樣率位深度通道數
SBC44.1kHz16bit立體聲
AAC48kHz16bit立體聲
aptX48kHz16bit立體聲

配置流程:

// 在bluetooth_a2dp_source_server.cpp中的配置流程
void OnConfigurationChanged(const RawAddress &device, const A2dpSrcCodecInfo &info, int error) {// 處理編解碼器配置變更BluetoothA2dpCodecInfo tmpInfo {};tmpInfo.bitsPerSample = info.bitsPerSample;tmpInfo.channelMode = info.channelMode;tmpInfo.codecType = info.codecType;tmpInfo.sampleRate = info.sampleRate;// 通知應用層配置已更新
}

8.2 藍牙遙控器實現原理

8.2.1 HID協議實現

HID主機實現:

  • 文件路徑: foundation/communication/bluetooth_service/services/bluetooth/server/src/bluetooth_hid_host_server.cpp
  • 核心類: BluetoothHidHostServer
  • 功能: HID設備連接、按鍵事件處理、電池狀態監控
8.2.2 遙控器按鍵映射

標準HID按鍵碼:

功能鍵HID碼功能描述
0x010x30電源鍵
0x020x31音量+
0x030x32音量-
0x040x33頻道+
0x050x34頻道-
0x060x35靜音
0x070x36主頁
0x080x37返回
8.2.3 連接和事件處理
電視HID服務遙控器啟動HID主機服務發現遙控器設備發送設備描述符注冊按鍵回調按鍵按下事件分發按鍵碼發送LED狀態反饋更新LED指示電視HID服務遙控器
8.2.4 低功耗管理

省電模式:

// 在bluetooth_hid_host_server.cpp中的狀態管理
void OnConnectionStateChanged(const RawAddress &device, int state) {if (state == BTConnectState::CONNECTED) {// 激活高功耗模式SetPowerMode(HIGH_POWER);} else if (state == BTConnectState::DISCONNECTED) {// 切換到低功耗模式SetPowerMode(LOW_POWER);}
}

8.3 藍牙音箱實現原理

8.3.1 A2DP接收端實現

A2DP接收端:

  • 文件路徑: foundation/communication/bluetooth_service/services/bluetooth/server/src/bluetooth_a2dp_sink_server.cpp
  • 核心類: BluetoothA2dpSinkServer
  • 功能: 音頻接收、解碼播放、音量控制
8.3.2 音頻路由管理

音頻路徑配置:

手機(A2DP Source) → 藍牙協議棧 → 音箱(A2DP Sink) → 音頻解碼 → DAC → 揚聲器
8.3.3 音量同步機制

絕對音量控制:

  • AVRCP絕對音量: 支持0-100級音量調節
  • 本地音量存儲: 斷電記憶音量設置
  • 同步機制: 雙向音量狀態同步

8.4 設備兼容性分析

8.4.1 設備類型識別

設備類別碼(Class of Device):

設備類型CoD值主要服務類
耳機0x200404Audio
音箱0x200414Audio
遙控器0x002508HID
8.4.2 能力交換機制

SDP服務發現:

// 服務發現流程
void DiscoverServices(const RawAddress &device) {// 查詢A2DP服務DiscoverA2dpService(device);// 查詢AVRCP服務DiscoverAvrcpService(device);// 查詢HID服務DiscoverHidService(device);
}

8.5 問題診斷與調試

8.5.1 連接問題分析

常見問題排查:

問題現象可能原因調試命令
無法發現設備設備未進入配對模式hcitool scan
配對失敗PIN碼錯誤或兼容性bluetooth_manage get_paired_devices
連接斷開信號強度弱或電量低hilog | grep bluetooth
音頻卡頓帶寬不足或干擾cat /proc/bluetooth/stats
8.5.2 性能優化

音頻延遲優化:

  1. 緩沖區大小: 調整為最小延遲模式
  2. 編解碼器: 優先選擇低延遲編解碼器
  3. 連接參數: 優化連接間隔和超時

功耗優化:

  1. 掃描間隔: 降低非連接時的掃描頻率
  2. 連接參數: 調整連接間隔平衡功耗和響應
  3. 深度睡眠: 支持空閑時的深度睡眠模式
8.5.3 調試工具

專用調試命令:

# 查看A2DP連接狀態
hdc shell bluetooth_manage get_a2dp_connections# 查看AVRCP能力
hdc shell bluetooth_manage get_avrcp_capabilities# 查看HID設備列表
hdc shell bluetooth_manage get_hid_devices# 查看音頻路由狀態
hdc shell cat /sys/class/bluetooth/hci0/audio_state# 實時監控藍牙數據
hdc shell hcidump -w /data/bluetooth.log

8.6 實際配置示例

8.6.1 藍牙耳機配置

配置文件路徑: /vendor/etc/bluetooth/audio_policy.conf

<audio_policy><a2dp_sink><supported_codecs><sbc bitrate="328000" sampling="44100" channels="2"/><aac bitrate="320000" sampling="48000" channels="2"/></supported_codecs></a2dp_sink>
</audio_policy>
8.6.2 遙控器按鍵映射

HID描述符配置:

// 標準遙控器HID描述符
static const uint8_t remote_hid_descriptor[] = {0x05, 0x01,        // Usage Page (Generic Desktop)0x09, 0x05,        // Usage (Game Pad)0xa1, 0x01,        // Collection (Application)0x85, 0x01,        // Report ID (1)0x05, 0x09,        // Usage Page (Button)0x19, 0x01,        // Usage Minimum (Button 1)0x29, 0x20,        // Usage Maximum (Button 32)0x15, 0x00,        // Logical Minimum (0)0x25, 0x01,        // Logical Maximum (1)0x75, 0x01,        // Report Size (1)0x95, 0x20,        // Report Count (32)0x81, 0x02,        // Input (Data, Variable, Absolute)0xc0               // End Collection
};

openharmony藍牙開發常見問題分析

1. 藍牙服務啟動失敗 / 反復重啟

現象

  • system log 中不斷出現 bluetooth_service 崩潰或 Service stopped (2900001)
  • 設置界面點擊“打開藍牙”無響應或立即回彈。

根因

  • 進程 bluetooth_service 中的線程 OS_IPC_10_25363libbluetooth_server.z.so 觸發 cppcrash。
  • init 配置未正確拉起服務或 SELinux 權限拒絕。

解決辦法

  • 臨時規避:在 shell 執行 start bluetooth_service 強制拉起;若仍失敗,重啟設備可恢復。

2. 反復開關藍牙導致內存泄漏

現象

  • 連續開關藍牙 20 次以上,系統內存上漲 15 MB~180 MB 不等;settings 應用出現 appfreeze。
  • 設備長時間運行后出現 OOM,藍牙功能不可用。

根因

  • 藍牙適配層未釋放 bt_hcibt_core 相關句柄。

解決辦法

  • 臨時:重啟設備即可恢復。
  • 永久:
    1. libbluetooth_server.z.so 更新到補丁中。
    2. 如使用外置藍牙芯片,改用芯片自帶協議棧,減少 OpenHarmony host 棧資源占用 。

3. BLE 掃描失敗,錯誤碼 2900099 / Fails to start scan

現象

  • 調用 startBLEScan 返回 Operation failedFails to start scan as it is out of hardware resources.

根因

  • 硬件掃描通道被占滿(其他應用/系統組件未釋放)。
  • 權限不足:缺少 ohos.permission.DISCOVER_BLUETOOTHohos.permission.LOCATION

解決辦法

  1. 檢查并動態申請權限:
    abilityAccessCtrl.requestPermissionsFromUser(['ohos.permission.DISCOVER_BLUETOOTH', 'ohos.permission.LOCATION'])
    
  2. 掃描前先調用 stopBLEScan() 釋放通道;必要時重啟藍牙服務:
    stop bluetooth_service && start bluetooth_service
    
  3. 若仍失敗,查看 /var/log/hilog 是否有 hardware resource busy,重啟設備即可恢復 。

4. GATT 特征值讀寫失敗,錯誤碼 2900005 / 2900008

現象

  • 已連接設備,調用 readCharacteristicValue / writeCharacteristicValue 返回 Device not connectedProxy is nullptr

根因

  • 對端設備異常斷開,但本地 proxy 對象未及時清理。
  • 應用在前一次異步操作未完成時又發起下一次操作,導致狀態錯亂。

解決辦法

  1. 每次讀寫前判斷 connectionState === 'STATE_CONNECTED'
  2. 等待上一次操作的 callback / promise 返回后再執行下一次讀寫。
  3. 出現 Proxy is nullptr 時,主動斷開連接并重新執行配對流程 。

5. 打開藍牙后設置界面卡死(appfreeze)

現象

  • 進入設置 → 藍牙,UI 假死 6 s 以上,系統提示 THREAD_BLOCK_6S

根因

  • systemui 進程在 libsamgr_proxy.z.so 中發生線程阻塞。

解決辦法

  • 臨時:下拉狀態欄 → 關閉再打開藍牙,或重啟設備。
  • 永久:升級至 4.1.2 之后版本,官方已合入修復補丁 。

6. 藍牙固件/串口適配失敗

現象

  • 系統啟動后 bluetooth_service 不停重啟,dmesg 出現 ttyS* probe failbt_firmware not found

根因

  • init.<board>.cfg 中串口節點與原理圖不一致;
  • vendor/<vendor>/<board>/bluetooth/ 下固件名或路徑錯誤;
  • BUILD.gnp_namehardware.c 不匹配。

解決辦法

  1. 對照原理圖確認 UART 管腳,修改:
    device/<vendor>/<board>/cfg/init.<board>.cfg
    
    確保串口擁有者為 blue_host
  2. 核對固件文件名:
    vendor/<vendor>/<board>/bluetooth/BUILD.gn
    
    vendor/<vendor>/<board>/bluetooth/src/hardware.c
    
    p_name 完全一致 。
  3. 確認 ohos.build 中已包含 bluetooth 部件:
    "parts": { "bluetooth": { "module": "//bluetooth/..." } }
    

快速排查清單(Checklist)

檢查點命令/路徑預期結果
服務是否運行`ps -efgrep bluetooth_service`
串口是否匹配`dmesggrep tty`
固件是否存在ls /vendor/firmware/*.bin存在對應芯片固件
權限是否授予aa check -p ohos.permission.DISCOVER_BLUETOOTHgranted
日志是否有 crash`hiloggrep bluetooth_service`

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

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

相關文章

探索 Ultralytics YOLOv8標記圖片

1、下載YOLOv8模型文件 下載地址&#xff1a;https://docs.ultralytics.com/zh/models/yolov8/#performance-metrics 2、編寫python腳本 aaa.py import cv2 import numpy as np from ultralytics import YOLO import matplotlib.pyplot as pltdef plot_detection(image, box…

Matplotlib數據可視化實戰:Matplotlib子圖布局與管理入門

Matplotlib多子圖布局實戰 學習目標 通過本課程的學習&#xff0c;學員將掌握如何在Matplotlib中創建和管理多個子圖&#xff0c;了解子圖布局的基本原理和調整方法&#xff0c;能夠有效地展示多個數據集&#xff0c;提升數據可視化的效果。 相關知識點 Matplotlib子圖 學習內容…

【python實用小腳本-194】Python一鍵給PDF加水印:輸入文字秒出防偽文件——再也不用開Photoshop

Python一鍵給PDF加水印&#xff1a;輸入文字秒出防偽文件——再也不用開Photoshop PDF加水印, 本地腳本, 零會員費, 防偽標記, 瑞士軍刀 故事開場&#xff1a;一把瑞士軍刀救了投標的你 周五下午&#xff0c;你把 100 頁標書 PDF 發給客戶&#xff0c;卻擔心被同行盜用。 想加水…

開源 C++ QT Widget 開發(四)文件--二進制文件查看編輯

文章的目的為了記錄使用C 進行QT Widget 開發學習的經歷。臨時學習&#xff0c;完成app的開發。開發流程和要點有些記憶模糊&#xff0c;趕緊記錄&#xff0c;防止忘記。 相關鏈接&#xff1a; 開源 C QT Widget 開發&#xff08;一&#xff09;工程文件結構-CSDN博客 開源 C…

【密碼學實戰】X86、ARM、RISC-V 全量指令集與密碼加速技術全景解析

前言 CPU 指令集是硬件與軟件交互的核心橋梁&#xff0c;其設計直接決定計算系統的性能邊界與應用場景。在數字化時代&#xff0c;信息安全依賴密碼算法的高效實現&#xff0c;而指令集擴展則成為密碼加速的 “隱形引擎”—— 從服務器端的高吞吐量加密&#xff0c;到移動端的…

2025-08-21 Python進階2——數據結構

文章目錄1 列表&#xff08;List&#xff09;1.1 列表常用方法1.2 列表的特殊用途1.2.1 實現堆棧&#xff08;后進先出&#xff09;1.2.2 實現隊列&#xff08;先進先出&#xff09;1.3 列表推導式1.4 嵌套列表推導式2 del 語句3 元組&#xff08;Tuple&#xff09;4 集合&…

告別手工編寫測試腳本!Claude+Playwright MCP快速生成自動化測試腳本

在進行自動化測試時&#xff0c;前端頁面因為頻繁迭代UI 結構常有變動&#xff0c;這往往使得自動化測試的腳本往往“寫得快、廢得也快”&#xff0c;維護成本極高。在大模型之前大家往往都會使用錄制類工具&#xff0c;但錄制類工具生成的代碼靈活性較差、定位方式不太合理只能…

一款更適合 SpringBoot 的API文檔新選擇(Spring Boot 應用 API 文檔)

SpringDoc&#xff1a;Spring Boot 應用 API 文檔生成的現代化解決方案 概述 SpringDoc 是一個專為 Spring Boot 應用設計的開源庫&#xff0c;能夠自動生成符合 OpenAPI 3 規范的 API 文檔。它通過掃描項目中的控制器、方法注解及相關配置&#xff0c;動態生成 JSON/YAML/HTML…

文獻閱讀 250821-When and where soil dryness matters to ecosystem photosynthesis

When and where soil dryness matters to ecosystem photosynthesis 來自 <When and where soil dryness matters to ecosystem photosynthesis | Nature Plants> ## Abstract: Background: Projected increases in the intensity and frequency of droughts in the twen…

React學習(九)

目錄&#xff1a;1.react-進階-antd-新增2.react-進階-antd-刪除選中1.react-進階-antd-新增新增代碼&#xff0c;跟需改的代碼類似&#xff0c;直接copy修改組件代碼進行修改userEffect可以先帶著&#xff0c;沒啥用A6組件用到的函數跟修改的也類似&#xff1a;這個useEffect函…

零基礎從頭教學Linux(Day 17)

三層交換機一、三層交換機的配置1.關于如何配置三層交換機&#xff0c;首先我們應該先創建VLANSwitch>en Switch#vlan database % Warning: It is recommended to configure VLAN from config mode,as VLAN database mode is being deprecated. Please consult userdocument…

任務十四 推薦頁面接口開發

一、接口準備 在對接qq音樂接口之前,首先要將之前的項目,一定要記得備份一份; 備份完成之后,首先要在vscode終端安裝axios,這個是請求后端的工具,和之前的ajax一樣,都是請求后端的工具。只不過axios更專業化,跟強大 至于qq音樂接口怎么獲取,一般有兩個途徑,第一個是…

醫療AI與醫院數據倉庫的智能化升級:異構采集、精準評估與高效交互的融合方向(下)

核心功能創新詳解: 統一門戶與角色化工作臺: 統一入口: 用戶通過單一URL登錄,系統根據其角色和權限自動呈現專屬工作臺。 角色化工作臺: 臨床醫生工作臺: 首屏展示常用患者查詢入口、快速統計(如“我的患者檢驗異常趨勢”)、相關臨床文獻推薦、待處理任務(如報告審核)…

數據庫面試常見問題

數據庫 Delete Truncate Drop 區別 答:這三個操作都是針對數據庫的表進行操作,都有刪除表的功能,其中的區別在于: Delete:只將表中的數據進行刪除,不刪除定義不釋放空間,是dml語句,需要提交事務,如果不想刪除可以回滾。delete每次刪除一行,并在事務日志中為所刪除…

用nohup setsid繞過超時斷連,穩定反彈Shell

在We滲透過程中&#xff0c;我們常常會利用目標系統的遠程代碼執行&#xff08;RCE&#xff09;漏洞進行反彈Shell。然而&#xff0c;由于Web服務器&#xff08;如PHP、Python后端&#xff09;的執行環境通常存在超時限制&#xff08;如max_execution_time或進程管理策略&#…

Java設計模式-模板方法模式

Java設計模式-模板方法模式 模式概述 模板方法模式簡介 核心思想&#xff1a;定義一個操作中的算法骨架&#xff08;模板方法&#xff09;&#xff0c;將算法中某些步驟的具體實現延遲到子類中完成。子類可以在不改變算法整體結構的前提下&#xff0c;重定義這些步驟的行為&…

Centos7物理安裝 Redis8.2.0

Centos7物理安裝 Redis8.2.0一、準備依賴環境首先安裝編譯 Redis 所需的依賴&#xff1a;# CentOS/RHEL系統 yum install -y gcc gcc-c make wget 二、下載并編譯 Redis 8.2.0# 1. 下載Redis 8.2.0源碼包 wget https://download.redis.io/releases/redis-8.2.0.tar.gz# 2. 解壓…

牛津大學xDeepMind 自然語言處理(3)

條件語言模型無條件語言模型 概率計算&#xff1a;通過鏈式法則分解為預測下一詞概率&#xff08;將語言建模問題簡化為建模給定前面詞語歷史的下一個詞的概率&#xff09;基于循環神經網絡的無條件語言模型&#xff1a;根據歷史詞語預測下一個詞的概率條件語言模型 定義&#…

Vue2.x核心技術與實戰(一)

目錄 一、Vue2.x:快速上手+插值表達式+指令上 1.1 Vue快速上手 1.1.1 Vue概念 1.1.2 創建實例 1.1.3 插值表達式 { { }} 1.1.4 響應式特性 1.1.5 開發者工具 1.2 Vue指令 1.2.1 v-html 1.2.3 v-show / v-if v-show v-if 1.2.4 v-else / v-else-if 1.2.5 v-on v…

SCAU學習筆記 - 自科三面前端方向實戰演示

本來是準備寫完二面直接開始寫算法三面的&#xff0c;maimai那個封面圖我都做好了。但是可惡的出題人說要等我出完解析再針對性避開出題&#xff0c;所以swan決定把那個先擱置&#xff0c;本文我們先以2023年的自科三面前端方向題為例帶各位快速入門前端三件套&#xff08;因為…