「面试精选」Flutter 高频面试题(2023最新版)

在这里插入图片描述

前言

提到跨平台,第一个想到的都是Flutter,如果你简历上有写使用过Flutter总能让人对你加技术分。

本人很愚笨,但相信只要你坚持,最后你会得到应有的回报。
当你的基础知识好到让面试官怎么都问不倒的时候,那你离offer就很近了。

好了,铺垫已经做好了,接下来就直接上最近面试整理的Flutter 干货了。

1. Dart 语言的特性?

Productive(生产力高,Dart的语法清晰明了,工具简单但功能强大)

Fast(执行速度快,Dart提供提前优化编译,以在移动设备和Web上获得可预测的高性能和快速启动。)

Portable(易于移植,Dart可编译成ARM和X86代码,这样Dart移动应用程序可以在iOS、Android和其
他地方运行)

Approachable(容易上手,充分吸收了高级语言特性,如果你已经知道C++,C语言,或者Java,你可以
在短短几天内用Dart来开发)

Reactive(响应式编程)

2.Dart的一些重要概念?

在Dart中,一切都是对象,所有的对象都是继承自Object
Dart是强类型语言,但可以用var或 dynamic来声明一个变量,Dart会自动推断其数据类型,dynamic类似
c#
没有赋初值的变量都会有默认值null
Dart支持顶层方法,如main方法,可以在方法内部创建方法
Dart支持顶层变量,也支持类变量或对象变量
Dart没有public protected private等关键字,如果某个变量以下划线(_)开头,代表这个变量在库中是
私有的

3.Dart 当中的 「…」表示什么意思?

Dart 当中的 「…」意思是 「级联操作符」,为了方便配置而使用。
「…」和「.」不同的是 调用「…」后返回的相当于是 this,而「.」返回的则是该方法返回的值 。

  1. Dart 的作用域

    Dart 没有 「public」「private」等关键字,默认就是公开的,私有变量使用 下划线 _开头。

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

    引用《Flutter中文网》里的话:
    Dart 在单线程中是以消息循环机制来运行的,其中包含两个任务队列,一个是“微任务队
    列” microtask queue,另一个叫做“事件队列” event queue。
    入口函数 main() 执行完后,消息循环机制便启动了。首先会按照先进先出的顺序逐个执
    行微任务队列中的任务,当所有微任务队列执行完后便开始执行事件队列中的任务,事件
    任务执行完毕后再去执行微任务,如此循环往复,生生不息。

4. Dart 多任务如何并行的?

刚才也说了,既然 Dart 不存在多线程,那如何进行多任务并行?
Dart 当中提供了一个 类似于新线程,但是不共享内存的独立运行的 worker - isolate。
那他们是如何交互的?
这里引用 flutter入门之dart中的并发编程、异步和事件驱动详解 中的一部分答案:
在dart中,一个Isolate对象其实就是一个isolate执行环境的引用,一般来说我们都是通过
当前的isolate去控制其他的isolate完成彼此之间的交互,而当我们想要创建一个新的
Isolate可以使用Isolate.spawn方法获取返回的一个新的isolate对象,两个isolate之间使
用SendPort相互发送消息,而isolate中也存在了一个与之对应的ReceivePort接受消息用
来处理,但是我们需要注意的是,ReceivePort和SendPort在每个isolate都有一对,只有
同一个isolate中的ReceivePort才能接受到当前类的SendPort发送的消息并且处理。

5.dart是值传递还是引用传递?

dart是值传递。我们每次调用函数,传递过去的都是对象的内存地址,而不是这个对象的复制。
先来看段代码

  main(){
   Test a = new Test(5);
   print("a的初始值为:${a.value}");
   setValue(a);
   print("修改后a的值为: ${a.value}");
   }
   class Test{
   int value = 1;
   Test(int newValue){
   this.value = newValue;
   }
   }
   setValue(Test s){
   print("修改value为100");
   s.value = 100;
   }

输出结果为:
a的初始值为:5
修改value为100
修改后a的值为:100
从这里可以看出是值传递,如果只是复制了一个对象,然后把这个新建的对象地址传递到函数里面的话,
setValue()函数中的修改是不会影响到main函数中的a的,因为二者所引用的内存地址是不一样。
有些人可能会以以下代码反驳我:

   main(){
   int s = 6;
   setValue(s);
   print(s); //输出6,而不是7
   }
   class Test{
   int value = 1;
   Test(int newValue){
   this.value = newValue;
   }
   }
   setValue(int s){
   s += 1;
   }

