分享一波Android面試題

Android開發面試題java

1. String 、StringBuilder和StringBuffer的區別linux

JAVA 平臺提供了兩個:String 和StringBuffer ,它們能夠儲存和操做字符串,既包含多個字符串和數據。String類提供了數值是不可更改的字符串。StringBuffer 類提供的字符串能夠進行修改,你可使用StringBuffer來動態構造字符數據。StringBuilder 類提供的字符串能夠進行修改。前者線程安全,後者非線程安全(效率高)。android

2.int 和Integer有什麼區別程序員

JAVA提供兩種不一樣的類型:引用類型和原始類型(或內置類型)。Int是JAVA的原始數據類型,Integer是JAVA爲int提供的封裝類。JAVA爲每一個原始類型提供了封裝類。面試

原始類型           封裝類數據庫

boolean             Boolean express

char                Character 編程

byte                Byte  設計模式

short               Short  瀏覽器

int                 Integer 

long                Long  

float                Float 

double              Double

引用類型和原始類型的行爲徹底不一樣,而且他們具備不一樣的語義。引用類型和原始類型具備不一樣的特徵和用法,它們包括:大小和速度問題,這種類型以哪一種類型的數據結構儲存,當引用類型和原始類型用做某個類的實例數據時所指定的缺省值爲null,而原始類型實例變量的缺省值與它們的類型有關。

3.一條最長的短信約佔多少個Byte

中文70個(包括標點),英文160

 

4.SIM卡和EF文件(存儲文件)有何做用

SIM卡的文件系統有本身的規範,主要爲了和手機通信,SIM卡自己有本身的操做系統。EF文件用做儲存和手機通信。

 

5.Android中的動畫有哪幾類,它們的特色和區別是什麼(增長了屬性動畫。。應該是三種)

三種種,一種是Tween動畫,還有一種是Frame動畫。Tween動畫,這種實現方式可使視圖組件移動、放大、縮小以及產生透明度的變化;另外一種Frame動畫,傳統的動畫方法,經過順序的播放排列好的圖片來實現,相似電影。

最後一種是屬性動畫

 

 

6.什麼是嵌入式實時操做系統,Android操做系統屬於實時操做系統嗎?

嵌入式實時操做系統是指當外界事件或數據產生時,可以接受並以足夠快的速度予以處理,其處理的結果又能在規定的時間以內來控制生產過程或對處理系統做出快速響應,並控制全部實時任務協調一致運行的操做系統。主要用於工業控制、軍事設備、航空航天等對系統的響應事件有苛刻的要求的領域。實時系統又可分爲軟實時和硬實時兩種。而Android是基於Linux內核的,所以屬於軟實時。

 

7.MVC模式的原理

在Android中的運用MVC(Model_View_Controller)「模型—視圖—控制器」。MVC應用程序老是由這三個部分組成。Event(事件)致使

Controller改變Model或View,或者同時改變二者。只要Controller改變了Model的數據或者屬性,全部依賴的View都會自動更新。

 

8.橫豎屏切換的時候Activity的生命週期

一、不設置Activity的android:configChanges時,切屏會從新調用各個生命週期,切橫屏時會執行一次,切豎屏時會執行兩次。

二、設置Activity的android:configChanges=「orientation」時,切屏仍是會從新調用各個生命週期,但切橫、豎屏時各執行一次。

三、設置Activity的android:configChanges= 「orientationKeyboardHidden」時,切屏不會從新調用各個生命週期,只會執行onConfigurationChanged方法。

 

9.Intent傳遞數據時,能夠傳遞哪些數據

一、通常的數據類型:經過Intent.putExtra();傳值,經過 Intent.getExtra();接收。

二、數據的Uri: 經過 Intent.setData();傳值,經過Intent.getData();接收。

 

10.什麼狀況會致使Force Close?如何避免?可否捕獲致使其的異常

通常像空指針啊,能夠看logcat,而後對應到程序中來解決錯誤。

 

11.Android自己的API並未聲明會拋出異常,則其在運行時有無可能拋出runtime異常,你遇到過嗎?如有的話會致使什麼問題?如何解決?

會如nullpointException TextView沒有初始化時,卻調用了其方法。打開控制檯,查看logcat找出異常並修改。

 

12.如何將SQLite數據庫(dictionary.db文件)與apk文件一塊兒發佈?

能夠將dictionary.db文件複製到Eclipse Android 工程中的res raw目錄中。全部在res raw目錄中的文件不會被壓縮,這樣能夠直接提取該目錄中的文件。

 

13.Android引入廣播機制的用意

