当前位置: 首页 > news >正文

网站在网站网站在哪里找到的百度网盘在线登录入口

网站在网站网站在哪里找到的,百度网盘在线登录入口,做刀模网站,宁德商城网站建设Android开发高频面试题之——Java基础篇 flutter高频面试题记录 Flutter1. dart中的作用域与了解吗2. dart中. .. ...分别是什么意思?3. Dart 是不是单线程模型?如何运行的?4. Dart既然是单线程模型支持多线程吗?5. Future是什么6. Stream是什么7. Flutter 如何和原生交互…

Android开发高频面试题之——Java基础篇

flutter高频面试题记录

    • Flutter
    • 1. dart中的作用域与了解吗
    • 2. dart中. .. ...分别是什么意思?
    • 3. Dart 是不是单线程模型?如何运行的?
    • 4. Dart既然是单线程模型支持多线程吗?
    • 5. Future是什么
    • 6. Stream是什么
    • 7. Flutter 如何和原生交互
    • 8. 说一下 mixin?
    • 9. StatefulWidget 的生命周期
    • 10. main()和runApp()函数在flutter的作用分别是什么?有什么关系吗?
    • 11. 怎么理解Isolate?
    • 12. 简单介绍下Flutter框架,以及它的优缺点?
    • 12. 简述Widgets、RenderObjects 和 Elements的关系
    • 13. 介绍下Widget、State、Context 概念
    • 14. 简述Widget的StatelessWidget和StatefulWidget两种状态组件类
    • 15. 什么是状态管理,你了解哪些状态管理框架?
    • 16. 简述Flutter的绘制流程
    • 17. await for 如何使用?
    • 18. 介绍下Flutter的架构
    • 19. 介绍下Flutter的FrameWork层和Engine层,以及它们的作用
    • 20. Dart中var与dynamic的区别
    • 21. const关键字与final关键字的区别
    • 22. Flutter在Debug和Release下分别使用什么编译模式,有什么区别?
    • 23. 什么是Key?
    • 24. future 和steam有什么不一样?
    • 25. 什么是widget? 在flutter里有几种类型的widget?
    • 26. statefulWidget更新流程了解吗
    • 了解哪些状态管理框架
      • flutter 原生组件StateFulWidget
      • provider
      • GetX
    • 如何获取app的生命周期
    • flutter性能优化
      • 使用局部刷新(如:拆分widget,缩小刷新影响范围)
      • 减少不必要的build/setState
      • 优化ClipPath和ClipRPath
      • 能不用Opacity Widget,就尽量不要用
      • 多变图层与不变图层分离
      • 使用const来修饰永远不需要变更的控件。
      • 优先使用StateLessWidget,而不是全部用StateFulWidget
      • 使用Visibility控件替换if/else
    • ListView 优化
      • 卡顿原因
      • 优化方案
        • 长列表懒加载场景
        • 首次进入加载多个item场景
        • 取消在途网络请求
        • 首页预加载
        • 分页预加载

Flutter

1. dart中的作用域与了解吗

默认是public,如需私有只需要在变量名或者方法名前加_

例如 
var user = "小王"; //是public
var _user= "小王"; //是private

2. dart中. … …分别是什么意思?

一个点 .
是正常的对象访问
两个点 . .
意思是 「级联操作符」,为了方便配置而使用。「…」和「.」不同的是 调用「…」后返回的相当于是 this, 可以实现对一个对象的连续调用

          Paint()..color = thumbColor..style = PaintingStyle.stroke..strokeCap = StrokeCap.round..strokeWidth = tempWidth);

三个点 用来拼接集合,如List,Map等

