持续创作,加快成长!这是我参与「日新计划 10 月更文应战」的第3天,点击查看活动概况

以下主要针对往期收录的面试题进行一个分类概括整理,便利一致回顾和参阅。本篇是第八集(Flutter篇)~

强调一下:别问了别问了, 面试文档要的在大众号<Android苦做舟>获取。

第一篇面试题在这: Android中高档进阶开发面试题冲刺合集(一)

第二篇面试题在这: Android中高档进阶开发面试题冲刺合集(二)

第三篇面试题在这: Android中高档进阶开发面试题冲刺合集(三)

第四篇面试题在这: Android中高档进阶开发面试题冲刺合集(四)

第五篇面试题在这: Android中高档进阶开发面试题冲刺合集(五)

第六篇面试题在这: Android中高档进阶开发面试题冲刺合集(六)

第七篇面试题在这: Android中高档进阶开发面试题冲刺合集(七)

Flutter面试部分

来自某厂校试题,前面的会比较简单,后边的会比较难,主要想测出面试者的真实水平。

多选题:

1.下面哪些组件具备居中功用?(ABC)

A、Container B、Center C、Align D、Card

2.Textfield需求设置哪些特点才能完成无限换行和扩展高度?(AD)

A、expands B、maxLength C、textAlign D、maxLines

3.怎样让图片重复堆叠容器?(C)

A、fit: BoxFit.fill B、fit: BoxFit.cover C、repeat: ImageRepeat.repeat

4.Text组件有哪些特点不能为空?(A)

A、data B、style C、overflow D、maxLines

5.哪些组件能够运用特点操控child的显隐(CD)?

A、Card B、Center C、Offstage D、Visibility

6.下面临StatefulWidget中createState办法描绘正确的是?(ABC)

A、在树中的给定方位为此小部件创立可变状况;

B、框架能够在整个生命周期中多次调用此办法;

C、如果将小部件从树中删去,并且稍后再次刺进树中,框架将调用createState再次创立一个新的State目标,然后简化了State目标;

D、用来看的,没啥实际效果;

7.下面哪些是正确调用setstate的姿势?(AC)

A、在点击某按钮时触发进行改写类实例变量;

B、在点击某按钮时触发进行改写办法实例变量;

C、运用前先判别mounted是否为true

D、dispose生命周期中调用;

8.让AppBar的标题居中的办法有(AB)

A、centerTitle特点设置为true

B、Center组件包裹title

C、elevation设置为0

D、primary设置为false

9.controller是一个动画操控器,如果controller声明的时分为空了,运用controller?.forward()播放动画时会产生什么?(CD)

A、一片红的报错信息;

B、报错,但不影响布局;

C、不会报错;

D、因为是?.的调用,左边为空了则不会去调用播放办法;

10.在有状况类中编写一个按钮调用初始化生命周期(initState)办法,会产生什么?(BD)

A、一片红的报错信息;

B、报错,但不影响布局;

C、不会报错;

D、会报生命周期创立错误;

11.写布局时用ListView然后children并没有写距离之类的,成果呈现了上下有间距,为什么?(AB)

A、或许是ListView外层写了距离之类的;

B、或许是ListView自带Padding

C、肯定是官方的问题;

D、人的问题,换个人来运转或许就好了;

12.归于滑动组件的有(AB)

A、ListView B、GridView C、Container D、Center

13.归于Sliver系列的组件有(ABC)

A、SliverToBoxAdapter

B、SliverAppBar

C、SliverAnimatedOpacity

D、Image

14.归于不可滑动的组件有(ACD)

A、Text B、SingleChildScrollView C、Card D、FlatButton

15.能操作对齐办法(Alignment)的组件有(CD)

A、FlatButton B、RaisedButton C、Align D、Container

16.当我给变量赋值的时分想为空的时分才赋值应该怎样操作(ABC)

A、运用??=来指定当左边为空时才履行等于;

B、运用三元运算符判别是否等于空才履行赋值;

C、运用if判别语句,为空时才等于;

D、直接运用等于来赋值;

17.去掉按钮水波纹效果的办法有(ABC)

A、大局设置水波纹色彩为通明;

B、局部设置水波纹色彩为通明然后包裹需求通明的组件;

C、运用按钮的水波纹色彩特点设置为通明;

D、发愣就对了,阿巴阿吧阿吧;

18.在什么情况下类能够混入TickerProviderStateMixin?(CD)

A、用手写代码的情况下;

B、在不摸鱼的情况下;

C、混入TickerProviderStateMixin必须是承继State的情况下;

D、具备有状况类的生命周期下;

19.在Android和IOS情况下ListView的滑动表现描绘正确的是(AC)

A、每个渠道都有判别,效果会呈现不同点;

B、Android和IOS怎样滑效果都相同;

C、Android滑动到无法滑动之后会呈现焦点特别动画,而IOS是回弹效果;

D、我又没滑过,我懒个晓得咯;

20.容器设置了束缚盒子最小宽度为200,但内部的宽度设置为了50,则会产生(A)

A、以束缚盒子的200为准;

B、以内部设置的50为准;

C、会形成紊乱,导致无法显现;

