【鴻蒙心跡】7×24小時極限求生:當Origin_null遇上鴻蒙,我如何用100杯咖啡換一條跨域活路?

文章概要
大家好,我是那個把黑眼圈熬成華為工牌掛繩的倒霉蛋。過去100個夜晚,我在HarmonyOS NEXT的ArkWeb里被Origin:null反復按在地上摩擦——小程序白屏、OPTIONS 400、官方文檔沉默三連擊。最終,我用C++、libcurl、OpenSSL和一堆速溶咖啡,硬是在API12的深坑里鑿出一條代理隧道。本文是我用頭發換來的避坑實錄:從DevEco Studio崩潰到證書閃退,從Nginx臨時補丁到C++終極方案,一條都不藏私。讀完它,你至少能少掉50根頭發,多睡10個好覺。

圖片

凌晨 2:17,我正討論“為什么鴻蒙的動畫比 iOS 還絲滑”,手機突然像被電擊一樣狂震——“所有小程序白屏了!”
那一刻,我差點把咖啡潑在測試機上。產品同學的聲音帶著哭腔:“用戶一打開就空白,vConsole 干凈得像剛出廠。”我心里咯噔一下:這不是普通 Bug,這是災難級 P0

我沖進公司,發現同事們已經排成一排,像瞻仰遺容一樣盯著屏幕。小程序容器里,頁面骨架正常渲染,但接口請求像被黑洞吸走——axios 全軍覆沒,$.ajax 卻活蹦亂跳。我當場懵圈:難道 axios 偷偷給自己加了「鴻蒙不兼容」buff?

圖片

更魔幻的是,vConsole 居然一條報錯都沒有!我一度懷疑是不是測試機中了「前端沉默咒」。直到我祭出 ArkWeb 的 onConsole 鉤子,才終于抓到真兇:

圖片

Access to XMLHttpRequest at 'xxx' from origin 'null' has been blocked by CORS policy

看到 origin 'null' 那一刻,我血壓直接飆到 180——跨域!又是跨域! 但等等,我們本地資源加載,Origin 怎么會是 null?
原來鴻蒙的 ArkWeb 默認把本地文件協議的 Origin 設成了 null,而我們的服務端寧死不接受 null,只認 file://
這一刻,我悟了:不是 axios 背叛了我,是 Origin:null 在背后捅刀!

圖片

02 官方沉默:文檔、工單、群聊的三重暴擊

“凌晨三點,我盯著屏幕,感覺 Origin:null 像個幽靈,而官方文檔、工單、群聊,成了三座沉默的墓碑。”


翻遍API12文檔,setAllowUniversalAccessFromFileURLs依舊缺席

關鍵詞:缺席文檔黑洞希望落空

  1. 官方文檔的“薛定諤狀態”

    • 打開 HarmonyOS NEXT ArkWeb 指南,搜索 “CORS” → 0 條結果。
    • 再搜 “setAllowUniversalAccessFromFileURLs” → 直接 404。
    • 翻到 WebConfig 類,發現 Android WebView 的 setAllowUniversalAccessFromFileURLs 方法直接失蹤
  2. 開發者的“考古現場”

    • 鴻蒙開發者論壇 挖墳到 2023 年的帖子,有人提問:“ArkWeb 如何允許 file 協議訪問 http 資源?”
    • 官方回復:“當前版本不支持,建議后續關注。”
    • 后續是哪一版?沒人知道,但我的頭發知道——它先禿了
  3. 替代方案的“鬼打墻”

    • 嘗試用 onInterceptRequest 攔截請求,結果只能讀到 URL,POST 的 body 直接蒸發
    • 想用 @ohos.net.http 發請求繞過,但 ArkWeb 的 iframe 里無法調用系統 API

圖片


工單回復模板:重啟-清緩存-換電腦

關鍵詞:模板化玄學三連時間黑洞

工單回合官方回復我的血壓
第1回合“請確認 DevEco Studio 已升級至最新版。”120/80
第2回合“嘗試清除緩存并重啟 IDE。”140/90
第3回合“建議換一臺測試機復現。”180/120
第4回合“問題已轉交研發,請耐心等待。”直接爆表

