分享一份非常強勢的Android面試題

codeGoogle發表於2018-08-23

馬上步入金九銀十了,是時候看一些面試題去鵝廠了,接下來我將分享一些面試題,每天總結一點點,希望對大家有所幫助!

ListView和RecyclerView區別

參考連結:

blog.csdn.net/shu_lance/a…

既然RecyclerView在很多方面能取代ListView,Google為什麼沒把ListView劃上一條過時的橫線?

答案: 可以沿著回收機制來回答。ListView採用的是RecyclerBin的回收機制在一些輕量級的List顯示時效率更高

你用過MVP和MVVM的區別

參考連結:

www.cnblogs.com/dubo-/p/561…

HashMap的內部實現原理?

  • 1) HashMap可以接受null鍵值和值,而HashTable則不能,HashMap是非synchronized的;儲存的是鍵值對。

  • 2) HashMap是基於hashing原理,使用put(key,value)儲存物件到HashMap中,使用get(key)從HashMap中獲取物件,當我們給put方法傳遞鍵和值時,我們先對鍵呼叫hashCode()方法,返回的hashCode用於找到bucket位置來儲存鍵物件和值物件,作為Map.Entry.

  • 3) 如果兩個物件hashCode相同:

    儲存時:他們會找到相同的bucket位置,發生碰撞,因為HashMap使用連結串列儲存物件(每個Map.Entry都有一個next指標),這個Entry會儲存在連結串列中。

    獲取時:會用hashCode找到bucket位置,然後呼叫key.equals()方法找到連結串列中正確的節點.最終找到要找的值物件.

    減少碰撞:使用final修飾的物件、或不可變的物件作為鍵,使用(Integer、String)(是不可變、final的,而且已經重寫了equals和hashCode方法)這樣的wrapper類作為鍵是非常好的,(我們可以使用自定義的物件作為鍵嗎?答:當然可以,只要它遵守了equals和hashCode方法定義規則,並且當物件插入到Map中之後將不會再改變。)

  • 4) HashMap負載因子預設是0.75,可設定,當map填滿了75%的bucket時候,將會建立原來HashMap大小兩倍的bucket陣列,來重新調整map的大小,並將原來的物件放入新的bucket陣列中,這個過程叫做rehashing,因為它呼叫hash方法找到新的bucket位置。

  • 5) 重新調整map大小可能會發生競爭問題:如果兩個執行緒都發現HashMap需要調整大小了,它們都會嘗試進行調整,在調整中,儲存在連結串列中的元素的次序會反過來,因為移動bucket位置的時候,HashMap並不會將元素放在連結串列的尾部,而是放在頭部,這是為了避免尾部遍歷,如果條件競爭發生了,就死迴圈了。

你用過AsyncTask,說一說AsyncTask的內部實現原理?

參考連結:

www.cnblogs.com/absfree/p/5…

AsyncTask內部維護了一個執行緒池,是序列還是並行,怎麼維護的?

序列

參考連結:

www.cnblogs.com/absfree/p/5…

那你說說執行緒池的四種初始化吧?

你用過MD,你知道怎麼定義一個Behavior嗎?

參考連結:

www.jianshu.com/p/82d18b0d1…

RecyclerView的拖拽怎麼實現的?

參考連結:

blog.csdn.net/aiynmimi/ar…

寫一個單利模式,應注意哪三個條件?

1、建構函式私有 2、含有一個該類的靜態私有物件 3、有一個靜態的公有的函式用於建立或獲取它本身的靜態私有物件 4、其次才是考慮執行緒同步!

一個按升序排列好的陣列int[] arry = {-5,-1,0,5,9,11,13,15,22,35,46},輸入一個x,int x = 31,在資料中找出和為x的兩個數,例如 9 + 22 = 31,要求演算法的時間複雜度為O(n);

如何向一個資料庫具有int型別A,B,C,D四列的表中隨機插入10000條資料?如何按升序取出A列中前10個數?

service兩種啟動方式有什麼區別?

參考連結:

blog.csdn.net/siwen1234/a…

說說三級快取、Handler機制 ?

參考連結:

blog.csdn.net/wenzhi20102…

Handler機制

www.cnblogs.com/dendai-05/p…