一、從MVC的角度考慮(應用程序內),如今的移動開發模型基本上也是照搬Web那一套MVC架構,只不過是改了點嫁妝而已。Android的四大組件本質上就是爲了實現移動或者說嵌入式設備上的MVC架構,它們之間有時候是一種相互依存的關係,有時候又是一種補充關係,引入廣播機制能夠方便幾大組件的信息和數據交互。

二、程序間互通訊息(例如:在本身的應用程序內監聽系統來電)

三、效率上(參考UDP的廣播協議在局域網的方便性)

四、設計模式上(反轉控制的一種應用,相似監聽者模式)

 

14.什麼是Activity

Android的四大組件之一,通常的,一個用戶交互界面對應一個Activity,Activity是Context的子類,同時實現Windows.callback和keyevent.callback,能夠處理與窗體用戶交互的事件。開發經常使用的有:ListActivity,PerenceActivity等,若是界面有共同的特色或者功能的時候能夠自定義一個BaseActivity。

 

15.Android的存儲方式

一、文件

二、數據庫

三、sharedPreference

四、網絡

 

16.Android中經常使用的五種佈局

一、LinearLayout — 線性佈局

Orientation — 容器內元素的排布方式

Vertical — 子元素們垂直排布

Horizontal — 子元素們水平排布

Gravity — 內容排布形式。經常使用的有left、top、right、bottom、center等

 

二、AbsoluteLayout — 絕對佈局

layout_x — x座標,以左上爲頂點

layout_y — y座標,以左上爲頂點

 

三、TableLayout — 表格佈局

表格佈局主要以行列的形式來管理子控件,其中每一行即一個TableRow對象,每一個TableRow對象能夠添加子控件,而且每加入一個控件即至關於添加了一列。

 

四、RelativeLayout — 相對佈局

layout_centerInPerent — 將當前元素放置於其容器內的水平方向和垂直方向的中央位置

相似的屬性有:layout_centerHorizontal,layout_centerVertical,layout_alignPerentLeft等

layout_marginLeft — 設置當前元素相對於其容器左側邊緣的距離

layout_below — 放置當前元素到指定的元素的下面

layout_alignRight — 當前元素與指定元素右對齊

 

五、FrameLayout — 幀佈局

以左上角爲起點,將FrameLayout內的元素一層覆蓋一層的顯示。在幀佈局中,先添加的圖片會被後添加的圖片覆蓋。

 

17.如何啓用Service,又如何停用

一、第一種是經過調用Context.startService()啓動,調用Context.stopService()結束,startService()能夠傳遞參數給Service

二、第二種方式是經過調用Context.bindService()啓動,調用Context.unbindService()結束,還能夠經過ServiceConnection訪問Service,在Service每一次的開啓關閉過程當中,只有onStart能夠被屢次調用(經過屢次startService調用),其餘onCreate,onBind,onUnbind,onDestroy在一個生命週期中只能被調用一次。

18.AIDL的全稱是什麼?如何工做?能處理哪些類型的數據?

1,AIDL全稱Android Interface Definition Language(Android接口描述語言) 是一種接口描述語言。

2,編譯器能夠經過AIDL文件生成一段代碼,經過預先定義的接口達到兩個進程內部通訊進程跨界對象訪問的目的.AIDL的IPC的機制和COM或CORBA相似, 是基於接口的,但它是輕量級的。它使用代理類在客戶端和實現層間傳遞值. 若是要使用AIDL, 須要完成2件事情:

1. 引入AIDL的相關類.;

2. 調用AIDL產生的class.理論上, 參數能夠傳遞基本數據類型和String, 還有就是Bundle的派生類, 不過在Eclipse中,目前的ADT不支持Bundle作爲參數。

3.AIDL語法很簡單,能夠用來聲明一個帶一個或多個方法的接口,也能夠傳遞參數和返回值。 因爲遠程調用的須要, 這些參數和返回值並非任何類型.下面是些AIDL支持的數據類型:

(1). 不須要import聲明的簡單Java編程語言類型(int,boolean等)

(2). String, CharSequence不須要特殊聲明。

(3). List, Map和Parcelables類型, 這些類型內所包含的數據成員也只能是簡單數據類型, String等其餘支持的類型.

19.Handler機制的原理

Android提供了Handler和Looper來知足線程間的通訊。Handler遵循先進先出的原則,Looper類用來管理特定線程內對象之間的消息交換。

一、              Looper:一個線程能夠產生一個Looper對象,由它來管理此線程裏的Message Queue(消息隊列)。

二、              Handler:你能夠構造Handler對象來與Looper溝通,以便push新消息到Message Queue裏;或者接收Looper從Message Queue中取出並送出的消息。

三、              Message Queue(消息隊列):用來存放線程放入的消息。

四、              線程:UI Thread一般就是main Thread,而Android啓動程序時會替它創建一個Message Queue。

20.Activity的生命週期

