一 面试题汇总(美团)
- 桌面卡片【卡片的堆叠】如何实现,APP内置卡片和远端加载卡片的区别?原理
- 鸿蒙arkts语言在api9和10之间的兼容性了解过吗?你们现在开发的api是多少?
- 分布式调用的故障定位、诊断和分析思路?使用过Hitrace工具吗?
- 编译过鸿蒙吗?简单说说鸿蒙编译流程?编译子系统?
- HarmonyOS IDL是什么?Android AIDL
- MVVM在鸿蒙中的实践,架构问题,理解
二 面试题解答(仅供参考)
2.1 桌面卡片【卡片的堆叠】如何实现,APP内置卡片和远端加载卡片的区别?原理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| 在鸿蒙OS中,桌面卡片的堆叠通常是通过`CardView`来实现的。 `CardView`是一个支持卡片化布局的组件,用于显示卡片的内容。 堆叠效果可以通过控制卡片的位置和大小来实现
关于APP内置卡片和远端加载卡片的区别,主要体现在卡片的来源和加载方式上:
1. APP内置卡片: 这些卡片是应用安装时预先定义的,通常在应用内部开发并随应用一起发布。 内置卡片的加载和显示由应用自身控制,它们可以包含静态内容或通过网络动态获取。
2. 远端加载卡片: 这些卡片通常是在应用外部定义和管理的,例如通过服务器端动态配置。 鸿蒙OS支持从远端加载卡片数据,并将其显示在桌面上。 这种方式可以实现动态更新卡片内容,而无需通过应用升级来修改。
无论是内置卡片还是远端加载的卡片,其实现原理都涉及卡片的定义、加载和展示。 在远端加载的情况下,可能涉及到网络请求和异步加载的处理,以确保及时获取并展示最新的卡片内容。 整体原理涉及到系统桌面服务和卡片的动态管理机制,确保卡片的灵活性和及时性。
|
2.2 鸿蒙arkts语言在api9和10之间的兼容性了解过吗?你们现在开发的api是多少?
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
| 鸿蒙 ArkTS 语言在 API9 和 API10之间有不少变化, 尤其是在UI 声明、状态管理、生命周期、组件开发等方面都有优化和调整。 让我们简单对比一下:
1.API9和API10的兼容性差异:
1.1 声明方式变化: -API 9: 使用@Entry注解作为程序入口。 -API 10:改为@Component注解,更贴近前端开发习惯
1.2 状态管理优化: -API 9: 需要 @State、@Prop 明确声明组件状态和属性。 -API 10: 引入了 @Observed,进一步优化了状态监听机制
1.3 生命周期变化: -API 9: 使用 onPageShow()、onPageHide() 管理生命周期。 -API 10: 改用 aboutToAppear()、aboutToDisappear(),逻辑更清晰
1.4 组件复用和事件处理: -API 9: 事件绑定需要用 onClick。 -API 10: 支持链式调用,使代码更简洁。
2. 兼容性处理方式 -多版本支持: 使用 @system.capability 判断当前设备的 API 版本,适配不同逻辑 -升级建议: 如果项目目前在 API 9,建议逐步迁移到 API 10,新特性更简洁、性能更优。
3.现在版本api11
|
2.3 分布式调用的故障定位、诊断和分析思路?使用过Hitrace工具吗?
1-分布式调用故障定位思路
1 2 3 4 5
| 1.确认分布式能力是否启用:确认参与分布式调用的设备是否都开启了分布式能力,并已建立可信连接 2.日志排查:使用 hilog 打印关键日志点,关注分布式通信接口的返回值 3.接口调用链分析: 分析 DeviceManager、DistributedDataManager、等接口的调用链,确保数据正常传递。 4.异常捕获:捕获 RemoteException 等异常,定位失败原因 5.网络与权限检查: 确保设备间的网络畅通,并检查分布式权限
|
2-Hitrace 工具的使用
1 2 3 4 5 6 7
| Hitrace是鸿蒙提供的分布式链路追踪工具,能帮助开发者分析跨设备调用时的性能瓶颈和故障点。
使用步骤: 1.引入 Hitrace 模块 2.打点追踪:在关键逻辑前后加上traceBegin和traceEnd,追踪跨设备调用耗时 3.查看日志:使用 hilog 输出追踪信息 4.诊断分析:通过hitrace工具生成的追踪ID,可以在DevEco Studio的Profiler工具里查看详细的调用链、耗时、失败点等信息
|
2.4 编译过鸿蒙吗?简单说说鸿蒙编译流程?编译子系统?
鸿蒙OS的编译流程是一个复杂的过程,主要涉及到多个子系统的编译。以下是一个简单的概述:
1-鸿蒙OS编译流程:
1 2 3 4 5 6 7 8 9
| 1. 代码仓库克隆:开发者首先需要从鸿蒙OS的代码仓库中克隆代码到本地开发环境。 2. 环境配置:开发者需要配置编译环境,包括编译工具链、依赖库、环境变量等。 3. 选择目标设备:鸿蒙OS支持多种设备,包括手机、平板、智能穿戴、物联网设备等。开发者需要选择目标设备进行编译。 4. 选择编译目标:鸿蒙OS支持不同的编译目标,例如模拟器、硬件设备等。开发者需要选择合适的编译目标。 5. 配置编译选项:开发者可以根据需要配置编译选项,包括调试选项、优化选项等。 6. 执行编译命令:通过执行编译命令,开始对鸿蒙OS的源代码进行编译。编译命令可能会包括一系列参数和选项,以指定编译的具体细节。 7. 编译子系统:鸿蒙OS的源代码分为多个子系统,例如内核、系统服务、应用框架等。编译过程会涉及对每个子系统的编译。 8. 生成镜像文件:编译完成后,生成鸿蒙OS的镜像文件,这可以是用于模拟器的镜像、用于硬件设备的刷写镜像等。 9. 刷写到设备:如果目标是硬件设备,开发者可以将生成的镜像文件刷写到目标设备上进行测试和调试。
|
2-鸿蒙OS编译子系统:
1 2 3 4 5 6 7 8 9
| 鸿蒙OS的源代码包括多个子系统,每个子系统都有其独立的编译过程。以下是一些常见的鸿蒙OS编译子系统:
1. LiteOS Kernel:LiteOS Kernel是鸿蒙OS的内核,负责处理系统调用、进程管理、内存管理等。它有自己的编译流程,生成内核二进制文件。 2. LiteOS System Services:这个子系统包括一系列系统服务,例如网络服务、文件系统服务、图形服务等。每个系统服务都有独立的编译过程。 3. HarmonyOS Frameworks:这个子系统包括应用框架、图形框架、界面框架等。它们的编译过程涉及到应用程序框架的构建。 4. HarmonyOS Applications:应用程序层的子系统包括系统应用、第三方应用等。每个应用都有自己的编译过程。
编译子系统的具体细节可能因版本而异,鸿蒙OS的发展可能会引入新的编译和构建工具。 因此,为了获取准确的信息,建议查阅鸿蒙OS官方文档和相关的开发者资源。
|
2.5 HarmonyOS IDL是什么?Android AIDL
1-HarmonyOS IDL
1 2 3 4 5 6 7 8
| HarmonyOS AIDL(Interface Definition Language,接口定义语言)是用于定义分布式服务接口的语言。 它定义了服务接口的数据类型、方法签名和调用规则,使得不同模块、设备之间可以通过统一的接口进行通信。 HarmonyOS IDL的设计旨在支持分布式能力,并在HarmonyOS生态系统中实现设备之间的高效互通。
一些 HarmonyOS IDL 的特点包括: 1. 数据类型支持:提供了基本数据类型、结构体、枚举等,以及支持分布式的特殊数据类型,方便在分布式环境中传递数据。 2. 接口定义:允许开发者定义接口,包括接口的方法、参数、返回值等。这样不同的设备和模块可以按照定义好的接口进行通信。 3. 异步调用:支持异步方法调用,允许设备在不阻塞主线程的情况下进行异步通信。
|
2-Android AIDL
1 2 3 4 5 6 7 8 9 10
| Android AIDL(Android Interface Definition Language,Android接口定义语言)是Android中用于进行跨进程通信的一种接口定义语言。 它与 HarmonyOS IDL 有一些相似之处,但在语法和使用上有一些差异。 Android AIDL 主要用于在不同的 Android 进程之间传递复杂对象和调用远程服务。
一些 Android AIDL 的特点包括:
1. 跨进程通信:Android AIDL主要用于实现跨进程通信。 通过定义接口和接口中的方法,应用可以通过AIDL文件描述接口,从而实现在不同进程之间传递数据和调用远程服务。 2. Binder机制:AIDL的底层机制依赖于Android的Binder机制,这是一种跨进程通信的底层实现。 3. 复杂对象支持:AIDL支持传递复杂对象,包括自定义的数据类型、对象等。
|
3-区别
1 2
| 虽然 HarmonyOS IDL 和 Android AIDL 有一些相似之处,但它们是两个不同系统中用于不同目的的接口定义语言。 HarmonyOS IDL 更侧重于分布式能力,而 Android AIDL 更专注于 Android 平台的进程间通信。
|
2.6 MVVM在鸿蒙中的实践,架构问题,理解
1-说明
1 2 3
| 在鸿蒙OS中实践MVVM(Model-View-ViewModel)架构模式与在其他移动应用框架中有相似之处,但也存在一些特定的考虑因素。 MVVM是一种用于构建用户界面的软件架构模式, 它将应用程序分为三个主要组件:Model(模型)、View(视图)和ViewModel(视图模型)。
|
2-MVVM 在鸿蒙中的实践:
1 2 3 4 5 6 7 8 9 10 11
| 1.Model(模型): - Model 表示应用程序的数据层。在鸿蒙OS中,Model 可能包括应用的业务逻辑、数据存储和处理等。 - 鸿蒙OS提供了分布式能力,因此 Model 的数据可能来自本地设备或其他远程设备。在 Model 中需要考虑分布式数据的管理。
2.View(视图): - View 是用户界面的表示。在鸿蒙OS中,使用XML布局文件来定义视图的层次结构和外观。 - 视图层可以通过数据绑定与 ViewModel 交互,当 ViewModel 的数据发生变化时,自动更新视图。
3.ViewModel(视图模型): - ViewModel 负责处理用户界面的业务逻辑和状态管理,将 Model 层的数据转化为可在视图层显示的形式。 - 鸿蒙OS中,ViewModel 的设计需要考虑到分布式环境,可能需要处理来自不同设备的数据。
|
3-架构问题和考虑因素:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| 1.分布式环境: -鸿蒙OS支持分布式能力,因此在设计 MVVM 架构时需要考虑数据的分布和管理。 -ViewModel 可能需要与其他设备进行通信以获取数据。
2.数据绑定: -数据绑定是 MVVM 中的核心概念, -但在鸿蒙OS中可能需要特别关注分布式环境下的数据同步问题,确保数据变更能够及时反映在视图层。
3.异步操作: -在鸿蒙OS中,涉及分布式通信、文件读写等操作可能是异步的。 -ViewModel 需要支持异步操作,并确保界面的响应性。
4.事件处理: 事件处理在 MVVM 架构中是重要的一部分,确保 ViewModel 能够正确地响应用户操作,触发相应的业务逻辑。
5.设备适配: -鸿蒙OS支持多种设备类型,包括手机、平板、物联网设备等。 -在实践中需要考虑不同设备上界面和交互的适配问题。
|
4-总结
1 2 3
| 总体而言,MVVM在鸿蒙OS中的实践与其他移动应用框架有相似之处, 但在考虑分布式环境和鸿蒙OS特有的能力时,需要对架构进行适当调整。 正确的MVVM实践可以帮助提高代码的可维护性和扩展性,同时保持良好的用户体验。
|
三 参考