前言
標題無能,請各位看官放下你們的屠刀,扎心的往下看,看到情不自禁處請手下留情。
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 內存泄漏檢測
線程監控
內存監控
……
如果你也想提升自己移動開發的性能優化技術,或者是正在準備移動開發崗的面試,我覺得這份筆記你必定不能錯過。
以上這些內容均免費分享給大家,需要完整版的朋友,點這裏可以看到全部內容。或者點擊 【這裏】 查看獲取方式。
最後
面試官是喜歡問你對性能優化做了什麼事情,但面試官更想知道你做到了而別人沒做到的事情。老四樣的旁邊就寫着適用於怎樣的場景,而我卻視而不見。人家指着那你都看不懂,聽到想聽簡單的就暗自竊喜,你真當面試官傻呢?
所以,請相信,“相親”從第一面就開始交鋒了。先輸了的那個往往就失去了主動權。如果你自嗨了,那你就失去了足夠敏銳的觀察力。人性都一樣,對喜歡的東西容易不設防,對不喜歡的東西會倍加警惕。
最後,任何東西只要夠深,都是一把刀, 性能優化也不例外。
(祝,君一切安好。)