要進大廠,至少要把這些Android高階技術面試題搞清楚!

南方吳彥祖_藍斯發表於2020-09-17

作為一名即將求職的程式設計師,面對一個可能跟近些年非常不同的 2020 年,你的就業機會和風口會出現在哪裡?在這種新環境下,工作應該選擇大廠還是小公司?已有幾年工作經驗的老兵,又應該如何保持和提升自身競爭力,轉被動為主動?

就目前大環境來看,跳槽成功的難度比往年高很多。一個明顯的感受:今年的面試,無論一面還是二面,都很考驗Android程式設計師的技術功底。

最近蒐集了一些阿里、騰訊2019年一些精選的技術性面試題,最後還把把技術點梳理成一份大而全的“Android高階工程師”面試xmind(實際上比預期多花了不少精力),包含知識脈絡 + 分支細節,由於篇幅有限,在文末以圖片的形式給大家展示一份大概的。

那麼如何才能透過一線網際網路公司面試?

應該學什麼才能有效地提高自身的競爭力呢?其實,首先我們應該優先深入學習工作中用到的技術,其次,關注這2年來Android最新的面試題所涉及的知識點,根據自身的實際情況有選擇地進行針對性的學習和提升。只有這樣,自身才不會被所謂的 網際網路寒冬 嚇倒。

一、圖片

  • 圖片庫對比
  • 圖片庫的原始碼分析
  • 圖片框架快取實現
  • LRUCache原理
  • 圖片載入原理
  • 自己去實現圖片庫,怎麼做?
  • Glide原始碼解析
  • Glide使用什麼快取?
  • Glide記憶體快取如何控制大小?

二、網路和安全機制

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

三、資料庫

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

四、演算法

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

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

  • 對熱修復和外掛化的理解
  • 外掛化原理分析
  • 模組化實現(好處,原因)
  • 熱修復,外掛化
  • 專案元件化的理解
  • 描述請點選 Android Studio 的 build 按鈕後發生了什麼

六、架構設計和設計模式

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

七、效能最佳化

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

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

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

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

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

最後

學習技術是一條慢長而艱苦的道路,不能靠一時激情,也不是熬幾天幾夜就能學好的,必須養成平時努力學習的習慣。所以: 貴在堅持!

最後為了幫助大家深刻理解 Android相關知識點的原理以及面試相關知識 ,這裡放上我搜集整理的 2019-2020BAT 面試真題解析 ,我把大廠面試中 常被問到的技術點 整理成了PDF,包知識脈絡 + 諸多細節。

節省大家在網上搜尋資料的時間來學習,也可以分享給身邊好友一起學習。

一鍵領取: 【Android超硬核面試資料】

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

要進大廠,至少要把這些Android高階技術面試題搞清楚!

《379頁Android開發面試寶典》

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

如何使用它?

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

要進大廠,至少要把這些Android高階技術面試題搞清楚!

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

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

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

要進大廠,至少要把這些Android高階技術面試題搞清楚!

騰訊、位元組跳動、阿里、百度等BAT大廠 2019-2020面試真題解析

要進大廠,至少要把這些Android高階技術面試題搞清楚!

資料太多,全部展示會影響篇幅,暫時就先列舉這些部分截圖,大家可以 點選這裡自行獲取(或者關注主頁加微信獲取)。

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

相關文章