2024-11月华为HarmonyOS应用开发者高级认证-理论

1,289 阅读23分钟

单选题

1.下面关于方舟字节码格式PREF_IMM16_V8_V8描述正确的是(D)

A.16位前缀操作码,16位立即数,8位寄存器

B.8位操作码,8位立即数,16位id,8位寄存器

C.8位操作码,8位立即数,2个8位寄存器

D.16位前缀操作码,16位立即数,2个8位寄存器

2.ArkTS支持以下哪个函数。(C)

A.Object.hasOwnProperty();

B.Object.getOwnPropertyDescriptor();

C.Object.values();

D.Object.getOwnPropertyDescriptors();

3.ArkTS支持以下哪个函数?(D)

A.Object.getOwnPropertyDescriptors();

B.Object.getOwnPropertyDescriptor();

C.Object.hasOwnProperty();

D.Object.values();

4.以下关于Taskpool和Worker的描述正确的是(B)

A.开发者需要自行管理taskpool的数量及生命周期

B.TaskPool和Worker的任务执行时长上限都是无限制

C.Worker自行管理生命周期,开发者无需关心任务负载高低

D.TaskPool支持任务延时执行

5.图片大小跟 Image 组件设置的宽高不匹配时,使用 objectFit 属性,不会缩放图片的类型是下面哪个选项(A)

A. Center

B. Contain

C. Fill

D. Cover

6.下列代码中哪些不能指定半模态高度?(C)

A. ...SheetSize.FIT_CONTENT...

B. ...SheetSize.LARGE...

C. ...SheetSize.END...

D. ...SheetSize.MEDIUM...

7.使用promptAction.showToast如何设置显示在其他应用之上?(C)

A.ToastShowMode.SYSTEM_TOP_MOST

B.ToastShowMode.DEFAULT

C.ToastShowMode.TOP_MOAST

D.无需配置,默认显示在其他应用之上

8.关于长时任务开发使用的借口是(A)

A. 使用 startBackgroundRunning 申请任务,使用 stopBackgroundRunning 取消任务

B. 使用 requestSuspendDelay 申请任务,使用 getRemainingDelayTime 获取任务剩余时间

C. 使用 publishReminder 发布一个提醒类通知,使用 cancelReminder 取消一个指定的提醒类通知

D. 使用 startWork 申请任务,使用 stopWork 取消任务,使用 getWorkStatus 获取任务状态

9.下面哪种转场效果在入场动画时,表现为从透明度为0、相对于组件正常显示位置x方向平移100vp的状态,到默认的透明度为1、相对于组件不平移的状态,且透明度动画和平移动画的动画时长均为2000ms(D)

A.TransitionEffect.translate({x:100}).combine(TransitionEffect.OPACITY.animation({duration:2000}))

B.TransitionEffect.OPACITY.combine(TransitionEffect.translate({x:100}).animation({duration:2000}))

C.TransitionEffect.asymmetric(TransitionEffect.OPACITY.animation({duration:2000}),TransitionEffect.translate({x:100}).animation({duration: 2000}))

D.TransitionEffect.OPACITY.animation({duration:2000}).combine(TransitionEffect.translate({x:100}))

10.依次点击A、B、C、D四个按钮,其中不会触发UI刷新的是(C)

A. ...this.nameList.push(new Info("lucy"))...;

B. ...this.nameList.[0] = new Info("Eric")...;

C. ...this.nameList[0].name = "jim";

D. ...this.nameList = [new Info("Barry"),new Info(Cindy),new Info("David")]

11.在使用DevEco Studio的Profiler进行HarmonyOS应用性能优化的流程中,以下哪个步骤最恰当地描述了开发者利用Profiler工具进行性能问题识别、定位、优化及验证的完整过程(B)

A.在发现应用性能不佳时,直接查看代码逻辑,凭经验修改后,利用Profiler的“Realtime Monitor”确认资源消耗是否降低

B.利用“Realtime Monitor”初步识别性能瓶颈,创建深度分析任务定位根因,根据分析结果优化代码,再用“Realtime Monitor”验证优化效果

