金三银四Android 开发到底该刷那些题?方向在哪?

  • 参考回答:

  • 首先我们要清楚图片的三级缓存是如何的

如果内存足够时不回收。内存不够时就回收软引用对象

2、内存中如果加载一张 500*500 的 png 高清图片.应该是占用多少的内存?
  • 参考回答:

  • 不考虑屏幕比的话:占用内存=500 * 500 * 4 = 1000000B ≈0.95MB

  • 考虑屏幕比的的话:占用内存= 宽度像素 x (inTargetDensity / inDensity) x 高度像素 x(inTargetDensity / inDensity)x 一个像素所占的内存字节大小

  • inDensity 表示目标图片的 dpi(放在哪个资源文件夹下),inTargetDensity 表示目标屏幕的 dpi

3、WebView 的性能优化 ?
  • 参考回答:

  • 一个加载网页的过程中,native、网络、后端处理、CPU 都会参与,各自都有必要的工作和依赖关系;让他们相互并行处理而不是相互阻塞才可以让网页加载更快:

  • WebView 初始化慢,可以在初始化同时先请求数据,让后端和网络不要闲着。

  • 常用 JS 本地化及延迟加载,使用第三方浏览内核

  • 后端处理慢,可以让服务器分 trunk 输出,在后端计算的同时前端也加载网络静态资源。

  • 脚本执行慢,就让脚本在最后运行,不阻塞页面解析。

  • 同时,合理的预加载、预缓存可以让加载速度的瓶颈更小。

  • WebView 初始化慢,就随时初始化好一个 WebView待用。

  • DNS 和链接慢,想办法复用客户端使用的域名和链接。

4、Bitmap 如何处理大图,如一张 30M 的大图,如何预防 OOM?
5、内存回收机制与 GC 算法(各种算法的优缺点以及应用场景);GC 原理时机以及 GC 对象
6、内存泄露和内存溢出的区别 ?AS 有什么工具可以检测内存泄露
7、性能优化,怎么保证应用启动不卡顿? 黑白屏怎么处理?
8、强引用置为 null,会不会被回收?
9、ListView 跟 RecyclerView 的区别
10、ListView 的 adapter 是什么 adapter
11、LinearLayout、FrameLayout、RelativeLayout 性能对比,为什么?

Android 面试知识点大全

Android 进阶延伸点


1、如何进行单元测试,如何保证 App 稳定 ?
  • 参考回答:

要测试 Android 应用程序,通常会创建以下类型自动单元测试

  • 本地测试:只在本地机器 JVM 上运行,以最小化执行时间,这种单元测试不依赖于 Android 框架,或

者即使有依赖,也很方便使用模拟框架来模拟依赖,以达到隔离 Android 依赖的目的,模拟框架如

Google 推荐的 Mockito;

  • 检测测试:真机或模拟器上运行的单元测试,由于需要跑到设备上,比较慢,这些测试可以访问仪器(Android 系统)信息,比如被测应用程序的上下文,一般地,依赖不太方便通过模拟框架模拟时采用这种方式;

  • 注意:单元测试不适合测试复杂的 UI 交互事件

  • App 的稳定主要决定于整体的系统架构设计,同时也不可忽略代码编程的细节规范,正所谓“千里之堤,溃于蚁穴”,一旦考虑不周,看似无关紧要的代码片段可能会带来整体软件系统的崩溃,所以上线之前除了自己本地化测试之外还需要进行 Monkey 压力测试

  • 少部分面试官可能会延伸,如 Gradle 自动化测试、机型适配测试等

2、Android 中如何查看一个对象的回收情况 ?
  • 参考回答:

  • 首先要了解 Java 四种引用类型的场景和使用(强引用、软引用、弱引用、虛引用)

  • 举个场景例子:SoftReference 对象是用来保存软引用的,但它同时也是一个 Java 对象,所以当软引用对象被回收之后,虽然这个 SoftReference 对象的 get 方法返回 null,但 SoftReference 对象本身并不是 null,而此时这个 SoftReference 对象已经不再具有存在的价值,需要一个适当的清除机制,避免大量 SoftReference 对象带来的内存泄露

  • 因此,Java 提供 ReferenceQueue 来处理引用对象的回收情况。当 SoftReference 所引用的对象被 GC 后,JVM 会先将 softReference 对象添加到 ReferenceQueue 这个队列中。当我们调用 ReferenceQueue 的 poll()方法,如果这个队列中不是空队列,那么将返回并移除前面添加的那个Reference 对象。

