文章概要
大家好,我是那个把黑眼圈熬成华为工牌挂绳的倒霉蛋。过去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"…