C.仅通过创建深度分析任务,利用perf数据详细分析性能瓶颈,修改代码后,不需再进行验证直接发布应用 D.首先使用“Realtime Monitor”实时监控,观察应用资源消耗,一旦发现CPU或内存异常,直接修改代码并重新编译

12.张工正在使用DevEco Studio进行一个复杂项目的开发工作,项目中包含了成千上万行代码且涉及众多模块。在重构代码的过程中,他意识到需要对一个核心类名进行更改,考虑到这个类在整个项目中被广泛引用,手动修改不仅耗时且容易出错。 基于DevEco Studio提供的代码编辑功能,以下哪个描述最准确地概述了张工如何高效且安全地完成对类名的更改,同时确保整个项目中所有相关引用同步更新?(A)

A.张工选中需要更名的类名,使用快捷键Shift+F6或右键菜单Refactor -> Rename,在弹出框中输入新名称并选择替换范围后,点击“Refactor”完成更名操作,确保所有相关引用自动更新。

B.张工只需简单选中需要更名的类名,按下Delete键删除后直接输入新名称,DevEco Studio会自动识别并更新所有引用。

C.张工在代码编辑器中右键点击该类名,选择“Find Usage”,手动浏览所有引用位置并逐一修改为新名称。

D.张工需打开项目搜索功能,输入旧类名找到所有匹配项,逐一进行替换,完成更名操作。

13.在一个包含多个模块(如entry、feature、har、hsp等)的大型HarmonyOS应用项目中,如果要对某个静态共享模块构建出静态构建包产物,如何通过DevEco Studio进行构建(B)

A.选中hap模块,点击通过菜单栏make module ‘hap’

B.选中har模块,点击build菜单栏make module ‘har’

C.选中hsp模块,点击通过菜单栏make module ‘hsp’

D.选中har模块,点击build菜单栏build hap(s)

14.项目中涉及多个类的继承与重写。为了快速实现子类对父类方法的重写,小华想利用DevEco Studio提供的便捷功能来提高开发效率。他了解到,通过一个特定的操作流程,可以直接依据父类的模板生成子类中需要重写的方法代码,而无需手动编写完整方法体,在DevEco Studio中,如何正确使用Override Methods功能来快速生成子类需要重写的方法代码(B)

A.将光标放置于任何代码行,按下Ctrl+B,然后在弹出菜单中选择Override Methods,之后勾选需要重写的方法并确认。

B.将光标定位到子类的定义处,按下Ctrl+O(或右键单击选择Generate... > Override Methods),在弹出的对话框中选择要重写的方法,点击OK完成生成。

C.在项目结构视图中找到目标子类,双击打开后直接在代码编辑区输入重写方法的签名,DevEco Studio将自动完成剩余代码。

D.通过菜单栏File > Settings,配置Override Methods快捷方式,之后在代码中仅需选中父类方法名,即可自动在子类中生成重写代码。

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

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

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

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

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

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

A.无需配置,直接在代码中编写import xxx from ‘library’

B.在library的oh-package.json5文件的dependencies字段中配置feature的依赖

C.在feature的build-profile.json5文件的dependencies字段中配置library的依赖

D.在feature的oh-package.json5文件的dependencies字段中配置library的依赖

17.HAR(Harmony Archive)是HarmonyOS提供的共享包,以下关于HAR的描述错误的是(B)

A.HAR不支持引用AppScope目录中的资源。在编译构建时,AppScope中的内容不会打包到HAR中,因此会导致HAR资源引用失败。

B.HAR不支持使用page页面。

C.HAR可以作为二方库和三方库提供给其他应用使用,如果需要对代码资产进行保护时,建议开启混淆能力。

D.HAR不支持在设备上单独安装/运行,只能作为应用模块的依赖项被引用。

18.want参数的entities匹配规则错误的是(A)

A.调用方传入的want参数的entities为空,待匹配应用组件的skills配置中的entities不为空,则entities匹配失败。

