HarmonyOS大厂面试总结大全
·
目录:
-
- 1、@State装饰器响应式失效原因、如何解决纵纵
- 2、如何复用样式
- 3、@Styles、@Extend有什么区别
- 4、@Builder传参响应式失效如何解决
- 5、如何实现全局Builder
- 6、如何侦听@State的数据变化
- 7、文本组件内容溢出如何解决
- 7、鸿蒙实现并发的几种方式
- 8、prop和link的区别
- 9、AppStorage/LocalStorage有什么区别?
- 10、@StorageProp 和 @StorageLink的区别
- 11、为什么不建议使用 @StorageLink 和 AppStorage 的双向同步机制实现事件通知?
- 12、PersistentStorage的用涂?
- 13、购物车逻辑为啥都放在index.ets中实现而不写成组件实现?
- 14、鸿蒙代码的组织架构
- 15、公共层(Common)、Product(产品配置)和Feature(功能模块)详细介绍
- 16、鸿蒙实现多线程处理的方式
- 17、鸿蒙实现多线程之间的通信
- 18、TaskPool(任务池) vs Worker(工作线程)
1、@State装饰器响应式失效原因、如何解决纵纵
鸿蒙规定一维数据变化有响应式,二维没有
解决:修改一维数据或者通过 @Observed、@ObjectLink装饰一下 放到子组件中用或者入v2版
2、如何复用样式
通过装饰器 @Styles、@Extend
3、@Styles、@Extend有什么区别
@Extend更强 支持font-size、font-weigth等等、并且可以传递参数
4、@Builder传参响应式失效如何解决
可以不传直接组件状态
或者引用传参(就是传对象)
5、如何实现全局Builder
wrapBuilder函数把@Builder包括导出就行
6、如何侦听@State的数据变化

7、文本组件内容溢出如何解决



其他方式自行参考官方文档。
7、鸿蒙实现并发的几种方式

8、prop和link的区别

9、AppStorage/LocalStorage有什么区别?

10、@StorageProp 和 @StorageLink的区别

11、为什么不建议使用 @StorageLink 和 AppStorage 的双向同步机制实现事件通知?

解决方案:
12、PersistentStorage的用涂?


13、购物车逻辑为啥都放在index.ets中实现而不写成组件实现?



如果是大型项目建议做功能拆分:
14、鸿蒙代码的组织架构


15、公共层(Common)、Product(产品配置)和Feature(功能模块)详细介绍










16、鸿蒙实现多线程处理的方式




17、鸿蒙实现多线程之间的通信

18、TaskPool(任务池) vs Worker(工作线程)
一、什么是 TaskPool?
TaskPool 是一个轻量级的并行任务调度框架,你可以把它理解为鸿蒙版的“线程池”或“多线程编程工具”。它的设计目的是为了简化并发编程,提高多核CPU的利用率,同时保证线程安全。
核心特点:
-
轻量高效:相比传统线程,创建和销毁的开销极小。
-
自动调度:系统自动负责任务的负载均衡和线程管理,开发者无需关心底层线程。
-
生命周期独立:TaskPool 任务的执行不受 UIAbility 组件生命周期的制约,即使页面进入后台,任务也可以继续执行(但有系统资源管控)。
-
用法简单:使用 execute() 方法即可投递任务。
二、基本使用流程
使用 TaskPool 主要包括三个步骤:1. 定义任务函数 → 2. 投递任务 → 3. 处理返回结果。
示例 :批量处理任务数组(常用场景)
import taskpool from '@ohos.taskpool';
// 数据处理任务函数
function processItem(item: string): string {
console.log(`TaskPool: processing item ${item}`);
// 模拟耗时操作
for (let i = 0; i < 1000000; i++) {
// 空循环模拟计算
}
return `Processed: ${item.toUpperCase()}`;
}
@Entry
@Component
struct BatchTaskExample {
@State results: string[] = [];
runBatchTasks() {
const sourceData: string[] = ['apple', 'banana', 'cherry', 'date'];
let tasks: taskpool.Task[] = [];
// 为每个数据项创建任务
sourceData.forEach((item: string) => {
let task = new taskpool.Task(processItem, item);
tasks.push(task);
});
// 批量执行所有任务
taskpool.execute(tasks).then((rets: string[]) => {
this.results = rets;
console.log(`TaskPool: all batch tasks finished: ${JSON.stringify(rets)}`);
}).catch((err: Error) => {
console.error(`TaskPool: batch tasks error: ${err.message}`);
});
}
build() {
Column({ space: 15 }) {
Button('批量处理数据')
.onClick(() => {
this.runBatchTasks();
})
ForEach(this.results, (item: string) => {
Text(item)
.fontSize(16)
.margin(5)
})
}
.padding(20)
}
}


更多推荐


所有评论(0)