HarmonyOS 应用开发者高级认证真题01

0 阅读18分钟

一、 单选题:

1、关于 if/else 条件渲染下列说法正确的是

  • A. 可以使用 switch 替换 if/else 条件渲染
  • B. 使用 if/else 条件渲染不可以在 if 中调用 @Builder 函数
  • C. if/else 条件渲染不支持嵌套
  • D. 每当 if 或 else if 条件语句中使用的状态变量发生变化时,条件语句都会更新并重新评估新的条件值

答案: D

2、以下关于 HashMap 的说法错误的是?

  • A. HashMap 依据泛型定义,集合中通过 key 的 hash 值确定其存储位置,从而快速找到键值对
  • B. HashMap 和 TreeMap 相比,HashMap 依据键的 hashCode 存取数据,访问速度较快。而 TreeMap 是有序存取,效率较低
  • C. HashMap 可用来存储具有关联关系的 key-value 键值对集合,存储元素中 key 是唯一的,每个 key 会对应一个 value 值。
  • D. HashMap 的初始容量大小为 10,并支持动态扩容,每次扩容为原始容量的 2 倍

答案: D

3、在 Stack 布局中,如果子元素尺寸不同,如何控制子元素的显示层级

  • A. 通过设置子元素的 backgroundColor 属性
  • B. 通过设置子元素的 height 属性
  • C. 通过设置子元素的 zIndex 属性
  • D. 通过设置子元素的 width 属性

答案:C

4、下面关于 V2 状态管理和 V1 状态管理对比说法错误的是

  • A. V1 的 @State 能够观察复杂对象的第一层属性变化,但 V2 的 @Local 无法观察对象内部变化。为了解决这个问题,需要在类上添加 @ObservedV2,并在需要观察的属性上添加 @Trace

  • B. 在 V1 中,@State 装饰器用于装饰组件内部的状态变量,在 V2 中提供了 @Local 作为其替代能力,但两者在观察能力和初始化规则上存在明显差异

  • C. 对于已经使用 V1 的应用,如果 V1 的功能和性能已能满足需求,则需要立刻切换到 V2

  • D. 在 V1 中,@Link 允许父组件和子组件之间进行双向数据绑定。迁移到 V2 时,可以用 @Param 和 @Event 模拟双向同步

答案:C

5、ArkTS 支持以下哪些函数

  • A. Object.isExtensible();
  • B. Object.getOwnPropertySymbols();
  • C. Object.keys();
  • D. Object.isPrototypeOf();

答案: C

6、关于尾随闭包初始化 @BuilderParam 的说法正确的是

  • A. 子组件有且仅有一个 @BuilderParam 用来接收此尾随闭包
  • B. 尾随闭包初始化 @BuilderParam 时,不支持使用任何属性
  • C. 在尾随闭包初始化 @BuilderParam 时,可以有多个 @BuilderParam 变量
  • D. 尾随闭包必须传递一个带参数的函数给 @BuilderParam

答案: C

7、阅读以下代码,背景为黄色的 Row 的宽与高分别是多少?

import { LengthMetrics } from '@kit.ArkUI'
@Entry
@Component
struct SizeExample {
  build() {
    Column({ space: 10 }) {
      Text('margin and padding:').fontSize(12).fontColor(0xcccccc).width('90%')
      Row() {
        Row() {
          Row().size({ width: '80%', height: '80%' }).backgroundColor(Color.Yellow)
        }
        .width(80)
        .height(80)
        .padding({
          top: LengthMetrics.vp(5),
          bottom: LengthMetrics.vp(15),
          start: LengthMetrics.vp(10),
          end: LengthMetrics.vp(20)
        })
        .margin({
          top: LengthMetrics.vp(40),
          bottom: LengthMetrics.vp(20),
          start: LengthMetrics.vp(30),
          end: LengthMetrics.vp(10)
        })
        .backgroundColor(Color.Red)
      }.backgroundColor(Color.Blue)
    }.width('100%').margin({ top: 5 })
  }
}
  • A. 80,80

  • B. 40,48

  • C. 64,64

  • D. 34,49

答案: B

8、如何实现一个 Text 组件在父容器(Row)中水平居中且仅显示一行,多余部分以省略号(...)表示?

Row() {
  Text('这是一个非常非常非常长的文本字符串需要省略显示')
    .__1__()
    .__2__()
    .__3__()
}
  • A. 1: .layoutWeight(1), 2: .alignSelf(ItemAlign.Center), 3: .textOverflow({overflow: TextOverflow.Ellipsis})

  • B. 1: .alignSelf(ItemAlign.Center), 2: .maxLines(1), 3: .textOverflow({overflow: TextOverflow.Ellipsis})

  • C. 1: .textAlign(TextAlign.Center), 2: .maxLines(1), 3: .textOverflow({overflow: TextOverflow.Clip})

  • D. 1: .textAlign(TextAlign.Center), 2: .maxLines(1), 3: .textOverflow({overflow: TextOverflow.Ellipsis})