D、有时分会200,有时分会50

判别题

1.WidgetsFlutterBinding.ensureInitialized在runApp之后调用(错);

2.MaterialApp中router内有“/”能够和home特点共存(错);

3.结构办法中“Key key”必写(错);

4.“=>”操作符是大括号的简写办法(对);

5.运用overlay写大局提示框不需求上下文(错);

6.MaterialApp组件中home特点有时能够为空(对);

7.setState必须是在有状况类中调用(对);

8.final润饰的变量无法被setState改写(对);

9.办法内声明的变量能够被setState改写(错);

10.NestedScrollView的内操控器能够从树上找(对);

11.束缚盒子最小宽度为10,包裹容器设置宽度为5,成果为5(错);

12.ListView的children写容器能够直接设置容器宽度并收效(错);

13.在initState生命周期能够拿到上下文干和build生命周期相同的事(错);

14.Scaffold的左右抽屉能够并存(对);

15.整AppBar高度是由状况栏高度加kToolbarHeight组成的(对);

16.媒体查询是获取上下文宽高数值的办法(错);

17.SizedBox.expand内宽和高都是无限值(对);

18.Container运用了decoration特点外面还能够设置color特点值(错);

19.一个App项目存在多个MaterialApp组件是合理的(错);

20.Platform.isAndroid能够在web渠道中判别当时是什么体系(错);

21.showDialog是一个组件(错);

22.CupertinoAlertDialog只能在CupertinoApp情况下运用(错);

23.Divider组件其实便是SizedBox+Center+Container组合出来的(对);

24.ScrollConfiguration组件能够自定义behavior然后去掉滑动的焦点(对);

25.PageView有自动轮播功用(错);

26.debugShowCheckedModeBanner特点false能够去掉右上DEBUG标签(对);

27.AnimatedList中key是必填的(错);

28.AnimatedSwitcher中child特点key能够不填但或许没效果(对);

29.Spacer组件能够放在任何能够放组件的地方(错);

30.容器宽高不知道的情况下能够运用Expanded组件(错);

31.BottomNavigationBar具备保存页面状况功用(错);

32.Card组件不会默许带暗影效果(错);

33.Center组件能够让child坐落容器下方(错);

34.LinearProgressIndicator能够直接设置Color类型的valueColor(错);

35.VerticalDivider和Divider用法相同,前者笔直分割线,后者水平分割线(对);

36.RaisedButton中onPressed为null或不设置时,按钮是禁用状况(对);

37.BackButton组件默许Android和IOS效果不一致(对);

38.CupertinoButton只能在IOS风格App下运用(错);

39.Hero飞翔动画无需用到tag(错);

40Row中放Textfield无需知道Textfield所占宽度(错);

41.TabBar只能放在AppBar的bottom特点(错);

问答题

1.说下Flutter的优缺陷

参阅答案:

长处:1、高性能,2、高保真,3、相对易学,4、热重载;

缺陷:1、不支持热更新,2、生态需完善;

2.Flutter跨渠道原理是怎样样的?

参阅答案:

自写UI烘托引擎完成跨渠道

3.说下移动端跨渠道技能区分

参阅答案:

1、web技能,2、原生烘托,3、自烘托技能;

4.蓝湖设计图有一张轮播图,宽度是 335 高度是 120,左右距离是10, 怎样运用屏幕算法适配全机型屏幕宽和高?

参阅答案:

剖析:

  • 左右距离:设置margin然后左右10个距离;
  • 宽度:整宽减2020便是左右的距离;
  • 高度:(宽度) * 120 / 335;

代码:

new Container(
  height: (winWidth(context) - 20) * 120 / 335,
  width: winWidth(context) - 20,
  margin: EdgeInsets.symmetric(horizontal: 10.0),
  alignment: Alignment.center,
  decoration: BoxDecoration(
   borderRadius: BorderRadius.all(Radius.circular(4.0)),
   color: Colors.amber.withOpacity(0.5),
  ),
  child: new Text('模仿图片'),
),

效果

Android中高级进阶开发面试题冲刺合集(八)【Flutter篇】

Android中高级进阶开发面试题冲刺合集(八)【Flutter篇】

5.不知道数据数量有规则的列表视图,要求一行显现5个,每个距离为10(含上下),最外边距margin左右都为20,高度为50,多出的数据继续往下排并向左对齐,适配任何机型,怎样做?

参阅答案:

剖析:

  • 左右距离:设置margin然后左右20个距离;
  • 距离和高:除最外边左右,内边都为10距离,并包含上下,高度固定50
  • 对齐办法:对齐办法默许都为向左对齐;
  • 组件:推荐Wrap,动态数据,顺次撑开;

