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

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属性,从而实现对目标方法的监控和定制。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/46719.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

R-CNN、Fast R-CNN和Faster R-CNN:目标检测的进化之路

在计算机视觉的世界里,目标检测是一个重要的任务,它的目标是找到图像中的特定物体,并标注出它们的位置。这项技术广泛应用于自动驾驶、安防监控等领域。为了让计算机能够准确高效地完成这一任务,科学家们提出了许多优秀的算法,其中最具代表性的就是R-CNN、Fast R-CNN和Fas…

Linux驱动开发-04LED灯驱动实验(直接操作寄存器)

一、Linux 下LED 灯驱动原理 Linux 下的任何外设驱动,最终都是要配置相应的硬件寄存器。驱动访问底层的硬件除了使用内存映射将物理地址空间转化为虚拟地址空间,去进行读写修改,还可以通过各种子系统函数去进行操作 1.1 地址映射 MMU 全称…

视频语音转文字工具有哪些?提取视频文字就用这5个

作为一名大学毕业生,你是否也常靠几句简单的英语走遍天下,却在面对外语视频时感到手足无措? 别急,虽然在这个语言大家庭中,我们不可避免地要接触外语内容,但幸运的是,一些智能软件的出现&#…

leetcode日记(41)最大子数组和

以前大一的时候做过这题jpg&#xff0c;应该是个很经典的动态规划。 我首先的想法创建二维数组&#xff0c;横列代表起始位置纵列代表结束位置&#xff0c;依次补全数组&#xff0c;后来发现时间复杂度太高了&#xff1a; class Solution { public:int maxSubArray(vector<…

阿里云CDN- https(设计支付宝春节开奖业务)

HTTP相关概念 1. HTTP概述 http是最广泛的网络协议&#xff0c;是客户端与服务器之间的请求与应答的标准&#xff08;TCP&#xff09;&#xff0c;用于www服务器传输超文本到本地浏览器的传输协议&#xff0c;使浏览器更加高效&#xff0c;网络传输减少。 2.HTTPS概述 http…

Docker之在外执行docker内部命令(十一)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 优质视频课程:AAOS车载系统+AOSP…

CSS图像不透明度的艺术:探索透明度控制的无限可能

在网页设计中&#xff0c;图像的不透明度&#xff08;Opacity&#xff09;和透明度&#xff08;Transparency&#xff09;是两个关键的概念&#xff0c;它们不仅影响着页面的视觉效果&#xff0c;还能增强用户体验&#xff0c;创造丰富的交互效果。通过调整图像的不透明度&…

Go: IM系统技术架构梳理

概述 整个IM系统的一般架构如下 我们这张图展示了整个IM系统的一般架构可见分为四层那最上面这一层是前端&#xff0c;包括哪些东西呢&#xff1f; 它包括两部分&#xff0c;第一部分是跟用户直接交互的比如说各种IOS APP, 各种安卓 APP还有各种 web APP 在浏览器里面打开的以…

内网对抗-基石框架篇域树林域森林架构信任关系多域成员层级信息收集环境搭建

知识点&#xff1a; 1、基石框架篇-域树&域林架构-权限控制-用户和网络 2、基石框架篇-域树&域林架构-环境搭建-准备和加入 3、基石框架篇-域树&域林架构-信息收集-手工和工具1、工作组(局域网) 将不同的计算机按照功能分别列入不同的工作组。想要访问某个部门的…

MySQL篇:事务

1.四大特性 首先&#xff0c;事务的四大特性&#xff1a;ACID&#xff08;原子性&#xff0c;一致性&#xff0c;隔离性&#xff0c;持久性&#xff09; 在InnoDB引擎中&#xff0c;是怎么来保证这四个特性的呢&#xff1f; 持久性是通过 redo log &#xff08;重做日志&…

使用Nginx OpenResty与Redis实现高效IP黑白名单管理