B.调用方传入的want参数的entities不为空,待匹配应用组件的skills配置中的entities为空,则entities匹配失败。

C.调用方传入的want参数的entities为空,待匹配应用组件的skills配置中的entities为空,则entities匹配成功。

D.调用方传入的want参数的entities不为空,待匹配应用组件的skills配置中的entities不为空且包含调用方传入的want参数的entities,则entities匹配成功。

19.HarmonyOS提供了多种包结构,每种包编译后的产物都不同,下面说法错误的是(A)

A.hsp包编译后的产物是.hsp文件。

B.har包编译后的产物是.har文件。

C.hap包编译后的产物是.hap文件。

D.app包编译后的产物是.app文件。

20.某个应用开发了一个UIAbilityA,其启动模式是specified,并且对应的AbilityStage的实现如下:(A)

A.3个

B.2个

C.1个

D.4个

21.通过aa工具拉起com.example.test的EntryAbility,并传参给EntryAbility,具体参数是number类型的[key1, 1] [key2,2] 和string类型的[key3, testString] [key4,''], 那边下面那个aa 命令是正确的:(B)

A.aa start -b com.example.test -a EntryAbility --pi key1 1 --pi key2 2 --ps key3 testString --psn key4 ''

B.aa start -b com.example.test -a EntryAbility --pi key1 1 --pi key2 2 --ps key3 testString --psn key4

C.aa start -b com.example.test -a EntryAbility --pi key1 1 key2 2 --ps key3 testString --psn key4

D.aa start -b com.example.test -a EntryAbility --pi key1 1 --pi key2 2 --ps key3 testString --ps key4

22.一个应用的一个UIAblity,其exported字段配置为false,以下哪个场景可以拉起这个UIAbility。(D)

A.caller应用在后台,有START_INVISIBLE_ABILITY权限;

B.caller应用在后台,有START_ABILITY_FROM_BACKGROUND权限;

C.caller应用在后台,申请了长时任务,有START_ABILITY_FROM_BACKGROUND权限;

D.caller应用在后台,申请了长时任务,有START_INVISIBLE_ABILITY权限;

23.hiAppEvent提供的Watcher接口,属性不配置,会导致编译报错,产生"ArkTS Compiler Error"(B)

A.onReceive

B.name

C.onTrigger

D.triggerCondition

24.作为应用开发者,你使用hiAppEvent订阅了崩溃事件。应用崩溃后,从onReceive接口返回的AppEventInfo中属性可以获取崩溃调用栈信息。(A)

A.params

B.name

C.eventType

D.domain

25.当使用状态变量进行ArkUI组件间数据通信的时候,如果两个组件间没有直接的嵌套关系(非父子和祖孙关系组件),但是他们又属于同一页面,最佳的装饰器应该选用哪个?(B)

A.AppStorage

B.LocalStorage

C.@Provide+@Consume

D.@State+@Link

26.关于代码门禁理解正确的是:(C)

A.代码门禁是一项代码质量保障措施。目的是要求开发人员提交的代码必须满足一些要求才能合入代码仓库。门禁必须强制要求包括编译通过、单元测试覆盖率达标、代码静态检查无告警、全量功能测试用例、DFX专项测试都通过。

B.门禁级检查的范围和版本级检查的范围保持一致,尽可能多的在MR门禁阶段就拦截防护住问题,保障问题可以及时清理掉。

C.代码门禁则是在代码合并之前就验证代码来保护主干分支的完整性。通过这种方式,可以保护主分支代码避免因合码导致的构建中断,以确保 master 分支代码始终是可部署的,并且不会因明显的错误而影响到你正在并行开发的同事工作。

D.标准 CI 构建是在代码合并后检查已提交代码的功能完整性,这种方法会导致代码合并到master后编译失败导致没有可用版本部署。通过提高滚动构建的频度就可以代替代码门禁,保障代码主干及时发现并解决问题。

27.某业务团队的架构师发现某个特性用的频率比较少,但是这个特性占用空间资源还是比较大的。为了减少首包下载体积,准备将该特性解耦出来,并对外提供API方便主模块调用。以下说法正确的是(D)

