2017Android面試回憶錄「下」(今日頭條/小米/網易/知乎...)
阿新 • • 發佈:2019-01-10
前言
PS:
- 時間週期:【2017/6 – 2017/7】
- 來源: 【本部分由「洛廷」和「劍膽詩魂」提供】
- 沒有嚴格按照面試輪次來區分
今日頭條
- ☐ 快速排序
- ☐ JSON字串解析演算法及優化
- ☐ ABC三個執行緒,C執行緒要等A和B執行緒的結果,AB並行,問,跟什麼資料結構類似….,不是問生產者消費者或者訊號量什麼的,>
- ☐ 執行緒同步的問題,常用的執行緒同步
- ☐ 問專案,根據專案引申:主要有Asynctask和執行緒池,多程序以及IPC,GC相關(四種引用,怎麼判斷哪些記憶體該GC,GC演算法),why,when,how 這些都是要從專案裡面舉出來例子
- ☐ 圖片載入三級快取,有一個功能,做一個能放大縮小的圖片檢視器,載入一張巨大的圖片,怎麼做
- ☐ 網路請求相關,主要是網路請求優化。網路請求的時候遇到的問題
總結:一般一面主要考基礎知識,以及基於基礎知識解決問題的能力
- ☐ ListView效能優化,以及ListView的各種原理
- ☐ RecyclerView優點,原理
- ☐ 怎麼做上傳下載的斷點續傳
- ☐ EventBus原理
- ☐ 四種執行緒池區別,以及常見應用場景,執行緒池的深入瞭解
- ☐ CoordinatorLayout、CollapsingToolbarLayout原理以及使用
- ☐ 資料庫效能優化
- ☐ ManiFest原理,APP啟動流程,APK打包流程
總結:二面主要是看著做的APP問的,APP裡涉及到的技術,不管是不是自己負責的模組,只要面試官感興趣都會問。各種問題最終都要問到底層實現或者原理。
小米
- ☐ 求一個字串的最長迴文
- ☐ 給定一個數,以及有序陣列,求出來數組裡面兩個數的和等於給定數的下標
- ☐ 二叉樹中序遍歷,深度優先廣度優先,不用遞迴演算法的方法
- ☐ 求二叉樹第k層節點個數;
- ☐ 實現一個棧push,pop,getMaxElementValue,時間複雜度要求0(1)
- ☐ 有序陣列0(n)時間複雜度求一組和為sum的陣列下標
- ☐ AsyncTask內部實現,關注預設執行緒池是一個序列的執行緒池;
- ☐ 事件的傳遞方式,View,ViewGroup
- ☐ 講解Activity和Window,View的關係,以及DecorView結構
- ☐ 自定義View裡面OnMeasure引數的意義
- ☐ 講解一下HandlerThread
總結:小米每一面都會至少有一個演算法題
知乎/獵豹
- ☐ Activity的四種啟動模式以及相關概念,Activity棧,常見情境下的生命週期分析,異常關閉頁面之後的恢復
- ☐ Service基礎概念,生命週期,通訊。四大元件是基礎,常見問題都要掌握
- ☐ IPC
- ☐ 同步的問題,常見的那些,鎖機制,sychronized關鍵字,concurrent包下的資料結構,atom包下的資料結構
- ☐ HashMap原理
- ☐ Handler,包括Looper,MessageQueue,ThreadLocal這些類要詳細的看
- ☐ ArrayList,LinkedList原始碼要看
- ☐ View的事件傳遞機制,要徹底弄透徹,可問的問題很多
- ☐ Asynctask和執行緒池
- ☐ JVM GC演算法,問得比較淺
- ☐ JVM 類載入過程,問得比較淺
- ☐ DexClassLoader和PathClassLoader的區別
總結:兩家面試差不多,都是基礎問題,各種常見套路
網易
- ☐ 求笛卡爾積
- ☐ 單詞反轉
- ☐ 兩個有序陣列,時間複雜度最好的情況下,合併成一個數組
- ClassLoader,類載入相關問題,例如繼承、static修飾的這些在類載入時候的實際應用
- 內部類,靜態內部類,匿名內部類在載入時候的相關過程
- 直接引用和符號引用相關
- android dalvik虛擬機器裡的類載入
- scrollview和listview的區別
- 熱修復/外掛化(因為簡歷上寫了這兩個,所以導致面試官非常有興趣,一個勁地問,後來才發現面試官就是搞這一塊的,教訓是,一定要非常瞭解才能寫啊,千萬不要亂寫T T)
總結:Android基礎知識問的較少,主要問的Java基礎和JVM基礎