3、Apk 的大小如何压缩 ?
  • 参考回答:

  • 一个完整 APK 包含以下目录(将 APK 文件拖到 Android Studio):

  • META-INF/:包含 CERT.SF 和 CERT.RSA 签名文件以及 MANIFEST.MF 清单文件。

  • assets/:包含应用可以使用 AssetManager 对象检索的应用资源。

  • res/:包含未编译到的资源 resources.arsc。

  • lib/:包含特定于处理器软件层的编译代码。该目录包含了每种平台的子目录,像 armeabi,armeabi-v7a, arm64-v8a,x86,x86_64,和mips。

  • resources.arsc:包含已编译的资源。该文件包含 res/values/ 文件夹所有配置中的 XML 内容。打包工具提取此 XML 内容,将其编译为二进制格式,并将内容归档。此内容包括语言字符串和样式,以及直接包含在** resources.arsc*8 文件中的内容路径 ,例如布局文件和图像。

  • classes.dex:包含以 Dalvik / ART 虚拟机可理解的 DEX 文件格式编译的类。

  • AndroidManifest.xml:包含核心 Android 清单文件。该文件列出应用程序的名称,版本,访问权限和引用的库文件。该文件使用 Android 的二进制XML 格式。

  • lib、class.dex 和 res 占用了超过 90%的空间,所以这三块是优化 Apk 大小的重点(实际情况不唯一)

  • 减少 res,压缩图文文件

  • 图片文件压缩是针对 jpg 和 png 格式的图片。我们通常会放置多套不同分辨率的图片以适配不同的屏幕,这里可以进行适当的删减。在实际使用中,只保留一到两套就足够了(保留一套的话建议保留 xxhdpi,两套的话就加上 hdpi),然后再对剩余的图片进行压缩(jpg 采用优图压缩,png 尝试采用pngquant 压缩)

  • 减少 dex 文件大小

  • 添加资源混淆

  • shrinkResources 为 true 表示移除未引用资源,和代码压缩协同工作。

  • minifyEnabled 为 true 表示通过 ProGuard 启用代码压缩,配合 proguardFiles 的配置对代码进行混淆并移除未使用的代码。

  • 代码混淆在压缩 apk 的同时,也提升了安全性。

  • 减少 lib 文件大小

  • 由于引用了很多第三方库,lib 文件夹占用的空间通常都很大,特别是有 so 库的情况下。很多 so 库会同时引入 armeabi、armeabi-v7a 和 x86 这几种类型,这里可以只保留 armeabi 或 armeabi-v7a 的其中一个就可以了,实际上微信等主流 app 都是这么做的。

  • 只需在 build.gradle 直接配置即可,NDK 配置同理

4、如何通过 Gradle 配置多渠道包?
  • 参考回答:

  • 首先要了解设置多渠道的原因。在安装包中添加不同的标识,配合自动化埋点,应用在请求网络的时候携带渠道信息,方便后台做运营统计,比如说统计我们的应用在不同应用市场的下载量等信息

  • 这里以友盟统计为例

  • 首先在 manifest.xml 文件中设置动态渠道变量:

  • 接着在 app 目录下的 build.gradle 中配置productFlavors,也就是配置打包的渠道:

  • 最后在编辑器下方的 Teminal 输出命令行

  • 执行./gradlew assembleRelease ,将会打出所有渠道的 release 包;

  • 执行./gradlew assembleVIVO,将会打出VIVO 渠道的 release 和 debug 版的包;

  • 执行./gradlew assembleVIVORelease 将生成 VIVO 的 release 包。

5、插件化原理分析

6、组件化原理

7、组件化中路由、埋点的实现

8、Hook 以及插桩技术

9、请例举 Android 中常用布局类型,并简述其用法以及排版效率

10、区别 Animation 和 Animator 的用法,概述其原理

11、使用过什么图片加载库?Glide 的源码设计哪里很微妙?

12、用过哪些网络加载库?OkHttp、Retrofit 实现原理?

13、对于应用更新这块是如何做的? (灰度,强制更新、分区域更新)

14、会用 Kotlin、Fultter 吗? 谈谈你的理解

Android 面试知识点大全

最后


因为文章篇幅长度有限制,暂且只能分享到这了。但小编利用闲暇时刻,将Android 相关更多的面试题及答案收集整理了PDF文档形式,并上传之GitHub中,如果大家想参考学习Android 相关面试题及一些知识点可以直接去我 GitHub 项目地址:https://github.com/733gh/Android-T3 中进行查看。

最后

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

上面分享的腾讯、头条、阿里、美团、字节跳动等公司2019-2021年的高频面试题,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。

【Android思维脑图(技能树)】

知识不体系?这里还有整理出来的Android进阶学习的思维脑图,给大家参考一个方向。

【Android高级架构视频学习资源】

**Android部分精讲视频领取学习后更加是如虎添翼!**进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 27
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值