逛 Github 的時候看到一份超強面試題玲献,來自 MindOrks 開源的 android-interview-questions梯浪。雖說是一份安卓面試題瓢娜,但其中包含了 數(shù)據(jù)結(jié)構(gòu)與算法
眠砾、Java 核心基礎(chǔ)
、Android 核心基礎(chǔ)
荠藤、設(shè)計模式
等各方面內(nèi)容哈肖。大致瀏覽了一下,質(zhì)量還不錯布疼,比百度出來的各種所謂 BAT 面試題
強一些币狠。
Core Java
面向?qū)ο?/h3>
1. 什么是 OOP ?
2. 抽象類和接口的區(qū)別 贱案?
3. Iterator 和 Enumeration 的區(qū)別 止吐?
4. 你同意 組合優(yōu)先于繼承 嗎 ?
5. 方法重載和方法重寫的區(qū)別 瘩燥?
6. 你知道哪些訪問修飾符 不同? 它們分別的作用 ?
7. 一個接口可以實現(xiàn)另一個接口嗎 服鹅?
8. 什么是多態(tài) 卓鹿?什么是繼承 吟孙?
9. Java 中類和接口的多繼承
10. 什么是設(shè)計模式?
集合和泛型
11. Arrays vs ArrayLists
12. HashSet vs TreeSet
13. HashMap vs HashSet
14. Stack vs Queue
15. 解釋 java 中的泛型
16. String 類是如何實現(xiàn)的藻治?它為什么被設(shè)計成不可變類 巷挥?
對象和基本類型
16. String 類是如何實現(xiàn)的?它為什么被設(shè)計成不可變類 雏节?
17. 為什么說 String 不可變 高职?
18. 什么是 String.intern() ? 何時使用寥粹? 為什么使用 埃元?
19. 列舉 8 種基本類型
20. int 和 Integer 區(qū)別
21. 什么是自動裝箱拆箱 ?
22. Java 中的類型轉(zhuǎn)換
23. Java 值傳遞還是引用傳遞 阔拳?
24. 對象實例化和初始化之間的區(qū)別 类嗤?
25. 局部變量土浸、實例變量以及類變量之間的區(qū)別?
Java 內(nèi)存模型和垃圾收集器
26. 什么是垃圾收集器 泪酱? 它是如何工作的 还最?
27. 什么是 java 內(nèi)存模型? 它遵循了什么原則斯撮?它的堆棧是如何組織的 扶叉?
28. 什么是 內(nèi)存泄漏帕膜,java 如何處理它 垮刹?
29. 什么是 強引用张弛,軟引用,弱引用寺董,虛引用 刻剥?
并發(fā)
30. 關(guān)鍵字 synchronized 的作用 ?
31. ThreadPoolExecutor 作用 盯滚?
32. 關(guān)鍵字 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 區(qū)別 撵术?
其他
36. 什么是序列化?如何實現(xiàn) 寝姿?
37. 關(guān)鍵字 transient 的作用 划滋?
38. 什么是匿名內(nèi)部類 ?
39. 對象的 == 和 .equals 區(qū)別 根资?
40. hashCode() 和 equals() 用處 同窘?
41. 構(gòu)造函數(shù)中為什么不能調(diào)用抽象方法 想邦?
42. 你什么時候會使用 final 關(guān)鍵字 ?
43. final, finally 和 finalize 的區(qū)別 鹰椒?
44. Java 中 static 關(guān)鍵字的含義 ?
45. 靜態(tài)方法可以重寫嗎 ?
46. 靜態(tài)代碼塊如何運行 ?
47. 什么是反射 拉庵?
48. 什么是依賴注入 钞支?列舉幾個庫 ?你使用過嗎 婴洼?
49. StringBuilder 如何避免不可變類 String 的分配問題撼嗓?
50. StringBuffer 和 StringBuilder 區(qū)別 ?
51. Enumeration and an Iterator 區(qū)別 粉捻?
52. fail-fast and fail-safe 區(qū)別 斑芜?
53. 什么是 NIO 杏头?
Core Android
Base
54. Android 應(yīng)用組件
55. Android 應(yīng)用架構(gòu)
56. 什么是 Context?
57. 什么是 AndroidManifest.xml呢燥?
58. 什么是 Application 寓娩?
Activity
59. 什么是 Activity ?
60. 說明一下 Activity 和 Fragment 的生命周期
61. 什么是 Activity 的啟動模式 力试?
Fragments
62. 什么是 Fragment ?
63. Activity 和 Fragment 關(guān)系和區(qū)別 畸裳?
64. 為什么建議使用默認構(gòu)造函數(shù)來創(chuàng)建 Fragment 淳地?
65. Fragment 之間如何通信 帅容?
66. 什么是 Retained Fragment ?
View 和 ViewGroup
67. 在 Android 中并徘,什么是 View 扰魂?
68. View.GONE 和 View.INVISIBLE 的區(qū)別 ?
69. 如何創(chuàng)建自定義 View 姐直?
70. 什么是 ViewGroups 以及和 View 的區(qū)別 ?
71. 什么是 canvas 插龄?
72. 什么是 SurfaceView 科展?
73. 相對布局和線性布局對比
74. 談?wù)?Constraint Layout
75. 你知道 View 樹嗎 ?如何優(yōu)化它的深度 膨处?
展示內(nèi)容集合
76. ListView 和 RecyclerView 區(qū)別 真椿?
77. 什么是 ViewHolder 突硝?為什么使用它 ?
78. 什么是 SnapHelper 浙于?
Dialog 和 Toast
79. 什么是 Dialog 羞酗?
80. 什么是 Toast ?
81. Dialog 和 Dialog Fragment 區(qū)別 胸竞?
Intent 和 廣播
82. 什么是 Intent ?
83. 什么是 顯示 Intent 煎饼?
84. 什么是 隱式 Intent 校赤?
85. 什么是 BroadcastReceiver 痒谴?
86. 什么是 LocalBroadcastReceiver 铡羡?
87. IntentFilter 的作用 ?
88. 什么是 sticky intent 尽爆?
89. 說說廣播和 Intent 是如何在你的應(yīng)用中傳遞消息的 ?
90. 什么是 PendingIntent 漱贱?
91. 廣播的不同類型 夭委?
Services
92. 什么是 Service ?
93. Service 和 IntentService
94. 什么是 JobSchedule 崇摄?
Inter-process Communication
95. 兩個不同的 app 如何通信 慌烧?
96. 一個 app 可以多進程運行嗎 屹蚊?如何實現(xiàn) ?
97. 什么是 AIDL 命斧? 列舉實現(xiàn)步驟嘱兼。
98. 你可以使用后臺進程干什么 ?
99. 什么是 ContentProvider 胃惜?一般用來干什么 船殉?
Long-running Operations
100. 如何進行耗時任務(wù) ?
101. 為什么要避免在主線程運行非ui代碼 挨厚?
102. 什么是 ANR 糠惫?如何預(yù)防 硼讽?
103. 什么是 AsyncTask ?
104. AsyncTask 有哪些問題 壤躲?
105. 你會在什么時候使用 AsyncTask 代替線程 备燃?
106. 什么是 Loader 并齐?
107. AsyncTask 和 Activity 的生命周期有什么聯(lián)系 ?會導(dǎo)致什么問題 撕贞?如何避免 ?
108. 解釋 Looper, Handler 和 HandlerThread 的作用
多媒體
109. 如何處理 Bitmap 占據(jù)大量內(nèi)存 窝剖?
110. 一個標準的 Bitmap 和一個 .9 圖的區(qū)別 赐纱?
111. 談?wù)?Bitmap pool
112. Android 中如何播放聲音 ?
Data Saving
113. 如何持久化數(shù)據(jù) 诚隙?
114. 什么是 ORM 久又?它如何工作 ?
115. 屏幕旋轉(zhuǎn)時如何保存 Activity 狀態(tài) 炉峰?
116. 你的應(yīng)用中保存數(shù)據(jù)的不同方式 脉执?
Look and feel
117. 什么是 Spannable 半夷?
內(nèi)存優(yōu)化
118. 什么是 onTrimMemory() 方法 ?
119. OutOfMemory 是如何發(fā)生的 淘邻?
120. 在 Android 中你是如何找到內(nèi)存泄漏的 ?
電量優(yōu)化
121. 在 Android 中如何降低電量消耗 贴浙?
122. 什么是 Doze 署恍?應(yīng)用支持如何 ?
123. 什么是過度繪制 盯质?
Supporting Different Screen Sizes
124. 你是如何進行屏幕適配的 ?
Permissions
125. 權(quán)限中有哪些不同的保護級別 ?
Native Programming
126. 什么是 NDK 呼巷,它的作用是什么 王悍?
127. 什么是 renderscript 餐曼?
Android System Internal
128. 什么是 Dalvik Virtual Machine 源譬?
129. JVM, DVM 和 ART 區(qū)別
130. Dalvik 和 ART 區(qū)別
131. 什么是 Dex?
132. 你可以手動調(diào)用垃圾回收嗎 刮刑?
Debugging and Programming Tools
133. 什么是 ADB 雷绢?
134. 什么是 DDMS ?你可以用它干什么 胶惰?
135. 什么是 StrictMode ?
136. 什么是 lint 霞溪? 它的作用是什么 孵滞?
Others
137. 為什么使用 Bundle 傳遞數(shù)據(jù) ? 為什么不使用 Map 鸯匹?
138. 你是如何解決應(yīng)用中的 crash 的 坊饶?
139. 說說 Android 通知 體系
140. Serializable 和 Parcelable 區(qū)別 ? Android 中使用哪個更好 殴蓬?
141. 開發(fā)過 widgets 嗎 匿级?
142. 什么是 AAPT ?
143. 定時刷新頁面的最好方法是什么 染厅?
144. FlatBuffers 和 JSON
145. HashMap, ArrayMap 和 SparseArray
146. 什么是注解 痘绎?
147. android 中如何處理 multi-touch 肖粮?
148. 如何實現(xiàn) XML 命名空間 孤页?
149. 什么是 support library ?以及為什么引入 涩馆?
150. 什么是 Android Data Binding 行施?
151. 什么是 Android Architecture Components ?
152. 如何使用 RxJava 操作符實現(xiàn)查找 ?
架構(gòu)
153. 描述一下你最近開發(fā)的 App 使用的架構(gòu)
154. 說說 MVP
155. 什么是 Presenter 魂那?
156. 什么是 Model 蛾号?
157. 說說 MVC
158. 說說 MVI
159. 說說 Repository pattern
160. 什么是 Controller ?
161. Tell something about clean code
Android 測試驅(qū)動開發(fā)
162. 什么是 Espresso 涯雅?
163. 什么是 Robolectric 鲜结?
164. 使用 Robolectric 的缺點是什么 ?
165. 什么是 UI-Automator 活逆?
166. 說說單元測試
167. 說說自動化測試
168. 你進行過單元測試或者自動化測試嗎 精刷?
169. 為什么使用 Mockito ?
其他
170. 什么是 Android Jetpack 划乖?
171. 說說 REST APIs 如何工作的
172. 說說其他的 Web Api 架構(gòu)
173. 說說數(shù)據(jù)庫贬养,Sqlite
174. 關(guān)于項目管理工具,trello, basecamp, kanban, jira, asana
175. 關(guān)于構(gòu)建系統(tǒng)琴庵, gradle, maven, ant, buck
176. 應(yīng)用多 Apk 文件
177. 反編譯 Apk
178. ProGuard 被用來做什么 误算?
179. 什么是混淆 仰美? 它的作用是什么 ? minification 呢 儿礼?
180. 你如何構(gòu)建 release 安裝包 咖杂?
181. 你如何控制對于特定用戶的版本更新 ?
182. 我們可以找出已經(jīng)卸載我們的應(yīng)用的用戶嗎 蚊夫?
183. Apk 文件大小優(yōu)化
184. 你嘗試過 Kotlin 嗎 诉字?
185. 在開發(fā)過程中如何持續(xù)監(jiān)測各種指標 ?
186. 什么是 Chrome Custom Tabs 知纷? 如何在你的 app 中展示網(wǎng)頁內(nèi)容 壤圃?
數(shù)據(jù)結(jié)構(gòu)這塊的題目不是很詳細,就沒有加上來琅轧。其他的根據(jù)實際情況作了部分刪減伍绳,共計 186 題。
最后
喜歡的話可以關(guān)注一下哦乍桂,會每天更新android相關(guān)的文章冲杀。