问题和通俗易懂的答案,覆盖鸿蒙开发的核心知识点和实际场景,方便面试时快速评估候选人能力:
一、基础概念(必问)
-
鸿蒙和安卓最大的区别是什么?举个实际例子。
答案:鸿蒙是“分布式操作系统”,比如你可以用手机操控电视、手表联动,数据自动同步(比如手机导航流转到车机),安卓做不到这种跨设备协作;另外鸿蒙系统更轻量,适合智能家居等小内存设备。 -
鸿蒙的HAP包是什么?分哪几种?
答案:HAP就是鸿蒙的应用安装包,类似安卓的APK。分三种:- Release包(.hap):正式发布用,删除了调试信息;
- Debug包(.hap.debug):测试用,带日志;
- Preview包(.hap.preview):临时测试用,不能上架。
-
鸿蒙的“微内核”是什么?为什么用这个设计?
答案:微内核只保留最基础的功能(比如任务调度),其他功能(比如文件系统)独立运行。好处是更安全(一个模块崩溃不影响整体)、系统更稳定,适合物联网设备。
二、开发技能(重点考察)
-
鸿蒙的页面和组件生命周期有哪些?
答案:- 页面生命周期:
onPageShow
(显示)、onPageHide
(隐藏)、onBackPress
(返回键); - 组件生命周期:
aboutToAppear
(创建前)、aboutToDisappear
(销毁前)。
- 页面生命周期:
-
父子组件怎么传值?兄弟组件呢?
答案:- 父传子:用
@Prop
(单向,子改不了父)或@Link
(双向,子能改父); - 子传父:通过父组件定义的方法回调;
- 兄弟组件:通过共同的父组件中转,或者用全局状态管理(比如AppStorage)。
- 父传子:用
-
如何保存用户的登录状态?
答案:- 小数据用
Preferences
(类似安卓的SharedPreferences); - 大数据用
KV-Store
键值数据库; - 复杂数据用
RelationalStore
关系型数据库(类似SQLite)。
- 小数据用
三、实际场景(看实战经验)
-
鸿蒙的UI布局和安卓有什么不同?
答案:鸿蒙用ArkUI框架,布局用声明式语法(类似Flutter),比如:Column() { // 纵向排列 Text('Hello').fontSize(20) Button('Click').onClick(() => { ... }) }
安卓是用XML写布局,鸿蒙更简洁。
-
遇到页面跳转卡顿,可能是什么原因?怎么优化?
答案:- 原因:页面资源过大、网络请求阻塞、动画未异步执行;
- 优化:用
router.replaceUrl
预加载下一页、图片压缩、耗时操作放子线程。
-
鸿蒙如何实现跨设备调用(比如手机调用电视的摄像头)?
答案:- 用
分布式任务调度
:先发现设备(deviceManager
),然后通过Ability
调用远程服务; - 数据通过
分布式数据管理
自动同步。
- 用
四、高级问题(考察深度)
-
鸿蒙的Stage模型和FA模型区别是什么?
答案:- FA模型:早期版本,适合简单应用;
- Stage模型:推荐用!组件生命周期独立,更适合复杂应用和跨设备协同。
-
如何实现一个拖拽排序的列表?
答案:- 用
List
组件 +onTouch
事件监听拖动位置; - 通过
@State
更新数据源,触发列表重新渲染; - 复杂交互可以用
@Animatable
添加动画。
- 用
-
应用启动白屏时间长,如何优化?
答案:- 减少首屏资源加载(懒加载非必要组件);
- 用
SplashScreen
设置启动页背景图; - 预加载数据(比如用户信息)。
五、行为问题(看潜力和态度)
-
如果鸿蒙官方文档和实际代码效果不一致,你怎么办?
答案:- 先确认文档版本是否过时;
- 查社区(比如官方论坛、CSDN)是否有类似问题;
- 自己写Demo验证,反馈给官方。
-
最近鸿蒙更新了哪些新特性?你研究过吗?
答案:- 示例:ArkTS语言增强、Stage模型推广、分布式硬件池(比如调用多设备算力);
- 考察候选人是否持续学习。
六、终极验证(压轴题)
- 现场写一段代码:实现一个按钮,点击后数字+1,并保存到本地。
答案:@Entry @Component struct CounterPage { @State count: number = 0 // 状态管理 private storage = Preferences.getPreferences() // 持久化 async aboutToAppear() { this.count = await this.storage.get('count', 0) // 读取保存的值 } build() { Column() { Text(`Count: ${this.count}`).fontSize(30) Button('Add +1') .onClick(() => { this.count++ this.storage.put('count', this.count).flush() // 保存到本地 }) } } }
总结
- 新手:能答对基础概念和简单代码;
- 中级:能结合实际项目说优化方案;
- 高手:对分布式设计和Stage模型有深入理解,代码简洁高效。