鸿蒙开发工程师面试题-架构篇

1. 假如让你负责鸿蒙App架构设计,你会关注哪些方面?

  • 分层架构设计

    • 将应用划分为产品定制层、基础特性层和公共能力层,以降低层间依赖性,提升代码可维护性。
    • 通过分层架构设计,进一步明确每层的职责和层间交互机制,为开发者提供清晰且结构化的开发框架。
  • 模块化设计

    • 将应用分解为多个功能模块,每个模块负责执行特定功能。
    • 提高代码的可理解性和可复用性,简化应用的扩展和维护,降低系统各部分间的耦合度。
  • 应用导航设计

    • 在应用划分为多功能模块后,通过Navigation导航设计实现业务模块间的解耦。
    • 轻松实现不同业务模块之间的页面跳转交互。

2. HarmonyOS应用的分层架构包括几个层次,各自主要存放什么?

产品定制层

  • 内容:专注于满足不同设备或使用场景的个性化需求,包括UI设计、资源和配置,以及特定场景的交互逻辑和功能特性。
  • 特点:功能模块独立运作,依赖基础特性层和公共能力层实现具体功能。作为应用入口,直接与用户互动,可灵活调整和扩展以满足各种使用场景。

基础特性层

  • 位置:位于公共能力层之上。
  • 内容:存放基础特性集合,如相对独立的功能UI和业务逻辑实现。
  • 特点:高内聚、低耦合、可定制,支持产品的灵活部署。为上层提供稳健且丰富的基础功能支持(UI组件、基础服务等),并依赖于公共能力层提供的通用功能和服务。

公共能力层

  • 内容:集中存放公共基础能力,如公共UI组件、数据管理、外部交互以及工具库等共享功能。
  • 作用:为上层的基础特性层和产品定制层提供稳定可靠的功能支持,确保整个应用的稳定性和可维护性。
  • 部署模型:Entry类型HAP代表应用入口点,Feature类型HAP包含特定功能模块,支持模块化适配和部署。

3. 你刚才所讲的HAP是什么,简单描述下?

HAP(Harmony Ability Package):是应用安装和运行的基本单元。由代码、资源、第三方库、配置文件等打包生成的模块包,主要分为entry和feature两种类型:

  • entry:应用的主模块,作为入口提供基础功能。
  • feature:应用的动态特性模块,作为能力扩展,可根据用户需求和设备类型选择性安装。

使用场景

  • 单HAP:适用于只包含UIAbility组件的简单应用,优先采用单个entry包开发,推荐“一个UIAbility+多个页面”的方式避免资源浪费。
  • 多HAP:适用于功能复杂、需使用ExtensionAbility组件的应用,采用entry包+多个feature包的方式开发,需注意避免库文件重复打包问题。

4. 如何实现多个模块或多个工程共享ArkUI组件、资源等相关代码?

HAR(Harmony Archive):作为静态共享包,可包含代码、C++库、资源和配置文件。通过HAR实现多个模块或工程间的ArkUI组件、资源等代码共享。

使用场景

  • 二方库:发布到OHPM私仓,供公司内部其他应用使用。
  • 三方库:发布到OHPM中心仓,供其他应用使用。

HSP(Harmony Shared Package):作是动态共享包,可以包含代码、C++库、资源和配置文件,通过HSP可以实现代码和资源的共享。HSP不支持独立发布,而是跟随其宿主应用的APP包一起发布,与宿主应用同进程,具有相同的包名和生命周期。

使用场景

  • 多个HAP/HSP共用的代码和资源放在同一个HSP中,可以提高代码、资源的可重用性和可维护性,同时编译打包时也只保留一份HSP代码和资源,能够有效控制应用包大小。。
  • HSP在运行时按需加载,有助于提升应用性能。
  • 同一个组织内部的多个应用之间,可以使用集成态HSP实现代码和资源的共享。

5. 谈谈你对模块化设计的看法?

模块化不仅是一个设计原则,更是一种深入开发实践的核心概念。它倡导将复杂的应用程序拆解为多个功能独立的模块,每个模块聚焦于特定的功能或特性。这种设计方式使得模块能够独立开发、编译、测试及部署,极大提高了开发效率和可维护性。同时,模块化设计也支持在不同设备和场景下灵活组合与调用模块,进一步增强了应用的灵活性和可扩展性。

