一、ArkTS 语言基础(重中之重)
ArkTS 是鸿蒙应用的官方主力开发语言,它是 TypeScript 的超集。
1. ArkTS 的起源与特点
- 面试点:ArkTS 和 TypeScript/JavaScript 的关系?
-
回答要点:
- ArkTS 基于 TypeScript,继承了 TS 的所有特性(静态类型、类、接口、泛型等)。
- 鸿蒙对 TS 进行了扩展,主要是声明式UI和状态管理的增强。
- 核心特点:声明式UI、状态驱动、高性能。
2. 基础语法(必须熟练掌握)
-
变量声明:
let和const的区别。 -
数据类型:
number,string,boolean,Array,Object,null,undefined。ArkTS 是强类型语言,理解类型注解的重要性。let name: string = "鸿蒙"; let isDone: boolean = false; let list: number[] = [1, 2, 3]; -
函数:如何定义函数,可选参数,默认参数,箭头函数。
// 普通函数 function greet(name: string): string { return `Hello, ${name}`; } // 箭头函数 const add = (a: number, b: number): number => a + b; -
类与对象:
class,constructor, 属性,方法,继承(extends)。这是面向对象的基础。class Person { name: string; constructor(name: string) { this.name = name; } sayHello() { console.log(`Hello, I'm ${this.name}`); } } -
模块化:如何使用
import和export来导入导出模块。
3. ArkTS 特有的核心特性(面试高频区)
a. 装饰器
装饰器是 ArkTS 中非常重要的语法,用于装饰类、结构体、方法、属性,赋予它们特定的能力。
- @Entry:装饰页面的入口组件。
-
@Component:装饰自定义组件。必须掌握,每个UI组件都是一个被
@Component装饰的 struct。 -
@State:重中之重!
-
面试点:
@State装饰器的作用是什么? -
回答要点:
- 它装饰的变量是状态数据。
- 当状态数据发生变化时,会触发UI的自动更新(重新渲染)。
- 这是数据驱动UI的核心体现。
@Component struct MyComponent { @State count: number = 0; // count变化,UI自动更新 build() { // UI描述 } } // @State 只在鸿蒙/ArkTS组件内用, 不能跨组件
-
面试点:
b. 状态管理
除了 @State,还有其他几个关键的状态管理装饰器,理解它们的区别和应用场景是面试的关键。
- @State:组件内部的状态,仅在本组件内使用。
- @Prop:子组件中,用于接收父组件传递过来的状态,并且是单向绑定。父组件变化会通知子组件,但子组件修改它不会影响父组件。
- @Link:子组件中,用于与父组件双向绑定的状态。父子组件任何一方修改,都会同步到另一方。
- @Provide 和 @Consume:跨组件层级的状态共享,可以理解为“一对多”的提供和消费关系。
面试常考题:@State, @Prop, @Link 的区别?请举例说明。
二、ArkUI 声明式开发范式
ArkUI 是鸿蒙的UI开发框架,采用声明式语法。
1. 基本概念
- 面试点:声明式UI 和 命令式UI(如 Android 的 Java/Kotlin)的区别?
-
回答要点:
-
命令式:手动用代码操作UI组件(
findViewById,setText)。你需要“命令”UI每一步该怎么做。 -
声明式:你只需要描述UI应该长什么样子(状态+视图),框架负责根据状态自动渲染和更新。当状态(如
@State变量)改变时,UI自动更新。
-
命令式:手动用代码操作UI组件(
2. 组件和构建函数
-
@Component 和
build()函数:每个组件必须用@Component装饰,并且必须有一个build()函数。build()函数中描述了组件的UI结构。@Component struct HelloComponent { build() { // 必须在build函数中描述UI Column() { Text('Hello World') .fontSize(30) } } }
3. 常用组件(必须会用的)
-
布局组件:
Column(列),Row(行),Stack(堆叠),Flex(弹性布局),List(列表)。 -
基础组件:
Text,Image,Button,TextInput。
面试点:如何实现一个常见的布局,例如:顶部标题栏,中间可滚动列表,底部选项卡?
三、生命周期
了解组件的生命周期是应用开发的基础。
-
页面生命周期:
onPageShow,onPageHide,onBackPress。
@Component
struct MainPage {
onPageShow() {
console.log('页面显示')
}
onPageHide() {
console.log('页面隐藏')
}
onBackPress(): boolean {
console.log('返回键被按下')
// 返回 true 表示拦截返回,false 表示允许返回
return false
}
build() {
Column() {
Text('页面内容')
}
}
}
-
自定义组件生命周期:
aboutToAppear(组件即将出现时调用),aboutToDisappear(组件即将销毁时调用)。
@Component
struct MyCard {
aboutToAppear() {
// 组件刚显示时执行,比如请求数据、埋点
console.log('组件出现')
}
aboutToDisappear() {
// 组件销毁前执行,比如清理定时器、取消订阅
console.log('组件销毁')
}
build() {
// 组件内容
Text('自定义卡片')
}
}
面试点:aboutToAppear 里适合做什么操作?(例如:初始化数据,请求网络)。
四、常用功能(展示综合能力)
-
路由导航:如何使用
router实现页面跳转、传参和返回。 -
网络请求:知道如何使用
@ohos.net.http模块发起 HTTP 请求。 -
数据存储:了解轻量级存储
Preferences的基本用法。
给初学者的面试准备建议
- 理解概念,而非死记硬背:重点理解“声明式”、“状态驱动”、“单向数据流”这些核心思想。
-
动手实践:在 DevEco Studio 中创建一个最简单的 “Hello World” 应用,然后逐步添加功能:
- 做一个计数器(使用
@State和Button)。 - 做一个待办事项列表(使用
@State,List,TextInput)。 - 尝试组件拆分,使用
@Prop或@Link在父子组件间传递数据。
- 做一个计数器(使用
- 准备项目:哪怕是一个很小的、完整的项目(如笔记App、天气App),都能极大提升你的竞争力。在面试时,可以清晰地讲解你的代码结构和设计思路。
- 官方文档是你的最佳伴侣:遇到问题,首先查阅 鸿蒙开发者官方文档。里面的概念和示例都非常清晰。
模拟面试问题清单
- 请简单介绍一下 ArkTS。
-
@State和@Link有什么区别?分别在什么场景下使用? - 请解释一下 ArkUI 的声明式开发范式。
- 如何在鸿蒙应用中实现页面跳转?
- 当组件的状态数据发生变化时,UI是如何更新的?
- 你如何学习鸿蒙开发的?做过哪些练习或项目?
- (现场编码)请写出一个简单计数器的组件代码。