立刻步入金九銀十了,是時候看一些面試題去鵝廠了,接下來我將分享一些面試題,天天總結一點點,但願對你們有所幫助!html
ListView和RecyclerView區別
參考連接:
https://blog.csdn.net/shu_lan...前端
既然RecyclerView在不少方面能取代ListView,Google爲何沒把ListView劃上一條過期的橫線?
答案: 能夠沿着回收機制來回答。ListView採用的是RecyclerBin的回收機制在一些輕量級的List顯示時效率更高java
你用過MVP和MVVM的區別
參考連接:
https://www.cnblogs.com/dubo-...android
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中以後將不會再改變。)sql
- 4) HashMap負載因子默認是0.75,可設置,當map填滿了75%的bucket時候,將會建立原來HashMap大小兩倍的bucket數組,來從新調整map的大小,並將原來的對象放入新的bucket數組中,這個過程叫作rehashing,由於它調用hash方法找到新的bucket位置。
- 5) 從新調整map大小可能會發生競爭問題:若是兩個線程都發現HashMap須要調整大小了,它們都會嘗試進行調整,在調整中,存儲在鏈表中的元素的次序會反過來,由於移動bucket位置的時候,HashMap並不會將元素放在鏈表的尾部,而是放在頭部,這是爲了不尾部遍歷,若是條件競爭發生了,就死循環了。
你用過AsyncTask,說一說AsyncTask的內部實現原理?
參考連接:
https://www.cnblogs.com/absfr...數據庫
AsyncTask內部維護了一個線程池,是串行仍是並行,怎麼維護的?
串行設計模式
參考連接:
https://www.cnblogs.com/absfr...數組
那你說說線程池的四種初始化吧?
你用過MD,你知道怎麼定義一個Behavior嗎?
參考連接:
https://www.jianshu.com/p/82d...
RecyclerView的拖拽怎麼實現的?
參考連接:
https://blog.csdn.net/aiynmim...
寫一個單利模式,應注意哪三個條件?
一、構造函數私有 二、含有一個該類的靜態私有對象 三、有一個靜態的公有的函數用於建立或獲取它自己的靜態私有對象 四、其次纔是考慮線程同步!
一個按升序排列好的數組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兩種啓動方式有什麼區別?
參考連接:
https://blog.csdn.net/siwen12...
說說三級緩存、Handler機制 ?
參考連接:
https://blog.csdn.net/wenzhi2...
Handler機制
https://www.cnblogs.com/denda...
阿里巴巴
- 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後臺的第一階段,我學習了那些知識
相信本身,沒有作不到的,只有想不到的
在這裏得到的不只僅是技術!另外我這裏有運營一個技術號:終端研發部,歡迎一塊兒學習