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

一 面试题汇总

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

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

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

参数的传递可以通过Navigator或Router

1-Navigator示例

1
2
3
Navigator({ target: Constants.WebPage_Path, type: NavigationType.Push }) {
Image(banner.imagePath)
}.params({ path: banner.url, title: banner.title } as NavigatorModel)

说明:.params后面的大括号内,传递自定义数据

2-router示例

1
2
3
4
5
6
7
8
.onClick(() => {
router.pushUrl({
url: 'pages/Second',
params: {
name: 'Index页面传递'
}
}, router.RouterMode.Single)
})

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

组件化开发是一种软件架构设计模式,它将一个大型应用划分为多个独立的组件,每个组件都可以独立开发、测试和维护。组件可以是一个独立的模块、库或功能单元,它们通过定义清晰的接口和协议进行通信。组件化开发的目标是提高代码的可维护性、可扩展性和复用性。

组件化开发的原理:

  1. 模块划分: 将应用划分为多个独立的模块或组件。每个模块负责特定的业务功能,有清晰的边界和接口。
  2. 解耦: 组件之间通过接口进行通信,实现松散的耦合。这意味着一个组件的修改不应该影响其他组件,可以独立开发、测试和部署。
  3. 通信机制: 定义清晰的通信机制,使得组件之间可以相互调用和传递数据。这通常包括事件总线、消息队列、观察者模式等。
  4. 独立开发和测试: 每个组件可以独立开发和测试,开发者只需关注当前模块的业务逻辑。这样可以提高开发效率,同时降低引入新功能或修改的风险。
  5. 统一规范: 定义统一的规范和标准,确保所有组件都遵循相同的设计原则和编码规范。这有助于保持整体代码质量和一致性。

组件化开发的实现方案:

  1. 组件路由: 使用组件路由框架实现不同组件之间的跳转和通信。组件路由可以帮助管理组件之间的依赖关系、动态加载组件等。
  2. 组件通信: 使用事件总线、消息队列等机制进行组件间的通信。这样组件可以通过发布和订阅事件的方式进行解耦。
  3. 组件生命周期管理: 在组件化开发中,可能需要管理不同组件的生命周期。可以使用全局的 Application 类或组件管理器来实现生命周期管理。
  4. 资源隔离: 确保每个组件都有独立的资源空间,避免资源冲突。可以使用资源命名规范、资源后缀等方式进行隔离。
  5. 动态加载: 实现组件的动态加载和卸载,可以提高应用的灵活性和可扩展性。这通常需要使用类加载器等机制。
  6. 插件化: 在一些场景下,组件化开发可能涉及到插件化。插件化可以使得组件可以在运行时动态加载和卸载,进一步提高应用的可扩展性。

鸿蒙OS在应用开发中也提供了组件化的支持,使用 HarmonyOS 中的分布式框架和能力模型可以实现组件之间的高效通信和解耦。开发者可以根据具体的场景和需求选择适合的组件化实现方案。

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

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

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

request接口开发步骤

  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中了解过同步机制的吗?

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

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

  1. 互斥锁(Mutex): 互斥锁用于保护临界区,确保同时只有一个线程可以访问共享资源。在鸿蒙OS中,可以使用 ohos::AppExecFwk::Mutex 类实现互斥锁。
  2. 条件变量(Condition Variable): 条件变量用于在线程间进行通信,其中一个线程等待某个条件满足,而另一个线程负责满足条件。在鸿蒙OS中,可以使用 ohos::AppExecFwk::Condition 类实现条件变量。
  3. 信号量(Semaphore): 信号量用于控制多个线程对共享资源的访问。在鸿蒙OS中,可以使用 ohos::AppExecFwk::Semaphore 类实现信号量。

这些同步机制可以帮助开发者在多线程编程中确保数据的安全性,避免竞态条件和死锁等问题。在使用同步机制时,需要注意避免死锁和饥饿等问题,确保同步机制的正确使用。同时,鸿蒙OS还提供了其他工具和接口,如原子操作、事件等,以支持多线程编程中的同步与通信。

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

UIAbility生命周期

鸿蒙开发中,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切换到前台时,开发者可以恢复这些任务,以保证应用的流畅性。同时,开发者还需要注意在适当的时机释放资源,避免内存泄漏等问题。

Ability分类

在鸿蒙OS中,Ability是应用程序的基本组成单元,负责处理用户界面和应用逻辑。根据不同的用途和功能,Abilities可以分为三大类:Page、Service和Data。

  1. Page(页面):
    • Page 是用户界面的展示单元,通常用于展示应用的主要交互界面。
    • Page 主要包括 AbilityComponent 两种类型,其中 Ability 类型的 Page 可以独立运行,而 Component 类型的 Page 需要嵌套在其他 Page 内。
    • Page 可以响应用户的交互事件,如点击、滑动等,并进行相应的界面更新和业务逻辑处理。
  2. Service(服务):
    • Service 是后台运行的组件,用于执行长期运行的任务或处理一些不需要用户交互的业务逻辑。
    • Service 可以在后台运行,不直接与用户进行交互,但可以被其他组件调用,用于执行一些异步任务、定时任务等。
    • Service 可以与 Page 组件进行通信,通过 Binder 机制进行数据传递。
  3. Data(数据):
    • Data 类型的 Ability 主要用于处理数据,不涉及用户界面展示,常用于数据存储、数据处理等场景。
    • Data Ability 通常包括 DataAbilityDataObserver 两种类型。DataAbility 用于提供数据访问接口,DataObserver 用于监听数据变化。
    • Data Ability 可以通过 URI 对数据进行操作,包括查询、插入、更新和删除等。

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

三 参考

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