前言
這是我最近一次的京東的Android面試過程,電話面試,問的Java的東西多,難倒不難,感受沒有發揮好,開始很緊張。(幸虧拿到了京東的offer)電話錄音了,順便把問了的問題一個個都列出了,並給出答案。java
京東面經真題:git
1.StringBuilder、StringBuffer的區別,爲何StringBuffer快一點,看過這兩個的源碼沒有,線程安全是怎麼實現的?github
2.LRUCatch的原理實現。面試
3.一些排序算法的時間複雜度:冒泡、快速排序。算法
4.try。。。catch。。。finally 問了個經過 exit()退出程序 會不會執行finally?編程
5.Java容器,set map的區別。設計模式
6.TCP UDP區別api
7.設計模式,主要問了工廠模式的幾種狀況。數組
8.講一下Java內存模型 局部變量存放在哪緩存
9.講一下引用傳遞
10.講講Handler機制。解釋發送一條消息會通過哪些過程。問了我Handler源碼看到哪一層(看到了Java)。Handler建立好之後怎麼才能關聯到他所在的線程?(這個回答的不是很好,感受是在Handler的構造方法裏關聯的?),問了要傳進什麼參數?
11.ListView的VIewHolder爲何能夠減小內存的使用?
12.多線程相關。Java中控制多線程的方法。鎖、synchronize(能夠對哪些對象加鎖(靜態變量加鎖和對普通變量加鎖有什麼區別),實現原理)、wait notify
13.ANR。在廣播內作耗時操做會怎麼樣。
...
臨近金九銀十,又到了秋招面試提早批,最近有不少網友都在求京東面試題。做爲京東前輩的我正好電腦裏面有這方面的整理,因而就發上來分享給你們。
這些題目是網友去京東面試被問到的題目。熟悉本文中列出的知識點會大大增長經過前兩輪技術面試的概率。
話很少說,直接上目錄!
1、java面試題
熟練掌握java是很關鍵的,大公司不只僅要求你會使用幾個api,更多的是要你熟悉源碼實現原理,甚至要你知道有哪些不足,怎麼改進,還有一些java有關的一些算法,設計模式等等。
(一) java基礎面試知識點
- java中==和equals和hashCode的區別
- int、char、long各佔多少字節數
- int與integer的區別
- 談談對java多態的理解
- String、StringBuffer、StringBuilder區別
- 什麼是內部類?內部類的做用
- 抽象類和接口區別
- 抽象類的意義
- 抽象類與接口的應用場景
- 抽象類是否能夠沒有方法和屬性?
- 接口的意義
- 泛型中extends和super的區別
- 父類的靜態方法可否被子類重寫
- 進程和線程的區別
- final,finally,finalize的區別
- 序列化的方式
- Serializable 和Parcelable 的區別
- 靜態屬性和靜態方法是否能夠被繼承?是否能夠被重寫?以及緣由?
- 靜態內部類的設計意圖
- 成員內部類、靜態內部類、局部內部類和匿名內部類的理解,以及項目中的應用
- 談談對kotlin的理解
- 閉包和局部內部類的區別
- 什麼是單例設計模式
- string 轉換成 integer的方式及原理
(二) java深刻源碼級的面試題(有難度)
- 哪些狀況下的對象會被垃圾回收機制處理掉?
- 什麼是強引用、軟引用、弱引用以及虛引用?
- 什麼是依賴注入?能說幾個依賴注入的庫麼?你使用過哪些?
- 關鍵字 synchronized 的做用是什麼?
- 什麼是 ThreadPoolExecutor
- 線程池如何定義合適的線程
- 講一下常見編碼方式?
- utf-8編碼中的中文佔幾個字節;int型幾個字節?
- 靜態代理和動態代理的區別,什麼場景使用?
- Java的異常體系
- 談談你對解析與分派的認識。
- 修改對象A的equals方法的簽名,那麼使用HashMap存放這個對象實例的時候,會調用哪一個equals方法?
- Java中實現多態的機制是什麼?
- 如何將一個Java對象序列化到文件裏?
- 說說你對Java反射的理解
- 說說你對Java註解的理解
- JVM的回收算法是怎樣的
- Art虛擬機與jvm的區別在哪裏
- 說說你對依賴注入的理解
- 說一下泛型原理,並舉例說明
- String爲何要設計成不可變的?
- Object類的equal和hashCode方法重寫,爲何?
(三) 數據結構
- 經常使用數據結構簡介
- 併發集合瞭解哪些?
- 列舉java的集合以及集合之間的繼承關係
- 集合類以及集合框架
- 容器類介紹以及之間的區別(容器類估計不少人沒聽這個詞,Java容器主要能夠劃分爲4個部分:List列表、Set集合、Map映射、工具類(Iterator迭代器、Enumeration枚舉類、Arrays和Collections)
- List,Set,Map的區別
- List和Map的實現方式以及存儲方式
- HashMap的實現原理
- HashMap數據結構?
- HashMap源碼理解
- HashMap如何put數據(從HashMap源碼角度講解)?
- HashMap怎麼手寫實現?
- ConcurrentHashMap的實現原理
- ArrayMap和HashMap的對比
- HashTable實現原理
- TreeMap具體實現
- HashMap和HashTable的區別
- HashMap與HashSet的區別
- HashSet與HashMap怎麼判斷集合元素重複?
- 集合Set實現Hash怎麼防止碰撞
- ArrayList和LinkedList的區別,以及應用場景
- 數組和鏈表的區別
- 二叉樹的深度優先遍歷和廣度優先遍歷的具體實現
- 堆的結構
- 堆和樹的區別
- 堆和棧在內存中的區別是什麼(解答提示:能夠從數據結構方面以及實際實現方面兩個方面去回答)?
- 什麼是深拷貝和淺拷貝
- 手寫鏈表逆序代碼
- 講一下對樹,B+樹的理解
- 講一下對圖的理解
- 判斷單鏈表成環與否?
- 鏈表翻轉(即:翻轉一個單項鍊表)
- 合併多個單有序鏈表(假設都是遞增的)
(四) 線程、多線程和線程池
- 開啓線程的三種方式?
- 線程和進程的區別?
- 爲何要有線程,而不是僅僅用進程?
- run()和start()方法區別
- 如何控制某個方法容許併發訪問線程的個數?
- 在Java中wait和seelp方法的不一樣;
- 談談wait/notify關鍵字的理解
- 什麼致使線程阻塞?
- 線程如何關閉?
- 講一下java中的同步的方法
- 數據一致性如何保證?
- 如何保證線程安全?
- 如何實現線程同步?
- 兩個進程同時要求寫或者讀,能不能實現?如何防止進程的同步?
- 線程間操做List
- Java中對象的生命週期
- Synchronized用法
- synchronize的原理
- 談談對Synchronized關鍵字,類鎖,方法鎖,重入鎖的理解
- static synchronized 方法的多線程訪問和做用
- 同一個類裏面兩個synchronized方法,兩個線程同時訪問的問題
- volatile的原理
- 談談volatile關鍵字的用法
- 談談volatile關鍵字的做用
- 談談NIO的理解
- synchronized 和volatile 關鍵字的區別
- synchronized與Lock的區別
- ReentrantLock 、synchronized和volatile比較
- ReentrantLock的內部實現
- lock原理
- 死鎖的四個必要條件?
- 怎麼避免死鎖?
- 對象鎖和類鎖是否會互相影響?
- 什麼是線程池,如何使用?
- Java的併發、多線程、線程模型
- 談談對多線程的理解
- 多線程有什麼要注意的問題?
- 談談你對併發編程的理解並舉例說明
- 談談你對多線程同步機制的理解?
- 如何保證多線程讀寫文件的安全?
- 多線程斷點續傳原理
- 斷點續傳的實現
2、Android知識點彙總
- Activity
- Fragment
- Service
- BroadcastReceiver
- ContentProvider
- 數據存儲
- View
- 進程
- Parcelable 接口
- IPC
- Window / WindowManager
- Bitmap
- 屏幕適配
- Context
- SharedPreferences
- 消息機制
- 線程異步
- RecyclerView 優化
- Webview
3、Android擴展知識點
- ART
- Apk 包體優化
- Hook
- Proguard
- 架構
- Jetpack
- NDK 開發
- 類加載器
4、Android開源庫源碼分析
- LeakCanary
- EventBus
- Glide :加載、緩存、LRU 算法 (如何本身設計一個大圖加載框架) (LRUCache 原理)
- install
- ARouter
- 插件化(不一樣插件化機制原理與流派,優缺點。侷限性)
- 熱修復
- RXJava (RxJava 的線程切換原理)
- Retrofit (Retrofit 在 OkHttp 上作了哪些封裝?動態代理和靜態代理的區別,是怎麼實現的)
- OkHttp
- 總結
5、計算機基礎面試題
京東面試也會考察計算機基礎,主要考察咱們是否系統的學習了操做系統和計算機組成原理,由於只有咱們看完操做系統後才能系統的認識計算機的原理。
- 網絡框架對比和源碼分析
- 網絡七層協議有哪些?
- Http 和 Https 的區別?Https爲何更加安全?
- HTTPS的鏈接創建流程
- 解釋一下 三次握手 和 四次揮手
- TCP 和 UDP的區別
- Cookie和Session
- DNS是什麼?
- DNS解析過程
- HTTP報文結構
- HTTP與HTTPS的區別以及如何實現安全性
- 如何驗證證書的合法性?
- https中哪裏用了對稱加密,哪裏用了非對稱加密,對加密算法(如RSA)等是否有了解?
- client如何肯定本身發送的消息被server收到?
- 談談你對WebSocket的理解
- WebSocket與socket的區別
- 談談你對安卓簽名的理解。
- 請解釋安卓爲啥要加簽名機制?
- 視頻加密傳輸
- App 是如何沙箱化,爲何要這麼作?
- 權限管理系統(底層的權限是如何進行 grant 的)?
文末
附答案解析的話文章篇幅實在太長了,答案整理在GitHub了:https://github.com/Timdk857/Android-Architecture-knowledge-2-
其實Android開發的知識點就那麼多,面試問來問去仍是那麼點東西。因此面試沒有其餘的訣竅,只看你對這些知識點準備的充分程度。so,出去面試時先看看本身複習到了哪一個階段就好。
也不想說太多的雞湯,好好複習,祝你們面試順利!而後給我點個贊~