教你一次考过鸿蒙应用开发:鸿蒙OS试题例题

一个复杂的项目,该项目不仅包含主入口模块(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 }

在moduleA(HAP类型)中有一个图片名为image.png,在moduleB(HAR类型)也存在一个图片名为image.png,而moduleA依赖于moduleB,那么在moduleA的编译产物hap包中,image.png存在情况是:

A.仅存在moduleA的image.png

B.仅存在moduleB的image.png

C.两者都存在

D.两者都不存在

如下哪些方式可实现图片动态播放?

A.

@Entry

@Component

struct ImageAnimatorExample {

@State iterations: number = 1

build() {

Column({ space: 10 }) {

ImageAnimator()

.images([

{

src: $r('app.media.img1')

},

{

src: $r('app.media.img2')

},

{

src: $r('app.media.img3')

},

{

src: $r('app.media.img4')

}

])

.duration(2000)

.fillMode(FillMode.None).iterations(this.iterations).width(340).height(240)

.margin({ top: 100 })

}.width('100%').height('100%')

}

}

B.

import {AnimationOptions, AnimatedDrawableDescriptor} from '@ohos.arkui.drawableDescriptor'

import image from '@ohos.multimedia.image'

@Entry

@Component

struct ImageExample {

pixelmaps: Array<PixelMap> = [];

options: AnimationOptions = {duration:2000, iterations:1};

@State animated: AnimatedDrawableDescriptor | undefined = undefined;

async aboutToAppear() {

this.pixelmaps = await this.getPixelMaps();

this.animated = new AnimatedDrawableDescriptor(this.pixelmaps, this.options);

}

build() {

Column() {

Row() {

Image(this.animated)

.width('500px').height('280px')

}.height('50%')

Row() {

Button('once').width(100).padding(5).onClick(() => {

this.options = {duration:2000, iterations:1};

this.animated = new AnimatedDrawableDescriptor(this.pixelmaps, this.options);

}).margin(5)

}

}.width('50%')

}

private async getPixmapFromMedia(resource: Resource) {

let unit8Array = await getContext(this)?.resourceManager?.getMediaContent({

bundleName: resource.bundleName,

moduleName: resource.moduleName,

id: resource.id

})

let imageSource = image.createImageSource(unit8Array.buffer.slice(0, unit8Array.buffer.byteLength))

let createPixelMap: image.PixelMap = await imageSource.createPixelMap({

desiredPixelFormat: image.PixelMapFormat.RGBA_8888

})

await imageSource.release()

return createPixelMap

}

private async getPixelMaps() {

Mypixelmaps.push(await this.getPixmapFromMedia($r('app.media.icon'))) //对应资源图片名后缀为png

return Mypixelmaps;

}

}

C.

import {AnimationOptions, AnimatedDrawableDescriptor} from '@ohos.arkui.drawableDescriptor'

import image from '@ohos.multimedia.image'

@Entry

@Component

struct ImageExample {

pixelmaps: Array<PixelMap> = [];

options: AnimationOptions = {duration:2000, iterations:1};

@State animated: AnimatedDrawableDescriptor | undefined = undefined;

async aboutToAppear() {

this.pixelmaps = await this.getPixelMaps();

this.animated = new AnimatedDrawableDescriptor(this.pixelmaps, this.options);

}

build() {

Column() {

Row() {

Image(this.animated)

.width('500px').height('280px')

}.height('50%')

Row() {

Button('once').width(100).padding(5).onClick(() => {

this.options = {duration:2000, iterations:1};

this.animated = new AnimatedDrawableDescriptor(this.pixelmaps, this.options);

}).margin(5)

}

}.width('50%')

}

private async getPixmapListFromMedia(resource: Resource) {

let unit8Array = await getContext(this)?.resourceManager?.getMediaContent({

bundleName: resource.bundleName,

moduleName: resource.moduleName,

id: resource.id

})

let imageSource = image.createImageSource(unit8Array.buffer.slice(0, unit8Array.buffer.byteLength))

let createPixelMap: Array<image.PixelMap> = await imageSource.createPixelMapList({

desiredPixelFormat: image.PixelMapFormat.RGBA_8888

})

await imageSource.release()

return createPixelMap

}

private async getPixelMaps() {

let Mypixelmaps:Array<PixelMap> = await this.getPixmapListFromMedia($r('app.media.icon'))//对应资源图片名后缀为gif

return Mypixelmaps;

}

}

D.

@Entry

@Component

struct ImageExample {

build() {

Column({ space: 10 }) {

Image($r('app.media.earth')) //对应资源图片名后缀为gif

.width(100)

.height(100)

}

}

}

当前动态import支持导入的模块类型有哪些?

A.动态import支持加载OHPM模块

B.动态import支持加载本地HAR模块

C.动态import支持加载远程HAR模块

D.动态import支持加载HSP模块

DevEco Studio提供HarmonyOS应用/服务的UI预览界面与源代码文件间的双向预览功能,支持ets文件与预览器界面的双向预览。关于双向预览,下列选项说法错误的是?

A.双向预览不支持通过组件的属性面板实时修改属性或样式。

B.选中组件树中的组件,则对应的代码块和UI界面也会高亮显示。

C.选中布局文件中的代码块,则在UI界面会高亮显示,组件树上的组件节点也会呈现被选中的状态。

D.选中预览器UI界面中的组件,则组件树上对应的组件将被选中,同时代码编辑器中的布局文件中对应的代码块高亮显示。

DevEco studio提供的便捷功能来提高开发效率。他了解到,通过一个特定的操作流程,可以直接依据父类的模板生成子类中需要重写的方法代码,而无需手动编写完整方法体,在DevEco studio中,如何正确使用0verride Methods功能来快速生成子类需要重写的方法代码

A.

在项目结构视图中找到目标子类,双击打开后直接在代码编辑区输入重写方法的签名,DevEcOStudio将自动完成剩余代码。

)B.

通过菜单栏File>Settings,配置Override Methods快捷方式,之后在代码中仅需选中父类方法名即可自动在子类中生成重写代码,

C.将光标定位到子类的定义处,按下Ctrl+0(或右键单击选择Generate.>Override Methods),在弹出的对话框中选择要重写的方法,点击OK完成生成。

D.将光标放置于任何代码行,按下Ctrl+B,然后在弹出菜单中选择Override Methods,之后勾选需要重写的方法并确认。

以下关于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进行开发。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

星宇工作室

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

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

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

打赏作者

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

抵扣说明:

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

余额充值