class TestDemo { TestDemo() {    var list2 = ['d', 'e', 'f'];var list = ['a', 'b', 'c', ...list2];// 打印结果:// 这里组合后 list就变成[ 'a', 'b', 'c','d', 'e', 'f']var map2 = {'a': 'a', 'b': 'b'};var map = {...map2, 'c': 'c', 'd': 'd'};// 打印结果:// 这里组合后map就变成{'a': 'a', 'b': 'b','c': 'c', 'd': 'd'}}
}

3. Dart 是不是单线程模型?如何运行的?

Dart是单线程模型
Dart在单线程中是以消息循环机制来运行的,其中包含两个任务队列,一个是 “微任务队列” microtask queue,另一个叫做 “事件队列” event queue微任务队列的执行优先级高于 事件队列

Dart大致运行原理:先开启app执行入口函数main(),执行完成之后,消息机制启动,先是会按照先进先出的顺序逐个执行微任务队列中的任务microtask事件任务eventtask 执行完毕后便会退出,但是,在事件任务执行的过程中也可以插入新的微任务和事件任务,在这种情况下,整个线程的执行过程便是一直在循环,不会退出,而Flutter中,主线程的执行过程正是如此,永不终止。
在这里插入图片描述
事件循环中,当某个任务发生异常并没有被捕获时,程序并不会退出,而直接导致的结果是当前任务的后续代码就不会被执行了,也就是说一个任务中的异常是不会影响其它任务执行的

Dart 中事件的执行顺序:Main > MicroTask > EventQueue

  • 通常使用 scheduleMicrotask(…) 或者 Future.microtask(…) 方法向微任务队列插入一个任务。
  • 通常使用 FutureEventQueue加入事件,也可以使用 async 和 await 向 EventQueue 加入事件。

4. Dart既然是单线程模型支持多线程吗?

多线程语言如Java实现异步的方式是将耗时操作新开子线程去执行。Dart是单线程模型,没有多线程的概念,他是通过Future和Stream来实现异步的。

5. Future是什么

Future是异步函数,它可以在不阻塞当前任务的情况下执行一个任务,并在任务完成后获得相应的结果。
Future实际上是将其中的事件放入到了Event Queue事件队列中执行。
常与async一起使用
Async是Dart中的一个关键字,用于标记异步函数。async函数返回一个Future对象,并且可以使用await关键字来等待函数的执行结果。例如:

Future<String> getData(String url) async {
var response = await http.get(url);
return response.body;
}

6. Stream是什么

Stream 流是一个异步的事件队列。分为单订阅流广播订阅

  • 单订阅流
    默认情况下创建的流都是单订阅流,单订阅流只能被订阅一次,第二次监听会报错!监听开始之前的元素不会被订阅。但 Stream 可以通过 transform() 方法(返回另一个 Stream)进行连续调用。通过 Stream.asBroadcastStream() 可以将一个单订阅模式的 Stream 转换成一个多订阅模式的 Stream.isBroadcast 属性可以判断当前 Stream 所处的模式。
  • 广播订阅
    广播流允许存在任意数量的 listener,并且无论是否存在 listener,它都能产生事件,所以中途加入的 listener 不会侦听到已发生的事件。

单订阅流常用于数据的传递,广播流用于事件的分发。

StreamController 是流控制器的核心接口,包含了流控制器该有的大多数接口方法。其中

  • stream 用于向外提供创建的Stream。
  • sink 是该控制器关联的流的数据来源。可以使用sink.add 方法向流中添加数据。
  • onListen, 当控制器中的流被监听的时候,会回调该方法。
  • onPause, 当流的监听主动暂停的时候,会回调该方法。
  • onResume, 当流的监听主动恢复监听的时候,会回调该方法。
  • onCancel,当流的监听取消监听的时候,会回调该方法。

7. Flutter 如何和原生交互

Flutter 与原生交互使用Platform Channel。Flutter定义了三种不同类型的Channel

  • BasicMessageChannel 用于传递字符串和半结构化的信息,可持续通信,收到消息后可以回复此次消息。场景:消息互发(双向有返回值,可持续通信)
  • MethodChannel 用于传递方法调用。场景:native与flutter的方法调用(双向有返回值,一次性通信)
  • EventChannel 用于事件型的通信,仅支持 native 到 Flutter 的单向传递。场景:通常用于状态端监听,比如网络变化、传感器数据、电量更新或声音改变(仅支持数据单向传递,无返回值)

8. 说一下 mixin?

  • mixin 可以理解为对类的一种“增强”,但它与单继承兼容,因为它的继承关系是线性的。
  • with 后面的类会覆盖前面的类的同名方法
  • 当我们想要在不共享相同类层次结构的多个类之间共享行为时,可以使用 mixin
  • on限定了使用mixin组块的宿主必须要继承于某个特定的类;在mixin中可以访问到该特定类的成员和方法。
  • 作为mixin的类不能有自定义构造方法

9. StatefulWidget 的生命周期

在这里插入图片描述

