1. 程式人生 > >2017Android面試回憶錄「下」(今日頭條/小米/網易/知乎...)

2017Android面試回憶錄「下」(今日頭條/小米/網易/知乎...)

前言

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基礎