一 面试题汇总(红书)
- 组件化开发原理,鸿蒙组件化实现思路
- 音视频开发,鸿蒙实现播放器的Ui部分+底层部分
- 了解过鸿蒙的Napi吗?如果我需要编译三方库如何链接?
- 鸿蒙如何实现自定义Canvas?底层如何进行Ui的渲染 flutter skia
- 鸿蒙网络请求如何实现的,线上的APM 如何做流量的监控?
- 说一下@State 、@Link 、@Builder、@Provide和@Consume的区别?
二 面试题解答(仅供参考)
2.1 组件化开发原理,鸿蒙组件化实现思路
1-说明
1 2 3
| 组件化开发是一种软件设计和架构的方法,它将整个系统划分为独立的组件,每个组件都能够独立开发、测试和维护。 在鸿蒙OS中,组件化开发被广泛应用,以提高系统的灵活性、可维护性和可扩展性。 下面是组件化开发的一般原理以及在鸿蒙OS中的实现思路:
|
2-组件化开发原理:
1 2 3 4 5
| 1. 独立性:每个组件都是独立的单元,包含自己的业务逻辑、界面和资源。 组件之间的耦合尽量减少,使得每个组件可以独立开发和测试。 2. 模块化:每个组件应该是一个可重用的模块,具有清晰的接口和功能。这有助于提高代码的复用性,减少重复开发。 3. 通信机制:组件之间需要一种有效的通信机制,以实现信息的传递和共享。这可以通过事件、消息队列等方式来实现。 4. 动态加载:组件可以根据需要进行动态加载和卸载,而不影响系统的其他部分。这有助于提高系统的灵活性和扩展性。
|
3-鸿蒙组件化实现思路:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| 1. 分布式能力组件: -鸿蒙OS引入了分布式能力组件的概念,通过能力组件可以在不同设备上共享和调用特定的能力。 -这使得组件可以更加灵活地分布在不同设备上,实现跨设备的协同工作。
2. 分布式软总线: -鸿蒙OS使用分布式软总线技术,实现了设备之间的通信。 -组件可以通过软总线进行消息传递,实现跨设备的信息共享和协同工作。
3. 多端协同开发: -鸿蒙OS支持多端协同开发,开发者可以一次编写,多端适配。 -这使得组件可以更容易地适配不同设备的屏幕尺寸和分辨率,提供一致的用户体验。
4. 分布式文件系统: -鸿蒙OS的分布式文件系统支持文件的共享和管理。 -组件可以通过文件系统实现跨设备的文件读写和共享。
5. HarmonyOS IDE: -使用HarmonyOS IDE(DevEco Studio)进行组件化开发,可以更方便地创建、管理和调试组件。 -IDE提供了丰富的工具和资源,支持组件之间的依赖关系管理。
6. HarmonyOS基础服务:鸿蒙OS提供一系列基础服务,如分布式数据管理、分布式安全等,这些服务为组件提供了基础设施支持。
|
4-总结
1 2
| 总体而言,鸿蒙OS通过引入分布式能力、软总线技术、多端协同开发等特性, 为组件化开发提供了丰富的支持,使得组件能够更好地适应分布式环境,实现跨设备的协同工作。
|
2.2 音视频开发,鸿蒙实现播放器的Ui部分+底层部分
在鸿蒙OS中实现音视频播放器涉及到两个主要部分:UI部分和底层部分。以下是简要的步骤和思路:
1-音视频播放器的UI部分:
1 2 3 4 5 6 7 8 9 10 11
| 1.布局设计: -使用鸿蒙的UI框架进行布局设计,可以使用XML语言或代码方式创建播放器界面。 -定义播放器界面包括播放/暂停按钮、进度条、音量控制、全屏切换等控件。
2.事件处理: -通过鸿蒙的事件处理机制,为播放器UI部分添加相应的事件监听器,以处理用户操作,例如点击播放按钮、拖动进度条等。 -处理这些事件触发底层播放器的相应操作。
3.界面适配: -考虑多端协同开发的特性,确保播放器UI在不同设备上的适配性。 -可以使用HarmonyOS的统一布局语言和多端适配特性来简化界面的设计和适配。
|
2-音视频播放器的底层部分:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| 1.选择媒体框架: -选择适用于鸿蒙OS的音视频播放媒体框架,例如使用HarmonyOS提供的媒体框架或者集成第三方的媒体库。 -确保所选框架兼容鸿蒙OS的环境。
2.播放控制: -通过底层代码实现音视频的播放控制,包括加载媒体、播放、暂停、停止、快进、快退等操作。 -可以使用媒体框架提供的API来管理媒体资源和播放状态。
3.实现播放器管理: -设计一个播放器管理类,负责管理多个播放器实例,处理播放器的状态切换、资源释放等操作。 -这有助于确保同时播放多个媒体文件时的有效管理。
4-处理音视频流: -根据选择的媒体框架,实现处理音视频流的功能。 -可能需要解码、渲染、缓冲等操作,具体实现会依赖于所选的媒体框架。
5-错误处理和异常情况:
-添加适当的错误处理和异常情况处理,确保用户获得良好的用户体验。 -这可能包括网络错误、媒体格式不支持等异常情况的处理。
6.硬件加速: -考虑利用鸿蒙OS提供的硬件加速特性,以提高音视频播放的性能和效率。 -通过底层代码调用相关硬件加速接口,优化播放体验。
|
3-注意事项:
1 2 3 4
| 1. 权限处理:确保应用在播放音视频时具有必要的权限,如访问存储、网络等权限。 2. 性能优化:进行性能优化,特别是在资源受限的设备上,以确保播放器的流畅性和响应性。 3. 测试和调试:使用鸿蒙OS提供的开发者工具进行测试和调试,确保播放器在不同设备上正常运行。 4. 用户体验:设计良好的用户交互,提供友好的界面,确保用户能够轻松使用播放器功能
|
总体而言,通过合理的UI设计和底层开发,可以在鸿蒙OS上实现功能强大的音视频播放器。
2.3 了解过鸿蒙的Napi吗?如果我需要编译三方库如何链接?
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 30 31
| 鸿蒙OS引入了NAPI(Native Application Programming Interface)支持, 允许开发者使用C/C++等原生语言编写应用程序的部分模块。 这提供了更大的灵活性,特别是在涉及性能优化、底层硬件交互等方面。
如果你需要编译第三方库并链接到鸿蒙应用中,可以按照以下步骤进行:
1. 交叉编译: -首先,确保你的第三方库支持鸿蒙OS的架构。 -如果不支持,你可能需要进行交叉编译,生成适用于鸿蒙OS的二进制文件。 -这可能需要使用鸿蒙OS提供的工具链。
2. 创建NAPI模块: -将第三方库的功能封装成一个NAPI模块。 -NAPI模块是一个动态库,用于通过JavaScript进行调用。 -在NAPI模块中,你可以使用C/C++语言编写和第三方库交互的代码。
3. CMake构建: -使用CMake等构建工具创建一个构建系统,用于构建NAPI模块和鸿蒙应用。 -这样你可以确保正确地链接第三方库,并生成可在鸿蒙系统上运行的二进制文件。
4. 配置构建文件: -在鸿蒙应用的构建文件(例如,config.json)中,确保添加了对NAPI模块的依赖。 -这通常包括引入相应的动态库文件等配置。
5. 应用集成: -在鸿蒙应用中通过JavaScript代码调用NAPI模块,以使用第三方库的功能。 -确保在调用时正确处理错误和资源释放。
具体的步骤可能会根据使用的第三方库和鸿蒙OS的版本而有所不同。 建议查阅鸿蒙OS的官方文档和相应版本的开发者指南,以获取详细的指导和最新的信息。
|
2.4 鸿蒙如何实现自定义Canvas?底层如何进行Ui的渲染 flutter skia
1 2 3 4 5 6 7 8 9 10
| HarmonyOS的UI系统采用的是自研的分布式UI框架(Distributed UI Framework),而与Flutter或Skia不同。 在HarmonyOS中,渲染是由系统底层负责的,而不是像Flutter一样使用Skia进行自定义绘制。 因此,自定义Canvas的实现方式与Flutter或Skia略有不同。
在HarmonyOS中,自定义绘制通常通过创建自定义的组件来实现。 以下是一个简单的步骤,介绍如何在HarmonyOS中实现自定义绘制:
1. 声明MiniCanvasAttribute 画布属性(入宽、高、背景色、抗锯齿等) 2. 定义Icanvas绘制内容`onDraw?: (canvas: ICanvas) => void = undefined;`,绘制直线、圆等 3. 自定义绘制组件,在build方法中,使用Canvas实现绘制,并将上述属性填入
|
2.5 鸿蒙网络请求如何实现的,线上的APM 如何做流量的监控?
2.5.1 网络请求
1-鸿蒙的网络请求分为:Http请求、WebSocket连接、Socket连接,本文以Http数据请求为例
1 2
| HTTP数据请求功能主要由http模块提供。 使用该功能需要申请ohos.permission.INTERNET权限。
|
2-request接口开发步骤
1 2 3 4 5 6 7
| 1. 从@ohos.net.http.d.ts中导入http命名空间。 2. 调用createHttp()方法,创建一个HttpRequest对象。 3. 调用该对象的on()方法,订阅http响应头事件,此接口会比request请求先返回。可以根据业务需要订阅此消息。 4. 调用该对象的request()方法,传入http请求的url地址和可选参数,发起网络请求。 5. 按照实际业务需要,解析返回结果。 6. 调用该对象的off()方法,取消订阅http响应头事件。 7. 当该请求使用完毕时,调用destroy()方法主动销毁。
|
1 2 3 4 5 6 7 8 9
| 1. 性能监控:APM工具可以监控应用性能,包括网络请求的响应时间、耗时等。这有助于识别性能瓶颈,并进行优化。 2. 错误监控:APM可以捕获应用中的异常和错误信息,包括网络请求的异常。这对于追踪和解决线上问题非常重要。 3. 事务追踪:APM工具可以追踪应用中的事务,包括网络请求的发起和结束。这有助于全面了解应用的运行状态。 4. 资源利用率监控:APM可以监控应用的资源利用率,包括网络流量的使用情况。 这对于控制和优化应用的资源消耗非常有帮助。
在鸿蒙OS上,你可以考虑使用华为提供的APM工具(例如华为应用分析服务),或者集成第三方的APM解决方案。 这些工具通常提供了图形化的仪表盘和报告,方便开发者实时监控和分析应用的性能和流量情况。 在使用这些工具时,你需要根据具体的需求和业务场景进行配置和集成。
|
2.6 说一下@State 、@Link 、@Builder、@Provide和@Consume的区别?
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
| 在鸿蒙OS的分布式开发中,`@State`、`@Link`、`@Builder`、 `@Provide`和`@Consume`是用于定义和管理分布式组件生命周期、状态、链接以及能力组件的注解。 以下是它们的主要区别:
1.@State: -作用: 用于定义分布式组件的状态。 -用法:将`@State`注解应用于组件的字段,用于表示该字段是组件的状态。
2.@Link: -作用:用于定义组件之间的链接关系。 -用法:将`@Link`注解应用于组件的字段,用于表示组件之间的链接关系。
3.@Builder: -作用:用于定义组件的构建器。 -用法:将`@Builder`注解应用于构建组件的方法,用于定义组件的构建过程。
4.@Provide: - 作用:用于提供能力组件。 - 用法:将`@Provide`注解应用于组件的方法,用于指示该方法提供某个能力组件。
5.@Consume: - 作用:用于消费能力组件。 - 用法:将`@Consume`注解应用于组件的方法,用于指示该方法消费某个能力组件。
总体而言,这些注解在鸿蒙OS的分布式开发中用于定义和管理组件之间的状态、链接关系、构建过程, 以及提供和消费能力组件的相关操作。 在使用时,需要根据实际需求和业务逻辑来合理应用这些注解。
|
三 参考