一段凄惨Android 面试经历分享,败在了项目架构原理上……

大家应该看过很多分享面试成功的经验,但根据幸存者偏差的理论,也许多看看别人面试失败在哪里,对自己才更有帮助。

这是一位网友分享的面试经历,他准备了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动画

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/15701.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

都23年了你还记得渐进式框架是什么意思吗

vue 文章目录 vue前言一、眼见为实举个栗子二、渐进式的优势 前言 渐进式框架是一种能够逐步增强应用功能的框架,它允许开发者在不影响应用性能的情况下,逐步添加新的功能和特性。Vue.js提供了一些基础功能,如数据绑定和组件化,然…

这8个摸鱼神器,千万别让你老板知道!

工欲善其事,必先利其器,对于程序员来说也是如此,想早点下班就不能死脑筋,必须借助于一些开发工具来提高自己的工作效率,小编选取了8款任务/项目管理工具,能助你[打通任督二脉],工作效率大大提升…

React之动态路由创建以及解决刷新白屏问题

动态路由的创建和动态菜单的创建几乎类似,只不过的是,动态路由需要导入组件。这样才能完成跳转。 动态路由与动态菜单一样都需要封装一个转化函数,将后端传来的数据进行转换,转换成我们需要的格式。 需要导入的依赖 导入路由use…

【ChatGPT】阿里版 ChatGPT 突然官宣意味着什么?

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员,2024届电子信息研究生 目录 阿里版 ChatGPT 突然官宣 ​ ChatGPT 技术在 AI 领域的重要性 自然语言生成 上下文连续性 多语言支持 ChatGPT 未来可能的应用场景 社交领域 商业领域 ​编辑 医疗领域…

网络安全常用术语

肉鸡 肉鸡指的就是被黑客成功入侵并取得控制权限的电脑。黑客们可以随意的控制肉鸡,就像在使用自己的电脑一样,很形象的比喻,就像是养的肉鸡,任黑客宰杀和利用。关键的是,在成为肉鸡后,只要黑客不对电脑进…

linux|进程间通信如何加锁

进程间通信有一种[共享内存]方式,大家有没有想过,这种通信方式中如何解决数据竞争问题?我们可能自然而然的就会想到用锁。但我们平时使用的锁都是用于解决线程间数据竞争问题,貌似没有看到过它用在进程中,那怎么办&…

Java——把数组排成最小的数

题目链接 牛客网在线oj题——把数组排成最小的数 题目描述 输入一个非负整数数组numbers,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。 例如输入数组[3,32,321],则打印出这三个数字能…

如何提高三维模型OSGB格式转换3DTILES的转换速度和数据质量

如何提高三维模型OSGB格式转换3DTILES的转换速度和数据质量 提高三维模型从OSGB格式转换为3DTILES格式的转换速度和数据质量,可以从以下几个方面进行优化: 1、选用高效的转换工具:选择高效的转换工具是提高转换速度和数据质量的关键。目前市…

【react从入门到精通】深入理解React生命周期

文章目录 前言React技能树React的生命周期是什么React v16.0前的生命周期组件初始化(initialization)阶段组件挂载(Mounting)阶段组件更新(update)阶段组件销毁阶段 React v16.4 的生命周期总结写在最后 前言 在上一篇文章《react入门这一篇就够了》中我们已经掌握了React的基本…

ABTEST平台建设思路与方案

导读 ABTest的作用: 用ABTEST的结果数据,论证是因为某个业务方案的调整,对产品能力的影响。ABTEST是一个过程,只是为了证明改动的效果,其最终的阶段一定是对某个方案进行推全结束实验,避免稳定的业务流程…

docker 安装 datax和datax-web 之 datax-web登录时提示账号或密码错误

docker 安装docker 安装 datax和datax-web 安装教程地址: https://www.cnblogs.com/leihongnu/p/16612273.html 根据该博客的教程安装成功后,登录页面能打开,但是所提供的账户密码一直报错,这个就需要根据日志一步步去寻找原因了…

管理后台项目-07-菜单管理和动态展示菜单和按钮

目录 1-菜单管理 1.1-菜单管理列表 1.2-添加|修改功能 1.3-删除菜单 2-动态菜单按钮展示 2.1-路由文件的整理 2.2-动态展示不同的路由 1-菜单管理 当用户点击菜单管理的时候,会展示当前所有菜单,树型结构展示...并且可以对菜单进行新增编辑删除操…

2023-04-27:用go语言重写ffmpeg的remuxing.c示例。

2023-04-27:用go语言重写ffmpeg的remuxing.c示例。 答案2023-04-27: ffmpeg的remuxing.c是一个用于将多媒体文件从一种容器格式转换为另一种容器格式的命令行工具。它可以将音频、视频和字幕等元素从源文件中提取出来,并按照用户指定的方式…

基于SAM的二次开发案例收集分享

一、AnyLabeling[1]——制作人:vietanhdev AnyLabeling LabelImg Labelme Improved UI Autolabeling AnyLabeling软件是一个集成了YOLO、Segment Anything模型(AI支持)的高效数据标注工具,它可以通过点击目标的方式完成目标检…

Windows Vscode 远程连接Ubuntu, vscode检测到#include错误请更新includePath的解决方法

(闭坑)首先,我们要明白一点,就是我们在windows用vscode 远程连接了Ubuntu后,我们的Vscode的环境就是Ubuntu,不再是window了,所以出现问题,应该想到的是Ubuntu上的环境问题,而不是win…

机器学习与深度学习——通过SVM线性支持向量机分类鸢尾花数据集iris求出错误率并可视化

线性支持向量机 先来看一下什么叫数据近似线性可分,如下图所示,蓝色圆点和红色圆点分别代表正类和负类,显然我们不能找到一个线性的分离超平面将这两类完全正确的分开;但是如果将数据中的某些特异点(黑色箭头指向的点)去除之后&a…

根据cadence设计图学习硬件知识day06 了解一些电源转化芯片和 稳压器 和 开关芯片

1. TPL920 (高精度线性稳压器) 1.1.TPL920 介绍 TPL920系列产品是2A大电流、6μVRMS低噪声、高PSRR、高精度线性稳压器,通常具有在2A负载条件下的110 mV超低电压降。这TPL920系列产品同时支持固定输出电压范围从0.8伏到3.95伏,输出电压可调范围为0.8V至…

肝一肝设计模式【四】-- 建造者模式

系列文章目录 肝一肝设计模式【一】-- 单例模式 传送门 肝一肝设计模式【二】-- 工厂模式 传送门 肝一肝设计模式【三】-- 原型模式 传送门 肝一肝设计模式【四】-- 建造者模式 传送门 文章目录 系列文章目录前言一、什么是建造者模式二、举个栗子三、静态内部类写法四、开源框…

内存取证小练习-基础训练

这是题目和wolatility2.6的链接 链接:https://pan.baidu.com/s/1wNYJOjLoXMKqbGgpKOE2tg?pwdybww 提取码:ybww --来自百度网盘超级会员V4的分享 压缩包很小,题目也比较简单基础,可以供入门使用 1:Which volatility…

【QT5:CAN卡通信的上位机-代码练习-收发数据+布局+引用外部库+基础样例(1)】

【QT5:CAN卡通信的上位机-代码练习-收发数据布局引用外部库基础样例1】 1、概述2、实验环境3、自我总结和提升4、事先声明5、效果展示6、代码编写过程(1)操作步骤部分1、新建工程2、加入外部库,并且加入qt工程中3、ui页面布局4、代码练习5、运…