一、onCreate(Bundle savedInstanceState):建立Activity時調用。設置在該方法中,還以Bundle的形式提供對之前儲存的任何狀態的訪問。

二、onStart():Activity變爲在屏幕上對用戶可見時調用。

三、onResume():Activity開始與用戶交互時調用(不管是啓動仍是從新啓動一個活動,該方法老是被調用的)。

四、onPause():Activity被暫停或收回CPU和其餘資源時調用,該方法用於保存活動狀態的Activity。

五、onStop():Activity被中止並轉爲不可見階段及後續的生命週期事件時調用。

六、onRestart():從新啓動Activity時調用。該活動仍在棧中,而不是啓動新的活動。

七、onDestroy():Activity被徹底從系統內存中移除時,該方法被調用。

21.兩個Activity之間跳轉必需要執行哪些方法

一、onCreate()   在Activity生命週期開始時調用

二、onRestoreInstanceState()   用來恢復UI狀態

三、onRestart()   當Activity從新調用時啓動

四、onStart()   Activity對用戶即將可見時調用

五、onResume()   當Activity對用戶交互時繪製界面

六、onSavedInstanceState()   Activity即將移出棧頂保留UI狀態時調用

七、onPause()   暫停當前活動Activity,提交持久數據的改變,中止動畫和其餘佔用CPU資源的東西,用於下一個Activity在這個方法返回以前不會Resume,因此這個方法的代碼執行要快。

八、onStop()   Activity不可見時調用

九、onDestroy()   在Activity銷燬線程被調用的最後一個方法

 

22.Math.round(11.5)等於多少?Math.round(-11.5)等於多少?

答:12,-11

23.對一些資源以及狀態的操做保存,最好是保存在生命週期的哪一個函數中進行

最好是保存在onStart()函數中進行

24.Intent傳遞數據時,哪些數據類型能夠被傳遞?

一、Seria lizable//傳對象

二、charS equence//字符隊列

三、Parce lable//傳對象

四、Bundle

25.關於res/raw目錄下的文件

res/raw目錄下的文件是原封不動的存儲到設備上,不會轉換爲二進制的格式。

 

26.Android的四大組件

一、Activity

二、Service

三、Broadcast

四、Contentprovider

27.Android中實現Service的方法,和它們的生命週期。

一、startService

onCreate()

onStartCommand()

onDestroy()

二、bindService

onCreate()

onBind()

onUnbind()

onDestroy()

 

28.Activity的生命週期

必調用的三個方法:onCreate()→onStart()→onResume()。

一、              父Activity啓動子Activity,子Activity退出,父Activity調用順序以下:onCreate()→onStart()→onResume()→onPause()→onStop()→onRestart()→onStart()→onResume()

二、              用戶點擊Home鍵,Activity調用順序以下:onCreate()→onStart()→onResume()→onPause()→onStop()→Maybe→onDestroy()

三、              調用finish(),Activity調用順序以下:onCreate()→onStart()→onResume()→onPause()→onStop()→onDestroy()

四、              在Activity上顯示Dialog,Activity調用順序以下:onCreate()→onStart()→onResume()→onPause()

五、              在父Activity上顯示透明的或非全屏的Activity,Activity調用順序以下:onCreate()→onStart()→onResume()→onPause()

六、              設備進入睡眠狀態,Activity調用順序以下:onCreate()→onStart()→onResume()→onPause()

29.若是後臺的Activity因爲某緣由被系統回收了,如何在被系統回收以前保存當前狀態?

除了在棧頂的Activity,其餘的Activity都有可能在內存不足的時候被系統回收,一個Activity越處於棧底,被系統回收的可能性越大。

protected void onSavedInstanceState(Bundle outState){

super. onSavedInstanceState(outState);

outstate.putLong(「id」,1234567890);

}

public void onCreate(Bundle savedInstanceState){

//判斷savedInstanceState是否是爲空

//若是不爲空就取出來

super.onCreate(savedInstanceState);

}

30.註冊廣播有幾種方式,這些方式有何優缺點?

兩種。一種是在配置文件中註冊,另外一種是在Java代碼中註冊,在Java代碼中註冊的廣播隨着Activity的銷燬而中止運行。

31.請解釋下在單線程模型中Message、Handler、MessageQueue、Looper之間的關係。

