鸿蒙面试题——面试题整理7

一 面试题汇总

  • 在Router的传递数据的过程中,如何封装自定义的对象传递到另外一个页面?
  • 组件化开发的原理和实现的方案?
  • 如何在鸿蒙中封装一套网络请求框架,如何处理Http请求?
  • 鸿蒙OS中了解过同步机制的吗?
  • UIAbility组件生命周期分析,鸿蒙中Ability的分类?

二 面试题解答(仅供参考)

2.1 在Router的传递数据的过程中,如何封装自定义的对象传递到另外一个页面?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
在鸿蒙(HarmonyOS)开发中,如果要通过Router传递自定义对象到另一个页面,
一般采用 JSON 序列化 的方式来处理。
以下是简单步骤:

1.定义自定义对象(model):
创建数据模型,提供 toString() 方法进行JSON序列化,以及fromString()方法进行反序列化。

2.传递数据:
使用router.pushUrl(),在params中传递序列化后的JSON字符串。

3.接收数据:
在目标页面用getParams()获取传递的参数,并反序列化成对象使用

总结:
1.使用 JSON.stringify() 序列化对象为字符串,并通过router.pushUrl() 传递。
2.在目标页面使用getParams()获取参数,并用JSON.parse()或自定义的fromString()方法反序列化为对象。

2.2 组件化开发的原理和实现的方案?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
鸿蒙组件化开发的核心思想是将一个大型应用拆分成多个独立的模块(组件),
每个模块都可以独立开发、测试、编译和部署,最终像积木一样组装成完整的应用。
这带来了许多好处,例如提高代码复用性、降低代码耦合度、加快编译速度、便于团队协作等。

1.原理:
鸿蒙组件化开发基于以下几个核心概念:
*模块化: 将应用分解成多个独立的模块,每个模块负责特定的功能。
*独立性: 每个模块可以独立开发、测试和编译,不依赖于其他模块。
*接口化: 模块之间通过接口进行通信,降低耦合度。
*组装化: 最终将各个模块组装成完整的应用。

2.实现方案:
*Feature Module(特性模块):
这是最常用的组件化方式。
每个特性模块代表应用的一个独立功能,可以独立编译成HAP包或合并到主模块中。
特性模块之间通过定义接口进行通信,

*Library Module(库模块):
库模块主要用于提供公共的代码库、资源文件等,供其他模块使用。
库模块不能独立运行,只能被其他模块依赖。

*HPM包管理: 鸿蒙的包管理工具HPM(Harmony Package Manager)支持组件化的构建和发布。

2.3 如何在鸿蒙中封装一套网络请求框架,如何处理Http请求?

鸿蒙的网络请求分为:Http请求、WebSocket连接、Socket连接,本文以Http数据请求为例

1
2
HTTP数据请求功能主要由http模块提供。
使用该功能需要申请ohos.permission.INTERNET权限。

request接口开发步骤

1
2
3
4
5
6
7
1. 从@ohos.net.http.d.ts中导入http命名空间。
2. 调用createHttp()方法,创建一个HttpRequest对象。
3. 调用该对象的on()方法,订阅http响应头事件,此接口会比request请求先返回。可以根据业务需要订阅此消息。
4. 调用该对象的request()方法,传入http请求的url地址和可选参数,发起网络请求。
5. 按照实际业务需要,解析返回结果。
6. 调用该对象的off()方法,取消订阅http响应头事件。
7. 当该请求使用完毕时,调用destroy()方法主动销毁。

2.4 鸿蒙OS中了解过同步机制的吗?

1
2
3
4
5
6
7
8
鸿蒙OS中同步机制主要涉及到多线程编程中的同步与互斥。
鸿蒙OS提供了一些同步机制来确保多线程之间的协调和数据安全。

以下是鸿蒙OS中常见的同步机制:

1.互斥锁(Mutex): 保证同一时间只有一个线程访问共享资源。
2.信号量(Semaphore): 控制访问资源的线程数量,适合限流。
3.条件变量(Condition): 实现线程间的等待与通知机制,常用在生产者-消费者模型。