A.将该特性做成hap包,通过Ability组件暴露出来给主app使用。

B.将该特性做成动态加载的har包,暴露接口给主模块使用。

C.将该特性做成H5模块,通过web组件加载远程资源使用。

D.将该特性做成按需加载的hsp包,暴露接口给主模块使用。

28.某App有A、B、C、D四个团队分别负责ModuleA、ModuleB、ModuleC和ModuleD四个业务模块,随着业务的发展,ModuleA需要跳转到ModuleB、ModuleC的页面,ModuleB需要跳转到ModuleC、ModuleD的界面,ModuleC需要跳转到ModuleA的界面,ModuleD需要跳转到ModuleB和ModuleC的界面。由于复杂的依赖关系,导致一旦有变化就需要知会各个团队,所以该团队的架构师想要解耦各个业务模块,以下哪些做法是不推荐的(C)

A.可以采用Navigation作为页面导航根容器,将其放在entry中,其他Module的页面作为Navigation的子页面。

B.在RouterModule中采用路由表方式解耦各个业务模块。

C.采用静态import方式引入对应跳转的页面。

D.采用RouterModule作为中介者并用动态import解耦各个业务模块

29.在moduleA(HAP类型)中有一个图片名为image.png,在moduleB(HAR类型)也存在一个图片名为image.png,而moduleA依赖于moduleB,那么在moduleA的编译产物hap包中,image.png存在情况是:(B)

A.两者都存在

B.仅存在moduleA的image.png

C.仅存在moduleB的image.png

D.两者都不存在

30.某App依赖了3个ohpm库,这3个库占用的体积都比较大。在App的技术架构中,有多个hap和多个hsp均依赖这3个库,为了减少app的首包大小,以下哪些做法是无效的?(D)

A.将3个ohpm库封装成1个hsp,并对外提供必要的接口。

B.将某些特性做成按需加载模块,若这3个ohpm仅在按需加载模块里面使用,则将其打包在按需加载模块中。

C.将3个ohpm库分别封装成3个hsp,并对外提供必要的接口。

D.将这3个ohpm库封装到har包中,并对外提供必要的接口。

31.关于短时任务开发使用的接口是(D)

A.使用startBackgroundRunning申请任务,使用stopBackgroundRunning取消任务

B.使用startWork申请任务,使用stopWork取消任务,使用getWorkStatus获取任务状态

C.使用publishReminder发布一个提醒类通知,使用cancelReminder取消一个指定的提醒类通知

D.使用requestSuspendDelay申请任务,使用getRemainingDelayTime获取任务剩余时间

32.项目需要为不同的设备形态(如手机、智能手表)提供定制化构建。请说明如何在 DevEco Studio 中设置不同的构建配置,以生成针对不同设备的 hap 包? (A)

A. 在工程级别 build-profile.json5 定义多个 product,在每个 product 的 config/deviceType 中定义不同的设备类型

B. 在模块级别 build-profile.json5 定义多个 target,在每个 target 的 config/deviceType 中定义不同的设备类型

C. 在模块级别 build-profile.json5 定义多个 target,在每个 target 的 config/distributionFilter中定义不同的设备类型

D. 在工程级别 build-profile.json5 定义多个product,在每个product的config/distributionFilter中定义不同的设备类型

33.Image组件如下属性中哪个属性是支持svg 图源的? (B)

A. interpolation

B. colorFilter

C. objectRepeat

D. renderMode

34.以下哪个接口不是Web组件web_webview.WebDownloadItem接口的能力 (A)

A. getUuid ()

B. getLastErrorCode ()

C. getPercentComplete ()

D. getCurrentSpeed ()

35.下述代码中的renderGroup属性,对性能影响是什么(C)

A. 不一定

B. 优化

C. 劣化

D. 没有变化

36.hiAppEvent 提供的 Watcher 接口,需要订阅到 OS 的崩溃事件,正确的实现方式(A)

A:

