Android開發多年每天Crud不清楚自己的技術?來刷刷大廠的高階技術面試題就知道了

南方吳彥祖_藍斯發表於2020-10-26

這裡講的是大公司需要用到的一些高階Android技術,這裡專門整理了一個 文件,希望大家都可以看看。這些題目有點技術含量,需要好點時間去研究一下的。

目錄:

一、圖片
二、網路和安全機制
三、資料庫
四、演算法
五、外掛化、模組化、元件化、熱修復、增量更新、Gradle
六、架構設計和設計模式
七、效能最佳化
八、NDK、jni、Binder、AIDL、程式通訊有關
九、framework層、ROM定製、Ubuntu、Linux之類的問題

一、圖片

1、圖片庫對比
2、LRUCache原理
3、圖片載入原理
4、自己去實現圖片庫,怎麼做?
5、Glide原始碼解析
6、Glide使用什麼快取?
7、Glide記憶體快取如何控制大小?

二、網路和安全機制

1、網路框架對比和原始碼分析
2、自己去設計網路請求框架,怎麼做?
3、網路請求快取處理,okhttp如何處理網路快取的;
4、從網路載入一個10M的圖片,說下注意事項
5、TCP的3次握手和四次揮手
6、TCP與UDP的區別
7、TCP與UDP的應用
8、HTTP協議
9、HTTP1.0與2.0的區別
10、HTTP報文結構
11、HTTP與HTTPS的區別以及如何實現安全性
12、如何驗證證照的合法性?
13、https中哪裡用了對稱加密,哪裡用了非對稱加密,對加密演算法(如RSA)等是否有了解?
14、client如何確定自己傳送的訊息被server收到?
15、談談你對WebSocket的理解
16、WebSocket與socket的區別
17、談談你對安卓簽名的理解。
18、請解釋安卓為啥要加簽名機制?
19、影片加密傳輸
20、App 是如何沙箱化,為什麼要這麼做?
21、許可權管理系統(底層的許可權是如何進行 grant 的)?

三、資料庫

1、sqlite升級,增加欄位的語句
2、資料庫框架對比和原始碼分析
3、資料庫的最佳化
4、資料庫資料遷移問題

四、演算法

1、排序演算法有哪些?
2、最快的排序演算法是哪個?
3、手寫一個氣泡排序
4、手寫快速排序程式碼
5、快速排序的過程、時間複雜度、空間複雜度
6、手寫堆排序
7、堆排序過程、時間複雜度及空間複雜度
8、寫出你所知道的排序演算法及時空複雜度,穩定性
9、二叉樹給出根節點和目標節點,找出從根節點到目標節點的路徑
10、給阿里2萬多名員工按年齡排序應該選擇哪個演算法?
11、GC演算法(各種演算法的優缺點以及應用場景)
12、蟻群演算法與蒙特卡洛演算法
13、子串包含問題(KMP 演算法)寫程式碼實現
14、一個無序,不重複陣列,輸出N個元素,使得N個元素的和相加為M,給出時間複雜度、.空間複雜度。手寫演算法
15、萬億級別的兩個URL檔案A和B,如何求出A和B的差集C(提示:Bit對映->hash分組->多檔案讀寫效率->磁碟定址以及應用層面對定址的最佳化)
16、百度POI中如何試下查詢最近的商家功能(提示:座標映象+R樹)。
17、兩個不重複的陣列集合中,求共同的元素。
18、兩個不重複的陣列集合中,這兩個集合都是海量資料,記憶體中放不下,怎麼求共同的元素?
19、一個檔案中有100萬個整數,由空格分開,在程式中判斷使用者輸入的整數是否在此檔案中。說出最優的方法
20、一張Bitmap所佔記憶體以及記憶體佔用的計算
21、 2000萬個整數,找出第五十大的數字?
22、燒一根不均勻的繩,從頭燒到尾總共需要1個小時。現在有若干條材質相同的繩子,問如何用燒繩的方法來計時一個小時十五分鐘呢?
23、求1000以內的水仙花數以及40億以內的水仙花數
24、5枚硬幣,2正3反如何劃分為兩堆然後透過翻轉讓兩堆中正面向上的硬8幣和反面向上的硬幣個數相同
25、時針走一圈,時針分針重合幾次
26、N*N的方格紙,裡面有多少個正方形
27、x個蘋果,一天只能吃一個、兩個、或者三個,問多少天可以吃完?

