赞
踩
本来打算找到工作再整理高级的题库,但一直没什么面试机会。宅在家里也不知道干些什么。索性就把高级的题库整理出来了。也算有头有尾。高级的题库更新之后,专业性更强了,不是真正从事这一行的,很难做出来。本人就是个小菜鸡,有一些题,我也不想不明白。题目的答案我尽可能的找到出处,如果读者发现错误或有补充建议,欢迎评论或私信笔者。笔者这篇就当抛砖引玉,各位读者可以当作考试的一个参考
注:有读者反馈,题库的代码块比较多,打开文章时会卡死。所以笔者将题库拆分,单选题20个为一组,多选题10个为一组,题库目录如下,读者可以按需跳转。如果对您的阅读产生不便,笔者在这里向大家说声抱歉,请各位读者原谅。完整的md文档,等读者把题库整理完,会将网盘链接发出。
1、以下关于Taskpool和Worker的描述正确的是
A、Worker自行管理命周期,开发者无需关心任务负载高低
B、TaskPool支持任务延时执行
C、开发者需要自行管理taskpool的数量及生命周期
D、TaskPool和Worker的任务执行时长上限都是无限制
TaskPool和Worker的对比 (TaskPool和Worker)-使用多线程并发能力进行开发-并发-ArkTS(方舟编程语言)-应用框架 | 华为开发者联盟 (huawei.com)
2、以下哪个装饰器用来表示并发共享对象。
A、@State
B、@Sendable
C、@Shared
D、@Style
Sendable开发指导-附录-并发-ArkTS(方舟编程语言)-应用框架 | 华为开发者联盟 (huawei.com)
3、ArkTS支持以下哪些函数(不确定,Object类里都有这些方法)
A、Object.keys();
B、Object.getOwnPropertySymbols();
C、Object.isExtensible();
D、Object.isPrototypeOf();
4、以下哪些赋值语句在ArkTS中是合法。
class C {}
let value1: number = null;
let value2: string | null = null;
let value3: string | undefined = null;
let value4: C = null
A、value1
B、value2
C、value3
D、value4
5、ArkTS支持以下哪个函数。(不确定,Object类里都有这些方法)
A、Object.values();
B、Object.getOwnPropertyDescriptors();
C、Object.getOwnPropertyDescriptor();
D、Object.hasOwnProperty();
6、下面哪种转场效果在入场动画时,表现为从透明度为0、相对于组件正常显示位置×方向平移100vp的状态,到默认的透明度为1、相对于组件不平移的状态,且透明度动画和平移动画的动画时长均为2000ms
A、TransitionEffect.asymmetric(TransitionEffect.OPACITY.animation({duration:2000}),TransitionEffect.translate({x:100}).animation({duration:2000}))
B、TransitionEffect.OPACITY.animation({duration:2000}).combine(TransitionEffect.translate({x:100}))
C、TransitionEffect.translate({x:100}).combine(TransitionEffect.OPACITY.animation({duration:2000}))
D、TransitionEffect.OPACITY.combine(TransitionEffect.translate({x:100}).animation({duration:2000}))
注:放到代码块里,方便查看
TransitionEffect.asymmetric(TransitionEffect.OPACITY.animation({duration:2000}),
TransitionEffect.translate({x:100}).animation({duration:2000}))
// 答案 =========================================
TransitionEffect.OPACITY
.animation({duration:2000})
.combine(TransitionEffect.translate({x:100}))
TransitionEffect
.translate({x:100})
.combine(TransitionEffect.OPACITY.animation({duration:2000}))
TransitionEffect.OPACITY
.combine(TransitionEffect.translate({x:100}).animation({duration:2000}))
出现/消失转场-转场动画-使用动画-UI开发 (ArkTS声明式开发范式)-ArkUI(方舟UI框架)-应用框架 | 华为开发者联盟 (huawei.com)
7、现有一个宽高分别为200px的XComponent组件,其绑定了一个XComponentController(xcController),依次进行如下操作:
(1)xcController.setXComponentSurfaceRect( {surfaceWidth: 150, surfaceHeight: 500})
(2)设置XComponent组件的padding为{ top: 5px, left: 10px, bottom: 15px, right: 20px }
(3)将XComponent组件大小改为300px * 300px
(4)给XComponent组件设置一个宽度为2px的边框
(5)xcController.setXComponentSurfaceRect( { offsetX: -20, offsetY: 50, surfaceWidth: 200, surfaceHeight: -100 } )之后,调用xcController.getXComponentSurfaceRect()的返回值为
A、{ offsetX: 81, offsetY: -89, surfaceWidth: 150, surfaceHeight: 500 }
B、{ offsetX: 81, offsetY: -89, surfaceWidth: 200, surfaceHeight: 0 }
C、{ offsetX: -20, offsetY: 50, surfaceWidth: 200, surfaceHeight: 500 }
D、{ offsetX: 75, offsetY: -100, surfaceWidth: 150, surfaceHeight: 500 }
不确定,把所有选项列出
XComponent-基础组件-基于ArkTS的声明式开发范式-ArkTS组件-ArkUI(方舟UI框架)-应用框架 | 华为开发者联盟 (huawei.com)
8、根据上面代码,以下解释正确的是
注:被注释的代码是额外加上的,用于测试,并非题目原本的
enum Mode { fullScreen, halfScreen } @Entry @Component struct Index { @State title: string = ""; @State mode: Mode = Mode.fullScreen; isShowTitle(): boolean { if (this.mode == Mode.fullScreen) { this.title = "Title"; return true; }else { this.title = "Section"; return false; } } build() { Column(){ if (this.isShowTitle()) { Text(`${this.title}`) } else { Text(`${this.title}`) } ChangeMode({ mode: this.mode}) } } } @Component struct ChangeMode { //@Link mode: Mode; @Prop mode: Mode; build() { Row({space: 20}) { Button('full screen').onClick(() => { this.mode = Mode.fullScreen }) Button('half screen').onClick(() => { this.mode = Mode.halfScreen }) //Text(this.mode.toString()) } } }
A、本例子可以运行起来,所以代码没有问题。
B、在ChangeMode里改变mode的值,会触发其父组件Page的Title内容的切换。
C、为了避免@Prop的拷贝,可以优化使用@Link,在该例子中行为和@Prop一样。
D、在自定义组件Page的build方法里改变状态变量是非法操作,可能导致未定义的异常UI行为。
9、已知下列代码PageOne页面为navigation中的某一子页面,依次点击PageOne页面中toPageTwo按钮,PageTwo页面中toPageOne按钮,此时点击get按钮获取全部名为name的NavDestination页面的位置索引为(不确定,把所有选项列出)
// PageOne.ets @Component export struct PageOneTmp { @Consume('pageInfos') pageInfos: NavPathStack; build() { NavDestination() { Column() { Button('toPageTwo', { stateEffect: true, type: ButtonType.Capsule }) .width('80%') .height(40) .margin(20) .onClick(() => { this.pageInfos.pushPathByName('pageTwo',"") }) Button('get', { stateEffect: true, type: ButtonType.Capsule }) .width('80%') .height(40) .margin(20) .onClick(() => { console.log('获取全部名称为name的NavDestination页面的位置索引', JSON.stringify(this.pageInfos.getIndexByName('PageOne'))) }) }.width('100%').height('100%') }.title('pageOne') .onBackPressed(() => { const popDestinationInfo = this.pageInfos.pop() console.log('pop返回值' + JSON.stringify(popDestinationInfo)) return true }) } }
// PageTwo.ets export class Pages{ names: string = "" values: NavPathStack | null = null } @Builder export function pageTwoTmp(info: Pages){ NavDestination() { Column(){ Button('toPageOne', { stateEffect: true, type: ButtonType.Capsule }) .width('80%') .height(40) .margin(20) .onClick(() => { (info.values as NavPathStack).pushPathByName('pageOne', null) }) }.width('100%').height('100%') }.title('pageTwo') .onBackPressed(() => { (info.values as NavPathStack).pop() return true }) }
A:[1,2]
B:[2,1]
C:[0,2]
D:[0,1]
10、以下示例代码中可以进行动画的属性有哪些?
@Component struct MyComponent { @State compWidth: number = 100; @State compHeight: number = 100; @State compRadius: number = 32; build() { Column(){ } //.backgroundColor(Color.Red) .width(this.compWidth) // 1 .height(this.compHeight) // 2 .animation({ curve: Curve.Ease, duration: 200 }) .borderRadius(this.compRadius) // 3 .onClick(() => { this.compWidth += 10; this.compHeight += 10; this.compRadius += 4; }) } } /* @Entry @Component struct Index { build() { Column(){ MyComponent() } } } */
A、2、3
B、1、3
C、1、2、3
D、1、2
属性动画接口说明-属性动画-使用动画-UI开发 (ArkTS声明式开发范式)-ArkUI(方舟UI框架)-应用框架 | 华为开发者联盟 (huawei.com)
11、依次点击A、B、C、D四个按钮,其中不会触发UI刷新的是:
class Info{ name: string; constructor(name: string) { this.name = name; } } @Entry @Component struct Index { @State nameList: Info[] = [new Info("Tom"), new Info("Bob"), new Info("John")] build() { Column() { ForEach(this.nameList, (item: Info) => { Text(`${item.name}`) }) Button("A") .onClick(() => { this.nameList.push(new Info("Lucy")) }) Button("B") .onClick(() => { this.nameList[0] = new Info("Eric") }) Button("C") .onClick(() => { this.nameList[0].name = "Jim" }) Button("D") .onClick(() => { this.nameList = [new Info("Barry"), new Info("Cindy"), new Info("David")] }) } } }
A、A
B、B
C、C
D、D
12、从桌面冷启动如下应用,点击Change按钮5次,整个过程中,代码中的2条log依次出现的次数,最初和最后画面上显示的【num = ?】的数字是
// ERROR 题目出错
A、0,6,1,6
B、1,5,1,6
C、2,4,1,6
D、2,4,1,2
13、使用promptAction.showToast如何设置显示再其他应用之上?
A、ToastShowMode.DEFAULT
B、ToastShowMode.SYSTEM_TOP_MOST
C、ToastShowMode.TOP_MOAST
D、无需配置,默认显示在其他应用之上
@ohos.promptAction (弹窗)-UI界面-ArkTS API-ArkUI(方舟UI框架)-应用框架 | 华为开发者联盟 (huawei.com)
14、在使用DevEco Studio的Profiler进行HarmonyOS应用性能优化的流程中,以下哪个步骤最恰当地描述了开发者利用Profiler工具进行性能问题识别、定位、优化及验证的完整过程
A、仅通过创建深度分析任务,利用perf数据详细分析性能瓶颈,修改代码后,不需再进行验证直接发布应用
B、首先使用"Realtime Monitor"实时监控,观察应用资源消耗,一旦发现CPU或内存异常,直接修改代码并重新编译
C、利用"Realtime Monitor"初步识别性能瓶颈,创建深度分析任务定位根因,根据分析结果优化代码,再用"Realtime Monitor"验证优化效果
D、在发现应用性能不佳时,直接查看代码逻辑,凭经验修改后,利用Profiler的"Realtime Monitor"确认资源消耗是否降低
性能优化过程简介-使用Profiler进行性能调优-性能分析-DevEco Studio | 华为开发者联盟 (huawei.com)
15、DevEco Studio提供HarmonyOS应用/服务的UI预览界面与源代码文件间的双向预览功能,支持ets文件与预览器界面的双向预览。关于双向预览,下列选项说法错误的是?
A、选中预览器UI界面中的组件,则组件树上对应的组件将被选中,同时代码编辑器中的布局文件中对应的代码块高亮显示。
B、双向预览不支持通过组件的属性面板实时修改属性或样式。
C、选中布局文件中的代码块,则在UI界面会高亮显示,组件树上的组件节点也会呈现被选中的状态。
D、选中组件树中的组件,则对应的代码块和U界面也会高亮显示。
16、项目中包含多个模块和数千行代码。随着开发的深入,项目中的ArkTS源代码文件逐渐积累了大量imbort语句,其中不乏未使用的import以及不规范的排序情况,关于DevEco Studio的编辑器的"Optimize Imports",以下说法正确的是
A、应该手动遍历每个ArkTS文件,逐一检查并删除未使用的import语句,然后按照字母顺序手动排序剩余的import。
B、在DevEco Studio中,没有直接的"Optimize Imports"功能,需要安装第三方插件来实现这个需求。
C、为了快速清理未使用的import,可以选中项目根目录,按下快捷键Ctrl+Alt+O(在macOS上为Control+Option+O),让DevEco Studio自动识别并移除所有未使用的import,并自动按照预设规则排序和合并import。
D、可以在菜单栏中依次点击"Code">"Reformat Code"来达到优化import的目的,因为"Optimize Imports"功能已整合进"Reformat Code"中。
17、在使用DevEco Studio的Profiler进行HarmonyOS应用或服务内存管理优化时,以下哪个描述最准确地概述了"Allocation Insight"功能在识别和解决内存问题中的作用
A、Allocation Insight详细展示应用运行时的每条语句柄分配记录,便于开发者逐一检查内存使用,但不提供内存泄漏的自动识别功能
B、Allocation Insight仅提供内存分配总量的概览,帮助开发者宏观了解内存使用趋势,但对于具体泄漏或抖动问题无能为力
C、Allocation Insight通过分析应用服务运行时的内存分配及使用情况,辅助定位内存泄漏、内存抖动和溢出问题,支持优化内存使用
D、Allocation Insight主要关注于内存碎片整理,减少内存分配的不连续性问题,对内存泄漏和溢出问题的检测不是其主要功能
内存分析及优化-基础内存分析:Allocation分析-性能分析-DevEco Studio | 华为开发者联盟 (huawei.com)
18、项目需要同时进行应用和元服务的开发,并针对当前项目工程中的代码可以分别构建出应用和元服务的包,如何在DevEco Studio中设置不同的构建配置,达成这个目的 (不确定,把所有选项列出)
A、 在工程级别build-profile.json5定义两个product,将两个product的bundleType分别设置成app和atomicService
B、修改工程级别的AppScope/app.json5中的bundleType值为atomicService
C、在模块级别build-profile.json5定义两个target,将两个target的bundleType分别设置成app和atomicService
D、修改工程级别的AppScope/app.json5中的bundleType值为app
元服务概述-指南 | 华为开发者联盟 (huawei.com)
19、HarmonyOS应用开发团队正着手优化一款面向全球市场的在线教育应用,该应用在特定课程直播环节出现了性能波动和响应延迟的问题,严重影响用户体验。打算利用DevEco Profiler来进行性能优化。DevEco Profiler其设计核心和主要优势是什么
A、DevEco Profiler采用Bottom-Up设计原则,从底层代码细节开始逐步构建性能模型
B、DevEco Profiler专注于用户界面设计的美化,使开发者操作更为直观
C、DevEco Profiler依据Top-Down设计理念,通过高度整合的数据展示范式,提供从宏观到微观的性能数据分析,加速开发者定位和解决问题的过程
D、DevEco Profiler主要是一个自动化修复工具,能自动检测并解决所有HarmonyOS应用的性能问题
Profiler工具简介-性能分析-DevEco Studio | 华为开发者联盟 (huawei.com)
20、使用DevEco Studio进行复杂的跨设备功能开发与调试工作,期间频繁依赖本地模拟器来模拟多样化的设备环境。在这样的背景下,以下关于DevEco Studio本地模拟器所支持的规格与功能,哪一项描述是准确的
A、本地模拟器当前不支持单元测试框架和UI测试框架的运行
B、本地模拟器和真机的能力没有任何差异,真机上可以支持的能力在模拟器上都可以
C、本地模拟器上运行的应用无需进行签名,简化了调试过程。
D、本地模拟器当前不支持查看HiLog以及FaultLog
模拟器与真机的差异-概述-使用模拟器运行应用/服务-应用/服务运行-DevEco Studio | 华为开发者联盟 (huawei.com)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。