hiAppEvent.addWatcher({ 
    name: "watcher", 
    appEventFilters:[ 
        { 
            domain: hiAppEvent.domain.OS, 
            names: [hiAppEvent.event.APP_CRASH] 
        }
    ], 
    onReceive: (domain: string, appEventGroups: Array<hiAppEvent.AppEventGroup>) => { }
})
  1. 应用程序开发调试过程中,经常需要安装新应用进行调测,下面安装应用操作错误的是(A)

A. hdc install -p ohosapp.hap
B. bm install -p ohosapp.hap -r
C. bm install -p /data/app/
D. bm install -p ohosapp.hap

38.在项目开发过程中,项目中的 ArkTS 源代码文件积累了大量 import 语句,其中包括未使用的 import 以及不规范的排序情况。针对 DevEco Studio 编辑器的 “Optimize Imports” 功能,以下说法正确的是:(D)

A. 可以在菜单栏中依次点击 “Code”>“Reformat Code” 来达到优化 import 的目的,因为 “Optimize Imports” 功能已整合进 “Reformat Code” 中。

B. 应该手动遍历每个 ArkTS 文件,逐一检查并删除未使用的 import 语句,然后按照字母顺序手动排序剩余的 import。

C. 在 DevEco Studio 中,没有直接的 “Optimize Imports” 功能,需要安装第三方插件来实现这个需求。

D. 为了快速清理未使用的 import,可以选中项目根目录,按下快捷键 Ctrl+Alt+O(在 macOS 上为 Control+Option+O),让 DevEco Studio 自动识别并移除所有未使用的 import,并自动按照预设规则排序和合并 import。

39.“如果想要设置输入框的自定义键盘,可以使用下面的哪个接口?”(B)

A. enterKeyType

B. customKeyboard

C. showUnit

D. showCounter

40.“开发者小张想要高效地管理 HarmonyOS 设备中的文件,包括查看文件列表、进行文件搜索、新建及删除操作,以及在设备与 PC 间传输文件,而无需使用命令行工具。以下哪个选项最能准确概括小张能通过哪个工具直接在 DevEco Studio 界面完成上述所有操作?”(D)

A. DevEco Studio 的 Logcat 窗口

B. DevEco Studio 的 Project Explorer

C. DevEco Studio 的 Terminal 窗口

D. DevEco Studio 的 Device File Browser

多选题

41.某业务团队发现用户对他们App的某个特性使用率并不高,为了节省用户首次下载安装包的体积,考虑将该特性做成按需加载,那么推荐该特性使用的工程模块类型是?(BD)

A.har

B.hap

C.app

D.hsp

42.用户购买商品后,你需要及时发放相关权益。但实际应用场景中,若出现异常将导致应用无法知道用户实际是否支付成功,从而无法及时发放权益,即出现掉单情况。为了确保权益发放,你需要在以下哪些场景检查用户是否存在已购未发货的商品:(ABD)

A.createPurchase请求返回1001860001-内部错误时

B.应用启动时

C.finishPurchase请求返回1001860052-由于未拥有该商品,发货失败时

D.createPurchase请求返回1001860051-由于已经拥有该商品,购买失败时

43.以下数据类型中,哪些是Sendable数据。(ABC)

import { lang } from '@kit.ArkTS';
class C {}
interface I extends lang.ISendable {}

A.number

B.interface I

C.string

D.class C

44.以下代码片段哪几处违反了ArkTS语法规范。(ABD)

function foo(value1: number, value2: number) {
    return value1 + value2;
}

foo();
foo(1, 2);
foo(1, 2, 3);
foo(1, 2, 3, 4);

A.foo(1, 2, 3);

B.foo(1, 2, 3, 4);

C.foo(1, 2);

D.foo();

45.ArkTS中不能使用以下哪些类型。(AB)

A.any

B.unknown

C.tuple type

D.union type

46.下面关于方舟字节码文件格式描述正确的是(AB)

A.方舟字节码文件是ArkTS/TS/JS编译后的二进制产物

B.方舟字节码文件中数据类型uint16_t表示16-bit无符号整数,采用小端字节序