五、外掛化、模組化、元件化、熱修復、增量更新、Gradle

1、對熱修復和外掛化的理解
2、外掛化原理分析
3、模組化實現(好處,原因)
4、熱修復,外掛化
5、專案元件化的理解
6、描述清點選 Android Studio 的 build 按鈕後發生了什麼?

六、架構設計和設計模式

1、談談你對Android設計模式的理解
2、MVC MVP MVVM原理和區別
3、你所知道的設計模式有哪些?
4、專案中常用的設計模式
5、手寫生產者/消費者模式
6、寫出觀察者模式的程式碼
7、介面卡模式,裝飾者模式,外觀模式的異同?
8、用到的一些開源框架,介紹一個看過原始碼的,內部實現過程。
9、談談對RxJava的理解
10、Rxjava傳送事件步驟
11、RxJava的作用,與平時使用的非同步操作來比的優缺點
12、說說EventBus作用,實現方式,代替EventBus的方式
13、從0設計一款App整體架構,如何去做?
14、說一款你認為當前比較火的應用並設計(比如:直播APP,P2P金融,小影片等)
15、談談對java狀態機理解
16、Fragment如果在Adapter中使用應該如何解耦?
17、Binder機制及底層實現
18、對於應用更新這塊是如何做的?(解答:灰度,強制更新,分割槽域更新)?
19、實現一個Json解析器(可以透過正則提高速度)
20、統計啟動時長,標準

七.效能最佳化

1、如何對Android 應用進行效能分析以及最佳化?
2、ddms 和 traceView
3、效能最佳化如何分析systrace?
4、用IDE如何分析記憶體洩漏?
5、Java多執行緒引發的效能問題,怎麼解決?
6、啟動頁白屏及黑屏解決?
7、啟動太慢怎麼解決?
8、怎麼保證應用啟動不卡頓?
9、App啟動崩潰異常捕捉
10、自定義View注意事項
11、現在下載速度很慢,試從網路協議的角度分析原因,並最佳化(提示:網路的5層都可以涉及)。
12、Https請求慢的解決辦法(提示:DNS,攜帶資料,直接訪問IP)
13、如何保持應用的穩定性
14、RecyclerView和ListView的效能對比
15、ListView的最佳化
16、RecycleView最佳化
17、View渲染
18、Bitmap如何處理大圖,如一張30M的大圖,如何預防OOM
19、java中的四種引用的區別以及使用場景
20、強引用置為null,會不會被回收?

八.NDK、jni、Binder、AIDL、程式通訊有關

1、請介紹一下NDK
2、什麼是NDK庫?
3、jni用過嗎?
4、如何在jni中註冊native函式,有幾種註冊方式?
5、Java如何呼叫c、c++語言?
6、jni如何呼叫java層程式碼?
7、程式間通訊的方式?
8、Binder機制
9、簡述IPC?
10、什麼是AIDL?
11、AIDL解決了什麼問題?
12、AIDL如何使用?
13、Android 上的 Inter-Process-Communication 跨程式通訊時如何工作的?
14、多程式場景遇見過麼?
15、Android程式分類?
16、程式和 Application 的生命週期?
17、程式排程
18、談談對程式共享和執行緒安全的認識
19、談談對多程式開發的理解以及多程式應用場景
20、什麼是協程?

九.framework層、ROM定製、Ubuntu、Linux之類的問題

