看表达能力、沟通能力
面试记录:
目前是在职还是离职,如果离职,从上一家公司离职的原因
如果自我介绍工作项目经验讲的不够清楚,可以根据简历上的信息再进一步了解
面试记录:
数据类型 |
概述 |
|
基本类型 |
number |
数值 |
boolean |
布尔 |
|
string |
字符串 |
|
array |
||
Record |
||
Object |
Object类型是所有引用类型的基类型。任何值,包括基本类型的值(它们会被自动装箱),都可以直接被赋给Object类型的变量。 |
|
object |
object类型则用于表示除非基本类型外的类型。 |
|
enum |
枚举 |
|
Union |
union类型,即联合类型,是由多个类型组合成的引用类型。联合类型包含了变量可能的所有类型。 |
|
undefined |
一个未定义或不存在的值 |
|
null |
空 |
|
object |
对象 |
|
Symbol |
独一无二的值 |
|
bigint |
任意大的整数 |
|
any |
任意 |
|
unknown |
未知类型 |
|
void |
没有任何返回值的类型 |
|
never |
永远不存在的类型 |
|
NaN |
parseInt一个非数字字符串,不会走到catch,会直接返回一个NaN |
不用讲全,可以引导讲一下常用的用法和注意事项
延伸问题
区别 |
let |
const |
类型 |
声明变量 |
声明常量 |
赋值 |
可以被多次赋值,最后一次赋值覆盖前面的值 |
只能被赋值1次 |
文档中心
为了提升应用的响应速度与帧率,避免耗时任务对UI主线程的影响,ArkTS提供了异步并发和多线程并发两种处理策略。
Promise async/await
使用场景
用法简单描述
对于异步并发的理解:不开启新线程
TaskPool和Worker均支持多线程并发能力。由于TaskPool的工作线程会绑定系统的调度优先级,并且支持负载均衡(自动扩缩容),而Worker需要开发者自行创建,存在创建耗时以及不支持设置调度优先级,故在性能方面使用TaskPool会优于Worker,因此大多数场景推荐使用TaskPool。
TaskPool偏向独立任务维度,该任务在线程中执行,无需关注线程的生命周期,超长任务(大于3分钟且非长时任务)会被系统自动回收;而Worker偏向线程的维度,支持长时间占据线程执行,需要主动管理线程生命周期。
延伸问题
TaskPool线程间通信,假如传递的是一个对象,这个对象的父类属性和方法在另外一个线程能调用到吗?
答案:调用不到,因为线程间传递对象是,把对象序列化了,序列化再反序列化后,父类的属性和方法就丢失了。
HarmonyOS标准系统支持典型的存储数据形态,包括用户首选项、键值型数据库、关系型数据库。
开发者可以根据如下功能介绍,选择合适的数据形态以满足自己应用数据的持久化需要。
ArkUI框架是鸿蒙(HarmonyOS)中的一个重要组件框架,具有以下几个特点:
有@Entry装饰器的@component组件的生命周期
有@Entry装饰器和无@Entry装饰器@Component组件都有的生命周期
build()
函数之前执行。build()
函数执行完成之后回调该接口,不建议在 onDidBuild
函数中更改状态变量、使用 animateTo
等功能,这会导致不稳定的UI表现。aboutToDisappear
函数在自定义组件析构销毁之前执行。不允许在aboutToDisappear函数中改变状态变量,特别是@Link变量的修改会导致应用程序行为不稳定。说一下顺序
页面又刷新,会走aboutToAppear吗
组件尺寸变化回调
abouttodisappear不适合异步,阻碍回收
两个手势冲突,怎么处理
V1
@State @Prop @Link @ObjectLink
@Provide/@Consume
@Builder 和 @BuilderParam
@Watch 监视数据的变化(第一次不会触发)
@State @Prop @Link哪个性能最差
文档中心
V2
@ObserveV2 @Trace
应用全局的UI状态存储
@Provide
装饰器提供状态,其他需要共享状态的组件通过 @Consume
装饰器获取该状态 。 优点:减少了状态传递的层级,提升了代码的可维护性和可拓展性。 注意事项:确保状态的生命周期与组件树的生命周期一致,避免不必要的UI刷新。UIAbility
实例间的状态共享。 工作原理:AppStorage
与应用的进程绑定,由UI框架在应用程序启动时创建,当应用进程终止,AppStorage
被回收。 优点:适用于需要在整个应用中共享状态的场景。 注意事项:确保状态的生命周期与应用进程一致,避免在应用退出后仍有状态存在。LocalStorage
的生命周期由应用程序决定,当应用释放最后一个指向 LocalStorage
的引用时,LocalStorage
被垃圾回收。 优点:适用于需要在单个UIAbility中不同页面间共享状态的场景。 注意事项:确保状态的生命周期与应用程序的生命周期一致,避免在应用退出后仍有状态存在。页面级UI状态存储
会,因为LocalStorage 是一种用于页面或组件级别的数据存储方式,它允许开发者在页面或组件的生命周期内存储和检索数据。LocalStorage 的数据存储在内存中,因此它的读写速度相对较快。但是,当应用重启后,LocalStorage 中的数据会丢失。
@Provider和@Consumer |
@Provide和@Consume |
|
版本历史 |
V2 |
V1 |
是否本地初始化 |
允许本地初始化,当找不到@Provider 的时候使用本地默认值 |
禁止本地初始化,当找不到对应的@Provide 时候,会抛出异常。 |
支持类型 |
支持 function。 |
不支持 function。 |
观察能力 |
仅能观察自身赋值变化,如果要观察嵌套场景,配合@Trace 一起使用 |
观察第一层变化,如果要观察嵌套场景,配合@Observed 和@ObjectLink 一起使用。 |
命名 |
alias 和属性名alias 是唯一匹配的 key,如果缺省 alias,则默认属性名为 alias。 |
alias 和属性名都为 key,优先匹配 alias,匹配不到可以匹配属性名。 |
从父组件初始化 |
允许 |
禁止 |
支持重载默认开启 |
即@Provider 可以重名,@Consumer 向上查找最近的@Provider。 |
默认关闭,即在组件树上不允许有同名@Provide。如果需要重载,则需要配置 allowOverride。 |
ForEach和LazyForEach都是用于渲染列表的装饰器,它们的区别在于:
ForEach:渲染列表时,会将列表中的每一项都渲染一次,适用于列表项数量较少的情况。
LazyForEach:渲染列表时,只渲染当前可见的列表项,适用于列表项数量较多的情况。
文档中心
上拉加载: 使用pullToRefresh组件可以实现上拉加载更多数据的效果 。该组件支持懒加载,可以通过设置LazyForEach来实现数据的按需加载 。 在使用pullToRefresh组件时,需要将列表组件、绑定的数据对象和scroller对象包含进去,并添加上滑方法。
下拉刷新: 可以使用Refresh组件来实现下拉刷新功能 。刷新逻辑可以在onRefreshing回调方法中执行。 当列表滑动到底部时,可以触发onReachEnd事件回调,用于加载更多数据 。 这些组件和方法可以帮助开发者在鸿蒙(HarmonyOS)中实现流畅的上拉加载和下拉刷新功能,提升用户体验。
文档中心
应用侧可以通过runJavaScript()方法异步调用前端页面的JavaScript相关函数,并通过Promise方式返回脚本执行的结果。runJavaScript需要在loadUrl完成后,比如onPageEnd中调用。
使用Web组件将应用侧代码注册到前端页面中,注册完成之后,前端页面中使用注册的对象名称就可以调用应用侧的函数,实现在前端页面中调用应用侧方法。注册应用侧代码有两种方式,一种在Web组件初始化调用,使用javaScriptProxy()接口。另外一种在Web组件初始化完成后调用,使用registerJavaScriptProxy()接口。
官方文档 三层架构为了“一次开发,多端部署”,项目结构采用三层架构 三层工程结构如下:
错误用法:subscribeEventHandler方法里,使用到this是为undefined
this.subscriber = await commonEventManager.createSubscriber(this.subscriberInfo)
commonEventManager.subscribe(this.subscriber, this.subscribeEventHandler)
正确用法:加上.bind(this)
this.subscriber = await commonEventManager.createSubscriber(this.subscriberInfo)
commonEventManager.subscribe(this.subscriber, this.subscribeEventHandler.bind(this))
原因:bind(this)来强行指定方法体的this为当前对象
任意说个算法
建议层级
面试外包对应的层级
w3对应s4,w4对应s5,老师给一个推荐层级
候选人优势
候选人不足
其他
面试结果