大家应该看过很多分享面试成功的经验,但根据幸存者偏差的理论,也许多看看别人面试失败在哪里,对自己才更有帮助。
这是一位网友分享的面试经历,他准备了3个月,刚刚参加完字节跳动的第三面,视频面,嗯,挂了…
网友:你好,大佬
大佬:你好
网友:最近出去面试,很多面试官问了MVVM相关问题
大佬:嗯嗯,回答的怎么样?
网友:上来DataBinding,ViewModel,LiveData一套给我搞晕了,我估计我要挂了
大佬:是的,稍微对MVVM有一点经验的面试官都会请你举例说明,好证明你确实对MVVM有着正确,深入的理解!
网友:大佬觉得我应该如何回答好啊?
大佬:首先,你要分析你为什么使用MVVM,它相对于其他MVP这类架构师如何解决你的项目问题的,另外,还要回答jetpack使用过程中遇到的坑是怎样的。最后,面试官估计会问你对各种架构的选择的对比原则之类的哦
网友:好的,明白了,谢谢哦
网友:对了,请问大佬现在 Android 可开发是不是都是用MVVM+jetpack的方式作为主流框架啊?有没有什么好的项目可以给学习一下吗?
大佬:嗯,是的,现在MVVM + jetpack 使用非常广泛,也确实好用,我给你一个开源项目给你,你学习一下,然后重构一下你自己的项目哦
网友:谢谢大佬
面试题:谈谈Jetpack和MVVM模式,你有在自己的项目中使用过吗?
好吧,这个问题相信很多面试者都遇到过,结果说明Jetpack和MVVM模式并没有到妇孺皆知的境地。不过也好,这么一个简单的问题就可以很容易区分出面试者是否对Android开发有热情。接下来我们谈谈为什么面试过程为什么爱问Jetpack和MVVM模式。
为何使用 Android Jetpack?
快速开发组件可以单独采用(不过这些组件是为协同工作而构建的),同时利用 Kotlin 语言功能帮助您提高工作效率。
消除样板代码
Android Jetpack 可管理繁琐的 Activity(如后台任务、导航和生命周期管理),以便您可以专注于如何让自己的应用出类拔萃。
构建高质量的强大应用
Android Jetpack 组件围绕现代化设计实践构建而成,具有向后兼容性,可以减少崩溃和内存泄漏。
大厂招聘需求
现如今,Jetpack 组件及 MVVM架构配套使用的方案的确立,意味着 Android 开发已步入非常成熟阶段:开发者可以减少许多样板代码的书写,只需要通过模版工具自动生成就可以了,在取缔非常多的耗时的重复工作的同时,减少了很多因为忘记 unRegister带来的各种问题。这十分符合企业的需要,企业可以减少很多开发成本,面试官在招人的时候,也可以更加看重应试者对 架构组件的思维理解 —— 至少是 MVVM 的理解程度。
MVVM 已经被实践证明是一种优秀的设计模式。能很好地将 UI 、交互逻辑、业务逻辑和数据解耦。
但是面试过程中回答像“解耦”等 含糊其辞的说法,面试官并不知道你在说什么,因为纸上谈兵大家都会,稍微对 MVVM 有一点经验的面试官都会请你举例说明,好证明你确实对 MVVM 你确实做过,理解过,并且能够应用,而不是做功能开发,这样可以鉴别开发者是否能够自然而然地写出标准化、范化的代码,能够迅速适应各家公司自制的自动化模版工具。
Jetpack+MVVM=?
Jetpack是一种新的架构方式,从工作到现在,我们经历过了MVC、MVP、MVVM、Clean等,每个项目由于项目特点和需求的不同,都会出现一套基于开发者所设计的架构模式,分层、组件化、模块化,每一种设计都是基于项目所在场景的,很难适合所有项目场景。但是Jetpack,它的定义更像是一套工具或者说指导;是谷歌正式推出的一整套用来构建APP开发的组件。
MVVM 架构模式可以说是Google “钦定”的 Android 开发未来的第一架构。
从Model-View-ViewModel 这个名字来看,它由三个部分组成,其中视图模型(ViewModel)其实就是 PM 模式中的展示模型。除了我们非常熟悉的 Model、View 和 ViewModel 这三个部分,在 MVVM 的实现中,还引入了隐式的一个 Binder 层,我们要完整的采用 MVVM 必须熟练的掌握 DataBinding 等基础组件。大公司App的开发需要基于模块化、层次化、组件化、控件化的思路来设计架构,从而提高App的需求的应变能力和可靠性。Artifactory对模块化和组件化大有帮助;Jetpack可以有效减少Oom和奔溃;Mvvm则可以满足需求的变化,那么这些你都会吗?
为了帮助到大家提升对 Android 项目架构框架方面的理解,耗时一个星期左右的时间,查阅各大技术平台的文章,将一些凌乱的知识点进行了整合,得出了这份《Android Jetpack全家桶》(内含compose)架构知识点手册 ,至于目录内容大家可以参考下面的内容:
Jetpack 部分:https://qr18.cn/A0gajp
1.Jetpack之Lifecycle
- 万物基于 Lifecycle
- 手动管理生命周期的痛苦你不懂
- 按照惯例的思考
- 观察者模式
- 引入 Lifecycle 后
- 源码结构
- 简单的源码分析
- activity 生命周期处理
- fragment 生命周期处理
- Lifecycle State 大小比较
2.Jetpack之ViewModel
- ViewModel 的职责
- 作为数据持有者
- Fragment 间共享数据
- 代替 Loader
- 总结
- ViewModel 源码分析
3.Jetpack之DataBinding
- 数据驱动魔法师
- DataBinding 基础
- DataBinding 引入
- 感受魔法的魅力
- 总结
4.Jetpack之Navigation
- 没有 Navigation 的世界
- Navigation 简介
- Navigation 能做什么
- Navigation 工作逻辑
- Navigation Graph
- NavHost
- NavController
- 总结
- ……
5.Jetpack之LiveData
- 我们都是 Adapter
- 理想的数据模型
- LiveData 的错误用法
- 源码结构
- 源码分析
- 总结
Compose 知识点部分:https://qr18.cn/A0gajp
1.Jetpack Compose入门详解
- 优势与缺点
- 安卓官方Jetpack Compose 四节课
- 标准布局组件
- xml和compose混合使用 + livedata数据绑定
- compose结合navigation使用
- Compose 中的 ConstraintLayout
- Compose 手写一个分享二维码弹窗
- Compose 设置颜色的三种方式
- Compose事件与状态简略介绍
- Compose中的预览@Preview与@PreviewParameter的使用
2.Compose学习笔记
- 基本控件
- Composable和MutableState
- 重组和无状态
- 状态机制和重组优化
- derivedStateOf和remember的使用
- CompositionLocal的应用场景
- Compose动画之AnimateSpec
- Compose动画之DecayAnimation
- Compose动画之中止和入场效果
3.Compose 动画使用详解
- Compose 中属性动画的使用探索
- 状态改变动画animateXxxAsState
- 自定义animateXxxAsState动画