以下是 HarmonyOS 应用开发中 ‌组件交互‌ 的核心知识点梳理(高级认证备考重点),涵盖事件传递、状态管理、通信机制及生命周期协同:

一、事件处理机制

基础交互类型‌

(1)点击事件(onClick)

核心要点‌:

触发条件‌:组件被点击时触发,适用于按钮、文本、图片等可交互元素‌。

事件对象‌:ClickEvent 包含触点坐标(x, y)和触发时间戳(timestamp)‌。

实现方式‌(四种写法):

匿名函数‌(推荐):

Button("点击")  .onClick(() => { console.log("点击触发"); })  

自定义事件类‌:实现 ClickedListener 接口并重写 onClick 方法‌
组件绑定ID‌:通过 $r('app.id.xx') 获取组件实例‌
Lambda表达式‌:简化回调逻辑‌

高级控制‌:

防抖处理‌:.onClick({ delay: 300 }, () => {})(300ms内仅触发一次)‌
事件穿透‌:.hitTestBehavior(HitTestMode.Transparent) 允许下层组件响应‌


(2)触摸事件(onTouch)

核心要点‌:

触发阶段‌:

事件类型触发时机
TouchType.Down手指按下
TouchType.Move手指滑动
TouchType.Up手指抬起
TouchType.Cancel事件中断(如来电打断)

事件对象‌:

touches[].x/y:触点坐标
target.area:触发组件的宽高信息
type:当前触摸阶段‌

多层响应规则‌:

父子组件‌:默认同时触发(如父容器和子按钮)
兄弟组件‌:
Column/Row 布局:按布局位置响应
Stack 布局:根据堆叠层级响应(上层组件优先)‌
拦截控制‌:event.stopPropagation() 中断事件传递‌


(3)焦点事件(onFocus/onBlur)

适用场景‌:TV遥控器、车机旋钮等非触控设备交互‌
核心概念‌:
焦点链‌:从根组件到当前焦点组件的路径
走焦‌:焦点在组件间的转移行为‌
关键方法‌:
主动获焦‌:focusControl.requestFocus("id")‌
默认焦点‌:.defaultFocus(true)(页面初始化时自动聚焦)‌
组件支持‌:
默认支持:Button, TextInput, List 等
需手动开启:Text, Image 需设置 focusable(true)‌


(4)高频考点与避坑指南

事件冲突解决‌:

手势竞争:通过 GestureGroup 的 Parallel(并行)或 Exclusive(互斥)模式管理‌
焦点抢占:tabIndex 属性控制走焦顺序‌

性能优化‌:

避免在事件回调中执行耗时操作(如网络请求)
使用防抖减少高频事件(如滚动)的触发频率‌

认证重点‌:

a、点击事件的四种实现方式差异‌

实现方式语法简洁性复用性适用场景
自定义实现类多组件共享相同逻辑
当前类作为实现类事件逻辑与页面紧密关联
匿名内部类简单临时逻辑
Lambda表达式简洁回调(推荐简单场景)

b、触摸事件在 Stack 布局中的响应规则

通过设置组件的 hitTestBehavior 属性可改变默认规则,支持四种模式:

模式自身响应子节点响应兄弟节点响应典型场景
Default(默认)❌(阻塞)常规层叠按钮
Block全屏遮罩(独占事件)
Transparent✅(穿透)上层透明区域穿透事件
None仅子组件响应(如容器背景)

