前言
今年Android開發的整體招聘趨勢可以概括爲幾句話:賽道中的公司在矇眼狂奔,成熟業務藉機補強,更多公司在觀望。
而面試大廠時更注重你的基本知識,你對待一個問題的思路。是否是以一個工程師的角度去看待問題。也更注重數據結構&&算法(我的痛)這一塊的知識的考察。不會是簡單的考你排序、查找這種考研層面上的東西。小廠的話,大概是因爲需要即插即用,也沒有很好的導師類資源,更看重你的自我學習能力和一個自我學習的過程,以及實際開發的能力。好了,話不多說,我們就直接進入面試的總結。
下面是我整理的字節跳動Android高頻面試題解析:
一共分爲七個模塊:
- Java 知識點彙總
- Android 知識點彙總
- Android 擴展知識點
- Android 開源庫源碼分析
- 設計模式彙總
- Gradle 知識點彙總
- 常見面試算法題彙總
一、Java 知識點彙總
1.Java 基礎
- 數據類型
- String
- 運算
- 關鍵字
- Object 通用方法
- 繼承
- 反射
- 異常
- 泛型
- 註解
- 特性
2.Java 容器
- 容器中的設計模式
- 源碼分析
- Vector
- CopyOnWriteArrayList
- LinkedList
- HashMap
- ConcurrentHashMap
- LinkedHashMap
3.Java 併發
- 使用線程
- 基礎線程機制
- 中斷
- 互斥同步
- 線程之間的協作
- 線程狀態
- J.U.C - AQS
- J.U.C - 其它組件
- 線程不安全示例
- Java 內存模型
- 線程安全
- 鎖優化
- 多線程開發良好的實踐
4.Java 併發進階知識
- synchronized 關鍵字
- volatile 關鍵字
- ThreadLocal
- 線程狀態轉換
- 使用線程
- 基礎線程機制
- 中斷
- 互斥同步
- 線程之間的協作
- Java 內存模型
- 線程安全
- 鎖優化
- 線程池
- Atomic 原子類
- AQS
二、Android 知識點彙總
1.Activity
- 生命週期
- 啓動模式
- 啓動過程
2.Fragment
- 特點
- 生命週期
- 與 Activity 通信
3.Service
- 啓動過程
- 綁定過程
- 生命週期
- 啓用前臺服務
4.BroadcastReceiver
- 註冊過程
5.ContentProvider
- 基本使用
6.數據存儲
7.View
- MeasureSpec
- MotionEvent
- VelocityTracker
- GestureDetector
- Scroller
- View 的滑動
- View 的事件分發
- 在 Activity 中獲取某個 View 的寬高
- Draw 的基本流程
- 自定義 View
8.進程
- 進程生命週期
- 多進程
- 進程存活
9.Parcelable 接口
- 使用示例
- 方法說明
- Parcelable 與 Serializable 對比
10.IPC
- IPC 方式
- Binder
- AIDL 通信
- Messenger
11.Window / WindowManager
- Window 概念與分類
- Window 的內部機制
- Window 的創建過程
12.Bitmap
- 配置信息與壓縮方式
- 常用操作
- BitmapFactory
- 內存回收
13.屏幕適配
- 單位
- 頭條適配方案
- 劉海屏適配
14.Context
15.SharedPreferences
- 獲取方式
- 架構
- apply / commi
- 注意
16.消息機制
- Handler 機制
- 工作原理
17.線程異步
- AsyncTask
- HandlerThread
- IntentService
- 線程池
18.RecyclerView 優化
19.Webview
- 基本使用
- Webview 加載優化
- 內存泄漏
三、Android 擴展知識點
- ART
- Apk 包體優化
- Hook
- Proguard
- 架構
- Jetpack
- NDK 開發
- 計算機網絡基礎
- 類加載器
四、Android 開源庫源碼分析
- LeakCanary
- EventBus
- Glide :加載、緩存、LRU 算法
- install
- ARouter
- 插件化(不同插件化機制原理與流派,優缺點。 侷限性)
- 熱修復
- RXJava (RxJava 的線程切換原理)
- Retrofit (Retrofit 在 OkHttp 上做了哪些封 裝?動態代理和靜態代理的區別,是怎麼實現的)
- OkHttp
五、設計模式彙總
- 設計模式分類
- 面向對象六大原則
- 工廠模式
- 單例模式
- 建造者模式
- 原型模式
- 適配器模式
- 觀察者模式
- 代理模式
- 責任鏈模式
- 策略模式
- 備忘錄模式
六、Gradle 知識點彙總
- 依賴項配置
七、常見面試算法題彙總
- 排序
- 二叉樹
- 鏈表
- 棧 / 隊列
- 二分
- 哈希表
- 堆 / 優先隊列
- 二叉搜索樹
- 數組 / 雙指針
- 貪心
- 字符串處理
- 動態規劃
- 矩陣
- 二進制 / 位運算
- 其他
- 反轉整數
- 緩存策略
總結
與面試官聊天的收穫
雖然很多面試都是在問問題和答問題中度過的,但是還是有一些面試官在面試完成後會對我的面試結果做一些總結和評價,這裏面也收穫頗多,跟大家分享一下。
1、大廠和小廠的選擇
很多剛進入職場以及學生會有這方面的困惑,不過我還是簡單粗暴地回答一下這個問題吧,建議去大廠。因爲這幾個方面的原因:
大廠周圍的小夥伴大概率更優秀。
幾年後小廠和大廠的程序員市場溢價不同。同樣工作年限的程序員,大廠天然要比小廠的溢價高很多。
小廠更強調業務的快跑,忽視人的成長。很多小廠會在不同的業務方向上投幾個人做出一個App出來試試市場反應,很多人就不得不重複做之前已經會的一些功能,而且很多小廠用戶量很小,並不關心所謂的性能架構,因爲優化了一個性能,能受益的用戶也非常少,還要佔用開發業務的時間,你的老闆和業務部門也是非常不樂意的,這對於一個程序員的成長是非常不利的。如果一個小廠宣稱自己的團隊主要成員主要來自百度、新浪、網易等大廠的時候,你需要格外注意一下,這並不代表你進入這個團隊後能成長成百度的標準。
2、5年左右的開發的標準
這裏說一個標準,5年左右開發經驗的工程師,應該在某個或者某幾個方向上是整個公司的專家和標杆。比如設計能力、網絡優化、性能優化、音視頻等等,5年左右的開發不應該僅僅滿足於實現一些業務需求,應該更深入瞭解底層的原理和技術,這樣在未來的跳槽中才能有更高的溢價,比如從抖音出來的音視頻工程師就能在市場上享受非常高的溢價。
3、關於成長和職級
主動去承擔高一個職級的事情,自然而然你的職級也會跟着提升。很多同學包括我之前也是認爲把我自己的事情做好了,找一些項目的亮點再去PK晉升職級。然而阿里的面試官跟我聊這個問題的時候給了一個新的思路:很多P6的同學升級到P7是因爲他們已經在做並且能做好P7的事情了,所以他們升了P7大家都覺得順理成章。從這個角度看職級和晉升,是不是角度不一樣了呢?
寫在最後
上面分享的字節跳動Android高頻面試題解析免費分享給大家,點擊這裏即可查看領取方式~
還有耗時一年多整理的一系列Android學習資源:Android源碼解析、Android第三方庫源碼筆記、Android進階架構師七大專題學習、歷年BAT面試題解析包、Android大佬學習筆記
等等,這些內容均免費分享給大家,需要完整版的朋友,點這裏可以看到全部內容