C.方舟字节码文件中数据类型uint32_t表示32-bit无符号整数,采用大端字节序

D.方舟字节码文件中不包含字节码文件内容的adler32校验和

47.依次点击A、B、C、D四个按钮,其中不会触发UI刷新的是:(BC)

@Entry
@Component
struct Index {
    @State count: number = 0;
    @State @Watch('onValueChange') value: number = 50;

    onValueChange() {
        this.count = this.value;
    }

    build() {
        Column() {
            Text(`${this.count}`)
            Button("A")
               .onClick(() => {
                    this.count = 0;
                })
            Button("B")
               .onClick(() => {
                    for (let i = 0; i < 1000; i++) {
                        this.count = i;
                    }
                    for (let i = 1000; i > 0; i--) {
                        this.count = i;
                    }
                    this.count--;
                })
            Button("C")
               .onClick(() => {
                    this.value = 100;
                })
            Button("D")
               .onClick(() => {
                    setInterval(() => {
                        this.count++;
                    }, 1000)
                })
        }
    }
}

A.D

B.B

C.A

D.C

48.如下ABC 3处手势,有机会执行的是哪几处?CD

@Entry
@Component
struct ListTest {
    scroller: Scroller = new Scroller()
    scroller2: Scroller = new Scroller()
    scroller3: Scroller = new Scroller()
    private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    private childRecognizer: GestureRecognizer = new GestureRecognizer()
    private currentRecognizer: GestureRecognizer = new GestureRecognizer()
    private lastOffset: number = 0