一個Handler容許你發送和處理Message和Runable對象,這些對象和一個線程的Message Queue相關聯。每個線程實例和一個單獨的線程以及該線程的MessageQueue相關聯。當你建立一個新的Handler時,它就和建立它的線程綁定在一塊兒了。這裏,線程咱們也能夠理解爲線程的MessageQueue。從這一點上來看,Handler把Message和Runable對象傳遞給MessageQueue,並且在這些對象離開MessageQueue時,Handler負責執行他們。

  Handler有兩個主要的用途:(1)肯定在未來的某個時間點執行一個或者一些Message和Runnable對象。(2)在其餘線程(不是Handler綁定線程)中排入一些要執行的動做。

  Scheduling Message,即(1),能夠經過如下方法完成:

  post(Runnable):Runnable在handler綁定的線程上執行,也就是說不建立新線程。

  postAtTime(Runnable,long):

  postDelayed(Runnable,long):

  sendEmptyMessage(int):

  sendMessage(Message):

  sendMessageAtTime(Message,long):

  sendMessageDelayed(Message,long):

  post這個動做讓你把Runnable對象排入MessageQueue,MessageQueue受到這些消息的時候執行他們,固然以必定的排序。sendMessage這個動做容許你把Message對象排成隊列,這些Message對象包含一些信息,Handler的hanlerMessage(Message)會處理這些Message.固然,handlerMessage(Message)必須由Handler的子類來重寫。這是編程人員須要做的事。

  當posting或者sending到一個Hanler時,你能夠有三種行爲:當MessageQueue準備好就處理,定義一個延遲時間,定義一個精確的時間去處理。後二者容許你實現timeout,tick,和基於時間的行爲。當你的應用建立一個新的進程時,主線程(也就是UI線程)自帶一個MessageQueue,這個MessageQueue管理頂層的應用對象(像activities,broadcast receivers等)和主線程建立的窗體。你能夠建立本身的線程,並經過一個Handler和主線程進行通訊。這和以前同樣,經過post和sendmessage來完成,差異在於在哪個線程中執行這麼方法。在恰當的時候,給定的Runnable和Message將在Handler的MessageQueue中被Scheduled。

  Message簡介:

  Message類就是定義了一個信息,這個信息中包含一個描述符和任意的數據對象,這個信息被用來傳遞給Handler.Message對象提供額外的兩個int域和一個Object域,這可讓你在大多數狀況下不用做分配的動做。

  儘管Message的構造函數是public的,可是獲取Message實例的最好方法是調用Message.obtain(),或者Handler.obtainMessage()方法,這些方法會從回收對象池中獲取一個。

  MessageQueue簡介:

  這是一個包含message列表的底層類。Looper負責分發這些message。Messages並非直接加到一個MessageQueue中,而是經過MessageQueue.IdleHandler關聯到Looper。

  你能夠經過Looper.myQueue()從當前線程中獲取MessageQueue。

  Looper簡介:

  Looper類被用來執行一個線程中的message循環。默認狀況,沒有一個消息循環關聯到線程。在線程中調用prepare()建立一個Looper,而後用loop()來處理messages,直到循環終止。

  大多數和message loop的交互是經過Handler。

  下面是一個典型的帶有Looper的線程實現。

  class LooperThread extends Thread {

  public Handler mHandler;

  public void run() {

  Looper.prepare();

  mHandler = new Handler() {

  public voidhandleMessage(Message msg) {

  // process incomingmessages here

  }

  };

  Loo per.loop();

  }

  }

 

32.談談intent在android中的做用是什麼?

答:能夠實現界面間的切換,能夠包含動做和動做數據,鏈接四大組件的紐帶。

 

33.android中最經常使用的幾種解析方式是什麼?

答:SAX,  DOM,  PULL,  JSON

 

34.當啓動一個Activity採用何種方式啓動新的Activity執行完畢後須要返回值至當前Activity,而且須要什麼方法來獲取數據?

答:startActivityResult(),    onActivityResult()

 

35.final,finally,finalize的區別

Final用於聲明屬性,方法和類,分別表示屬性不可改變,方法不可覆蓋,類不可繼承。

Finally是異常處理語句結構的一部分,表示老是執行。

Finalize是Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,能夠覆蓋此方法提供垃圾收集時的其餘資源回收,例如關閉文件等。

 

36.String s = new String(「xyz」);建立了幾個String Object?

2個。一個s的引用地址,一個存放xyz的存放地址 s存放xyz的地址。

37.try{}裏有一個return語句,那麼緊跟在這個try後的finally{}裏的code會不會執行,何時執行,在return前仍是後?

會執行,在return以前執行。

38.什麼是ANR 如何避免它?

答:ANR:Application NotResponding,在Android中,活動管理器和窗口管理器這兩個系統服務負責監視應用程序的響應。當出現下列狀況時,Android就會顯示ANR對話框了:對輸入事件(如按鍵、觸摸屏事件)的響應超過5秒

意向接受器(intentReceiver)超過10秒鐘仍未執行完畢

Android應用程序徹底運行在一個獨立的線程中(例如main)。這就意味着,任何在主線程中運行的,須要消耗大量時間的操做都會引起ANR。由於此時,你的應用程序已經沒有機會去響應輸入事件和意向廣播(Intentbroadcast)。