应用开发者需基于自身技术架构的考量,选择适宜的工程模块化模型。值得注意的是,工程模块化模型并非一成不变,而应随着业务和技术架构的演进不断优化调整。在HarmonyOS中,开发者可根据具体需求,在HAP、HAR和HSP三种类型中灵活选择,以实现最佳的设计效果。

  • 对于具备独立运行和安装能力的模块,HAP包是首选,且通常以Feature类型的HAP形式存在于应用中。
  • 对于那些不具备独立特性或用户使用频率较低的模块,则适宜采用HSP按需加载模块的形式,以节省资源并提升应用性能。
  • 而对于需要跨工程共享的模块,HAR包则成为了不可或缺的选择,它能够通过OHPM仓实现资源的共享与复用。然而,由于HAR是静态共享库,在多HAP或按需加载场景下可能会存在物理上的多份拷贝问题,因此合理采用公共HSP模块壳,对于优化App Size至关重要。

6. 应用导航如何设计?

在应用设计中,导航设计是关乎用户体验的重要环节。HarmonyOS提供了强大的Navigation组件,作为路由导航的根视图容器,它通常作为Page页面的根容器使用。Navigation组件内部集成了标题栏、内容区和工具栏等元素,其中内容区可根据路由配置动态展示不同的导航内容或页面。

为实现业务模块间的解耦与高效管理,建议将路由功能抽取为独立的RouterModule模块,并以HAR包形式存在。RouterModule负责内部路由的管理,并对外提供RouterModule对象供其他模块调用。由于Entry.hap是应用的主入口,利用其特性将其作为业务模块的依赖注册中心,可有效简化模块间的依赖关系。在入口模块中,通过Navigation组件依赖其他业务模块,而业务模块则仅依赖RouterModule进行路由管理,从而实现了业务模块间的松耦合设计。

7. 面对应用并发设计,你会如何做?

面对应用并发设计挑战,需从多个维度进行综合考量与规划:

  1. 明确并发需求:首先需清晰界定应用的并发需求,识别出哪些任务为耗时操作、哪些为常驻任务、哪些需并发执行以及哪些需顺序执行等。

  2. 选择合适的并发模型:根据并发需求选择合适的并发模型。HarmonyOS提供了TaskPool和Worker两种并发模型:TaskPool适用于处理相对独立的耗时任务;Worker则适用于处理长耗时且并发量不大的常驻任务。

  3. 设计线程间通信机制:合理设计线程间通信机制,确保数据在不同线程间能够正确传递与同步。

  4. 设置任务优先级与调度策略:根据业务场景设置合理的任务优先级与调度策略,确保高优先级任务能够优先执行。HarmonyOS的TaskPool提供了多任务优先级调度机制,可灵活应用。

  5. 实现任务延时调度:对于需延时执行的任务,利用TaskPool的延时调度功能进行安排,以避免对应用启动耗时或其他重要任务造成干扰。

  6. 处理线程间模块共享问题:针对进程唯一的ArkTS实例等共享资源,可考虑在ArkTS子线程中初始化并完成后续操作,以避免阻塞主线程执行。

  7. 优化并发性能:持续优化并发性能,通过减少线程数量、优化通信机制及合理设置任务优先级等手段提升应用性能。

8. 鸿蒙中的应用切面编程都可以来干什么?

在HarmonyOS中,应用切面编程(AOP)是一种强大的编程范式,它允许开发者在不修改源代码的情况下,为应用中的方法增加额外的行为。切面编程可应用于多个场景,包括但不限于:

  • 参数校验:在方法执行前插入参数校验逻辑,确保输入参数的合法性。
  • 日志记录:在方法执行前后记录日志,便于追踪方法执行情况及进行问题排查。
  • 性能统计:统计方法的调用次数和执行时间,为性能分析和优化提供依据。
  • 异常处理:对方法返回值进行校验,并在不符合预期时抛出异常或进行其他处理。
  • 成员变量监测:在方法执行时监测成员变量状态,确保数据完整性和准确性。
  • 方法替换:在特定情况下替换原方法实现,以适应业务变更或性能优化需求。
  • 应用跳转监控:在应用跳转时,感知到目标应用的包名,实现对目标应用的识别和监控,以确保跳转操作的安全性和准确性。例如,通过插桩操作可以获得Want参数的bundleName属性,从而实现对目标方法的监控和定制。

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值