    build() {
        Stack({ alignContent: Alignment.TopStart }) {
            Scroll(this.scroller) {
                Column() {
                    Text("Scroll Area")
                       .width("90%")
                       .height(150)
                       .backgroundColor(0xFFFEEE)
                       .borderRadius(15)
                       .fontSize(16)
                       .textAlign(TextAlign.Center)
                       .margin({ top: 10 })
                    List({ space: 20, initialIndex: 0 }) {
                        ForEach(this.arr, (item: number) => {
                            ListItem() {
                                Text(" " + item)
                                   .width("100%")
                                   .height(100)
                                   .fontSize(16)
                                   .backgroundColor(Color.Blue)
                                   .textAlign(TextAlign.Center)
                                   .borderRadius(10)
                            }
                        }, (item: string) => item)
                    }
                   .listDirection(Axis.Vertical)
                   .scrollBar(BarState.Off)
                   .friction(0.6)
                   .divider({ strokeWidth: 2, color: 0xFFFEEE, startMargin: 20, endMargin: 30 })
                   .listItemSpace(20)
                   .scrollable(ScrollDirection.Vertical)
                   .scrollBarState(BarState.On)
                   .scrollBarColor(Color.Gray)
                   .scrollBarWidth(10)
                   .edgeEffect(EdgeEffect.None)
                   .onScroll((xOffset: number, yOffset: number) => {
                        console.info(xOffset + " " + yOffset)
                    })
                   .onScrollEdge((side: Edge) => {
                        console.info("To the edge")
                    })
                   .onScrollStop(() => {
                        console.info("Scroll Stop")
                    })
                }
            }
           .width("100%")
           .height(600)
           .scrollable(ScrollDirection.Vertical)
           .scrollBar(BarState.On)
           .scrollBarColor(Color.Gray)
           .scrollBarWidth(10)
           .edgeEffect(EdgeEffect.None)
           .onScroll((xOffset: number, yOffset: number) => {
                console.info(xOffset + " " + yOffset)
            })
           .onScrollEdge((side: Edge) => {
                console.info("To the edge")
            })
           .onScrollStop(() => {
                console.info("Scroll Stop")
            })
        }
       .width("100%")
       .height("100%")

     A   .gesture(
             TapGesture({ count: 2 })
                .onAction((event: GestureEvent) => {
                     if (event) {
                         this.value = JSON.stringify(event.fingerList[0])
                     }
                 })
         )
     B   .gesture(
             PanGesture({ direction: PanDirection.Vertical })
                .onActionUpdate((event: GestureEvent) => {
                     console.log("zcb onActionUpdate event offsetY " + event.offsetY + " this.lastOffset " + this.lastOffset + " t
                 })
         )
     C   .gesture(
             ParallelGesture(
                 PanGesture({ direction: PanDirection.Vertical })
                    .onActionUpdate((event: GestureEvent) => {
                         console.log("zcb onActionUpdate event offsetY " + event.offsetY + " this.lastOffset " + this.lastOffset + " t
                     })
             )
            .width("100%")
            .height("100%")
            .backgroundColor(0x0D0D0D)
         )
    }
}

A.B

B.NA

C.C

D.A

49.List组件onScrollIndex事件触发时机是(CD)

A.List组件列表滚动时每帧触发

B.List组件滚动停止时触发

C.List组件首次加载完成时触发

D.List组件显示区域内第一个子组件或最后一个子组件或中间位置子组件索引值变化时触发

50.在开发过程中,我们可以将每个功能模块作为一个独立的Module进行开发。关于Module,下列选项说法正确的是?(BCD)

A.entry类型的Module:应用的主模块,包含应用的入口界面、入口图标和主功能特性,编译后生成entry类型的HAP。每一个应用分发到同一类型的设备上的应用程序包,可以包含一个或多个entry类型的HAP。

B.feature类型的Module:应用的动态特性模块,编译后生成feature类型的HAP。一个应用中可以包含一个或多个feature类型的HAP,也可以不包含。

C.HAR类型的Module:静态共享库。HAR中的代码和资源跟随使用方编译,如果有多个使用方,它们的编译产物中会存在多份相同拷贝。

D.Shared类型的Module:动态共享库。HSP中的代码和资源可以独立编译,运行时在一个进程中代码也只会存在一份。

51.以下关于LocalStorage的说法正确有哪些?(ACD)

A.应用程序可以创建多个LocalStorage实例,LocalStorage实例可以在页面内共享,也可以通过GetShared接口,获取在UIAbility里创建的GetShared,实现跨页面、UIAbility内共享。B.LocalStorage中的所有属性都是不可变的。

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

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

52.使用如下的代码去启动一个ability时,哪种skills定义的组件能够被匹配到:(ABCD)

let want = {
    "uri": "https://www.test.com:8080/query/books",
    "type": "text/plain"
}

context.startAbility(want).then(((data) => {
    console.log(TAG + " startAbility success");
})).catch((err) => {
    console.log(TAG + " startAbility failed.");
});

A.


"skills": [
  {
    "uris": [
      {
        "scheme": "https",
        "host": "www.test.com",
        "type": "text/plain"
      }
    ]
  }
]

B.

"skills": [
  {
    "uris": [
      {
        "scheme": "https",
        "host": "www.test.com",
        "pathStartWith": "query/books",
        "type": "text/plain"
      }
    ]
  }
]

C.

"skills": [
  {
    "uris": [
      {
        "scheme": "https",
        "type": "text/*"
      }
    ]
  }
]

D.

"skills": [
  {
    "uris": [
      {
        "scheme": "https",
        "host": "www.test.com",
        "pathStartWith": "query/books",
        "type": "text/*"
      }
    ]
  }
]
  1. Web 组件支持以下哪些常用属性(ABCD)

A. darkMode (mode: WebDarkMode) 设置网页深色模式

B. textAutosizing 设置使能文本自动调整大小

C. InputWindowInfo 设置网页输入法软键盘的窗口信息

D. copyOptions (value: CopyOptions) 设置剪贴板复制范围

  1. 应用开发的有些场景中,如果希望根据条件导入模块或者按需导入模块,可以使用动态导入代替静态导入,下面导入场景中适合使用动态 import 的是:(ABCD)

A. 当静态导入的模块很明显的占用了大量的系统内存且被使用的可能性很低。

B. 当被导入的模块,在加载时并不存在,需要异步获取。

C. 当被导入的模块说明符,需要动态构建。

D. 当静态导入的模块很明显的降低了代码的加载速度且被使用的可能性很低,或者并不需要马上使用它。

55.为了加快构建速度,提高开发效率,可以如何调整 Hivigor 配置,从而优化构建速度?(CD)

A. 启用 Hivigor 的 typeCheck,在增量场景下进行对 Hivigorfile 进行类型检查。

B. 启动 Hivigor 的 daemon 模式,在增量场景下复用缓存。

C. 启用 Hivigor 的 incremental,在增量场景下检查任务是否可以跳过。

D. 启用 Hivigor 的 parallel,在增量场景下进行并行编译处理。

56.以下代码中,懒加载生效的是(C)

A

@Entry
@Component
struct LazyTest {
  data: MyDataSource<number> = new MyDataSource<number>()
  build() {
    List() {
      ListItemGroup() {
        LazyForEach(this.data, (item:number)=>{
          ListItem() {
            Text(item.toString())
              .width('100%')
              .height(100)
          }
        })
      }
    }.width("100%").height("100%")
  }
}

B

@Entry
@Component
struct LazyTest {
  data: MyDataSource<number> = new MyDataSource<number>()
  build() {
    Scroll() {
      List() {
        LazyForEach(this.data, (item:number)=>{
          ListItem() {
            Text(item.toString())
              .width('100%')
              .height(100)
          }
        })
      }
    }.width("100%").height("100%")
  }
}

C

@Entry
@Component
struct LazyTest {
  data: MyDataSource<number> = new MyDataSource<number>()
  build() {
    List() {
      ListItem() {
        Column() {
          LazyForEach(this.data, (item: number) => {
            Text(item.toString())
              .width('100%')
              .height(100)
          })
        }
      }
    }.width("100%").height("100%")
  }
}

D

@Entry
@Component
struct LazyTest {
  data: MyDataSource<number> = new MyDataSource<number>()

  build() {
    Scroll() {
      List() {
        LazyForEach(this.data, (item: number) => {
          ListItem() {
            Text(item.toString())
              .width('100%')
              .height('100')
          }
        })
      }
    }.width("100%").height("100%")
  }
}

57.在ArkTS中,以下代码片段正确的是(CD)

A

function fn(x: string): string {
    return x;
}
type funcType = (ns: string | number) => string;
let func: funcType = fn;

B

function fn(x: string | number): void {
    console.log('value: ' + x);
}
type funcType = (ns: string | number) => string;
let func: funcType = fn;

C

function fn(x: string | number): string {
    return 'value: ' + x;
}
type funcType = (ns: string) => string;
let func: funcType = fn;

D

function fn(x: string | number): string {
    return 'value: ' + x;
}
type funcType = (ns: string | number) => string;
let func: funcType = fn;

58.下述场景代码片段,其中列表数据较多,且图片为远端图片,能有效减少列表滑动过程中的图片白块的措施有:(ABD)

List() {
  LazyForEach(this.source, (item: ShowData) => {
      ListItem() {
          Text(item.msg)
          Image(item.img)
      }
  })
}

A. 为 img 添加有效缓存管理

B. 为 List 添加 cachedCount 属性

C. 使用 ForEach 替换 LazyForEach

D. 为 LazyForEach 添加第三参数

59.下面关于 Node - API 数据类型描述正确的是:(BD)

A. napi_threadsafe_function_call_mode:该枚举类型定义了两个常量,用于指定线程安全函数的回调模式。

B. napi_status:是一个枚举数据类型,表示 Node - API 接口返回的状态值。

C. napi_value:用于表示 Node - API 执行时的上下文。

D. napi_env:用于表示 Node - API 执行时的环境。

60.下面关于混淆规则描述正确的是:(BD)

A. -keep - property - name [identifiers,...]: 指定要保留的顶层作用域的名称。

B. -print - namecache filepath: 将名称缓存保存到指定的文件路径。

C. -keep - global - name [identifiers,...]: 指定想保留的属性名。

D. -keep - file - name [identifiers,...]: 指定要保留的文件 / 文件夹的名称。