马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
- ArkTS和TS有什么区别
ArkTS 在很大水平上鉴戒了 TS 的语法,而且延用了诸多 ES6 的方法和属性。像常用的
Object.keys,还有字符串以及数组相干的方法等都有所延用。
然而,ArkTS 有着更为严苛的规范:
a. 在动态范例方面,它险些举行了全面克制。比方解构赋值在 ArkTS 中是被禁用的;
b. 延展运算符只能应用于数组,不能用于其他场景;
c. 克制利用 call/apply/bind 这些方法来改变 this 的指向;
d. 字面量范例在 ArkTS 中也无法利用;
e. any 和 unknown 范例同样被禁用。
f. 要求必须明白声明一些数据的范例,好比用 State 修饰的变量就须要明白其范例。
总的来说,ArkTS 固然鉴戒了 TS 的一些优势之处,但出于对性能的思量,屏蔽了 TS 在范例方面大概带来的一些短板,它在继承与创新中找到了一个独特的平衡点,以满意鸿蒙体系开辟等场景下对于高效、稳固、安全编程的要求。
- ArkUI的焦点计划头脑是什么
● 声明式开辟
○ ArkUI接纳声明式UI范式,通过状态驱动视图更新(如React/Vue)。
● 跨平台本领
○ 一套代码能跑手机、平板、手表、电视等装备。
○ 通过自适应布局,自动适配差异屏幕巨细,开辟者不消为每个装备单独写布局代码。
● 用户体验优先
○ 优化渲染引擎让界面滑动更流畅,提供同一的计划规范组件库(好比按钮、弹窗样
式同一),保证多端体验划一。
别的, 它支持 JavaScript/TS/Java 等多语言开辟,还能自界说组件插件,方便扩展功能。
- 什么是线性布局
● 线性布局(LinearLayout)是开辟中最常用的布局,通过线性容器 Row 和 Column 构建。
● Column容器内子元素按照垂直方向排列,Row容器内子元素按照水平方向排列。
● 根据差异的排列方向,开辟者可选择利用Row或Column容器创建线性布局
口语化表达:
简朴来说,它能让界面里的组件按照直线方向排列。这个方向有两种,要么水平排,要么垂直排。
要是选水平方向,那组件就从左到右依次摆开;选垂直方向呢,组件就从上往下一个个排列。
用线性布局的时间,你还能控制组件之间的间距、对齐方式啥的。好比说,让组件在水平方向上左对齐、居中对齐大概右对齐,垂直方向上也能这么操纵。
像做个简朴的菜单,内里有一排按钮,用水平线性布局就挺符合;要是有个列表,一个挨着一个往下排,垂直线性布局就派上用场啦。
- 线性布局对齐方式
ArkUI 线性布局的对齐方式重要分两类:
● 主轴对齐(沿排列方向)
○ start:默认,组件靠左(水平)或靠上(垂直)排列。
○ end:组件靠右 / 下排列。
○ center:组件居中排列。
○ space-between:两头对齐,中央间距均分。
○ space-around:每个组件左右 / 上下间距相等(两头留一半间距)。
● 交叉轴对齐(垂直方向)
○ start:顶部对齐(水平布局时)。
○ end:底部对齐。
○ center:垂直居中。
○ stretch:组件拉伸填满交叉轴空间(默认)。
例子:水平布局下,justifyContent: space-between会让按钮左一个右一个,中央自动留白;alignItems: center会让所有按钮垂直居中。
- 什么是弹性布局
● 弹性布局分为单行布局和多行布局。
○ 默认环境下,Flex 容器中的子元素都排在一条线(又称“轴线”)上。
○ 子元素尺寸总和大于 Flex 容器尺寸时,子元素尺寸会自动挤压。
○ 支持主轴对齐(justifyContent)和交叉轴对齐(alignItems),好比让按钮在容器
居中或两头对齐。
● 例子:一个商品列表,标题和代价用弹性布局,标题会自动占据剩余空间,代价固定
宽度,团体自适应屏幕巨细。
- Flex布局用过哪些装饰器,分别先容一下
● 简朴排列选 Column/Row
如果只是单纯的一行排开(Row)或一列堆叠(Column),用 Column/Row 更简朴。好比做个水平导航栏,直接用 Row 设置间距就行,代码量少。
● 复杂布局用 Flex
须要弹性分配空间时(如让某个组件撑满剩余宽度),大概须要灵活控制对齐方式(如两头对齐、自动换行),Flex 布局更符合。好比商品列表里的代价和形貌,代价固定宽度,形貌用 flexGrow:1 自动扩展。
● 性能与风俗考量
○ Column/Row 本质是线性布局,渲染性能略优,但差异不大。
○ 如果团队认识传统布局方式,Column/Row 更易上手;如果风俗 Web 的 Flexbox,
直接用 Flex 布局更随手。
● 例子:
○ 简朴的垂直列表 → Column
○ 自适应宽度的按钮组 → Flex(加 flexWrap: wrap 实现换行)
- 什么是层叠布局(堆叠)
● 层叠布局通过 Stack 容器组件实现位置的固定定位与层叠,容器中的子元素依次入栈,后一个子元素覆盖前一个子元素,子元素可以叠加,也可以设置位置.
● 通过 alignContent 来设置子组件的位置
● 常用于须要视觉覆盖的场景,比方:
○ 图片上叠加笔墨标签
○ 按钮右上角表现未读消息红点
○ 弹窗浮层覆盖配景
- ArkUI中常用的容器组件
Column / Row / Flex / Stack / List / Grid / Swiper / Tabs / Popup
- @Extend、@Styles、@Builder 区别
- 网格布局 Grid/GridItem
● 在 ArkUI 里,网格布局由Grid和GridItem共同利用,能将界面元素按二维网格列
● Grid是用来创建网格布局的容器,它可以界说网格的团体布局和属性。常用属性:
○ columns:设置网格的列数。比方设置为 3,就会将网格布局分别为 3 列。
○ spacing:指定网格项之间的间距,既可以是一个同一的值,也能分别设置水平
/垂直间距。
○ rows:可设置网格的行数,不外通常可以根据子组件数量和列数自动盘算。
○ direction:决定网格的排列方向,有水平(FlexDirection.Row)和垂直
(FlexDirection.Column)两种。
● GridItem是Grid容器中的子组件,用于放置详细的内容,如文本、图片等。
○rowStart、rowEnd、columnStart、columnEnd:可以控制GridItem在网格中占据的
行和列范围,实现凌驾多个网格单位格的布局。
- 容器组件 Scroll
Scroll组件可以将其内部的子组件包裹起来,当子组件的尺寸超出Scroll组件的可视区
域时,用户可以大概通过滚动操纵来检察完整内容,就像手机上浏览长文章大概商品列表那样。
● 常用属性:
○ scrollDirection:用于指定滚动方向,有水平(ScrollDirection.Horizontal)和垂直(ScrollDirection.Vertical)两种,默认是垂直方向。
○ scrollBar:控制滚动条的表现,可设置为表现(ScrollBar.On)或埋伏(ScrollBar.Off)。
○ friction:调治滚动时的摩擦力,影响滚动的顺滑水平。
● 应用场景:
○ 长文章阅读:消息、小说等应用中,文章内容较长,利用Scroll组件能让用户流畅地滚动阅读。
○ 商品列表浏览:电商应用的商品展示列表,当商品数量较多时,可通过滚动检察更多商品。
○ 图片轮播:在一些图片展示场景中,水平滚动的Scroll组件可以实现图片的轮播结果。
- 容器组件Tabs
● 通过页签举行内容视图切换的容器组件,每个页签对应一个内容视图。
● 构成属性
○ TabBar:包罗多个Tab标签,用于表现每个标签页的标题,用户点击这些标签来切换内容。
○ TabContent:与每个Tab标签相对应,用于放置详细的内容,如文本、图片、列表等。
● 常用属性
○ selectedIndex:指定当前选中的标签页索引,从 0 开始计数。通过设置这个属性,可以控制默认表现的标签页,也可以在代码中动态改变它来切换标签页。
○ barPosition:设置TabBar的位置,有顶部(BarPosition.Top)和底部(BarPosition.Bottom)两种选择。
● 应用场景
○ 多功能应用:如交际应用,大概有消息、接洽人、动态等多个功能模块,利用Tabs组件可以方便用户在这些模块之间切换。
○ 内容分类展示:在消息应用中,可将差异范例的消息(如时政、娱乐、体育等)以标签页的情势展示,用户可以快速切换检察差异范例的消息。
- Badge组件
● 以附加在单个组件上用于信息标志(气泡)的容器组件.
14.怎样设置组件的垂直水平居中
15.页面布局上的性能和内存上的注意事项
● 利用row/column+layoutweight代替flex容器利用
● scroll嵌套list/grid容器时,要设置容器的宽高,数组数据渲染只管利用LazyForeach渲染item
● 组件的显隐设置,要利用if语句来判断,制止利用visibility
● list/grid容器要根据详细场景来利用cachecount,制止卡顿
详细业务场景:
电商 App 商品展示页
● 商品列表布局
○ 制止太过嵌套:商品列表通常利用 List 组件出现。若在商品卡片内太过嵌套 Column、Row 等布局容器来展示商品信息(如标题、代价、图片等),会使渲染变慢。好比本来一个商品卡片用三层嵌套就能展示清晰,若写成五层嵌套,就会增长渲染负担。应只管扁平化布局布局,把商品信息展示拆分成简朴组件组合。
○ 公道利用布局容器:List 组件在处置惩罚大量商品数据时,本身具备懒加载特性,仅渲染当前可见解区的商品卡片。若不利用 List 而用 Column 逐个添加商品组件,会一次性加载所有商品信息,占用大量内存。
● 商品图片展示
○ 图片压缩:商品图片尺寸大,会导致加载缓慢且占用大量内存。好比一张高清商品图大概有几兆巨细,应在上传前对图片举行压缩处置惩罚,同时根据差异装备分辨率提供差异尺寸图片。
○ 图片懒加载:商品列表中大概有很多图片,接纳懒加载机制,当商品图片滚动到可视地域时再加载,能淘汰初始加载时的内存占用和网络哀求。
交际 App 动态信息流页
● 动态内容布局
○ 淘汰不须要的组件创建:动态信息流中每条动态大概包罗文本、图片、视频等内容。在利用 ForEach 渲染动态列表时,若每次数据更新都重新创建整个动态组件,会消耗大量资源。可通过设置 key 属性复用组件,如根据动态的唯一 ID 设置 key,ArkUI 就能辨认哪些组件可复用。
○ 优化数据绑定:动态的点赞数、批评数等数据会实时更新,若将这些数据全部绑定到界面,频仍更新会触发界面重新渲染。可将部门数据(如点赞数)缓存起来,设置一个更新阈值,到达肯定阈值再更新界面表现,淘汰不须要的渲染。
● 视频播放组件
○ 实时开释不再利用的组件:当用户滑动动态列表,视频组件滑出可视地域时,应实时开释视频资源,制止内存走漏。可监听组件的表现状态,当不可见时制止视频播放并开释相干资源。
消息资讯 App 消息列表页
● 消息条目布局
○ 制止太过嵌套:消息条目通常包罗标题、择要、图片等信息。若用复杂的嵌套布局来展示这些内容,会影响渲染性能。可接纳简朴的 Column 和 Row 组合布局,将标题、择要、图片等信息公道排列。
○ 公道利用布局容器:消息列表利用 List 组件展示,若消息有差异分类,可利用 Group 组件举行分组,制止利用过于复杂的布局容器。
● 广告展示
○ 制止太过响应式数据:广告部门大概会有一些动态展示内容,如倒计时、广告轮播等。对于一些静态的广告信息,如广告标题、形貌等,利用普通变量存储,而不是响应式数据,淘汰内存开销。
16.枚举常见的ArkTS装饰器及其作用。
● 组件级装饰器:
○ @State:组件内状态管理,数据变革触发UI革新。
○ @Prop:单向同步父组件的状态,子组件修改不影响父组件。
○ @Link:与父组件双向同步,修改会同步到父组件。
○ @Provide/@Consume:跨层级组件状态同步,无需逐层转达。
● 应用级装饰器:
○ @StorageLink/@StorageProp:与AppStorage(应用级数据库)双向/单向同步。
○ @LocalStorageLink/@LocalStorageProp:与页面级LocalStorage同步。
17.在 ArkTS 中,怎样处置惩罚组件间的通讯
● 父传子
○ 利用 @Prop 装饰器。父组件将数据作为属性转达给子组件,子组件接收只读属性,父数据更新子组件同步更新。
● 子传父
○ @Link:双向数据绑定,子组件可修改父组件状态。
● 跨层级通讯
○ 利用 @Provide 和 @Consume。祖先组件用 @Provide 提供数据,子女组件用 @Consume 消耗。
18.值范例和引用范例的区别
- 是什么
● ArkTS中数据分为值范例(根本数据范例)和引用范例(复杂数据范例)
- 区别
● 存储位置不一样
值范例的会保存在栈内存中
引用范例的变量名(地点)会存在栈内存中,但是值会存储在堆内存中
● 赋值方式不一样
值范例的直接赋值,赋的值本身
引用范例赋值,赋的是地点(影响=>修改值会相互影响=>办理:浅拷贝或深拷贝)
19.怎样在ArkTS中实现应用级状态管理
● AppStorage:
○ 全局单例对象,用于跨页面、跨UIAbility的状态共享
○ 通过@StorageLink和@StorageProp实现双向/单向同步。
● LocalStorage
○ 页面级状态管理,实用于同一页面内多组件共享状态
○ 通过@LocalStorageLink和@LocalStorageProp绑定。
20.@Watch装饰器的作用和利用场景
● 作用:监听状态变量变革,触发回调函数。
● 场景:
○ 数据变革时实行副作用(如日志 记载、网络哀求)。
○ 与@Link或@State共同,实现复杂状态逻辑(如购物车总价盘算)。
21、ArkTS中应用、页面、组件的生命周期有哪些
● 应用生命周期:
a. onCreate:应用初次创建时触发,用于初始化全局资源(如读取体系设置)。
b. onWindowStageCreate:窗口阶段创建时触发,通过loadContent加载页面(如设置首页)。
c. onForeground:应用从背景切换到前台时触发,可重新申请资源(如规复定位功能)。
d. onBackground:应用进入背景时触发,需开释非须要资源(如制止背景服务)。
e. onWindowStageDestroy:窗口阶段烧毁时触发,开释UI相干资源(如关闭页面动画)。
f. onDestroy:应用完全烧毁前触发,用于保存数据或整理内存。
● 页面级生命周期(仅@Entry修饰的组件)
a. onPageShow:页面每次表现时触发(如路由跳转至该页面、应用回到前台)。
b. onPageHide:页面埋伏时触发(如跳转其他页面、应用进入背景)。
c. onBackPress:用户点击返回按钮时触发,返回true可自界说返回逻辑(如阻止页面关闭)。
● 页面级生命周期
a. aboutToAppear:组件实例创建后、build()实行前触发,得当初始化状态变量。
b. onDidBuild:build()完成后触发,可用于埋点统计(但克制修改状态变量)。
c. aboutToDisappear:组件烧毁前触发,需取消订阅事件或开释当地资源(如网络哀求制止)。
想看更多的大厂的鸿蒙口试题,请点击下面的毗连
最经典的100道鸿蒙口试题
|