1. 程式人生 > >安卓面試題(持續更新中)

安卓面試題(持續更新中)

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執行緒間通訊有哪幾種方式

  1. 共享記憶體(變數);
  2. 檔案,資料庫;
  3. Handler;
  4. Java裡的wait(),notify(),notifyAll()