Android面試題記錄

chencha發表於2017-12-13

JAva面試題

  1. String ,StringBuffer,StringBuilder的區別?

(1) String字串常量,StringBuffer 字串變數(執行緒安全)StringBuilder 字串變數(非執行緒安全) (2) String型別和StringBuffer型別的主要效能區別就是String是不可改變的物件,在每次對String 型別進行改變的時候其實都等同於生成一個新的String物件,然後將指標指向新的String物件,會對系統效能產生影響,當記憶體中無引用物件多了以後,JVM的GC就會開始工作,速度會相當慢; 使用StringBuffer類,每次結果都會對StringBuffer物件本身進行操作,而不是重新生成物件,再改變物件引用。 StringBuffer是可變的,在緩衝區中追加字串或者插入指定位置字串,而且執行緒安全,比String大多數情況要快,而StringBuilder就是StringBuffer的一個替身而已,就是快,而且執行緒不安全。

  1. 抽象類與介面在語法和使用上有哪些區別?

(1) 抽象類(abstract class);定義:如果一個類沒有包含足夠多的資訊來描述一個具體的物件,這樣的類就叫作抽象類。 抽象方法:只宣告,不實現。具體的實現需要繼承它的子類來實現,抽象類是為了繼承而存在的,抽象類不能用來建立物件。也就是說被 abstract修飾的方法 一般抽象方法為public 或者protected 例 如: public acstract String A(); (2) 介面 (interface) 定義: 介面抽象方法的集合,通過繼承介面的方式來繼承介面中的抽象方法例如:interface A(){} ; 介面只能用public static final 修飾;介面中沒有構造方式(介面不是類);介面中的方法必須是抽象的;介面支援多繼承(例如:class A implements B,C,...) (3抽象類和介面的區別) 1.抽象類可以提供成員方法的實現,而介面只能存在public abstract方法 2.抽象類中的成員變數可以是各種型別,介面中的成員變數只能是public static final類 3.抽象類可以有靜態程式碼塊和靜態方法,介面中不能含有靜態程式碼塊以及靜態方法 4.一個類只能整合一個抽象類,而一個類可以實現多個介面

  1. java中 == 和equals和hashCode的區別?
"=="用來比較兩個變數(基本型別和物件型別)的值是否相等,如果是基本型別的比較直接比較值;如果是物件型別比較那麼它比較的是兩個物件在棧中的引用(地址)
“equals” 通過判斷兩個物件的地址是否相等
“hashCode”它的作用是獲取雜湊碼,這個雜湊碼的作用是確定該物件在雜湊表中索引位置;是返回物件在類存中地址轉換成的一個int值,如果沒有重寫hashCode方法,任何物件的hashCode都不相等
>https://juejin.im/post/584ac23061ff4b0058d5250f
複製程式碼

4.ArrayMap,HashMap,ArrayList,LinkedList的資料結構是什麼樣的? 1. ArrayMap是通過Key-- value 對映資料結構的,ArrayMap保持它的對映到一個陣列結構,一個Integer陣列來儲存每一個item的雜湊碼,一個物件陣列來儲存鍵值對,這樣避免了為每一個條目都建立一個額外物件,更有效的控制了陣列大小,因為它通過二分查詢的方式,所以比hashMap慢。 2. HashMAp 的底層是基於陣列和連結串列來實現的,查詢速度快是因為通過計算雜湊碼來決定儲存位置,HashMap主要通過key的HashCode來計算hash值的;HashMap底層通過連結串列來解決hash衝突。 3. ArrayList 陣列集合;ArrayList允許為空;允許重複資料;有序;非執行緒安全 4. LinkedList 基於雙向迴圈連結串列實現,隨機增刪較快,存取時需要遍歷查詢;非執行緒安全,適合在單執行緒下使用;LinkedList實現了Serializable介面,支援序列化。 ArrayMap 替換 HashMap ArraySet 替換 HashSet SparseArray 替換 HashMap SparseBooleanArray 替換 HashMap SparseIntArray 替換 HashMap SparseLongArray 替換 HashMap LongSparseArray 替換 HashMap

4.wait() 和 sleep() 的區別?

