鸿蒙面试题——面试题整理7
一 面试题汇总
- 在Router的传递数据的过程中,如何封装自定义的对象传递到另外一个页面?
- 组件化开发的原理和实现的方案?
- 如何在鸿蒙中封装一套网络请求框架,如何处理Http请求?
- 鸿蒙OS中了解过同步机制的吗?
- UIAbility组件生命周期分析,鸿蒙中Ability的分类?
二 面试题解答(仅供参考)
2.1 在Router的传递数据的过程中,如何封装自定义的对象传递到另外一个页面?
参数的传递可以通过Navigator或Router
1-Navigator示例
1 | Navigator({ target: Constants.WebPage_Path, type: NavigationType.Push }) { |
说明:.params后面的大括号内,传递自定义数据
2-router示例
1 | .onClick(() => { |
2.2 组件化开发的原理和实现的方案?
组件化开发是一种软件架构设计模式,它将一个大型应用划分为多个独立的组件,每个组件都可以独立开发、测试和维护。组件可以是一个独立的模块、库或功能单元,它们通过定义清晰的接口和协议进行通信。组件化开发的目标是提高代码的可维护性、可扩展性和复用性。
组件化开发的原理:
- 模块划分: 将应用划分为多个独立的模块或组件。每个模块负责特定的业务功能,有清晰的边界和接口。
- 解耦: 组件之间通过接口进行通信,实现松散的耦合。这意味着一个组件的修改不应该影响其他组件,可以独立开发、测试和部署。
- 通信机制: 定义清晰的通信机制,使得组件之间可以相互调用和传递数据。这通常包括事件总线、消息队列、观察者模式等。
- 独立开发和测试: 每个组件可以独立开发和测试,开发者只需关注当前模块的业务逻辑。这样可以提高开发效率,同时降低引入新功能或修改的风险。
- 统一规范: 定义统一的规范和标准,确保所有组件都遵循相同的设计原则和编码规范。这有助于保持整体代码质量和一致性。
组件化开发的实现方案:
- 组件路由: 使用组件路由框架实现不同组件之间的跳转和通信。组件路由可以帮助管理组件之间的依赖关系、动态加载组件等。
- 组件通信: 使用事件总线、消息队列等机制进行组件间的通信。这样组件可以通过发布和订阅事件的方式进行解耦。
- 组件生命周期管理: 在组件化开发中,可能需要管理不同组件的生命周期。可以使用全局的 Application 类或组件管理器来实现生命周期管理。
- 资源隔离: 确保每个组件都有独立的资源空间,避免资源冲突。可以使用资源命名规范、资源后缀等方式进行隔离。
- 动态加载: 实现组件的动态加载和卸载,可以提高应用的灵活性和可扩展性。这通常需要使用类加载器等机制。
- 插件化: 在一些场景下,组件化开发可能涉及到插件化。插件化可以使得组件可以在运行时动态加载和卸载,进一步提高应用的可扩展性。
鸿蒙OS在应用开发中也提供了组件化的支持,使用 HarmonyOS 中的分布式框架和能力模型可以实现组件之间的高效通信和解耦。开发者可以根据具体的场景和需求选择适合的组件化实现方案。
2.3 如何在鸿蒙中封装一套网络请求框架,如何处理Http请求?
鸿蒙的网络请求分为:Http请求、WebSocket连接、Socket连接,本文以Http数据请求为例
1 | HTTP数据请求功能主要由http模块提供。 |
request接口开发步骤
- 从@ohos.net.http.d.ts中导入http命名空间。
- 调用createHttp()方法,创建一个HttpRequest对象。
- 调用该对象的on()方法,订阅http响应头事件,此接口会比request请求先返回。可以根据业务需要订阅此消息。
- 调用该对象的request()方法,传入http请求的url地址和可选参数,发起网络请求。
- 按照实际业务需要,解析返回结果。
- 调用该对象的off()方法,取消订阅http响应头事件。
- 当该请求使用完毕时,调用destroy()方法主动销毁。
2.4 鸿蒙OS中了解过同步机制的吗?
鸿蒙OS中同步机制主要涉及到多线程编程中的同步与互斥。鸿蒙OS提供了一些同步机制来确保多线程之间的协调和数据安全。
以下是鸿蒙OS中常见的同步机制:
- 互斥锁(Mutex): 互斥锁用于保护临界区,确保同时只有一个线程可以访问共享资源。在鸿蒙OS中,可以使用
ohos::AppExecFwk::Mutex
类实现互斥锁。 - 条件变量(Condition Variable): 条件变量用于在线程间进行通信,其中一个线程等待某个条件满足,而另一个线程负责满足条件。在鸿蒙OS中,可以使用
ohos::AppExecFwk::Condition
类实现条件变量。 - 信号量(Semaphore): 信号量用于控制多个线程对共享资源的访问。在鸿蒙OS中,可以使用
ohos::AppExecFwk::Semaphore
类实现信号量。
这些同步机制可以帮助开发者在多线程编程中确保数据的安全性,避免竞态条件和死锁等问题。在使用同步机制时,需要注意避免死锁和饥饿等问题,确保同步机制的正确使用。同时,鸿蒙OS还提供了其他工具和接口,如原子操作、事件等,以支持多线程编程中的同步与通信。
2.5 UIAbility组件生命周期分析,鸿蒙中Ability的分类?
UIAbility生命周期
鸿蒙开发中,UIAbility的生命周期是指UIAbility组件从创建到销毁的整个过程。这个过程包括一系列的状态转换和事件回调,开发者可以根据这些状态和回调来管理UIAbility的生命周期,从而实现更好的应用性能和用户体验。
UIAbility的生命周期主要包括以下几个阶段:
- Create(创建) :当UIAbility被创建时,系统会调用onCreate函数。在这个阶段,开发者可以进行一些初始化操作,比如设置UI界面、加载数据等。需要注意的是,在这个阶段,UIAbility还没有被展示给用户,因此不能进行与用户交互的操作。
- onWindowStageCreate(窗口创建) :在UIAbility创建之后,系统会调用onWindowStageCreate函数,创建与UIAbility相关联的窗口。在这个阶段,开发者可以设置窗口的属性,比如窗口的大小、位置、背景等。
- Foreground(前台展示) :当UIAbility被切换到前台时,系统会调用onForeground函数。在这个阶段,UIAbility的窗口会被展示出来,用户可以与之进行交互。开发者可以在这个阶段更新UI界面,响应用户的操作等。
- Background(后台隐藏) :当UIAbility被切换到后台时,系统会调用onBackground函数。在这个阶段,UIAbility的窗口会被隐藏,用户无法与之进行交互。开发者可以在这个阶段进行一些后台任务的处理,比如保存数据、下载文件等。
- onWindowStageDestroy(窗口销毁) :在UIAbility销毁之前,系统会调用onWindowStageDestroy函数,销毁与UIAbility相关联的窗口。在这个阶段,开发者可以释放与窗口相关的资源,比如内存、文件句柄等。
- Destroy(销毁) :最后,当UIAbility被销毁时,系统会调用onDestroy函数。在这个阶段,开发者需要释放所有与UIAbility相关的资源,比如UI界面、数据等。一旦UIAbility被销毁,就不能再被使用。
通过管理UIAbility的生命周期,开发者可以实现更好的应用性能和用户体验。比如,在UIAbility切换到后台时,开发者可以暂停一些不必要的任务,以节省系统资源;在UIAbility切换到前台时,开发者可以恢复这些任务,以保证应用的流畅性。同时,开发者还需要注意在适当的时机释放资源,避免内存泄漏等问题。
Ability分类
在鸿蒙OS中,Ability是应用程序的基本组成单元,负责处理用户界面和应用逻辑。根据不同的用途和功能,Abilities可以分为三大类:Page、Service和Data。
- Page(页面):
Page
是用户界面的展示单元,通常用于展示应用的主要交互界面。- Page 主要包括
Ability
和Component
两种类型,其中Ability
类型的 Page 可以独立运行,而Component
类型的 Page 需要嵌套在其他 Page 内。 - Page 可以响应用户的交互事件,如点击、滑动等,并进行相应的界面更新和业务逻辑处理。
- Service(服务):
Service
是后台运行的组件,用于执行长期运行的任务或处理一些不需要用户交互的业务逻辑。- Service 可以在后台运行,不直接与用户进行交互,但可以被其他组件调用,用于执行一些异步任务、定时任务等。
- Service 可以与 Page 组件进行通信,通过 Binder 机制进行数据传递。
- Data(数据):
Data
类型的 Ability 主要用于处理数据,不涉及用户界面展示,常用于数据存储、数据处理等场景。- Data Ability 通常包括
DataAbility
和DataObserver
两种类型。DataAbility
用于提供数据访问接口,DataObserver
用于监听数据变化。 - Data Ability 可以通过 URI 对数据进行操作,包括查询、插入、更新和删除等。
这三种 Ability 类型可以根据应用的需求进行组合使用,形成完整的应用程序。在鸿蒙OS的应用开发中,开发者可以根据业务场景选择合适的 Ability 类型,以构建灵活、高效的应用。
三 参考
- 掘金—首发:鸿蒙面试真题分享