  • initState 初始化阶段回调
  • didUpdateWidget build阶段回调 当Widget配置发生变化时,比如父Widget触发重建(即父Widget的状态发生变化时),热重载,系统会调用这个函数。
  • didChangeDependencies build阶段回调 state对象依赖关系发生变化后,flutter会进行回调。
  • deactivate 不可见时回调
  • dispose 销毁时回调

10. main()和runApp()函数在flutter的作用分别是什么?有什么关系吗?

main函数是程序执行的入口。
runApp是Flutter应用启动的入口。runApp中启动了Flutter FrameWork并且完成根widget树的渲染
在runApp中 初始化了WidgetsFlutterBinding这个类混入了七个BindingBase子类。同时调用WidgetsFlutterBindingFlutter Framework绑定到Flutter Engine上面

  • GestureBinding:绑定手势系统。
  • ServicesBinding:主要作用与defaultBinaryMessenger有关,用于和native通讯相关。
  • SchedulerBinding:该类主要用于调度帧渲染相关事件。
  • PaintingBinding:和painting库绑定,处理图片缓存。
  • SemanticsBinding:将语义层和Flutter Engine绑定起来。
  • RendererBinding:将渲染树与Flutter Engine绑定起来。
  • WidgetsBinding:将Widget层与Flutter Engine绑定起来。

11. 怎么理解Isolate?

isolate 意思是隔离。它可以理解为 Dart 中的线程。isolate与线程的区别就是线程与线程之间是共享内存的,而 isolate 和 isolate 之间是不共享的。因此也不存在锁竞争问题,两个Isolate完全是两条独立的执行线,且每个Isolate都有自己的事件循环,它们之间只能通过发送消息通信,它的资源开销低于线程。
每个 isolate 都拥有自己的事件循环队列(MicroTask 和 Event)。这意味着在一个 isolate 中运行的代码与另外一个 isolate 不存在任何关联。
isolate之间的通信
由于isolate之间没有共享内存,他们之间的通信唯一方式只能是通过Port进行,而且Dart中的消息传递总是异步的。

  • 两个Isolate是通过两对Port对象通信,一对Port分别由用于接收消息的ReceivePort对象,和用于发送消息的SendPort对象构成。
  • Flutter 中可以使用compute函数来创建Isolate
    • compute中运行的函数,必须是顶级函数或者是static函数,
    • compute传参,只能传递一个参数,返回值也只有一个

12. 简单介绍下Flutter框架,以及它的优缺点?

Flutter 是Google开发的一款跨平台方案的开源框架。
优点

  • 高性能:自带绘制系统,让Flutter拥有原生级别的性能
    RN、Weex等跨平台开发框架,都选择将绘制任务交给了平台原生的绘制引擎。因此,这些框架在规避了重新开发一套图形机制的同时,也从底层机制上带来了无法调和的性能问题。
  • 因为Flutter底层使用和Android原生一样的Skia引擎,所以保证了android和ios两端的UI一致性
  • 拥有热更新机制,开发效率比原生更高
  • Dart语言比较简单,而且Flutter语法与JectPack库中的Compose接近,容易上手。

缺点

  • 生态还不够丰富
  • 缺少动态性

12. 简述Widgets、RenderObjects 和 Elements的关系

  • Widget :仅用于存储渲染所需要的信息。Widget只是配置信息,相当于Android里的XML布局文件
  • RenderObject :负责管理布局、绘制等操作。保存了元素的大小,布局等信息.
  • Element :是这颗巨大的控件树上的实体。通过 WidgetcreateElement() 方法,根据 Widget数据生成。如果 widget 有相同的 runtimeType 并且有相同的 key, Element 可以根据新的 widget 进行 update.

Widget会被inflate(填充)到Element,并由Element管理底层渲染树。Widget并不会直接管理状态及渲染,而是通过State这个对象来管理状态。Flutter创建Element的可见树,相对于Widget来说,是可变的,通常界面开发中,我们不用直接操作Element,而是由框架层实现内部逻辑。就如一个UI视图树中,可能包含有多个TextWidget(Widget被使用多次),但是放在内部视图树的视角,这些TextWidget都是填充到一个个独立的Element中。Element会持有renderObject和widget的实例。记住,Widget 只是一个配置RenderObject 负责管理布局、绘制等操作

在第一次创建 Widget 的时候,会对应创建一个 Element, 然后将该元素插入树中。如果之后 Widget 发生了变化,则将其与旧的 Widget 进行比较,并且相应地更新 Element。重要的是,Element 不会被重建,只是更新而已。

