【乾貨】Android 一線互聯網面試題彙總,13模塊200+題,征服面試官不是夢!

今天分享的面試題,基本都是針對一線互聯網公司的面試題整理的,我這裏就不單獨以公司爲單位整理,我自己進行了分類,循序漸進,由基礎到深入,由易到簡。

每個問題的答案我都整理好了一個文檔:AndroidBAT面試題整理,這樣就可以節省大家自己去搜索的時間,把時間用在正確的東西上。

金九銀十,需要跳槽的快快複習和準備吧!

Android BAT 面試題目錄:

1.四大組件
2.Fragment
3.自定義組件、動畫
4.存儲
5.網絡
6.圖片
7.佈局
8.性能優化
9.JNI
10.進程間通信(簡稱:IPC)
11.WebView
12.進程保活
13.其他相關面試題

1.四大組件

  • 四大組件是什麼
  • 四大組件的生命週期
  • Activity之間的通信方式
  • 橫豎屏切換的時候,Activity 各種情況下的生命週期
  • Activity與Fragment之間生命週期比較
  • Activity上有Dialog的時候按Home鍵時的生命週期
  • 兩個Activity 之間跳轉時必然會執行的是哪幾個方法?
  • Activity的四種啓動模式對比以及使用場景
  • Activity狀態保存與恢復
  • Activity 怎麼和Service 綁定
  • Service和Activity怎麼進行數據交互?
  • Service的開啓方式
  • 請描述一下Service 的生命週期
  • 談談你對ContentProvider的理解
  • ContentProvider、ContentResolver、ContentObserver 之間的關係
  • 請描述一下廣播BroadcastReceiver的理解(實現原理)
  • 廣播的分類
  • 廣播使用的方式和場景
  • 本地廣播和全局廣播有什麼差別?
  • Application 和 Activity 的 Context 對象的區別

2.Fragment

  • 什麼是Fragment
  • 爲什麼要用Fragment
  • Fragment與Activity的通信方式
  • Fragment各種情況下的生命週期
  • Fragment之間傳遞數據的方式?
  • Fragment的add與replace的區別
  • 用Fragment有遇過什麼坑嗎,怎麼解決
  • getFragmentManager,getSupportFragmentManager ,getChildFragmentManager三者之間的區別
  • FragmentPagerAdapter與FragmentStatePagerAdapter的區別與使用場景

3.自定義組件、動畫

  • 描述一下View的繪製流程
  • 說說自定義view的幾個構造函數
  • View 裏面的 onSavedInstanceState和onRestoreInstanceState的作用
  • onLayout() 和Layout()的區別
  • 描述一下getX、getRawX、getTranslationX
  • Android中的動畫有哪幾類,它們的特點和區別是什麼
  • Interpolator和TypeEvaluator的作用
  • 請描述一下View事件傳遞分發機制
  • 事件分發中的onTouch 和onTouchEvent 有什麼區別,又該如何使用?
  • View和ViewGroup分別有哪些事件分發相關的回調方法
  • View刷新機制

4.存儲

  • 描述一下你知道的數據存儲方式
  • SharedPreferences的應用場景,核心原理是什麼
  • SharedPreferences是線程安全的嗎?
  • 描述一下圖片存儲在本地的方式
  • sqlite升級,增加字段的語句
  • 數據庫框架對比和源碼分析
  • 數據庫的優化
  • 數據庫數據遷移問題

5.網絡

  • 描述一次網絡請求的流程
  • HTTP報文結構
  • HttpClient和HttpURLConnection的區別
  • Volley,okhttp,retrofit之間的區別和核心原理和使用場景
  • 描述一下https
  • https中哪裏用了對稱加密,哪裏用了非對稱加密,對加密算法(如RSA)等是否有了解?
  • 說一下三次握手,四次揮手的具體細節
  • 描述一下socket是什麼東西
  • 從網絡加載一個10M的圖片,說下注意事項
  • TCP與UDP的區別
  • client如何確定自己發送的消息被server收到?
  • WebSocket與socket的區別
  • 網絡請求緩存處理,okhttp如何處理網絡緩存的
  • 自己去設計網絡請求框架,怎麼做?

6.圖片

  • 說一下OOM的原因,如何避免
  • 說一下三級緩存的原理
  • 描述一下內存緩存的容器
  • 圖片庫對比
  • 圖片庫的源碼分析
  • 圖片框架緩存實現
  • LRUCache原理
  • 自己去實現圖片庫,怎麼做?
  • 說說Glide內存緩存的具體實現?

7.佈局

  • 說一下佈局性能的排序,誰的效率最高
  • 描述一下約束佈局
  • 關於佈局優化的方案
  • 怎麼檢測佈局深度
  • LinearLayout、RelativeLayout、FrameLayout的特性及對比,並介紹使用場景。

8.性能優化

性能優化包括:內存,處理效率,視覺流暢度,CPU,電量,流量等方面,針對手機的性能去做相應的方案。個人認爲更應該把握好內存優化、處理效率(代碼質量)、視覺流暢度(佈局優化)。

  • ANR產生的原因是什麼?
  • oom是什麼?
  • 什麼情況導致oom?
  • 有什麼解決方法可以避免OOM?
  • Oom 是否可以try catch?爲什麼?
  • 內存泄漏是什麼?
  • 什麼情況導致內存泄漏?
  • 如何防止線程的內存泄漏?
  • 內存泄露的解決方法
  • 內存泄漏和內存溢出區別?
  • 如何對Android 應用進行性能分析以及優化?
  • 怎麼去除無用代碼?
  • 性能優化如何分析systrace?
  • 用IDE如何分析內存泄漏?
  • Java多線程引發的性能問題,怎麼解決?
  • 啓動頁白屏及黑屏解決?
  • 啓動太慢怎麼解決?
  • 怎麼保證應用啓動不卡頓?
  • App啓動崩潰異常捕捉
  • 自定義View注意事項
  • 現在下載速度很慢,試從網絡協議的角度分析原因,並優化(提示:網絡的5層都可以涉及)。
  • Https請求慢的解決辦法(提示:DNS,攜帶數據,直接訪問IP)
  • 如何保持應用的穩定性
  • RecyclerView和ListView的性能對比
  • ListView的優化
  • RecycleView優化
  • View渲染
  • Bitmap如何處理大圖,如一張30M的大圖,如何預防OOM
  • java中的四種引用的區別以及使用場景
  • 強引用置爲null,會不會被回收?