c、焦点链概念及 requestFocus 的正确使用‌

  • 焦点链‌:当组件获焦时,从根节点到该组件的整条路径节点均处于焦点状态,形成一条连续的链式结构。

  • 核心特性‌:

    • 路径中所有节点均可接收焦点相关事件(如 onFocus/onBlur

    • 焦点链动态变化,随当前获焦组件实时更新。

焦点态渲染规则

  • 子组件优先‌:若焦点链中多个组件需显示焦点态(如高亮边框),系统仅渲染最末子组件的焦点态。

  • 焦点态触发条件‌:

    • 外接键盘按下 TAB/方向键时显示。

    • 点击事件(触屏/鼠标)会隐藏焦点态

 requestFocus 的正确使用

功能与限制

  • 作用‌:主动申请将焦点转移到指定组件(属于‌主动走焦‌行为)。

  • 生效前提‌:

    • 目标组件必须设置 focusable(true)

    • 组件需在当前视图树中渲染完成(如不在 if/else 隐藏分支中)

使用场景

  • 默认焦点指定‌:页面初始化时聚焦特定组件(如搜索框):

    Button('Submit')  .focusable(true)  .defaultFocus(true)  // API 11+ 推荐方式.requestFocus()      // 备用方案  
    
  • 动态焦点恢复‌:列表更新后重新聚焦原位置

事件传递规则‌

(1)事件传递基础规则

冒泡与非冒泡事件分类‌

冒泡事件‌:子组件触发后向父组件逐级传递(如点击事件)
非冒泡事件‌:仅触发当前组件,不向上传递(如组件区域变化事件)

默认传递路径‌

纵向传递‌:Column/List 等线性布局按子组件顺序响应
横向传递‌:Row 布局按子组件排列顺序响应
堆叠传递‌:Stack 布局中上层组件优先响应


(2)事件拦截与控制

拦截方法‌

冒泡中断‌:event.stopPropagation() 阻止事件继续传递
命中测试‌:hitTestBehavior() 设置:
Block:拦截事件(默认)
Transparent:允许事件穿透至下层组件

焦点事件特殊规则‌

焦点链按 tabIndex 属性顺序走焦,需显式设置 focusable(true) 的组件方可获焦


(3)高级认证考点

手势冲突解决‌

GestureGroup 的两种模式:
Parallel:并行响应多手势(如缩放+旋转)
Exclusive:互斥响应(如滑动与长按)

跨组件通信联动‌

父子组件:通过 @Prop/@Link 同步状态触发事件
跨层级组件:使用 EventHub 或 Emitter 实现事件总线通信

性能优化要点‌

避免在冒泡链上多层组件重复处理同一事件
高频事件(如滚动)需添加防抖/节流控制


(5)典型场景示例

// 冒泡事件拦截示例  
Button("拦截按钮")  .onClick((event: ClickEvent) => {  event.stopPropagation(); // 阻止父组件接收事件  })  
// 事件穿透示例  
Text("下层文本")  .hitTestBehavior(HitTestMode.Transparent) // 允许上层按钮事件穿透  

二、状态驱动交互

状态管理装饰器‌

(1)基础状态装饰器

@State‌

作用‌:组件私有状态管理,变量变化触发当前组件 UI 刷新
特点‌:
必须本地初始化
支持基本类型(string/number/boolean)、对象及数组
仅能观测对象第一层属性变化(嵌套需配合 @Observed)

@Prop‌

单向同步‌:父组件 @State → 子组件 @Prop(子组件修改不反向同步)
典型场景‌:父组件向子组件传递只读数据

@Link‌

双向绑定‌:父子组件状态实时同步(任一修改均触发对方更新)
限制‌:必须通过父组件 @State 或 @Link 初始化


(2)跨层级状态共享

@Provide & @Consume‌

作用‌:跨组件层级双向同步状态(如爷孙组件)
优势‌:避免多层 @Prop/@Link 传递的冗余代码

@ObjectLink‌

嵌套对象管理‌:配合 @Observed 装饰类,监听对象深层属性变化
示例‌:

@Observed class User { name: string = '' }  
@ObjectLink user: User  // 监听user.name变化  

(3)应用级状态管理

AppStorage‌

全局状态池‌:应用内所有组件共享的中心化存储
关联装饰器‌:
@StorageLink:与 AppStorage 双向同步
@StorageProp:与 AppStorage 单向同步

AppStorageV2(进阶)‌

增强特性‌:支持主线程多 UIAbility 实例共享、手动 API 操作等


(4)高频考点与避坑指南

装饰器选择原则‌

场景推荐装饰器
组件内部状态@State
父子单向同步@Prop
父子双向同步@Link
跨层级共享@Provide/@Consume
嵌套对象监听@Observed+@ObjectLink
全局状态AppStorage+@StorageLink

性能优化‌

避免在 @State 中存储过大对象(建议拆分为多个状态变量)
使用 @Watch 监听状态变化执行副作用逻辑

认证重点‌

a、@State 与 @Prop/@Link 的初始化差异

装饰器数据来源初始化方式同步方向
@State组件内部必须本地初始化仅向下(子组件)
@Prop父组件 @State禁止本地初始化单向(父→子)
@Link父组件 @State禁止本地初始化双向(父↔子)

b、@ObjectLink 必须配合 @Observed 使用的原因

根本原因:嵌套对象属性监听缺陷

@State@Link 等装饰器仅能观察到数据的第一层属性变化(如对象引用地址变更),无法自动检测嵌套对象内部属性的修改(如 obj.a.b 的变化)

@ObjectLink 用于在子组件中建立与父组件‌嵌套对象属性的双向绑定

但 @ObjectLink 本身‌不具备深度监听能力‌,需依赖 @Observed 增强目标对象的可观察性

@Observed 装饰器通过改写类的 getter/setter 方法,使被装饰类的‌所有属性变更均可被框架捕获‌(包括嵌套属性)

当 @Observed 修饰的类实例属性变化时,自动通知依赖该对象的 @ObjectLink 变量

graph LRA[父组件] -->|传递嵌套对象| B(子组件)B --> C[@ObjectLink 变量]D[@Observed 修饰的类] -->|增强属性监听| CC -->|属性修改| DD -->|触发更新| A[父组件状态同步]

c、AppStorage 与组件生命周期的联动关系

与组件生命周期的联动机制

数据初始化时机

组件挂载时‌:

  • 使用 @StorageLink 或 @StorageProp 的组件会在 aboutToAppear 阶段从 AppStorage 同步初始值。
  • 若 AppStorage 中无对应 key,则使用装饰器的默认值(如 @StorageLink('count') count: number = 0

 UIAbility 启动时‌:

  • 可通过 AppStorage.SetOrCreate() 在 UIAbility 的 onCreate 阶段预置全局数据

数据更新与渲染

双向绑定(@StorageLink)‌:

  • 组件内修改数据会实时同步到 AppStorage,并触发其他绑定同一 key 的组件更新。
  • 更新流程:组件修改 → AppStorage 同步 → 触发依赖组件的 build() 重新渲染

 单向绑定(@StorageProp)‌:

  • AppStorage 数据变化会通知组件更新,但组件内修改不会回传

组件销毁时的行为

自动解绑‌:

  • 组件在 aboutToDisappear 阶段会自动解除与 AppStorage 的绑定关系,避免内存泄漏

数据保留‌:

  • AppStorage 中的数据不会因组件销毁而清除,除非显式调用 AppStorage.Delete()

状态更新优化‌

(1)状态更新机制原理

状态驱动UI的本质‌

状态变量(如@State)变化触发组件build()方法重新执行,实现UI动态更新。
关键限制‌:默认仅监听第一层属性变化(如对象引用变更),嵌套属性需@Observed+@ObjectLink组合。

装饰器性能差异‌

@State:组件内高效响应,但过度使用会导致冗余渲染。
@Link/@Provide:跨组件通信时优先选择,避免多层@Prop传递。

(2)核心优化策略

1. ‌减少无效渲染‌
状态拆分‌:将大对象拆分为多个@State基本类型变量(如count: number而非config: object)。
精准绑定‌:子组件仅依赖必要数据,使用@Prop隔离父组件状态变更。
2. ‌列表性能优化‌
懒加载‌:长列表必须使用LazyForEach,仅渲染可视区域项。
批量更新‌:避免频繁push,改用数组替换(this.items = [...newItems])。
3. ‌动画与布局优化‌
转场动画‌:优先使用transition而非animateTo,减少属性更新次数。
图形变换‌:修改scale/rotate替代width/height变更,避免触发布局计算。

(3)高级场景实践

全局状态管理‌

AppStorage+@StorageLink:实现跨页面状态共享,注意数据量需<2MB。
PersistentStorage:持久化关键状态,仅支持基本数据类型。

线程安全‌

主线程状态修改通过TaskPool异步处理,避免阻塞UI线程。
Worker线程需通过postMessage与主线程同步状态。


(4)认证高频考点

装饰器选型‌

父子通信:@Link > @Prop > 事件回调。
深层嵌套:必须使用@Observed逐层修饰类。

性能问题排查‌

列表卡顿:检查是否遗漏LazyForEach或存在深层嵌套。
内存泄漏:确保aboutToDisappear中解绑事件和状态。

三、组件通信机制

同 Ability 内通信‌

(1)基础通信方式

装饰器状态管理‌

@State + @Prop:父组件通过@State管理数据,子组件通过@Prop单向接收(子组件修改不反向同步)。
@State + @Link:父子组件双向绑定,共享同一数据源。

跨层级通信‌

@Provide + @Consume:祖先组件提供数据,后代组件直接消费,支持任意层级双向同步。


(2)事件驱动通信

EventHub机制‌

基于发布订阅模式,支持同Ability内任意组件间通信。
使用流程:

// 订阅事件
this.uiAbilityContext.eventHub.on('eventName', callback);
// 发布事件
this.uiAbilityContext.eventHub.emit('eventName');
// 取消订阅
this.uiAbilityContext.eventHub.off('eventName');

来源:

全局对象‌

globalThis:ArkTS引擎实例的全局对象,可在同Ability内任意组件访问。

(3)性能优化建议


减少无效渲染‌
优先使用@Prop隔离非必要状态传递,避免父组件更新触发子组件冗余渲染。
事件解耦‌
在组件aboutToDisappear中及时调用eventHub.off(),防止内存泄漏。

(4)认证高频考点


装饰器选型场景‌
父子通信:@Link > @Prop > 事件回调。
深层嵌套:必须使用@Provide/@Consume。
EventHub与全局对象对比‌
EventHub更适合解耦通信,globalThis适合轻量级数据共享。

跨 Ability 通信‌

(1)基础通信方式

Intent显式跳转‌

通过OperationBuilder指定目标Ability的‌设备ID‌(跨设备需填入有效ID,本设备留空)、‌BundleName‌和‌AbilityName‌,实现精确启动并传递参数。
示例代码:

let intent: Intent = new Intent();
intent.operation = new OperationBuilder().withDeviceId('') // 本设备留空.withBundleName('com.example.app').withAbilityName('com.example.app.SecondAbility').build();
intent.setParam('key', 'value'); // 传递参数
context.startAbility(intent); // 启动目标Ability

隐式跳转(FA模型)‌

在config.json中声明目标Ability的actions和entities属性,通过Intent的action匹配跳转(Stage模型已弃用)。


(2)高级通信方案

公共事件(CommonEvent)‌

系统公共事件‌:监听设备状态变化(如开机、网络切换)。
自定义公共事件‌:
发布事件:commonEvent.publish('custom_event', callback)。
订阅事件:commonEvent.subscribe('custom_event', callback),需在module.json5声明权限。
跨进程支持‌:适用于不同Ability甚至不同应用间的通信。

全局状态共享‌

AppStorage‌:
通过AppStorage.setOrCreate('key', value)存储数据。
目标Ability通过AppStorage.get('key')或@StorageLink读取数据。
持久化支持‌:配合PersistentStorage实现重启后数据保留。

分布式数据管理‌

跨设备RPC调用‌:通过@ohos.rpc创建远程服务接口,实现设备间方法调用与数据同步。
设备发现‌:使用distributedDeviceManager获取在线设备列表。


(3)性能与安全优化

通信效率‌

避免大对象传输:超过‌1MB‌的数据建议使用分布式文件共享替代Intent参数。
高频更新场景改用AppStorage,减少RPC调用开销。

生命周期管理‌

在onDestroy()中释放通信资源(如取消事件订阅、关闭RPC连接)。
跨设备通信需处理断连重试机制。

安全控制‌

权限声明:在module.json5中配置ohos.permission.DISTRIBUTED_DATASYNC等权限。
敏感数据需加密传输(如使用@ohos.security.huks)。


(4)认证高频考点

方案选型场景‌

简单参数传递 → Intent跳转。
解耦通信/广播场景 → 公共事件。
高频数据同步 → AppStorage + 分布式RPC。

典型错误排查‌

Intent跳转失败:检查OperationBuilder参数是否完整。
公共事件未触发:确认订阅/发布的事件名一致,且已声明权限。
跨设备数据不同步:验证设备网络状态及分布式权限。

附:‌通信方案对比表‌

通信方式适用场景跨设备支持数据实时性
Intent跳转启动Ability并传参单向一次性
公共事件解耦/广播通知实时
AppStorage应用内全局状态共享实时
分布式RPC跨设备方法调用/数据同步实时

分布式通信‌

(1)分布式通信基础架构

分布式软总线(SoftBus)‌

核心功能:实现设备无感发现(毫秒级响应)、自适应传输(自动选择Wi-Fi/蓝牙等最优通道)和统一通信接口。
技术特性:支持跨设备RPC调用,延迟可控制在10ms以内。

设备虚拟化‌

将物理设备(如手机摄像头、电视屏幕)抽象为虚拟资源,供其他设备按需调用。

(2)核心通信方式


1. ‌跨设备Ability启动‌
通过Intent指定目标设备的deviceId、bundleName和abilityName,支持参数传递(需小于1MB)。
示例代码:


let intent = new Intent();
intent.operation = new OperationBuilder().withDeviceId(targetDeviceId).withBundleName('com.example.app').withAbilityName('MainAbility').build();
context.startAbility(intent);

2. ‌分布式数据管理‌
分布式数据库‌:数据变更自动同步至所有设备,支持冲突解决策略。
分布式文件系统‌:跨设备访问文件如同操作本地存储(需声明ohos.permission.DISTRIBUTED_DATASYNC权限)。
3. ‌分布式任务调度‌
支持轮询、负载均衡、指定设备三种任务分配模式。
示例:将计算任务拆分到多设备并行处理:

import distributedTask from '@ohos.distributedTask';
const results = await distributedTask.submitTasks(heavyCalculation, subTasks, deviceIds);

(3)高级特性与优化

安全机制‌

设备认证:基于华为HiChain双向认证,确保仅可信设备可加入网络。
数据加密:端到端AES-256加密传输。

性能调优‌

大文件传输:使用createStream()建立持久化通道,避免Intent参数限制。
高频通信:采用TransferProtocol.DTN_FRAGMENT分片协议提升稳定性。

(4)认证高频考点

方案选型‌

简单启动 → Intent跳转
数据同步 → 分布式数据库
算力协同 → 分布式任务调度

典型问题排查‌

设备未发现:检查网络组网状态及getDeviceCapability()返回值。
同步延迟:验证分布式软总线连接质量及冲突解决策略。

附:通信方案对比‌

方式适用场景跨设备支持实时性
Intent启动跨设备界面跳转一次性
分布式数据库结构化数据同步秒级
分布式任务调度算力协同毫秒级

四、生命周期协同

UIAbility 生命周期回调‌

(1)生命周期核心状态

四大基础状态‌

Create:实例创建时触发onCreate(),用于非UI资源初始化(如数据库连接)。
Foreground:切换到前台时触发onForeground(),恢复业务逻辑(如动画播放)。
Background:进入后台时触发onBackground(),释放非必要资源(如传感器监听)。
Destroy:实例销毁时触发onDestroy(),执行数据持久化与资源清理。

窗口相关状态‌

WindowStageCreate:窗口创建后触发,需在此加载UI内容(windowStage.loadContent())。
WindowStageDestroy:窗口销毁前触发,释放UI相关资源(如事件监听)。

(2)多组件协同规则

状态触发顺序‌

启动流程:onCreate → onWindowStageCreate → onForeground。
退出流程:onBackground → onWindowStageDestroy → onDestroy。

跨Ability影响‌

新Ability启动时,原Ability先触发onBackground,再触发新Ability的onCreate。
多窗口场景下,焦点切换会触发对应Ability的onForeground/onBackground。

(3)开发注意事项

性能优化‌

onCreate中避免耗时操作(如网络请求),防止启动卡顿。
onBackground需快速执行,否则可能导致ANR(应用无响应)。

数据一致性‌

页面数据保存应在onBackground中完成,而非onDestroy(因后者可能被系统终止)。

(4)认证高频考点


回调时序题‌
如:A跳转至B时,A的onBackground与B的onCreate执行顺序。
资源管理题‌
识别各回调中应初始化和释放的资源类型。

附:状态协同流程图‌

[启动] → onCreate → WindowStageCreate → onForeground  
[切换] → onBackground ←→ onForeground  
[退出] → onBackground → WindowStageDestroy → onDestroy  

自定义组件与 Ability 联动‌

(1)基础生命周期对比

UIAbility核心回调‌

onCreate:Ability实例创建时触发,用于初始化非UI资源
onWindowStageCreate:窗口创建后加载UI内容
onForeground/onBackground:前后台切换时触发资源管理

自定义组件关键阶段‌

aboutToAppear:组件首次创建时执行,早于UI渲染
onPageShow/onPageHide:页面可见性变化时触发
aboutToDisappear:组件销毁前执行清理


(2)协同触发机制

启动阶段联动‌

执行顺序:Ability的onCreate → onWindowStageCreate → 组件的aboutToAppear
典型场景:Ability初始化数据后通过@State同步至组件

状态切换协同‌

Ability进入后台时:先触发onBackground,再触发组件的onPageHide
返回前台时:Ability的onForeground早于组件的onPageShow

销毁流程‌

组件aboutToDisappear执行完毕后,Ability才触发onDestroy


(3)数据通信方案

状态共享‌

使用AppStorage实现应用级数据同步,支持双向绑定
示例:Ability修改AppStorage.setOrCreate()触发组件自动更新

事件驱动‌

通过EventHub发布订阅事件(需在Ability上下文中获取实例)

// Ability中发布
this.context.eventHub.emit('event1', data);
// 组件中订阅
this.context.eventHub.on('event1', (data) => {...});

(4)认证高频考点

时序判断题‌

如:从AbilityA跳转至AbilityB时,A的onBackground与B的组件aboutToAppear执行顺序

性能优化题‌

避免在组件的aboutToAppear中执行耗时操作,防止页面卡顿

数据同步场景‌

跨Ability组件通信需结合AppStorage与EventHub方案

附:生命周期协同流程图‌

[启动] Ability.onCreate → Ability.onWindowStageCreate → 组件.aboutToAppear  
[切换] Ability.onBackground → 组件.onPageHide  
[销毁] 组件.aboutToDisappear → Ability.onDestroy

五、高频考点与避坑指南

装饰器选择原则‌

避免滥用 @Link:易导致组件间过度耦合
跨层级通信优先用 @Provide/@Consume 而非多层 @Prop‌

事件总线使用陷阱‌

Emitter‌:需手动注销监听,否则内存泄漏(emitter.off())‌
EventHub‌:仅限于同一 Ability,跨 Ability 无效‌

生命周期时序‌

UIAbility 的 onCreate() 完成后才触发组件的 aboutToAppear()‌
页面返回时先触发 onPageShow() 再触发 onForeground()‌

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/87227.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/87227.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/87227.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【SQL优化案例】索引创建不合理导致SQL消耗大量CPU资源

#隐式转换 第一章 适用环境 oracle 11glinux 6.9 第二章 Top SQL概况 下面列出我们发现的特定模块中Top SQL的相关情况&#xff1a; SQL_ID 模块 SQL类型 主要问题 fnc58puaqkd1n 无 select 索引创建不合理&#xff0c;导致全索引扫描&#xff0c;产生了大量逻辑读 …

autoas/as 工程的RTE静态消息总线实现与端口数据交换机制详解

0. 概述 autoas/as 工程的RTE&#xff08;Runtime Environment&#xff09;通过自动生成C代码&#xff0c;将各SWC&#xff08;软件组件&#xff09;之间的数据通信全部静态化、结构化&#xff0c;实现了类似“静态消息总线”的通信模型。所有端口的数据交换都必须经过RTE接口…

【机器学习第四期(Python)】LightGBM 方法原理详解

LightGBM 概述 一、LightGBM 简介二、LightGBM 原理详解⚙️ 核心原理&#x1f9e0; LightGBM 的主要特点 三、LightGBM 实现步骤&#xff08;Python&#xff09;&#x1f9ea; 可调参数推荐完整案例代码&#xff08;回归任务 可视化&#xff09; 参考 LightGBM 是由微软开源的…

时序数据库IoTDB监控指标采集与可视化指南

一、概述 本文以时序数据库IoTDB V1.0.1版本为例&#xff0c;介绍如何通过Prometheus采集Apache IoTDB的监控指标&#xff0c;并使用Grafana进行可视化。 二、Prometheus聚合运算符 Prometheus支持多种聚合运算符&#xff0c;用于在时间序列数据上进行聚合操作。以下是一些常…

React安装使用教程

一、React 简介 React 是由 Facebook 开发和维护的一个用于构建用户界面的 JavaScript 库&#xff0c;适用于构建复杂的单页应用&#xff08;SPA&#xff09;。它采用组件化、虚拟 DOM 和声明式编程等理念&#xff0c;已成为前端开发的主流选择。 二、React 安装方式 2.1 使用…

.NET MAUI跨平台串口通讯方案

文章目录 MAUI项目架构设计平台特定实现接口定义Windows平台实现Android平台实现 MAUI主界面实现依赖注入配置相关学习资源.NET MAUI开发移动端开发平台特定实现依赖注入与架构移动应用发布跨平台开发最佳实践性能优化测试与调试开源项目参考 MAUI项目架构设计 #mermaid-svg-OG…

BUUCTF在线评测-练习场-WebCTF习题[MRCTF2020]你传你[特殊字符]呢1-flag获取、解析

解题思路 打开靶场&#xff0c;左边是艾克&#xff0c;右边是诗人&#xff0c;下面有个文件上传按钮 结合题目&#xff0c;是一个文件上传漏洞&#xff0c;一键去世看源码可知是提交按钮&#xff0c;先上传个一句话木马.php试试 <?php eval($_POST[shell]); ?> 被过…

【容器】容器平台初探 - k8s整体架构

目录 K8s总揽 K8s主要组件 组件说明 一、Master组件 二、WokerNode组件 K8s是Kubernetes的简称&#xff0c;它是Google的开源容器集群管理系统&#xff0c;其提供应用部署、维护、扩展机制等功能&#xff0c;利用k8s能很方便地管理跨机器运行容器化的应用。 K8s总揽 K8s主…

C++--继承

文章目录 继承1. 继承的概念及定义1.1 继承的概念1.2 继承的定义1.2.1 定义格式1.2.2 继承方式和访问限定符1.2.3 继承基类成员访问方式的变化1.2.3.1 基类成员访问方式的变化规则1.2.3.2 默认继承方式 1.3 继承类模版 2. 基类和派生类的转化3. 继承中的作用域3.1 隐藏3.2 经典…

无REPOSITORY、TAG的docker悬空镜像究竟是什么?是否可删除?

有时候&#xff0c;使用docker images指令我们可以发现大量的无REPOSITORY、TAG的docker镜像&#xff0c;这些镜像究竟是什么&#xff1f; 它们没有REPOSITORY、TAG名称&#xff0c;没有办法引用&#xff0c;那么它们还有什么用&#xff1f; [rootcdh-100 data]# docker image…

创建一个基于YOLOv8+PyQt界面的驾驶员疲劳驾驶检测系统 实现对驾驶员疲劳状态的打哈欠检测,头部下垂 疲劳眼睛检测识别

如何使用Yolov8创建一个基于YOLOv8的驾驶员疲劳驾驶检测系统 文章目录 1. 数据集准备2. 安装依赖3. 创建PyQt界面4. 模型训练1. 数据集准备2. 模型训练数据集配置文件 (data.yaml)训练脚本 (train.py) 3. PyQt界面开发主程序 (MainProgram.py) 4. 运行项目5. 关键代码解释数据集…

使用FFmpeg将YUV编码为H.264并封装为MP4,通过api接口实现

YUV数据来源 摄像头直接采集的原始视频流通常为YUV格式&#xff08;如YUV420&#xff09;&#xff0c;尤其是安防摄像头和网络摄像头智能手机、平板电脑的摄像头通过硬件接口视频会议软件&#xff08;如Zoom、腾讯会议&#xff09;从摄像头捕获YUV帧&#xff0c;进行预处理&am…

tcpdump工具交叉编译

本文默认系统已经安装了交叉工具链环境。 下载相关版本源码 涉及tcpdump源码&#xff0c;以及tcpdump编译过程依赖的pcap库源码。 网站&#xff1a;http://www.tcpdump.org/release wget http://www.tcpdump.org/release/libpcap-1.8.1.tar.gz wget http://www.tcpdump.org/r…

神经网络中torch.nn的使用

卷积层 通过卷积核&#xff08;滤波器&#xff09;在输入数据上滑动&#xff0c;卷积层能够自动检测和提取局部特征&#xff0c;如边缘、纹理、颜色等。不同的卷积核可以捕捉不同类型的特征。 nn.conv2d() in_channels:输入的通道数&#xff0c;彩色图片一般为3通道 out_c…

在MATLAB中使用GPU加速计算及多GPU配置

文章目录 在MATLAB中使用GPU加速计算及多GPU配置一、基本GPU加速使用1. 检查GPU可用性2. 将数据传输到GPU3. 执行GPU计算 二、多GPU配置与使用1. 选择特定GPU设备2. 并行计算工具箱中的多GPU支持3. 数据并行处理&#xff08;适用于深度学习&#xff09; 三、高级技巧1. 异步计算…

【unitrix】 4.12 通用2D仿射变换矩阵(matrix/types.rs)

一、源码 这段代码定义了一个通用的2D仿射变换矩阵结构&#xff0c;可用于表示二维空间中的各种线性变换。 /// 通用2D仿射变换矩阵&#xff08;元素仅需实现Copy trait&#xff09; /// /// 该矩阵可用于表示二维空间中的任意仿射变换&#xff0c;支持以下应用场景&#xff…

android RecyclerView隐藏整个Item后,该Item还占位留白问题

前言 android RecyclerView隐藏整个Item后,该Item还占位留白问题 思考了利用隐藏和现实来控制item 结果实现不了方案 解决方案 要依据 model 的第三个参数&#xff08;布尔值&#xff09;决定是否保留数据&#xff0c;可以通过 ​filter 高阶函数结合 ​空安全操作符​ 实…

地图瓦片介绍与地图瓦片编程下载

前沿 地图瓦片指将一定范围内的地图按照一定的尺寸和格式&#xff0c;按缩放级别或者比例尺&#xff0c;切成若干行和列的正方形栅格图片&#xff0c;对切片后的正方形栅格图片被形象的称为瓦片[。瓦片通常应用于B/S软件架构下&#xff0c;浏览器从服务器获取地图数据&#xf…

手机屏亮点缺陷修复及相关液晶线路激光修复原理

摘要 手机屏亮点缺陷严重影响显示品质&#xff0c;液晶线路短路、电压异常是导致亮点的关键因素。激光修复技术凭借高能量密度与精准操控性&#xff0c;可有效修复液晶线路故障&#xff0c;消除亮点缺陷。本文分析亮点缺陷成因&#xff0c;深入探究液晶线路激光修复原理、工艺…

MySQL数据一键同步至ClickHouse数据库

随着数据量的爆炸式增长和业务场景的多样化&#xff0c;传统数据库系统如MySQL虽然稳定可靠&#xff0c;但在海量数据分析场景下逐渐显露出性能瓶颈。这时&#xff0c;ClickHouse凭借其列式存储架构和卓越的OLAP&#xff08;在线分析处理&#xff09;能力脱颖而出&#xff0c;成…