以下关于LocalStorage的说法正确有哪些?
A.被@Component装饰的组件最多可以访问一个LocalStorage实例和AppStorage,未被@Entry装饰的组件不可被独立分配LocalStorage实例,只能接受父组件的LocalStorage实例。
B.应用程序可以创建多个LocalStorage实例,LocalStorage实例可以在页面内共享,也可以通过GetShared接口,获取在UIAbility里创建的GetShared,实现跨页面、UIAbility内共享。
C. LocalStorage中的所有属性都是不可变的。
D.组件树的根节点,即被@Entry装饰的@Component,可以被分配一个LocalStorage实例,此组件的所有子组件实例将自动获得对该LocalStorage实例的访问权限。
项目组开发的HarmonyOS应用工程,为了保护hap代码资产,如何在DevEco Studio中启用混淆的功能,并设置相应的混淆规则
A.
release模式下将buildOption/arkOptions/ruleOptions/enable设置为true
B.
在混淆规则配置文件obfuscation-rules.txt中进行混淆规则的配置
C.//这个配置主要用于har包 暂时先不选
在混淆规则配置文件consumer-rules.txt中进行混淆规则的配置
D.
release模式下将buildOption/arkOptions/ruleOptions/enable设置为false
以下哪些是可以在Navigation中使用pushPathByName接口传递的params的参数类型
A.arrayBuffer
B.map<string,string>
C.string
D.record<string,string>
23以下哪些实现方式可实现文本字号20的效果
A.
// xxx.ets
@Entry
@Component
struct Index {
build() {
Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Start, justifyContent: FlexAlign.SpaceBetween }) {
Text('This is the text with the height adaptive policy set')
.width('80%')
.height(90)
.minFontSize(20)
}.width('100%').height(250).padding({ left: 35, right: 35, top: 35 })
}
}
B.
@Entry
@Component
struct SpanExample {
build() {
Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Start, justifyContent: FlexAlign.SpaceBetween }) {
Text() {
Span('span letter spacing')
.letterSpacing(3)
.fontSize(20)
}.fontSize(30)
}.width('100%').height(250).padding({ left: 35, right: 35, top: 35 })
}
}
C.
import { LengthMetrics, LengthUnit } from '@ohos.arkui.node'
@Entry
@Component
struct Index {
fontStyleAttr: TextStyle = new TextStyle({fontSize:LengthMetrics.vp(20)});
mutableStyledString: MutableStyledString = new MutableStyledString("hello", [{
start: 0,
length: 5,
styledKey: StyledStringKey.FONT,
styledValue: this.fontStyleAttr
}]);
controller: TextController = new TextController();
async onPageShow() {
this.controller.setStyledString(this.mutableStyledString)
}
build() {
Column() {
// 显示属性字符串
Text(undefined, { controller: this.controller })
}.width('100%')
}
}
D.
// xxx.ets
@Entry
@Component
struct Index {
build() {
Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Start, justifyContent: FlexAlign.SpaceBetween }) {
// 文本水平方向对齐方式设置
// 单行文本
Text('TextAlign set to Center.')
.textAlign(TextAlign.Center)
.fontSize(20)
.border({ width: 1 })
.padding(10)
.width('100%')
}.height(600).width(350).padding({ left: 35, right: 35, top: 35 })
}
}
List组件onScrollIndex事件触发时机是
A.List组件列表滚动时每帧触发
B.List组件首次加载完成时触发
C.List组件显示区域内第一个子组件或最后一个子组件或中间位置子组件索引值变化时发
D.List组件滚动停止时触发
下面代码符合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 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;
}
D.
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;
}
以下代码片段哪几处违反了ArkTs语法规范
class Point{
public x:number
public y:number
constructor(x:number,y:number) {
this.x=x
this.y=y
}
}
let p=new Point(1.0,1.0)
delete p.x;
p.z=2.0;
p.x='hello';
Ap.x='hello';
Bdelete p.x;
Cp.z=2.0;
D.let p=new Point(1.0,1.0)
ArkTS是鸿蒙生态的应用开发语言。以下哪些选项是ArkTS的设计理念。
A.ArkTS保留了TS大部分的语法特性,帮助开发者更容易上手ArkTS。
B.ArkTS不支持null-satety特性。
C.通过规范强化静态检查和分析,减少运行时的类型检查,从而降低了运行时负载,提升执行性能。
D.通过规范强化静态检查和分析,使得许多错误在编译时可以被检测出来,降低代码运行错误的风险。
使用ArkUI组件复用之后,还是没有显著提升列表滑动场景的性能,属于组件复用未生效可能的原因有?
A.页面嵌套了过多自定义组件
B.没有在aboutToReuse更新关联的状态变量数据,
C.复用的自定义组件中使用if等条件渲染语句导致结构不相同,未使用reuseld标记。
D.在aboutToReuse回调函数中更新了冗余的状态变量
在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”]
依次点击A、B、C、D四个按钮,其中不会触发UI刷新的是:
@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.B
B.D
C.A
D.C