答案: D

9、根据下述代码,以下解释正确的是

enum Mode {
  fullScreen,
  halfScreen
}

@Entry
@Component
struct Page {
  @State title: string = "";
  @State mode: Mode = Mode.fullScreen;

  isShownTitle(): boolean {
    if (this.mode == Mode.fullScreen) {
      this.title = "Title";
      return true;
    } else {
      this.title = "Section";
      return false;
    }
  }

  build() {
    Column() {
      if (this.isShownTitle()) {
        Text(`${this.title}`)
      } else {
        Text(`${this.title}`)
      }
      ChangeMode({ mode: this.mode })
    }
  }
}

@Component
struct ChangeMode {
  @Prop mode: Mode;
  build() {
    Row({ space: 20 }) {
      Button('full screen').onClick(() => {
        this.mode = Mode.fullScreen;
      })
      Button('half screen').onClick(() => {
        this.mode = Mode.halfScreen;
      })
    }
  }
}
  • A. 为了避免 @Prop 的拷贝,可以优化使用 @Link,在该例子中行为和 @Prop 一样

  • B. 本例子可以运行起来,所以代码没有问题

  • C. 在 ChangeMode 里改变 mode 的值,会触发其父组件 Page 的 Title 内容的切换

  • D. 在自定义组件 Page 的 build 方法里改变状态变量是非法操作,可能导致未定义的异常 UI 行为

答案: D

10、以下程序中,对按钮进行点击后,控制台会输出什么内容

// xxx.ets
@Entry
@Component
struct HitTestBehaviorExample {
  build() {
    // outer stack
    Stack() {
      Button('outer button')
        .onTouch((event) => {
          console.info('outer button touched type: ' + (event as TouchEvent).type)
        })
      // inner stack
      Stack() {
        Button('inner button')
          .onTouch((event) => {
            console.info('inner button touched type: ' + (event as TouchEvent).type)
          })
      }
      .width("100%").height("100%")
      .hitTestBehavior(HitTestMode.Block)
      .onTouch((event) => {
        console.info('stack touched type: ' + (event as TouchEvent).type)
      })
    }.width(300).height(300)
  }
}
  • A.

    stack touched type: 0
    stack touched type: 1
    
  • B.

    inner button touched type: 0
    stack touched type: 0
    inner button touched type: 1
    stack touched type: 1
    
  • C.

    inner button touched type: 0
    stack touched type: 0
    outer button touched type: 0
    inner button touched type: 1
    stack touched type: 1
    outer button touched type: 1
    
  • D.

    inner button touched type: 0
    inner button touched type: 1
    

正确答案: B

11、下面代码定义的 Repeat 组件会执行哪一个组件生成函数的逻辑

Repeat<string>(this.simpleList)
  .each((ri) => {
    ListItem() {
      Text(ri.item)
        .fontSize(20)
    }
  })
  .key((item: string, index: number) => 'a')
  .virtualScroll()
  .template('', (ri) => {
    ListItem() {
      Text('aaa' + ri.item)
        .fontSize(20)
    }
  })
  .template('a', (ri) => {
    ListItem() {
      Text(ri.item)
        .fontSize(20)
    }
  })
  .template('b', (ri) => {
    ListItem() {
      Text(ri.item)
        .fontSize(20)
    }
  })
  .templateId((item: string, index: number) => '')
  • A. each()

  • B. template("")

  • C. template('b')

  • D. template('a')

答案: B

12、在栅格布局中,哪一项不是决定栅格样式的属性?

  • A. Rows

  • B. Gutter

  • C. Columns

  • D. Margin

正确答案: D

13、在一个包含多个模块(如 entry、feature、service、library 等)的大型 HarmonyOS 应用项目中,如果某个模块 feature 对另外一个公共库模块 library 有依赖,如何通过 DevEco Studio 正确配置项目依赖关系?

  • A. 在 feature 的oh-package.json5文件的dependencies字段中配置 library 的依赖
  • B. 在 library 的oh-package.json5文件的dependencies字段中配置 feature 的依赖
  • C. 在 feature 的build-profile.json5文件的dependencies字段中配置 library 的依赖
  • D. 无需配置,直接在代码中编写import xxx from 'library'

答案: C

