鸿蒙OS高级应用开发试题

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静态检查工具

  • 13
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星宇工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值