安卓面試題一

J2SE篇幅

1.Java里頭的多態(tài)是什么意思?

首先必須要有繼承或者實(shí)現(xiàn),其次是要有方法的重寫,最后一個(gè)是父類引用指向子類對(duì)象

大多數(shù)情況下回答這三個(gè)就ok了,再具體點(diǎn)直接給面試官舉個(gè)例子:

動(dòng)物類 Animal? ?狗Dog extends Animal? ?貓Cat extends Animal? ?--->>繼承

Animal有個(gè)方法 吃得方法eat()? ?狗不滿意這個(gè)父類的吃法,自己重寫了eat() 貓也不滿意這個(gè)父類的吃飯,自己也重寫了eat() --->>重寫

最后 Animal animal = new Dog(); --->>父類引用指向子類對(duì)象

? ? ? ?animal.eat();調(diào)用這個(gè)方法實(shí)際執(zhí)行的是狗的吃的方法,這就是多態(tài),實(shí)際運(yùn)行時(shí)動(dòng)態(tài)綁定。

2.GC的原理

全拼是Garbage Collection(垃圾回收);當(dāng)堆內(nèi)存里的對(duì)象沒有引用指向了,GC就來了。

3.抽象類跟接口的區(qū)別

抽象類可以有非抽象的方法,接口只有方法的定義沒有實(shí)現(xiàn),實(shí)現(xiàn)接口必須重寫接口所有定義的方法,接口里頭變量是static final的常量

4.StringBuffer跟StringBuider的區(qū)別

StringBuider非線程安全,執(zhí)行速度快,單線程用這個(gè)類

5.sleep(), wait()的區(qū)別

sleep不釋放同步鎖,自動(dòng)喚醒,需要try catch,? wait釋放同步鎖,需要notify來喚醒

sleep是線程的方法? ? wait是Object的方法

6.遞歸執(zhí)行路徑有幾條。

主要是考察你對(duì)java線程的執(zhí)行路徑,其實(shí)遞歸并不是開啟線程,雖然是重復(fù)調(diào)用方法本身,其實(shí)執(zhí)行路徑就一條。

7.LinkedList跟ArrayList的區(qū)別

一個(gè)鏈表結(jié)構(gòu),一個(gè)數(shù)組結(jié)構(gòu),LinkedList查找慢,插入快,ArrayList查找快,插入慢。

Android篇幅

1.手寫一個(gè)線程安全的單例

public class SigleInstance {

private static SigleInstance instance;

public static SigleInstance getInstance() {

????? ? if (instance == null) {

????????? ? syncronized(SigleInstance.class) {

????????????????? ? if (instance == null) {

????????????????????????? ? instance = new SingleInstance();

? ? ? ? ? ? ? ? ? ? }

????????? ? }

? ? ? ?}

????? ? return instance;

}

}

這個(gè)算是目前來說最有的單例,最好是能手寫出來,面試官主要是考你為什么同步關(guān)鍵字要寫在方法里頭,寫在那塊,其實(shí)你只要答到點(diǎn)上就ok了,主要原因就是不用頻繁加鎖,因?yàn)轭l繁加鎖會(huì)消耗性能,當(dāng)instance new出來之后,可以不用在方法外加鎖就直接返回實(shí)例,減少了一次加鎖的操作。

2.Bitmap圖像模式有哪幾種,給出一張1080 * 1920的,ARGB 8888格式的占用內(nèi)存是多大

ARGB 8888一個(gè)像素占用4個(gè)字節(jié),一個(gè)字節(jié)8位,1080 * 1920 * 4 * 8

3.靜態(tài)方法跟靜態(tài)代碼塊有什么區(qū)別。

靜態(tài)方法屬于類,用類名.就能直接調(diào)用,靜態(tài)代碼塊是類加載的時(shí)候就會(huì)調(diào)用的

4.Android進(jìn)程有哪幾種

前臺(tái)進(jìn)程,可見進(jìn)程,服務(wù)進(jìn)程,后臺(tái)進(jìn)程,空進(jìn)程

5.Runnable , Callable, Feature三個(gè)的區(qū)別

Runnable 沒有返回值,Callable有返回值,F(xiàn)eature一般配合Callable來使用,用于檢測任務(wù)的狀態(tài),具有有是否執(zhí)行完成,還可以做取消任務(wù)操作,再可以稍微撤下AsyncTask源碼,因?yàn)橛蟹祷刂担鋵?shí)底層也是用Callable跟Feature來實(shí)現(xiàn)的, 顯得你會(huì)懂一些源碼,會(huì)是加分項(xiàng)

6.一個(gè)應(yīng)用允許多個(gè)進(jìn)程嗎?

允許,最直接的直接說在功能清單文件里配置Service為一個(gè)獨(dú)立進(jìn)程,android:process就能配置

7.多進(jìn)程會(huì)引起一些什么樣的異常呢?

(1)靜態(tài)成員和單例模式完全shixiao

? (2)線程同步機(jī)制完全失效

? (3)SharedPreferences的可靠性下降

? (4)Application會(huì)多次創(chuàng)建

8.HashMap的底層數(shù)據(jù)結(jié)構(gòu)

? 數(shù)組加鏈表

9.Serializable和Parcelable的區(qū)別

Serializable是java中序列化接口,使用開銷很大,序列化和反序列化過程需要大量的I/0操作,Parcelable是Android中序列化的方式,用起來雖然麻煩一些,效率很高,Parcelable主要用在內(nèi)存序列化上,如果說要序列化到存儲(chǔ)設(shè)備中,建議大家使用Serializable,具體通過Object流來做序列化操作。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,141評(píng)論 1 32
  • 廢話不多說,自己進(jìn)入今天的主題 1、面向?qū)ο蟮奶卣饔心男┓矫妫?答:面向?qū)ο蟮奶卣髦饕幸韵聨讉€(gè)方面: - 抽象:...
    傳奇內(nèi)服號(hào)閱讀 2,396評(píng)論 1 31
  • 三重:代碼、底層內(nèi)存、源碼 第一階段:開發(fā)常用JavaSE基礎(chǔ)、IDE、Maven、Gradle、SVN、Git、...
    guodd369閱讀 16,951評(píng)論 1 44
  • 不足的地方請(qǐng)大家多多指正,如有其它沒有想到的常問面試題請(qǐng)大家多多評(píng)論,一起成長,感謝!~ String可以被繼承嗎...
    啟示錄是真的閱讀 2,978評(píng)論 3 3
  • 父親,給我的感覺就是,他從來不會(huì)在我們面前沮喪,從來都不怕難,好像萬能的超人,強(qiáng)大又機(jī)智。 父親讀初中的時(shí)候成績優(yōu)...
    二初_閱讀 1,321評(píng)論 2 4