Android面试|任何东西只要够深,都是一把刀!性能优化都没搞好就别想着去找对象了

本文详细探讨了Android和Flutter中的性能优化技巧,涉及内存管理、Bitmap处理、布局优化、内存泄漏检测、ANR问题、启动速度提升、Git版本控制、Gradle构建工具等,旨在提供全面的性能优化指南。
摘要由CSDN通过智能技术生成

那些年我遇到的性能优化面试题


面试官:

  • 图片的三级缓存中,图片加载到内存中,如果内存快爆了,会发生什么?怎么处理?

  • 内存中如果加载一张 500*500 的 png 高清图片。应该是占用多少的内存?

  • WebView 的性能优化?

  • Bitmap 如何处理大图,如一张 30M 的大图,如何预防 OOM?

  • 内存回收机制与 GC 算法 (各种算法的优缺点以及应用场景);GC 原理时机以及 GC 对象?

  • 内存泄露和内存溢出的区别 ?AS 有什么工具可以检测内存泄露

  • 性能优化,怎么保证应用启动不卡顿?黑白屏怎么处理?

  • 强引用置为 null,会不会被回收?

  • ListView 跟 RecyclerView 的区别

  • ListView 的 adapter 是什么 adapter?

  • 卡顿、ANR、死锁,线上如何监控?

以前面试几乎都是靠面试官抽一鞭子然后我回答一哆嗦。 回答性能优化方面的问题,也基本上是那老四样。 可问题就在于,这些答案换个人来也能说。说白了,你说出去的东西并不是真正属于你的东西。 然后,职位岗位略高一点,你就没机会了。

小结一下

最近参加了几轮面试,发现很多5-7年工作经验的候选人在性能优化这一块,基本上只能说出传统的分析方式,「例如ANR分析,是通过查看/data/anr/ 下的log,分析主线程堆栈、cpu、锁信息等」

然而,这种方法有一定的局限性,并不是每次都奏效,很多时候是没有堆栈信息给你分析的,例如有些高版本设备需要root权限才能访问/data/anr/ 目录,或者是线上用户的反馈,只有一张ANR的截图加上一句话描述。

假如你的App没有实现ANR监控上报,那么你大概率会把这个问题当成“未复现”处理掉,而没有真正解决问题。

于是我整理了这一篇文章,主要关于性能优化各方面的详细攻略。

掌握性能优化的重要性


在这个网络都追求5G的时代,“卡”这个体验显然成为了一个极其拉低印象分的问题。

所以,在 Android开发中,性能优化策略十分重要,他决定了应用程序的开发质量,包括可用性、流畅性、稳定性等,是提高用户留存率的关键

所以,不只是阿里,还有腾讯、字节跳动、爱奇艺等,都非常重视这个问题,在面试中,如果这个方向表现优异,你将会很值钱

本文针对“性能优化”这个要点,献上一份 《Android性能优化的详细攻略》,从各个方面对目标产品进行全方位的“优化”,让产品的性能从各个方面得到提升,希望大家喜欢。

App性能优化要点大纲


性能优化知识技能策略详解


性能优化这个点的知识要想讲明白篇幅会比较长,鉴于篇幅原因,我这里直接把详解部分整理成了一份PDF。

这份《超全App性能优化知识技能手册》一共有721页,4个大点,25个小章节,不仅仅有详细的底层原理的解析,还有专门的实践案例

有需要的朋友,点击 【这里】 查看获取方式~

第一章 设计思想与代码质量优化

  • 六大原则

单一职责原则

里氏替换原则

依赖倒转原则

接口隔离原则

……

  • 设计模式:结构型模式

桥接模式

适配器模式

装饰器模式

代理模式

门面(外观)模式

……

  • 设计模式:创建型模式

建造者模式

单例模式

抽象工厂模式

工厂方法模式

……

  • 数据结构

队列

链表

……

  • 算法

排序算法

查找算法

……

第二章 程序性能优化

  • 启动速度与执行效率优化

冷启动和热启动解析

APP 启动黑白屏解决办法

APP 卡顿问题分析及解决方案

启动速度与执行效率优化之 StrictMode

……

  • 布局检测与优化

布局层级优化

过度渲染

……

  • 内存优化

内存抖动和内存泄漏

内存大户

Bitmap 内存优化

Profile 内存监测工具

Mat 大对象与泄漏检测

耗电优化

网络传输与数据存储优化网络传输与数据存储优化

APK 大小优化

屏幕适配

……

  • 耗电优化

Doze&Standby

Battery Historian

JobScheduler

WorkManager

  • 网络传输与数据存储优化

google 序列化工具 protobuf

7z 极限压缩

……

  • APK 大小优化

APK 瘦身

微信资源混淆原理

……

  • 屏幕适配

进行适配的原理

屏幕分辨率限定符与 smallestWidth 限定符适配原理

为什么选择 smallestWidth 限定符适配

怎么适配其他 module

常见问题处理

……

  • OOM 问题原理解析

adj 内存管理机制

JVM 内存回收机制与 GC 算法解析

生命周期相关问题总结

Bitmap 压缩方案总结

……

  • ANR 问题解析

AMS 系统时间调节原理

程序等待原理分析

ANR 问题解决方案

……

  • Crash 监控方案

Java 层监控方案

Nativie 层监控方案

……

第三章 开发效率优化

  • 分布式版本控制系统 Git

企业高效持续集成平台场景介绍

GIT 分布式版本控制系统

GIT 分支管理

……

  • 自动化构建系统 Gradle

Gradle 与 Android 插件

gradle 与 android gradle 插件的关系

Gradle Transform API 的基本使用

……

  • Gradle Transform API 的基本使用

什么是 Transform

Transform 的使用场景

Transform API 学习

输入的类型

……

  • 自定义插件开发

Gradle 插件简介

开始准备

实践

自定义 Gradle 插件

buildSrc 模块方式

……

总结

可以看出,笔者的工作学习模式便是由以下 「六个要点」 组成:

❝ 多层次的工作/学习计划 + 番茄工作法 + 定额工作法 + 批处理 + 多任务并行 + 图层工作法❞

希望大家能将这些要点融入自己的工作学习当中,我相信一定会工作与学习地更富有成效。

下面是我学习用到的一些书籍学习导图,以及系统的学习资料。每一个知识点,都有对应的导图,学习的资料,视频,面试题目。

**如:我需要学习 **Flutter的知识。(大家可以参考我的学习方法)

  • Flutter 的思维导图(无论学习什么,有学习路线都会事半功倍)

  • Flutter进阶学习全套手册

  • Flutter进阶学习全套视频

大概就上面这几个步骤,这样学习不仅高效,而且能系统的学习新的知识。

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

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

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

学习全套手册**

[外链图片转存中…(img-xYoYnxPB-1714473059173)]

  • Flutter进阶学习全套视频

[外链图片转存中…(img-1h7kg9hn-1714473059173)]

大概就上面这几个步骤,这样学习不仅高效,而且能系统的学习新的知识。

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

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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值