4.9k Star 安卓面試知識點,請收下!

逛 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 題解,歡迎掃碼關注 !算法

相關文章
相關標籤/搜索