Android面试|任何东西只要够深都是一把刀!性能优化也不例外
suiw9 2024-11-05 12:36 25 浏览 0 评论
前言
标题无能,请各位看官放下你们的屠刀,扎心的往下看,看到情不自禁处请手下留情。
5-7年工作经验的候选人在性能优化这一块必须要会的东西,超长干货警告!!!
引言
您瞧清楚了,我是互联网公司技术开发一枚,渴了喝咖啡,饿了吃外卖,晕了上医院的那种。房贷没还清,车子自己买,人家休假我加班。还有最重要的是,我是一条单身狗。不要想着单身贵族这种身份,你爸和你妈的一巴掌就能让你认清现实。
我要讲的故事就四字:性能优化。
我知道,此时此刻看到这里的朋友一定会掌心出汗、眉头紧锁,用一种带着危险的眼神死盯着手机屏幕。来吧,我不怕。性能优化都没搞好,还想着去找对象?
那些年我遇到的性能优化面试题
面试官:
- 图片的三级缓存中,图片加载到内存中,如果内存快爆了,会发生什么?怎么处理?
- 内存中如果加载一张 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 模块方式
…… - 插件实战
多渠道打包
发版自动钉钉
……
第四章 APP 性能优化实践
- 启动速度
应用启动的一般流程
冷启动和热启动
启动速度的测量
启动窗口优化
线程优化
系统调度优化
GC 优化
IO 优化
资源重排
主页布局优化
类加载优化
选择合适的启动框架
减少 Activity 的跳转层次
厂商优化
后台保活
……
- 流畅度
性能问题分析的一些工具和套路
通过性能数据数据分析
Android 平台性能导致的性能案例
Android App 自身导致的性能问题
低内存的数据特征和行为特征
应用宝
讯飞输入法无障碍服务导致的整机卡顿分析
字节跳动:今日头条图文详情页秒开实践
…… - 抖音在 APK 包大小资源优化的实践
图片压缩
webp 无侵入式兼容
多 DPI 优化
重复资源合并
shrinkResource 严格模式
资源混淆(兼容 aab 模式)
ARSC 瘦身
……
- 优酷响应式布局技术全解析
优酷APP响应式布局技术概述
优酷APP响应式布局Android落地
在分发场景的落地
在消费场景的落地
优酷APP响应式布局之测试方案
……
- 网络优化
手机淘宝在网络的链路优化
百度 APP 在网络深度优化的实践
…… - 手机淘宝双十一性能优化项目揭秘
- 一秒法则的实现
启动时间和页面帧率提升 20%
Android 手机内存节省50%
…… - 高德 APP 全链路源码依赖分析
高德 APP 平台架构
基础实现原理
项目架 - 应用场景及实现原理
…… - 彻底干掉OOM的实战经验分享
排查内存泄漏
兜底策略
内存峰值太高
特大图排查优化
…… - 微信 Android终端内存优化实践
Activity 泄露检测
Bitmap 分配及回收追踪
Native 内存泄漏检测
线程监控
内存监控
……
如果你也想提升自己移动开发的性能优化技术,或者是正在准备移动开发岗的面试,我觉得这份笔记你必定不能错过。
以上这些内容均免费分享给大家,需要完整版的朋友,直接私信回复【资料】一键领取!!!
最后
面试官是喜欢问你对性能优化做了什么事情,但面试官更想知道你做到了而别人没做到的事情。老四样的旁边就写着适用于怎样的场景,而我却视而不见。人家指着那你都看不懂,听到想听简单的就暗自窃喜,你真当面试官傻呢?
所以,请相信,“相亲”从第一面就开始交锋了。先输了的那个往往就失去了主动权。如果你自嗨了,那你就失去了足够敏锐的观察力。人性都一样,对喜欢的东西容易不设防,对不喜欢的东西会倍加警惕。
最后,任何东西只要够深,都是一把刀, 性能优化也不例外。
(祝,君一切安好。)
相关推荐
- 5款Syslog集中系统日志常用工具对比推荐
-
一、为何要集中管理Syslog?Syslog由Linux/Unix系统及其他网络设备生成,广泛分布于整个网络。因其包含关键信息,可用于识别网络中的恶意活动,所以必须对其进行持续监控。将Sys...
- 跨平台、多数据库支持的开源数据库管理工具——DBeaver
-
简介今天给大家推荐一个开源的数据库管理工具——DBeaver。它支持多种数据库系统,包括Mysql、Oracle、PostgreSQL、SLQLite、SQLServer等。DBeaver的界面友好...
- 强烈推荐!数据库管理工具:Navicat Premium 16.3.2 (64位)
-
NavicatPremium,一款集数据迁移、数据库管理、SQL/查询编辑、智能设计、高效协作于一体的全能数据库开发工具。无论你是MySQL、MariaDB、MongoDB、SQLServer、O...
- 3 年 Java 程序员还玩不转 MongoDB,网友:失望
-
一、什么场景使用MongoDB?...
- 拯救MongoDB管理员的GUI工具大赏:从菜鸟到极客的生存指南
-
作为一名在NoSQL丛林中披荆斩棘的数据猎人,没有比GUI工具更称手的瑞士军刀了。本文将带你围观五款主流MongoDB管理神器的特性与暗坑,附赠精准到扎心的吐槽指南一、MongoDBCompass:...
- mongodb/redis/neo4j 如何自己打造一个 web 数据库可视化客户端?
-
前言最近在做neo4j相关的同步处理,因为产线的可视化工具短暂不可用,发现写起来各种脚本非常麻烦。...
- solidworks使用心得,纯干货!建议大家收藏
-
SolidWorks常见问题...
- 统一规约-关乎数字化的真正实现(规范统一性)
-
尽管数字化转型的浪潮如此深入人心,但是,对于OPCUA和TSN的了解却又甚少,这难免让人质疑其可实现性,因为,如果缺乏统一的语义互操作规范,以及更为具有广泛适用的网络与通信,则数字化实际上几乎难以具...
- Elasticsearch节点角色配置详解(Node)
-
本篇文章将介绍如下内容:节点角色简介...
- 产前母婴用品分享 篇一:我的母婴购物清单及单品推荐
-
作者:DaisyH8746在张大妈上已经混迹很久了,有事没事看看“什么值得买”已渐渐成了一种生活习惯,然而却从来没有想过自己要写篇文章发布上来,直到由于我产前功课做得“太过认真”(认真到都有点过了,...
- 比任何人都光彩照人的假期!水润、紧致的肌肤护理程序
-
图片来源:谜尚愉快的假期临近了。身心振奋的休假季节。但是不能因为这种心情而失去珍贵的东西,那就是皮肤健康。炙热的阳光和强烈的紫外线是使我们皮肤老化的主犯。因此,如果怀着快乐的心情对皮肤置之不理,就会使...
- Arm发布Armv9边缘AI计算平台,支持运行超10亿参数端侧AI模型
-
中关村在线2月27日消息,Arm正式发布Armv9边缘人工智能(AI)计算平台。据悉,该平台以全新的ArmCortex-A320CPU和领先的边缘AI加速器ArmEthos-U85NPU为核心...
- 柔性——面向大规模定制生产的数字化实现的基本特征
-
大规模定制生产模式的核心是柔性,尤其是体现在其对定制的要求方面。既然是定制,并且是大规模的定制,对于制造系统的柔性以及借助于数字化手段实现的柔性,就提出了更高的要求。面向大规模定制生产的数字化业务管控...
- 创建PLC内部标准——企业前进的道路
-
作者:FrankBurger...
- 标准化编程之 ----------- 西门子LPMLV30测试总结
-
PackML乃是由OMAC开发且被ISA所采用的自动化标准TR88.00.02,能够更为便捷地传输与检索一致的机器数据。PackML的主要宗旨在于于整个工厂车间倡导通用的“外观和感觉”,...
你 发表评论:
欢迎- 一周热门
-
-
Linux:Ubuntu22.04上安装python3.11,简单易上手
-
宝马阿布达比分公司推出独特M4升级套件,整套升级约在20万
-
MATLAB中图片保存的五种方法(一)(matlab中保存图片命令)
-
别再傻傻搞不清楚Workstation Player和Workstation Pro的区别了
-
Linux上使用tinyproxy快速搭建HTTP/HTTPS代理器
-
如何提取、修改、强刷A卡bios a卡刷bios工具
-
Element Plus 的 Dialog 组件实现点击遮罩层不关闭对话框
-
日本组合“岚”将于2020年12月31日停止团体活动
-
SpringCloud OpenFeign 使用 okhttp 发送 HTTP 请求与 HTTP/2 探索
-
tinymce 号称富文本编辑器世界第一,大家同意么?
-
- 最近发表
-
- 5款Syslog集中系统日志常用工具对比推荐
- 跨平台、多数据库支持的开源数据库管理工具——DBeaver
- 强烈推荐!数据库管理工具:Navicat Premium 16.3.2 (64位)
- 3 年 Java 程序员还玩不转 MongoDB,网友:失望
- 拯救MongoDB管理员的GUI工具大赏:从菜鸟到极客的生存指南
- mongodb/redis/neo4j 如何自己打造一个 web 数据库可视化客户端?
- solidworks使用心得,纯干货!建议大家收藏
- 统一规约-关乎数字化的真正实现(规范统一性)
- Elasticsearch节点角色配置详解(Node)
- 产前母婴用品分享 篇一:我的母婴购物清单及单品推荐
- 标签列表
-
- dialog.js (57)
- importnew (44)
- windows93网页版 (44)
- yii2框架的优缺点 (45)
- tinyeditor (45)
- qt5.5 (60)
- windowsserver2016镜像下载 (52)
- okhttputils (51)
- android-gif-drawable (53)
- 时间轴插件 (56)
- docker systemd (65)
- slider.js (47)
- android webview缓存 (46)
- pagination.js (59)
- loadjs (62)
- openssl1.0.2 (48)
- velocity模板引擎 (48)
- pcre library (47)
- zabbix微信报警脚本 (63)
- jnetpcap (49)
- pdfrenderer (43)
- fastutil (48)
- uinavigationcontroller (53)
- bitbucket.org (44)
- python websocket-client (47)