在ArkTS中,以下哪些声明类的方式是正确的。
class C1 {
value: number = 0;
}
class C2 {
value: number;
constructor(value: number) {
this.value = value;
}
}
class C3 {
constructor(value: number) {
this.value = value;
}
}
class C4 {
value: number;
}
A.C2
B.C1
C.C4
D.C3
hiAppEVent提供的Watcher 接口,订阅到的系统事件,哪些包含 HiLog 日志?
A.启动耗时事件
B.卡死事件
C.崩溃事件
D.CPU高负载事件
在开发过程中,我们可以将每个功能模块作为一个独立的 Module 进行开发。关于
Module,下列选项说法正确的是?
A.Shared Library: 动态共享库。HSP 中的代码和资源可以独立编译,运行时在一个进程
中代码也只会存在一份。
B.feature 类型的 Module: 应用的动态特性模块,编译后生成 feature 类型的 HAP。一个
应用中可以包含一个或多个 feature 类型的 HAP,也可以不包含
C.entry类型的 Module: 应用的主模块,包含应用的入口界面、入口图标和主功能特性
编译后生成entry 类型的 HAP。每一个应用分发到同一类型的设备上的应用程序包,可以
包含一个或多个entry类型的 HAP
D.Static Library: 静态共享库。HAR 中的代码和资源跟随使用方编译,如果有多个使用方
它们的编译产物中会存在多份相同拷贝。:静态共享库。HAR中的代码和资源跟随使用方编译,如果有多个使用方,它们的编译产物中会存在多份相同拷贝。
以下关于Taskpool和Worker的描述正确的是
A.TaskPool不支持线程复用
B.TaskPool支持设置任务的优先级
C.Worker支持取消已发起的任务
D.Worker的任务执行时长上限是无限制
ArkTS对并发编程API和能力进行了增强,以下描述正确的是
A.CPU密集型任务场景中,当任务不需要长时间(3分钟)占据后台线程,而是一个个独立的任务时,推荐使用TaskPool进行开发。
B.默认情况下,Sendable数据在ArkTS并发实例间(包括主线程、TaskPool&Worker工作线程)传递的行为是拷贝传递。
C.在并发API的形式上,目前主要有两种:Worker和TaskPool。
D.单次I/O任务的开发场景中,必须使用TaskPool进行开发。
开发者小李正在使用DevEco Studio开发一款面向HarmonyOS的应用,该应用需要在多种设备上表现出一致的稳定性和优秀的用户体验。为了确保高质量的发布,小李意识到需要实施一套全面的测试策略,覆盖代码的自动化测试和手动测试,还需要衡量代码的测试覆盖率,以确定测试的充分性。在DevEco Studio的测试框架下,以下描述中,哪些是正确的
A.无论选择Instrument Test还是Local Test,DevEco Studio均内置了详尽的测试报告功能,实时显示测试进度,且直接在IDE中可查看代码覆盖率报告,无需外部工具。
B.Local Test:测试用例位于test目录,无需设备或模拟器环境,直接在本地执行,专注于ArkTS语言,推荐适用于API版本11及以上的Hvigor工程,目前特别限于Stage模型,并不涵盖C/C++方法。
C.DevEco Studio的测试框架提供测试用例执行能力,包含基础接口以编写和输出测试结果,鼓励用户创建易于维护的自动化测试脚本,并且统计代码覆盖率。
D.Instrument Test:测试用例存储于项目的ohosTest目录,要求在HarmonyOS设备或模拟器上执行,兼容ArkTS与JS语言编写。
在大型软件工程中,一般会伴随着多团队开发,各团队开发自己的业务模块,最后再由集成交付团队集成到一起,下面哪些是大型应用模块化开发最佳实践
A.
使用路由表进行模块间解耦。
B.
一次上架多端部署。
C.
若多个模块依赖了不同版本的HAR,使用OHPM的overrides机制配置指定使用哪个版本的HAR,以减少包大小。
D.
避免用户首次下载应用耗时过长,及过多占用用户空间,不常用功能做成按需加载
如下ABC 3处手势,有机会执行的是哪几处?
@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(0xFFFFFF)
.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: 0xFFFFFF, startMargin: 20, endMargin: 20 }) // 每行之间的分界线
.edgeEffect(EdgeEffect.None) // 边缘效果设置为Spring
.height(1000)
.width('90%')
.id("inner")
}.width('100%')
}
.id("outer")
.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')
})
A .gesture(
TapGesture({ count: 2 })
.onAction((event: GestureEvent) => {
if (event) {
this.value = JSON.stringify(event.fingerList[0])
}
})
)
B .gesture(
PanGesture({PanDirection.Vertical})
.onActionUpdate((event: GestureEvent)=>{
console.log("zcb onActionUpdate event offsetY " + event.offsetY + " this.lastOffset " + this.lastOffset + " this.childRecognizer.getGestureState() " + this.childRecognizer.getState())
})
)
C .parallelGesture(
PanGesture({PanDirection.Vertical})
.onActionUpdate((event: GestureEvent)=>{
console.log("zcb onActionUpdate event offsetY " + event.offsetY + " this.lastOffset " + this.lastOffset + " this.childRecognizer.getGestureState() " + this.childRecognizer.getState())
})
)
}.width('100%').height('100%').backgroundColor(0xDCDCDC)
}
}
A.NA
B.C
C.B
D.A
下面关于混淆的描述正确的是
A.API 10及以上版本的Stage模型、编译模式为release时,默认开启代码混淆功能;默认的混淆功能仅会混淆函数参数和局部变量的名称。
B.代码混淆已经被集成了到SDK中,可以在DevEco Studio中方便地使用。
C.混淆支持ArkTS/TS/JS文件的混淆
D.针对工程源码的混淆可以降低工程被破解攻击的风险,缩短函数名、类名和属性名,减小应用的大小。
以下数据类型中,哪些是Sendable数据。
import { lang } from '@kit.ArkTS';
class C {}
interface I extends lang.ISendable {}
A.interface I
B.number
C.string
D.class C
下面关于混淆规则描述正确的是
A.-keep-global-name [,identifiers,.]:指定想保留的属性名
B.-keep-file-name [,identifiers,.]:指定要保留的文件/文件夹的名称
C.-keep-property-name [,identifiers,]:指定要保留的顶层作用域的名称
D.-print-namecache filepath: 将名称缓存保存到指定的文件路径。
下面关于动态import描述正确的是
A.动态import根据入参是否为常量字符串分为常量动态import和变量动态import两种
B.常量动态import也必须配置runtimeOnly选项
C.HAR模块间只有变量动态import时可以进行模块解耦
D.动态导入import()是个异步接口,调用后将返回一个promise
Code Linter针对ArkTS/TS代码进行最佳实践/编程规范方面的检查,最佳实践/编程规范方面的检查规则可以配置,针对codelinter的配置项一下哪些说法是正确的
A.ruleSet:配置检查使用的规则集,规则集支持一次导入多条规则。
B.ignore:配置无需检查的文件目录,其指定的目录或文件需使用相对路径格式,相对于code-linter.json5所在工程根目录,例如:build/**/*。
C.rules:可以基于ruleSet配置的规则集,新增额外规则项,但是无法修改ruleSet中规则默认配置
D.files:配置待检查的文件名单,如未指定目录,规则适用于所有文件,例如:[“**/*.ets”,”**/*.js”,”**/*.ts”]