鸿蒙真机帧率崩了:ArkUI 呼吸动画 GPU/Canvas fallback 排查全过程

鸿蒙第16篇——数据持久化 本文介绍的数据持久化是指鸿蒙应用的数据持久化存储。它是将内存中的数据通过文件或数据库的形式保存到设备存储中。鸿蒙支持多种数据存储方式, 包括用户首选项Preferences、 键值型数据库KV-Store和关系型数据库。 阅读详情

动画在模拟器上跑得很顺,一到真机帧率就崩了

那是 1.0 上线前两周的事。呼吸动画在 DevEco 模拟器里跑得很丝滑,我以为没问题了,刷到真机一看——吸气动画明显在抖,从 0.6 缩放到 1.0 的过程里有肉眼可见的卡顿,感觉像在一帧一帧地跳。

我花了差不多两周才搞清楚根本原因:吸气到屏息的相位切换点,渲染器悄悄从 GPU 路径 fallback 到 Canvas,帧时间从正常的 16ms 飙到了 48ms 以上,用户感知就是「卡了一下」。

先交代一下背景。这个 App 叫「呼吸视界」,做的是结构化呼吸训练——4-7-8 呼吸法、盒式呼吸这类。核心交互就一个:一个随呼吸节拍膨胀收缩的动画圆,配合吸气/屏息/呼气的文字提示。听起来简单,但「跟着它呼吸」这件事对动画流畅度的感知比普通 UI 敏感得多——哪怕卡 30ms,用户在屏息阶段注意力高度集中,就会感觉到。


呼吸动画的基本结构

先看核心动画代码,是用 ArkTS + ArkUI 的 animateTo 做的阶段控制:

enum BreathPhase { INHALE, HOLD, EXHALE, REST }

@State private phase: BreathPhase = BreathPhase.INHALE
@State private scale: number = 0.6

private startPhase(phase: BreathPhase, durationMs: number, targetScale: number) {
  this.phase = phase
    animateTo({ duration: durationMs, curve: Curve.EaseInOut }, () => {
        this.scale = targetScale
          })
          }
// 4-7-8:吸气4s,屏息7s,呼气8s
// 注意:下面是简化示意,实际循环用的是基于 AudioRenderer 时钟的
// 累积误差补偿机制,而不是直接嵌套 setTimeout——多轮之后 setTimeout
// 会有明显漂移,在呼吸节拍这种强时序场景里感知很明显
private run478() {
  this.startPhase(BreathPhase.INHALE, 4000, 1.0)
    setTimeout(() => this.startPhase(BreathPhase.HOLD, 7000, 1.0), 4000)
      setTimeout(() => this.startPhase(BreathPhase.EXHALE, 8000, 0.6), 11000)
      }
      ```
这里特别说一下 `setTimeout` 的问题:如果真的用嵌套 `setTimeout` 做循环,跑个五六轮之后节拍会漂移,用户跟着呼吸会感觉节奏越来越不对。实际实现里我换成了基于时间戳的累积误差补偿——每个阶段结束时计算「预期时间 vs 实际时间」的 delta,下一个阶段的 duration 做修正。这部分逻辑不复杂,但不处理的话有经验的用户是能感觉到的。

`EaseInOut` 曲线这个选择也值得提一下。在「屏息→呼气」的过渡点,`Linear` 曲线会让圆突然开始缩小,感觉有点硬;`EaseInOut` 让收缩有个加速过程,跟真实呼气的身体感受更接近。这种细节在功能描述上看不出来,但实际体验差异挺明显。

---

## 帧率崩的根本原因:GPU fallback

发现帧率问题之后,第一反应是「动画写法有问题」,试了几个参数调整都没解决。

后来我写了一个 hilog 分析脚本,专门抓渲染性能数据。先用 hdc 命令抓 log:

```bash
hdc shell hilog -T BF_PERF > perf_capture.txt

App 里我在每帧渲染回调里打了带 BF_PERF 标签的日志,格式大概是这样:

BF_PERF fps=58.2 frameMs=17.1 tickMs=2.3 playing=1 gpu=1 quality=balanced phase=INHALE
BF_PERF fps=31.4 frameMs=48.7 tickMs=3.1 playing=1 gpu=0 quality=balanced phase=HOLD