所以,任何運行在主線程中的方法,都要儘量的只作少許的工做。特別是活動生命週期中的重要方法如onCreate()和 onResume()等更應如此。潛在的比較耗時的操做,如訪問網絡和數據庫;或者是開銷很大的計算,好比改變位圖的大小,須要在一個單獨的子線程中完成(或者是使用異步請求,如數據庫操做)。但這並不意味着你的主線程須要進入阻塞狀態已等待子線程結束 -- 也不須要調用Therad.wait()或者Thread.sleep()方法。取而代之的是,主線程爲子線程提供一個句柄(Handler),讓子線程在即將結束的時候調用它(xing:能夠參看Snake的例子,這種方法與之前咱們所接觸的有所不一樣)。使用這種方法涉及你的應用程序,可以保證你的程序對輸入保持良好的響應,從而避免由於輸入事件超過5秒鐘不被處理而產生的ANR。這種實踐須要應用到全部顯示用戶界面的線程,由於他們都面臨着一樣的超時問題。

 

39.形成Android應用內存溢出的可能性有哪些?

一、查詢數據庫沒有關閉遊標

二、構造Adapter時,沒有使用緩存的convertView

三、Bitmap對象不在使用時調用recycle()釋放內存

四、釋放對象的引用

五、其餘

 

40.Service是否在main Thread中執行,Service裏面是否執行耗時操做?

默認狀況,若是沒有顯示的指定Service所運行的進程,Service和Activity是運行在當前App所在進程的main Thread(UI主線程)裏面。Service裏面不能執行耗時的操做(網絡請求,拷貝數據庫,大文件),在子線程中執行(耗時的操做都是放到子線程裏面執行,例如獲取服務端數據,下載圖片,視頻等等)

new Thread(){}.start();

特殊狀況,能夠在清單文件配置Service執行所在的線程,讓Service在另外的進程中執行。

<Service android:process=」cn.itcast.xxx」></Service>

 

41.Android四種啓動模式是哪四種?可否介紹一下各自的做用?

答:standrad、singletop、singletask、singleinstance。

Standrad的功能是:默認模式,能夠不用寫在配置文件裏面,能夠有多個相同的事例,也容許多個activity疊加。例如:

若我有一個Activity名爲A1, 上面有一個按鈕可跳轉到A1。那麼若是我點擊按鈕,便會新啓一個Activity A1疊在剛纔的A1之上,再點擊,又會再新啓一個在它之上……

點back鍵會依照棧順序依次退出。

Singletop的功能是:能夠有多個實例,可是不容許多個相同Activity疊加。即,若是Activity在棧頂的時候,啓動相同的Activity,不會建立新的實例,而會調用其onNewIntent方法。

例如:若我有兩個Activity名爲B1,B2,兩個Activity內容功能徹底相同,都有兩個按鈕能夠跳到B1或者B2,惟一不一樣的是B1爲standard,B2爲singleTop。

若我意圖打開的順序爲B1->B2->B2,則實際打開的順序爲B1->B2(後一次意圖打開B2,實際只調用了前一個的onNewIntent方法)

若我意圖打開的順序爲B1->B2->B1->B2,則實際打開的順序與意圖的一致,爲B1->B2->B1->B2。

Singletask的功能是:只有一個實例。在同一個應用程序中啓動他的時候,若Activity不存在,則會在當前task建立一個新的實例,若存在,則會把task中在其之上的其它Activity destory掉並調用它的onNewIntent方法。

若是是在別的應用程序中啓動它,則會新建一個task,並在該task中啓動這個Activity,singleTask容許別的Activity與其在一個task中共存,也就是說,若是我在這個singleTask的實例中再打開新的Activity,這個新的Activity仍是會在singleTask的實例的task中。

 

例如:

若個人應用程序中有三個Activity,C1,C2,C3,三個Activity可互相啓動,其中C2爲singleTask模式,那麼,不管我在這個程序中如何點擊啓動,如:C1->C2->C3->C2->C3->C1-C2,C1,C3可能存在多個實例,可是C2只會存在一個,而且這三個Activity都在同一個task裏面。

可是C1->C2->C3->C2->C3->C1-C2,這樣的操做過程實際應該是以下這樣的,由於singleTask會把task中在其之上的其它Activity destory掉。

操做:C1->C2

      C1->C2->C3

C1->C2->C3->C2  

C1->C2->C3->C2->C3->C1    

C1->C2->C3->C2->C3->C1-C2

 

實際:C1->C2

      C1->C2->C3  

C1->C2

C1->C2->C3->C1

      C1->C2

 

如果別的應用程序打開C2,則會新啓一個task。