14、开发者小李遇到了一个复杂的问题,该问题仅在特定的代码执行路径上出现,且难以复现。他使用的是 C++ 进行核心算法开发,代码的逻辑密集且对性能要求极高,DevEco Studio 为 C/C++ 开发者提供的高级调试能力,以下哪个能力可以帮助小李查看代码历史执行路径,回溯到关键的变量状态

  • A. 反向调试能力:允许开发者在调试过程中回退回到之前的代码行或断点,不仅查看过去的堆栈信息,还能重现历史的全局、静态和局部变量状态,帮助深入理解代码历史行为,特别是对于复杂逻辑和难以复现的 bug 定位至关重要

  • B. 实时代码修改与运行时效果查看:支持在调试过程中修改代码并立即查看修改效果,适用于快速迭代,但不聚焦于问题追溯

  • C. 传统调试模式:仅允许在当前断点暂停代码执行,查看调用堆栈和当前变量信息,但无法追溯历史执行状态

  • D. 代码静态分析:提供静态代码检查工具,通过语法和逻辑分析帮助预防潜在错误,但不涉及运行时问题定位

答案: A

15、DevEco Studio 提供 HarmonyOS 应用 / 服务的 UI 预览界面与源代码文件间的双向预览功能,支持 ets 文件与预览器界面的双向预览。关于双向预览,下列选项说法错误的是?

  • A. 选中组件树中的组件,则对应的代码块和 UI 界面也会高亮显示

  • B. 选中布局文件中的代码块,则在 UI 界面会高亮显示,组件树上的组件节点也会呈现选中的状态

  • C. 双向预览不支持通过组件的属性面板实时修改属性或样式

  • D. 选中预览器 UI 界面中的组件,则组件树上对应的组件将被选中,同时代码编辑器中的布局文件中对应的代码块高亮显示

答案: C

16、项目需要同时进行应用和元服务的开发,并针对当前项目工程中的代码可以分别构建出应用和元服务的包,如何在 DevEco Studio 中设置不同的构建配置,达成这个目的

  • A. 修改工程级别的AppScope/app.json5中的bundleType值为atomicService

  • B. 在模块级别build-profile.json5定义两个 target,将两个 target 的bundleType分别设置成appatomicService

  • C. 在工程级别build-profile.json5定义两个 product,将两个 product 的bundleType分别设置成appatomicService

  • D. 修改工程级别的AppScope/app.json5中的bundleType值为app

答案: C

17、在开发应用之前,开发者需要了解应用的包结构,鸿蒙应用定义了多种包格式,以下说法错误的是

  • A. HAP 可以独立编译、独立运行

  • B. 以.app(多个 HAP 打包到一起)的形式上架

  • C. 每个 HAP 中的配置文件只声明自己 HAP 中的组件信息

  • D. HSP 可以独立编译、独立运行

答案: D

18、在自定义事件使用完成后,调用以下哪个方法取消该事件的订阅

  • A. eventHub.start()

  • B. eventHub.notify()

  • C. eventHub.off()

  • D. eventHub.on()

正确选项: C

19、HAP、HAR、HSP 三者的功能和使用场景有所不同。以下关于 HAP、HAR、HSP 三者说法错误的是?

  • A. 三者均支持依赖其他 HAR 文件

  • B. HAP 是应用安装和运行的基本单元

  • C. HAR 支持在配置文件中声明 ExtensionAbility 组件

  • D. HSP 由 Shared Library 编译而来

答案: C

20、一个应用有 2 个 UIAbility 组件,其module.jsonabilities标签的配置如下方代码。在手机设备上,执行如下操作后:

  • 启动 UIAbility1,然后 back 键返回销毁 UIAbility1;

  • 启动 UIAbility2,然后 back 键返回销毁 UIAbility2;

  • 启动 UIAbility2,然后 back 键返回销毁 UIAbility2;

    进入多任务列表,能看到该应用的几个任务视图:

    "abilities": [
      {
        "name": "UIAbility1",
        "srcEntry": "./ets/entryability/Ability1.ets",
        "description": "$string:EntryAbility_desc",
        "icon": "$media:icon",
        "label": "$string:Ability1_label",
        "startWindowIcon": "$media:icon",
        "startWindowBackground": "$color:start_window_background",
        "exported": true,
        "launchType": "multiton"
      },
      {
        "name": "UIAbility2",
        "srcEntry": "./ets/entryability/Ability2.ets",
        "description": "$string:Ability2_desc",
        "icon": "$media:icon",
        "label": "$string:Ability2_label",
        "startWindowIcon": "$media:icon",
        "startWindowBackground": "$color:start_window_background",
        "exported": true,
        "launchType": "singleton",
        "removeMissionAfterTerminate": true
      }
    ]
    
  • A. 1 个

  • B. 2 个

  • C. 0 个

  • D. 3 个

答案: A

