水泥廠之知識點

1.跨進程通信的幾種方式

Intent:打電話、跳瀏覽器等
ContentProvider:數據庫存儲數據
Broadcast:廣播通信
AIDL通信:通過接口共享數據

2.wait和sleep 的區別

wait是Object的方法,wait是對象鎖,鎖定方法不讓繼續執行,當執行notify方法後就會繼續執行,sellp是Thread的方法,sellp是使線程睡眠,讓出cpu,結束後自動繼續執行

sleep

  • 讓當前線程休眠指定時間。
  • 休眠時間的準確性依賴於系統時鐘和CPU調度機制。
  • 不釋放已獲取的鎖資源,如果sleep方法在同步上下文中調用,那麼其他線程是無法進入到當前同步塊或者同步方法中的。
  • 可通過調用interrupt()方法來喚醒休眠線程。

wait

  • 讓當前線程進入等待狀態,當別的其他線程調用notify()或者notifyAll()方法時,當前線程進入就緒狀態
  • wait方法必須在同步上下文中調用,例如:同步方法塊或者同步方法中,這也就意味着如果你想要調用wait方法,前提是必須獲取對象上的鎖資源
  • 當wait方法調用時,當前線程將會釋放已獲取的對象鎖資源,並進入等待隊列,其他線程就可以嘗試獲取對象上的鎖資源。 

3.String,StringBuffer,StringBuilder的區別

String:創建後不可修改、賦值操作少時使用(創建後,賦其他的值,看似是改變了,其實是先執行了一步回收的操作)

StringBuilder:創建後可修改,賦值頻繁時使用。線程不安全,但是快

StringBuffer:創建後可修改,多個線程同步操作數據時使用。線程安全,稍慢

4.View和SurfaceView的區別

View基於主線程刷新UI,SurfaceView子線程又可以刷新UI

5.View的繪製原理

View爲所有圖形控件的基類,View的繪製由3個函數完成
measure,計算視圖的大小
layout,提供視圖要顯示的位置
draw,繪製

6.簡述JNI

本質是個接口,可以調用c /c++編譯成的so庫,是java和c語言之間的橋樑,由於java是一種半解釋語言,可以被反編譯出來,一種重要涉及安全的代碼就使用了C編程,再者很多底層功能調用C語言都實現了Java沒必要重複造輪子,所以定義了JNI接口的實現

7.簡述TCP,UDP,Socket

TCP:如http、https,是經過3次握手,4次揮手完成一串數據的傳送
UDP:如藍牙,是無連接的,知道IP地址和端口號,向其發送數據即可,不管數據是否發送成功
Socket:是一種不同計算機,實時連接,比如說傳送文件,即時通訊

8.音視頻相關類

總體來說,分爲幾個類
視頻錄製方面,Camear攝像頭錄製視頻類,MediaProjection屏幕錄製視頻類
編碼方面,MediaCodec,MediaRecorder
預覽方面,SurfaceView,GLSurfaceView,TextureView,VideoView

9.進程和線程的區別

概念:進程包括多個線程,一個程序一個進程,多線程的優點可以提高執行效率,提高資源利用率
創建:Thread類和Runnable接口,
常用方法有:
start()用於啓動線程
run()調用線程對象中的run方法
join()合併插隊到當前線程
sellp()睡眠釋放cpu資源
setPriority()設置線程優先級

10.內存泄露如何查看和解決

概念:有些對象只有有限的生命週期,當他們的任務完成之後,它們將被垃圾回收,如果在對象的生命週期本該結束的時候,這個對象還被一系列的引用,着就會導致內存泄露。
解決方法:使用開源框架LeakCanary檢測針對性解決
常見的內存泄露有:
單例造成的內存泄露,例如單例中的Context生命週期大於本身Context生命週期
線程使用Hander造成的內存卸扣,當activity已經結束,線程依然在運行更新UI
非靜態類使用靜態變量導致無法回收釋放造成泄露
WebView網頁過多造成內存泄露
資源未關閉造成泄露,例如數據庫使用完之後關閉連接


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章