鸿蒙面试题——面试题整理5

一 面试题汇总(红书)

  • 组件化开发原理,鸿蒙组件化实现思路
  • 音视频开发,鸿蒙实现播放器的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()方法主动销毁。

2.5.2 对于线上的APM(Application Performance Management),流量监控通常涉及以下几个方面:

1
2
3
4
5
6
7
8
9
1. 性能监控:APM工具可以监控应用性能,包括网络请求的响应时间、耗时等。这有助于识别性能瓶颈,并进行优化。
2. 错误监控:APM可以捕获应用中的异常和错误信息,包括网络请求的异常。这对于追踪和解决线上问题非常重要。
3. 事务追踪:APM工具可以追踪应用中的事务,包括网络请求的发起和结束。这有助于全面了解应用的运行状态。
4. 资源利用率监控:APM可以监控应用的资源利用率,包括网络流量的使用情况。
这对于控制和优化应用的资源消耗非常有帮助。

在鸿蒙OS上,你可以考虑使用华为提供的APM工具(例如华为应用分析服务),或者集成第三方的APM解决方案。
这些工具通常提供了图形化的仪表盘和报告,方便开发者实时监控和分析应用的性能和流量情况。
在使用这些工具时,你需要根据具体的需求和业务场景进行配置和集成。
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的分布式开发中用于定义和管理组件之间的状态、链接关系、构建过程,
以及提供和消费能力组件的相关操作。
在使用时,需要根据实际需求和业务逻辑来合理应用这些注解。

三 参考

  • 掘金—首发:鸿蒙面试真题分享