21、在应用开发过程中,会遇到目标 UIAbility 实例之前已经启动过的场景,这时再次启动目标 UIAbility 时,不会重新走初始化逻辑,只会直接触发以下哪个生命周期函数

  • A. onWindowStageCreate()

  • B. onCreate()

  • C. on()

  • D. onNewWant()

答案: D

22、对于rawfile目录资源,通过以下哪个形式进行访问?

  • A. $rawfile('app.filename')

  • B. $rawfile('filename')

  • C. $r('filename')

  • D. $rawfile('app.media.filename')

答案: B

23、创建应用时,应用包名需要和在 DevEco Studio 中创建工程时哪个字段保持一致?

  • A. appName

  • B. name

  • C. package

  • D. bundleName

答案: D

24、hiAppEvent 提供的()接口,可以用于获取崩溃信息

  • A. clear

  • B. addWatcher

  • C. write

  • D. configure

答案: B

25、下面关于跨设备拖拽的说法错误的是

  • A. 需要打开键鼠穿越开关

  • B. 使用跨设备拖拽功能时双端设备需要登录同一华为账号

  • C. 应用的所有资源文件都支持跨设备拖拽

  • D. 双端设备需要打开 Wi-Fi 和蓝牙开关,并接入同一个局域网

答案: C

解析:

  • A 正确:跨设备拖拽功能依赖键鼠穿越,因此需要先开启这个开关。
  • B 正确:为了保证设备间的安全互联,双端设备需要登录同一个华为账号。
  • C 错误:跨设备拖拽只支持特定类型的文件(如图片、文档等),并非应用的所有资源文件都支持。
  • D 正确:双端设备需要在同一个局域网下,并打开 Wi-Fi 和蓝牙来建立连接。

26、当标记了@Reuseable的自定义组件实现了组件复用后,这个组件的复用范围是什么?

  • A. 标记了@Reuseable的自定义组件的父组件范围内

  • B. 标记了@Reuseable的自定义组件的外层容器节点范围内

  • C. 整个页面都可以复用

  • D. 整个应用内都可以复用

答案: A

27、下列不是NavDestination独有的生命周期函数是哪个?

  • A. onWillAppear

  • B. onShown

  • C. onWillShow

  • D. onAppear

答案: D

28、关于 ArkUI 的AttributeModifier机制,以下说法不正确的是:

  • A. 在模块化开发中,期望对某些特定样式进行封装,建议使用 AttributeModifier 扩展。

  • B. AttributeModifier 支持跨文件导出复用。

  • C. AttributeModifier 属于命令式的编程范式。

  • D. AttributeModifier 会产生新的组件树节点。

正确答案: D

29、在 FFRT(并发编程框架)中,如果开发者希望根据任务的优先级和资源需求进行任务调度,应该使用哪个概念?

A. 原语

B. 任务依赖

C. Worker

D. QoS (Quality of Service)

答案: D

30、分析以下代码,找出针对该段代码正确的解释

import webSocket from '@ohos.net.webSocket';
import { BusinessError } from '@ohos.base';

let defaultIpAddress = "ws://";
let ws = webSocket.createWebSocket();
ws.on('open', (err: BusinessError, value: Object) => {
  console.log("on open, status:" + JSON.stringify(value));
  ws.send("Hello, server!", (err: BusinessError, value: boolean) => {
    if (!err) {
      console.log("Message sent successfully");
    } else {
      console.log("Failed to send the message. Err:" + JSON.stringify(err));
    }
  });
});
  • A. 该段代码为一个 HTTP 数据请求过程,当前连接建立时,发送数据到服务上

  • B. 该段代码为一个 socket 典型开发过程,创建了一个 TCPSocket 连接,返回一个 TCPSocket 对象

  • C. 该段代码为一个 web socket 典型开发过程,当收到 on ('open') 事件时,通过 send () 方法与服务器进行通信

  • D. 该段代码为一个 web socket 典型开发过程,当收到服务器的bye消息时,主动断开连接

答案: C

31、创建SpeechRecognitionEngine实例对象并设置接收语音识别相关的回调后,调用哪个方法可以开始语音识别?

  • A. start

  • B. setListener

  • C. finish

  • D. startListening

答案: D

32、开发新闻朗读功能时,使用哪个控件来显示朗读状态图标?

  • A. TextReaderIcon

  • B. AICaptionComponent

  • C. TextReader

  • D. Button

答案: A

33、某开发者在创建实况窗时还想同步创建计时器胶囊态的实况窗,他需要在LiveView实例中携带哪个参数?

  • A. liveViewData.external

  • B. liveViewData.capsule

  • C. event

  • D. timer

答案: B

