起因
事情是這樣的。
4年前畢業那會,呆在公司的短視訊項目,做 視訊。那會做得比抖音還早,但是由于短視訊太燒錢了,項目被公司關掉了。當時需要開發橫豎屏直播/異步視訊的場景,就研究下了市場上的 app,發現輸入彈幕的互動并不友好。最直接的體驗就是,微信比絕大部分IM軟體在聊天場景下輸入法與表情面闆頻繁切換時表現得更為平滑,不會給使用者很突兀的閃爍感。但我們除了适配豎屏,們還需要相容橫屏/滿屏/沉浸等場景。
摸索了一段時間之後,做出來的效果挺不錯,比市面上的直播/異步視訊播放場景下的輸入互動體驗都要好。于是寫了個記錄的 Blog Android -SystemUI的那點事 。主要是将如何設計橫豎屏直/點播場景下良好的輸入互動。但是文章并沒有寫完… 留了橫屏模式下使用 PopupWindow 來實作的懸念… 本打算繼續接着寫第二篇。結果一拖,就是三年。
而在這三年裡,前後參與開發了十多個項目(我們是流水線生産,老工具人),而涉及到輸入互動的子產品已經有IM聊天,直播間,異步視訊播放頁面,資訊流評論等等。這些頁面從最初使用 Activity 實作到演化成可用 Fragment,Dialog,PopupWindow 代替。是以原來那套技術實作已經不能滿足。在尋找外部開源項目/技術博文無果的前提下,慢慢積累了一個庫
Java相關
- 容器(HashMap、HashSet、LinkedList、ArrayList、數組等)
- 記憶體模型
- 垃圾回收算法(JVM)
- 垃圾回收機制和調用 System.gc()的差別?
- 類加載過程(需要多看看,重在了解,對于熱修複和插件化比較重要)
- 反射
- 多線程和線程池
- 設計模式(六大基本原則、項目中常用的設計模式、手寫單例等)
- Java 四大引用
- Java 的泛型
- final、finally、finalize 的差別
- 接口、抽象類的差別

Android 相關
- 自定義 View
- 事件攔截分發
- 解決過的一些性能問題,在項目中的實際運用
- 性能優化工具
- 性能優化 (講講你自己項目中做過的性能優化)
- Http[s]請求慢的解決辦法(DNS、攜帶資料、直接通路 IP)
- 緩存自己如何實作(LRUCache 原理)
- 圖形圖像相關:OpenGL ES 管線流程、EGL 的認識、Shader 相關
- SurfaceView、TextureView、GLSurfaceView 差別及使用場景
- 動畫、內插補點器、估值器(Android中的View動畫和屬性動畫 - 簡書、Android 動畫 介紹與使用)
- MVC、MVP、MVVM
- Handler、ThreadLocal、AsyncTask、IntentService 原理及應用
- Gradle(Groovy 文法、Gradle 插件開發基礎)
- 熱修複、插件化
- 元件化架構思路
- 系統打包流程
- Android 有哪些存儲資料的方式。
- SharedPrefrence 源碼和問題點;
- sqlite 相關
- 如何判斷一個 APP 在前台還是背景?
- AMS 、PMS
- Activity 啟動流程,App 啟動流程
- Binder 機制(IPC、AIDL 的使用)
- 為什麼使用 Parcelable,好處是什麼?
- Android 圖像顯示相關流程,Vsync 信号等
算法與資料結構
- 時間複雜度 / 空間複雜度
- 常用的排序算法有哪些?
- 字元串反轉
- 連結清單反轉(頭插法)
- 如何查找第一個隻出現一次的字元(Hash查找)
- 如何查找兩個子視圖的共同父視圖?
- 無序數組中的中位數(快排思想)
- 如何給定一個整數數組和一個目标值,找出數組中和為目标值的兩個數。
- 二叉樹前序、中序、後序周遊
- 最大 K 問題
- 廣度、深度優先搜尋算法
- String 轉 int。核心算法就三行代碼,不過臨界條件很多,除了判空,還需要注意負數、Integer 的最大最小值邊界等;
- 如何判斷一個單連結清單有環?
- 100 億個單詞,找出出現頻率最高的單詞。要求幾種方案;
- 連結清單每 k 位逆序;
- 鏡像二叉樹;
- 找出一個無序數組中出現超過一半次數的數字;
- 計算二叉樹的最大深度,要求非遞歸算法。
- String 方式計算加法。
總結
我最近從朋友那裡收集到了2020-2021BAT 面試真題解析,内容很多也很系統,包含了很多内容:
Android 基礎、Java 基礎、Android 源碼相關分析、常見的一些原理性問題
等等,可以很好地幫助大家深刻了解Android相關知識點的原理以及面試相關知識。
這份資料把大廠面試中常被問到的技術點整理成了PDF,包知識脈絡 + 諸多細節;還有 進階架構技術進階腦圖 幫助大家學習提升進階,也節省大家在網上搜尋資料的時間來學習,也可以分享給身邊好友一起學習。
這裡也分享給廣大面試同胞們,希望每位程式猿們都能面試成功~
領取方式:點選直達GitHub
Android 基礎知識點
Java 基礎知識點
Android 源碼相關分析
常見的一些原理性問題
騰訊、位元組跳動、阿裡、百度等BAT大廠 2019-2020面試真題解析
duWMjh6J-1613914417608)]
騰訊、位元組跳動、阿裡、百度等BAT大廠 2019-2020面試真題解析
[外鍊圖檔轉存中…(img-HdZ8MYEK-1613914417609)]