鸿蒙面试题-某迈-2024年11月22日

时间:2024-11-27 11:58:44

某迈-2024年11月22日

1. 自我介绍

2. 鸿蒙中地图功能如何实现,申请流程是什么样的

  1. 主要通过 集成 Map Kit 的功能来实现
  2. Map Kit 功能很强大,比如有
    1. 创建地图:呈现内容包括建筑、道路、水系等。
    2. 地图交互:控制地图的交互手势和交互按钮。
    3. 在地图上绘制:添加位置标记、覆盖物以及各种形状等。
    4. 位置搜索:多种查询Poi信息的能力。
    5. 路径规划:提供驾车、步行、骑行路径规划能力。
    6. 静态图:获取一张地图图片。
    7. 地图Picker提供地点详情展示控件、地点选取控件、区划选择控件
    8. 通过Petal 地图应用实现导航等能力:查看位置详情、查看路径规划、发起导航、发起内容搜索。
    9. 地图计算工具:华为地图涉及的2种坐标系及其使用区域和转换
  3. 在编码之前需要
    1. 完成证书的申请和公钥指纹的一些配置
    2. 还要在AGC平台上开通地图服务应用
    3. 代码中使用 项目的 client_id
    4. 最后开始编码

3. 一多开发是如何实现的

  1. 一多开发是一次开发多端部署
  2. 主要分成三个核心部分
    1. 工程级一多
    2. 界面级一多
    3. 能力级一多
  3. 工程级一多主要指的是使用华为鸿蒙推荐的三层架构来搭建项目,比如
    1. 第一层,最底层是 common-公共能力层,用于存放公共基础能力集合(如工具库、公共配置等),一般是使用HSP包(动态共享包),这样它被项目中多个模块引入的话,也只会保留一个备份。
    2. 第二层,是features-基础特性层,用于存放基础特性集合(如应用中相对独立的各个功能的UI及业务逻辑实现等)
    3. 顶层是,products-产品定制层,用于针对不同设备形态进行功能和特性集成
  4. 界面级一多指的是一套代码可以适配不同尺寸、形态的设备,主要通过以下这些技术来实现
    1. 自适应布局 等比拉伸缩放等等相关技术
    2. 响应式布局 通过断点、媒体查询、栅格布局来实现
  5. 能力级一多主要指的是不同硬件设备支持能力不一样,如蓝牙、摄像头、传感器等等。这些主要通过判断当前设置是否支持该能力来决定是否调用相关的api功能。如利用编辑器工具的智能提示、和代码中使用的caniuse或者try-catch进行判断使用。

4. 录音有做过吗?avrecoder有几种状态?

录音可以通过AVRecorder和AudioCapturer来实现。两者区别主要在支持录制声音的格式不同和控制录音文件的细小粒度不同上。AVRecorder会简单一些,AudioCapturer会复杂一些-还可以搭配ai语音功能使用

AVRecorder主要有以下这些状态:

image-20241124081207334

类型 说明
‘idle’ 闲置状态。
‘prepared’ 参数设置完成
‘started’ 正在录制。
‘paused’ 录制暂停。
‘stopped’ 录制停止。
‘released’ 录制资源释放。
‘error’ 错误状态。

5. 图片上传有做过吗?图片处理,旋转、缩放、图片保存有做过吗?

做过相册图片的上传(如果是沙箱内的图片只需要1个步骤即可,直接上传),流程主要有3个步骤,基于photoAccessHelper 、CoreFileKit、NetworkKit来实现的

  1. photoAccessHelper 用来实现选择要上传的相册的图片
  2. CoreFileKit 将相册图片拷贝到沙箱目录
  3. NetworkKit 负责将沙箱目录内的图片上传到服务器上

图片处理,旋转、缩放、图片保存主要基于Image Kit来实现。它提供有

  • 图片解码

    指将所支持格式的存档图片解码成统一的PixelMap,以便在应用或系统中进行图片显示或图片处理。

  • PixelMap

    指图片解码后无压缩的位图,用于图片显示或图片处理。

  • 图片处理

    指对PixelMap进行相关的操作,如旋转、缩放、设置透明度、获取图片信息、读写像素数据等。

  • 图片编码

    指将PixelMap编码成不同格式的存档图片,用于后续处理,如保存、传输等。

其中压缩图片是通过 一个ImageKit的packing函数,传入压缩比例(0-100)来是实现的。值越小体积越小

