安卓面試題(持續更新中)
JAVA基礎面試知識點
- 執行緒如何關閉
- 講一下java中的同步的方法
- 資料一致性如何保證?
- 如何實現執行緒同步?
- 兩個程序同時要求寫或者讀,能不能實現?如何防止程序的同步?
- 執行緒間操作List
- Java中物件的生命週期
- Synchronized用法
- synchronize的原理
- 談談對Synchronized關鍵字,類鎖,方法鎖,重入鎖的理解
- static synchronized 方法的多執行緒訪問和作用
- 同一個類裡面兩個synchronized方法,兩個執行緒同時訪問的問題
- volatile的原理
- 談談volatile關鍵字的用法
- 談談volatile關鍵字的作用
- 談談NIO的理解
- synchronized 和volatile 關鍵字的區別
- synchronized與Lock的區別
- ReentrantLock 、synchronized和volatile比較
- ReentrantLock的內部實現
- lock原理
- 死鎖的四個必要條件?
- 怎麼避免死鎖?
- 物件鎖和類鎖是否會互相影響?
- 什麼是執行緒池,如何使用?
- Java的併發、多執行緒、執行緒模型
- 談談對多執行緒的理解
- 多執行緒有什麼要注意的問題?
- 談談你對併發程式設計的理解並舉例說明
- 談談你對多執行緒同步機制的理解?
- 如何保證多執行緒讀寫檔案的安全?
- 多執行緒斷點續傳原理
- 斷點續傳的實現
- 如何避免多執行緒併發 點選開啟連結
併發程式設計有關知識點
Java 記憶體模型
-
java執行緒安全總結
http://www.iteye.com/topic/806990
-
深入理解java記憶體模型系列文章
http://ifeve.com/java-memory-model-0/
執行緒狀態:
-
一張圖讓你看懂JAVA執行緒間的狀態轉換
https://my.oschina.net/mingdongcheng/blog/139263
鎖:
-
鎖機制:synchronized、Lock、Condition
http://blog.csdn.net/vking_wang/article/details/9952063
-
Java 中的鎖
http://wiki.jikexueyuan.com/project/java-concurrent/locks-in-java.html
併發程式設計:
-
Java併發程式設計:Thread類的使用
http://www.cnblogs.com/dolphin0520/p/3920357.html
-
Java多執行緒程式設計總結
http://blog.51cto.com/lavasoft/27069
-
Java併發程式設計的總結與思考
https://www.jianshu.com/p/053943a425c3#
-
Java併發程式設計實戰-----synchronized
http://www.cnblogs.com/chenssy/p/4701027.html
-
深入分析ConcurrentHashMap
http://www.infoq.com/cn/articles/ConcurrentHashMap#
Android面試題
(一)Android基礎知識點
1.四大元件及生命週期
2.Activity之間的通訊方式
3.橫豎屏切換的時候,Activity 各種情況下的生命週期
4.Activity與Fragment之間生命週期比較
6.兩個Activity 之間跳轉時必然會執行的是哪幾個方法?
7.前臺切換到後臺,然後再回到前臺,Activity生命週期回撥方法。彈出Dialog,生命值週期回撥方法。
8.Activity的四種啟動模式對比
9.fragment各種情況下的生命週期
10.fragment之間傳遞資料的方式?
11.Activity 怎麼和Service 繫結?
12.怎麼在Activity 中啟動自己對應的Service?
13.service和activity怎麼進行資料互動?
14.Service的開啟方式
15.請描述一下Service 的生命週期
答案同上
16.談談你對ContentProvider的理解
17.說說ContentProvider、ContentResolver、ContentObserver 之間的關係
18.請描述一下廣播BroadcastReceiver的理解
19.廣播的分類
答案同上
20.廣播使用的方式和場景
答案同上
21.在manifest 和程式碼中如何註冊和使用BroadcastReceiver?
答案同上
22.本地廣播和全域性廣播有什麼差別?
答案同上
23.BroadcastReceiver,LocalBroadcastReceiver 區別
24.AlertDialog,popupWindow,Activity區別
25.Application 和 Activity 的 Context 物件的區別
Context數量 = Activity數量 + Service數量 + 1
26.Android屬性動畫特性
27.如何匯入外部資料庫?
28.LinearLayout、RelativeLayout、FrameLayout的特性及對比,並介紹使用場景。
29.談談對介面與回撥的理解
30.回撥的原理
31.介紹下SurfView
32.RecycleView的使用
33.序列化的作用,以及Android兩種序列化的區別
34.差值器
35.估值器
答案同上
36.Android中資料儲存方式
(二)Android原始碼相關分析
- Android動畫框架實現原理 點選開啟連結
- Android各個版本API的區別 點選開啟連結
- Requestlayout,onlayout,onDraw,DrawChild區別與聯絡 點選開啟連結
- invalidate和postInvalidate的區別及使用 點選開啟連結
- Activity-Window-View三者的差別 點選開啟連結
- 談談對Volley的理解
- 如何優化自定義View 點選開啟連結
- 低版本SDK如何實現高版本api? 點選開啟連結
- 描述一次網路請求的流程
- HttpUrlConnection 和 okhttp關係 : 4.4之後的的 HTTP URL connection 基於 OK HTTP實現
- Bitmap物件的理解
- looper架構
- ActivityThread,AMS,WMS的工作原理 點選開啟連結
- 自定義View如何考慮機型適配 點選開啟連結
- 自定義View的事件 點選開啟連結
- AstncTask+HttpClient 與 AsyncHttpClient有什麼區別?
- LaunchMode應用場景 點選開啟連結
- AsyncTask 如何使用?
- SpareArray原理
- 請介紹下ContentProvider 是如何實現資料共享的?
- AndroidService與Activity之間通訊的幾種方式
- IntentService原理及作用是什麼?
- 說說Activity、Intent、Service 是什麼關係
- ApplicationContext和ActivityContext的區別
- SP是程序同步的嗎?有什麼方法做到同步?
- 談談多執行緒在Android中的使用
- 程序和 Application 的生命週期
- 封裝View的時候怎麼知道view的大小
- RecycleView原理
- AndroidManifest的作用與理解
1. 效能優化,這是基本每個面試的都會問的問題
sleep() 和 wait() 的區別就是 呼叫sleep方法的執行緒不會釋放物件鎖,而呼叫wait() 方法會釋放物件鎖
4.自定義控制元件的理解
5.設計模式(大公司面試高階開發 會問到原始碼中 都用到了哪些設計模式)
平時用的比較多有單例模式(在記憶體中僅例項化一個物件時使用),介面卡模式(典型的就是ListView和GridView的介面卡),建造者模式(AlertDialog.Builder)
模板模式,我最常用的就是把多個Fragment的相同程式碼抽象出一個基類,在onCreate, onCreateView把子類需要實現的邏輯抽象出來。
餓漢式和懶漢式區別()
餓漢就是類一旦載入,就把單例初始化完成,保證getInstance的時候,單例是已經存在的了,
而懶漢比較懶,只有當呼叫getInstance的時候,才回去初始化這個單例。
6.socket
Android與伺服器的通訊方式主要有兩種,一是Http通訊,一是Socket通訊。兩者的最大差異在於,http連線使用的是“請求—響應方式”,即在請求時建立連線通道,當客戶端向伺服器傳送請求後,伺服器端才能向客戶端返回資料。而Socket通訊則是在雙方建立起連線後就可以直接進行資料的傳輸,在連線時可實現資訊的主動推送,而不需要每次由客戶端想伺服器傳送請求。 那麼,什麼是socket?Socket又稱套接字,在程式內部提供了與外界通訊的埠,即埠通訊。通過建立socket連線,可為通訊雙方的資料傳輸傳提供通道。socket的主要特點有資料丟失率低,使用簡單且易於移植。
7.TCP與UDP 以及區別。
8. HashMap和Hashtable的區別
主要的區別有:執行緒安全性,同步(synchronization),以及速度。
9.glide 的優缺點。及 載入圖片遇到的問題
如果針對固定資源路徑的請求,將導致請求得到的資源是快取的,這樣就不能保證最新。換句話說,如果給定資源地址下的資源的頻繁更新的,而資源地址是固定,則Glide此時的快取策略就顯得不太合適。
解決方案:
skipMemoryCache(true) ,跳過記憶體快取。
diskCacheStrategy(DiskCacheStrategy.NONE) ,不要在disk硬碟中快取。
10. 記憶體溢位和記憶體洩漏
11. anr
12.舉例執行緒間的 (原生方式,如Hander和Message 及 第三方的方式)
13.Android中程序間通訊有哪些實現方式?原理是什麼
14.跨程序訪問
15.多執行緒高併發 的解決方式有哪些
16.Android中touch事件的傳遞機制是怎樣的?
17.Android多執行緒的實現方式有哪些?它們的優缺點和適用場景是什麼
18.Android下解決滑動衝突的常見思路是什麼
19.android線上程中建立handler應注意什麼
21.介紹一下Android執行緒間通訊有哪幾種方式
- 共享記憶體(變數);
- 檔案,資料庫;
- Handler;
- Java裡的wait(),notify(),notifyAll()