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

news2025/1/15 14:37:16

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数说故事联合中山大学国际关系学院共建「国关数据实验室」,深化数据科学与国际关系融合创新

4月9日,数说故事联合中山大学国际关系学院共建的「国关数据实验室」正式启动,此次强强联合是双方在国际关系领域的一项创新尝试,该实验室旨在整合数说故事和国际关系学院师生的资源优势,将数据科学与国际关系研究相结合&#xff0…

真实还原美团4面经历,低学历成功拿到20K Offer...

个人背景 如标题所示,我的个人背景非常简单,软件测试经验 1 年半,学历普通,2 本毕业后出来就一直在做功能测试,在公司每天重复的工作对我的技术提升并没有什么帮助,但小镇出来的我也深知自我努力的重要性&…

Binder 与 四大组件工作原理 其一

Binder Binder的组成结构 Binder的架构如图所示 ServiceManager负责把Binder Server注册到一个容器中。 我们可以这样理解Client、Server 、ServiceManager、Binder Driver之间的关系: 把ServiceManager比喻成电话局,存储着每个住宅的座机电话。张三给…

记录-Vue移动端日历设计与实现

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 工作中遇到一个需求是根据日历查看某一天/某一周/某一月的睡眠报告,但是找了好多日历组件都不是很符合需求,只好自己手写一个日历组件,顺便记录一下。 先看看UI给的…

linux文件编辑与编辑命令

文章目录 一、linux文件编辑与编辑命令总结 一、linux文件编辑与编辑命令 Linux mkdir命令:创建目录 Linux more命令:显示文本文件内容 Linux cat命令:连接文件并打印到标准输出设备上 Linux grep命令:检索文件内容 Linux rm命令:删除文件或目录 Linux touch命令:修改文件的时…

15款时间计划、任务管理APP/软件对比(团队\个人)

15 款不同类型的日程、任务管理应用:1.PingCode;2.Worktile;3.Todoist;4.Trello;5.Microsoft To Do;6.Asana;7.Google 任务;8.Notion;9.Monday.com;10.Teambi…

Matlab对日期变量和时间变量的管理

Matlab2012a内置了三个函数 datanumdatevecdatestr 靠这三个函数,可以基本实现日期变量和时间变量的管理。下面直接来看。 (1)datanum 这个函数用来将字符串,日期矢量转为通用日(数值型)。所谓的通用日…

js特殊对象 - RegExp对象(正则表达式)

1、概述 正则表达式用于定义一些字符串的规则,计算机可以根据正则表达式,来检查一个字符串是否符合规则,获取将字符串中符合规则的内容提取出来。 使用typeof检查正则对象,会返回object。 2、创建正则对象 2.1、使用对象创建 语法…

Java spring 注解 @PostConstruct 实战讲解

前言 在最近的学习中,发现了一个非常实用的注解 —— PostConstruct。通过学习了解,逐步发现它能帮助我更轻松的解决不少原本很复杂的问题。 下面,结合实例介绍 PostConstruct 注解的特性,因为PreDestroy基本用不到,所…

C++算法初级11——01背包问题(动态规划2)

C算法初级11——01背包问题(动态规划2) 文章目录 C算法初级11——01背包问题(动态规划2)问题引入0-1背包问题分析0-1背包问题的形式化分析优化 问题引入 辰辰采药 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大…

Ubuntu开机自启动一些东西

有三种方式做开机自启动 目录 1.免除sudo密码 2.Startup 2.desktop 3.service 1.免除sudo密码 做完这一步你的所有sudo命令都不会再让你输密码了 如果你的开机自启动的东西需要sudo,那么这一步就是必须的,如果不需要sudo,那么这一步可…

Linux安装kubectl

前言 以下所有命令基于CentOS7.9系统,官方参考文档:> 文章最后附有一键安装的脚本,可以直接运行脚本进行安装 下载安装文件 1. 下载最新发行版 curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/st…

C嘎嘎~~[类 中篇]

类 中篇 6.类的实例化7.类对象模型8.this指针8.1this指针是什么8.2this指针的特性 6.类的实例化 什么叫类的 实例化?? 首先, 我们应该关注这个"实" — 实际存在的, 它的反义词是 “虚” — 不存在的. > 类中的成员变量是虚的(相当于声明), 在类外面创建的对象是…

《程序员面试金典(第6版)》面试题 16.06. 最小差(双指针,pair数据结构)

题目描述 给定两个整数数组a和b,计算具有最小差绝对值的一对数值(每个数组中取一个值),并返回该对数值的差 示例: 输入:{1, 3, 15, 11, 2}, {23, 127, 235, 19, 8}输出:3,即数值对(…

Power BI动态日期轴方法总结

趋势,应该是我们做可视化时最熟悉的一个词了,看趋势自然离不开日期,年度趋势,月趋势,周趋势等等。Power BI中我们可以借助于计算表,计算组,字段参数来实现动态实时轴的效果。 计算表实现动态日…

Node.js--基础

一、Node.js是什么 Node.js is a JavaScript runtime built on Chrome’s V8 JavaScript engine. 1、特性 Node.js 可以解析JS代码(没有浏览器安全级别的限制)提供很多系统级别的API,如: 文件的读写 (File System)进程的管理 …

每日一个小技巧:1分钟告诉你文字转图片的方法有哪些

在数字时代,信息传递快速便捷,但文字在传递中却显得单调乏味,难以吸引人们的眼球。为了解决这个问题,越来越多的人开始寻找方法将文字转化为图片。文字转图片不仅能够让文字更具视觉冲击力,还能够在社交媒体、广告宣传…

Nginx常见应用场景

文章目录 场景一:代理静态文件场景二:代理服务器 本教程讲述 Nginx 的常见应用场景。内容接上文:Nginx基本配置。 前提:假设我们已经安装好了 Nginx,并启动成功。 场景一:代理静态文件 Nginx 一个常用的功…

Hilt 和协程助力启动框架搭建:解决代码混乱和初始化策略问题

关于Hilt的使用,目前已经比较普及了,想必大家已经知道。今天说的是一个如何利用Hilt来做一个启动框架的故事。 是否经历过大型项目的启动优化,一遍过去无任何效果,第二遍过去好几处报错,第三遍过去启动不了&#xff0…

开放耳机有什么优缺点,列举出几款口碑不错的开放式耳机

开放式耳机是通过骨头振动传递声音,而不是通过耳道或鼓膜,因此它具有许多优势,比如可以在运动过程中保持对环境的感知,并避免对听力造成伤害。随着科技的进步和用户需求的增加,开放式耳机也在不断更新。目前市面上的开…