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

這裏講的是大公司需要用到的一些高端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開發七大模塊核心知識筆記》

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

《379頁Android開發面試寶典》

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

如何使用它?

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

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

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

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

資料太多,全部展示會影響篇幅,暫時就先列舉這些部分截圖,以上資源均免費分享,以上內容均放在了開源項目:github 中已收錄,大家可以自行獲取(或者關注主頁掃描加微信獲取)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章