34、想要获取用户当前精准位置,且精准度在米级别,应用需要申请以下哪个权限?

  • A. ohos.permission.APPROXIMATELY_LOCATION

  • B. 同时申请ohos.permission.APPROXIMATELY_LOCATIONohos.permission.LOCATION

  • C. ohos.permission.LOCATION_IN_BACKGROUND

  • D. ohos.permission.LOCATION

答案: D

35、在 Web 组件中,若要在点击按钮时加载本地页面,通常会使用哪个接口?

  • A. reloadUrl()

  • B. initLoad()

  • C. loadData()

  • D. loadUrl()

答案: D

36、可以在 Web 组件的哪个生命周期函数中实现自定义资源请求响应?

  • A. onPageEnd

  • B. onLoadIntercept

  • C. onInterceptRequest

  • D. onOverrideUrlLoading

答案: C

37、某音乐应用开发了音乐播控卡片、歌单推荐卡片和心动歌词卡片,下列关于这三类卡片实现方案正确的是

  • A. 音乐播控卡片具有播放 / 暂停、上一曲 / 下一曲、收藏等功能,应该使用 router 事件拉起 UIAbility 进行音乐播控的交互操作

  • B. 心动歌词卡片会根据歌曲播放的进度动态更新歌词内容,主要是通过主动刷新的方式进行卡片数据刷新

  • C. 音乐播控卡片的实际播控功能的实现是在应用主线程中,卡片是通过拉起应用来执行相应的操作

  • D. 歌单推荐卡片点击后会拉起应用主进程进行页面跳转,应该使用 call 事件拉起应用

答案: C

38、通过call事件方法拉起卡片提供方的 UIAbility 时,需要卡片提供方申请什么权限?

  • A. ohos.permission.ACCESS_LOCAL_BACKUP

  • B. ohos.permission.INTERNET

  • C. ohos.permission.KEEP_BACKGROUND_RUNNING

  • D. ohos.permission.CONNECT_CELLULAR_CALL_SERVICE

答案: C

39、Node-API 进行异步任务开发主要是通过创建一个异步工作项来实现异步任务开发,下列哪个选项不是异步开发过程中的步骤?

  • A. 通过 libuv 线程池创建并调度 work 子线程完成异步业务逻辑的执行

  • B. 在 Native 接口函数中,创建一个异步工作项,并置入 libuv 调度队列中

  • C. 创建生产者和消费者线程,并调用 join ()

  • D. 通过 Callback 回调或者 Promise 延时对象返回真正的处理结果,并用于应用侧 UI 刷新

答案: C

40、下列关于 Node-API 开发流程的说法错误的是

  • A. nm_register_func对应的函数需要加上static,防止与其他 so 里的符号冲突

  • B. import导入使用的模块名和注册时的模块名大小写要保持一致

  • C. Node-API 接口可以在 JS 线程和主线程同时使用

  • D. Native 接口入参env与特定 JS 线程绑定只能在创建时的线程使用

答案: C

二、 多选题

41、下列哪些变量支持从父组件初始化

  • A. @Link

  • B. @LocalStorageProp

  • C. @Prop

  • D. @LocalStorageLink

答案: A C

42、在使用 ArkTS 声明和表达式时,以下哪些做法可以提高编程性能

  • A. number类型变量避免整型和浮点型混用

  • B. 循环中常量提取,减少属性访问次数

  • C. 使用const声明不变的变量

  • D. 数值计算避免溢出

正确选项: A B C

43、 下面代码符合 Node-API 开发规范的是(多选题)

  • A .

    static napi_value Demo1(napi_env env, napi_callback_info info)
    {
        size_t argc;
        napi_value argv[10] = {nullptr};
        napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr);
        return nullptr;
    }
    
  • B .

    static napi_value Demo4(napi_env env, napi_callback_info info)
    {
        size_t argc = 5;
        napi_value argv[3] = {nullptr};
        napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr);
        return nullptr;
    }
    
  • C .

    static napi_value Demo3(napi_env env, napi_callback_info info)
    {
        size_t argc = 2;
        napi_value argv[2] = {nullptr};
        napi_get_cb_info(env, info, &argc, nullptr, nullptr, nullptr);
        // 业务代码
        return nullptr;
    }
    
  • D .

    static napi_value Demo2(napi_env env, napi_callback_info info)
    {
        size_t argc = 0;
        napi_get_cb_info(env, info, &argc, nullptr, nullptr, nullptr);
        if (argc == 0) {
            return nullptr;
        }
        napi_value* argv = new napi_value[argc];
        napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr);
        //业务代码
        delete argv;
        return nullptr;
    }
    

答案: C D