彩蛋:有開發者貼出客服內部話術截圖,發現 “重啟-清緩存-換電腦” 是標準 SOP,跨域問題直接歸類為 “用戶環境問題”


圖片

### 時間紅線:6月上線,等不起下一個版本

關鍵詞:deadline版本列車背水一戰

  1. 倒計時的壓迫感

    • 產品發布會定在 6 月 20 日,跨域問題必須在 5 月 31 日前解決
    • 官方路線圖顯示,API13 的 CORS 支持要到 Q3——直接錯過上線。
  2. 老板的“靈魂拷問”

    “要么你解決,要么我換人。”——產品經理的原話。

  3. 開發者的“絕地求生”

    • 方案A:等官方更新 →
    • 方案B:自己寫代理 → 頭發-50,進度+1%
    • 方案C:降級用 API11 → 閃退+1,測試機變磚

結論:當官方沉默時,代碼不會說謊,但人會禿頭


下集預告
既然官方靠不住,那就 用 Nginx 和 Tomcat 打 10 分鐘補丁——但 Origin:null 的隱患,真的只是權宜之計嗎?

圖片

03 臨時止血:Nginx與Tomcat的10分鐘救援

“凌晨 3:15,老板一句‘先跑起來再說’,比冰美式還提神。”
Origin:null 還在 ArkWeb 里蹦迪,我們只能先給演示環境打一針腎上腺素——讓它活過今晚,再談詩和遠方


Nginx 204預檢補丁:先讓演示活下來

癥狀速記

  • ArkWeb 發起 OPTIONS 預檢 → Nginx 405 → 前端白屏。
  • 產品經理眼神空洞:“客戶 10 分鐘后到,頁面還是白板?”

速效處方:30 秒復制粘貼
/etc/nginx/conf.d/harmony_911.conf 里加三行魔法:

