第一篇:android面試題
選擇題(包括多選)
1.下列哪些語句關(guān)于內(nèi)存回收的說明是正確的?
A、程序員必須創(chuàng)建一個線程來釋放內(nèi)存
B、內(nèi)存回收程序負(fù)責(zé)釋放無用內(nèi)存
C、內(nèi)存回收程序允許程序員直接釋放內(nèi)存
D、內(nèi)存回收程序可以在指定的時間釋放內(nèi)存對象
2.下面異常是屬于Runtime Exception 的是
A、ArithmeticException
B、IllegalArgumentException
C、NullPointerException
D、BufferUnderflowException
3.Math.round(-11.5)等于多少
A、11 ,-11
B、11 ,-12
C、12 ,-11
D、12 ,-1
24.下列程序段的輸出結(jié)果是:
void complicatedexpression_r(){
int x=20, 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、011.activity
5.對一些資源以及狀態(tài)的操作保存,最好是保存在生命周期的哪個函數(shù)中進(jìn)行
A、onPause()
B、onCreate()
C、onResume()
D、onStart()
6.Intent傳遞數(shù)據(jù)時,下列的數(shù)據(jù)類型哪些可以被傳遞
A、Serializable
B、charsequence
C、Parcelable
D、Bundle
7.android 中下列屬于Intent的作用的是
A、實(shí)現(xiàn)應(yīng)用程序間的數(shù)據(jù)共享
B、是一段長的生命周期,沒有用戶界面的程序,可以保持應(yīng)用在后臺運(yùn)行,而不會因?yàn)榍袚Q頁面而消失
C、可以實(shí)現(xiàn)界面間的切換,可以包含動作和動作數(shù)據(jù),連接四大組件的紐帶
D、處理一個應(yīng)用程序整體性的工作
8.下列屬于SAX解析xml文件的優(yōu)點(diǎn)的是
A、將整個文檔樹在內(nèi)存中,便于操作,支持刪除,修改,重新排列等多種功能
B、不用事先調(diào)入整個文檔,占用資源少
C、整個文檔調(diào)入內(nèi)存,浪費(fèi)時間和空間
D、不是長久駐留在內(nèi)存,數(shù)據(jù)不是持久的,事件過后,若沒有保存數(shù)據(jù),數(shù)據(jù)就會
消失
9.在android中使用SQLiteOpenHelper這個輔助類時,可以生成一個數(shù)據(jù)庫,并可以對數(shù)據(jù)庫版本進(jìn)行管理的方法可以是()
A、getWriteableDatabase()
B、getReadableDatabase()
C、getDatabase()
D、getAbleDatabase()
10.android 關(guān)于service生命周期的onCreate()和onStart()說法正確的是
A、當(dāng)?shù)谝淮螁拥臅r候先后調(diào)用onCreate()和onStart()方法
B、當(dāng)?shù)谝淮螁拥臅r候只會調(diào)用onCreate()方法
C、如果service已經(jīng)啟動,將先后調(diào)用onCreate()和onStart()方法
D、如果service已經(jīng)啟動,只會執(zhí)行onStart()方法,不在執(zhí)行onCreate()方法
11.下面是屬于GLSurFaceView特性的是
A、管理一個surface,這個surface就是一塊特殊的內(nèi)存,能直接排版到android的視圖view上。
B、管理一個EGL display,它能讓opengl把內(nèi)容渲染到上述的surface上。
C、讓渲染器在獨(dú)立的線程里運(yùn)作,和UI線程分離。
D、可以直接從內(nèi)存或者DMA等硬件接口取得圖像數(shù)據(jù)
12.下面在AndroidManifest.xml文件中注冊BroadcastReceiver方式正確的A、
android:name=“android.provider.action.NewBroad”/> B、 android:name=“android.provider.action.NewBroad”/> C、 android:name=“android.provider.action.NewBroad”/> D、 android:name=“android.provider.action.NewBroad”/> 13.關(guān)于ContenValues類說法正確的是 A、他和Hashtable比較類似,也是負(fù)責(zé)存儲一些名值對,但是他存儲的名值對當(dāng)中的名是String類型,而值都是基本類型 B、他和Hashtable比較類似,也是負(fù)責(zé)存儲一些名值對,但是他存儲的名值對當(dāng)中的名是任意類型,而值都是基本類型 C、他和Hashtable比較類似,也是負(fù)責(zé)存儲一些名值對,但是他存儲的名值對當(dāng)中的名,可以為空,而值都是String類型 D、他和Hashtable比較類似,也是負(fù)責(zé)存儲一些名值對,但是他存儲的名值對當(dāng)中的名是String類型,而值也是String類型 14.我們都知道Hanlder是線程與Activity通信的橋梁,如果線程處理不當(dāng),你的機(jī)器就會變得越慢,那么線程銷毀的方法是 A、onDestroy() B、onClear() C、onFinish() D、onStop() 15.下面退出Activity錯誤的方法是 A、finish() B、拋異常強(qiáng)制退出 C、System.exit() D、onStop() 16.下面屬于android的動畫分類的有 A、Tween B、Frame C、Draw D、Animation 17.下面關(guān)于Android dvm的進(jìn)程和Linux的進(jìn)程,應(yīng)用程序的進(jìn)程說法正確的是 A、DVM指dalivk的虛擬機(jī).每一個Android應(yīng)用程序都在它自己的進(jìn)程中運(yùn)行,不一定擁有一個獨(dú)立的Dalvik虛擬機(jī)實(shí)例.而每一個DVM都是在Linux中的一個進(jìn)程,所以說可以認(rèn)為是同一個概念.B、DVM指dalivk的虛擬機(jī).每一個Android應(yīng)用程序都在它自己的進(jìn)程中運(yùn)行,不一定擁有一個獨(dú)立的Dalvik虛擬機(jī)實(shí)例.而每一個DVM不一定都是在Linux中的一個進(jìn)程,所以說不是一個概念.C、DVM指dalivk的虛擬機(jī).每一個Android應(yīng)用程序都在它自己的進(jìn)程中運(yùn)行,都擁有一個獨(dú)立的Dalvik虛擬機(jī)實(shí)例.而每一個DVM不一定都是在Linux中的一個進(jìn)程,所以說不是一個概念.D、DVM指dalivk的虛擬機(jī).每一個Android應(yīng)用程序都在它自己的進(jìn)程中運(yùn)行,都擁有一個獨(dú)立的 Dalvik虛擬機(jī)實(shí)例.而每一個DVM都是在Linux中的一個進(jìn)程,所以說可以認(rèn)為是同一個概念.18.Android項(xiàng)目工程下面的assets目錄的作用是什么 A、放置應(yīng)用到的圖片資源。 B、主要放置多媒體等數(shù)據(jù)文件 C、放置字符串,顏色,數(shù)組等常量數(shù)據(jù) D、放置一些與UI相應(yīng)的布局文件,都是xml文件 19.關(guān)于res/raw目錄說法正確的是 A、這里的文件是原封不動的存儲到設(shè)備上不會轉(zhuǎn)換為二進(jìn)制的格式 B、這里的文件是原封不動的存儲到設(shè)備上會轉(zhuǎn)換為二進(jìn)制的格式 C、這里的文件最終以二進(jìn)制的格式存儲到指定的包中 D、這里的文件最終不會以二進(jìn)制的格式存儲到指定的包中 20.下列對android NDK的理解正確的是 A、NDK是一系列工具的集合B、NDK 提供了一份穩(wěn)定、功能有限的 API 頭文件聲明。 C、使 “Java+C” 的開發(fā)方式終于轉(zhuǎn)正,成為官方支持的開發(fā)方式 D、NDK 將是 Android平臺支持 C 開發(fā)的開端 問答題: 1.系統(tǒng)上安裝了多種瀏覽器,能否指定某瀏覽器訪問指定頁面?請說明原由。 2.Activity和Task的啟動模式有哪些? 每種含義是什么? 3.SQLite支持事務(wù)嗎? 添加刪除如何提高性能? 4.對Intent、Activity、廣播、Service等的理解 5、handler機(jī)制的原理 Android 面試題(有詳細(xì)答案) 附帶答案,共100分 一、選擇題(30題,每題1.5分,共45分) 1.java.io包中定義了多個流類型來實(shí)現(xiàn)輸入和輸出功能,可以從不同的角度對其進(jìn)行分類,按功能分為:(c),如果為讀取的內(nèi)容進(jìn)行處理后再輸出,需要使用下列哪種流?() A、輸入流和輸出流B、字節(jié)流和字符流C、節(jié)點(diǎn)流和處理流 D、File streamE、Pipe streamF、Random streamG、Filter stream 2.下列代碼的執(zhí)行結(jié)果是:() 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.在繼承中,關(guān)于構(gòu)造方法的說明,下列說法錯誤的是() A、子類無條件的繼承父類的無參構(gòu)造方法,B、子類可以引用父類中的有參構(gòu)造方法,使用super關(guān)鍵字,C、如果子類沒有構(gòu)造方法,則父類無參構(gòu)造方法作為自已的構(gòu)造方法,D、如果子類有無參構(gòu)造方法,而父類的無參構(gòu)造方法則被覆蓋。 4.以下程序的運(yùn)行結(jié)果為() 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 equalB、EqualC、無輸出D、編譯出錯 5.Java語言中字符串“學(xué)Java”所占的內(nèi)存空間是() A.6個字節(jié) B.7個字節(jié) C.10個字節(jié) D.11個字節(jié) 6.關(guān)于下列程序段的輸出結(jié)果,說法正確的是:() public class MyClass{ static int i; public static void main(String argv[]){ System.out.println(i); } } A、有錯誤,變量i沒有初始化。 B、null C、1 D、0 7.下列哪些語句關(guān)于內(nèi)存回收的說明是正確的?() A、程序員必須創(chuàng)建一個線程來釋放內(nèi)存 B、內(nèi)存回收程序負(fù)責(zé)釋放無用內(nèi)存 C、內(nèi)存回收程序允許程序員直接釋放內(nèi)存 D、內(nèi)存回收程序可以在指定的時間釋放內(nèi)存對象 8.下面異常是屬于Runtime Exception 的是()(多選) A、ArithmeticException B、IllegalArgumentException C、NullPointerException D、BufferUnderflowException 9.Math.round(11.5)等于多少().Math.round(-11.5)等于多少().A、11 ,-11B、11 ,-12C、12 ,-11D、12 ,-12 10.下列程序段的輸出結(jié)果是:() void complicatedexpression_r(){ int x=20, 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、trueB、falseC、1D、0 11.activity對一些資源以及狀態(tài)的操作保存,最好是保存在生命周期的哪個函數(shù)中進(jìn)行 () A、onPause()B、onCreate()C、onResume()D、onStart() 12.Intent傳遞數(shù)據(jù)時,下列的數(shù)據(jù)類型哪些可以被傳遞()(多選) A、SerializableB、charsequenceC、ParcelableD、Bundle 13.android 中下列屬于Intent的作用的是() A、實(shí)現(xiàn)應(yīng)用程序間的數(shù)據(jù)共享 B、是一段長的生命周期,沒有用戶界面的程序,可以保持應(yīng)用在后臺運(yùn)行,而不會 因?yàn)榍袚Q頁面而消失 C、可以實(shí)現(xiàn)界面間的切換,可以包含動作和動作數(shù)據(jù),連接四大組件的紐帶 D、處理一個應(yīng)用程序整體性的工作 14.下列屬于SAX解析xml文件的優(yōu)點(diǎn)的是() A、將整個文檔樹在內(nèi)存中,便于操作,支持刪除,修改,重新排列等多種功能 B、不用事先調(diào)入整個文檔,占用資源少 C、整個文檔調(diào)入內(nèi)存,浪費(fèi)時間和空間 D、不是長久駐留在內(nèi)存,數(shù)據(jù)不是持久的,事件過后,若沒有保存數(shù)據(jù),數(shù)據(jù)就會 消失 15.下面的對自定style的方式正確的是() A、 B、 C、 D、 16.在android中使用Menu時可能需要重寫的方法有()。(多選) A、onCreateOptionsMenu() B、onCreateMenu() C、onOptionsItemSelected() D、onItemSelected() 17.在SQL Server Management Studio 中運(yùn)行下列T-SQL語句,其輸出值()。 SELECT @@IDENTITY A、可能為0.1 B、可能為3 C、不可能為-100 D、肯定為0 18.在SQL Server 2005中運(yùn)行如下T-SQL語句,假定SALES表中有多行數(shù)據(jù),執(zhí)行查詢之后的結(jié)果是()。 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列的數(shù)據(jù)全部為50 D、SALES表中qty列最小值大于等于60 19.在android中使用SQLiteOpenHelper這個輔助類時,可以生成一個數(shù)據(jù)庫,并可以對數(shù) 據(jù)庫版本進(jìn)行管理的方法可以是() A、getWriteableDatabase() B、getReadableDatabase() C、getDatabase() D、getAbleDatabase() 20.android 關(guān)于service生命周期的onCreate()和onStart()說法正確的是()(多選題) A、當(dāng)?shù)谝淮螁拥臅r候先后調(diào)用onCreate()和onStart()方法 B、當(dāng)?shù)谝淮螁拥臅r候只會調(diào)用onCreate()方法 C、如果service已經(jīng)啟動,將先后調(diào)用onCreate()和onStart()方法 D、如果service已經(jīng)啟動,只會執(zhí)行onStart()方法,不在執(zhí)行onCreate()方法 21.下面是屬于GLSurFaceView特性的是()(多選) A、管理一個surface,這個surface就是一塊特殊的內(nèi)存,能直接排版到android的視圖view上。 B、管理一個EGL display,它能讓opengl把內(nèi)容渲染到上述的surface上。 C、讓渲染器在獨(dú)立的線程里運(yùn)作,和UI線程分離。 D、可以直接從內(nèi)存或者DMA等硬件接口取得圖像數(shù)據(jù) 22.下面在AndroidManifest.xml文件中注冊BroadcastReceiver方式正確的是() A、 android:name=“android.provider.action.NewBroad”/> B、 android:name=“android.provider.action.NewBroad”/> C、 android:name=“android.provider.action.NewBroad”/> D、 android:name=“android.provider.action.NewBroad”/> 23.關(guān)于ContenValues類說法正確的是() A、他和Hashtable比較類似,也是負(fù)責(zé)存儲一些名值對,但是他存儲的名值對當(dāng)中的名是String類型,而值都是基本類型 B、他和Hashtable比較類似,也是負(fù)責(zé)存儲一些名值對,但是他存儲的名值對當(dāng)中的名是任意類型,而值都是基本類型 C、他和Hashtable比較類似,也是負(fù)責(zé)存儲一些名值對,但是他存儲的名值對當(dāng)中的名,可以為空,而值都是String類型 D、他和Hashtable比較類似,也是負(fù)責(zé)存儲一些名值對,但是他存儲的名值對當(dāng)中的名是String類型,而值也是String類型 24.我們都知道Hanlder是線程與Activity通信的橋梁,如果線程處理不當(dāng),你的機(jī)器就會變得越慢,那么線程銷毀的方法是() A、onDestroy() B、onClear() C、onFinish() D、onStop() 25.下面退出Activity錯誤的方法是() A、finish() B、拋異常強(qiáng)制退出 C、System.exit() D、onStop() 26.下面屬于android的動畫分類的有()(多項(xiàng)) A、TweenB、Frame C、Draw D、Animation 27.下面關(guān)于Android dvm的進(jìn)程和Linux的進(jìn)程,應(yīng)用程序的進(jìn)程說法正確的是() A、DVM指dalivk的虛擬機(jī).每一個Android應(yīng)用程序都在它自己的進(jìn)程中運(yùn)行,不一定擁有一個獨(dú)立的Dalvik虛擬機(jī)實(shí)例.而每一個DVM都是在Linux 中的一個進(jìn)程,所以說可以認(rèn)為是同一個概念.B、DVM指dalivk的虛擬機(jī).每一個Android應(yīng)用程序都在它自己的進(jìn)程中運(yùn)行,不一定擁有一個獨(dú)立的Dalvik虛擬機(jī)實(shí)例.而每一個DVM不一定都是在Linux 中的一個進(jìn)程,所以說不是一個概念.C、DVM指dalivk的虛擬機(jī).每一個Android應(yīng)用程序都在它自己的進(jìn)程中運(yùn)行,都擁有一個獨(dú)立的Dalvik虛擬機(jī)實(shí)例.而每一個DVM不一定都是在Linux 中的一個進(jìn)程,所以說不是一個概念.D、DVM指dalivk的虛擬機(jī).每一個Android應(yīng)用程序都在它自己的進(jìn)程中運(yùn)行,都擁有一個獨(dú)立的Dalvik虛擬機(jī)實(shí)例.而每一個DVM都是在Linux 中的一個進(jìn)程,所以說可以認(rèn)為是同一個概念.28.Android項(xiàng)目工程下面的assets目錄的作用是什么 A、放置應(yīng)用到的圖片資源。 B、主要放置多媒體等數(shù)據(jù)文件 C、放置字符串,顏色,數(shù)組等常量數(shù)據(jù) D、放置一些與UI相應(yīng)的布局文件,都是xml文件 29..關(guān)于res/raw目錄說法正確的是() A、這里的文件是原封不動的存儲到設(shè)備上不會轉(zhuǎn)換為二進(jìn)制的格式 B、這里的文件是原封不動的存儲到設(shè)備上會轉(zhuǎn)換為二進(jìn)制的格式 C、這里的文件最終以二進(jìn)制的格式存儲到指定的包中 D、這里的文件最終不會以二進(jìn)制的格式存儲到指定的包中 30.下列對android NDK的理解正確的是() A、NDK是一系列工具的集合B、NDK 提供了一份穩(wěn)定、功能有限的 API 頭文件聲明。 C、使 “Java+C” 的開發(fā)方式終于轉(zhuǎn)正,成為官方支持的開發(fā)方式 D、NDK 將是 Android平臺支持 C 開發(fā)的開端 二.填空題(每題2分,共20分) 1.我們用___ ____來定義一個整數(shù),用___ ____來定義一個字符類型,稱為原始數(shù)據(jù)類型。 2.android中常用的四個布局是?s 3.android 的四大組件是? 4.java.io包中的__________和______________類主要用于對對象(Object)的讀寫。 5.android 中service的實(shí)現(xiàn)方法是:_______-和___________-。 6.activity一般會重載7個方法用來維護(hù)其生命周期,除了onCreate(),onStart(),onDestory()外還有_______-,_________ ,_________ ,_____________。 7.android的數(shù)據(jù)存儲的方式____________,___________,________ ,_______-,________。 8.當(dāng)啟動一個Activity并且新的Activity執(zhí)行完后需要返回到啟動它的Activity來執(zhí)行的回調(diào)函數(shù)是_____________()。 9.請使用命令行的方式創(chuàng)建一個名字為myAvd,sdk版本為2.2,sd卡是在d盤的根目錄下,名字為scard.img,并指定屏幕大小HVGA.____________________________________。 10.程序運(yùn)行的結(jié)果是:_______________。 public class Example{ String str=new String(“good”); char[]ch={'a','b','c'}; public static void main(String args[]){ Example ex=new Example(); ex.change(ex.str,ex.ch); System.out.print(ex.str+“ and ”); Sytem.out.print(ex.ch); } public void change(String str,char ch[]){ str=“test ok”; ch[0]='g'; } } 三 簡答編程題(共35分) 1簡述Android應(yīng)用程序結(jié)構(gòu)是哪些?(7分) Android應(yīng)用程序結(jié)構(gòu)是:請繼承SQLiteOpenHelper實(shí)現(xiàn):(10分) 1).創(chuàng)建一個版本為1的“diaryOpenHelper.db”的數(shù)據(jù)庫,2).同時創(chuàng)建一個 “diary” 表(包含一個_id主鍵并自增長,topic字符型100長度,content字符型1000長度) 3).在數(shù)據(jù)庫版本變化時請刪除diary表,并重新創(chuàng)建出diary表。 3.頁面上現(xiàn)有ProgressBar控件progressBar,請用書寫線程以10秒的的時間完成其進(jìn)度顯示工作。(10分) Android面試題總結(jié) 1.簡述Activity的生命周期? 1)Activity的生命周期通過7個生命周期方法onCreate(),onRestart(), onStart(), onResume(), onPause(),onStop(),onDestroy()來體現(xiàn)。2)其中6個生命周期方法是成對對應(yīng)起來的,哪里創(chuàng)建的對象,一般應(yīng)該在其對應(yīng)的方法中銷毀。 onCreate()--onDestroy()onStart()--onStop()onResume()--onPause()3)當(dāng)程序啟動之后,第一個Activity經(jīng)過的生命周期方法是:onCreate()→onStart()→ onResume()方法,當(dāng)?shù)谝粋€Activity A啟動第二個Activity B的時候(備注:第二個Activity完全遮蓋住第一個Activity,并且這個過程中沒有出現(xiàn)點(diǎn)擊Home鍵,或者第一個Activity被殺死等異常情況,并且兩個Activity的啟動模式是標(biāo)準(zhǔn)模式),這兩個Activity經(jīng)歷的生命周期方法是: A onPause()→ B onCreate()→ B onStart()→ B onResume()→ A onStop()→(此時Activity A已經(jīng)在回退棧的最低端,Activity B已經(jīng)在Activity A的上面,在回退棧的最頂端)當(dāng)通過點(diǎn)擊后退鍵退出Activity B的時候: (此時Activity B 彈出回退棧)→ B onPause()→ A onRestart()→ A onStart()→ A onResume()→ B onStop()→ B onDestroy()此時B 被銷毀 2.簡述Service的生命周期? 1).如果在Activity中通過調(diào)用startService()方法啟動一個Service的話,那么生命周期是: onCreate()→ onStartCommand()→ 運(yùn)行中 →(如果自己或者客戶端(如Activity)調(diào)用了stop Service的方法的話)→ onDestroy()2).如果在Activity中通過調(diào)用bindService()方法啟動一個Service的話,那么生命周期是: onCreate()→ onBind()→ 運(yùn)行中 →(如果有客戶端(Activity)調(diào)用了unBindService()方法與Service解除綁定時)→ onUnbind()→ onDestroy()3.有幾種控件布局的方式? 1)RelativeLayout:相對布局,可以根據(jù)相對位置來調(diào)整控件的位置。推薦使用相對布局,更利于屏幕的自適應(yīng)。2)LinearLayout:線性布局,控件之間的水平排列或者垂直排列。但是如果要想構(gòu)建復(fù)雜布局,要進(jìn)行多層的LinearLayout布局嵌套,但是這樣會運(yùn)行布局載入效率。 3)FrameLayout:幀布局,控件與控件之間處于上下疊加的狀態(tài)。 備注:還有兩個已經(jīng)不怎么用的布局:TableLayout:表格布局 AbsoluteLayout 絕對布局。 布局實(shí)現(xiàn)方式有兩種:xml文件靜態(tài)實(shí)現(xiàn),代碼動態(tài)實(shí)現(xiàn)。 一般xml文件中可以實(shí)現(xiàn)布局控制的話,就不建議放在代碼中實(shí)現(xiàn)布局控制,因?yàn)樵趚ml文件中實(shí)現(xiàn)布局控制,可以做到布局與代碼分離。4.有幾種數(shù)據(jù)存儲方式,分別是什么? 1)SQLite數(shù)據(jù)庫存儲結(jié)構(gòu)化數(shù)據(jù)。 2)文件存儲:分為內(nèi)部存儲和外部存儲(SD卡)兩種存儲方式。3)SharedPreferences共享參數(shù),鍵值對形式存儲。4)網(wǎng)絡(luò)存儲。 5.IntentService與Service有什么區(qū)別? IntentService是Service的子類 1)Service如果要處理異步請求(如耗時操作)的話,需要自己啟動一個worker thread,如果啟動多個worker thread來處理相關(guān)事務(wù)的話,各線程之間無法很好的控制。而IntentService可以將多個異步請求的Intent放入隊(duì)列中,封裝了一個開啟worker thread的onHandleIntent()方法,來依次處理放入隊(duì)列中的Intent,只有一個worker thread在運(yùn)行,同一時刻只有一個Intent被處理,當(dāng)一個Intent處理完了之后才會處理另外一個Intent。 2)Service可以通過startService()或者bindService()方法來啟動,而IntentService則是通過startService()方法來啟動。3)Service適合多線程處理異步請求。而IntentService則適合處理需要排隊(duì)的請求。 6.StartService與bindService之間的區(qū)別? 1)StartService啟動了Service之后無法與Activity之間進(jìn)行通信,與現(xiàn)有的Activity分離,即使Activity被殺掉了之后,Service還可以運(yùn)行,同時通過設(shè)置Service的粘性,還可以讓Service被殺掉之后,可以自啟動。而bindService啟動Service之后,與綁定的Activity之間有關(guān)系,可以依據(jù)Server/Client模式來進(jìn)行通信(binder客戶端主動請求模式,或者通過信使),但是無法設(shè)置Serrvice的粘性。2)StartService啟動的Service,Activity中可以調(diào)用stopService()方法來結(jié)束一個Service,或者通過Service自己調(diào)用stopSelf()方法來結(jié)束Service。而bindService只能通過Activity()來調(diào)用unbindService()方法來結(jié)束Service,Service會調(diào)用onUnBind()方法,以及onDestroy()方法。 7.ArrayAdapter BaseAdapter CursorAdapter的區(qū)別? ArrayAdpter CursorAdapter都是BaseAdapter的子類。都是用來填充那些含有item的控件。 1)主要區(qū)別是數(shù)據(jù)來源不同。ArrayAdapter數(shù)據(jù)來源是Object數(shù)組,CursorAdapter數(shù)據(jù)來源是數(shù)據(jù)庫的Cursor,而BaseAdapter適合創(chuàng)建復(fù)雜自定義的item內(nèi)容,通過繼承BaseAdapter類,重寫相關(guān)方法來實(shí)現(xiàn)。 8.Handler與Looper之間的關(guān)系? 1)Handler和Looper的關(guān)系就好比,坐地鐵過安檢時候:每一個人可以理解為一個Handler,一個人的一個或者多個東西看做Message而循環(huán)滾動的檢查臺裝置可以看做是Looper,而要檢查的東西排成隊(duì)列可以理解為MessageQueue消息隊(duì)列。 2)Looper是Handler和MessageQuene之間的橋梁,Looper將Handler發(fā)送過的消息放入MessageQueue,同時Looper也將MessageQueue中的Message發(fā)送給Handler來處理。 9.res文件夾與assets文件夾有什么區(qū)別? 1)res文件夾中的資源在會在R.java文件中生成ID,代碼中可以直接通過R.id的形式來訪問。而assets文件夾中的資源不會在R.java文件中生成ID,需要通過AssetsManager通過IO流的方式來訪問。 2)res文件夾中的文件會被壓縮,而assets文件中的文件不會被壓縮。 3)Res不能自定義目錄名,不支持多層目錄。而assets支持自定義目錄名,支持多層目錄。 10.廣播接收器有幾種注冊方式,分別是什么? 1)動態(tài)注冊:在代碼中注冊,創(chuàng)建一個IntentFilter(意圖過濾器)對象,設(shè)置想要就收的廣播,在onCreate()方法中通過調(diào)用registerReceiver()方法來注冊廣播接收器,在onDestroy()方法中通過調(diào)用unregisterReceiver()方法來注銷廣播接收器。2)靜態(tài)注冊:在AndroidManifest.xml文件中注冊, 饞貓工作室 1.簡要解釋一下Activity、Service、Broadcase、BroadcaseReceiver、ContentProvider、ContentResolver、Intent、Intent filter 2.說一下項(xiàng)目中最擅長的方向。例如:界面美化,網(wǎng)絡(luò)請求,數(shù)據(jù)存儲,Camera 相關(guān),圖片處理,視頻方向。簡述下你用過哪些技術(shù),或者是開源包。 3.Handler機(jī)制和原理 4.寫出幾種你認(rèn)為可以提高Android程序運(yùn)行效率的方法 5.AsyncTask 的異步機(jī)制和普通線程有什么區(qū)別,分別有哪些優(yōu)缺點(diǎn)。 6.多線程間通信和多進(jìn)程之間通信有什么不同,分別怎么實(shí)現(xiàn)? 7.請介紹下Android的數(shù)據(jù)存儲方式。請寫出熟悉程度,并對應(yīng)舉例適合不同 存儲方式的數(shù)據(jù) 8.說幾個你認(rèn)為非常好的軟件或者游戲,概括下優(yōu)缺點(diǎn)并且說下如果讓你開發(fā) 這個軟件,你如何構(gòu)架,可能用到哪些技術(shù)點(diǎn),對于你來說有哪些技術(shù)難點(diǎn)。 9.簡述三個你遇到印象最深刻的bug,你是如何解決的,是否完全解決問題。 10.含有圖片的listview 如何進(jìn)行優(yōu)化其流暢度和圖片加載方向的內(nèi)存管理 11.如果讓你獨(dú)立完成一個項(xiàng)目(此項(xiàng)目11個界面,需要和網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)交互,需要在本地采用多種方式進(jìn)行數(shù)據(jù)存儲,有圖片等相關(guān)操作),請簡述下你工作順序。 12.如果讓你分配給3個同事一個項(xiàng)目(此項(xiàng)目11個界面,需要和網(wǎng)絡(luò)進(jìn)行數(shù)據(jù) 交互,需要在本地采用多種方式進(jìn)行數(shù)據(jù)存儲,有圖片等相關(guān)操作),請簡述下你將如何分配。 13.ScrollView嵌套listview是否會出現(xiàn)bug,為什么會出現(xiàn)bug,如果解決 14.說說mvc模式的原理,它在android中怎樣運(yùn)用,你在具體工作中怎樣具體 運(yùn)用mvc模式的。 15.編程題: 用最有效率的方法算出2乘以128等於幾? 16.Android 中如何調(diào)用c++的方法。你是否可以熟練使用NDK編程 17.用Java語言實(shí)現(xiàn)的各種排序,包括插入排序、冒泡排序、選擇排序、Shell 排序、快速排序、歸并排序、堆排序等。18.寫出怎么把前邊的表查詢成后邊結(jié)果的格式的Sqlite語句 yearmonth amount結(jié)果 199111.1year m1m2m3m4 199121.21991 1.1 1.2 1.3 1.4 199131.31992 2.1 2.2 2.3 2.4 199141.4 199212.1 199222.2 199232.3 199242.4 19.寫一個最簡單的外連接查詢(表名1:a 表名2:b)的sqlite語句 20.封裝正式版APK時候有那些注意事項(xiàng),上線到多個應(yīng)用商城需要注意那些。 注:請認(rèn)真選擇其中6到10題,用簡練語言作答。 饞貓工作室 一.Java的問題 1.回調(diào)函數(shù)是?有什么用?好處是?一般什么時候用?手寫個例子代碼。 2.Java抽象類是什么?你怎么理解抽象類?為什么要有抽象類?好處,壞處。3.Public,protected,private,默認(rèn) 這四個修飾符的區(qū)別和范圍。4.Java中泛型的概念,如何實(shí)現(xiàn)的? 5.Switch中支持的類型(注意string和long)6.內(nèi)部類有幾種?它們的區(qū)別。 7.設(shè)計模式(單例模式,工場方法模式等,它們的優(yōu)缺點(diǎn))8.GC機(jī)制,垃圾的清除算法 9.創(chuàng)建線程的幾種方式 10.多線程的同步問題 11.寫一下socket通信的大致代碼 12.單線程和多線程處理哪個好(分單cup和多cpu)13.虛擬內(nèi)存的概念,內(nèi)存置換算法 14.強(qiáng)連接,軟連接,弱連接,虛連接的概念和使用舉例 15.Android開發(fā)如何進(jìn)行算法和界面的優(yōu)化 16.為什么內(nèi)部類可以直接訪問外邊類的成員 17.外部類可以直接訪問內(nèi)部類的成員嗎?(不能)為什么?那應(yīng)該怎樣實(shí)現(xiàn)訪問 18.Hashmap內(nèi)部是怎么實(shí)現(xiàn)的,他的動態(tài)內(nèi)存大小怎么變,和hashtable的區(qū)別與聯(lián)系? 19.Hashmap同步嗎?如何實(shí)現(xiàn)同步。20.線程之間如何實(shí)現(xiàn)通信 21.線程和進(jìn)程的區(qū)別,線程有自己的棧和存儲機(jī)制嗎? 22.Threadlocal知道嗎?作用 23.Jvm和dvm的區(qū)別與聯(lián)系 24.線程池,消息池,常量池的概念 25.棧和堆的區(qū)別 26.Hashmap的遍歷方式有幾種,各種的區(qū)別,手寫下例子代碼 27.Java支持中文嗎? 28.Volatile的作用,是否可靠它實(shí)現(xiàn)同步安全? 29.如何實(shí)現(xiàn)同步 30.Android的動畫實(shí)現(xiàn)有哪幾種方式,區(qū)別 31.Java中繼承有哪些特征 32.抽象類和接口的區(qū)別 33.Exception的概念,運(yùn)行時,非運(yùn)行時的區(qū)別 34.Java中一次跳出多個循環(huán)的方式 35.死鎖的概念和必要條件,解決方法 36.Tcp和udp的區(qū)別 37.Tap的3次握手過程,大概畫一畫 38.內(nèi)部碎片與外部碎片的概念和區(qū)別 39.反射機(jī)制 40.C++與java的區(qū)別 二.Android的問題 41.android中內(nèi)存泄露是?產(chǎn)生原因?解決方法? 42.Android中內(nèi)存溢出是?產(chǎn)生原因?解決方法?它和內(nèi)存泄露有什么區(qū)別? 43.Activity的生命周期,三種狀態(tài) 44.Activity的4種啟動模式 45.Android的四大組件 46.說說intent 47.Androidmanifest的作用 48.Android系統(tǒng)有幾層,了解application framework層嗎? 49.Service的啟動方式和它們的區(qū)別 50.用過自定義控件沒?怎么實(shí)現(xiàn)自定義控件,手寫下例子代碼。 51.知道Fragment嗎?哪個版本出的?它和activity的區(qū)別,它的生命周期?用它的好處?它和activity如何實(shí)現(xiàn)通信,相互調(diào)用。 52.Fragment怎么實(shí)習(xí)按back鍵進(jìn)行回退而不是一次性退出它所依附的activity? 53.Android如何實(shí)現(xiàn)定時器(timer,alarmManager)54.handler機(jī)制的概念,應(yīng)用 55.Handler如何實(shí)現(xiàn)定時器效果(3種)56.兩個activity之間如何通信(各種方式)57.用過eclipse的debug調(diào)試沒?怎么用的 58.知道多少eclipse的快捷鍵 59.結(jié)束一個進(jìn)程的幾種方式? 60.進(jìn)程間如何實(shí)現(xiàn)通信 61.Android如何實(shí)現(xiàn)信息存儲 62.知道volley等一些第三方庫嗎? 63.Android對view的更新方式 64.知道一些代碼優(yōu)化的方式嗎? 65.Handler和thread的區(qū)別 66.Android中http訪問的兩種方式 67.Asynctask的概念,作用,與handler的區(qū)別 68.Android中如何實(shí)現(xiàn)畫圖,手寫個簡單的例子 69.一個子線程是否可用直接修改ui界面?為什么 70.Service和Intentservice的區(qū)別與聯(lián)系 71.Context是什么? 72.Boardcast的概念,作用,有序廣播和無序廣播的區(qū)別,粘性廣播的概念 73.Boardcast的靜態(tài)注冊和動態(tài)注冊的區(qū)別 74.Aidl,如何實(shí)現(xiàn)進(jìn)程間通信 75.Contentprovider概念和作用 76.Json比xml的好處,他們的區(qū)別 77.Listview的概念,優(yōu)化,如何實(shí)現(xiàn)每項(xiàng)的布局不同 78.Touch事件的分發(fā)過程 79.Linearlayout的Weight屬性的作用 80.Android有哪幾種布局,它們的5種布局的區(qū)別 81.Finish和exit(0)的區(qū)別 82.Sqlite的事務(wù)處理 83.Android實(shí)現(xiàn)可滑動tab的3種方式,它們的區(qū)別和各種的好處 84.Android中跨進(jìn)程通信的4種方式,(正好對應(yīng)四大組件)85.Handler的內(nèi)存泄露是? 86.Android系統(tǒng)提供的與用戶交互的兩種機(jī)制(回調(diào)函數(shù),監(jiān)聽器)87.Ndk的理解,jni的理解 88.Toast的概念,它的時間設(shè)置的兩種方式 89.Activity的狀態(tài)保存的方式 90.Activity的5個進(jìn)程等級 91.Surface了解嗎? 92.程序閃退的原因有哪些,怎么解決 93.Get和post的區(qū)別 94.Android有哪三種菜單?區(qū)別 95.實(shí)現(xiàn)序列化的兩種方式,比較它們的優(yōu)缺點(diǎn) 96.Broadcast receiver的生命周期 97.Sharedpreference的作用,底層實(shí)現(xiàn) 98.如何實(shí)現(xiàn)一個前臺的service,簡單寫下代碼例子 99.按home鍵activity的生命周期變化 100.Activity由a跳到b,哪些生命周期會執(zhí)行 101.橫豎屏切換,activity的生命周期,configchange的應(yīng)用 102.如何設(shè)置activity為對話框風(fēng)格 103.Activity,window,view的聯(lián)系和區(qū)別 104.Style和theme的聯(lián)系和區(qū)別 105.知道android平臺主流的幾種消息推送方式嗎? 106.Viewstub的概念,作用,好處 107.Android數(shù)字簽名 108.Zygote的概念 109.Adb的概念,作用。Adb死掉了怎么辦? 110.Ddms和teaceview的區(qū)別,他們的作用 111.MVC模式概念 112.Android的事件傳遞機(jī)制 113.圖片的緩存機(jī)制 114.Android內(nèi)存優(yōu)化及管理 115.如何實(shí)現(xiàn)低版本可用高版本的新的東西 116.Gallery畫廊的使用 117.http如何實(shí)現(xiàn)長連接 118.Android是不是linux?為什么? 119.三.算法和寫代碼 74.寫數(shù)的后序遍歷(非遞歸)75.實(shí)現(xiàn)一個字符串的全排列 76.快速排序,堆排序,歸并排序 77.如何在大量數(shù)據(jù)中快速找到中位數(shù)? 78.如何判斷一個數(shù)是不是2的n次方第二篇:Android面試題(十一)
第三篇:Android面試題總結(jié)
第四篇:華為Android面試題
第五篇:Android最全的面試題總結(jié)