2019年「金九銀十」劍指BATJ,來自高級Android工程師的面試分享

「金九銀十」

每一年到了九、10月份,一方面正是各大企業爲第二年拓展業務而大量吸納人才的關鍵時期,招聘需求集中、空缺崗位多,另外一方面用人單位習慣在初秋進行大規模招聘,正好能夠避過盛夏的酷暑,所以能夠說是招聘旺季。 這個時間又恰好趕上應屆高校畢業生要找工做,同時,已就業者想跳槽找尋更理想的工做,形成了每一年該季度人才流動的高峯,所以能夠說是求職旺季。java

供需兩旺,因故稱之爲人才市場的「金九銀十」。c++

而隨着金九銀十的招聘高峯的到來,很多職業也開始走俏起來,而對於互聯網行業而言,「程序員」永遠是一個剛需的職業。市場對IT人才求賢若渴,程序員煊赫一時,薪資天然是水漲船高。程序員

那麼IT企業在面試時都會提哪些問題呢。下面爲你們分享Android高級工程師面試百度、阿里、騰訊、京東、華爲、小米等一線大廠時涉及的知識點,這些都是高端Android技術題目,題目有點技術含量,須要一點時間去研究一下。文章略長,但很全面,但願看到最後會對你有所幫助~面試

面試技巧

一、背熟你的簡歷算法

緣由:面試的第一個問題,一般是讓你進行自我介紹,或者介紹最近的項目,而一個面試者,若是連本身的簡歷都不熟悉,對簡歷裏提到的項目、技術都沒法描述清楚的話,我想沒有哪家公司會選擇這樣的工做人員。sql

因此,切記:必定要背好本身的簡歷,不要求你能所有記住,但至少要熟記最近待過的兩家公司,這兩家公司裏作過的項目、負責的模塊、項目裏面用到的技術以及相對應的技術實現方案(這個尤其重要)。數據庫

二、保持自信心和沉重冷靜的心態設計模式

緣由:面試過程當中,自信是必不可少的, 你能夠在面試的路上進行自我暗示,不斷對本身說,我能夠的, 反正我就是這麼作的。其實,面對面試官的時候,你自信的狀態會讓面試官感受到你是個頗有實力的人,至少從第一印象上會給你高分。數組

另外就是保持沉重冷靜,若是讓你提供技術方案或者說某個技術原理,不必什麼都說,你能夠對面試官說:我先想一想。而後回想記憶中的知識,組織一下語言,有條理地說出來,這樣能夠更好地表現你的才能。 不管誰面試都會緊張,我也會緊張,有時候明明記得的知識點會忽然忘記,不要緊,大膽地說忘了,或者直接說不知道,而不是逞強隨意胡亂一說。緩存

三、儘可能記住面試過程當中你回答不出來或者回答存在不妥的問題

緣由:面試失敗了不要緊,畢竟每一個公司的要求不同,提的問題和你擅長的方面可能有所出入,可是請記住一點:面試過程當中那些你回答不出來的問題,或者你感受回答不許確的問題,能夠用紙和筆記下來。

若是不會的,你能夠當場問面試官有沒有好的解答,若是面試官不肯意告訴你(通常是基礎方面面試官就懶得答你),那麼你就本身回家查資料,若是是某些特定的技術,也能夠本身寫寫案例什麼的,畢竟知識點就那麼多,問題百變,原理不變。面試也是一個學習知識的過程,讓你瞭解大部分公司目前須要或者要求的技術,此次不知道,下次就知道了

四、去面試以前,最好先了解你要去面試公司的狀況(包括產品、項目狀況)

緣由:俗話說,知己知彼,百戰不殆,面試就是一場戰鬥,你須要瞭解面試公司的基本狀況,包括崗位要求,這樣你就能大概知道面試的這家公司的技術要求狀況。

爲什麼要了解這家公司的主營產品和項目呢,就是讓你大概瞭解這家公司的一個技術架構的狀況,包括你可能對他們的一種實現方式提出質疑和疑惑。相信面試官很願意幫你解答這些問題,這樣你既能表現,也學到了知識,何樂而不爲。

五、合理安排你的面試時間(若是有多家公司的面試機會,儘可能把你想去的公司放到最後去面試)

緣由:可能大部分人對於如何安排面試時間會比較迷茫,隨意安排。這裏有個技巧,若是同時有多個面試機會,把你最想去的公司放到最後,這樣你經歷過前面的這些公司篩選,若是成功了是個機會,若是沒成功,也是爲最後作練習。 不過這裏就須要考慮兩點:

  • 你須要記住你投簡歷的公司和基本狀況(這說明你不是海投的)
  • 若是記不住,能夠先應答一個時間,後續瞭解公司信息後,再調整面試時間。並且建議一天面試的公司不要超過兩家,最好是上午一家,下午一家,這樣你有充足的時間調整狀態或是覆盤上一家的面試題。

項目介紹

  1. 明確項目是作什麼的。
  2. 明確項目的價值。(爲何作這個項目,它解決了用戶什麼痛點,它帶來什麼價值?)
  3. 明確項目的功能。(這個項目涉及哪些功能?)
  4. 明確項目的技術。(這個項目用到哪些技術?)
  5. 明確我的在項目中的位置和做用。(你在這個項目的承擔角色?)
  6. 明確項目的總體架構。
  7. 明確項目的優缺點,若是從新設計你會如何設計。
  8. 明確項目的亮點。(這個項目有什麼亮點?)
  9. 明確技術成長。(你經過這個項目有哪些技術成長?)

圖片

  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. 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中喚醒其餘進程的實現方式

最後

因爲篇幅緣由,在這隻把部分的題目列舉出來,還有就不作所有展現了,這些題我已經整理成文檔無償分享給那些有須要的朋友,同時整理也花費了我不少時間,你的點贊和關注是對我最大的支持!

加入Android開發交流羣(820198451)免費領取!

Android架構師之路很漫長,一塊兒共勉吧!

因爲篇幅緣由,在這隻把部分的題目列舉出來,還有圖片上的這些就不作所有展現了,這些題我已經整理成文檔無償分享給那些有須要的朋友,同時整理也花費了我不少時間,你的點贊和關注是對我最大的支持!

加入Android開發交流羣(820198451)免費領取!

相關文章
相關標籤/搜索