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

西安网站制作公司哪安溪城乡建设局网站

西安网站制作公司哪,安溪城乡建设局网站,做外贸必备网站,家装公司利润一般多少Android开发高频面试题之——Java基础篇 flutter高频面试题记录 Flutter1. dart中的作用域与了解吗2. dart中. .. ...分别是什么意思?3. Dart 是不是单线程模型?如何运行的?4. Dart既然是单线程模型支持多线程吗?5. Future是什么6. Stream是什么7. Flutter 如何和原生交互…Android开发高频面试题之——Java基础篇 flutter高频面试题记录 Flutter1. 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 原生组件StateFulWidgetproviderGetX 如何获取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= "小王"; //是private2. 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(…) 方法向微任务队列插入一个任务。通常使用 Future 向 EventQueue加入事件,也可以使用 async 和 await 向 EventQueue 加入事件。4. Dart既然是单线程模型支持多线程吗? 多线程语言如Java实现异步的方式是将耗时操作新开子线程去执行。Dart是单线程模型,没有多线程的概念,他是通过Future和Stream来实现异步的。 5. Future是什么 Future是异步函数,它可以在不阻塞当前任务的情况下执行一个任务,并在任务完成后获得相应的结果。 Future实际上是将其中的事件放入到了Event Queue事件队列中执行。 常与async一起使用 Async是Dart中的一个关键字,用于标记异步函数。async函数返回一个Future对象,并且可以使用await关键字来等待函数的执行结果。例如: FutureString 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 后面的类会覆盖前面的类的同名方法当我们想要在不共享相同类层次结构的多个类之间共享行为时,可以使用 mixinon限定了使用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子类。同时调用WidgetsFlutterBinding 将Flutter 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 :是这颗巨大的控件树上的实体。通过 Widget 的 createElement() 方法,根据 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被渲染显示出来时才会有RenderObject13. 介绍下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.dnsts.com.cn/news/202587.html

相关文章:

  • 可以做投票功能的网站网站做好了如何发布
  • xp怎么建设网站wordpress自动登录ftp
  • 成都的企业网站建设公司做商务楼房型图网站
  • 精美的php个人网站源码推广图片模版
  • 商城网站哪个公司做的好处响应式网页模板制作
  • 建设网站公司那里好相关的热搜问题解决方案wordpress文章页面边栏
  • 潮阳网站建设公司免费游戏网页
  • 深圳便宜网站建设济南专业制作网站
  • 重庆网站建设找重庆万为做微商网站设计
  • 建设银行贵阳银行下载官方网站如何做淘宝网站
  • 做模具的网站wordpress 自定义面板
  • 成都网站建设详细内容广告公司名字起名大全
  • 那做网站协会网站建设计划
  • 最好的外贸网站建设wordpress水印
  • 网站 开发逻辑wordpress dx seo
  • wordpress 购物网站主题变身小说网址wordpress
  • 网站统计分析工具的主要功能石家庄网站建设企业
  • 网站建设费进项税金可以抵扣吗wordpress装修模板制作
  • 阿里网站搭建ps企业站网站做多大的
  • p2p网站建设小微金融wordpress联系方式
  • 网站建设系统哪家便宜些网站营销中常见问题
  • 营销型网站建站推广互动营销网站建设
  • 网站建设一意见赚钱链接网站
  • 农村电商网站设计与发展现状自适应网站dedecms代码
  • 网站没有备案是假的吗买医疗产品的网站建设
  • 垂直网站内容建设现在去甘肃会被隔离吗
  • 有人做网站推广吗中英双板网站模版
  • 网站建设云主机云服务器丰台石家庄网站建设
  • 订阅号做微网站需要认证吗怎么建自己的公众号
  • 网站系统下载镇江核酸检测最新通知