Flutter面试题——面试题整理2
一 面试题汇总
- Dart语法中dynamic,var,object三者的区别
- const和final的区别
- Dart中 ?? 与 ??= 的区别
- 什么是flutter里的key? 有什么用?
- Flutter中的GlobalKey是什么,有什么作用
- main() 和runApp() 函数在flutter的作用分别是什么?有什么关系吗?
- 什么是widget? 在flutter里有几种类型的widget?分别有什么区别?能分别说一下生命周期吗?
- 简单说一下在Flutter里async和await?
- future和steam有什么不一样?
- flutter中Widget、Element、RenderObject、Layer都有什么关系?
- 简述state的生命周期
- 简述flutter中自定义View流程?
- flutter_boost的优缺点,内部实现
- flutter的渲染机制
- flutter和native的优缺点
- flutter支不支持 120hz
- 状态管理熟悉哪些
- 多线程怎么处理
- flutter中大图片上传
- await for 如何使用
- Stream有两种订阅模式
- flutter butild 方法中的 BuildContext 具体是什么东西
- flutter 打包成web 移动端桌面端的过程是怎么样的
- dart是值传递还是引用传递
- dart是弱引用还是强引用
- get set方法实现
- Flutter 是如何与原生Android、iOS进行通信的?
- 简述Flutter 的热重载
- 怎么理解Isolate?
- Dart 的作用域
- Dart 当中的 「 .. 」表示什么意思?
- Dart 是不是单线程模型?是如何运行的?
- Dart 是如何实现多任务并行的?
- 说一下Dart异步编程中的 Future关键字?
- 说一下 mixin机制?
- 介绍下Flutter的FrameWork层和Engine层,以及它们的作用
- 简述Flutter的线程管理模型
- 介绍下Flutter的理念架构
- Future和Isolate有什么区别?
- 什么是Navigator? MaterialApp做了什么?
二 面试题解答(仅供参考)
2.1 Dart语法中dynamic,var,object三者的区别
1 | var定义的类型是不可变的, |
2.2 const和final的区别
1 | 均表示不可被修改 |
2.3 Dart中 ?? 与 ??= 的区别
1 | A??B |
2.4 什么是flutter里的key? 有什么用?
1 | key是Widgets,Elements和SemanticsNodes的标识符。 |
2.5 Flutter中的GlobalKey是什么,有什么作用
1 | GlobalKey可以获取到对应的Widget的State对象 |
2.6 main() 和runApp() 函数在flutter的作用分别是什么?有什么关系吗?
1 | main函数是类似于java语言的程序运行入口函数 |
2.7 什么是widget? 在flutter里有几种类型的widget?分别有什么区别?能分别说一下生命周期吗?
flutter里有几种类型的widget
1 | widget在flutter里基本是一些UI组件 |
statelessWidget生命周期
1 | 1-构造函数 |
StatefulWidget生命周期:
1 | 1-widget的构造方法 |
2.8 简单说一下在Flutter里async和await?
1 | await的出现会把await之前和之后的代码分为两部分, |
2.9 future和steam有什么不一样?
1 | 在 Flutter 中有两种处理异步操作的方式 Future 和 Stream, |
2.10 flutter中Widget、Element、RenderObject、Layer都有什么关系?
1 | 首先看一下这几个对象的含义及作用。 |
2.11 简述state的生命周期
2.12 简述flutter中自定义View流程?
1 | 1-已有控件(widget)的继承,组合 |
2.13 flutter_boost的优缺点,内部实现
1 | Flutter Boost 是一个由阿里巴巴开发的 Flutter 框架扩展,旨在为 Flutter 应用提供多页面、多路由的支持,类似于原生应用的多 Activity 或者多 ViewController 的概念。以下是 Flutter Boost 的优缺点以及内部实现的一些特点: |
2.14 flutter的渲染机制
1-图示
2-说明
1 | Flutter只关心向GPU提供视图数据, |
2.15 flutter和native的优缺点
1 | Flutter 和原生开发各有其优缺点,下面是它们的主要对比: |
2.16 flutter支不支持 120hz
1 | Flutter 框架本身并没有直接支持 120Hz 或其他高刷新率的显示。Flutter 主要依赖于平台提供的渲染引擎(Skia on Android,Metal on iOS),并且通常是以平台的默认帧率来渲染。 |
2.17 状态管理熟悉哪些
1 | Flutter中的状态和前端React中的状态概念是一致的。 |
2.18 多线程怎么处理
1 | 在 Flutter 中处理多线程任务的主要方式是使用异步编程模型。 |
2.19 flutter中大图片上传
1 | 在 Flutter 中上传大图片通常涉及以下几个步骤: |
2.20 await for 如何使用
1 | await for是不断获取stream流中的数据,然后执行循环体中的操作。 |
2.21 Stream有两种订阅模式
1 | Stream 用来处理连续的异步操作,Stream 是一个抽象类,用于表示一系列异步数据的源。 |
2.22 flutter butild 方法中的 BuildContext 具体是什么东西
1 | BuildContext底层原理实现实际上就是Element of(context)原理, |
2.23 flutter 打包成web 移动端桌面端的过程是怎么样的
1 | 将 Flutter 应用打包成 Web、移动端和桌面端的过程在一定程度上是相似的,但也有一些差异。下面我将简要介绍这些过程: |
2.24 dart是值传递还是引用传递
1 | 值传递 |
2.25 dart是弱引用还是强引用
1 | 强引用 |
2.26 get set方法实现
1 | 在 Dart 中,通常使用类的实例变量(成员变量)来存储对象的状态。 |
2.27 Flutter 是如何与原生Android、iOS进行通信的?
1 | Flutter 通过 PlatformChannel 与原生进行交互,其中 PlatformChannel 分为三种: |
2.28 简述Flutter 的热重载
1 | Flutter 的热重载是基于 JIT 编译模式的代码增量同步。 |
2.29 怎么理解Isolate?
1 | isolate是Dart对actor并发模式的实现。 |
2.30 Dart 的作用域
1 | Dart 没有 「public」「private」等关键字,默认就是公开的,私有变量使用下划线 _开头。 |
2.31 Dart 当中的 「 .. 」表示什么意思?
1 | Dart 当中的 「..」意思是 「级联操作符」,为了方便配置而使用。 |
2.32 Dart 是不是单线程模型?是如何运行的?
Dart 是单线程模型,运行的的流程如下图。
运行说明
1 | 简单来说,Dart 在单线程中是以消息循环机制来运行的,包含两个任务队列, |
2.33 Dart 是如何实现多任务并行的?
1 | 前面说过, Dart 是单线程的,不存在多线程,那如何进行多任务并行的呢? |
2.34 说一下Dart异步编程中的 Future关键字?
1 | 前面说过,Dart 在单线程中是以消息循环机制来运行的,其中包含两个任务队列, |
2.35 说一下 mixin机制?
1 | mixin 是Dart 2.1 加入的特性,以前版本通常使用abstract class代替。 |
2.36 介绍下Flutter的FrameWork层和Engine层,以及它们的作用
1 | Flutter的FrameWork层是用Dart编写的框架(SDK), |
2.37 简述Flutter的线程管理模型
1-图示
2-说明
1 | 默认情况下,Flutter Engine层会创建一个Isolate,并且Dart代码默认就运行在这个主Isolate上。 |
2.38 介绍下Flutter的理念架构
1-图示
2-说明
1 | 由上图可知,Flutter框架自下而上分为Embedder、Engine和Framework三层。 |
2.39 Future和Isolate有什么区别?
1 | future是异步编程,调用本身立即返回,并在稍后的某个时候执行完成时再获得返回结果。 |
2.40 什么是Navigator? MaterialApp做了什么?
1 | Navigator是在Flutter中负责管理维护页面堆栈的导航器。 |
三 参考
- 掘金—Flutter 面试题整理