9.JNI

  • 請介紹一下NDK
  • 什麼是NDK庫?
  • 如何在JNI中註冊native函數,有幾種註冊方式?
  • Java如何調用c、c++語言?
  • JNI如何調用java層代碼?
  • 你用JNI來實現過什麼功能嗎?怎麼實現的?

10.進程間通信(簡稱:IPC)

  • 進程間通信的方式?
  • Binder機制的作用和原理
  • 簡述IPC?
  • 什麼是AIDL?
  • AIDL解決了什麼問題?
  • AIDL如何使用?
  • Android進程分類?
  • 進程和 Application 的生命週期?
  • 進程調度
  • 談談對進程共享和線程安全的認識

11.WebView

  • 描述一下Webview的作用
  • WebView的內核是什麼
  • 描述一下WebView與js的交互方式
  • 描述一下WebView的緩存機制
  • 關於WebView的優化你知道哪些
  • 有沒有用過第三方WebView組件?講一講優勢

12.進程保活

  • 做過進程保活嗎?
  • 5.0下和5.0上的保活方式瞭解嗎?
  • 描述一下進程回收的過程
  • 如何降低進程的oom_adj

其他

  • Handler機制和底層實現
  • Handler、Thread和HandlerThread的差別
  • handler發消息給子線程,looper怎麼啓動?
  • 關於Handler,在任何地方new Handler 都是什麼線程下?
  • ThreadLocal原理,實現及如何保證Local屬性?
  • 請解釋下在單線程模型中Message、Handler、Message Queue、Looper之間的關係
  • AsyncTask機制
  • AsyncTask原理及不足
  • 如何取消AsyncTask?
  • 爲什麼不能在子線程更新UI?
  • LruCache默認內存緩存大小
  • ContentProvider的權限管理(解答:讀寫分離,權限控制-精確到表級,URL控制)
  • 如何通過廣播攔截和abort一條短信?
  • 廣播是否可以請求網絡?
  • 廣播引起anr的時間限制是多少?
  • 描述一下Activity棧
  • Android線程有沒有上限?
  • 線程池有沒有上限?
  • ListView重用的是什麼?
  • Android爲什麼引入Parcelable?
  • 有沒有嘗試簡化Parcelable的使用?
  • 混合開發有了解嗎?
  • 知道哪些混合開發的方式?說出它們的優缺點和各自使用場景?(解答:比如:RN,weex,H5,小程序,WPA等)
  • 屏幕適配的處理技巧都有哪些?
  • 服務器只提供數據接收接口,在多線程或多進程條件下,如何保證數據的有序到達?
  • 動態佈局的理解
  • 畫出 Android 的大體架構圖
  • Recycleview和ListView的區別
  • ListView圖片加載錯亂的原理和解決方案
  • 動態權限適配方案,權限組的概念
  • Android系統爲什麼會設計ContentProvider?
  • 下拉狀態欄是不是影響activity的生命週期
  • Bitmap 使用時候注意什麼?
  • Bitmap的recycler()
  • Android中開啓攝像頭的主要步驟
  • ViewPager使用細節,如何設置成每次只初始化當前的
  • 點擊事件被攔截,但是想傳到下面的View,如何操作?
  • 描述一下微信主頁面的實現方式
  • invalidate和postInvalidate的區別及使用
  • Activity-Window-View三者的差別
  • 談談對Volley的理解
  • ActivityThread,AMS,WMS的工作原理
  • LaunchMode應用場景
  • SpareArray原理
  • 請介紹下ContentProvider 是如何實現數據共享的?
  • IntentService原理及作用是什麼?
  • ApplicationContext和ActivityContext的區別
  • 封裝View的時候怎麼知道view的大小
  • AndroidManifest的作用與理解

結尾

去好公司面試,能答出來只是第一步,延伸問答、靈活運用纔是面試官的目的,你越能答,他們越能問。我希望讀者們能知道深入瞭解的含義,這真的是一個過程。

自己的知識準備得怎麼樣,這直接決定了你能否順利通過一面和二面,所以在面試前來一個知識梳理,看需不需要提升自己的知識儲備是很有必要的。

關於知識梳理,這裏再分享一下我面試這段時間的複習路線:(以下體系的複習資料是我從各路大佬收集整理好的)

知識梳理完之後,就需要進行查漏補缺,所以針對這些知識點,我手頭上也準備了不少的電子書和筆記,這些筆記將各個知識點進行了完美的總結:

《379頁Android開發面試寶典》

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

如何使用它?

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

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

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

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

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

最後複習的差不多的同學,請花一兩個小時認真準備這些東西:

1.你工作中最牛逼or最成功or最有貢獻的一件事是什麼?
2.項目中的亮點是哪些?怎麼實現的?(實在沒有的自己去找,只能用別人的案例了)
3.做項目的過程中有沒有遇到過困難?怎麼克服的?

Last Thing:
面試不過不要灰心,life always sucks,一切會好起來的!

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