64.用户购买商品后,你需要及时发放相关权益。但实际应用场景中,若出现异常将导致应用无法知道用户实际是否支付成功,从而无法及时发放权益,即出现掉单情况。为了确保权益发放,你需要在以下哪些场景检查用户是否存在已购未发货的商品:
A. 应用启动时
B.createPurchase请求返回1001860051-由于已经拥有该商品,购买失败时
C.createPurchase请求返回1001860001-内部错误时
D.finishPurchase请求返回1001860052-由于未拥有该商品,发货失败时
65.在ArkTS中,以下代码片段正确的是
A.
function fn(x: string | number): void {
console.log('value: ' + x);
}
type funcType = (ns: string | number) => string;
let func: funcType = fn;
B.
function fn(x: string): string {
return 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;
66.为了加快构建速度,提高开发效率,可以如何调整hvigor配置,从而优化构建速度
A.启用hvigor的incremental,在增量场景下检查任务是否可以跳过
B.启动hvigor的daemon模式,在增量场景下复用缓存
C.启用hvigor的parallel,在增量场景下进行并行编译处理
D.启用hvigor的typeCheck,在增量场景下进行对hvigorfile.ts进行类型检查
使用如下的代码去启动一个ability时,哪种skills定义的组件能够被匹配到:
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",
"type" : "text/*"
}
]
}
]
B.
"skills": [
{
"uris":[
{
"scheme": "https",
"host": "www.test.com",
"type" : "text/plain"
}
]
}
]
C.
"skills": [
{
"uris":[
{
"scheme": "https",
"host": "www.test.com",
"pathStartWith" : "query/books",
"type" : "text/*"
}
]
}
]
D.
"skills": [
{
"uris":[
{
"scheme": "https",
"host": "www.test.com",
"pathStartWith" : "query/books",
"type" : "text/plain"
}
]
}
]
一个应用通常会包含多种功能,将不同的功能特性按模块来划分和管理是一种良好的设计方式。在开发过程中,我们可以将每个功能模块作为一个独立的Module进行开发,下面关于Module的说法正确的是
A.Ability类型的Module,用于实现应用的功能和特性,有两种类型,分别为entry和feature。
B.entry类型的Module,是应用的主模块,一个应用只能包含唯一一个entry类型的HAP。
C.feature类型的Module,应用的动态特性模块,一个应用中可以包含一个或多个feature类型的模块,也可以不包
D.Library类型的Module,用于实现代码和资源的共享,有两种类型,分别为Static Library和Shared Library两种类型。
当使用状态变量进行ArkUI组件间数据通信的时候,如果两个组件间没有直接的套关系(非父子和祖孙关系组件),但是他们又属于同一页面,最佳的装饰器应该选用哪个?
A. LocalStorage
B. AppStorage
C.@State+@Link
D.@Provide+@Consume
hiAppEvent提供的Watcher接口,()属性不配置,会导致编译报错,产生"ArkTSCompiler Error".
A. onReceive
B. triggerCondition
C. onTrigger
D.name
在ArkTs中以下哪些属性的声明是错误的
class c {}
let value1: number = null;
let value2: string lnull = null;
let value3:string undefined = null;
let value4:c= null
A. value4
B. value1
c. value3
D. value2
应用开发中使用的各类资源文件,需要放入特定子目录中存储管理,以下关于资源说法错误的是
A. stage模型多工程情况下,共有的资源文件放到AppScope下的resources目录。
B.resfile目录,应用安装后,resfile资源会被解压到应用沙箱路径,通过Context属性resourceDir获取
到resfile资源目录后,可通过文件路径访问。
C.rawfile目录,支持创建多层子目录,子目录名称可以自定义,文件夹内可以自由放置各类资源文件。目录中的资源文件会被编译成二进制文件,并赋予资源文件ID。
D.base目录是默认存在的目录,二级子目录element用于存放字符串、颜色、布尔值等基础元素,media、profile存放媒体、动画、布局等资源文件。
关于代码门禁理解正确的是
A.代码门禁是一项代码质量保障措施。目的是要求开发人员提交的代码必须满足一些要求才能合入代码仓库。门禁必须强制要求包括编译通过、单元测试覆盖率达标、代码静态检查无告警、全量功能测试用例、DFX专项测试都通过。
B.门禁级检查的范围和版本级检查的范围保持一致,尽可能多的在MR门禁阶段就拦截防护住问题,保障问题可以及时清理掉。
C. 构建是在代码合并后检查已提交代码的功能完整性,这种方法会导致代码合并到master后编译失败导致没有可用版本部署。通过提高滚动构建的频度就可以代替代码门禁,保障代码主干及时发现并解决问题。
D.代码门禁则是在代码合并之前就验证代码来保护主千分支的完整性。通过这种方式,可以保护主分支代码避免因合码导致的构建中断,以确保 master 分支代码始终是可部署的,并且不会因明显的错误而影响到你正在并行开发的同事工作。
一个应用项目工程中,模块依赖关系如下图所示,那么在最终编译结果.app文件中,存在的编译产物是:
A.A.hap + B.har + D.hsp
B.A.hap + B.har + C.har + D.hsp
C.A.hap + D.hsp + C.har
D.A.hap + D.hsp
应用程序开发调试过程中,经常需要安装新应用进行调测,下面安装应用操作错误的是
A. bm install -p ohosapp.hap
B. bm install-p /data/app/
C. bm install -p ohosapp.hap -r
D.hdc install-p ohosapp.hap
我们需要避免在逐帧调用的接口中执行耗时操作,下面哪个选项不属于上述的接口?
A. onTouch
B. aboutToReuse
C. onScroll
D.onAreaChange
一个应用有2个UIAbility组件,其module.json中abilities标签的配置如下方代码。
在手机设备上,执行如下操作后:
1.启动UIAbility1,然后back键返回销毁UIAbility1;
2.启动UIAbility2, 然后back键返回销毁UIAbility2;
3.启动UIAbility2, 然后back键返回销毁UIAbility2;
进入多任务列表,能看看到该应用的几个任务视图:
"abilities": [
{
"name": "UIAbility1",
"srcEntry": "./ets/entryability/Ability1.ets",
"description": "$string:EntryAbility_desc",
"icon": "$media:icon",
"label": "$string:Ability1_label",
"startWindowIcon": "$media:icon",
"startWindowBackground": "$color:start_window_background",
"exported": true,
"launchType": multiton
},
{
"name": "UIAbility2",
"srcEntry": "./ets/entryability/Ability2.ets",
"description": "$string:Ability2_desc",
"icon": "$media:icon",
"label": "$string:Ability2_label",
"startWindowIcon": "$media:icon",
"startWindowBackground": "$color:start_window_background",
"exported": true,
"launchType": singleton,
"removeMissionAfterTerminate":true
}
]
A.3个
B.0个
C.1个
D.2个
以下哪些赋值语句在ArkTS中是合法。
class C {}
let value1: number = null;
let value2: string | null = null;
let value3: string | undefined = null;
let value4: C = null
A.value2
B.value1
C.value4
D.value3
如何实现类似下图布局
A.
@Entry
@Component
struct Demo {
// 忽略其他辅助代码
dataSource: ItemDataSource = new ItemDataSource(100)
itemHeightArray: number[] = []
colors: number[] = [0xFFC0CB, 0xDA70D6, 0x6B8E23, 0x6A5ACD, 0x00FFFF, 0x00FF7F]
scroller: Scroller = new Scroller()
aboutToAppear() {
this.getItemSizeArray()
}
build() {
Scroll() {
Column() {
Grid() {
GridItem() {
Text('GoodsTypeList')
}
.backgroundColor(this.colors[0])
GridItem() {
Text('AppletService')
}
.backgroundColor(this.colors[1])
GridItem() {
Text('ReloadData')
}
.backgroundColor(this.colors[2])
}
.rowsGap(10)
.columnsTemplate('1fr')
.rowsTemplate('1fr 1fr 1fr')
.width('100%')
.height(100)
.margin({
top: 10,
left: 5,
bottom: 10,
right: 5
})
Grid() {
LazyForEach(this.datasource, (item: number) => {
GridItem() {
// 使用可复用自定义组件
ReusableItem({ item: item })
}
.width('100%')
.height(this.itemHeightArray[item % 100])
.backgroundColor(this.colors[item % 5])
}, (item: number) => '' + item + this.itemHeightArray[item % 100])
}
.columnsTemplate("1fr 1fr")
.columnsGap(10)
.rowsGap(5)
.width('100%')
.nestedScroll({
scrollForward: NestedScrollMode.PARENT_FIRST,
scrollBackward: NestedScrollMode.SELF_FIRST
})
}
}
.scrollBar(BarState.Off)
.edgeEffect(EdgeEffect.None)
}
}
B.
@Entry
@Component
struct Demo {
// 忽略其他辅助代码
dataSource: ItemDataSource = new ItemDataSource(100)
itemHeightArray: number[] = []
colors: number[] = [0xFFC0CB, 0xDA70D6, 0x6B8E23, 0x6A5ACD, 0x00FFFF, 0x00FF7F]
scroller: Scroller = new Scroller()
@State sections: WaterFlowSections = new WaterFlowSections()
sectionMargin: Margin = { top: 10, left: 5, bottom: 10, right: 5 }
oneColumnSection: SectionOptions = {
itemsCount: 3,
crossCount: 1,
rowsGap: 10,
margin: this.sectionMargin,
onGetItemMainSizeByIndex: (index: number) => {
return this.itemHeightArray[index % 100]
}
}
lastSection: SectionOptions = {
itemsCount: 97,
crossCount: 2,
margin: this.sectionMargin,
onGetItemMainSizeByIndex: (index: number) => {
return this.itemHeightArray[index % 100]
}
}
aboutToAppear() {
this.setItemSizeArray()
// 初始化瀑布流分组信息
let sectionOptions: SectionOptions[] = []
sectionOptions.push(this.oneColumnSection)
sectionOptions.push(this.lastSection)
this.sections.splice(0, 0, sectionOptions)
}
build() {
WaterFlow({ scroller: this.scroller, sections: this.sections }) {
LazyForEach(this.dataSource, (item: number) => {
FlowItem() {
ReusableFlowItem({ item: item })
}
.width('100%')
.backgroundColor(this.colors[item % 5])
}, (item: string) => item)
}
.columnsGap(10)
.rowsGap(5)
.backgroundColor(0xFAEEE0)
.width('100%')
.height('100%')
}
}
C.
@Entry
@Component
struct Demo {
// 忽略其他辅助代码
dataSource: ItemDataSource = new ItemDataSource(100)
itemHeightArray: number[] = []
colors: number[] = [0xFFC0CB, 0xDA70D6, 0x6B8E23, 0x6A5ACD, 0x00FFFF, 0x00FF7F]
scroller: Scroller = new Scroller()
aboutToAppear() {
this.getItemSizeArray()
}
build() {
Column() {
List({ scroller: this.scroller, space: 10 }) {
ListItem() {
Grid() {
GridItem() {
Text('GoodsTypeList')
}.backgroundColor(this.colors[0])
GridItem() {
Text('AppletService')
}.backgroundColor(this.colors[1])
GridItem() {
Text('ReloadData')
}.backgroundColor(this.colors[2])
}
.rowsGap(10)
.columnsTemplate('1fr')
.rowsTemplate('1fr 1fr 1fr')
.width('100%')
.height(100)
}
ListItem() {
WaterFlow() {
LazyForEach(this.datasource, (item: number, index: number) => {
FlowItem() {
// 使用可复用自定义组件
ReusableItem({ item: item + index })
}
.width('100%')
.height(this.itemHeightArray[item % 100])
.backgroundColor(this.colors[item % 5])
}, (item: number) => '' + item + this.itemHeightArray[item % 100])
}
.id('waterflow')
.columnsTemplate("1fr 1fr")
.columnsGap(10)
.rowsGap(5)
.width('100%')
.height('100%')
.nestedScroll({
scrollForward: NestedScrollMode.PARENT_FIRST,
scrollBackward: NestedScrollMode.SELF_FIRST
})
}
}
.scrollBar(BarState.Off)
.edgeEffect(EdgeEffect.None)
}
.width('100%')
.padding({ left: 10, right: 10 })
}
}
关于静态检查描述错误的是:
A.静态检查 可以检测代码中的语法错误和潜在的逻辑错误,也支持检测代码在运行时现的错误,因此静态检查可以替代动态测试。
B.静态检查 是指使用静态代码分析工具对软件的“静态"(不运行的)代码进行分析的一种方法,找出代码中潜在的漏洞。静态代码分析器检查源代码,找出特定的漏洞,并检查代码是否符合各种编码标准。
C.静态分析工 具也在不断改进和升级。使用高级的静态分析工具可以提高代码检测的准确性和效率。例如,一些静态分析工具可以检测代码中的内存泄漏、死锁问题,从而提高代码的质量和可靠性。
D. HarmonyOS应用可以采用ARKTS静态检查工具
一个复杂的项目,该项目不仅包含主入口模块(Entry Module), 还有多个特性的功能模块
(Feature Modules/HSP), 并且这些模块间存在着相互调用关系。为了确保在调试过程中能够完整地测试所有交互逻辑,需要将涉及到的所有模块的HAP包都部署到目标设备上。请从以下选项中选择正确的操作步骤来配置DevEco Studio, 以便一次性部署和调试项目中的多个模块
A.无需特殊配置, DevEco Studio会自动检测到项目中的所有模块依赖,并在每次调试运行时自动部署所有相关HAP包。
B.直接 点击运行按钮,DevEco Studio会弹出对话框询问需要部署哪些模块,从中选择需要的模块后开始调试。
C. 进入“Run> Edit Configurations'菜单,
在“Deploy Multi Hap"选项卡下,勾选“DeployMulti Hap Packages",随后在列表中选择需要部署的模块。
D.在项目结构界面手动个选择每个模块,单独编译并逐一将生成的HAP包通过HDC命令推送到设备上
以下关于应用架构技术选型说法不正确的是()
A. 对于初始版本的应用,功能比较简单,可以考虑采用单HAP加上多个HAR工程构建代码工程。
B.随着业务的发展,应用功能会越来越多,某些功能可以做成动态加载,动态加载的模块采用HAR工程来构建,方便复用和共享。
C.一些应用的扩展能力,比如备份、服务卡片,可以采用ExtensionAbility做成单独的feature HAP包独立分发。
D.元服务和应用可以共用一个代码工程,采用多目标产物构建方式,构建出应用和元服务两个产物,用于上架。
应用发生崩溃,()接口可以获取到崩溃时调用栈
A. hiLog
B. hiTraceMeter
C.hiDebug
D. hiAppEvent
现有一个宽高分别为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: 81, offsetY: -89, surfaceWidth: 150, surfaceHeight: 500 }
B. f offsetX: 75, offsetY: -100, surfaceWidth: 150, surfaceHeight: 500 }
c.{ offsetX: 81, offsetY: -89, surfaceWidth: 200, surfaceHeight: 0 }
D. { offsetX: -20, offsetY: 50, surfaceWidth: 200, surfaceHeight: 500 }