Android面试相关整理
最近有一点找工作的打算,想补下面试题。但是发现网上面试相关的文章特别多,不知道从何看起,所以简单的总结了一下我有印象的一些,方便自己随时查看,本想带下个人评价,但有些没有仔细看,而且也不敢说自己比得过下面这些大佬的水平,所以没有轻易评价,大家自己分辨好坏。
如果大家有推荐,可以给我留言,我好补上。 因为我自己喜欢看比较新的面试题,我想大家都有这个需求,所以把最后更新时间也列了出来。
1. Kotlin
-
Kotlin 通常被视为下一个 Java,它是由谷歌和 JetBrains(Android Studio 开发者)赞助的。Java 从一开始就一直是 Android 应用的首选开发语言,但近年来 Kotlin 迅速普及,如今在 10,000 种 Google Play 应用中有近 60%使用了 Kotlin[3]。虽说在少数需要访问底层原生代码的情况下,仍会继续使用 C++;但在其他情况下,Kotlin 都可以代替 Java。
-
Kotlin 的主要优势是与 Java 的完全互操作性,这意味着开发人员可以尽可能迁移旧代码,而不用完全重写整个应用程序。这两种语言兼容得很好,Android Studio 甚至可以自动从 Java 转换为 Kotlin。
-
这种兼容性,加上更简洁的语法和数百项细小改进,使 Kotlin 在 StackOverflow 的 2019 年开发人员调查 [4] 中成为第四大“最受欢迎”和第五大“想要”的编程语言,在所有移动编程语言中排名最高。
-
迁移现有应用有一个好方法,就是在修改现有 Java 文件时将其转换为 Kotlin。虽然这意味着你要把经常编辑的文件转换过去,会增加代码审查的复杂度(比如会面临潜在的冲突),但由于转换后的区域能得到审查,因此可以确保任何问题都能被发现。
-
目前 Candyspace 中使用的 Kotlin 代码占 86%(并且一直在增长),其余的 14%是实用工具 / 转换代码,这些代码已经有些年头没改动过了。
2. Jetpack
谷歌的 AndroidX/Jetpack 库是一组实用工具,旨在简化常见的应用需求。例如用于设备上数据库的 Room[5],或用来在底层数据更改时更新显示内容的 LiveData[6]。
有了 Jetpack 库,新项目就省掉了重新发明轮子的麻烦,也不必等待其他开发人员来开源他们的实现方式,现在每位开发者都能获取到那些基础要素了。这些库更新非常频繁,新功能不断推出,错误修复也会及时发布。由于这些库是为了协同工作而构建的,因此多使用 AndroidX 库有助于最大程度地减少应用中出现意外。
从开发工作起步开始就使用 Jetpack 库可以节省数百小时的时间,但我们也可以将已有的应用迁移到 Jetpack 库上面。虽然看起来很麻烦,但由于这些库非常流行,针对迁移工作的指南也很容易找到。至少,底层 Android 元素(视图、片段等)可以自动转换 [7]。
在 Candyspace,我们使用了 Data Binding 和 ViewModel,并可能很快加入 Room 和 Navigation。
3. 模块化设计
-
一直以来,应用都被构建为一个巨大的“应用”模块,其中包含整个应用所需的一切。尽管这样做确实能让资源共享起来更容易,但也意味着这个应用的某些部分无法为其他应用 / 开源项目所重用;更重要的是,对应用做出更改时必须重新编译整个代码库。
-
相反,如果应用由许多较小的模块组成,则只需重新编译做出更改的代码即可,从而大大缩短了构建时间。此外,模块化设计还为高级 Android 特性(例如即时应用——用户无需安装任何内容即可使用你的应用的部分功能,和动态特性——按需安装应用的各个部分)的应用打开了大门。
-
将一款现有应用拆分为多个模块可能会是一个很复杂的工作,因为会因此而发现之前隐藏的问题(“DateUtility 是什么东西?为什么每个类都需要它!?”);但是一旦改造完成,代码库就会进入一种更加健康的状态。另外,如果一款新的应用需要类似的功能,则可以快速重用已有模块,从而大大节省时间!
模块化应用架构的一个示例
虽然设计一个模块化架构可能是很复杂的任务,但我之前已经写过一些指导性原则 [8],这些原则受到了 Nikits Kozlov 关于模块化和构建时间的文章 [9] 的启发。Plaid 也写了一篇介绍他们向模块化设计迁移经验的文章 [10]。
在 Candyspace,我们的应用设计都是完全模块化的,以尽量减少构建时间对开发工作的中断影响。
4. App Bundle
使用传统的 APK 将应用分发到用户的设备时,必须安装针对所有设备准备的所有资源。这意味着每张位图图像可能会有 5 个副本(用于不同的屏幕精度),还要安装针对不同设备架构的多个库版本,甚至还得安装多组边距和填充值。
使用 App Bundle 分发一款应用时,用户下载的 APK 只包含他们实际所需要的资源。这样一来,平均的应用大小就会减少 20%,而未经优化的应用改换格式后应用大小将会得到更显著的缩减。
缩减应用大小的示例(资料来源于Google I/O 2018)
App Bundles 是 18 个月前刚刚诞生的,但已经有超过 25%的应用安装时使用了这种格式!这是谷歌推荐使用的格式 [11],并且大多数应用几乎无需改动就能使用这种格式,只需在 Play 商店上处理一下 App Bundle 的签名即可。
在 Candyspace,我们正在迁移到 App Bundles 上,同时尽量避免破坏我们现有的工作流程(Slack、QAing 构建、非 Google Play 安装)。Alistair Sykes 的文章是一份很棒的迁移参考资料 [12],文章考虑到了 CI 服务器、Slack 和 Google Play 内部应用共享等事项。
最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上我搜集整理的2019-2021BATJ 面试真题解析,我把大厂面试中常被问到的技术点整理成了PDF,包知识脉络 + 诸多细节。
节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
一键领取:【Android超硬核面试资料】
《960全网最全Android开发笔记》
《379页Android开发面试宝典》
历时半年,我们整理了这份市面上最全面的安卓面试题解析大全
包含了腾讯、百度、小米、阿里、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。熟悉本文中列出的知识点会大大增加通过前两轮技术面试的几率。
如何使用它?
1.可以通过目录索引直接翻看需要的知识点,查漏补缺。
2.五角星数表示面试问到的频率,代表重要推荐指数
《507页Android开发相关源码解析》
只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。
真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。
腾讯、字节跳动、阿里、百度等BAT大厂 2019-2021面试真题解析
80820206)]
腾讯、字节跳动、阿里、百度等BAT大厂 2019-2021面试真题解析
[外链图片转存中…(img-jguchFw9-1621480820207)]
资料太多,全部展示会影响篇幅,暂时就先列举这些部分截图,大家可以点击这里自行获取。