44、以下关于焦点事件的描述,正确的是(多选题)

  • A. 默认情况下焦点态不会显示,只有当组件进入激活态后,焦点态才会显示

  • B. Text 组件默认即为可获焦

  • C. 走焦的触发需要用户主观行为进行操作,例如使用外接键盘的按键走焦

  • D. 当某组件处于获焦状态时,将其 focusable 属性设置为 false,系统会自动使该组件失焦

答案: A C D

45、 Image 组件以下哪些方式可显示图片?(多选题)

  • A.

    @Entry
    @Component
    struct ImageExample {
      build() {
        Column({ space: 10 }) {
          Image("https://www.example.com/xxx.png")
            .width(100)
            .height(100)
        }
      }
    }
    
  • B.

    @Entry
    @Component
    struct ImageExample {
      build() {
        Column({ space: 10 }) {
          Image($r('app.media.earth'))
            .width(100)
            .height(100)
        }
      }
    }
    
  • C.

    import { DrawableDescriptor } from '@ohos.arkui.drawableDescriptor'
    
    @Entry
    @Component
    struct ImageExample {
      private resManager = getContext().resourceManager
    
      build() {
        Row() {
          Column() {
            Image((this.resManager.getDrawableDescriptor($r('app.media.drawable').id) as DrawableDescriptor))
          }.height('50%')
        }.width('50%')
      }
    }
    
  • D.

    import image from '@ohos.multimedia.image'
    
    @Entry
    @Component
    struct ImageExample {
      @State imagePixelMap: image.PixelMap | undefined = undefined
    
      async aboutToAppear() {
        this.imagePixelMap = await this.getPixmapFromMedia($r('app.media.app_icon'))
      }
    
      build() {
        Column() {
          Image(this.imagePixelMap)
            .width(200)
            .height(200)
        }
      }
    
      private async getPixmapFromMedia(resource: Resource) {
        let unit8Array = await getContext(this)?.resourceManager?.getMediaContent({
          bundleName: resource.bundleName,
          moduleName: resource.moduleName,
          id: resource.id
        })
        let imageSource = image.createImageSource(unit8Array.buffer.slice(0, unit8Array.buffer.byteLength))
        let createPixelMap: image.PixelMap = await imageSource.createPixelMap({
          desiredPixelFormat: image.PixelMapFormat.RGBA_8888
        })
        await imageSource.release()
        return createPixelMap
      }
    }
    

答案: A B C D

46、当开发包含 1000 + 项商品的商品列表,列表中展示包含图片和文字,下列哪些优化措施能有效提升滚动性能?

  • A. 为 ListItem 添加 reuseId 属性复用组件

  • B. 使用异步加载图片,避免阻塞 UI 线程

  • C. 使用 @Reusable 装饰器装饰可复用组件

  • D. 使用 LazyForEach 替代 ForEach 并设置合理的 cachedCount

答案: B D

47、开发者小李正在使用 DevEco Studio 开发一款面向 HarmonyOS 的应用,该应用需要在多种设备上表现出一致的稳定性和优秀的用户体验。为了确保高质量的发布,小李意识到需要实施一套全面的测试策略,覆盖代码的自动化测试和手动测试,还需要衡量代码的测试覆盖率,以确定测试的充分性。在 DevEco Studio 的测试框架下,以下描述中,哪些是正确的

  • A. Local Test:测试用例位于 test 目录,无需设备或模拟器环境,直接在本地执行,专注于 ArkTS 语言,推荐适用于 API 版本 11 及以上的 Hvory 工程,目前特别限于 Stage 模型,并不涵盖 C++ 方法

  • B. DevEco Studio 的测试框架提供测试用例执行能力,包含基础接口以编写和输出测试结果,鼓励用户创建易于维护的自动化测试脚本,并且统计代码覆盖率

  • C. Instrument Test:测试用例存储于项目的 ohosTest 目录,要求在 HarmonyOS 设备或模拟器上执行,兼容 ArkTS 与 JS 语言编写

  • D. 无论选择 Instrument Test 还是 Local Test,DevEco Studio 均内置了详尽的测试报告功能,实时显示测试进度,且直接在 IDE 中可查看代码覆盖率报告,无需外部工具。

答案: A B C D

48、在使用 DevEco Studio 进行 HarmonyOS 应用开发和调试过程中,开发者小张遇到应用运行时意外终止的情况,他需要快速定位并解决导致应用崩溃的问题。以下哪些做法可以帮助小张有效分析和处理这些问题 (多选)

  • A. 当怀疑问题是由于 C++ 代码中的内存错误(如数组越界、内存泄露、重复释放内存)引起时,进入 “Run/Debug Configurations” 设置界面,勾选启用 Address Sanitizer(ASan),然后重新部署应用进行测试以获取更详细的内存问题报告

  • B. 查看 DevEco Studio 控制台输出的错误日志,根据日志提示分析应用崩溃的具体原因及代码位置

  • C. 若遇到 App 运行卡顿或系统整体无响应(App Freeze, System Freeze)的情况,可以通过性能分析工具中的 Frame Insight 和 Allocation Insight 功能,分析应用的资源消耗情况,寻找可能的瓶颈

  • D. 利用系统自动生成的 FaultLog,包括 App Freeze、CPP Crash、JS Crash、System Freeze 和 ASan 报告,这些报告会详细记录故障发生时的环境、堆栈信息和可能的故障原因,是排查问题的重要参考

