引言
記得自己在20年最后一天發表過一篇博客,在里面曾經立下進大廠的豪言,為了實作這個“小目標”,除了每天給自己充電外,還趕在金九銀十前認真系統地復習了一個半月,終于有信心在九月正式開始大廠面試,其中包括百度,愛奇藝,網易,京東,小米,搜狐,作業幫等,最終我也是如愿入職其中一家公司,
每次面試后我都會及時復盤總結面試題,查缺補漏,我將會把這些面試題都分享給大家,主要是給2年左右Android作業經驗的同學一個參考,面試中難免會問到專案相關的問題,因為每個人參與的專案以及技術堆疊各不相同,我覺得參考意義不是很大,所以在這里我會把面試中有關專案細節的問題省略,為了對面試公司負責以及避免不必要的麻煩,公司名將會用字母編號代替,至于它們之間的對應關系,各位看官同學請自行腦補吧,哈哈~
A公司 一面
- 自我介紹
- mmkv對比sp優勢,實作原理
- SP的存盤原理
- 講一下記憶體映射
- 作業系統為什么設計虛擬記憶體
- 作業系統分頁和分段區別
- TextcureView SurfaceView View區別
- 對ijkplayer的應用,底層實作
- JNI應用
- webView與Native互動
- 提高webView加載速度
- 事件分發流程,涉及phonewindow decorview,設計模式
- 布局優化方式,分析方式
- Merge include標簽區別
- Inflate()提高加載布局方式
- FPS標準,Android規定數值范圍,60fps
- getWidth() getHeight(),及時獲取寬高
- HandlerThread
- 專案中如何創建執行緒,new thread()弊端,性能消耗點
- 執行緒間訊息通信 Handler
- 主執行緒 new Handler()為什么不規范,如何避免
- 訊息佇列的實作方式(資料結構)
- Handler立即執行訊息-同步屏障
- 抽象類和介面區別
- 編譯執行與解釋執行區別,java屬于哪種
- JVM記憶體區域
- BitMap記憶體分配java,native,為什么這么設計
- 演算法:判斷字串合法“(”“)”“{”“}”“[”“]”
A公司 二面
- 說一下之前作業中印象比較深刻的內容
- 除了canvas有沒有其他繪制方式,OpenGl是否了解
- 線性布局中三個textView均分如何實作,系統中哪一層實作,原理
- Activity A singleTop模式 在堆疊底,B,C standard模式,B在A上,C在B上,C如何啟動A,才能復用A
- 如果A是 singleTask模式,講一下ABC生命周期如何執行
- OnNewIntent() 和 onStop() onDestory() 順序
- Activity生命周期什么時候可見,可互動, 不可互動,不可見
- Service專案中使用場景
- 執行什么方法可以讓Service的onDestory
- ANR型別,區別
- 啟動清單檔案中未注冊的Activity會報例外,說下這個流程
- 清單資訊會被保存在哪里
- AMS PKMS區別,如何通信
- Android系統啟動流程
- 題目1:考察java 靜態分派
public class StaticDispatch {
static abstract class Human{}
static class Man extends Human{}
static class Woman extends Human{}
public static void method(Human human){System.out.println("Human");}
public static void method(Man man){System.out.println("Man");}
public static void method(Woman woman){System.out.println("Woman");}
public static void main(String []args){
Human h = new Man();
Human h2 = new Woman();
method(h2);//輸出Human
method((Man)h);//輸出Man
}
}
- 題目2:考察String常量池
String s1 = “abc”; String s2 = “abc”; String s3 = new String(“abc”);
s1 == s2? s2 == s3?
- JVM記憶體劃分
- String 緩沖池 存盤在什么地方
- 一個APP能否實作多行程
- jectpack用過哪些組件
- 演算法:快速找到拐點{1,2,3,4,5,3,2,1},先憎后減,5是拐點
- 反問
A公司 三面
- 自我介紹
- 詳細說一下作業中有挑戰,有成就感的事情,有沒有可以優化的地方
- 遇到了哪些問題,如何解決的
- 專案的組件化規劃,為什么要這么設計
- 專案中ijkplayer應用,存在什么問題,如何解決
- 視頻播放原理
- 自動登錄功能如何實作
- 專案中的資訊存盤加密
- 近幾年的職業規劃
- 團隊規模
- 對團隊的貢獻
- 加班情況,態度
- 離職原因
- 目前薪資,在面哪些公司,offer情況
- 反問
B公司 一面
- 自我介紹
- Fragment/activity生命周期區別 記憶體泄漏、OOM區別,具體場景 排查
- 記憶體優化
- 軟參考、弱參考區別
- 過度繪制,原因,檢測
- Anr 發生原因,排查,解決
- 垃圾收集器的作業機制
- 演算法:二叉樹之查找指定節點所在的層數
- 反問
D公司 一面
- 自我介紹
- ==,equals()區別,重寫equals()需要注意什么
- HashMap/HashSet區別
- HashSet如何實作值唯一
- HashMap內部存取原理
- 如何使HashMap執行緒安全
- 執行緒池的創建方式,核心引數,配置
- Java記憶體模型
- Volatile和synchronized
- 鎖的資訊保存在什么地方
- Activity啟動模式
- Handler機制
- 主執行緒往子執行緒發訊息
- 子執行緒new Handler()注意什么處理,為什么主執行緒不需要
- 如何實作執行緒和Looper的唯一對應
- Handler記憶體泄漏原因,完整呼叫鏈
- webView提前加載需要注意的地方
- webView優化點
- 檢測記憶體泄漏方式
- Leankcanary原理
- 檢測布局卡頓方式,優化方式
- 為什么離職
- 反問
D公司 二面
- 自我介紹
- 說一下使用MVP,MVVM的感受
- MMKV原理,優勢
- Android多行程
- 如果多個SDK存在依賴關系,如何加載更加優雅
- 專案中的組件化介紹
- 介紹專案整體架構,如果想要重構,如何設計
- 記憶體泄漏如何檢測
- 近幾年的職業規劃
- 反問
J公司 一面
- 手寫快排,時間復雜度,空間復雜度,應用場景
- Object方法
- equals() hashcode() 使用場景
- HashMap解決hash沖突
- Java垃圾回識訓制
- Android 記憶體泄漏 排查方式,檢測原理
- 團隊開發是如何規避記憶體泄漏(從檢測、避免、解決、監控方面講)
- https作業原理(從安全加密機制上講)
- Handler message關系
- Looper死回圈
- 講一下Retrofit,優勢,原理 對比okhttp
- Flutter 優勢
- 螢屏適配方案,自己如何設計
- webView模塊 與JS互動
- WebViewClient對比WebChromeClient
- StartActivity流程(越詳細越好)
- 為什么使用binder
- onCreate渲染頁面的流程
- 手機觸摸螢屏 事件傳遞流程
- 臨時發版出現bug如何處理
J公司 二面
- Java虛擬機對比Android虛擬機
- 為什么要單獨設計Android虛擬機
- String StringBuffer StringBuilder區別
- String特點,不可變,原理,為什么這么做,有什么好處
- Final 修飾的特點
- Int integer區別,使用場景, 為什么這么設計
- 裝箱、拆箱 怎么實作
- 泛型擦除 什么時機
- Volatile 宣告i i++是否執行緒安全 原因
- 實作執行緒安全的方式
- 講一下執行緒池,優點,核心引數,配置
- Glide三級快取機制
- H5與native互動方式
- 使用的網路框架-Retrofit 優勢
- 網路請求公共引數
- 資料存盤方式
- 手寫演算法:單詞字母反轉welcome to —> emoclew ot
J公司 三面
- 自我介紹
- 之前作業經歷中最有成就該的事情
- 專案中遇到的最困難的事情是什么,如何解決,具體細節
- JS與Native互動方式,原理
- addJavaScriptInterface()有什么安全隱患
- mmkv對比sp優勢,原理
- 講一下記憶體映射,為什么可以提高效率
- Sp是否支持多執行緒,原理,為什么不支持多行程
- 在專案中承擔的角色
- 說一下印象深刻的例外,如何排查解決的
- 通常情況該該如何查找原因排查crash
- 近期個人規劃,學習的方式
- 對團隊氛圍的期待
- 如何看待加班
- 反問
S公司 一面
- 自我介紹
- Viewpager2與viewpager1的區別,優勢
- Rxjava實作原理,常見的運算子
- Retrofit實作原理
- Okhttp實作原理,攔截器應用的設計模式
- Glide實作原理,LRU的實作
- Native與JS互動
- 模塊化,與組件化的區別
- 組件間通信的方式
- Ijkplay使用程序遇到哪些問題
- 幀影片與屬性影片區別
- 自定義View如何應用
- Measure,layout,draw主要作業
- requestLayout(),postInvalidate(),invalidate()區別
- Handler原理,Message中的設計模式,message如何找到處理它的物件
- 事件分發機制
- 熟悉哪些設計模式
- 專案中的記憶體優化方案
- MVVM的優勢
- 演算法:連續子陣列的最大和
W公司 一面
- 自我介紹
- == equals區別
- 包裝型別==判斷是否相等(Double、Integer)
- String s = “a”和 String s = new String(a)什么區別
- String str1 = “a”+”b” ; String str2 = new String(a)+new String(b);
- Str1和str2是否相等,有什么區別,從編譯期解釋一下
- 抽象類是否能夠不含有抽象方法,能否被final修飾
- Sleep()/wait()區別,wait使用注意點
- ThreadLocal作用,原理,Android中使用場景
- Handler機制, callbak、Lopper阻塞
- Java四種參考
- 弱參考判斷物件回收,為什么不使用軟參考,哪種GC型別
- Https優點
- webSocket是否了解
- Fragment回呼Activity方式,需要注意什么
- 講一下binder機制,解釋一下一次拷貝
- requestLayout()和invalidate()區別
- Android中資料共享的方式
- Android11中對ContentProvider的限制
- 解決滑動沖突的方式
- JS回呼webView中的方法發生在什么執行緒
- 是否了解Flutter
- JVM句柄和直接參考區別
- Jvm方法區存盤什么,String常量池
- 演算法:倒數第K個結點,要求一次遍歷,無額外空間復雜度
- 反問
W公司 二面
- 自我介紹
- MVP,MVVM優缺點,使用感受
- 詳細說一下作業中有挑戰,有成就感的事情
- Android繪制機制
- 演算法:合并有序陣列
- 反問
X公司 一面
- 自我介紹
- Activity生命周期 橫豎屏
- Android存盤方式,使用過哪些,具體介紹
- Android資料庫
- Sharedprefens 對比 mmkv, 優勢 原理
- 注解
- 網路框架
- Rxjava
- 演算法:最大公約數,不要求復雜度
- Mvvm的優點,解耦
- 布局,mvvm架構下的布局有什么區別
- Android功耗
- Anr
- Crash
- Mmvk引入依賴注意的點
- 編譯速度優化
- 興趣愛好
X公司 二面
- 自我介紹
- 泛型應用,泛型擦除如何實作
- 通過反射呼叫hashmap put方法傳入不同的型別是否會報錯
- HashMap內部結構,鏈表轉為紅黑樹的條件
- HashMap 擴容
- HashMap執行緒不安全,有什么方式可以執行緒安全的使用HashMAP
- ConcurrentHashMap的同步機制,對比HashTable,優先考慮使用哪個
- AQS原理
- 常見AQS的實作——鎖
- 公平鎖和非公平鎖區別
- 講一下執行緒池,優點,核心引數,配置
- handler機制
- 子執行緒new handler能否直接作業,為什么,怎么處理, 主執行緒為什么可以
- 子執行緒Looper死回圈如何處理
- 多個handler發送訊息如何做到執行緒安全
- 事件分發機制,采用什么設計模式
- Retrofit 如何通過注解生成完整的網路請求 RecycleView四級快取
- 記憶體泄漏檢測方式
- LeakCanary原理,如何做到自動監聽
- MVVM框架,ViewModel使用
- 組件化
- 演算法:二叉樹的前序遍歷(非遞回)
- 反問
X公司 三面
- 自我介紹
- 簡單介紹一下做過的專案
- 需求開發流程,開發周期
- 團隊規模
- 介紹專案架構
- 模塊劃分的依據
- 介紹專案中MVC MVP 各模塊組成
- 專案中MVVM應用,特點
- 專案中有挑戰性的作業,詳細介紹下細節以及如何解決難點
- 詳細介紹下專案中的性能優化,取得的效果
- StartService bindService區別,使用場景
- Activity生命周期
- A啟動B,A和B的生命周期變化
- 講一下屬性影片,方法引數
- RecycleView的快取復用機制
- 有沒有解決過頁面卡頓、掉幀問題
- Jectpack使用過哪些組件,簡單介紹一下
- 專案中崩潰監控以及修復
- 演算法:快速查找行列有序的矩陣中的指定元素
- 反問
Y公司 一面
- 自我介紹
- == equals區別 使用 hashcode()
- 創建、啟動、結束執行緒
- LinkedHashMap和HashMap
- Lru快取 原理 實作
- get post區別
- View 事件分發流程
- View viewGroup區別
- 復用布局方式
- Merge include標簽區別
- Stub標簽 原理 使用
- 組件化 組件間通信
- 未使用的資源會被打包進apk嗎,打包什么資源由什么決定
- 記憶體優化的場景
- 接收廣播中能不能發送網路請求
- 三方庫原始碼,選一個最熟悉的講
- Glide的亮點
- 閱讀原始碼學到了什么
Z公司 一面
- 自我介紹
- 64位手機能否正常運行32位應用
- 記憶體泄漏檢測排查方式
- LeakCanary相關原理
- Android Profiler Memory工具使用,如何判斷記憶體泄漏
- 為什么需要主動點擊工具的gc
- jvm記憶體劃分,Gc主要清理哪一部分
- 判斷物件存活的方式
- Handler作業原理
- MessageQueue內部結構實作原理
- Looper死回圈為什么不會導致應用卡死?休眠機制
- 介紹下專案中的組件化使用,為什么使用組件化
- 專案整體結構介紹,團隊規模,自己角色定位
- 應該需要把哪些模塊進行組件化開發
- 權限請求RxPermission原理,有什么優勢
- Sp對比MMKV 各有什么優缺點
- MMKV遷移到其他新的存盤方式中能否實作
- Sp使用中有什么問題,apply和commit對比
- Sp存盤原理,為什么這么設計
- 專案中對RecycleView使用的優化
- 有沒有對RecycleView快取優化
- Glide流程、原理、LRU機制、磁盤快取分為哪些部分
- 對kotlin了解程度
- Jectpack組件用過哪些
- 未來兩到三年的職業規劃
- 學習Android的方式
- 閱讀過哪些原始碼,如何學習的
- 反問
Z公司 二面
- 自我介紹
- 主要的求職訴求
- 目前offer情況
- 主要技術堆疊是什么,對kotlin了解多少,kotlin學習多久可以投入開發
- JVM,Dalvik,ART聯系與區別
- Appp啟動流程(冷啟動,熱啟動,溫啟動)
- 講一下View繪制的流程
- 卡頓的根本原因是什么,為什么16ms內繪制作業無法完成
- 事件分發機制
- WebView使用有哪些需要注意的地方,如何處理
- Webview記憶體泄漏分析
- 如果要開發一個和安全相關的app,需要考慮哪些方面
- 非對稱加密演算法有哪些,RSA全程
- 非對稱加密和對稱加密性能比較
- Https加密程序
- JectPack組件了解哪些,谷歌推出jectpack組件的原因
- Jectpack組件使用程序中遇到哪些問題
- 專案中的難點,詳細說一下
- 說一下專案中的組件化,為什么這么做
- 為什么對專案進行架構設計
- 如果開發新專案如何設計專案架構
- 專案中有沒沒有應用tcp,socket等
- 專案中有沒有涉及藍牙及其他硬體相關
- 最近兩年的谷歌開發者大會有印象的事件
- 未來幾年的規劃
- 反問
Z公司 三面
- 自我介紹
- 過往經歷
- 對于團隊的期待
- 業務方向的職業規劃
- 之前的團隊狀態
- 有挑戰性成就感的作業,對自己的影響
- 自己在和同事處事方面的優點
- 自己的不足方面
- 新的技術點
- 自己認為還有哪些個人特點,優缺點
- 反問
HR面(大同小異)
- 自我介紹
- 講一下有成就感的事情
- 過去的作業經歷有哪些地方提升了
- 過去團隊的績效考核方式
- 團隊規模
- 對于新團隊的一個期望
- 對于面試官的評價
- 目前求職的其他公司進展情況
- 目前薪資,期望薪資
- 大概入職時間
- 反問
總結
上面的面試題在我省略一些專案相關的題目后大家能否感受到,有些題出現的頻率很高,無外乎兩種:一種是八股,另一個就是簡歷上所提到的點了,所以針對這兩點的應對方案也是簡單粗暴,八股必須刷,不解釋;針對簡歷中提到的知識點查找相關博客資料全面系統的進行總結復習,不擅長的不要提! 另外,我個人針對專案經歷無亮點的同學一個建議,深入學習某一個Android的優化方向并嘗試應用到專案中把它轉化成自己的真實專案經歷!至于演算法,我采用的算是速成的方式,針對性去刷那些高頻面試題,即使自己寫不出來,也要記住解題思路,思路很重要!以我這段時間的面試情況來看,我算是很幸運的,演算法題普遍是在簡單級別,而且有些公司并沒有考察演算法,但是如果想要穩扎穩達,從容不迫應對各種演算法的話,除了不斷刷題學習思路我覺得沒有其他更好地方式了,
以上是我個人的一些拙見,望酌情采納,最后祝所有想找作業的同學都能收到自己心儀的公司的offer!
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/316677.html
標籤:其他
上一篇:idea gradle一直卡在initializing gradle projects data終極解決
下一篇:如何快速上手Jetpack?Jetpack入門到精通再到(網易云)強化實戰,Github已標星80K+,爆了爆了!