阿里巴巴

  • LRUCache原理
  • 圖片載入原理
  • 模組化實現(好處,原因)
  • JVM
  • 視訊加密傳輸
  • 統計啟動時長,標準
  • 如何保持應用的穩定性
  • ThreadLocal 原理
  • 談談classloader
  • 動態佈局
  • 熱修復,外掛化
  • HashMap原始碼,SpareArray原理
  • 效能優化,怎麼保證應用啟動不卡頓
  • 怎麼去除重複程式碼
  • SP是程式同步的嗎?有什麼方法做到同步
  • 介紹下SurfView
  • HashMap實現原理,ConcurrentHashMap 的實現原理
  • BroadcastReceiver,LocalBroadcastReceiver 區別
  • Bundle 機制
  • Handler 機制
  • android 事件傳遞機制
  • 執行緒間 操作 List
  • App啟動流程,從點選桌面開始
  • 動態載入
  • 類載入器
  • OSGI
  • Https請求慢的解決辦法,DNS,攜帶資料,直接訪問IP
  • GC回收策略
  • 畫出 Android 的大體架構圖
  • 描述清點選 Android Studio 的 build 按鈕後發生了什麼,大體說清一個應用程式安裝到手機上時發生了什麼;
  • 對 Dalvik、ART 虛擬機器有基本的瞭解;
  • Android 上的 Inter-Process-Communication 跨程式通訊時如何工作的;
  • App 是如何沙箱化,為什麼要這麼做;
  • 許可權管理系統(底層的許可權是如何進行 grant 的)
  • 程式和 Application 的生命週期;
  • 系統啟動流程 Zygote程式 –> SystemServer程式 –> 各種系統服務 –> 應用程式
  • recycleview listview 的區別,效能
  • 排序,快速排序的實現
  • 樹:B 樹的介紹
  • 圖:有向無環圖的解釋
  • TCP/UDP的區別
  • synchronized與Lock的區別
  • volatile
  • Java執行緒池
  • Java中物件的生命週期
  • 類載入機制
  • 雙親委派模型
  • Android事件分發機制
  • MVP模式
  • RxJava
  • 抽象類和介面的區別
  • 集合 Set實現 Hash 怎麼防止碰撞
  • JVM 記憶體區域 開執行緒影響哪塊記憶體
  • 垃圾收集機制 物件建立,新生代與老年代
  • 二叉樹 深度遍歷與廣度遍歷
  • B樹、B 樹
  • 訊息機制
  • 程式排程
  • 程式與執行緒
  • 死鎖
  • 程式狀態
  • JVM記憶體模型
  • 併發集合瞭解哪些
  • ConCurrentHashMap實現
  • CAS介紹
  • 開啟執行緒的三種方式,run()和start()方法區別
  • 執行緒池
  • 常用資料結構簡介
  • 判斷環(猜測應該是連結串列環)
  • 排序,堆排序實現
  • 連結串列反轉
  • 動態許可權適配方案,許可權組的概念
  • 網路請求快取處理,okhttp如何處理網路快取的
  • 圖片載入庫相關,bitmap如何處理大圖,如一張30M的大圖,如何預- - 防OOM
  • 程式保活
  • listview圖片載入錯亂的原理和解決方案
  • https相關,如何驗證證照的合法性,https中哪裡用了對稱加密,哪裡用了非對稱加密,對加密演算法(如RSA)等是否有了解

滴滴

  • MVP

  • 廣播(動態註冊和靜態註冊區別,有序廣播和標準廣播)

  • service生命週期

  • handler實現機制(很多細節需要關注:如執行緒如何建立和退出訊息迴圈等等)

  • 多執行緒(關於AsyncTask缺陷引發的思考)

  • 資料庫資料遷移問題

  • 設計模式相關(例如Android中哪裡使用了觀察者模式,單例模式相關)

  • x個蘋果,一天只能吃一個、兩個、或者三個,問多少天可以吃完

  • TCP與UDP區別與應用(三次握手和四次揮手)涉及到部分細節(如client如何確定自己傳送的訊息被server收到) HTTP相關 提到過Websocket 問了WebSocket相關以及與socket的區別

  • 是否熟悉Android jni開發,jni如何呼叫java層程式碼

  • 程式間通訊的方式

  • java註解

  • 計算一個view的巢狀層級

  • 專案元件化的理解

  • 多執行緒斷點續傳原理

  • Android系統為什麼會設計ContentProvider,程式共享和執行緒安全問題

  • jvm相關

  • Android相關優化(如記憶體優化、網路優化、佈局優化、電量優化、業務優化)

  • EventBus實現原理

