逛 Github 的時候看到一份超強面試題,來自 MindOrks 開源的 android-interview-questions。雖然說是一份安卓面試題,但其中包含了 數據結構與算法
、Java 核心基礎
、Android 核心基礎
、設計模式
等各方面內容。大體瀏覽了一下,質量還不錯,比百度出來的各類所謂 BAT 面試題
強一些。也看到國內一些開發者有作翻譯,好比 stormzhang
發起的 android-interview-questions-cn。可能因爲種種緣由,未能完成所有工做,且題目也已經更新了不少。java
出於複習的目的吧,正好也在寫 走進 JDK
系列的文章(能夠看看個人專欄),就打算把這些題目都捋一遍,儘量帶來高質量的答案,估計會花費不短期。今天這篇文章先把全部題目整理出來,後面會陸續配上答案。android
拉到文末直接獲取全部題目 pdf 文件 。
git
Core Java
面向對象
1. 什麼是 OOP ?
2. 抽象類和接口的區別 ?
3. Iterator 和 Enumeration 的區別 ?
4. 你贊成 組合優先於繼承 嗎 ?
5. 方法重載和方法重寫的區別 ?
6. 你知道哪些訪問修飾符 ? 它們分別的做用 ?
7. 一個接口能夠實現另外一個接口嗎 ?
8. 什麼是多態 ?什麼是繼承 ?
9. Java 中類和接口的多繼承
10. 什麼是設計模式?
集合和泛型
11. Arrays vs ArrayLists
12. HashSet vs TreeSet
13. HashMap vs HashSet
14. Stack vs Queue
15. 解釋 java 中的泛型
16. String 類是如何實現的?它爲何被設計成不可變類 ?
對象和基本類型
16. String 類是如何實現的?它爲何被設計成不可變類 ?
17. 爲何說 String 不可變 ?
18. 什麼是 String.intern() ? 什麼時候使用? 爲何使用 ?
19. 列舉 8 種基本類型
20. int 和 Integer 區別
21. 什麼是自動裝箱拆箱 ?
22. Java 中的類型轉換
23. Java 值傳遞仍是引用傳遞 ?
24. 對象實例化和初始化之間的區別 ?
25. 局部變量、實例變量以及類變量之間的區別?
Java 內存模型和垃圾收集器
26. 什麼是垃圾收集器 ? 它是如何工做的 ?
27. 什麼是 java 內存模型? 它遵循了什麼原則?它的堆棧是如何組織的 ?
28. 什麼是 內存泄漏,java 如何處理它 ?
29. 什麼是 強引用,軟引用,弱引用,虛引用 ?
併發
30. 關鍵字 synchronized 的做用 ?
31. ThreadPoolExecutor 做用 ?
32. 關鍵字 volatile 的做用 ?
33. The clasess in the atomic package expose a common set of methods: get, set,, lazyset, compareAndSet, and weakCompareAndSet. Please describe them.
異常
34. try{} catch{} finally{} 是如何工做的 ?
35. Checked Exception 和 Un-Checked Exception 區別 ?
其餘
36. 什麼是序列化?如何實現 ?
37. 關鍵字 transient 的做用 ?
38. 什麼是匿名內部類 ?
39. 對象的 == 和 .equals 區別 ?
40. hashCode() 和 equals() 用處 ?
41. 構造函數中爲何不能調用抽象方法 ?
42. 你何時會使用 final 關鍵字 ?
43. final, finally 和 finalize 的區別 ?
44. Java 中 static 關鍵字的含義 ?
45. 靜態方法能夠重寫嗎 ?
46. 靜態代碼塊如何運行 ?
47. 什麼是反射 ?
48. 什麼是依賴注入 ?列舉幾個庫 ?你使用過嗎 ?
49. StringBuilder 如何避免不可變類 String 的分配問題?
50. StringBuffer 和 StringBuilder 區別 ?
51. Enumeration and an Iterator 區別 ?
52. fail-fast and fail-safe 區別 ?
53. 什麼是 NIO ?
Core Android
Base
54. Android 應用組件
55. Android 應用架構
56. 什麼是 Context?
57. 什麼是 AndroidManifest.xml?
58. 什麼是 Application ?
Activity
59. 什麼是 Activity ?
60. 說明一下 Activity 和 Fragment 的生命週期
61. 什麼是 Activity 的啓動模式 ?
Fragments
62. 什麼是 Fragment ?
63. Activity 和 Fragment 關係和區別 ?
64. 爲何建議使用默認構造函數來建立 Fragment ?
65. Fragment 之間如何通訊 ?
66. 什麼是 Retained Fragment ?
View 和 ViewGroup
67. 在 Android 中,什麼是 View ?
68. View.GONE 和 View.INVISIBLE 的區別 ?
69. 如何建立自定義 View ?
70. 什麼是 ViewGroups 以及和 View 的區別 ?
71. 什麼是 canvas ?
72. 什麼是 SurfaceView ?
73. 相對佈局和線性佈局對比
74. 談談 Constraint Layout
75. 你知道 View 樹嗎 ?如何優化它的深度 ?
展現內容集合
76. ListView 和 RecyclerView 區別 ?
77. 什麼是 ViewHolder ?爲何使用它 ?
78. 什麼是 SnapHelper ?
Dialog 和 Toast
79. 什麼是 Dialog ?
80. 什麼是 Toast ?
81. Dialog 和 Dialog Fragment 區別 ?
Intent 和 廣播
82. 什麼是 Intent ?
83. 什麼是 顯示 Intent ?
84. 什麼是 隱式 Intent ?
85. 什麼是 BroadcastReceiver ?
86. 什麼是 LocalBroadcastReceiver ?
87. IntentFilter 的做用 ?
88. 什麼是 sticky intent ?
89. 說說廣播和 Intent 是如何在你的應用中傳遞消息的 ?
90. 什麼是 PendingIntent ?
91. 廣播的不一樣類型 ?
Services
92. 什麼是 Service ?
93. Service 和 IntentService
94. 什麼是 JobSchedule ?
Inter-process Communication
95. 兩個不一樣的 app 如何通訊 ?
96. 一個 app 能夠多進程運行嗎 ?如何實現 ?
97. 什麼是 AIDL ? 列舉實現步驟。
98. 你可使用後臺進程幹什麼 ?
99. 什麼是 ContentProvider ?通常用來幹什麼 ?
Long-running Operations
100. 如何進行耗時任務 ?
101. 爲何要避免在主線程運行非ui代碼 ?
102. 什麼是 ANR ?如何預防 ?
103. 什麼是 AsyncTask ?
104. AsyncTask 有哪些問題 ?
105. 你會在何時使用 AsyncTask 代替線程 ?
106. 什麼是 Loader ?
107. AsyncTask 和 Activity 的生命週期有什麼聯繫 ?會致使什麼問題 ?如何避免 ?
108. 解釋 Looper, Handler 和 HandlerThread 的做用
多媒體
109. 如何處理 Bitmap 佔據大量內存 ?
110. 一個標準的 Bitmap 和一個 .9 圖的區別 ?
111. 談談 Bitmap pool
112. Android 中如何播放聲音 ?
Data Saving
113. 如何持久化數據 ?
114. 什麼是 ORM ?它如何工做 ?
115. 屏幕旋轉時如何保存 Activity 狀態 ?
116. 你的應用中保存數據的不一樣方式 ?
Look and feel
117. 什麼是 Spannable ?
內存優化
118. 什麼是 onTrimMemory() 方法 ?
119. OutOfMemory 是如何發生的 ?
120. 在 Android 中你是如何找到內存泄漏的 ?
電量優化
121. 在 Android 中如何下降電量消耗 ?
122. 什麼是 Doze ?應用支持如何 ?
123. 什麼是過分繪製 ?
Supporting Different Screen Sizes
124. 你是如何進行屏幕適配的 ?
Permissions
125. 權限中有哪些不一樣的保護級別 ?
Native Programming
126. 什麼是 NDK ,它的做用是什麼 ?
127. 什麼是 renderscript ?
Android System Internal
128. 什麼是 Dalvik Virtual Machine ?
129. JVM, DVM 和 ART 區別
130. Dalvik 和 ART 區別
131. 什麼是 Dex?
132. 你能夠手動調用垃圾回收嗎 ?
Debugging and Programming Tools
133. 什麼是 ADB ?
134. 什麼是 DDMS ?你能夠用它幹什麼 ?
135. 什麼是 StrictMode ?
136. 什麼是 lint ? 它的做用是什麼 ?
Others
137. 爲何使用 Bundle 傳遞數據 ? 爲何不使用 Map ?
138. 你是如何解決應用中的 crash 的 ?
139. 說說 Android 通知 體系
140. Serializable 和 Parcelable 區別 ? Android 中使用哪一個更好 ?
141. 開發過 widgets 嗎 ?
142. 什麼是 AAPT ?
143. 定時刷新頁面的最好方法是什麼 ?
144. FlatBuffers 和 JSON
145. HashMap, ArrayMap 和 SparseArray
146. 什麼是註解 ?
147. android 中如何處理 multi-touch ?
148. 如何實現 XML 命名空間 ?
149. 什麼是 support library ?以及爲何引入 ?
150. 什麼是 Android Data Binding ?
151. 什麼是 Android Architecture Components ?
152. 如何使用 RxJava 操做符實現查找 ?
架構
153. 描述一下你最近開發的 App 使用的架構
154. 說說 MVP
155. 什麼是 Presenter ?
156. 什麼是 Model ?
157. 說說 MVC
158. 說說 MVI
159. 說說 Repository pattern
160. 什麼是 Controller ?
161. Tell something about clean code
Android 測試驅動開發
162. 什麼是 Espresso ?
163. 什麼是 Robolectric ?
164. 使用 Robolectric 的缺點是什麼 ?
165. 什麼是 UI-Automator ?
166. 說說單元測試
167. 說說自動化測試
168. 你進行過單元測試或者自動化測試嗎 ?
169. 爲何使用 Mockito ?
其餘
170. 什麼是 Android Jetpack ?
171. 說說 REST APIs 如何工做的
172. 說說其餘的 Web Api 架構
173. 說說數據庫,Sqlite
174. 關於項目管理工具,trello, basecamp, kanban, jira, asana
175. 關於構建系統, gradle, maven, ant, buck
176. 應用多 Apk 文件
177. 反編譯 Apk
178. ProGuard 被用來作什麼 ?
179. 什麼是混淆 ? 它的做用是什麼 ? minification 呢 ?
180. 你如何構建 release 安裝包 ?
181. 你如何控制對於特定用戶的版本更新 ?
182. 咱們能夠找出已經卸載咱們的應用的用戶嗎 ?
183. Apk 文件大小優化
184. 你嘗試過 Kotlin 嗎 ?
185. 在開發過程當中如何持續監測各類指標 ?
186. 什麼是 Chrome Custom Tabs ? 如何在你的 app 中展現網頁內容 ?
數據結構這塊的題目不是很詳細,就沒有加上來。其餘的根據實際狀況做了部分刪減,共計 186 題。github
微信搜索 秉心說
,或者掃碼下列二維碼關注公衆號,回覆 面試題
便可獲取全部題目 pdf
文檔,後續全部答案也會經過公衆號通知,歡迎你們關注。面試
文章首發於微信公衆號: 秉心說
, 專一 Java 、 Android 原創知識分享,JDK 、AOSP 源碼解析,LeetCode 題解,歡迎掃碼關注 !算法