  • 一个Widget一定对应一个Element,但是不一定会有RenderObject
  • 只有当Widget被渲染显示出来时才会有RenderObject

13. 介绍下Widget、State、Context 概念

  • Widget:在Flutter中,几乎所有东西都是Widget。将一个Widget想象为一个可视化的组件(或与应用可视化方面交互的组件),当你需要构建与布局直接或间接相关的任何内容时,你正在使用Widget。
  • Widget树:Widget以树结构进行组织。包含其他Widget的widget被称为父Widget(或widget容器)。包含在父widget中的widget被称为子Widget。
  • Context仅仅是已创建的所有Widget树结构中的某个Widget的位置引用。简而言之,将context作为widget树的一部分,其中context所对应的widget被添加到此树中。一个context只从属于一个widget,它和widget一样是链接在一起的,并且会形成一个context树。
  • State定义了StatefulWidget实例的行为,它包含了用于”交互/干预“Widget信息的行为和布局。应用于State的任何更改都会强制重建Widget

14. 简述Widget的StatelessWidget和StatefulWidget两种状态组件类

  • StatelessWidget: 一旦创建就不关心任何变化,在下次构建之前都不会改变。它们除了依赖于自身的配置信息(在父节点构建时提供)外不再依赖于任何其他信息。比如典型的Text、Row、Column、Container等,都是StatelessWidget。它的生命周期相当简单:初始化、通过build()渲染。

  • StatefulWidget: 在生命周期内,该类Widget所持有的数据可能会发生变化,这样的数据被称为State,这些拥有动态内部数据的Widget被称为StatefulWidget。比如复选框、Button等。State会与Context相关联并且此关联是永久性的,State对象将永远不会改变其Context,即使可以在树结构周围移动,也仍将与该context相关联。当state与context关联时,state被视为已挂载。StatefulWidget由两部分组成,在初始化时必须要在createState()时初始化一个与之相关的State对象。<

http://www.ds6.com.cn/news/23731.html

相关文章:

  • 做兼职什么网站最靠谱网络营销五个主要手段
  • 展会网站怎么做郴州seo快速排名
  • 成都seo培训机构电商关键词排名优化怎么做?
  • 如何建设英文网站石家庄网站关键词推广
  • 长沙马拉松调整为线上赛seo包年优化
  • 网站开发ide php2020国内搜索引擎排行榜
  • 微网站建设加盟重庆旅游seo整站优化
  • 网站怎么做优化排名营销策划的六个步骤
  • 做app需要网站吗百度搜索引擎优化怎么做
  • 提供网站制作公司地址网站注册步骤
  • 做b2b网站销售怎样让客户找上门十个有创意的线上活动
  • 汕头网站建设设计公司网络推广销售是做什么的
  • 技术支持 佛山网站建设seo网站排名优化软件
  • 东营长安网站建设谷歌seo外链
  • 品牌活动策划360优化大师最新版
  • 网站建设线上线下双服务器app推广员好做吗
  • wordpress顶部图片大小网站首页的优化
  • 开发网站建设自己怎么开网站
  • 中国电影家协会官网推荐seo关键词优化
  • 如何建设软件下载网站最简单的网页制作
  • 网站建设_那个推广平台好用
  • 怎么用wordpress建立本地网站百度 营销推广是做什么的
  • 南通网站建设教程十大免费网站推广平台有哪些
  • 十九冶成都建设网站seo赚钱方式
  • 南京网站设计公司网站页面
  • 手把手wordpress仿站网络营销方法有哪些?
  • 三门网站制作搜索引擎关键词排名
  • 网站开发相关英文单词电商培训心得体会
  • 做最好的在线看片网站沧州网站建设
  • 广东华迪工程建设监理公司网站北京网站优化外包