analyze_perf_hilog.py 的核心逻辑就是用正则把这些字段解析出来,按 phase 分组统计:

LINE_RE = re.compile(
    r"BF_PERF.*?fps=(?P<fps>[\d.]+)\s+"
        r"frameMs=(?P<frame_ms>[\d.]+)\s+"
            r"playing=(?P<playing>[01])\s+"
                r"gpu=(?P<gpu>[01])\s+"
                    r"quality=(?P<quality>\w+)\s+"
                        r"phase=(?P<phase>\w+)"
                        )
# 按 phase 分组,统计 avg frameMs 和 gpu=0 的比例
for sample in samples:
    bucket = stats[sample.phase]
        bucket["frame_ms"].append(sample.frame_ms)
            if not sample.gpu:
                    bucket["fallback_count"] += 1
                    ```
跑完数据一目了然:**INHALE 阶段平均 frameMs 17ms,gpu=1 占比 96%;HOLD 阶段平均 frameMs 42ms,gpu=0 比例高达 61%**。

问题很清楚了:相位切换瞬间,`animateTo` 触发属性重算,某些中端机型(测试用的是荣耀 X50)GPU 判定这帧渲染压力超阈值,自动 fallback 到 Canvas 软渲染,帧时间直接翻三倍。

---

## 解法:分级渲染 + 主动降级

搞清楚原因之后,解法思路就有了。

**第一步**,把相位切换时的重绘开销降下来。原来的写法在切换 phase 时会同时触发文字更新和动画参数变化,两个 `@State` 变更叠在一帧里。改成先更新动画,文字在动画开始后 50ms 再更新,把重绘拆开,减少单帧压力。

**第二步**,主动适配渲染质量。我加了一个 `quality` 策略:正常情况跑 `balanced`(GPU 路径,完整阴影和模糊效果);检测到 frameMs 连续三帧超过 33ms,切换到 `low`(Canvas 路径,去掉模糊,简化阴影)。切换用 `BF_PERF_ADAPT` 标签记录,方便后续分析。

实测结果:荣耀 X50 上 HOLD 阶段平均 frameMs 从 42ms 降到 21ms,gpu=0 比例从 61% 降到 18%,肉眼卡顿消失。高端机(Mate 60 Pro)全程跑 `balanced`,没有触发降级。

有点可惜的是 `low` 质量下视觉效果差了一点,模糊光晕去掉之后呼吸圆「没那么有呼吸感」。这是个取舍,流畅度优先,不然用户感受更差。

---

## 课程进度系统:另一个花时间的地方

动画之外,课程进度系统也比预期麻烦。

用户可能今天练第 3 节,明天回来继续,或者重置重来。我用 `ProgramProgressRecord` 结构做本地持久化,存在 HarmonyOS Preferences(轻量 KV 存储)里,序列化成 JSON。数据不上云,用户的练习轨迹完全在本地——这个设计选择一部分是出于隐私考虑,一部分是减少服务端依赖。

这块逻辑重构了两次。第一版把进度状态直接挂在页面组件里,跨页面同步很痛苦;第二版抽成独立 Repository 层,状态通过 `AppStorage` 全局共享,干净多了。

另外还做了一套 CI 检查脚本(`check_foundation_alignment.py`),整合了设计 token 校验、i18n key 对齐检查、路由检查等,每次提交自动跑。中英 key 不对齐会导致英文界面显示空白,这个坑踩过一次之后就加了自动检查。

---

## 顺便说一下呼吸法本身

**4-7-8 呼吸法**:吸气 4 秒、屏息 7 秒、呼气 8 秒。较长的呼气时间激活副交感神经,能快速降低心率。开会前两轮,我自己试过,效果是真实的。

**盒式呼吸(Box Breathing)**:四个阶段各 4 秒,节奏均匀。更适合需要专注但不想完全放松的场景,据说是特种部队在高压环境下稳定状态的标准方法。

把这两种方法做进课程体系、加上进度追踪,是我觉得这个 App 区别于「又一个计时器」的地方。

---

## 现在的状态

版本 1.8,已上架鸿蒙应用市场(App ID: 6758613852),评分 5 分。量还小,属于早期阶段。有个用户评论说「可以跟随练习呼吸,保持稳定的心情」,挺朴实,但说明方向没走偏。

鸿蒙端用户基数现在确实比 iOS 小,但做鸿蒙开发的内容相对少,技术文章更容易被找到——这也是我把排查过程写出来的原因之一。

---

你们在鸿蒙真机上调动画性能用的什么方法?hilog 之外还有别的手段吗——我现在主要靠自定义 hilog + Python 脚本分析,想知道有没有更系统的工具链可以用。
SMARTFORMS实战:用Template+Loop实现复杂表格布局(附避坑指南) 本文深入解析了SMARTFORMS中Template与Loop组合实现复杂表格布局的实战技巧,突破传统TABLE组件的限制。通过多级表头、单元格合并等案例演示,提供从基础架构搭建到动态数据绑定的完整解决方案,并分享性能优化与异常处理的最佳实践,助力开发者高效应对企业级报表设计挑战。 阅读详情

相关推荐

从法律文档到知识图谱

这里我们定义了两个 Pydantic 模型:Location 用于捕捉结构化的地址信息,包含可选的国家、州和地址字段;Party 用于表示合同参与方,包含必填的名称和可选的位置详情。字段描述通过告知 LLM 每个字段具体需要查找哪些信息,来辅助提取过程。"""包含结构化地址组件的位置信息。"""country: Optional[str] = Field(None, description="国家")

Anspire的博客 3030

HarmonyOS 7 端侧 AI 图像超分的工程化落地

用户抱怨网络差的时候图片传不上去,更严重的是,大量的私密照片上传到云端,引发了严重的隐私合规审查危机。痛定思痛后,我们决定把 AI 模型直接塞进手机里,用端侧的 NPU 来做推理,但这绝非易事。我们首先在服务端对模型进行了知识蒸馏,把参数砍掉了一大半,然后利用 MindSpore Lite 的转换工具,将模型转成了鸿蒙底层支持的。即便如此,模型依然有 20 多兆,我们最终选择了 FP16 量化,牺牲了极其微小的画质,换取了内存占用减半。推理过程极其消耗 CPU 和内存,稍微大一点的图,处理时间长达几秒。

2602_97267507的博客 156

WPF+Prism+LiveCharts+materialdesignin 搭建WPF开发框架

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容。

T_Tboy的博客 3049

〖物流终端实战 05〗纯血鸿蒙 ArkTS 高阶性能优化:长列表渲染、组件复用与内存泄漏排查

本文深度剖析鸿蒙ArkTS高阶性能优化,直击长列表卡顿与内存泄漏痛点。针对渲染,指出ForEach全量构建的缺陷,强调采用LazyForEach(V2推荐Repeat)配合增量通知及稳定业务Key;针对组件复用,明确@Reusable仅复用实例不重置状态,必须在aboutToReuse中手动清理UI状态;针对内存泄漏,总结全局监听未注销、定时器未清理及长生命周期对象持有页面引用三大元凶,并指导通过DevEco Profiler的Heap快照排查引用链。文章强调优化需遵循“先定位后改代码”原则,助力开发者打造

Eyf • 半字节的博客 633

载波同步技术(一):BPSK的Costas Loop 载波同步

Author:McCrocodile 2010/11/04          载波的提取在相干解调中往往比较重要,根据信号中是否包含载频分量,载波同步一般也可以分为两种方法。包含载频分量的可以采用窄带滤波或者基本的锁相环环路来实现,不包含的则比较麻烦需要采用特殊的环路实现载波的同步。这里介绍的BPSK的载波恢复就属于后面一种。 对于不包含载频分量的信号载波同步一般有:同相-正交环(就是常说的Costas环)、判决反馈环(几乎可以适用所有调制方式)、同相-正交环衍生环(QPSK松尾环、N相同相-正交环)。

McCrocodile Blog 1万+

行政数据分析大屏实战:用Tableau从Excel到看板的完整搭建流程(含数据连接与字段计算避坑)

本文详细介绍了如何利用Tableau从Excel数据源搭建行政数据分析大屏的完整流程,涵盖数据准备、连接技巧、计算字段优化、看板设计及动态交互部署。通过五阶工作流,帮助用户高效处理多源异构数据,实现业务洞察与可视化呈现,提升行政数据分析效率。

weixin_29696711的博客 336

AppGallery 上架自检 SOP:签名、隐私对齐与包体校验实战【鸿蒙心迹】

上架被驳回多因签名、隐私声明与包体不一致。本文提炼“签名→隐私对齐→包体校验”自检SOP,配套一键脚本与权限三角校验代码,实现90%驳回前置拦截。通过CI强制release签名、代码/声明/功能三者权限对齐、包体完整性校验,确保提审一次过。实战清单可直接抄,让过审从运气变为流程。

wdracky的专栏 311

【即插即用模块】Transformer篇 | CVPR 2025 | D2T:双域特征融合,完美适配缺陷检测/小目标检测和分割等频域细节敏感的任务!

本文提出了一种基于小波和原型增强的双域Transformer(WPFormer)用于像素级表面缺陷检测。该模型通过Dual-domain Transformer (D2T)模块融合频域和空间域特征:小波增强交叉注意力(WCA)分解高低频特征并加权平衡,增强缺陷细节捕捉;原型引导注意力(PCA)生成全局原型向量强化关键信息聚合。实验表明,该模块在缺陷检测任务中性能优于现有方法,通过频域细节增强和全局依赖建模有效提升了复杂场景下的检测效果。代码已开源,适用于对频域敏感的目标检测和分割任务。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1374

【鸿蒙专题与实战】测试体系:单元测试、组件测试与 UI 测试

本文系统讲解鸿蒙开发中的三层测试实践:底层单元测试(用Hypium框架,优先覆盖纯函数、边界与异常)、中层ViewModel逻辑、顶层仅测3-5条关键UI路径。强调测试应“越往下写得越多”,因单元测试快且成本低,而UI测试慢易出错。通过实例说明断言拆分提升定位效率,结合覆盖率报告(hvigorwtest --coverage)发现盲区,核心是“用覆盖率找漏测,而非追求数字”。附五步落地清单:建测试文件、按优先级补用例、精简UI测试、生成报告、定位未覆盖行。下一篇将开启实战项目:从需求到上架全流程。

信息安全领域优质创作者|操作系统领域专家 162

【AI 编程工具】Codex配置部署指南

目录一、环境准备与基础安装1. 系统兼容性检查2. 前置依赖安装3. 安装方式选择二、API密钥配置与认证1. 获取API密钥2. 配置文件设置3. 临时配置方式三、沙盒环境配置与安全策略1. 沙盒模式选择2. 安全最佳实践四、高级功能配置1. 模型上下文协议(MCP)配置2. 模型版本切换3. 自定义网关配置五、常见问题排查1. 安装失败2. API调用失败3. 处理速度慢4. 配置文件不生效六、生产环境部署建议macOS/Linux:官方提供稳定支持,推荐使用原生环境Windows:官方标注为实验性支持

以实战经验介绍行业知识 2883

【ARMv8 异常模型入门及渐进7 - GIC及安全中断介绍】

GIC-v3中,引入了支持2种安全状态(secure state),也就是对于中断,根据secure状态,分为安全中断和非安全中断。当然也可以只支持一种安全状态。这里的2种安全状态和1种安全状态,主要是影响中断分组,所使用IRQ和FIQ管脚的映射,以及gic中的寄存器访问。

CodingCos的博客 2116

窗口销毁了监听还在,HarmonyOS 7 生命周期释放的归属分界

综上所述,onWindowStageWillDestroy 是窗口监听的最后安全出口,onWindowStageDestroy 只负责断开窗口引用,onDestroy 管 Ability 级资源——三者不是“程度不同的退出回调”,而是各自有明确的归属范围。窗口监听的所有者是 WindowStage,定时器的所有者是 UIAbility,播放器的所有者是页面或 Ability(取决于你在哪一层创建的),ApplicationContext 监听的所有者是 Ability 的 context。

qq_61905492的博客 197

使用 MATLAB/Simulink + Simscape Electrical 构建一个他励直流电机的启动与制动过程仿真模型

直流电机在工业控制、电动车辆、自动化设备中广泛应用。其中,他励直流电机(Separately Excited DC Motor)因其励磁绕组与电枢绕组分别供电,具有良好的调速性能和启动特性,常用于需要平稳启动和精确控制的场合。在实际应用中,电机的启动过程和制动过程对电网、机械系统以及电机本身都具有重要影响。因此,仿真分析他励直流电机的启动与制动特性,是电机控制设计的重要环节。本文将详细介绍如何使用构建一个他励直流电机的启动与制动过程仿真模型,并通过仿真分析其动态响应。本文详细介绍了如何使用构建一个。

amy_mhd的博客 231

鸿蒙平板能当电脑第二块屏幕吗?ToDesk、向日葵镜像/副屏实测

本文对比测试了ToDesk鸿蒙版4.8.3.0与向日葵鸿蒙版16.8.0在连接鸿蒙平板作为电脑副屏的表现。结果显示,ToDesk可直接实现镜像屏与扩展屏功能,支持参数调节,操作流畅;而向日葵副屏需开通会员才能使用。对于已有鸿蒙平板的用户,ToDesk能有效拓展工作空间,提升多任务效率,尤其适合临时办公、出差等场景,具备较高实用价值。

2501_91062530的博客 2312

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

React Native for OpenHarmony 实战:react-native-file-logger 日志库鸿蒙化适配

本文记录了将 react-native-file-logger 适配至 OpenHarmony 的实战过程。基于鸿蒙 7.0 模拟器,通过 5 个 TurboModule 方法实现日志落盘、轮转、列举与删除,采用 fileIo 实现核心功能,支持按大小和跨天轮转,归档文件命名精确至毫秒。邮件发送功能因平台限制按能力边界处理,明确拒绝并提示用户手动导出。验证通过,日志文件结构清晰,内容完整,产出 HAP 示例与独立 HAR 库,中英双语文档齐全,为鸿蒙应用日志管理提供可靠方案。

m0_62930060的博客 232

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【鸿蒙心迹】深色模式适配全链路——从配置到自定义(HarmonyOS 7.x)

系统切深色模式,应用没跟着变;图片在深色模式下刺眼;自定义绘制颜色没适配——深色模式不是"换个背景色",是颜色/图片/材质/状态栏的全链路适配。本文用涟漪睡眠 App 适配深色模式为案例,给完整方案与 5 个踩坑。

腾讯云创作之星、华为云云享专家,深耕电商全栈高并发系统实战,分享可商用商城项目源码。 361

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【共创稿事节】HarmonyOS 7.0 Marquee跑马灯:从接入到生产验证

HarmonyOS 7.0 Marquee跑马灯:从接入到生产验证:真实工程复盘,附代码与验证方法。

2401_84996024的博客 160

平行视界兼容模式与魔法变量配置避坑【鸿蒙心迹】

本文详解折叠屏兼容模式下“魔法变量”配置的五大易错点,强调maxWindowRatio与minWindowRatio必须满足max ≥ min、centerAlign需显式设为true、minCompitableVersion拼写为Compitable等关键细节。通过校验函数实现上线前批量机型测试,结合排查流程图快速定位分栏失效问题。虽兼容模式可零代码实现分栏,但存在状态共享风险,长期仍建议按规范开发原生平行视界分栏。

wdracky的专栏 1086

HarmonyOS 7 应用冷启动与包体积优化实录

我们在构建脚本里加入了一个自动转换任务,将除了极其复杂的透明图之外的所有静态资源,全部转换为 WebP 格式。为了这 5% 的用户,让 95% 的用户承担 30MB 的下载成本,显然不划算。目录,里面躺着无数历史遗留的高清切图,有些是早被废弃的活动图,有些是同一张图的多个尺寸备份。这一招,直接砍掉了将近 15MB 的死重。我们将短视频相关的所有代码、图片、甚至底层的播放器三方库,全部剥离到了独立的 Feature 模块(HSP)中。包变小了,启动速度自然会快一点,但真正的瓶颈在于冷启动时的初始化逻辑。

2502_91284977的博客 169

鸿蒙远程控制软件哪个好?华为远程PC、ToDesk、向日葵三款实测

综合来看,本次横测最终更推荐ToDesk:它在支持跨品牌连接的基础上,外接鼠标、全屏远控、移动设备协助和多屏功能覆盖更完整,更适合作为主力远控工具。

2401_85083137的博客 332

HarmonyOS 分布式深度:跨端迁移、数据对象与多设备协同

本文深入解析鸿蒙分布式能力实战,聚焦跨端迁移、协同与共享三大形态,详解权限配置、设备发现、onContinue状态管理及分布式数据对象、KV同步机制。强调“先分清场景”“前置条件必全”“数据需重验”,揭示迁移失败、同步失效等七大常见坑,指导开发者规避陷阱,实现真实可用的多设备协同。

信息安全领域优质创作者|操作系统领域专家 59

导航该收起来,还是留在左边?HarmonyOS 6 侧栏小练习

手机宽度下,分类一直占着左边,正文会被挤得很窄;宽窗口下,每次切分类都先打开一个抽屉,又显得多了一步。这次让同一个导航内容根据空间换一种出现方式:宽时常驻左侧,窄时放到覆盖式抽屉里。分类选中状态始终是一份,切完分类后收起抽屉,正文立即显示对应路线。判断这份导航是否合适,可以回到一次切路线的动作:找得到目录,选得中分类,关掉后正文仍是刚才那一条。宽窄变化只影响目录出现的位置和时机。后面扩展层级或接入真实路线时,也先保住这一条连贯的操作。

程序猿追的博客 250

HarmonyOS 7 新特性14:音频编创深潜——12节点格式契约、7链时延表与EQ不设参引发的系统库崩溃

本文深度剖析HarmonyOS 7音频编创系统中12类节点的格式契约与链式处理机制,揭示因未设置均衡器增益参数导致系统库崩溃的核心问题。通过7条链路实测,验证降噪节点引入约3秒延迟,音源分离首测成功(耗时14.6秒),并发现格式契约存在软约束(如降噪输出强制16k/1ch但系统静默容忍错误配置)。研究确认:节点格式由链尾决定,需动态查表配置;均衡器等节点必须调用参数接口初始化缓冲,否则触发不可捕获的SIGSEGV。

轻口味的专栏 166

从 JChemPaint 到 BondDraw:一个化学结构编辑器的鸿蒙 PC 上架实录

这次上架最大的收获是流程的确定性:AGC 五步——建应用、签名、传包、审核、上架——对任何形态的鸿蒙 PC 应用都一样,坑集中在签名分流和工程收尾两处。而纯 ArkTS 路线的回报也在这一刻兑现:几百 KB 的包体、零权限的权限表、一个可以低成本持续迭代的市场通道——“版本/升级”入口已经在 AGC 里候着,下一版只是 versionCode 加一的事。

全沾软贱开发攻城狮 1万+

脱离 IDE 的自动化构建 HarmonyOS 7 CI/CD 签名与打包流水线

每次发版前,都要在本地打包、重命名、上传到测试平台,不仅浪费时间,还极容易因为手滑拿错版本。配合上代码混淆(Obfuscation),即使被人反编译,也抓不到你的真实接口地址。这要求你在 GitLab 的 CI/CD 变量里,把密码加密存储,并在流水线脚本里通过环境变量注入。在流水线环境中,守护进程会导致文件句柄无法释放,下一次构建时直接报错文件被占用。没问题,但在流水线上跑,极其容易报 Node.js 版本不兼容或者找不到模块。拉取依赖时,如果配置了私有仓库,可能需要凭证。不要用 IDE,打开终端,用。

2602_97267507的博客 220

【共创稿事节】HarmonyOS 应用上架全流程中的隐私合规:权限最小化、数据本地化与 AppAnalyzer 体检

面向准备首次上架的鸿蒙开发者。本文以一个"仅 2 项权限、零联网"的本地应用为例,给出 module.json5 权限声明、DocumentViewPicker 免权限保存、systemShare 分享、relationalStore 参数化查询的真实代码,并附驳回原因自查表与打包验证输出。

腾讯云创作之星、华为云云享专家,深耕电商全栈高并发系统实战,分享可商用商城项目源码。 361
上一篇: 我用 HarmonyOS 做了个加密App:密文看起来就是一段唐诗
下一篇: 我做了一个「把走路变成探索面积」的iOS App——成就系统的数据建模:为什么我把用户状态抽成一个纯值快照
SameX-4869
博客等级 码龄17年 3354粉丝 657原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值