鸿蒙30道高频面试题总结

1.什么是弹性布局?

Flex 容器,弹性布局分为单行布局和多行布局,

  • 单行内:当子元素尺寸总和大于 Flex 容器尺寸是,子元素会自动挤压。
  • 多行内:用wrap属性控制自动换行

2.绝对定位和相对定位的区别?

  • 绝对定位:position,相对父组件左上角进行偏移,不占位置
  • 相对定位:offset,相对自身左上角进行便宜,占位置

3.什么是层叠布局?

  • Stack :实现位置的固定定位与层叠,后一个子元素覆盖前一个子元素
  • 通过 alignContent 来设置子组件的位置

4.@Extend、@Styles、@Builder 区别?

名称

适合

参数

@Styles

抽取 公共样式、事件

不可以传递参数

@Extend

扩展 特定组件样式、事件

可以传递参数

@Builder

抽取 结构、样式、事件

可以传递参数

5.容器组件 Scroll?

可滚动的容器组件,当子组件的布局尺寸超过Scroll的尺寸时,内容可以滚动

// scrollEdge 返回顶部或者底部
this.scroller.scrollEdge(Edfe.Top)
this.scroller.scrollEdge(Edfe.Bottom)

// currentOffset() 获取页面滚动的距离
this.scroller.currentOffset().yOffset//y轴滚动距离
this.scroller.currentOffset().xOffset//x轴滚动距离

//滚动事件  页面滚动时触发
onScroll(()=>{})

6.容器组件Tabs?

通过页签进行内容视图切换的容器组件,每个页签对应一个内容视图。

@Entry
@Component
struct Index {
  build() {
    Tabs() {
      TabContent() {
        //内容区域只能有一个子组件
        text('首页内容')
      }
      .tabBar('首页')//导航栏
    }
  }
}

7.Badge组件?

  • 以附加在单个组件上用于信息的标记(气泡)的容器组件(比如微信消息提示来消息了)
Badge({ 
  count:0,//0不显示  大于0显示
  value: '0', //设置字符串  可以是数字 会都显示
  position: BadgePosition.Right,//气泡的位置 
  style: {} 
}) 
{
  //单个子元素
}

8.new操作符做了什么

1.创建一个新对象

2.函数内部的this指向这个对象

3.执行构造函数代码

4.返回新对象

9.枚举(enum)是什么,他的优势,应用案例。枚举和长乱搞枚举的区别

是一种特殊的数据类型,约定变量只能在一组数据范围内选值

  • 比如:我们把颜色给变量,下次我们直接写变量就可以了(颜色值是常用主色)

鸿蒙30道高频面试题总结_第1张图片

鸿蒙30道高频面试题总结_第2张图片

enum Color {
    Red,
    Green,
    Blue
}

let selectedColor: Color = Color.Red; 

枚举和常量枚举的区别:

  • 枚举可以包含计算得出的值,而常量枚举则在编译阶段被删除,并且不能包含计算得出的值,他只能包含常量成员。
  • 常量枚举在编译后会被删除,而普通枚举会生成真实的对象。

10、类型断言

编辑器识别不了类型,自己能识别就用 as 强制指定类型(自己不确定不要用!!!)

let Value : any = "10"
let Length: number = (Value as ).lngth

11、ArkTS和TS有什么区别?

类型系统

TS: 变量类型不用提前定,写的快,适合小型项目,大型项目容易出类型错误。

ArkTS:静态类型,编译差错,用于大型鸿蒙应用保障数据交互

类和继承

TS:用“原型链”实现复用,简单场景好用,复杂的继承关系不好管理。

ArkTS:类、接口更严谨,大型应用扩展起来更方便。

装饰器

TS:装饰器还在实验阶段,用起来受限

ArkTS:已经成熟,用来配置鸿蒙组件的

模块系统

TS:很麻烦,模块规范多,不同环境要选不同规范

ArkTS:直接用ES6的规范+鸿蒙自己规定的规范,效率更高

应用开发语法

TS:通过操作网页DOM元素实现交互,这种适合传统网页开发

ArkTS:用声明式语法构建UI(直接定义界面结构),开发鸿蒙应用更快更简单

12、ArkUI的核心设计思想是什么?

  • 声明式开发

通过状态驱动视图更新

  • 跨平台能力

一套代码能跑手机、平板、手表、电视等设备。

通过自适应布局,自动适配不同屏幕大小,开发者不用为每个设备单独写布 局代码。

  • 用户体验优先

优化渲染引擎让界面滑动更流畅,提供统一的设计规范组件库,保证多端一致。还支持JavaScript/TS/Java等多语言开发,还能自定义组件插件,方便扩展功能。

13、什么是线性布局?

通过线性容器 Row 和 Column 构建,Row容器内的子元素按照水平方向排列,Column容器内的子元素按照垂直方向排列。根据不同的排列方向,开发者可以选择合适的容器创建线性布局。

14、线性布局对齐方式?

主轴:justifyContent()

.start : 默认,组件靠左或靠上排列

.end : 组件靠右/下排列