如別的應用Other中有一個activity,taskId爲200,從它打開C2,則C2的taskId不會爲200,例如C2的taskId爲201,那麼再從C2打開C一、C3,則C二、C3的taskId仍爲201。

注意:若是此時你點擊home,而後再打開Other,發現這時顯示的確定會是Other應用中的內容,而不會是咱們應用中的C1 C2 C3中的其中一個。

Singleinstance的功能是:只有一個實例,而且這個實例獨立運行在一個task中,這個task只有這個實例,不容許有別的Activity存在。

例如:

程序有三個ActivityD1,D2,D3,三個Activity可互相啓動,其中D2爲singleInstance模式。那麼程序從D1開始運行,假設D1的taskId爲200,那麼從D1啓動D2時,D2會新啓動一個task,即D2與D1不在一個task中運行。假設D2的taskId爲201,再從D2啓動D3時,D3的taskId爲200,也就是說它被壓到了D1啓動的任務棧中。

 

如果在別的應用程序打開D2,假設Other的taskId爲200,打開D2,D2會新建一個task運行,假設它的taskId爲201,那麼若是這時再從D2啓動D1或者D3,則又會再建立一個task,所以,若操做步驟爲other->D2->D1,這過程就涉及到了3個task了。

4二、TCP和UDP的區別:

一、TCP協議在傳送數據段的時候要給段標記;UDP協議不用

二、TCP協議可靠;UDP協議不可靠

三、TCP協議是面向鏈接,UDP協議採用無鏈接

四、TCP協議負載較高,採用虛擬電路;UDP採用無鏈接

五、TCP協議的發送方面須要確認接受方是否接受到數據段

六、TCP協議採用窗口技術和流程制

Android開發筆試題

1.java.io包中定義了多個流類型來實現輸入和輸出功能,能夠從不一樣的角度對其進行分類,按功能分爲:(C),若是爲讀取的內容進行處理後再輸出,須要使用下列哪一種流?(G)

A、  輸入流和輸出流

B、   字節流和字符流

C、   節點流和處理流

D、  File Stream

E、   Pipe Stream

F、    Random Stream

G、  Filter Stream

2.下列代碼的執行結果是:(B)

public class Test3{

public static void main(String[] args){

System.out.print(100%3);

System.out.print(「,」);

System.out.println(100%3.0);

}

}

A、1,1

B、1,1.0

C、1.0,1

D、1.0,1.0

 

3.如下程序的運行結果爲(B)

Public class IfTest{

Public static void main(String args[]){

Int x = 3;

Int y = 1;

If(x == y)

System.out.println(「Not Equal」);

Else

System.out.println(「Equal」);

}

}

A、Not Equal   B、Equal   C、無輸出    D、編譯出錯

 

4.Java語言中字符串「學Java」所佔的內存空間是(A)

A、6個字節

B、7個

字節

C、10個字節

D、11個字節

5.關於下列程序段的輸出結果,說法正確的是:(D)

Public class MyClass{

Static int i;

Public static void main(String args[]){

System.out.println(i);

}

}

A、        有錯誤,變量i沒有初始化

B、         Null

C、         1

D、        0

6.下列哪些語句關於內存回收的說明是正確的?(B)

A、        程序員必須建立一個線程來釋放內存

B、         內存回收程序負責釋放無用內存

C、         內存回收程序容許程序員直接釋放內存

D、        內存回收程序能夠在指定的時間釋放內存對象

7.下列程序段的輸出結果是:(B)

void complicatedexpression_r () {

int x = 20;

int y = 30;

boolean b;

b = x > 50 && y > 60 | | x > 50 && y < -60 | | x < -50 && y > 60 | | x < -50 && y < -60;

System.out.println(b);

}

A、true     B、false    C、1    D、0

8.Android中下列屬於Intent的做用的是(C)

A、        實現應用程序間的數據共享

B、         是一段長的生命週期,沒有用戶界面的程序,能夠保持應用在後臺運行,而不會由於切換頁面而消失

C、         能夠實現界面間的切換,能夠包含動做和動做數據,鏈接四大組件的紐帶

D、        處理一個應用程序總體性的工做

9.下列屬於SAX解析XML文件的優勢的是(B)

A、        將整個文檔樹在內存中,便於操做,支持刪除、修改、從新排列等多種功能

B、         不用事先調入整個文檔,佔用資源少

C、         整個文檔調入內存,浪費時間和空間

D、        不是長久駐留在內存,數據不是持久的,事件事後,若沒有保存數據,數據就會消失

10.下面的對自定義style的方式正確的是(A)

A、<resources>

      <style name=」myStyle」>

      <item name=」android:layout_width」>fill_parent</item>

      </style>    

      </resources>

B、<style name=」myStyle」>

      <item name=」android:layout_width」>fill_parent</item>

      </style>