2.5 UIAbility组件生命周期分析,鸿蒙中Ability的分类?

2.5.1 UIAbility生命周期

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
鸿蒙开发中,UIAbility的生命周期是指UIAbility组件从创建到销毁的整个过程。
这个过程包括一系列的状态转换和事件回调,开
发者可以根据这些状态和回调来管理UIAbility的生命周期,从而实现更好的应用性能和用户体验。

UIAbility的生命周期主要包括以下几个阶段:

1.Create(创建):
当UIAbility被创建时,系统会调用onCreate函数。
在这个阶段,开发者可以进行一些初始化操作,比如设置UI界面、加载数据等。
需要注意的是,在这个阶段,UIAbility还没有被展示给用户,因此不能进行与用户交互的操作。

2.onWindowStageCreate(窗口创建) :
在UIAbility创建之后,系统会调用onWindowStageCreate函数,创建与UIAbility相关联的窗口。
在这个阶段,开发者可以设置窗口的属性,比如窗口的大小、位置、背景等。

3.Foreground(前台展示) :
当UIAbility被切换到前台时,系统会调用onForeground函数。
在这个阶段,UIAbility的窗口会被展示出来,用户可以与之进行交互。
开发者可以在这个阶段更新UI界面,响应用户的操作等。

4.Background(后台隐藏) :
当UIAbility被切换到后台时,系统会调用onBackground函数。
在这个阶段,UIAbility的窗口会被隐藏,用户无法与之进行交互。
开发者可以在这个阶段进行一些后台任务的处理,比如保存数据、下载文件等。

5.onWindowStageDestroy(窗口销毁) :
在UIAbility销毁之前,系统会调用onWindowStageDestroy函数,销毁与UIAbility相关联的窗口。
在这个阶段,开发者可以释放与窗口相关的资源,比如内存、文件句柄等。

6.Destroy(销毁) :
最后,当UIAbility被销毁时,系统会调用onDestroy函数。
在这个阶段,开发者需要释放所有与UIAbility相关的资源,比如UI界面、数据等。
一旦UIAbility被销毁,就不能再被使用。

通过管理UIAbility的生命周期,开发者可以实现更好的应用性能和用户体验。
比如,在UIAbility切换到后台时,开发者可以暂停一些不必要的任务,以节省系统资源;
在UIAbility切换到前台时,开发者可以恢复这些任务,以保证应用的流畅性。
同时,开发者还需要注意在适当的时机释放资源,避免内存泄漏等问题。

2.5.2 Ability分类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
在鸿蒙OS中,Ability是应用程序的基本组成单元,负责处理用户界面和应用逻辑。
根据不同的用途和功能,Abilities可以分为三大类:Page、Service和Data。

1.Page(页面):
- Page是用户界面的展示单元,通常用于展示应用的主要交互界面。
- Page 主要包括Ability和Component两种类型,
其中Ability类型的Page可以独立运行,而Component类型的Page需要嵌套在其他Page内。

- Page 可以响应用户的交互事件,如点击、滑动等,并进行相应的界面更新和业务逻辑处理。

2.Service(服务):
- Service是后台运行的组件,用于执行长期运行的任务或处理一些不需要用户交互的业务逻辑。
- Service可以在后台运行,不直接与用户进行交互,但可以被其他组件调用,用于执行一些异步任务、定时任务等。
- Service可以与 Page 组件进行通信,通过Binder机制进行数据传递。

3.Data(数据):
- Data类型的Ability主要用于处理数据,不涉及用户界面展示,常用于数据存储、数据处理等场景。
- Data Ability 通常包括DataAbility和DataObserver两种类型。
DataAbility用于提供数据访问接口,DataObserver`用于监听数据变化。
- Data Ability 可以通过 URI 对数据进行操作,包括查询、插入、更新和删除等。

这三种 Ability 类型可以根据应用的需求进行组合使用,形成完整的应用程序。
在鸿蒙OS的应用开发中,开发者可以根据业务场景选择合适的 Ability 类型,以构建灵活、高效的应用。

三 参考

  • 掘金—首发:鸿蒙面试真题分享