答案: A B D

49、鸿蒙系统提供了 App Linking 和 Deep Linking 两种方式拉起指定应用。相较于 Deep Linking,App Linking 实现应用跳转的优势有哪些?

  • A. 已上架应用,未安装时可跳转至应用市场应用详情页

  • B. 通过端云安全鉴权和域名校验,确保只有合法应用被拉起

  • C. 无需二次确认,直接跳转到应用内指定页面

  • D. 实现简单,无需安全校验

答案: A B C

50、根据隐式 want 参数的 entities 匹配规则,以下哪些选项的 entities 可以匹配成功?

  • A. 调用方 want 配置: entities: ["a","b"], 待匹配应用 skills 配置: entities:["a","b","c"]

  • B. 调用方 want 配置: entities: ["a"], 待匹配应用 skills 配置: entities:[]

  • C. 调用方 want 配置: entities: ["a","b"], 待匹配应用 skills 配置: entities:["a","c"]

  • D. 调用方 want 配置: entities: [], 待匹配应用 skills 配置: entities:["a","b"]

  • E. 调用方 want 配置: entities: [], 待匹配应用 skills 配置: entities:[]

答案: A D E

51、以下关于 LocalStorage 的说法正确有哪些?

  • A. LocalStorage 中的所有属性都是不可变的

  • B. 被 @Component 装饰的组件最多可以访问一个 LocalStorage 实例和 AppStorage,未被 @Entry 装饰的组件不可被独立分配 LocalStorage 实例,只能接受父组件的 LocalStorage 实例

  • C. 应用程序可以创建多个 LocalStorage 实例,LocalStorage 实例可以在页面内共享,也可以通过 GetShared 接口,获取在 UIAbility 里创建的 GetShared,实现跨页面、UIAbility 内共享

  • D. 组件树的根节点,即被 @Entry 装饰的 @Component,可以被分配一个 LocalStorage 实例,此组件的所有子组件实例将自动获得对该 LocalStorage 实例的访问权限

答案: B C D

52、应用要通过 Health Service Kit 查询用户的跑步记录,展示用户的跑步轨迹。下面关于数据权限申请说法正确的是

  • A. 申请 Health Service Kit 服务时,应用需申请锻炼记录概要、锻炼记录详情数据、锻炼记录位置详情数据的读权限

  • B. 调用 requestAuthorizations 申请用户授权时,在 AuthorizationRequest 的 writeDataTypes 中传入锻炼记录数据类型

  • C. 申请 Health Service Kit 服务时,应用需申请锻炼记录概要、锻炼记录详情数据的读权限

  • D. 调用 requestAuthorizations 申请用户授权时,在 AuthorizationRequest 的 readDataTypes 中传入锻炼记录数据类型

答案: A D

53、网络管理模块主要提供以下功能

  • A. Socket 连接:通过 Socket 进行数据传输

  • B. 网络连接管理:网络连接管理提供管理网络一些基础能力,包括 WiFi / 蜂窝 / Ethernet 等多网络连接优先级管理、网络质量评估、订阅默认 / 指定网络连接状态变化、查询网络连接信息、DNS 解析等功能

  • C. WebSocket 连接:使用 WebSocket 建立服务器与客户端的双向连接

  • D. HTTP 数据请求:通过 HTTP 发起一个数据请求

  • E. MDNS 管理:MDNS 即多播 DNS(Multicast DNS),提供局域网内的本地服务添加、移除、发现、解析等能力

  • F. VoIP 管理:管理 VoIP 的连接及状态等

答案: A B C D E

54、关于相机拍照会话配置,可成功配置的有

  • A.

    cameraSession.addInput(cameraInput)
    cameraSession.addOutput(previewOutput)
    cameraSession.addOutput(photoOutput)
    cameraSession.beginConfig()
    cameraSession.commitConfig()
    
  • B.

    cameraSession.addOutput(previewOutput)
    cameraSession.addOutput(photoOutput)
    cameraSession.addInput(cameraInput)
    cameraSession.beginConfig()
    cameraSession.commitConfig()
    
  • C.

    cameraSession.beginConfig()
    cameraSession.addOutput(previewOutput)
    cameraSession.addOutput(photoOutput)
    cameraSession.addInput(cameraInput)
    cameraSession.commitConfig()
    
  • D.

    cameraSession.beginConfig()
    cameraSession.addInput(cameraInput)
    cameraSession.addOutput(previewOutput)
    cameraSession.addOutput(photoOutput)
    cameraSession.commitConfig()
    