你看,这输出的不是6吗,在dart中一切皆为对象,如果是引用传递,那为什么是6啊。
答案是这样的,在setValue()方法中,参数s实际上和我们初始化int s = 6的s不是一个对象,只是他们现在指的
是同一块内存区域,然后在setValue()中调用s += 1的时候,这块内存区域的对象执行+1操作,然后在堆(类比
java)中产生了一个新的对象,s再指向这个对象。所以s参数只是把main函数中的s的内存地址复制过去了,就
比如java中的:

 public class Test {
   public static void main(String[] args) {
   Test a = new Test();
   Test b = a;
   b = new Test();
   }
   }

我们只要记住一点,参数是把内存地址传过去了,如果对这个内存地址上的对象修改,那么其他位置的引用该
内存地址的变量值也会修改。千万要记住dart中一切都是对象。

6. Dart 属于是强类型语言 ,但可以用 var 来声明变
量,Dart 会自推导出数据类型,var 实际上是编译期
的“语法糖”。dynamic 表示动态类型, 被编译后,
实际是一个 object 类型,在编译期间不进行任何的
类型检查,而是在运行期进行类型检查。

7.说一下 mixin?

关于什么是 mixin,引用 张风捷特烈 文章中的:
首先mixin是一个定义类的关键字。直译出来是混入,混合的意思 Dart为了支持多重继承,
引入了mixin关键字,它最大的特殊处在于: mixin定义的类不能有构造方法,这样可以避
免继承多个类而产生的父类构造方法冲突

8.Widget和element和RenderObject之间的关系

首先我详细说下当时的情景,面试官问我Widget和Element之间是不是一对多的关系,如果是增加
一个Widget之后,这个关系又是什么。 这部分还是没有很好地答案,现在只是一个猜想,如果添
加了一个widget,Element树遍历后面所有的Element看类型是否发生改变,有的话再重建
RenderObject。Element和Widget之间应该还是一对一的关系,因为每个Widget的context都是独一无
二的。

由于面试内容比较多,篇幅有限,资料已经被整理成了PDF文档,有需要2023年Android中高级最全面试真题答案 完整文档的可扫描下方卡片免费获取~

PS:(文末还有使用ChatGPT机器人小福利哦!!大家不要错过)

目录

在这里插入图片描述

第一章 Java方面

●Java基础部分
●Java集合
●Java多线程
●Java虚拟机

在这里插入图片描述

第二章 Android方面

●Android四大组件相关
●Android异步任务和消息机制
●Android UI绘制相关
●Android性能调优相关
●Android中的IPC
●Android系统SDK相关
●第三方框架分析
●综合技术
●数据结构方面
●设计模式
●计算机网络方面
●Kotlin方面

在这里插入图片描述

第三章 音视频开发高频面试题

●为什么巨大的原始视频可以编码成很小的视频呢?这其中的技术是什么呢?
●怎么做到直播秒开优化?
●直方图在图像处理里面最重要的作用是什么?
●数字图像滤波有哪些方法?
●图像可以提取的特征有哪些?
●衡量图像重建好坏的标准有哪些?怎样计算?

在这里插入图片描述

第四章 Flutter高频面试题

●Dart部分
●Flutter部分

在这里插入图片描述

第五章 算法高频面试题

●如何高效寻找素数
●如何运用二分查找算法
●如何高效解决雨水问题
●如何去除有序数组的重复元素
●如何高效进行模幂运算
●如何寻找最长回文子串

在这里插入图片描述

第六章 Andrio Framework方面

●系统启动流程面试题解析
●Binder面试题解析
●Handler面试题解析
●AMS面试题解析

在这里插入图片描述

第七章 企业常见174道面试题

●SD卡
●Android的数据存储方式
●Broadcast Receiver
●sp频繁操作会有什么后果?sp能存多少数据?
●dvm与jvm的区别
●ART
●Activity的生命周期
●Application能不能启动Activity
●…

在这里插入图片描述

搭建了一个基于chatGPT的微信群聊机器人,24小时为大家解答疑难技术问题, 需要的可以扫描二维码进群。

图片

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值