如何做好面试突击,规划学习方向?
面试题集可以帮助你查漏补缺,有方向有针对性的学习,为之后进大厂做准备。但是如果你仅仅是看一遍,而不去学习和深究。那么这份面试题对你的帮助会很有限。最终还是要靠资深技术水平说话。
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。建议先制定学习计划,根据学习计划把知识点关联起来,形成一个系统化的知识体系。
学习方向很容易规划,但是如果只通过碎片化的学习,对自己的提升是很慢的。
同时我还搜集整理2020年字节跳动,以及腾讯,阿里,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 Xmind(实际上比预期多花了不少精力),包含知识脉络 + 分支细节。
在搭建这些技术框架的时候,还整理了系统的高级进阶教程,会比自己碎片化学习效果强太多。
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
To add assets to your application, add an assets section, like this:
assets:
- images/a_dot_burr.jpeg
- images/a_dot_ham.jpeg
An image asset can refer to one or more resolution-specific “variants”, see
https://flutter.dev/assets-and-images/#resolution-aware.
For details regarding adding assets from package dependencies, see
https://flutter.dev/assets-and-images/#from-packages
To add custom fonts to your application, add a fonts section here,
in this “flutter” section. Each entry in this list should have a
“family” key with the font family name, and a “fonts” key with a
list giving the asset and other descriptors for the font. For
example:
fonts:
- family: Schyler
fonts:
- asset: fonts/Schyler-Regular.ttf
- asset: fonts/Schyler-Italic.ttf
style: italic
- family: Trajan Pro
fonts:
- asset: fonts/TrajanPro.ttf
- asset: fonts/TrajanPro_Bold.ttf
weight: 700
For details regarding fonts from package dependencies,
see https://flutter.dev/custom-fonts/#from-packages
这里面就是对工程的配置,库的依赖,资源的依赖等
### []( )3\. 项目简介
这是Flutter的入口函数,runApp启动的Widget
void main() => runApp(MyApp());
**MyApp**类代表 **Flutter** 应用,它继承了 **StatelessWidget**类,这也就意味着应用本身也是一个**widget**。
在 **Flutter** 中,大多数东西都是 **widget(后同“组件”或“部件”)**,包括对齐(**Align**)、填充(**Padding**)、手势处理(**GestureDetector**)等,它们都是以 **widget** 的形式提供。
**Flutter** 在构建页面时,会调用组件的**build**方法,**widget** 的主要工作是提供一个 **build()** 方法来描述如何构建 UI 界面(通常是通过组合、拼装其它基础 **widget** )。
**MaterialApp** 是**Material** 库中提供的 **Flutter APP** 框架,通过它可以设置应用的名称、主题、语言、首页及路由列表等。**MaterialApp**也是一个 **widget**。
**home** 为 **Flutter** 应用的首页,它也是一个 **widget**。
![在这里插入图片描述](https://img-blog.csdnimg.cn/b909c95c47554035a3272530bc37b3fa.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN54ix5a2m5Lmg55qE54yq,size_20,color_FFFFFF,t_70,g_se,x_16)
**MyHomePage** 是应用的首页,它继承自**StatefulWidget**类,表示它是一个有状态的组件\*\*(Statefulwidget)\*\*。关于有状态组件和无状态组件,我在后面会和大家讲,现在只需要知道他是一个有状态组件就可以了。
**Statefulwidget** 可以拥有状态,这些状态在 **widget** 生命周期中是可以变的,而 **Statelesswidget** 是不可变的。
**Stateful widget** 至少由两个类组成:
一个**StatefulWidget**类。
一个 **State**类; **StatefulWidget**类本身是不变的,但是State类中持有的状态在 **widget** 生命周期中可能会发生变化。
**\_MyHomePageState**类是**MyHomePage**类对应的状态类。看到这里,读者可能已经发现:和**MyApp** 类不同, **MyHomePage**类中并没有**build**方法,取而代之的是,**build**方法被挪到了\*\*\_MyHomePageState\*\*方法中。
![在这里插入图片描述](https://img-blog.csdnimg.cn/dbb780253c0d4517bd7940e6c2b3b4b0.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN54ix5a2m5Lmg55qE54yq,size_20,color_FFFFFF,t_70,g_se,x_16)
### []( )State类
接下来,我们看看\*\*\_MyHomePageState\*\*中都包含哪些东西:
该组件的状态。由于我们只需要维护一个点击次数计数器,所以定义一个\*\*\_counter\*\*状态:
int _counter = 0; //用于记录按钮点击的总次数
**\_counter** 为保存屏幕右下角带“+”号按钮点击次数的状态。
设置状态的自增函数。
void _incrementCounter() {
setState(() {
_counter++;
});
}
当按钮点击时,会调用此函数,该函数的作用是先自增\*\*\_counter\*\*,然后调用**setState** 方法。**setState**方法的作用是通知 **Flutter** 框架,有状态发生了改变,**Flutter** 框架收到通知后,会执行 **build** 方法来根据新的状态重新构建界面, **Flutter** 对此方法做了优化,使重新执行变的很快,所以你可以重新构建任何需要更新的东西,而无需分别去修改各个 **widget**。
### []( )构建UI界面
构建UI界面的逻辑在 build 方法中,当**MyHomePage**第一次创建时,**\_MyHomePageState**类会被创建,当初始化完成后,**Flutter**框架会调用 **widget** 的**build**方法来构建 widget 树,最终将 **widget** 树渲染到设备屏幕上。所以,我们看看\*\*\_MyHomePageState**的**build\*\*方法中都干了什么事:
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
const Text(
'You have pushed the button this many times:',
),
Text(
'$_counter',
style: Theme.of(context).textTheme.headline4,
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: const Icon(Icons.add),
), // This trailing comma makes auto-formatting nicer for build methods.
);
}
**Scaffold** 是 **Material** 库中提供的页面脚手架,它提供了默认的导航栏、标题和包含主屏幕 widget 树(后同“组件树”或“部件树”)的body属性,组件树可以很复杂。本书后面示例中,路由默认都是通过**Scaffold**创建。
**body**的组件树中包含了一个**Center** 组件,**Center** 可以将其子组件树对齐到屏幕中心。此例中, **Center** 子组件是一个**Column** 组件,**Column**的作用是将其所有子组件沿屏幕垂直方向依次排列; 此例中**Column**子组件是两个 Text,第一个Text 显示固定文本 “You have pushed the button this many times:”,第二个Text 显示\*\*\_counter\*\*状态的数值。
**floatingActionButton**是页面右下角的带“+”的悬浮按钮,它的**onPressed**属性接受一个回调函数,代表它被点击后的处理器,本例中直接将\*\*\_incrementCounter\*\*方法作为其处理函数。
## 总结:
各行各样都会淘汰一些能力差的,不仅仅是IT这个行业,所以,不要被程序猿是吃青春饭等等这类话题所吓倒,也不要觉得,找到一份工作,就享受安逸的生活,你在安逸的同时,别人正在奋力的向前跑,这样与别人的差距也就会越来越遥远,加油,希望,我们每一个人,成为更好的自己。
* BAT大厂面试题、独家面试工具包,
* 资料包括 数据结构、Kotlin、计算机网络、Framework源码、数据结构与算法、小程序、NDK、Flutter,
![](https://img-blog.csdnimg.cn/img_convert/18191202e9739091c3abd47972adffbf.webp?x-oss-process=image/format,png)
![](https://img-blog.csdnimg.cn/img_convert/d951b33fc9d0c2f770c8dc08a4c3db45.webp?x-oss-process=image/format,png)
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618156601)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
图片转存中...(img-GEeCyfQ2-1715448311632)]
[外链图片转存中...(img-uWDcqG0u-1715448311632)]
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618156601)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**