1、java虛擬機器的特性
2、談談對jvm的理解
3、JVM記憶體區域,開執行緒影響哪塊記憶體
4、對Dalvik、ART虛擬機器有什麼瞭解?
5、Art和Dalvik對比
6、虛擬機器原理,如何自己設計一個虛擬機器(記憶體管理,類載入,雙親委派)
7、談談你對雙親委派模型理解
8、JVM記憶體模型,記憶體區域
9、類載入機制
10、談談對ClassLoader(類載入器)的理解
11、談談對動態載入(OSGI)的理解
12、記憶體物件的迴圈引用及避免
13、記憶體回收機制、GC回收策略、GC原理時機以及GC物件
14、垃圾回收機制與呼叫System.gc()區別
15、Ubuntu編譯安卓系統
16、系統啟動流程是什麼?(提示:Zygote程式 –> SystemServer程式 –> 各種系統服務 –> 應用程式)
17、大體說清一個應用程式安裝到手機上時發生了什麼
18、簡述Activity啟動全部過程
19、App啟動流程,從點選桌面開始
20、邏輯地址與實體地址,為什麼使用邏輯地址?
21、Android為每個應用程式分配的記憶體大小是多少?
22、Android中程式記憶體的分配,能不能自己分配定額記憶體?
23、程式保活的方式
24、如何保證一個後臺服務不被殺死?(相同問題:如何保證service在後臺不被kill?)比較省電的方式是什麼?
25、App中喚醒其他程式的實現方式

最後

很多人因為每天Crud,導致自己技術比較零散,也 不夠深入不夠系統,所以重新進行學習是很有必要的。

其實客戶端開發的知識點就那麼多,面試問來問去還是那麼點東西。所以面試沒有其他的訣竅,只看你對這些知識點準備的充分程度。so,出去面試時先看看自己複習到了哪個階段就好。

這裡再分享一下我之前面試期間的複習路線:(以下體系的複習資料是我從各路大佬收集整理好的)

《Android開發七大模組核心知識筆記》

Android開發多年每天Crud不清楚自己的技術?來刷刷大廠的高階技術面試題就知道了
Android開發多年每天Crud不清楚自己的技術?來刷刷大廠的高階技術面試題就知道了
Android開發多年每天Crud不清楚自己的技術?來刷刷大廠的高階技術面試題就知道了

《960全網最全Android開發筆記》

Android開發多年每天Crud不清楚自己的技術?來刷刷大廠的高階技術面試題就知道了

《379頁Android開發面試寶典》

歷時半年,我們整理了這份市面上最全面的安卓面試題解析大全
包含了騰訊、百度、小米、阿里、樂視、美團、58、360、新浪、搜狐等一線網際網路公司面試被問到的題目。熟悉本文中列出的知識點會大大增加透過前兩輪技術面試的機率。

如何使用它?

1.可以透過目錄索引直接翻看需要的知識點,查漏補缺。
2.五角星數表示面試問到的頻率,代表重要推薦指數

Android開發多年每天Crud不清楚自己的技術?來刷刷大廠的高階技術面試題就知道了

《507頁Android開發相關原始碼解析》

只要是程式設計師,不管是Java還是Android,如果不去閱讀原始碼,只看API文件,那就只是停留於皮毛,這對我們知識體系的建立和完備以及實戰技術的提升都是不利的。

真正最能鍛鍊能力的便是直接去閱讀原始碼,不僅限於閱讀各大系統原始碼,還包括各種優秀的開源庫。

Android開發多年每天Crud不清楚自己的技術?來刷刷大廠的高階技術面試題就知道了

資料太多,全部展示會影響篇幅,暫時就先列舉這些部分截圖,以上資源均免費分享,以上內容均放在了開源專案: github  中已收錄,大家可以自行獲取。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69983917/viewspace-2730099/,如需轉載,請註明出處,否則將追究法律責任。

相關文章