C、<resources>

      <item name=」android:layout_width」>fill_parent</item>

      </resources>

D、<resources>

      <style name=」android:layout_width」>fill_parent</style>

      </resources>

11.在SQL Server 2005中運行以下T-SQL語句,假定SALES表中有多少行數據,執行查詢以後的結果是(D)

BEGIN TRANSACTION A

                     Update SALES Set qty=30 WHERE qty<30

                     BEGIN TRANSACTION B

                           Update SALES Set qty=40 WHERE qty<40

                           Update SALES Set qty=50 WHERE qty<50

Update SALES Set qty=60 WHERE qty<60

                     COMMIT TRANSACTION B

                     COMMIT TRANSACTION A

A、  SALES表中qty列最小值大於等於30

B、   SALES表中qty列最小值大於等於40

C、   SALES表中qty列的數據所有爲50

D、  SALES表中qty列最小值大於等於60

12.請簡述下ContentProvider是如何實現數據共享的。

答:建立一個屬於你本身的ContentProvider或者將你的數據添加到一個已存在的ContentProvider中,前提是有相同數據類型而且有寫入ContentProvider的權限。

13.Android項目工程下面的assets目錄的做用是什麼?(B)

A、放置應用到的圖片資源

B、主要放置多媒體等數據文件

C、放置字符串,顏色,數據等常量數據

D、放置一些與UI相應的佈局文件,都是XML文件

14.下列對Android NDK的理解正確的是(ABCD)

A、NDK是一系列工具的集合

B、NDK提供了一份穩定、功能有限的API頭文件聲明

C、使「Java+C」的開發方式終於轉正,成爲官方支持的開發方式

D、NDK將是Android平臺支持 C 開發的開端

15.咱們都知道Handler是線程與Activity通訊的橋樑,若是線程處理不當,你的機器就會變得越慢,那麼線程銷燬的方法是(A)

A、onDestroy()

B、onClear()

C、onFinish()

D、onStop()

16.簡述Android應用程序結構是哪些?

Linux Kernel(Linux內核)

Libraries(系統運行庫或者是C/C++核心庫)

ApplicationFramework(開發框架包)

Applications(核心應用程序)

17.如何將一個Activity設置成窗口的樣式?

在AndroidManiFest.xml中定義Activity的地方添加一句話android:theme=」@android:style/Theme.Dialog」或android:theme=」@android:style/Theme.Translucent」就變成半透明的

18.List、Set、Map是否繼承自Collection接口?

List、Set是;Map不是

19.什麼是IntentService?有何優勢?

普通的Service,默認運行在UI main主線程SDK給咱們提供方便的,帶有異步處理的Service類,異步處理的方法是onHandleIntent()(處理耗時的操做)。

20.爲何要用ContentProvider?它和SQL的實現上有什麼差異?

屏蔽了數據儲存的細節,對用戶透明,用戶只須要關心操做數據的Uri就能夠了,對應的參數,不一樣App之間共享,操做數據可是ContentProvider還能夠去增刪改查本地文件,XML文件的讀取、更改,網絡數據讀取更改SQL也有增刪改查的方法。

21.下面說法正確的是:(A)

public class Test{

public static void main(String []args){

static int []num = new int[10];

System.out.println(num[10]);

}

}

A、            程序編譯失敗

B、            程序編譯成功,運行時拋出異常

C、            程序編譯成功,運行時輸出結果爲0

D、            若是將System.out.println(num[10])修改成    System.out.println(num[9])輸出結果將爲0

 

解釋:只有類才存在靜態的變量,方法只能對靜態變量操做,不能在方法內試圖定義靜態變量,不然的話會拋出編譯錯誤。靜態變量的本意是爲了讓全部的對象共享這個變量。若是在方法裏面定義靜態變量的話就存在邏輯錯誤,也達不到你想要的目的。由於在方法中定義靜態變量根本沒有他的任何意義。任何對象都有本身的方法,即便是靜態方法,方法內的變量也是在方法調用時纔開始分配內存,因此想給方法中的變量成靜態的在邏輯上存在問題。

22.下列語句中,正確的是:(ABD)

A、int Se, a, b = 10;(整型賦值給整型)

B、char c, d = ‘a’;(字符型賦值)

C、float e = 0.0d;(雙精度型不能轉換成單精度型,轉換須要強制類型轉換)

D、double c = 0.0f;(單精度型能夠複製給雙精度型)

