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

秉心說TM發表於2019-04-08

逛 Github 的時候看到一份超強面試題,來自 MindOrks 開源的 android-interview-questions。雖說是一份安卓面試題,但其中包含了 資料結構與演算法Java 核心基礎Android 核心基礎設計模式 等各方面內容。大致瀏覽了一下,質量還不錯,比百度出來的各種所謂 BAT 面試題 強一些。也看到國內一些開發者有做翻譯,比如 stormzhang 發起的 android-interview-questions-cn。可能由於種種原因,未能完成全部工作,且題目也已經更新了很多。

出於複習的目的吧,正好也在寫 走進 JDK 系列的文章(可以看看我的專欄),就打算把這些題目都捋一遍,儘可能帶來高質量的答案,估計會花費不短時間。今天這篇文章先把所有題目整理出來,後面會陸續配上答案。

拉到文末直接獲取所有題目 pdf 檔案 。

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 題。

微信搜尋 秉心說 ,或者掃碼下列二維碼關注公眾號,回覆 面試題 即可獲取所有題目 pdf 文件,後續所有答案也會通過公眾號通知,歡迎大家關注。

文章首發於微信公眾號: 秉心說 , 專注 Java 、 Android 原創知識分享,JDK 、AOSP 原始碼解析,LeetCode 題解,歡迎掃碼關注 !

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

相關文章