代码:

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
   return new Scaffold(
    appBar: new AppBar(
     title: new Text('Flutter高档进阶'),
    ),
    body: new Container(
     padding: EdgeInsets.symmetric(vertical: 20.0),// 为了坚持美观给了上下价格20
     color: Colors.amber.withOpacity(0.2), // 为了验证动态撑开给了布景
     child: TestRoute(),// 主代码
    ),
   );
  }
}
​
class TestRoute extends StatefulWidget {
  @override
  _TestRouteState createState() => _TestRouteState();
}
​
class _TestRouteState extends State<TestRoute> {
  Widget buildItem(item) {
   return new Container(
    decoration: BoxDecoration(
     borderRadius: BorderRadius.all(Radius.circular(4.0)), // 圆角
     color: Colors.blueAccent.withOpacity(0.5),// item色彩
    ),
    height: 50.0, // 高度
    alignment: Alignment.center, // item文本剧中
    width: (winWidth(context) - 80) / 5, // 宽度
    child: new Text('模仿'),
   );
  }
​
  @override
  Widget build(BuildContext context) {
   return new Container(
    width: winWidth(context) - 40, // 宽度容器算法
    margin: EdgeInsets.symmetric(horizontal: 20.0),
    child: new Wrap(
     spacing: 10.0,
     runSpacing: 10.0,
     children: [0, 1, 2, 3, 4, 5].map(buildItem).toList(),
    ),
   );
  }
}

效果

Android中高级进阶开发面试题冲刺合集(八)【Flutter篇】

Android中高级进阶开发面试题冲刺合集(八)【Flutter篇】

6.怎样完成点击空白区域收起键盘?

参阅答案:触发代码:FocusScope.of(context).requestFocus(new FocusNode());

7.无需上下文进行路由跳转原理是怎样样的?

参阅答案:

运用GlobalKey调用到NavigatorState的办法;

8.为什么我的容器不管设置宽高多少都是占整个的宽高?怎样处理?

参阅答案:

1.被束缚了;2.宽高无限了;

处理办法:

运用UnconstrainedBox包裹容器;

9.键盘弹出时底部溢出怎样处理?

参阅答案:

1.溢出部分增加滑动特点; 2.ScaffoldresizeToAvoidBottomPadding: false让其遮挡布局;

10.Container 设置 borderRadius 不收效怎样处理?怎样导致的?

参阅答案:

原因:Container 设置 borderRadius只对当时盒子收效;

处理办法:运用裁剪办法,如:ClipRRect组件;

11.GestureDetector 设置 onTap 不收效怎样处理?

参阅答案:

运用GestureDetectorbehavior: HitTestBehavior.translucent

12.怎样完成动态更改 TabBar 长度?

参阅答案:

1.操控器从头赋值;(运用Ticker不能是Single的)

2.运用DefaultTabController

13.为何写多个动画时动画操控器运用了Ticker,类也混入了Ticker运转报错了?

参阅答案:

有或许运用了单一的Ticker(SingleTickerProviderStateMixin),只能运用一次就失效了;

14.怎样完成键盘弹出后遮住布局,而不是顶起布局?

参阅答案:

Scaffold特点resizeToAvoidBottomPadding: false让其遮挡布局;

15.为何输入框输入内容之后返回到桌面,再进入app时内容被清空了?怎样处理?

参阅答案:

或许是输入中没有做保存处理,能够运用生命周期判别,在程序暂停前让输入框取消焦点即可完成自动保存;

16.为何本地资源图片刚进入的时分切换到另一张呈现白屏?怎样处理?

参阅答案:

原因:切换之后才开端解析本地资源图片; 处理方案:在初始化的时分就加载指定asset图片,而不是在需求展示的时分才开端加载。 代码示例: @override void initState() { super.initState(); WidgetsBinding.instance.addPostFrameCallback((_) async { // _imageUrls 便是数组的Asset图片地址 _imageUrls.forEach((image) { precacheImage(AssetImage(image), context); }); }); }

17.怎样拦截 App 返回事件,用什么组件?

参阅答案:

WillPopScope组件,用返回的bool来操作是否允许返回;

18.怎样监听 App 暂停运转或不可见状况事件?

参阅答案:

运用WidgetsBindingObserver观察生命周期状况;

具体:book.flutterj.com/chapter1/li…

19.Text 的 TextOverflow.ellipsis 不收效怎样处理?

参阅答案:让Text组件的所占宽度可知;

20.怎样获取控件的巨细和方位?

参阅答案:

1、运用Key拿到上下文获得findRenderObject拿内容的尺寸数据;

2、运用context获得findRenderObject拿内容的尺寸数据;

21.类结构办法后边加个super表明什么意思?

参阅答案:

调用父类的特点,可进行赋值传输;

22.assert( data != null, ‘no data’)是什么意思?

参阅答案:

assert:断语;

data != null:data不能为空,不然触发断语错误;

no data:如果触发断语则提示的内容;

23.const润饰结构函数和放声明数值前别离有什么效果?

参阅答案:

结构函数前:结构函数会在编译期和常量一同被编译;

声明数值前:一个不可变的常量,编译期就被初始化;

24.描绘下getter setter和重写

参阅答案:

Dart 中所有的基础类型、类等都承继 Object ,默许值是 NULL, 自带 gettersetter ,而如果是 final 或者 const 的话,那么它只要一个 getter 办法,Object 都支持 gettersetter 重写

25.Assert(断语)有什么效果?什么时分有用?

参阅答案:

debug的时分提示出断语错误让开发者知悉,只在debug有用;