23.下面哪個是Java最基本元素:(D

A、接口

B、方法

C、包

D、對象(java是面向對象編程)

24.下面關於抽象類的理解。錯誤的是:(A

A、構造方法能夠聲明抽象類型

B、抽象方法必須被子類的方法覆蓋

C、不容許實現抽象方法

D、方法申明中,static和abstract不能同時存在

 

解釋:java抽象類的構造方法和普通類的構造方法同樣都是用來初始化類,只是抽象類的構造方法不能直接調用 由於抽象類不能實現實例

可是一旦一個普通類繼承了抽象類 便也能夠在構造函數中調用其抽象類的構造函數,也可使用其方法,能夠這麼理解吧 抽象類就是一個不能實例化的不一樣類,不過若是方法加了abstract那麼就必須在子類裏面重寫了。

 

25Anonymous Inner Class(匿名內部類)是否能夠extends(繼承)其它類,是否能夠implements(實現)interface(接口)

答:匿名內部類是沒有名字的內部類,不能extends()繼承其它類,但一個內部類能夠做爲一個接口,由另外一個內部類實現。

 

26.談談Android的優缺點和不足之處:

優勢:

一、     開放性、開源

二、     掙脫運營商束縛

三、     豐富的硬件選擇

四、     不受任何限制的開發商

五、     無縫結合的Google應用

缺點:

一、     安全問題、隱私問題                                 

二、     賣手機的不是最大運營商

三、     運營商對Android手機仍然有影響

四、     山寨化嚴重

五、     過度依賴開發商,缺少標準配置

 

27、請解釋下android程序運行時權限與文件系統權限的區別:

     

      Android程序執行須要讀取到安全敏感項必須在androidmanifest.xml中聲明相關權限請求,打電話,訪問網絡,獲取座標,讀寫sd卡,讀寫聯繫人等…安裝的時候會提示用戶…文件系統的權限是linux權限。好比說sharedpreference裏面的

Context.Mode.private , Context.Mode.word_read_able

Context.Mode_word_writeable

28、如何退出Activity?如何安全退出已調用多個ActivityApplication

一、拋異常強制退出:該方法經過拋異常,使程序Force Close。

驗證能夠,可是,須要解決的問題是,如何使程序結束掉,而不彈出Force Close的窗口。

二、記錄打開的Activity:每打開一個Activity,就記錄下來。在須要退出時,關閉每個Activity便可。

三、發送特定廣播:在須要結束應用時,發送一個特定的廣播,每一個Activity收到廣播後,關閉便可。

四、遞歸退出:在打開新的Activity時使用startActivityForResult,而後本身加標誌,在onActivityResult中處理,遞歸關閉。

上面是網上的一些作法。其實能夠經過intent的flag來實現。Intent.setFlag(FLAG_ACTIVITY_CLEAR_TOP)激活一個新的activity,而後在新的ativity的oncreate方法裏面finish掉。

 

29、不用serviceB頁面爲音樂播放,從A跳轉到B,再返回,如何使音樂繼續播放?

 

答:這個問題問的很山寨,默認不作任何處理,B裏面的音樂都能播放。遇到問題,能夠隨機應變,靈活發揮,多考慮些細節,好比說這個題就能夠這樣說,說說你對startActivityForResult的理解()

A開啓B的時候,用startActivityForResult()方法,B返回的時候把播放的狀態信息返回給A,A繼續播放音樂。

 

30、系統上安裝了多種瀏覽器,可否指定某瀏覽器訪問指定頁面?

答:找到瀏覽器的瀏覽器意圖,傳遞數據的URI,激活這個意圖。

 

31.android虛擬機的理解,包括內存管理機制垃圾回收機制

虛擬機很小,空間很小,談談移動設備的虛擬機的大小限制 16,談談加載圖片的時候怎麼處理大照片的,垃圾回收,沒有引用的對象,在某個時刻會被系統gc(回收)掉。

 

32.ListView如何提升其效率?

複用convertview ,異步加載數據,分頁加載數據,使用靜態的view對象避免建立過多的view.

 

33.啓動應用後,改變系統語言,應用的語言會改變麼?

不會。

 

34.說說Activity,Intent,Service是什麼關係?

麥當勞和麥當娜的關係、這種問題,就講下activity,講一下service,說一下經過intent去激活組件,傳遞數據,說本身項目中有這樣一個網絡更新的功能,顯示界面就用的activity,後臺有個Service每隔半個小時都去訪問下服務器獲取更新的數據…開啓服務用的是intent來開啓。

 

35.下列選項哪一個不是Activity啓動的方法?(A

A、goToActivity

B、startActivity

C、startActivityFromChild

D、startActivityFoResult

 

36、解析xml的方法有(CDE

A、字符器類型

B、流方式

C、dom

D、SAX

E、PULL

37.內部類有時爲何要用final修飾?

內部類使用外部的變量時,其實就是內部類對象引用外部變量,當內部類引用外部變量時,外部變量可能死亡或者銷燬,爲了延續生命週期,就要把外部變量複製到內部類中,可是複製不具備統一性,因此用final保證其統一性!

相關文章
相關標籤/搜索