美團

  • static synchronized 方法的多執行緒訪問和作用,同一個類裡面兩個synchronized方法,兩個執行緒同時訪問的問題

  • 內部類和靜態內部類和匿名內部類,以及專案中的應用

  • handler發訊息給子執行緒,looper怎麼啟動

  • View事件傳遞

  • activity棧

  • 封裝view的時候怎麼知道view的大小

  • arraylist和linkedlist的區別,以及應用場景

  • 怎麼啟動service,service和activity怎麼進行資料互動

  • 下拉狀態列是不是影響activity的生命週期,如果在onStop的時候做了網路請求,onResume的時候怎麼恢復

  • view渲染

今日頭條

  • 資料結構中堆的概念,堆排序

  • 死鎖的概念,怎麼避免死鎖

  • ReentrantLock 、synchronized和volatile(n面)

  • HashMap

  • singleTask啟動模式

  • 用到的一些開源框架,介紹一個看過原始碼的,內部實現過程。

  • 訊息機制實現

  • ReentrantLock的內部實現

  • App啟動崩潰異常捕捉

  • 事件傳遞機制的介紹

  • ListView的優化

  • 二叉樹,給出根節點和目標節點,找出從根節點到目標節點的路徑

  • 模式MVP,MVC介紹

  • 斷點續傳的實現

  • 集合的介面和具體實現類,介紹

  • TreeMap具體實現

  • synchronized與ReentrantLock

  • 手寫生產者/消費者模式

  • 邏輯地址與實體地址,為什麼使用邏輯地址

  • 一個無序,不重複陣列,輸出N個元素,使得N個元素的和相加為M,給出時間複雜度、空間複雜度。手寫演算法

  • .Android程式分類

  • 前臺切換到後臺,然後再回到前臺,Activity生命週期回撥方法。彈出Dialog,生命值週期回撥方法。

  • Activity的啟動模式

愛奇藝

  • RxJava的功能與原理實現

  • RecycleView的使用,原理,RecycleView優化

  • ANR的原因

  • 四大元件

  • Service的開啟方式

  • Activity與Service通訊的方式

  • Activity之間的通訊方式

  • HashMap的實現,與HashSet的區別

  • JVM記憶體模型,記憶體區域

  • Java中同步使用的關鍵字,死鎖

  • MVP模式

  • Java設計模式,觀察者模式

  • Activity與Fragment之間生命週期比較

  • 廣播的使用場景

百度

  • Bitmap 使用時候注意什麼?

  • Oom 是否可以try catch ?

  • 記憶體洩露如何產生?

  • 介面卡模式,裝飾者模式,外觀模式的異同?

  • ANR 如何產生?

  • String buffer 與string builder 的區別?

  • 如何保證執行緒安全?

  • java四中引用

  • Jni 用過麼?

  • 多程式場景遇見過麼?

  • 關於handler,在任何地方new handler 都是什麼執行緒下

  • sqlite升級,增加欄位的語句

  • bitmap recycler 相關

  • 強引用置為null,會不會被回收?

  • glide 使用什麼快取?

  • Glide 記憶體快取如何控制大小?

  • 如何保證多執行緒讀寫檔案的安全?

攜程

  • Activity啟動模式

  • 廣播的使用方式,場景

  • App中喚醒其他程式的實現方式

  • AndroidManifest的作用與理解

  • List,Set,Map的區別

  • HashSet與HashMap怎麼判斷集合元素重複

  • Java中記憶體區域與垃圾回收機制

  • EventBus作用,實現方式,代替EventBus的方式

  • Android中開啟攝像頭的主要步驟

網易

  • concurrenthashmap

  • volatile

  • synchronized與Lock

  • Java執行緒池

  • wait/notify

  • NIO

  • 垃圾收集器

  • Activity生命週期

  • AlertDialog,popupWindow,Activity區別