server {listen 80;location / {# 預檢請求直接發糖if ($request_method = 'OPTIONS') {add_header 'Access-Control-Allow-Origin'   'null';add_header 'Access-Control-Allow-Methods'  'GET, POST, OPTIONS';add_header 'Access-Control-Allow-Headers'  'Authorization, Content-Type';return 204;  # 空包速回,瀏覽器閉嘴}proxy_pass http://backend;}
}

三步驗證

  1. curl -I -X OPTIONS -H "Origin: null"204 No Content ?
  2. 真機掃碼 → 小程序不再白屏 ?
  3. 產品經理笑容回歸 → 今晚不用通宵 ?

圖片

?? 副作用:
一旦運維重啟 Nginx,這行配置就可能被“順手”刪掉——記得寫進部署腳本


Tomcat CORSFilter兜底:Java后端的倔強

場景:網關不歸你管,Nginx 改不動?那就讓 Tomcat 自己扛。
操作WEB-INF/web.xml 里 30 秒改完:

<filter><filter-name>CorsFilter</filter-name><filter-class>org.apache.catalina.filters.CorsFilter</filter-class><init-param><param-name>cors.allowed.origins</param-name><param-value>null</param-value>   <!-- 演示專用,線上請換成精確域名 --></init-param><init-param><param-name>cors.allowed.methods</param-name><param-value>GET,POST,OPTIONS</param-value></init-param><init-param><param-name>cors.allowed.headers</param-name><param-value>Content-Type,Authorization</param-value></init-param>
</filter>
<filter-mapping><filter-name>CorsFilter</filter-name><url-pattern>/*</url-pattern>
</filter-mapping>

重啟 Tomcat

./bin/shutdown.sh && ./bin/startup.sh

效果OPTIONS 200,前端 axios 不再報錯,后端日志里終于不再出現 CORS policy: No 'Access-Control-Allow-Origin' header

小插曲:
如果你們的網關是 Spring Cloud Gateway,記得在 Gateway 層也加 CORS,否則 Tomcat 的 Filter 會被網關截胡,白忙活。


圖片

Origin:null的安全隱患:為什么只是權宜之計

“null 不是‘空’,而是‘匿名’。”
——安全部同事路過時翻了個白眼,我假裝沒看見。

風險清單

場景潛在攻擊后果
惡意本地 HTML直接調用你的 API數據泄露、CSRF
瀏覽器插件注入繞過同源策略用戶隱私裸奔
企業內網釣魚內網 API 被外網調用內網淪陷

公司安全規范三連擊

  1. 禁止生產環境接受 null
  2. 禁止 * 通配符帶 Cookie
  3. 必須校驗 Access-Control-Allow-Credentials

一句話總結

Nginx 204 + Tomcat CORSFilter = 急診室止血帶,能救命,但不能當長期繃帶
真正治愈,還得靠下一章的 C++ 代理隧道


彩蛋:演示結束當晚,我把 Nginx 配置回滾,順手把 harmony_911.conf 重命名為 harmony_911_dont_touch.conf,并在注釋里寫下:
# 誰再敢開這個配置,就準備背鍋到明年。

圖片

04 ArkTS攔截器幻滅:onInterceptRequest的只讀陷阱

“我以為攔截器是瑞士軍刀,結果它只是把塑料叉子。”——凌晨3:42,我對著白屏罵罵咧咧。


WebResourceRequest拿不到body的絕望

故事開場

在 DevEco Studio 的 ArkTS 世界里,onInterceptRequest 看起來就像超級英雄——官方文檔說它“可以攔截任何請求”。于是我興沖沖地寫下:

Web({...}).onInterceptRequest((event) => {const req = event.request;console.info("抓到請求:", req.getUrl());// 下一步:把 Origin:null 改成 file://return null;   // 先放它過去
});
現實打臉
  • req.getRequestHeader() 返回的是 只讀數組,改完值再打印,Origin 還是 null
  • 想讀 POST body?WebResourceRequest 壓根沒提供 getBody() 之類的方法。
  • 官方文檔友情提示:“攔截器只能替換響應,不能修改請求頭與 body”——等于直接判了死刑。

那一刻,我深刻體會到什么叫“看得見的坑,繞不過的坎”。


API12 C++示例只讀本地文件?我要發網絡!

走投無路,投奔 C++

官方給的示例代碼長這樣:

OH_ArkWeb_SetSchemeHandler("http", "ec-scheme-handler", handler);
// 在回調里……
std::ifstream in("local.html");   // 只讀本地文件?

我當場裂開:我要發網絡請求,你卻讓我讀文件?

官方沒說的事

翻遍文檔,確認 C++ 層確實能:

  1. 拿到完整 URL、Method、Headers(包括自定義頭)。
  2. 通過 OH_ArkWebResourceRequest_GetHttpBodyStream 把 POST body 讀出來。
  3. 用自定義網絡庫(libcurl/httplib)重新發請求,再把結果喂回 ArkWeb。

官方示例只是“演示如何返回本地文件”,真正的玩法是“代理整個請求生命周期”——但文檔里半個字都沒提。


團隊顧慮:升級API12會不會引發連環閃退

會議現場

當我把“升級 API12”的提案丟進群里,瞬間被 99+ 消息淹沒:

擔憂現實暴擊
IDE 崩潰API12 的 DevEco Studio 必須同步升級,舊插件全軍覆沒。
真機閃退import 動態加載語法變了,一行代碼沒改直接黑屏。
回歸測試爆炸動畫引擎底層實現更新,UI 自動化腳本集體撲街。
為了說服老板,我做了三件事
  1. 連夜跑 Monkey:在 API12 真機上狂點 2 小時,統計 Crash 率 < 0.1%。
  2. 出一份風險清單:把已知兼容性問題全部列成表格,附解決方案。
  3. 立軍令狀:兩周內搞不定,我自掏腰包請全組奶茶。

最終,老板拍了板:“升!出問題算我的。”
而我,默默把奶茶預算改成了咖啡——畢竟,后面還有 OpenSSL 的坑等著我跳。

圖片

05 C++深坑:從libcurl編譯失敗到httplib單頭救場

“凌晨 4:27,DevEco Studio 第 7 次藍屏,我盯著 libcurl 的 2000 行報錯,突然理解了什么叫‘代碼即佛經’——每一個 unresolved symbol 都是對我靈魂的拷問。”


升級地獄:API11→API12的閃退連環坑

本來只想改一行配置,結果把整棟樓的地基都掀了。

  1. 一鍵升級按鈕的甜蜜陷阱
    DevEco 的 Upgrade Assistant 會告訴你:“放心點,我幫你自動改。”
    實際上它只改了 oh-package.json5 里的版本號,真正的 Native 部分——CMakeLists.txtlibcurl.alibc++.so 全被放生。

  2. 閃退三連擊現場還原

    • 第一次閃退libcurl.so__aarch64_ldadd4_acq_rel 未定義 → NDK 21 與 API12 的 原子操作符號 不兼容。
    • 第二次閃退libc++.so 版本沖突 → 系統自帶 .so 與打包 .so 打架,Logcat 里全是 SIGABRT
    • 第三次閃退ArkWeb 白屏 → 因為 libcurl 初始化失敗,導致 SchemeHandler 注冊超時,渲染線程直接罷工。
  3. 逃生指南

    # 降級 NDK 到 20b(鴻蒙官方暗搓搓的推薦版本)
    ohpm config set @ohos/hvigor-ndk 20.1.5948944
    # 手動對齊 .so
    objdump -p libcurl.a | grep NEEDED   # 看它還想要誰
    

libcurl交叉編譯崩潰,httplib單文件逆襲

當交叉編譯開始報“undefined reference to __aarch64_ldadd4_acq_rel”,你就知道今晚又不用睡了。

優點在鴻蒙的結局
libcurl功能全、文檔多NDK 找不到 openssl 3.0,編譯產物閃退
Boost.Asio異步狂魔編譯 30 分鐘,鏈接 2 小時,最終體積 +5MB
Poco全家桶CMakeLists 寫到懷疑人生
httplib只有一個 .h5 分鐘集成,真香
  1. libcurl 的死亡三連

    # 1. 官方 NDK 找不到 openssl
    cmake .. -DOPENSSL_ROOT_DIR=/nonexistent/path
    # 2. 強行編譯 1.1.1 版本
    ./Configure linux-aarch64 --prefix=/tmp/ssl
    # 3. 運行閃退:SSL_get1_peer_certificate 符號缺失
    

    結論:libcurl 卒

  2. httplib 單頭文件救場

    • 把 httplib.h 拖進 cpp/ 目錄。
    • 一行宏解決 https 校驗:
      #define CPPHTTPLIB_OPENSSL_SUPPORT
      cli.enable_server_certificate_verification(false); // 羞恥但有效
      
    • 編譯通過,運行不閃退,世界瞬間清凈。

OpenSSL 1.1.1證書校驗閃退:關閉校驗的羞恥但有效方案

“生產環境關掉證書校驗?別罵了,在改了。”——我面對安全同學時的卑微。

  1. 鴻蒙 NDK 的 OpenSSL 版本鎖死 1.1.1
    想用 3.0?自己編!
    ./Configure 出來的 so 放到工程里直接 SIGILL 非法指令
    原因:NDK 的交叉工具鏈 ≠ 系統 cmake,必須用華為提供的

    ~/Huawei/Sdk/HarmonyOS-NEXT-DB1/base/native/build-tools/cmake/bin/cmake
    
  2. 關閉校驗的羞恥補丁

    httplib::Client cli("https://api.xxx.com");
    cli.enable_server_certificate_verification(false); // 就是這一行
    

    風險:中間人攻擊、老板罵街、用戶數據裸奔。
    緩解:

    • 只對特定域名關閉校驗;
    • 把服務器證書硬編碼進 App,用 `SSL_CTX_use_certificate

圖片

06 終極代理:攔截、轉發、回包全鏈路打通

“當官方 API 不給力,我們就自己造一條暗網隧道。”——凌晨 4:27,第 97 杯美式下肚后的頓悟


OH_ArkWeb_SetSchemeHandler注冊http/https/options

一句話總結:把 ArkWeb 的“默認網絡棧”踢掉,換成我們自己寫的 C++ 代理。

  1. 入口函數

    // native/cpp/web_scheme_handler.cpp
    void RegisterCustomSchemes() {// 注意:必須在主線程調用,且早于任何 Web 組件實例化OH_ArkWeb_SetSchemeHandler("http",  new HttpSchemeHandler());OH_ArkWeb_SetSchemeHandler("https", new HttpSchemeHandler());OH_ArkWeb_SetSchemeHandler("options", new HttpSchemeHandler()); // 預檢也一起劫持
    }
    
  2. Handler 骨架

    class HttpSchemeHandler : public ArkWebSchemeHandler {
    public:void OnRequestStart(const std::shared_ptr<ArkWebRequest>& req) override {auto* raw = new RawRequest(req);   // 后面細講生命周期raw->StartAsync();                 // 非阻塞}
    };
    
  3. ArkTS 側零改動

    // 前端代碼不用改一行,繼續 axios.post(...) 就行
    

RawRequest生命周期管理:內存泄漏大逃殺

“C++ 不釋放內存,就像熬夜不洗臉——早晚爛臉。”

階段動作防坑要點
創建new RawRequest立即塞進 std::atomic<int> alive_count_,方便調試
網絡libcurl/httplib 異步std::enable_shared_from_this 延長生命
回包OH_ArkWeb_SendResponse回調里再 delete this,確保最后一次引用后自殺
異常curl 超時/斷網SetTimeout(15s) + OnError 統一 delete

內存泄漏檢查腳本

# 在 hdc shell 里跑
watch -n1 "cat /proc/$(pidof com.example.app)/status | grep VmRSS"

如果 RSS 每 30s 漲 1 MB,就說明你忘了 delete


POST body分片讀取:Callback地獄與線程安全

“body 太大一次讀不完?那就邊讀邊轉發,像快遞小哥拆箱。”

  1. ArkWeb 提供的讀接口

    req->GetBody([](const uint8_t* chunk, size_t len, bool is_last) {// ?? 回調在 IO 線程,不能直接操作 UIg_async_queue.Push({chunk, len, is_last});
    });
    
  2. 生產者-消費者模型

    std::mutex mtx_;
    std::condition_variable cv_;
    std::queue<Chunk> queue_;void WorkerThread() {while (true) {Chunk c;{std::unique_lock lock(mtx_);cv_.wait(lock, []{ return !queue_.empty(); });c = queue_.front(); queue_.pop();}curl_easy_setopt(curl_, CURLOPT_POSTFIELDS, c.data);curl_easy_setopt(curl_, CURLOPT_POSTFIELDSIZE, c.len);if (c.is_last) curl_easy_perform(curl_);}
    }
    
  3. 線程安全小貼士

    • ArkWeb 回調里只做 memcpy,絕不阻塞
    • std::atomic<bool> done_ 通知主線程可以 SendResponse

手動注入Access-Control-Allow-Origin:*的快感與風險

“加星號就像打腎上腺素,見效快,副作用也大。”

  1. 在回包階段注入

    void OnResponseHeaders(ArkWebResponse* resp) {resp->AddHeader("Access-Control-Allow-Origin", "*");resp->AddHeader("Access-Control-Allow-Methods", "GET,POST,OPTIONS");resp->AddHeader("Access-Control-Allow-Headers", "Content-Type,Authorization");
    }
    
  2. 風險與兜底

    • 風險* 會讓任何網頁都能調你的接口,內測階段可忍,上線必改
    • 兜底:維護一份 allow_list,只給可信域放行
      static const std::unordered_set<std::string> kSafeOrigins = {"https://app.example

07 熬夜生存指南:如何優雅地為鴻蒙加班

“凌晨 3 點 27 分,DevEco Studio 第 7 次閃退,我盯著屏幕里那句 BUILD FAILED 突然悟了:原來鴻蒙不是操作系統,是修行。”
——來自一位剛寫完第 100 條工單備注的禿頭選手


防猝死三連:IDE崩潰自動備份 / 測試機定時重啟 / 客服話術模板

環節工具/腳本一句話口訣備注
IDE 崩潰自動備份File → Settings → Appearance & Behavior → System Settings → Autosave 打開 每 1 秒保存 + 本地 Git 每 10 分鐘 git stash“Ctrl+S 救不了命,腳本才能。”搭配 inotifywait 做增量備份,閃退后 30 秒內恢復現場。
測試機定時重啟crontab -e 加一行:
0 4 * * * hdc shell reboot
“每天 4 點讓它重啟,比女朋友還準時。”真機/模擬器通殺,避免內存泄漏把日志撐爆。
客服話術模板收藏夾常備三段:
1. “已按文檔步驟操作,日志見附件。”
2. “復現路徑 100%,設備型號、系統版本已標注。”
3. “如仍需補充信息,請明確具體字段,避免往返 48h。”
“把客服逼成復讀機,你就贏了。”實測可把平均響應時間從 3 天壓到 8 小時。

彩蛋腳本:把下面這段扔進 ~/.bashrc,一鍵進入“修仙模式”

alias hm='echo "$(date): 鴻蒙修仙第$(expr $(date +%j) - 173)天" >> ~/hm.log'

每次打開終端自動打卡,月底統計修仙時長。


圖片

08 反思:跨域之外,鴻蒙生態的AB面

“當你把 Origin:null 按在地上摩擦到凌晨四點,才發現自己其實站在一座還在打地基的摩天樓頂上——風大,樓晃,沒護欄。”


純血鴻蒙的代價:兼容性、文檔、社區的三重撕裂

兼容性:舊代碼的墳場,新代碼的雷區
維度官方 PPT凌晨 4 點的真實現場
API 升級“平滑過渡”API11 → API12,Web 容器把 Origin:null 寫死,閃退率 +300%
設備適配“一次開發,多端部署”同一段 ArkTS,Mate60 白屏,Pura70 秒開,Nova 直接重啟
回退通道“隨時回滾”入口藏在“設置 → 關于手機 → 版本號連點 7 次 → 輸入暗號”,堪比《頭號玩家》彩蛋

血淚提示:
“平滑” 是官方用詞,“平滑摔” 才是體感。

文檔:寫得像詩,讀得像懸疑小說
  • 搜索體驗
    輸入 setAllowUniversalAccessFromFileURLs,返回 0 條;輸入“跨域”,返回 17 條“敬請期待”。
  • 示例代碼的量子態
    復制粘貼能跑,改一行就崩——后來發現示例偷偷用了內部 API,正式 SDK 根本沒導出。
  • 工單模板三連擊
    1. 重啟 DevEco Studio
    2. 清緩存并 Invalidate Caches
    3. 換一臺電腦試試
      如果都不行——恭喜你,成功解鎖隱藏成就:“成為文檔維護者”
社區:白天寂靜如墳場,凌晨 4 點蹦迪
  • 微信群里的幽靈大佬
    ID 叫“HarmonyOS_內核掃地僧”,只在 03:17–03:42 出現,發一張截圖又消失。
  • 官方論壇的激勵金
    60 億聽起來像把北京二環買下來,實際到賬率≈買彩票中 50 塊——還得先寫 2000 字測評。
  • 撕裂現場
    • A 群:“鴻蒙是國產之光!”
    • B 群:“求求你們先修修文檔吧!”
      兩群互踢,場面一度比跨域還跨。

分布式能力的誘惑與陷阱:2025 年值得 All in 嗎?

誘惑陷阱防坑提示
一次開發,多端部署多端指手機、手表、電視,但不包括你老板的 iPad先在最低配手表上跑通,再談“多端”
超級終端拖拽流轉流轉到一半對方設備鎖屏,數據直接蒸發做好斷點續傳,否則用戶會把你拖進“黑名單流轉”
AI 加持的意圖框架意圖識別把“打車”識別成“打開發者”保留人工兜底按鈕,防止 AI 把用戶送去緬甸

小結:
分布式能力像 5G——沒它也能活,有它更燒錢
2025 年如果你家產品沒有“多設備協同”故事,融資 PPT 都湊不夠 10 頁;但真要做到絲滑,團隊規模至少翻三倍。

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

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

相關文章

【git】刪除一條本地提交的歷史commit

在工程中&#xff0c;如果想要刪除一條本地提交的歷史commit&#xff0c;可以通過droprebase -i HEAD^n的方式。1.情景提交了三條commit&#xff0c;想刪掉第二條commit。git logcommit_id_*******1 commit_id_*******2 commit_id_*******32.解決git rebase -i HEAD~2輸出&…

軟件測試中,JMeter 的作用以及優缺點是什么?

回答重點JMeter 是一款開源的軟件測試工具&#xff0c;主要用來對各種軟件或服務進行性能測試和負載測試。它可以模擬大量用戶同時對服務器、網絡或其他資源發起請求&#xff0c;從而測試它們的響應時間、吞吐量等性能指標。優點&#xff1a;1&#xff09; 開源且免費 &#xf…

STM32存儲結構

我們在使用Keil編譯程序成功后會,有一行各部分占用內存的提示信息,如下Program Size:Code7492 RO-data556 Rw-data72 ZI-data11688,這是stm32代碼編譯后的提示我們分析一下這個編譯輸出&#xff1a;- Code: 7492字節 -> 代碼部分&#xff08;存放在Flash&#xff09;- RO-da…

手機 瀏覽器調用攝像頭掃描二維碼Quagga

注&#xff1a;需用谷歌瀏覽器才能調用權限1. 引入依賴&#xff1a;npm install ericblade/quagga2<template><el-button color"#188ae2" click"handleScan" class"scan-btn" :disabled"isInitializing || isScanning">{{…

【Oracle篇】偽列之Version Query:全鏈路追蹤行數據變更的所有記錄(不僅僅是被修改的最后時間)(第二篇,總共六篇)

&#x1f4ab;《博主主頁》&#xff1a;    &#x1f50e; CSDN主頁__奈斯DB    &#x1f50e; IF Club社區主頁__奈斯、 &#x1f525;《擅長領域》&#xff1a;擅長阿里云AnalyticDB for MySQL(分布式數據倉庫)、Oracle、MySQL、Linux、prometheus監控&#xff1b;并對…

代理模式深度解析:從靜態代理到 Spring AOP 實現

代理模式是軟件開發中一種經典的設計模式&#xff0c;它通過引入 "代理對象" 間接訪問目標對象&#xff0c;從而在不修改目標對象代碼的前提下&#xff0c;實現功能增強&#xff08;如日志記錄、事務管理&#xff09;、權限控制等橫切需求。從簡單的靜態代理到靈活的…

算法 ----- 鏈式

目錄 一 、鏈式 二 、題目 1、兩兩相加 &#xff08;1&#xff09;題目 (3) 代碼書寫 2、兩兩交換鏈表中的節點 &#xff08;1&#xff09;題目 &#xff08;2&#xff09; 解題思路 &#xff08;3&#xff09;代碼書寫 3、重排鏈表 &#xff08;1&#xff09;題目 …

運維監控prometheus+grafana

目錄 一、環境 二、Node_exporter部署 三、Prometheus部署 四、Grafana部署 五、驗證、使用 一、環境 系統使用CentOS7虛擬機。 監控三臺服務器&#xff1a; 192.168.114.10 Node1 #部署Prometheus、node_exporter、Grafana 192.168.114.20 Node2 …

數字孿生 :提高制造生產力的智能方法

近年來&#xff0c;在先進數字技術深度整合的推動下&#xff0c;制造業經歷了深刻變革。數字孿生技術作為其中最具前景的創新之一&#xff0c;正重塑工廠和生產流程的設計、監控和優化方式。該技術的核心在于為物理資產、系統或流程創建虛擬映射。這種虛擬映射實時同步現實世界…

【論文閱讀】-《SIGN-OPT: A QUERY-EFFICIENT HARD-LABEL ADVERSARIAL ATTACK》

Sign-OPT: 一種查詢高效的硬標簽對抗攻擊 原文鏈接&#xff1a;https://arxiv.org/pdf/1909.10773 摘要 我們研究在訪問受限情況下評估機器學習系統對抗魯棒性的最實用問題設置&#xff1a;用于生成對抗樣本的硬標簽黑盒攻擊設置&#xff0c;其中允許有限的模型查詢&#xff…

安卓11 12系統修改定制化_____如何去掉 搜狗輸入法 首次運行時權限授權彈窗 其他應用可借鑒

有些內置應用或者第三方應用在首次使用時會跳出權限允許彈窗。雖然這個是系統為了用戶安全設置的一道檢測機制。但無形之中會影響到定制類用戶的使用。那么能不能去除這個首次運行的權限彈窗呢。其實也有多方法可參閱解決。 通過博文了解?????? 1??????-----首次…

雙環模型:一個蘊含安全哲學的類設計解析

雙環模型&#xff1a;一個蘊含安全哲學的類設計解析 在編程世界中&#xff0c;優秀的類設計不僅能實現功能需求&#xff0c;更能體現開發者對系統本質的理解。本文將深入剖析一個看似簡單卻蘊含深刻安全哲學的OP類&#xff0c;探討其雙環模型背后的設計思想與實踐價值。 類結構…

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

牛津大學xDeepMind 自然語言處理 Natural Language Processing 語音識別 Speech Recognition語音識別概述 問題定義&#xff1a;自動語音識別&#xff08;ASR&#xff09;、文本到語音合成&#xff08;TTS&#xff09;等相關任務&#xff1a;說話人識別、語音增強、語音分離等語…

MyBatis處理SQL語句映射

基礎MyBatis問題以去看MyBatis基礎。 使用log4j設置日志在控制臺打印SQL語句及其執行信息 也可以使用MyBatis基礎中用的slf4j。 在pom.xml文件中引入log4j坐標依賴 <dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><…

嵌入式硬件篇---麥克納姆輪軌跡偏移

麥克納姆輪的軌跡偏移是機械結構、驅動系統、控制邏輯及外部環境等多因素共同作用的結果&#xff0c;其核心是各輪子的驅動力 / 運動狀態無法按理論模型實現協同&#xff0c;導致車體實際運動與期望軌跡產生偏差。以下是具體影響因素的詳細分析&#xff1a;一、機械結構偏差&am…

C語言安全函數分享

在日常寫程序中有一些功能函數是可以重復使用的&#xff0c;在c語言的標準庫里面也有對應的功能函數&#xff0c;但是那些功能函數有會有小問題然后我就整理了一下對應功能的安全函數的使用。其中前四個函數可以編譯成一個動態庫&#xff0c;然后在項目工程中只需要包含對應的頭…

汽車之家聯合HarmonyOS SDK,深度構建鴻蒙生態體系

汽車之家作為一家領先的汽車互聯網公司&#xff0c;致力于打造服務全球的汽車生態科技平臺&#xff0c;覆蓋"看選買用換"的一站式購車體驗。2023年12月底&#xff0c;汽車之家正式啟動鴻蒙開發&#xff0c;并于2024年年底成功構建了完整的鴻蒙生態體系&#xff0c;涵…

深度學習驅動的訂單簿分析與交易策略優化

訂單簿數據特征與預處理方法 高頻金融數據中&#xff0c;訂單簿&#xff08;Order Book&#xff09;承載著市場參與者的實時交易意圖。不同于K線數據的聚合特性&#xff0c;訂單簿數據具有獨特的時空特征&#xff1a; 多維層級結構&#xff1a;包含不同價格檔位的買賣盤深度信息…

Redis--day9--黑馬點評--分布式鎖(二)

&#xff08;以下所有內容全部來自上述課程&#xff09; 分布式鎖 1. Redisson功能介紹 基于setnx實現的分布式鎖存在下面的問題&#xff1a; 不可重入&#xff1a;同一個線程無法多次獲取同一把鎖不可重試&#xff1a;獲取鎖只嘗試一次就返回false&#xff0c;沒有重試機…

ES入門教程 (python 版)

ES入門教程 1. 創建ES對象from elasticsearch import Elasticsearch # 實例化一個ip為localhost&#xff0c;端口為9200&#xff0c;允許超時一小時的es對象 es Elasticsearch(hosts"localhost",port9200,timeout3600) # 1. 創建 索引 index_name "test"…