持续创作,加快成长!这是我参与「日新计划 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
个距离; - 宽度:整宽减
20
,20
便是左右的距离; - 高度:(宽度) * 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('模仿图片'),
),
效果
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(),
),
);
}
}
效果
6.怎样完成点击空白区域收起键盘?
参阅答案:触发代码:FocusScope.of(context).requestFocus(new FocusNode());
7.无需上下文进行路由跳转原理是怎样样的?
参阅答案:
运用GlobalKey
调用到NavigatorState
的办法;
8.为什么我的容器不管设置宽高多少都是占整个的宽高?怎样处理?
参阅答案:
1.被束缚了;2.宽高无限了;
处理办法:
运用UnconstrainedBox
包裹容器;
9.键盘弹出时底部溢出怎样处理?
参阅答案:
1.溢出部分增加滑动特点; 2.Scaffold
的resizeToAvoidBottomPadding: false
让其遮挡布局;
10.Container 设置 borderRadius 不收效怎样处理?怎样导致的?
参阅答案:
原因:Container
设置 borderRadius
只对当时盒子收效;
处理办法:运用裁剪办法,如:ClipRRect
组件;
11.GestureDetector 设置 onTap 不收效怎样处理?
参阅答案:
运用GestureDetector
的behavior: 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
, 自带 getter
和 setter
,而如果是 final
或者 const
的话,那么它只要一个 getter
办法,Object
都支持 getter
、setter
重写
25.Assert(断语)有什么效果?什么时分有用?
参阅答案:
在debug
的时分提示出断语错误让开发者知悉,只在debug
有用;