1、引言 在当今数字化时代&#xff0c;网络安全已成为企业和个人用户关注的焦点。IP黑白名单作为一种有效的网络安全策略&#xff0c;允许我们精确控制对Web资源的访问权限。通过白名单&#xff0c;我们可以确保只有可信的IP地址能够访问敏感资源&#xff1b;而黑名单则可以阻…

嵌入式人工智能(2-树莓派4B开发板硬件环境搭建)

1.硬件开发环境&#xff08;T型板&#xff09; 树莓派4B开发板需要搭配面包板&#xff0c;T型板将40个GPIO口引出&#xff0c;再将T型板插到面包板上面。这个地方需要注意插接的方向&#xff0c;由于插树莓派引脚的排线没有防呆设计&#xff0c;因此&#xff0c;请注意方向&am…

第二证券:电影暑期档持续升温 农机自动驾驶驶入快车道

农机自动驾驶打开驶入快车道 得益于农机补贴、土地流通、高标准农田制造等方针引导&#xff0c;叠加技术突围和用户降本增效的内生需求&#xff0c;我国正处于农业2.0向农业3.0的过渡阶段。其间农机自动驾驶系统是结束农业3.0&#xff08;即自动化&#xff09;的要害并迎来快速…

maptalks点聚合切换坐标系后点聚合消失

原因&#xff1a;因为坐标系投影问题 解决方法&#xff1a;切换坐标系后&#xff0c;重新把请求到的点位数据插入到的图层删除掉&#xff0c;重新插入图层就可以解决了 // 先移除已存在的同名图层 this.map.removeLayer(cluster);// 然后添加新的图层this.map.addLayer(this.c…

装饰模式:动态扩展对象的功能

在软件设计中&#xff0c;我们常常需要在不改变现有代码的基础上&#xff0c;给对象添加新的功能或责任。装饰模式&#xff08;Decorator Pattern&#xff09;是一种常用的设计模式&#xff0c;它允许我们在运行时动态地给对象添加新的行为&#xff0c;而无需修改原有的类结构。…

Linux/C++:Json--网络编程中的奇妙小工具

目录 一、什么是Json 二、Josn基本结构 2.1Josn对象 2.2C使用Josn 2.3.1解析Josn格式的数据 2.4Linux编程(vscode)使用Josn 一、什么是Json JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式&#xff0c;它是基于JavaScript语言的子集&#xff0c;但是独立于…

PyCharm软件初始化配置

安装完pycharm后&#xff0c;需要对其进行个性化设置&#xff0c;分别设置方法如下 目录 一、修改主题二、修改默认字体和大小三、设置拖动滚轮改变字体大小四、常见快捷键 一、修改主题 1、界面右上角点击红框的内容 2、选择Theme选项 3、选择对应的主题 第一二个是白色主题…

树莓派配置vsftpd被动模式使用frp外网端口映射实现外网连接ftp

sudo apt-get install vsftpd /etc/vsftpd.conf anonymous_enableNO # 禁用匿名用户 local_enableYES # 允许本地用户登录 write_enableYES # 允许修改权限 #chroot_local_userYES # 将用户限制在其主目录 百度关键字 frp vsftp 关闭主动模式登录 connect_from_port_…

电池技术的未来:BMS的创新与应用

目录 一、什么是BMS&#xff1f; 二、BMS的核心功能 三、为什么BMS如此重要&#xff1f; 四、应用领域 五、未来展望 随着电动汽车、储能系统以及各种便携式设备的普及&#xff0c;电池技术的发展变得至关重要。而在这一领域中&#xff0c;电池管理系统&#xff08;BMS&am…

直播美颜工具开发教学:视频美颜SDK集成详解

本篇文章&#xff0c;笔者将详细介绍如何在直播应用中集成视频美颜SDK&#xff0c;让你的直播画面焕然一新。 一、什么是视频美颜SDK&#xff1f; 视频美颜SDK是一种软件开发工具包&#xff0c;提供了视频处理和图像增强功能。通过集成视频美颜SDK&#xff0c;开发者可以轻松…