答案: C D

55、在 HarmonyOS 一多断点开发中,断点的定义代码如下,请问 code 1 和 code 2 处代码的正确语句分别是

export default class EntryAbility extends UIAbility {
  private uiContext?: UIContext;
  private onWindowSizeChange: (windowSize: window.Size) => void = (windowSize: window.Size) => {
    let widthBp: WidthBreakpoint = this.uiContext!.getWindowWidthBreakpoint();
    // code 1
    let heightBp: HeightBreakpoint = this.uiContext!.getWindowHeightBreakpoint();
    // code 2
  };
  // ...
  onWindowStageCreate(windowStage: window.WindowStage): void {
    // Main window is created, set main page for this ability
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');

    windowStage.loadContent('pages/Index', (err) => {
      if (err.code) {
        hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');
        return;
      }
      hilog.info(0x0000, 'testTag', 'Succeeded in loading the content.');
      // The system interface depends on UIContext and needs to be invoked after the page is loaded. It needs to be written in the loadCo
      windowStage.getMainWindow().then((data: window.Window) => {
        this.uiContext = data.getUIContext();
        let widthBp: WidthBreakpoint = this.uiContext.getWindowWidthBreakpoint();
        let heightBp: HeightBreakpoint = this.uiContext.getWindowHeightBreakpoint();
        AppStorage.setOrCreate('currentWidthBreakpoint', widthBp);
        AppStorage.setOrCreate('currentHeightBreakpoint', heightBp);
        data.on('windowSizeChange', this.onWindowSizeChange);
      }).catch((err: BusinessError) => {
        console.error(`Failed to obtain the main window. Cause code: ${err.code}, message: ${err.message}`);
      });
    });
  }
  // ...
}
  • A. AppStorage.setOrCreate ('currentWidthBreakpoint', widthBp);

  • B. AppStorage.setOrCreate ('currentHeightBreakpoint', heightBp);

  • C. AppStorage.getOrCreate ('currentHeightBreakpoint', heightBp);

  • D. AppStorage.getOrCreate ('currentWidthBreakpoint', widthBp);

答案: A B

56、下列哪些应用场景使用了自由流转中的多端协同能力?

  • A. 在手机上播放的音频,投到 PC/2in1 设备上继续播放

  • B. 在设备 A 上通过聊天软件打开设备 B 上的文档应用选择到想要的资料回传到设备 A 上,然后通过聊天软件发送给对方

  • C. 在手机和平板上打开备忘录同一篇笔记进行编辑,在手机上使用本地图库中的图片资源插入编辑,在平板上进行文字内容编辑

  • D. 在平板上播放的视频,迁移到智慧屏继续播放,从而获得更佳的观看体验;平板上的视频应用退出

答案: B C (答案可能选:ABCD)

57、以下哪些方法或属性可用于处理 Web 组件中的键盘操作相关功能?

  • A. textZoomRatio

  • B. sendFunctionKey

  • C. WebKeyboardCallback

  • D. close

答案: B C

58、在桌面添加某应用的服务卡片时,卡片数据初始化流程包括下面哪些步骤?

  • A. 触发 FormExtensionAbility 生命周期接口 onAddForm ()

  • B. 使用 postCardAction () 接口触发 message 事件来更新卡片内容

  • C. 使用 formBindingData 的 createFormBindingData () 接口封装卡片需要使用的数据类

  • D. 卡片页面使用页面级的 UI 状态存储 LocalStorage 接收 onAddForm () 接口传递的数据

答案: A C D

59、下列关于 Node-API 中的 napi_load_module 接口描述正确的有?

  • A. 其主要功能是在主线程中进行模块的加载

  • B. 禁止在非主线程当中使用该接口

  • C. 禁止在 Init 函数中使用该接口

  • D. 禁止在线程安全函数的回调函数当中进行文件路径的加载

答案: B C D

60、hiAppEvent 中订阅的崩溃事件包含哪些类型的数据

  • A. 进程 id

  • B. 应用名称

  • C. 全量线程调用栈

  • D. 崩溃类型

  • E. 主线程未处理消息

  • F. 应用是否处于前台状态

答案: A B C D E F

温馨提示: 小伙伴们,以上试题答案仅作学习参考。因系统版本差异,具体功能表现请以鸿蒙系统官网最新发布为准。谢谢!