.center : 组件居中排列

.space-between : 两端对齐,中间间距均分

space-around : 每个组件左右/上下间距相等

交叉轴:alignltems()

.start : 顶部对齐

.end :底部对齐

.center : 垂直居中

.stretch : 组件拉伸填满交叉轴空间

15、什么是弹性布局?

弹性布局分为单行布局和多行布局。默认情况下,Flex 容器中的子元素都排在一条线上。子元素尺寸总和大于 Flex 容器尺寸时,子元素尺寸会自动挤压。

wrap 属性控制当子元素主轴尺寸之和大于容器主轴尺寸时,Flex是单行布局还是多行布局。在多行布局中自动换行

16、Flex布局和Column/Row布局如何选择?

Flex更适合复杂布局,Column/Row用于线性布局,简单布局。

17、绝对定位和相对定位的区别?

绝对定位:position , 相对父组件左上角进行偏移,不占位置

相对定位:

18、什么是层叠布局?

层叠布局通过Stack 容器组件实现位置的固定定位与层叠,容器中的子元素后一个覆盖前一个子元素。

通过 alignContent 来设置子组件的位置

场景:图片上叠加文字标签

按钮右上角显示未读消息红点

弹窗浮层覆盖背景

19、ArkUI中常用的容器组件?

Column / Row / Flex / Stack / List / Grid / Swiper / Tabs /Popup

20、@Extend、@Style、@Builder区别?

名称

适合

参数

@Styles

抽取 公共样式、事件(只能在页面全局内使用,不能export)

不可以传递参数

@Extend

扩展 特定组件样式(不能在@Component组件内部使用)、事件

可以传递参数

@Builder

抽取 结构、样式、事件

可以传递参数

21、组件生命周期

系统组件

onAppear:当组件出现在屏幕上时触发

onDisAppear: 当组件从屏幕消失时候触发

自定义组件(未被Entry修饰的组件)

AboutToAPPear: 组件即将展示 场景:进行预加载或初始化

AboutToDisappear: 组件即将消失触发 用处:清理数据

AboutToReuse :组件即将被复用 用处:

自定义组件(被Entry修饰)

onPageShow: 页面展示时触发

onPageHide: 页面隐藏时触发

onBackPress:返回操作时触发

22、在ArkTS中,如何处理组件间的通信7?

父传子(单向)

使用 @Prop 装饰器。子组件接收只读属性,父组件更新子组件同步更新。

子传父

@Link:双向数据绑定,子组件可以修改父组件状态。

跨层级通讯

使用@Provide 和 @Consume。祖先组件用 @Provide 提供数据,后代组件用 @Consume接收。

23、如何在ArkTS中实现应用级状态管理?

AppStorage:

跨页面,跨UIAbility状态共享

通过@StorageLink 和 @StorageProp 实现双向/单向同步

LocalStorage:

页面级状态管理,适用于同一页面内多组件共享状态

通过@LocalStorageLink 和 @LocalStoragePrp绑定

24、说一说数组常用的API

push()-在数组末尾加上一个或多个元素

pop()-删除数组的最后一个元素,并返回那个元素

shify()-删除数组的第一个元素,并返回那个元素

unshift()-在数组的开始添加一个或多个元素,并返回新的长度

slice()-返回数组的一个浅拷贝

splice() -通过删除现有元素和/或添加新元素来更改一个数组的内容

concat()-链接两个或多个数组,返回一个新数组

join()-将数组中的所有元素转换为一个字符串

reverse()-颠倒数组中元素的顺序

sort()-对数组的元素进行排序

forEach()-遍历数组中的每个元素并执行回调函数

map()-创建一个新数组,其包含通过所提供函数实现的测试的所有元素

reduce()-对数组中的每个元素执行一个由您提供的reducer函数

reduceRight()-对数组中的每个元素执行一个有您提供的reducer函数

25、typeof 与 instanceof 的区别

作用不同

typeof 用于判断基本数据类型,对于对象类型只能判断“object”无法区分对象类型。

instanceof 判断对象是不是某个构造函数或类的实例

返回值不同

typeof 返回字符串

instanceof 返回布尔值,原型链

26、什么是联合类型和交叉类型?

联合类型表示一个值可以是多种类型中的一种,而交叉类型表示一个新类型,他包含了多个类型的特性。

27、const和readonly的区别?

28、interface可以给Function/Array/Class做声明吗?

29.说一说静态类型和动态类型有什么区别?

30、ArkTS中的模块化是如何工作的,举例说明?

31.AppStorage 和 PersistentStorage 的区别

  • 核心区别体现在 数据生命周期使用场景

特性

AppStorage

PersistentStorage

数据存储位置

内存

设备本地存储

生命周期

应用进程存在期间

持久化(跨应用启动)

数据共享范围

应用内全局

应用内全局(但需通过AppStorage访问)

持久化能力

是(自动同步)

典型使用场景

临时状态、页面间参数传递

用户配置、登录状态等需要保留的数据

你可能感兴趣的:(harmonyos,面试,华为)