wait()用於執行緒間的通訊,wait()只能在同步(synchronize)環境中被呼叫;進入wait狀態的執行緒能被notify和notifyAll執行緒喚醒;wait通過有條件的執行,執行緒會一直處於wait狀態;進入wait狀態時會釋放物件的鎖。 sleep()用於短時間暫停當前執行緒;sleep讓執行緒進入休眠狀態;進入sleeping狀態的執行緒不能被notify喚醒;

Android

1.Activity生命週期?

a. 啟動Activity: onCreate() -> onStart() -> onResume() b. Activity退居後臺: 當前Activity跳轉到新的Activity介面或者按Home鍵返回主屏: onPause() -> onStop() c. Activity返回前臺: onRestart() -> onStart() -> onResume() d. 鎖屏: onPause() -> onStop() e. 解鎖: onStart() -> onResume() Activity退居後臺,且記憶體不足,系統會殺死這個後臺狀態的Activity(此時這個activity還在任務棧中,只是引用的物件已經為null),若再次回到這個Activity時會從新走一次啟動Activity的生命週期 2.Fragment生命週期?

3.Activity啟動模式介紹?

Activity的啟動模式有四種: standard,singleTop,singleTask,singleInstance AndroidManifest.xml清單檔案 android:launchMode屬性來指定啟動模式

4.service的啟動方式以及區別?怎麼停止一個service?

a.在Context中通過 public boolen bindService(Intent service,ServiceConnection conn,int flags)方法進行Service與Context關聯並啟動;Service的生命週期依附於Context b.通過public ComponentName startService(Intent service)方法啟動一個Service,此時Service生命週期與Context無關。 需要注意的是都需要在清單檔案 xml中註冊Service例如 <service android:name=".a.cService" android:enabled="true/> 停止一個Service: bindService: unBindService() startServicer:只有呼叫stopService()或stopSelf()才可以將其停止。

5.android在子執行緒中更新UI有幾種方式?

a.Activity.runOnUiThread(Runnable) b.View.post(Runnable) c.廣播,子執行緒中傳送廣播,主執行緒接收廣播更新UI d.使用Handler(執行緒間的通訊) e. AsyncTask

6.簡述Handler機制? 7.ListView優化,多item的重用? 8.如果後臺的Activity由於某原因被系統回收了,如何在被系統回收之前儲存資料並恢復?

9.如何提高後臺程式存活率? a.Service設定成START_STICKY b.呼叫startForegound,讓Service所線上程成為前臺程式 c.Service的onDestroy裡面重新啟動自己 d.聯絡廠商加入白名單

10.App啟動流程,從點選桌面開始? 11.Android幾種程式? a.前臺程式: 與使用者正在互動的Activity或者Activity用到的Service等,如果系統記憶體不足前臺程式是最後被殺死的 b.可見程式: 處於暫停狀態(onPause)的Activity;或者是繫結在其上的Service。可被使用者看見,失去焦點就不能與使用者互動 c.服務程式: 其中執行使用startService方法啟動的service,例如後臺播放音樂或者下載網路資料,系統所需要的空間不足執行前臺程式和可見程式才會被終止 d.後臺程式:包含目前對使用者不可見的Activity的程式已呼叫Activity的onStop()方法,不為使用者當前關心,例如後臺掛著qq,當這樣的程式系統沒有記憶體就會首先被殺死 e.空程式: 不包含任何應用程式的程式元件的程式

12.怎麼退出android 應用?

http://www.jianshu.com/p/98a5519d11a3

  1. 談談socket,長連線

http://blog.csdn.net/u011240877/article/details/72860483 http://www.jianshu.com/p/089fb79e308b

15.兩個Activity之間跳轉時的生命週期?

a.比如說有兩個Activity A和B,當A跳轉到B頁面時,A會執行onPause()->B頁面執行 onCreate()->onStart()->onResume() ->A頁面執行onStop() 備註:B是一個透明的對話方塊,A就不會呼叫onStop()方法

相關連結:

https://github.com/GeniusVJR/LearningNotes
https://github.com/JackyAndroid/AndroidInterview-Q-A/blob/master/README-CN.md https://github.com/EbookFoundation/free-programming-books/blob/master/free-programming-books-zh.md https://juejin.im/entry/58cb4e3344d9040069f599aa https://juejin.im/entry/57466b5e71cfe40068cd862a https://juejin.im/entry/57e4e1f40bd1d0005bf034fb https://juejin.im/entry/58ca4c8d128fe1006c7dbc82 https://juejin.im/entry/5942667b61ff4b006cc98a55

相關文章