小米

  • String 為什麼要設計成不可變的?

  • fragment 各種情況下的生命週期

  • Activity 上有 Dialog 的時候按 home 鍵時的生命週期

  • 橫豎屏切換的時候,Activity 各種情況下的生命週期

  • Application 和 Activity 的 context 物件的區別

  • 序列化的作用,以及 Android 兩種序列化的區別。

  • List 和 Map 的實現方式以及儲存方式。

  • 靜態內部類的設計意圖。

  • 執行緒如何關閉,以及如何防止執行緒的記憶體洩漏

360

  • 軟引用、弱引用區別

  • 垃圾回收

  • 多執行緒:怎麼用、有什麼問題要注意;Android執行緒有沒有上限,然後提到執行緒池的上限

  • JVM

  • OOM,記憶體洩漏

  • ANR怎麼分析解決

  • LinearLayout、RelativeLayout、FrameLayout的特性、使用場景

  • 如何實現Fragment的滑動

  • ViewPager使用細節,如何設定成每次只初始化當前的Fragment,其他的不初始化

  • ListView重用的是什麼

  • 程式間通訊的機制

  • AIDL機制

  • AsyncTask機制

  • 如何取消AsyncTask

  • 序列化

  • Android為什麼引入Parcelable

  • 有沒有嘗試簡化Parcelable的使用

  • AIDL機制

  • 專案:拉活怎麼做的

  • 應用安裝過程

  • 某海外直播公司

  • 執行緒和程式的區別?

  • 為什麼要有執行緒,而不是僅僅用程式?

  • 演算法判斷單連結串列成環與否?

  • 如何實現執行緒同步?

  • hashmap資料結構?

  • arraylist 與 linkedlist 異同?

  • object類的equal 和hashcode 方法重寫,為什麼?

  • hashmap如何put資料(從hashmap原始碼角度講解)?

  • 簡述IPC?

  • fragment之間傳遞資料的方式?

  • 簡述tcp四次揮手?

  • threadlocal原理

  • 記憶體洩漏的可能原因?

  • 用IDE如何分析記憶體洩漏?

  • OOM的可能原因?

  • 執行緒死鎖的4個條件?

  • 差值器&估值器

  • 簡述訊息機制相關

  • 程式間通訊方式?

  • Binder相關?

  • 觸控事件的分發?

  • 簡述Activity啟動全部過程?

  • okhttp原始碼?

  • RxJava簡介及其原始碼解讀?

  • 效能優化如何分析systrace?

  • 廣播的分類?

  • 點選事件被攔截,但是相傳到下面的view,如何操作?

  • Glide原始碼?

  • ActicityThread相關?

  • volatile的原理

  • synchronize的原理

  • lock原理

  • 翻轉一個單項鍊表

  • string to integer

  • 合併多個單有序連結串列(假設都是遞增的)

  • Android中資料儲存方式

  • 微信主頁面的實現方式

  • 微信上訊息小紅點的原理

  • 兩個不重複的陣列集合中,求共同的元素。

  • 上一問擴充套件,海量資料,記憶體中放不下,怎麼求出。

  • Java中String的瞭解。

  • ArrayList與LinkedList區別

  • 堆排序過程,時間複雜度,空間複雜度

  • 快速排序的時間複雜度,空間複雜度

  • RxJava的作用,與平時使用的非同步操作來比,優勢

  • Android訊息機制原理

  • Binder機制介紹

  • 為什麼不能在子執行緒更新UI

  • JVM記憶體模型

  • Android中程式記憶體的分配,能不能自己分配定額記憶體

  • 垃圾回收機制與呼叫System.gc()區別

  • Android事件分發機制

  • 斷點續傳的實現

  • RxJava的作用,優缺點

閱讀更多

分享我學習Java後臺的三個總結

一個小白的四次前端面試經歷

(Android)面試題級答案(精選版)

堅持:學習Java後臺的第一階段,我學習了那些知識

相信自己,沒有做不到的,只有想不到的

在這裡獲得的不僅僅是技術!另外我這裡有運營一個技術號:終端研發部,歡迎一起學習

Android

相關文章