6. 视频有做过吗?

  1. 如果是普通的视频播放直接使用 Video组件来播放即可。功能相对弱一些
  2. 如果是对视频播放进行神帝的一些处理,如流媒体、本地资源解析、媒体资源解封装、视频解码和自定义渲染的这些功能,可以使用AVPlayer来实现。
  3. 如果类似做一个编辑视频的软件,那么就需要使用到对应的CAPI接口来实现了(调用底层c++的能力)

7. 同事发给你代码,你怎么知道它的bundlename

一般直接看AppScope中的字段就行

8. 鸿蒙如何和网页端通信?

  1. 如果是应用的话,使用web组件和对应的controller的一些接口,如 runJavaScript()runJavaScriptExt()
  2. 如果是元服务的话,使用AtomicServiceWeb来实现,因为2025年1月22日后不支持使用web。还有AtomicServiceWeb没有了web中的如 runJavaScript()runJavaScriptExt()接口,但是它一样可以通过页面的url进行参数的传递和鸿蒙端提供了js sdk,也可以很方便的让h5端调用鸿蒙端的功能

9. 跨域是怎么处理的?

跨域存在于不同源的浏览器和服务器的网络通信中,因为鸿蒙端嵌套了web组件,理解成就是一个浏览器,因此也会存在跨域

为了提高安全性,ArkWeb内核不允许file协议或者resource协议访问URL上下文中来自跨域的请求。因此,在使用Web组件加载本地离线

资源的时候,Web组件会拦截file协议和resource协议的跨域访问。

主要有两种解决方案

  1. 将本地资源替换成网络资源,也就是file协议访问的是本地的资源,我们将本地资源放在网络上,通过http请求的方式来加载,然后在后端设置cors跨域即可。同时,开发者需利用Web组件的onInterceptRequest方法,对本地资源进行拦截和相应的替换
  2. 通过setPathAllowingUniversalAccess 白名单设置一个路径列表。当使用file协议访问该列表中的资源时,允许进行跨域访问本地文件

10. 录音过程中息屏怎么处理?

可以通过申请长时任务,实现在后台长时间运行。长时任务支持的类型,包含数据传输、音视频播放、录制、定位导航、蓝牙相关、多设备互联、WLAN相关、音视频通话和计算任务

开发步骤如下:

  1. 需要申请ohos.permission.KEEP_BACKGROUND_RUNNING权限
  2. 声明后台模式类型(录音等)
  3. 通过 @ohos.resourceschedule.backgroundTaskManager和@ohos.app.ability.wantAgent 进行编码处理

11. 有做过华为支付吗?

需要企业资质、需要在AGC平台上开通服务。

image-20241124085051765

  1. 商户客户端请求商户服务器创建商品订单。
  2. 商户服务器按照商户模型调用Payment Kit服务端直连商户预下单平台类商户/服务商预下单接口。
  3. 华为支付服务端返回预支付ID(prepayId)。
  4. 商户服务端组建订单信息参数orderStr返回给商户客户端。
  5. 商户客户端调用requestPayment接口调起Payment Kit支付收银台。
  6. Payment Kit客户端展示收银台。
  7. 用户通过收银台完成支付,Payment Kit客户端会收到支付结果信息并请求Payment Kit服务端处理支付。
  8. Payment Kit服务端成功受理支付订单并异步处理支付。
  9. Payment Kit服务端将支付结果返回给Payment Kit客户端。
  10. Payment Kit客户端展示支付结果页。
  11. 用户关闭支付结果页后Payment Kit客户端会返回支付状态给商户客户端。
  12. 支付处理完成后,Payment Kit服务端会调用回调接口返回支付结果信息给商户服务端。
  13. 商户服务端收到支付结果回调响应后,使用SM2验签方式对支付结果进行验签。

12. 说一下多线程

参考

image-20241124085159121

13. 你最擅长的是哪个功能哪个模块?

14. 有些功能鸿蒙尚未适配,华为那边回复慢,你会怎么处理?

  1. 商量是否替换解决方案或者砍功能、延期实现功能

15. 在客户那边遇到一些困难,只有你一个人在驻场,如何解决?

  1. 先分析问题的边界,判断是否在自己的能力范围之内,或者开发团队能力范围之内。比如是华为鸿蒙那边的问题还是我们开发团队的问题
  2. 如果不能及时判断出来,随机先安抚客户、然后自己项目团队汇报,随即给出客户对应的解决方案。
  3. 执行解决方案