学完时间:2024年8月29日
学完排名:第192546名
一、前言叨叨
经过几日的休整,我终于再次挑战高级认证,并以82分的成绩堪堪越过了及格线。然而,通过考试后我惊讶地发现,原来顺利过关的人数如此众多。我逐一攻克了所有基础题目,却发现随着基础题的刷过,同行的考生越来越少,而开发者认证的人数却在不断攀升。不禁笑出声来,原来我也是通过搜题才得以通关的一员!
这让我想起了《黑神话 · 悟空》和西游记的故事,没有历经重重关卡,取得的胜利似乎总是少了那么一丝满足感。在获得高级证书之后,我终于解锁了华为应用发布的权限。或许,许多人正是为了这一刻而奋斗。
接下来,我计划通过app开发的过程,深入梳理HarmonyOS的相关知识,并将我心中构想的app变为现实。敬请各位关注我的动态,持续阅读我的文章,并为我的app提供宝贵意见,以期它早日登陆应用商店,与大家见面。
欢迎打开关注我,并持续关注我的文章,给我的app也提供一些意见,早日上线应用商店。
专栏:《鸿蒙开发》
https://blog.csdn.net/qq_15062089/category_12769519.html
单选题
1. ArkTS支持以下哪些函数
- A. Object.getOwnPropertySymbols();
- B. Object.keys();
- C. Object.isPrototypeOf();
- D. Object.isExtensible();
- 答案:B
2. 在方舟字节码的函数调用规范中,前三个参数表示的含义分别是
- A. new.Target、this、函数对象本身
- B. 函数对象本身、new.Target、this
- C. this、函数对象本身、new.Target
- D. new.Target、凶数对象本身、this
- 答案:B
3. 下面关于方舟字节码格式PREF_IMM16_V8_V8描述正确的是
- A. 8位操作码,8位立即数,16位id,8位寄存器
- B. 16位前缀操作码,16位立即数,8位寄存器
- C. 8位操作码,8位立即数,2个8位寄存器
- D. 16位前缀操作码,16位立即数,2个8位寄存器
- 答案:D
4. ArkTS支持以下哪个函数。
- A. Object.hasOwnProperty();
- B. Object.getOwnPropertyDescriptors();
- C. Object.values();
- D. Object.getOwnPropertyDescriptor();
- 答案:C
5. 以下哪些赋值语句在ArkTS中是合法。
- A. class A{ V: number = 0 }
- B. class B extends A{ w.seline-、
- C. class c1
- D. v: number = 0;
- 答案:D
6. 根据上面代码,以下解释正确的是
- A. 在ChangeMode里改变mode的值,会触发其父组件Page的Title内容的切换。
- B. 在自定义组件Page的build方法里改变状态变量是非法操作,可能导致未定义的异常UI行为。
- C. 为了避免@Prop的拷贝,可以优化使用@Link,在该例子中行为和@Prop一样。
- D. 本例子可以运行起来,所以代码没有问题。
- 答案:A
7. 以下关于ArkUI NavDestination组件的生命周期执行顺序中正确的是
- A. onWillappear->onWillShow->onShow->onAppear->onWillHide->onHidden->onWilIDisappear->onDisappear
- B. onWillappear->onAppear->onWillShow->onShow->onWillHide->onHidden->onWillDisappear-> onDisappear
- C. onWillappear->onAppear->onWillShow->onShow->onWillDisappear->onWillHide->onHidden->onDisappear
- D. onWillappear->onAppear->onWil|Show->onShow->onWillHide->onWillDisappear->onHidden->onDisappear
- 答案:B
8. 下面哪种转场效果在入场动画时,表现为从透明度为0、相对于组件正常显示位置x方向平移100vp的状态,到默认的透明度为1、相对于组件不平移的状态,且透明度动画和平移动画的动画时长均为2000ms
- A. TransitionEffect.asymmetric(TransitionEffect.OPACITY.animation({duration:2000}),
- B. TransitionEffect.OPACITY.combine(TransitionEffect.translate({x:100}).animation({duration: 2000}))
- C. TransitionEffect.translate({x:100}).combine(TransitionEffect.OPACITY.animation({duration: 2000}))
- D. TransitionEffect.OPACITY.animation({duration: 2000}).combine(TransitionEffect.translate({x:100}))
- 答案:C
9. 如果要实现Row组件内的子元素均匀排列,且第一个元素与行首对齐,最后一个元素与行尾对齐,需要使用justifyContent的哪个枚举值
- A. SpaceEvenly
- B. Start
- C. SpaceBetween
- D. End
- 答案:C
10. 以下关于垂直滚动Grid组件使用cachedCount属性的说明正确的是
- A. 设置cachedCount为1,则Grid在显示范围上下各缓存1个Gridltem
- B. 设置cachedCount为1,则Grid在显示范围上下各缓存1行Gridltem
- C. 设置cachedCount为1,则Grid在显示范围下方缓存1行Gridltem
- D.设置cachedCount为1,则Grid在显示范围下方缓存1个Gridltem
- 答案:A
11. 从桌面冷启动如下应用代码,点击Change按钮5次,整个过程中,代码中的2条log依次出现的次数是:
dart
class Data {
num: number
type: string
constructor(num: number, type: string) {
this.num = num;
this.type = type;
}
}
@Reusable
@Component
struct Item {
@State data: Data | undefined = undefined;
aboutToAppear(): void {
console.log("Demo log1");
}
aboutToReuse(params: ESObject): void {
console.log("Demo log2");
this.data = params.data
}
build() {
Text("num = " + this.data?.num + ", type = " + this.data?.type)
}
}
@Entry
@Component
struct Index {
data1: Data = new Data(1, "type1");
data2: Data = new Data(2, "type2");
@State data: Data = this.data1
build() {
Column() {
if (this.data.type == "type1") {
Item({ data: this.data }).reuseId(this.data.type)
} else {
Item({ data: this.data }).reuseId(this.data.type)
}
Button('Change').onClick(() => {
if (this.data === this.data1) {
this.data = this.data2
} else {
this.data = this.data1
}
})
}
}
}
- A. 1,0
- B. 2,4
- c. 6,0
- D. 1,5
- 答案:D
12.现有一个宽高分别为200px的XComponent组件,其绑定了一个XComponentController(xcController),依次进行如下操作:
(1) xcController.setXComponentSurfaceRect {surfaceWidth: 150, surfaceHeight: 500} )
(2) 设置XComponent组件的padding为{ top: 5px, left: 10px, bottom: 15px, right: 20px}(3) 将XComponent组件大小改为300pxx300px
(4) 给XComponent组件设置一个宽度为2px的边框
(5) xcController.setXComponentSurfaceRect/{offsetX: -20, offsetY: 50, surfaceWidth: 200, surfaceHeight:
-100})
之后,调用xcController.getXComponentSurfaceRect()的返回值为
- •A. {offsetX: -20, offsetY: 50, surfaceWidth: 200, surfaceHeight: 500 }
- • B. {offsetX: 75, offsetY: -100, surfaceWidth: 150, surfaceHeight: 500}
- • C. {offsetX: 81, offsetY: -89, surfaceWidth: 200, surfaceHeight: 03
- D. { offsetX: 81mpffsetY: -89, surfaceWidth: 150, surfaceHeight: 500 }
- 答案:A
13. 为了使isShow参数值与半模态界面的状态同步,可以使用下列那种方式双向绑定isShow参数?
14. 在使用DevEco Studio的Profiler进行HarmonyOS应用或服务内存管理优化时,以下哪个描述最准确地概述了"Allocation Insight"功能在识别和
解决内存问题中的作用
- A. Allocation Insight详细展示应用运行时的每条语句柄分配记录,便于开发者逐一检查内存使用,但不提供内存泄漏的自动识别功能
- B. Allocation Insight主要关注于内存碎片整理,减少内存分配的不连续性问题,对内存泄漏和溢出问题的检测不是其主要功能
- C. Allocation Insight通过分析应用服务运行时的内存分配及使用情况,辅助定位内存泄漏、内存抖动和溢出问题,支持优化内存使用
- D. Allocation Insight仅提供内存分配总量的概览,帮助开发者宏观了解内存使用趋势,但对于具体泄漏或抖动问题无能为力
- 答案:C
15. 在HarmonyOS应用开发中,当开发者遇到需要分析Release版本应用的崩溃或异常堆栈信息时,为了准确地将堆栈追踪信息对应到源代码的具体位置,以下哪个描述是正确的做法或理解
- A 开发者需手动將Releage构建生成的so文件与源代码进行映射,配合第三方工具进行推栈信感还原,虽然过程察琐,但最终能定位到间题代
- B. 因为Release应用经过优化和去除Debug信息,直接从堆栈跟踪到源代码行号是不可能的,开发者只能依靠日志信息手工推测问题所在
- C.因为Release应用经过优化和去除Debug信息,直接从堆栈跟踪到源代码行号是不可能的,开发者只能依靠日志信息手工推测问题所在
- D. DevEco Studio通过集成的Release应用堆栈解析功能,自动利用构建时产生的so文件、source map文件、nameCache文件等,无需额外操作即可直接在Release应用中提供详细的源码级堆栈追踪信息
- 答案:D
16. 项目需要同时进行应用和元服务的开发,并针对当前项目工程中的代码可以分别构建出应用和元服务的包,如何在DevEco Studio中设置不同的构建配置,达成这个目的
- A. 在模块级别build-profile.json5定义两个target,将两个target的bundleType分別设置成app和atomicService
- B. 修改工程级别的AppScope/app.json5中的bundleType值为app
- C. 在工程级别build-profilejson5定义两个product,将两个product的bundleType分别设置成app和atomicService
- D. 修改工程级别的AppScope/app.json5中的bundleType值为atomicService
- 答案:A
17. 张工正在使用DevEco Studio进行一个复杂项目的开发工作,项目中包含了成千上万行代码且涉及众多模块。在重构代码的过程中,他意识到需要对一个核心类名进行更改,考虑到这个类在整个项目中被广泛引用,手动修改不仅耗时且容易出错。基于DevEco Studio提供的代码编辑功能,以下哪个描述最准确地也概述了张工如何高效且安全地完成对类名的更改,同时确保整个项目中所有相关引用同步更新?
- A.张工需打开项目搜索功能,输入旧类名找到所有匹配项,逐一进行替换,完成更名操作。
- B.张工只需简单选中需要更名的类名,按下Delete键删除后直直接输入新名称,DevEco Studio会自动识别并更新所有引用。
- 张工选中需要更名的类名,使用快捷键Shift+F6或右键菜单Refactor->Rename,在弹出框中输入新名称并选择替换范围后,点
- 击"Refactor"完成更名操作,确保所有相关引用自动更新。
- 张工在代码编辑器中右键点击该类名,选择"Find Usage",手动浏览所有引用位置并逐一修改为新名称。
- 答案:C
18. 在一个包含多个模块(如entry、feature、service、library等)的的大型HarmonyOS应用项目中,如果某个模块feature对另外一个公共库模块library有依赖,如何通过DevEco Studdio正确配置项目依赖关系
- A.在feature的oh-package.json5文件的dependencies字段中配置library的依赖
- B.在feature的build-profile.json5文件的dependencies字段中配置libriary的依赖
- C.在library的oh-package.json5文件的dependencies字段中配置feature的依赖
- D.无需配置,直接壶代码中编写import xxx from 'library'
- 答案:A
19. 一个复杂的项目,该项目不仅包含主入口模块(Entry Module),边还有多个特性的功能模块(Feature Modules/HSP),并且这些模块间存在着相互调用关系。为了确保在调试过程中能够完整地测试所有交互逻辑,需要将涉及到的所有模块的HAP包都部署到目标设备上。请从以下下选项中选择正确的操作步骤来配置DevEco Studio,以便一次性部署和调试项目中的多个模块
- A.无需特殊配置,DevEco Studio会自动检测到项目中的所有模块依赖,并在每次调试运行时自动部署所有相关HAP包。
- B. 进入"Run>Edit Configurations"菜单,在"Deploy Multi Hap"选项点卡下,勾选"Deploy Multi Hap Packages",随后在列表中选择需要部
- 署的模块。
- 直接点击运行按钮,DevEco Studio会弹出对话框询问需要部署哪些模块,从中选择需要的模块后开始调试。
- 在项目结构界面手动选择每个模块,单独编译并逐一将生成我的HAP包通过HDC命令推送到设备上。
- 答案:B
20. 在开发HarmonyOS应用工程时,随着业务的发展,现在需要创建一一个模块,关于在DevEco Studio中创建Module,下列选项哪种方式是错误的?
- A.在hvigor目录下,单击鼠标右键,选择New>Module...,创建新的Module,此时module将创建在该文件目录下。
- B.在工程根目录下创建一个新的Directory,可在该目录下单击鼠标右键,选择New>Module...,创建新的Module,此时module将色建在该
- 文件目录下。
- 鼠标移到工程目录顶部,单击鼠标右键,选择New>Module...开始创建新的Module,此时该module将创建在工程根目录下。
- 选中工程目录中任意文件,然后在菜单栏选择File>New>Mcdule...,开始创建新的Module,此时该module将创建在工程根自录下
- 答案:D
21. 项目中包含多个模块和数千行代码。随着开发的深入,项目中的ArkTS源代码文件逐渐积累了大量import语句,其中不乏未使用的import以及不规范的排序情况,关于DevEco Studie的编辑器的"Optimize Imports",以下说法正确的是
- A.应该手动遍历每个ArkTS文件,逐一检查并删除未使用的import语句,然后按照字母顺序手动排序剩余的import。
- B.为了快速清理未使用的import,可以选中项目根目录,按下快捷键Ctrl+Alt+O(在macOS上为Control+Option+O),让DevEco Sttudio自
- 动识别并移除所有未使用的import,并自动按照预设规则排序和合#import
- 可以在菜单栏中依次点击"Code">"Reformat Code"来达到优化import的目的,因为"Optimize Imports"功能已整合进"Reformat
- Code"中。
- D.在DevEco Studio中,没有直接的"Optimize Imports"功能,需要安装第三方插件来实现这个需求。
- 答案:B
22. HAR(Harmony Archive)是HarmonyOS提供的共享包,以下关于HAR的拍这错误的是
- A.HAR不支持引用AppScope目录中的资源。在编译构建时,AppScope中的内容不会打包到HAR中,因此会导致HAR资源引用失败。
- B.HAR不支持在设备上单独安装/运行,只能作为应用模块的依赖项被引用。
- C.HAR可以作为二方库和三方库提供给其他应用使用,如果需需要对代码资产进行保护时,建议开启混淆能力。
- D.HAR不支持使用page页面。
- 答案:D
23. 下面的配置存在有几处错误()
- appjson5配置文件:
- "app": {
- "bundleName": "com.example.myapplication",
- "vendor": "example",
- "Versionode": 1000000 A
- "versionName": "1.0.2",
- "icon": "$media:app_icon",
- "label": "$string:app_name",
- "bundleType": "app"
- 答案:D
24. 在组件中,经常需要使用字符串、图片等资源。HSP中的组件需要使用资源时,一般将其所用资源放在HSP包内,而非放在HSP的使用方处,以符合高内聚低耦合的原则。下面访问HSP资源错误的是
- A. 跨包访问HSP内资源时,推荐实现一个资源管理类,以封装对外导出的资源。
- B. 通过 r 访问 H S P 中的资源。 I m a g e ( r访问HSP中的资源。Image( r访问HSP中的资源。Image(rapp.media.example)) jd(example) .borderRadius( 48px)
- C. 使用相对路径的方式,访问HSP中的资源。Image(".J./resources/base/media/example.pngy") jd(example).borderRadius(48px)
- 答案:B
25. 在编译构建HAP时,会从HAP模块及依赖的模块中收集资源文件,如果不同模块下的资源文件出现重名冲突时,会按照优先级进行覆盖,现在有一个HAP依赖了两个HAR,依赖配置如下所示:
- // oh-package.json5
- "dependencies": {
- "dayjs": "^1.10.4",
- "lottie": "^2.0.0"
- 在资源覆盖时,以下优先级排序正确的是()
- A. HAP包自身模块>lottie模块>dayjis模块>AppScope
- B. AppScope>HAP包自身模块>lottie模块>dayjs模块
- C. HAP包自身模块>dayjis模块>lottie模块>AppScope
- D. AppScope>HAP包自身模块>dayjs模块>lottie模块
- 答案:A
26. 一个应用的一个UIAblity,其exported字段配置 false,以下哪个场景可以拉起这个UIAbility。
- A. caller应用在后台,申请了长时任务,有START_ABILITY_FROM_BACKGROUND权限;
- B. caller应用在后台,有START_ABILITY_FROM.BACKGROUND权限;
- C. caller应用在后台,有STARTJNMISIBLE, ABILITY权限;
- D. caller应用在后台,申请了长时任务,有STARTJNVISIBLE.ABILITY权限
- 答案:D
27. singleton模式的UIAbility,在冷启动时生命周期的执行顺序是:
- A. onCreate->onForeground->onWindowStageCreate
- B. onCreate->onWindowStageCreate->onForeground
- C. onCreate->onBackground->onWindowStageCreate
- D. onCreate->onBackground->onForeground
- 答案:B
28. 开发者开发了一个应用,该应用只有一个hap包,其module.json5中abilities的配置如下所示,包含1个UIAbility(无Web组件)、1个FormExtensionAbility组件、
- 1个WorkSchedulerExtensionAbility组件,那么该应用在运行过程中,最多会存在几个应用进程:
- "abilities": [
- name: "EntryAbility,
- 'srcEntry": "/etc/entryabty/Entry Ability.t",
- "description" : "$string:EntryAbility_desc",
- exported: ture
- extensionAoilities"
- A. 1个
- B. 27.
- C. 47
- D.3个
- 答案:D
29. 一个应用有2个UIAbility组件,其modulejson中abilities标签的配置如下方代码。
- 在手机设备上,执行如下操作后:
- 1.启动UIAbility1,然后back键返回销毁UIAbillity1;
- 2.启动UIAbility2,然后back键返回销毁UIAbility2;
- 3.启动UIAbility2,然后back键返回销毁UIAbility2;
- 进入多任务列表,能看看到该应用的几个任务视图:
- "startWindowlcon": "$media:icon",
- "startWindowBackground : "$color:start_window_background",
- exported: true
- "launchType": multiton
- "name": "UlAbility2",
- srcentry: /ets/entryability/Ability<.ets ,
- "description": "$string:Ability2_desc",
- "icon": smedia:icon",
- "label": "$string:Ability2_label",
- "startWindowlcon": "$media:icon",
- "startWindowBackground": "Scolor:start window background".
- "exported": true,
- "launchlype: singleton,
- "removeMissionAfterTerminate":true
- A. 0个
- C B. 3个
- 答案:C
30. 应用发生崩溃,()接口可以获取到崩溃时调用栈
- A. hiTraceMeter
- B. hiAppEvent
- C. hiDebug
- D. hiLog
- 答案:C
31. 作为一个应用开发者,想搭建运维平台,想在应用内定时读取当前的内存信息,可以通过()接口来实现。
- A. hiDebug
- B. hiAppEvent
- C. hiChecker
- D. hiLog
- 答案:C
32. 当标记了@Reuseable的自定义组件实现了组件复用后,这个组件的复用范围是什么?
- A. 标记了@Reuseable的自定义组件的外层容器节点范围内
- B. 整个页面都可以复用
- C. 整个应用内都可以复用
- D.标记了@Reuseable的自定义组件的父组件范围内
- 答案:C
33. 我们需要避免在逐帧调用的接口中执行耗时操作,下面哪个选项不属于上述的接口?
- A. onScroll
- B. onAreaChange
- C. aboutToReuse
- D. onTouch*
- 答案:D
34. 为了提高性能,所以List组件支持懒加载,可以通过配置cachedCount属性设置缓存列表项的数量。当我们不设置List的属性cachedCount时,该属性的默认值是?
- A. 3
- B. 1.
- C. 2
- D.0
- 答案:D
35. 下面持续集成描述哪项是错误的:
- A. 持续集成就是持续编译,二者异曲同工
- B. 持续集成在大型项目(有几十个项目组)也能应用,即便是项目组开发进度不统一也没问题
- C. Martin Fowler说过,"持续集成并不能消除Bug,而是让它们非常容易发现和改正。"
- D.持续集成(CI, Continuous Intergation):指频繁的,一天多次将代码集成到主干。
- 答案:A
36. 以下关于应用架构技术选型说法不正确的是()
- A.一些应用的扩属能力,比如备份、服务卡片,可以采用ExtensionAbslity做成单独的feature HAP包,独立分发。
- B. 元服务和应用可以共用一个代码工程,采用多目标产物构建方式,构建出应用和元服务两个产物,用于上架。
- C. 随着业务的发展,应用功能会越来越多,某些功能可以做成动态加载,动态加载的模块采用HAR工程来构建,方便复用和共享。
- D.对于初始版本的应用,功能比较简单,可以考虑采用单HAP加上多个HAR工程构建代码工程。
- 答案:D
37. 在moduleA(HAP类型)中有一个图片名为image.png,在moduleB(HAR类型)也存在一个图片名为image.png,而moduleA依赖于moduleB,那么在moduleA的编译产物hap包中,image.png存在情况是:
- A. 两者都存在
- B. 两者都不存在
- C. 仅存在modysE的image.png
- D. 仅存在moduleA的image.png
- 答案:A
38. 某App依赖了3个ohpm库,这3个库占用的体积都比较大。在App的技术架构中,有多个hap和多个hsp均依赖这3个库,为了减少app的首包大小,以下哪些做法是无效的?
- A. 将3个ohpm库分别封装成3个hsp,并对外提供必要的接口。
- B. 将某些特性做成按需加载模块,若这3个ohpm仅在按需加载模块里面使用,则将其打包在按需加载模块中。
- C. 将这3个ohpm库封装到har包中,并对外提供必要的接口。
- D. 将3个ohpm癫封装成1个hsp,并对外提供必要的接口。
- 答案:D
39. 以下对系统兼容性的理解正确的是
- A. 已发布的系统能力有可能会发生非兼容性变更,比如新增特性或修改问题导致的行为不兼容,这种情况下应用需要关注changelog并进行适配。
- B. 系统能力都会保持绝对的兼容性,不能因为任何非兼容性的修改而导致开发者成本上升
- C. 安全法律法规等不可控因素会导致系统非兼容性变更,开发者需要积极适配
- D. 应用不需要关注系绕的兼容性变化,那都是系统开发人员需要关注的事情
- 答案:A
40. WebSocket连接开发步骤描述错误的是
- A. 调用Session.start方法开启metadata数据输出
- B. 使用完WebSocket连接之后,主动断开连接
- C. 创建一个WebSocket连接,返回一个WebSocket对象
- D.(可选)订阅WebSocket的打开、消息接收、关闭、Error事件
- E. 根据URL地址,发起WebSocket连接
- F. 导入需要的webSocket模块
- 答案:F