Java 面試/筆試題神整理html
1.抽象:
抽象就是忽略一個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象並不打算了解所有問題,而只是選擇其中的一部分,暫時不用部分細節。抽象包括兩個方面,一是過程抽象,二是數據抽象。
2.繼承:
繼承是一種聯結類的層次模型,而且容許和鼓勵類的重用,它提供了一種明確表述共性的方法。對象的一個新類能夠從現有的類中派生,這個過程稱爲類繼 承。新類繼承了原始類的特性,新類稱爲原始類的派生類(子類),而原始類稱爲新類的基類(父類)。派生類能夠從它的基類那裏繼承方法和實例變量,而且類可 以修改或增長新的方法使之更適合特殊的須要。
3.封裝:
封裝是把過程和數據包圍起來,對數據的訪問只能經過已定義的界面。面向對象計算始於這個基本概念,即現實世界能夠被描繪成一系列徹底自治、封裝的對象,這些對象經過一個受保護的接口訪問其餘對象。
4. 多態性:
多態性是指容許不一樣類的對象對同一消息做出響應。多態性包括參數化多態性和包含多態性。多態性語言具備靈活、抽象、行爲共享、代碼共享的優點,很好的解決了應用程序函數同名問題。 java
基本數據類型包括byte、int、char、long、float、double、boolean和short。
java.lang.String類是final類型的,所以不能夠繼承這個類、不能修改這個類。爲了提升效率節省空間,咱們應該用StringBuffer類 linux
Java 提供兩種不一樣的類型:引用類型和原始類型(或內置類型)。Int是java的原始數據類型,Integer是java爲int提供的封裝類。Java爲每一個原始類型提供了封裝類。
原始類型封裝類
booleanBoolean
charCharacter
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
引用類型和原始類型的行爲徹底不一樣,而且它們具備不一樣的語義。引用類型和原始類型具備不一樣的特徵和用法,它們包括:大小和速度問題,這種類型以哪 種類型的數據結構存儲,當引用類型和原始類型用做某個類的實例數據時所指定的缺省值。對象引用實例變量的缺省值爲 null,而原始類型實例變量的缺省值與它們的類型有關。android
JAVA平臺提供了兩個類:String和StringBuffer,它們能夠儲存和操做字符串,即包含多個字符的字符數據。這個String類 提供了數值不可改變的字符串。而這個StringBuffer類提供的字符串進行修改。當你知道字符數據要改變的時候你就能夠使用 StringBuffer。典型地,你能夠使用StringBuffers來動態構造字符數據。c++
異常表示程序運行過程當中可能出現的非正常狀態,運行時異常表示虛擬機的一般操做中可能遇到的異常,是一種常見運行錯誤。java編譯器要求方法必須聲明拋出可能發生的非運行時異常,可是並不要求必須聲明拋出未被捕獲的運行時異常。 程序員
Servlet被服務器實例化後,容器運行其init方法,請求到達時運行其service方法,service方法自動派遣運行與請求對應的doXXX方法(doGet,doPost)等,當服務器決定將實例銷燬的時候調用其destroy方法。
與cgi的區別在於servlet處於服務器進程中,它經過多線程方式運行其service方法,一個實例能夠服務於多個請求,而且其實例通常不會銷燬,而CGI對每一個請求都產生新的進程,服務完成後就銷燬,因此效率上低於servlet。 web
ArrayList和Vector都是使用數組方式存儲數據,此數組元素數大於實際存儲的數據以便增長和插入元素,它們都容許直接按序號索引元 素,可是插入元素要涉及數組元素移動等內存操做,因此索引數據快而插入數據慢,Vector因爲使用了synchronized方法(線程安全),一般性 能上較ArrayList差,而LinkedList使用雙向鏈表實現存儲,按序號索引數據須要進行前向或後向遍歷,可是插入數據時只須要記錄本項的先後 項便可,因此插入速度較快。 面試
EJB包括Session Bean、Entity Bean、Message Driven Bean,基於JNDI、RMI、JAT等技術實現。
SessionBean在J2EE應用程序中被用來完成一些服務器端的業務操做,例如訪問數據庫、調用其餘EJB組件。EntityBean被用來表明應用系統中用到的數據。
對於客戶機,SessionBean是一種非持久性對象,它實現某些在服務器上運行的業務邏輯。
對於客戶機,EntityBean是一種持久性對象,它表明一個存儲在持久性存儲器中的實體的對象視圖,或是一個由現有企業應用程序實現的實體。
Session Bean 還能夠再細分爲 Stateful Session Bean 與 Stateless Session Bean ,這兩種的 Session Bean均可以將系統邏輯放在 method之中執行,不一樣的是 Stateful Session Bean 能夠記錄呼叫者的狀態,所以一般來講,一個使用者會有一個相對應的 Stateful Session Bean 的實體。Stateless Session Bean 雖然也是邏輯組件,可是他卻不負責記錄使用者狀態,也就是說當使用者呼叫 Stateless Session Bean 的時候,EJB Container 並不會找尋特定的 Stateless Session Bean 的實體來執行這個 method。換言之,極可能數個使用者在執行某個 Stateless Session Bean 的 methods 時,會是同一個 Bean 的 Instance 在執行。從內存方面來看, Stateful Session Bean 與 Stateless Session Bean 比較, Stateful Session Bean 會消耗 J2EE Server 較多的內存,然而 Stateful Session Bean 的優點卻在於他能夠維持使用者的狀態。算法
Collection是集合類的上級接口,繼承與他的接口主要有Set 和List.
Collections是針對集合類的一個幫助類,他提供一系列靜態方法實現對各類集合的搜索、排序、線程安全化等操做。 sql
十、&和&&的區別。
&是位運算符,表示按位與運算,&&是邏輯運算符,表示邏輯與(and)。
十一、HashMap和Hashtable的區別。
HashMap是Hashtable的輕量級實現(非線程安全的實現),他們都完成了Map接口,主要區別在於HashMap容許空(null)鍵值(key),因爲非線程安全,效率上可能高於Hashtable。
HashMap容許將null做爲一個entry的key或者value,而Hashtable不容許。
HashMap把Hashtable的contains方法去掉了,改爲containsvalue和containsKey。由於contains方法容易讓人引發誤解。
Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實現。
最大的不一樣是,Hashtable的方法是Synchronize的,而HashMap不是,在多個線程訪問Hashtable時,不須要本身爲它的方法實現同步,而HashMap 就必須爲之提供外同步。
Hashtable和HashMap採用的hash/rehash算法都大概同樣,因此性能不會有很大的差別。
十二、final, finally, finalize的區別。
final 用於聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。
finally是異常處理語句結構的一部分,表示老是執行。
finalize是Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,能夠覆蓋此方法提供垃圾收集時的其餘資源回收,例如關閉文件等。
1三、sleep() 和 wait() 有什麼區別?
sleep是線程類(Thread)的方法,致使此線程暫停執行指定時間,給執行機會給其餘線程,可是監控狀態依然保持,到時後會自動恢復。調用sleep不會釋放對象鎖。
wait是Object類的方法,對此對象調用wait方法致使本線程放棄對象鎖,進入等待此對象的等待鎖定池,只有針對此對象發出notify方法(或notifyAll)後本線程才進入對象鎖定池準備得到對象鎖進入運行狀態。
1四、Overload和Override的區別。Overloaded的方法是否能夠改變返回值的類型?
方法的重寫Overriding和重載Overloading是Java多態性的不一樣表現。重寫Overriding是父類與子類之間多態性的一 種表現,重載Overloading是一個類中多態性的一種表現。若是在子類中定義某方法與其父類有相同的名稱和參數,咱們說該方法被重寫 (Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被"屏蔽"了。若是在一個類中定義了多個同名的方 法,它們或有不一樣的參數個數或有不一樣的參數類型,則稱爲方法的重載(Overloading)。Overloaded的方法是能夠改變返回值的類型。
1五、error和exception有什麼區別?
error 表示恢復不是不可能但很困難的狀況下的一種嚴重問題。好比說內存溢出。不可能期望程序能處理這樣的狀況。
exception 表示一種設計或實現問題。也就是說,它表示若是程序運行正常,從不會發生的狀況。
1六、同步和異步有何異同,在什麼狀況下分別使用他們?舉例說明。
若是數據將在線程間共享。例如正在寫的數據之後可能被另外一個線程讀到,或者正在讀的數據可能已經被另外一個線程寫過了,那麼這些數據就是共享數據,必須進行同步存取。
當應用程序在對象上調用了一個須要花費很長時間來執行的方法,而且不但願讓程序等待方法的返回時,就應該使用異步編程,在不少狀況下采用異步途徑每每更有效率。
1七、abstract class和interface有什麼區別?
聲明方法的存在而不去實現它的類被叫作抽象類(abstract class),它用於要建立一個體現某些基本行爲的類,併爲該類聲明方法,但不能在該類中實現該類的狀況。不能建立abstract 類的實例。然而能夠建立一個變量,其類型是一個抽象類,並讓它指向具體子類的一個實例。不能有抽象構造函數或抽象靜態方法。Abstract 類的子類爲它們父類中的全部抽象方法提供實現,不然它們也是抽象類爲。取而代之,在子類中實現該方法。知道其行爲的其它類能夠在類中實現這些方法。
接口(interface)是抽象類的變體。在接口中,全部方法都是抽象的。多繼承性可經過實現這樣的接口而得到。接口中的全部方法都是抽象的, 沒有一個有程序體。接口只能夠定義static final成員變量。接口的實現與子類類似,除了該實現類不能從接口定義中繼承行爲。當類實現特殊接口時,它定義(即將程序體給予)全部這種接口的方法。 而後,它能夠在實現了該接口的類的任何對象上調用接口的方法。因爲有抽象類,它容許使用接口名做爲引用變量的類型。一般的動態聯編將生效。引用能夠轉換到 接口類型或從接口類型轉換,instanceof 運算符能夠用來決定某對象的類是否實現了接口。
1八、heap和stack有什麼區別。
棧是一種線形集合,其添加和刪除元素的操做應在同一段完成。棧按照後進先出的方式進行處理。
堆是棧的一個組成元素
1九、forward 和redirect的區別
forward是服務器請求資源,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,而後把這些內容再發給瀏覽器,瀏覽器根本不知道服務器發送的內容是從哪兒來的,因此它的地址欄中仍是原來的地址。
redirect就是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器從新去請求那個地址,通常來講瀏覽器會用剛纔請求的全部參數從新請求,因此session,request參數均可以獲取。
20、EJB與JAVA BEAN的區別?
Java Bean 是可複用的組件,對Java Bean並無嚴格的規範,理論上講,任何一個Java類均可以是一個Bean。但一般狀況下,因爲Java Bean是被容器所建立(如Tomcat)的,因此Java Bean應具備一個無參的構造器,另外,一般Java Bean還要實現Serializable接口用於實現Bean的持久性。Java Bean實際上至關於微軟COM模型中的本地進程內COM組件,它是不能被跨進程訪問的。Enterprise Java Bean 至關於DCOM,即分佈式組件。它是基於Java的遠程方法調用(RMI)技術的,因此EJB能夠被遠程訪問(跨進程、跨計算機)。但EJB必須被佈署在 諸如Webspere、WebLogic這樣的容器中,EJB客戶從不直接訪問真正的EJB組件,而是經過其容器訪問。EJB容器是EJB組件的代 理,EJB組件由容器所建立和管理。客戶經過容器來訪問真正的EJB組件。
2一、Static Nested Class 和 Inner Class的不一樣。
Static Nested Class是被聲明爲靜態(static)的內部類,它能夠不依賴於外部類實例被實例化。而一般的內部類須要在外部類實例化後才能實例化。
2二、JSP中動態INCLUDE與靜態INCLUDE的區別?
動態INCLUDE用jsp:include動做實現 <jsp:include page="included.jsp" flush="true" />它老是會檢查所含文件中的變化,適合用於包含動態頁面,而且能夠帶參數。
靜態INCLUDE用include僞碼實現,定不會檢查所含文件的變化,適用於包含靜態頁面<%@ include file="included.htm" %>
2三、何時用assert。
assertion(斷言)在軟件開發中是一種經常使用的調試方式,不少開發語言中都支持這種機制。在實現中,assertion就是在程序中的一條語句,它 對一個boolean表達式進行檢查,一個正確程序必須保證這個boolean表達式的值爲true;若是該值爲false,說明程序已經處於不正確的狀 態下,系統將給出警告或退出。通常來講,assertion用於保證程序最基本、關鍵的正確性。assertion檢查一般在開發和測試時開啓。爲了提升 性能,在軟件發佈後,assertion檢查一般是關閉的。
2四、GC是什麼? 爲何要有GC?
GC是垃圾收集的意思(Gabage Collection),內存處理是編程人員容易出現問題的地方,忘記或者錯誤的內存回收會致使程序或系統的不穩定甚至崩潰,Java提供的GC功能能夠 自動監測對象是否超過做用域從而達到自動回收內存的目的,Java語言沒有提供釋放已分配內存的顯示操做方法。
2五、short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯?
short s1 = 1; s1 = s1 + 1; (s1+1運算結果是int型,須要強制轉換類型)
short s1 = 1; s1 += 1;(能夠正確編譯)
2六、Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math.round(11.5)==12
Math.round(-11.5)==-11
round方法返回與參數最接近的長整數,參數加1/2後求其floor.
2七、String s = new String("xyz");建立了幾個String Object?
兩個
2八、設計4個線程,其中兩個線程每次對j增長1,另外兩個線程對j每次減小1。寫出程序。
如下程序使用內部類實現線程,對j增減的時候沒有考慮順序問題。
public class ThreadTest1{
private int j;
public static void main(String args[]){
ThreadTest1 tt=new ThreadTest1();
Inc inc=tt.new Inc();
Dec dec=tt.new Dec();
for(int i=0;i<2;i++){
Thread t=new Thread(inc);
t.start();
t=new Thread(dec);
t.start();
}
}
private synchronized void inc(){
j++;
System.out.println(Thread.currentThread().getName()+"-inc:"+j);
}
private synchronized void dec(){
j--;
System.out.println(Thread.currentThread().getName()+"-dec:"+j);
}
class Inc implements Runnable{
public void run(){
for(int i=0;i<100;i++){
inc();
}
}
}
class Dec implements Runnable{
public void run(){
for(int i=0;i<100;i++){
dec();
}
}
}
}
2九、Java有沒有goto?
java中的保留字,如今沒有在java中使用。
30、啓動一個線程是用run()仍是start()?
啓動一個線程是調用start()方法,使線程所表明的虛擬處理機處於可運行狀態,這意味着它能夠由JVM調度並執行。這並不意味着線程就會當即運行。run()方法能夠產生必須退出的標誌來中止一個線程。
3一、EJB包括(SessionBean,EntityBean)說出他們的生命週期,及如何管理事務的?
SessionBean:Stateless Session Bean 的生命週期是由容器決定的,當客戶機發出請求要創建一個Bean的實例時,EJB容器不必定要建立一個新的Bean的實例供客戶機調用,而是隨便找一個現 有的實例提供給客戶機。當客戶機第一次調用一個Stateful Session Bean 時,容器必須當即在服務器中建立一個新的Bean實例,並關聯到客戶機上,之後此客戶機調用Stateful Session Bean 的方法時容器會把調用分派到與此客戶機相關聯的Bean實例。
EntityBean:Entity Beans能存活相對較長的時間,而且狀態是持續的。只要數據庫中的數據存在,Entity beans就一直存活。而不是按照應用程序或者服務進程來講的。即便EJB容器崩潰了,Entity beans也是存活的。Entity Beans生命週期可以被容器或者 Beans本身管理。
EJB經過如下技術管理實務:對象管理組織(OMG)的對象實務服務(OTS),Sun Microsystems的Transaction Service(JTS)、Java Transaction API(JTA),開發組(X/Open)的XA接口。
3二、應用服務器有那些?
BEA WebLogic Server,IBM WebSphere Application Server,Oracle9i Application Server,jBoss,Tomcat
3三、給我一個你最多見到的runtime exception。
ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException
3四、接口是否可繼承接口? 抽象類是否可實現(implements)接口? 抽象類是否可繼承實體類(concrete class)?
接口能夠繼承接口。抽象類能夠實現(implements)接口,抽象類是否可繼承實體類,但前提是實體類必須有明確的構造函數。
3五、List, Set, Map是否繼承自Collection接口?
List,Set是,Map不是
3六、說出數據鏈接池的工做機制是什麼?
J2EE服務器啓動時會創建必定數量的池鏈接,並一直維持很多於此數目的池鏈接。客戶端程序須要鏈接時,池驅動程序會返回一個未使用的池鏈接並將 其表記爲忙。若是當前沒有空閒鏈接,池驅動程序就新建必定數量的鏈接,新建鏈接的數量有配置參數決定。當使用的池鏈接調用完成後,池驅動程序將此鏈接表記 爲空閒,其餘調用就能夠使用這個鏈接。
3七、abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized?
都不能
3八、數組有沒有length()這個方法? String有沒有length()這個方法?
數組沒有length()這個方法,有length的屬性。String有有length()這個方法。
3九、Set裏的元素是不能重複的,那麼用什麼方法來區分重複與否呢? 是用==仍是equals()? 它們有何區別?
Set裏的元素是不能重複的,那麼用iterator()方法來區分重複與否。equals()是判讀兩個Set是否相等。
equals()和==方法決定引用值是否指向同一對象equals()在類中被覆蓋,爲的是當兩個分離的對象的內容和類型相配的話,返回真值。
40、構造器Constructor是否可被override?
構造器Constructor不能被繼承,所以不能重寫Overriding,但能夠被重載Overloading。
4一、是否能夠繼承String類?
String類是final類故不能夠繼承。
4二、switch是否能做用在byte上,是否能做用在long上,是否能做用在String上?
switch(expr1)中,expr1是一個整數表達式。所以傳遞給 switch 和 case 語句的參數應該是 int、 short、 char 或者 byte。long,string 都不能做用於swtich。
4三、try {}裏有一個return語句,那麼緊跟在這個try後的finally {}裏的code會不會被執行,何時被執行,在return前仍是後?
會執行,在return前執行。
4四、編程題: 用最有效率的方法算出2乘以8等於幾?
2 << 3
4五、兩個對象值相同(x.equals(y) == true),但卻可有不一樣的hash code,這句話對不對?
不對,有相同的hash code。
4六、當一個對象被看成參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後的結果,那麼這裏究竟是值傳遞仍是引用傳遞?
是值傳遞。Java 編程語言只有值傳遞參數。當一個對象實例做爲一個參數被傳遞到方法中時,參數的值就是對該對象的引用。對象的內容能夠在被調用的方法中改變,但對象的引用是永遠不會改變的。
4七、當一個線程進入一個對象的一個synchronized方法後,其它線程是否可進入此對象的其它方法?
不能,一個對象的一個synchronized方法只能由一個線程訪問。
4八、編程題: 寫一個Singleton出來。
Singleton模式主要做用是保證在Java應用程序中,一個類Class只有一個實例存在。
通常Singleton模式一般有幾種種形式:
第一種形式: 定義一個類,它的構造函數爲private的,它有一個static的private的該類變量,在類初始化時實例化,經過一個public的getInstance方法獲取對它的引用,繼而調用其中的方法。
public class Singleton {
private Singleton(){}
//在本身內部定義本身一個實例,是否是很奇怪?
//注意這是private 只供內部調用
private static Singleton instance = new Singleton();
//這裏提供了一個供外部訪問本class的靜態方法,能夠直接訪問
public static Singleton getInstance() {
return instance;
}
}
第二種形式:
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//這個方法比上面有所改進,不用每次都進行生成對象,只是第一次
//使用時生成實例,提升了效率!
if (instance==null)
instance=new Singleton();
return instance; }
}
其餘形式:
定義一個類,它的構造函數爲private的,全部方法爲static的。
通常認爲第一種形式要更加安全些
4九、Java的接口和C++的虛類的相同和不一樣處。
因爲Java不支持多繼承,而有可能某個類或對象要使用分別在幾個類或對象裏面的方法或屬性,現有的單繼承機制就不能知足要求。與繼承相比,接口 有更高的靈活性,由於接口中沒有任何實現代碼。當一個類實現了接口之後,該類要實現接口裏面全部的方法和屬性,而且接口裏面的屬性在默認狀態下面都是 public static,全部方法默認狀況下是public.一個類能夠實現多個接口。
50、Java中的異常處理機制的簡單原理和應用。
當JAVA程序違反了JAVA的語義規則時,JAVA虛擬機就會將發生的錯誤表示爲一個異常。違反語義規則包括2種狀況。一種是JAVA類庫內置 的語義檢查。例如數組下標越界,會引起IndexOutOfBoundsException;訪問null的對象時會引起 NullPointerException。另外一種狀況就是JAVA容許程序員擴展這種語義檢查,程序員能夠建立本身的異常,並自由選擇在什麼時候用 throw關鍵字引起異常。全部的異常都是java.lang.Thowable的子類。
5一、垃圾回收的優勢和原理。並考慮2種回收機制。
Java語言中一個顯著的特色就是引入了垃圾回收機制,使c++程序員最頭疼的內存管理的問題迎刃而解,它使得Java程序員在編寫程序的時候不 再須要考慮內存管理。因爲有個垃圾回收機制,Java中的對象再也不有"做用域"的概念,只有對象的引用纔有"做用域"。垃圾回收能夠有效的防止內存泄露, 有效的使用能夠使用的內存。垃圾回收器一般是做爲一個單獨的低級別的線程運行,不可預知的狀況下對內存堆中已經死亡的或者長時間沒有使用的對象進行清理和 回收,程序員不能實時的調用垃圾回收器對某個對象或全部對象進行垃圾回收。回收機制有分代複製垃圾回收和標記垃圾回收,增量垃圾回收。
wait():使一個線程處於等待狀態,而且釋放所持有的對象的lock。
sleep():使一個正在運行的線程處於睡眠狀態,是一個靜態方法,調用此方法要捕捉InterruptedException異常。
notify():喚醒一個處於等待狀態的線程,注意的是在調用此方法的時候,並不能確切的喚醒某一個等待狀態的線程,而是由JVM肯定喚醒哪一個線程,並且不是按優先級。
Allnotity():喚醒全部處入等待狀態的線程,注意並非給全部喚醒線程一個對象的鎖,而是讓它們競爭。
最經常使用的集合類是 List 和 Map。 List 的具體實現包括 ArrayList 和 Vector,它們是可變大小的列表,比較適合構建、存儲和操做任何類型對象的元素列表。 List 適用於按數值索引訪問元素的情形。
Map 提供了一個更通用的元素存儲方法。 Map 集合類用於存儲元素對(稱做"鍵"和"值"),其中每一個鍵映射到一個值。
JVM中類的裝載是由ClassLoader和它的子類來實現的,Java ClassLoader 是一個重要的Java運行時系統組件。它負責在運行時查找和裝入類文件的類。
可以定義成爲一箇中文的,由於java中以unicode編碼,一個char佔2個字節,16位,因此放一箇中文是沒問題的
多線程有兩種實現方法,分別是繼承Thread類與實現Runnable接口
同步的實現方面有兩種,分別是synchronized,wait與notify
request表示HttpServletRequest對象。它包含了有關瀏覽器請求的信息,而且提供了幾個用於獲取cookie, header, 和session數據的有用的方法。
response表示HttpServletResponse對象,並提供了幾個用於設置送回 瀏覽器的響應的方法(如cookies,頭信息等)
out對象是javax.jsp.JspWriter的一個實例,並提供了幾個方法使你能用於向瀏覽器回送輸出結果。
pageContext表示一個javax.servlet.jsp.PageContext對象。它是用於方便存取各類範圍的名字空間、servlet相關的對象的API,而且包裝了通用的servlet相關功能的方法。
session表示一個請求的javax.servlet.http.HttpSession對象。Session能夠存貯用戶的狀態信息
applicaton 表示一個javax.servle.ServletContext對象。這有助於查找有關servlet引擎和servlet環境的信息
config表示一個javax.servlet.ServletConfig對象。該對象用於存取servlet實例的初始化參數。
page表示從該頁面產生的一個servlet實例
線程指在程序執行過程當中,可以執行程序代碼的一個執行單位,每一個程序至少都有一個線程,也就是程序自己。
Java中的線程有四種狀態分別是:運行、就緒、掛起、結束。
<%@page language="java" contenType="text/html;charset=gb2312" session="true" buffer="64kb" autoFlush="true" isThreadSafe="true" info="text" errorPage="error.jsp" isErrorPage="true" isELIgnored="true" pageEncoding="gb2312" import="java.sql.*"%>
isErrorPage(是否能使用Exception對象),isELIgnored(是否忽略表達式)
<%@include file="filename"%>
<%@taglib prefix="c"uri="http://......"%>
Jsp頁面中的form標籤裏的method屬性爲get時調用doGet(),爲post時調用doPost()。
web容器加載servlet,生命週期開始。經過調用servlet的init()方法進行servlet的初始化。經過調用service()方法實現,根據請求的不一樣調用不一樣的do***()方法。結束服務,web容器調用servlet的destroy()方法。
<%@ page isThreadSafe="false"%>
request,session,application,cookie等
JSP是Servlet技術的擴展,本質上是Servlet的簡易方式,更強調應用的外表表達。JSP編譯後是"類servlet"。 Servlet和JSP最主要的不一樣點在於,Servlet的應用邏輯是在Java文件中,而且徹底從表示層中的HTML裏分離開來。而JSP的狀況是 Java和HTML能夠組合成一個擴展名爲.jsp的文件。JSP側重於視圖,Servlet主要用於控制邏輯。
會話做用域ServletsJSP 頁面描述
page否是表明與一個頁面相關的對象和屬性。一個頁面由一個編譯好的 Java servlet 類(能夠帶有任何的 include 指令,可是沒有 include 動做)表示。這既包括 servlet 又包括被編譯成 servlet 的 JSP 頁面
request是是表明與 Web 客戶機發出的一個請求相關的對象和屬性。一個請求可能跨越多個頁面,涉及多個 Web 組件(因爲 forward 指令和 include 動做的關係)
session是是表明與用於某個 Web 客戶機的一個用戶體驗相關的對象和屬性。一個 Web 會話能夠也常常會跨越多個客戶機請求
application是是表明與整個 Web 應用程序相關的對象和屬性。這實質上是跨越整個 Web 應用程序,包括多個頁面、請求和會話的一個全局做用域
setAttribute(String name,Object):設置名字爲name的request的參數值
getAttribute(String name):返回由name指定的屬性值
getAttributeNames():返回request對象全部屬性的名字集合,結果是一個枚舉的實例
getCookies():返回客戶端的全部Cookie對象,結果是一個Cookie數組
getCharacterEncoding():返回請求中的字符編碼方式
getContentLength():返回請求的Body的長度
getHeader(String name):得到HTTP協議定義的文件頭信息
getHeaders(String name):返回指定名字的request Header的全部值,結果是一個枚舉的實例
getHeaderNames():返回因此request Header的名字,結果是一個枚舉的實例
getInputStream():返回請求的輸入流,用於得到請求中的數據
getMethod():得到客戶端向服務器端傳送數據的方法
getParameter(String name):得到客戶端傳送給服務器端的有name指定的參數值
getParameterNames():得到客戶端傳送給服務器端的全部參數的名字,結果是一個枚舉的實例
getParameterValues(String name):得到有name指定的參數的全部值
getProtocol():獲取客戶端向服務器端傳送數據所依據的協議名稱
getQueryString():得到查詢字符串
getRequestURI():獲取發出請求字符串的客戶端地址
getRemoteAddr():獲取客戶端的IP地址
getRemoteHost():獲取客戶端的名字
getSession([Boolean create]):返回和請求相關Session
getServerName():獲取服務器的名字
getServletPath():獲取客戶端所請求的腳本文件的路徑
getServerPort():獲取服務器的端口號
removeAttribute(String name):刪除請求中的一個屬性
J2EE自己是一個標準,一個爲企業分佈式應用的開發提供的標準平臺。
J2EE也是一個框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技術。
Public String translate (String str) {
String tempStr = "";
try {
tempStr = new String(str.getBytes("ISO-8859-1"), "GBK");
tempStr = tempStr.trim();
}
catch (Exception e) {
System.err.println(e.getMessage());
}
return tempStr;
}
區別主要答兩點:
a.條件操做只能操做布爾型的,而邏輯操做不只能夠操做布爾型,並且能夠操做數值型
b.邏輯操做不會產生短路
a: 兩種形式 dtd schema,b: 本質區別:schema自己是xml的,能夠被XML解析器解析(這也是從DTD上發展schema的根本目的),c:有DOM,SAX,STAX等
DOM:處理大型文件時其性能降低的很是厲害。這個問題是由DOM的樹結構所形成的,這種結構佔用的內存較多,並且DOM必須在解析文件以前把整個文檔裝入內存,適合對XML的隨機訪問
SAX:不現於DOM,SAX是事件驅動型的XML解析方式。它順序讀取XML文件,不須要一次所有裝載整個文件。當遇到像文件開頭,文檔結束,或者標籤開頭與標籤結束時,它會觸發一個事件,用戶經過在其回調事件中寫入處理代碼來處理XML文件,適合對XML的順序訪問
STAX:Streaming API for XML (StAX)
主要相同點:Lock能完成synchronized所實現的全部功能
主要不一樣點:Lock有比synchronized更精確的線程語義和更好的性能。synchronized會自動釋放鎖,而Lock必定要求程序員手工釋放,而且必須在finally從句中釋放。
一個完整的基於EJB的分佈式計算結構由六個角色組成,這六個角色能夠由不一樣的開發商提供,每一個角色所做的工做必須遵循Sun公司提供的EJB規 範,以保證彼此之間的兼容性。這六個角色分別是EJB組件開發者(Enterprise Bean Provider) 、應用組合者(Application Assembler)、部署者(Deployer)、EJB 服務器提供者(EJB Server Provider)、EJB 容器提供者(EJB Container Provider)、系統管理員(System Administrator)
三個對象是Remote(Local)接口、Home(LocalHome)接口,Bean類
7三、EJB容器提供的服務
主要提供聲明週期管理、代碼產生、持續性管理、安全、事務管理、鎖和併發行管理等服務。
7四、EJB規範規定EJB中禁止的操做有哪些?
1.不能操做線程和線程API(線程API指非線程對象的方法如notify,wait等),2.不能操做awt,3.不能實現服務器功能,4.不能對靜 態屬生存取,5.不能使用IO操做直接存取文件系統,6.不能加載本地庫.,7.不能將this做爲變量和返回,8.不能循環調用。
7五、remote接口和home接口主要做用
remote接口定義了業務方法,用於EJB客戶端調用業務方法。
home接口是EJB工廠用於建立和移除查找EJB實例
7六、bean 實例的生命週期
對於Stateless Session Bean、Entity Bean、Message Driven Bean通常存在緩衝池管理,而對於Entity Bean和Statefull Session Bean存在Cache管理,一般包含建立實例,設置上下文、建立EJB Object(create)、業務方法調用、remove等過程,對於存在緩衝池管理的Bean,在create以後實例並不從內存清除,而是採用緩衝 池調度機制不斷重用實例,而對於存在Cache管理的Bean則經過激活和去激活機制保持Bean的狀態並限制內存中實例數量。
7七、EJB的激活機制
以Stateful Session Bean 爲例:其Cache大小決定了內存中能夠同時存在的Bean實例的數量,根據MRU或NRU算法,實例在激活和去激活狀態之間遷移,激活機制是當客戶端調 用某個EJB實例業務方法時,若是對應EJB Object發現本身沒有綁定對應的Bean實例則從其去激活Bean存儲中(經過序列化機制存儲實例)回覆(激活)此實例。狀態變遷前會調用對應的 ejbActive和ejbPassivate方法。
7八、EJB的幾種類型
會話(Session)Bean ,實體(Entity)Bean 消息驅動的(Message Driven)Bean
會話Bean又可分爲有狀態(Stateful)和無狀態(Stateless)兩種
實體Bean可分爲Bean管理的持續性(BMP)和容器管理的持續性(CMP)兩種
7九、客服端調用EJB對象的幾個基本步驟
設置JNDI服務工廠以及JNDI服務地址系統屬性,查找Home接口,從Home接口調用Create方法建立Remote接口,經過Remote接口調用其業務方法。
80、如何給weblogic指定大小的內存?
在啓動Weblogic的腳本中(位於所在Domian對應服務器目錄下的startServerName),增長set MEM_ARGS=-Xms32m -Xmx200m,能夠調整最小內存爲32M,最大200M
8一、如何設定的weblogic的熱啓動模式(開發模式)與產品發佈模式?
能夠在管理控制檯中修改對應服務器的啓動模式爲開發或產品模式之一。或者修改服務的啓動文件或者commenv文件,增長set PRODUCTION_MODE=true。
8二、如何啓動時不需輸入用戶名與密碼?
修改服務啓動文件,增長 WLS_USER和WLS_PW項。也能夠在boot.properties文件中增長加密過的用戶名和密碼.
8三、在weblogic管理制臺中對一個應用域(或者說是一個網站,Domain)進行jms及ejb或鏈接池等相關信息進行配置後,實際保存在什麼文件中?
保存在此Domain的config.xml文件中,它是服務器的核心配置文件。
8四、說說weblogic中一個Domain的缺省目錄結構?好比要將一個簡單的helloWorld.jsp放入何目錄下,然的在瀏覽器上就 可打入http://主機:端口號//helloword.jsp就能夠看到運行結果了? 又好比這其中用到了一個本身寫的javaBean該如何辦?
Domain目錄\服務器目錄\applications,將應用目錄放在此目錄下將能夠做爲應用訪問,若是是Web應用,應用目錄須要知足 Web應用目錄要求,jsp文件能夠直接放在應用目錄中,Javabean須要放在應用目錄的WEB-INF目錄的classes目錄中,設置服務器的缺 省應用將能夠實如今瀏覽器上無需輸入應用名。
8五、在weblogic中發佈ejb需涉及到哪些配置文件
不一樣類型的EJB涉及的配置文件不一樣,都涉及到的配置文件包括ejb-jar.xml,weblogic-ejb-jar.xmlCMP實體Bean通常還須要weblogic-cmp-rdbms-jar.xml
8六、如何在weblogic中進行ssl配置與客戶端的認證配置或說說j2ee(標準)進行ssl的配置
缺省安裝中使用DemoIdentity.jks和DemoTrust.jks KeyStore實現SSL,須要配置服務器使用Enable SSL,配置其端口,在產品模式下須要從CA獲取私有密鑰和數字證書,建立identity和trust keystore,裝載得到的密鑰和數字證書。能夠配置此SSL鏈接是單向仍是雙向的。
8七、如何查看在weblogic中已經發布的EJB?
能夠使用管理控制檯,在它的Deployment中能夠查看全部已發佈的EJB
8八、CORBA是什麼?用途是什麼?
CORBA 標準是公共對象請求代理結構(Common Object Request Broker Architecture),由對象管理組織 (Object Management Group,縮寫爲 OMG)標準化。它的組成是接口定義語言(IDL), 語言綁定(binding:也譯爲聯編)和容許應用程序間互操做的協議。 其目的爲:用不一樣的程序設計語言書寫在不一樣的進程中運行,爲不一樣的操做系統開發。
8九、說說你所熟悉或據說過的j2ee中的幾種經常使用模式?及對設計模式的一些見解
Session Facade Pattern:使用SessionBean訪問EntityBean
Message Facade Pattern:實現異步調用
EJB Command Pattern:使用Command JavaBeans取代SessionBean,實現輕量級訪問
Data Transfer Object Factory:經過DTO Factory簡化EntityBean數據提供特性
Generic Attribute Access:經過AttibuteAccess接口簡化EntityBean數據提供特性
Business Interface:經過遠程(本地)接口和Bean類實現相同接口規範業務邏輯一致性
EJB架構的設計好壞將直接影響系統的性能、可擴展性、可維護性、組件可重用性及開發效率。項目越複雜,項目隊伍越龐大則越能體現良好設計的重要性。
90、說說在weblogic中開發消息Bean時的persistent與non-persisten的差異
persistent方式的MDB能夠保證消息傳遞的可靠性,也就是若是EJB容器出現問題而JMS服務器依然會將消息在此MDB可用的時候發送過來,而non-persistent方式的消息將被丟棄。
9一、Servlet執行時通常實現哪幾個方法?
public void init(ServletConfig config)
public ServletConfig getServletConfig()
public String getServletInfo()
public void service(ServletRequest request,ServletResponse response)
public void destroy()
1. 下列哪些語句關於內存回收的說明是正確的? (b ) A、 程序員必須建立一個線程來釋放內存 B、內存回收程序負責釋放無用內存 C、內存回收程序容許程序員直接釋放內存 D、內存回收程序能夠在指定的時間釋放內存對象 2. 下面異常是屬於Runtime Exception 的是(abcd)(多選) A、ArithmeticException B、IllegalArgumentException C、NullPointerException D、BufferUnderflowException 3. Math.round(11.5)等於多少(). Math.round(-11.5)等於多少(c). c A、11 ,-11 B、11 ,-12 C、12 ,-11 D、12 ,-124. 下列程序段的輸出結果是:(b ) 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.activity5. 對一些資源以及狀態的操做保存,最好是保存在生命週期的哪一個函數中進行(d) A、onPause() B、onCreate() C、 onResume() D、onStart()6. Intent傳遞數據時,下列的數據類型哪些能夠被傳遞(abcd)(多選) A、Serializable B、charsequence C、Parcelable D、Bundle7. android 中下列屬於Intent的做用的是(c) A、實現應用程序間的數據共享 B、是一段長的生命週期,沒有用戶界面的程序,能夠保持應用在後臺運行,而不會由於切換頁面而消失 C、能夠實現界面間的切換,能夠包含動做和動做數據,鏈接四大組件的紐帶 D、處理一個應用程序總體性的工做8. 下列屬於SAX解析xml文件的優勢的是(b) A、將整個文檔樹在內存中,便於操做,支持刪除,修改,從新排列等多種功能 B、不用事先調入整個文檔,佔用資源少 C、整個文檔調入內存,浪費時間和空間 D、不是長久駐留在內存,數據不是持久的,事件事後,若沒有保存數據,數據就會 消失9. 下面的對自定style的方式正確的是(a) A、 <resources> <style name="myStyle"> <itemname="android:layout_width">fill_parent</item> </style></resources> B、 <style name="myStyle"> <itemname="android:layout_width">fill_parent</item> </style> C、 <resources> <itemname="android:layout_width">fill_parent</item> </resources> D、 <resources> <stylename="android:layout_width">fill_parent</style> </resources>10. 在android中使用Menu時可能須要重寫的方法有(ac)。(多選) A、onCreateOptionsMenu() B、onCreateMenu() C、onOptionsItemSelected() D、onItemSelected()11. 在SQL Server Management Studio 中運行下列T-SQL語句,其輸出值(c)。 SELECT @@IDENTITY A、 可能爲0.1 B、 可能爲3 C、 不可能爲-100 D、 確定爲012. 在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 WHEREqty<40 Update SALES Set qty=50 WHEREqty<50 Update SALES Set qty=60 WHEREqty<60 COMMIT TRANSACTION B COMMIT TRANSACTION AA、SALES表中qty列最小值大於等於30B、SALES表中qty列最小值大於等於40C、SALES表中qty列的數據所有爲50D、SALES表中qty列最小值大於等於6013. 在android中使用SQLiteOpenHelper這個輔助類時,能夠生成一個數據庫,並能夠對數據庫版本進行管理的方法能夠是(ab) A、getWriteableDatabase()B、getReadableDatabase()C、getDatabase()D、getAbleDatabase()14. android 關於service生命週期的onCreate()和onStart()說法正確的是(ad)(多選題) A、當第一次啓動的時候前後調用onCreate()和onStart()方法 B、當第一次啓動的時候只會調用onCreate()方法 C、若是service已經啓動,將前後調用onCreate()和onStart()方法D、若是service已經啓動,只會執行onStart()方法,不在執行onCreate()方法15. 下面是屬於GLSurFaceView特性的是(abc)(多選) A、管理一個surface,這個surface就是一塊特殊的內存,能直接排版到android的視圖 view上。B、管理一個EGL display,它能讓opengl把內容渲染到上述的surface上。C、讓渲染器在獨立的線程裏運做,和UI線程分離。D、能夠直接從內存或者DMA等硬件接口取得圖像數據16. 下面在AndroidManifest.xml文件中註冊BroadcastReceiver方式正確的(a) A、<receiver android:name="NewBroad"> <intent-filter> <action android:name="android.provider.action.NewBroad"/> <action> </intent-filter> </receiver> B、<receiver android:name="NewBroad"> <intent-filter> android:name="android.provider.action.NewBroad"/> </intent-filter> </receiver> C、<receiver android:name="NewBroad"> <action android:name="android.provider.action.NewBroad"/> <action> </receiver> D、<intent-filter> <receiver android:name="NewBroad"> <action> android:name="android.provider.action.NewBroad"/> <action> </receiver></intent-filter>17. 關於ContenValues類說法正確的是(a) A、他和Hashtable比較相似,也是負責存儲一些名值對,可是他存儲的名值對當中的 名是String類型,而值都是基本類型 B、他和Hashtable比較相似,也是負責存儲一些名值對,可是他存儲的名值對當中的 名是任意類型,而值都是基本類型 C、他和Hashtable比較相似,也是負責存儲一些名值對,可是他存儲的名值對當中的 名,能夠爲空,而值都是String類型 D、他和Hashtable比較相似,也是負責存儲一些名值對,可是他存儲的名值對當中 的名是String類型,而值也是String類型18. 咱們都知道Hanlder是線程與Activity通訊的橋樑,若是線程處理不當,你的機器就會變得越慢,那麼線程銷燬的方法是(a) A、onDestroy() B、onClear() C、onFinish() D、onStop()19. 下面退出Activity錯誤的方法是(c) A、finish() B、拋異常強制退出 C、System.exit() D、onStop()20. 下面屬於android的動畫分類的有(ab)(多項) A、Tween B、Frame C、Draw D、Animation21. 下面關於Android dvm的進程和Linux的進程,應用程序的進程說法正確的是(d) A、DVM指dalivk的虛擬機.每個Android應用程序都在它本身的進程中運行,不必定擁有一個獨立的Dalvik虛擬機實例.而每個DVM都是在Linux中的一個進程,因此說能夠認爲是同一個概念. B、DVM指dalivk的虛擬機.每個Android應用程序都在它本身的進程中運行,不必定擁有一個獨立的Dalvik虛擬機實例.而每個DVM不必定都是在Linux中的一個進程,因此說不是一個概念. C、DVM指dalivk的虛擬機.每個Android應用程序都在它本身的進程中運行,都擁有一個獨立的Dalvik虛擬機實例.而每個DVM不必定都是在Linux中的一個進程,因此說不是一個概念. D、DVM指dalivk的虛擬機.每個Android應用程序都在它本身的進程中運行,都擁有一個獨立的 Dalvik虛擬機實例.而每個DVM都是在Linux中的一個進程,因此說能夠認爲是同一個概念.22. Android項目工程下面的assets目錄的做用是什麼bA、放置應用到的圖片資源。B、主要放置多媒體等數據文件C、放置字符串,顏色,數組等常量數據D、放置一些與UI相應的佈局文件,都是xml文件23. 關於res/raw目錄說法正確的是(a)A、這裏的文件是原封不動的存儲到設備上不會轉換爲二進制的格式B、這裏的文件是原封不動的存儲到設備上會轉換爲二進制的格式C、這裏的文件最終以二進制的格式存儲到指定的包中D、這裏的文件最終不會以二進制的格式存儲到指定的包中24. 下列對android NDK的理解正確的是(abcd )A、 NDK是一系列工具的集合B、 NDK 提供了一份穩定、功能有限的 API 頭文件聲明。C、 使 「Java+C」 的開發方式終於轉正,成爲官方支持的開發方式D、 NDK 將是 Android 平臺支持 C 開發的開端二.填空題25. android中經常使用的四個佈局是framlayout,linenarlayout,relativelayout和tablelayout。26. android 的四大組件是activiey,service,broadcast和contentprovide。27. java.io包中的objectinputstream和objectoutputstream類主要用於對對象(Object)的讀寫。28. android 中service的實現方法是:startservice和bindservice。29. activity通常會重載7個方法用來維護其生命週期,除了onCreate(),onStart(),onDestory() 外還有onrestart,onresume,onpause,onstop。30. android的數據存儲的方式sharedpreference,文件,SQlite,contentprovider,網絡。31. 當啓動一個Activity而且新的Activity執行完後須要返回到啓動它的Activity來執行的回調函數是startActivityResult()。32. 請使用命令行的方式建立一個名字爲myAvd,sdk版本爲2.2,sd卡是在d盤的根目錄下,名字爲scard.img,並指定屏幕大小HVGA.____________________________________。33. 程序運行的結果是:_____good and gbc__________。 public classExample{ 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'; } } 34. 在android中,請簡述jni的調用過程。(8分)1)安裝和下載Cygwin,下載 Android NDK 2)在ndk項目中JNI接口的設計 3)使用C/C++實現本地方法 4)JNI生成動態連接庫.so文件 5)將動態連接庫複製到java工程,在java工程中調用,運行java工程便可35. 簡述Android應用程序結構是哪些?(7分)Android應用程序結構是: Linux Kernel(Linux內核)、Libraries(系統運行庫或者是c/c++核心庫)、Application Framework(開發框架包)、Applications (核心應用程序)36. 請繼承SQLiteOpenHelper實現:(10分) 1).建立一個版本爲1的「diaryOpenHelper.db」的數據庫, 2).同時建立一個 「diary」 表(包含一個_id主鍵並自增加,topic字符型100 長度, content字符型1000長度) 3).在數據庫版本變化時請刪除diary表,並從新建立出diary表。publicclass DBHelper extends SQLiteOpenHelper{ public final static String DATABASENAME ="diaryOpenHelper.db"; public final static int DATABASEVERSION =1; //建立數據庫 public DBHelper(Context context,Stringname,CursorFactory factory,int version) { super(context, name, factory,version); } //建立表等機構性文件 public void onCreate(SQLiteDatabase db) { String sql ="create tablediary"+ "("+ "_idinteger primary key autoincrement,"+ "topicvarchar(100),"+ "contentvarchar(1000)"+ ")"; db.execSQL(sql); } //若數據庫版本有更新,則調用此方法 public void onUpgrade(SQLiteDatabasedb,int oldVersion,int newVersion) { String sql = "drop table ifexists diary"; db.execSQL(sql); this.onCreate(db); }}37. 頁面上現有ProgressBar控件progressBar,請用書寫線程以10秒的的時間完成其進度顯示工做。(10分)答案publicclass ProgressBarStu extends Activity { private ProgressBar progressBar = null; protected void onCreate(BundlesavedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.progressbar); //從這到下是關鍵 progressBar = (ProgressBar)findViewById(R.id.progressBar); Thread thread = new Thread(newRunnable() { @Override public void run() { int progressBarMax =progressBar.getMax(); try { while(progressBarMax!=progressBar.getProgress()) { intstepProgress = progressBarMax/10; intcurrentprogress = progressBar.getProgress(); progressBar.setProgress(currentprogress+stepProgress); Thread.sleep(1000); } } catch(InterruptedException e) { // TODO Auto-generatedcatch block e.printStackTrace(); } } }); thread.start(); //關鍵結束 } }38. 請描述下Activity的生命週期。 必調用的三個方法:onCreate() --> onStart() --> onResume(),用AAA表示(1)父Activity啓動子Activity,子Actvity退出,父Activity調用順序以下AAA --> onFreeze() --> onPause() --> onStop() --> onRestart()--> onStart(),onResume() …(2)用戶點擊Home,Actvity調用順序以下AAA --> onFreeze() --> onPause() --> onStop() -- Maybe -->onDestroy() – Maybe(3)調用finish(), Activity調用順序以下AAA --> onPause() --> onStop() --> onDestroy()(4)在Activity上顯示dialog,Activity調用順序以下AAA(5)在父Activity上顯示透明的或非全屏的activity,Activity調用順序以下AAA --> onFreeze() --> onPause()(6)設備進入睡眠狀態,Activity調用順序以下AAA --> onFreeze() --> onPause()39. 若是後臺的Activity因爲某緣由被系統回收了,如何在被系統回收以前保存當前狀態? onSaveInstanceState() 當你的程序中某一個Activity A在運行時,主動或被動地運行另外一個新的Activity B,這個時候A會執行onSaveInstanceState()。B完成之後又會來找A,這個時候就有兩種狀況:一是A被回收,二是A沒有被回收,被回收的A就要從新調用onCreate()方法,不一樣於直接啓動的是這回onCreate()裏是帶上了參數savedInstanceState;而沒被收回的就直接執行onResume(),跳過onCreate()了。40. 如何將一個Activity設置成窗口的樣式。 在AndroidManifest.xml 中定義Activity的地方一句話android:theme="@android:style/Theme.Dialog"或android:theme="@android:style/Theme.Translucent"就變成半透明的41. 如何退出Activity?如何安全退出已調用多個Activity的Application?對於單一Activity的應用來講,退出很簡單,直接finish()便可。固然,也能夠用killProcess()和System.exit()這樣的方法。可是,對於多Activity的應用來講,在打開多個Activity後,若是想在最後打開的Activity直接退出,上邊的方法都是沒有用的,由於上邊的方法都是結束一個Activity而已。固然,網上也有人說能夠。就好像有人問,在應用裏如何捕獲Home鍵,有人就會說用keyCode比較KEYCODE_HOME便可,而事實上若是不修改framework,根本不可能作到這一點同樣。因此,最好仍是本身親自試一下。那麼,有沒有辦法直接退出整個應用呢?在2.1以前,能夠使用ActivityManager的restartPackage方法。它能夠直接結束整個應用。在使用時須要權限android.permission.RESTART_PACKAGES。注意不要被它的名字迷惑。但是,在2.2,這個方法失效了。在2.2添加了一個新的方法,killBackgroundProcesses(),須要權限android.permission.KILL_BACKGROUND_PROCESSES。惋惜的是,它和2.2的restartPackage同樣,根本起不到應有的效果。另外還有一個方法,就是系統自帶的應用程序管理裏,強制結束程序的方法,forceStopPackage()。它須要權限android.permission.FORCE_STOP_PACKAGES。而且須要添加android:sharedUserId="android.uid.system"屬性一樣惋惜的是,該方法是非公開的,他只能運行在系統進程,第三方程序沒法調用。由於須要在Android.mk中添加LOCAL_CERTIFICATE := platform。而Android.mk是用於在Android源碼下編譯程序用的。從以上能夠看出,在2.2,沒有辦法直接結束一個應用,而只能用本身的辦法間接辦到。現提供幾個方法,供參考:一、拋異常強制退出:該方法經過拋異常,使程序ForceClose。驗證能夠,可是,須要解決的問題是,如何使程序結束掉,而不彈出Force Close的窗口。二、記錄打開的Activity:每打開一個Activity,就記錄下來。在須要退出時,關閉每個Activity便可。三、發送特定廣播:在須要結束應用時,發送一個特定的廣播,每一個Activity收到廣播後,關閉便可。四、遞歸退出在打開新的Activity時使用startActivityForResult,而後本身加標誌,在onActivityResult中處理,遞歸關閉。除了第一個,都是想辦法把每個Activity都結束掉,間接達到目的。可是這樣作一樣不完美。你會發現,若是本身的應用程序對每個Activity都設置了nosensor,在兩個Activity結束的間隙,sensor可能有效了。但至少,咱們的目的達到了,並且沒有影響用戶使用。爲了編程方便,最好定義一個Activity基類,處理這些共通問題。 42. 請介紹下Android中經常使用的五種佈局。FrameLayout(框架佈局),LinearLayout (線性佈局),AbsoluteLayout(絕對佈局),RelativeLayout(相對佈局),TableLayout(表格佈局)43. 請介紹下Android的數據存儲方式。一.SharedPreferences方式二.文件存儲方式三.SQLite數據庫方式四.內容提供器(Content provider)方式五. 網絡存儲方式44. 請介紹下ContentProvider是如何實現數據共享的。建立一個屬於你本身的Content provider或者將你的數據添加到一個已經存在的Contentprovider中,前提是有相同數據類型而且有寫入Content provider的權限。45. 如何啓用Service,如何停用Service。Android中的service相似於windows中的service,service通常沒有用戶操做界面,它運行於系統中不容易被用戶發覺,能夠使用它開發如監控之類的程序。一。步驟第一步:繼承Service類public class SMSService extends Service { }第二步:在AndroidManifest.xml文件中的<application>節點裏對服務進行配置:<service android:name=".DemoService" />二。Context.startService()和Context.bindService服務不能本身運行,須要經過調用Context.startService()或Context.bindService()方法啓動服務。這兩個方法均可以啓動Service,可是它們的使用場合有所不一樣。1.使用startService()方法啓用服務,調用者與服務之間沒有關連,即便調用者退出了,服務仍然運行。使用bindService()方法啓用服務,調用者與服務綁定在了一塊兒,調用者一旦退出,服務也就終止。2.採用Context.startService()方法啓動服務,在服務未被建立時,系統會先調用服務的onCreate()方法,接着調用onStart()方法。若是調用startService()方法前服務已經被建立,屢次調用startService()方法並不會致使屢次建立服務,但會致使屢次調用onStart()方法。採用startService()方法啓動的服務,只能調用Context.stopService()方法結束服務,服務結束時會調用onDestroy()方法。3.採用Context.bindService()方法啓動服務,在服務未被建立時,系統會先調用服務的onCreate()方法,接着調用onBind()方法。這個時候調用者和服務綁定在一塊兒,調用者退出了,系統就會先調用服務的onUnbind()方法,。接着調用onDestroy()方法。若是調用bindService()方法前服務已經被綁定,屢次調用bindService()方法並不會致使屢次建立服務及綁定(也就是說onCreate()和onBind()方法並不會被屢次調用)。若是調用者但願與正在綁定的服務解除綁定,能夠調用unbindService()方法,調用該方法也會致使系統調用服務的onUnbind()-->onDestroy()方法。三。Service的生命週期1.Service經常使用生命週期回調方法以下:onCreate() 該方法在服務被建立時調用,該方法只會被調用一次,不管調用多少次startService()或bindService()方法,服務也只被建立一次。 onDestroy()該方法在服務被終止時調用。2. Context.startService()啓動Service有關的生命週期方法onStart() 只有採用Context.startService()方法啓動服務時纔會回調該方法。該方法在服務開始運行時被調用。屢次調用startService()方法儘管不會屢次建立服務,但onStart()方法會被屢次調用。3. Context.bindService()啓動Service有關的生命週期方法onBind()只有採用Context.bindService()方法啓動服務時纔會回調該方法。該方法在調用者與服務綁定時被調用,當調用者與服務已經綁定,屢次調用Context.bindService()方法並不會致使該方法被屢次調用。onUnbind()只有採用Context.bindService()方法啓動服務時纔會回調該方法。該方法在調用者與服務解除綁定時被調用。備註:1. 採用startService()啓動服務 Intent intent =new Intent(DemoActivity.this, DemoService.class); startService(intent);2.Context.bindService()啓動 Intent intent =new Intent(DemoActivity.this, DemoService.class); bindService(intent, conn, Context.BIND_AUTO_CREATE); //unbindService(conn);//解除綁定46. 註冊廣播有幾種方式,這些方式有何優缺點?請談談Android引入廣播機制的用意。 Android廣播機制(兩種註冊方法)在android下,要想接受廣播信息,那麼這個廣播接收器就得咱們本身來實現了,咱們能夠繼承BroadcastReceiver,就能夠有一個廣播接受器了。有個接受器還不夠,咱們還得重寫BroadcastReceiver裏面的onReceiver方法,當來廣播的時候咱們要幹什麼,這就要咱們本身來實現,不過咱們能夠搞一個信息防火牆。具體的代碼:public class SmsBroadCastReceiverextends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras(); Object[] object = (Object[])bundle.get("pdus"); SmsMessage sms[]=new SmsMessage[object.length]; for(int i=0;i<object.length;i++) { sms[0] =SmsMessage.createFromPdu((byte[])object); Toast.makeText(context, "來自"+sms.getDisplayOriginatingAddress()+"的消息是:"+sms.getDisplayMessageBody(),Toast.LENGTH_SHORT).show(); } //終止廣播,在這裏咱們能夠稍微處理,根據用戶輸入的號碼能夠實現短信防火牆。 abortBroadcast(); } } 當實現了廣播接收器,還要設置廣播接收器接收廣播信息的類型,這裏是信息:android.provider.Telephony.SMS_RECEIVED咱們就能夠把廣播接收器註冊到系統裏面,可讓系統知道咱們有個廣播接收器。這裏有兩種,一種是代碼動態註冊://生成廣播處理 smsBroadCastReceiver = newSmsBroadCastReceiver(); //實例化過濾器並設置要過濾的廣播 IntentFilter intentFilter = newIntentFilter("android.provider.Telephony.SMS_RECEIVED");//註冊廣播 BroadCastReceiverActivity.this.registerReceiver(smsBroadCastReceiver,intentFilter); 一種是在AndroidManifest.xml中配置廣播<?xml version="1.0"encoding="utf-8"?> <manifestxmlns:android="http://schemas.android.com/apk/res/android" package="spl.broadCastReceiver" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon"android:label="@string/app_name"> <activity android:name=".BroadCastReceiverActivity" android:label="@string/app_name"> <intent-filter> <actionandroid:name="android.intent.action.MAIN" /> <categoryandroid:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!--廣播註冊--> <receiver android:name=".SmsBroadCastReceiver"> <intent-filterandroid:priority="20"> <actionandroid:name="android.provider.Telephony.SMS_RECEIVED"/> </intent-filter> </receiver> </application> <uses-sdk android:minSdkVersion="7" /> <!-- 權限申請 --> <uses-permissionandroid:name="android.permission.RECEIVE_SMS"></uses-permission> </manifest> 兩種註冊類型的區別是: 1)第一種不是常駐型廣播,也就是說廣播跟隨程序的生命週期。 2)第二種是常駐型,也就是說當應用程序關閉後,若是有信息廣播來,程序也會被系統調用自動運行。47. 請解釋下在單線程模型中Message、Handler、MessageQueue、Looper之間的關係。Handler簡介:一個Handler容許你發送和處理Message和Runable對象,這些對象和一個線程的MessageQueue相關聯。每個線程實例和一個單獨的線程以及該線程的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 } }; Looper.loop(); } }48. AIDL的全稱是什麼?如何工做?能處理哪些類型的數據?AIDL的英文全稱是Android Interface Define Language當A進程要去調用B進程中的service時,並實現通訊,咱們一般都是經過AIDL來操做的A工程:首先咱們在net.blogjava.mobile.aidlservice包中建立一個RemoteService.aidl文件,在裏面咱們自定義一個接口,含有方法get。ADT插件會在gen目錄下自動生成一個RemoteService.java文件,該類中含有一個名爲RemoteService.stub的內部類,該內部類中含有aidl文件接口的get方法。說明一:aidl文件的位置不固定,能夠任意而後定義本身的MyService類,在MyService類中自定義一個內部類去繼承RemoteService.stub這個內部類,實現get方法。在onBind方法中返回這個內部類的對象,系統會自動將這個對象封裝成IBinder對象,傳遞給他的調用者。其次須要在AndroidManifest.xml文件中配置MyService類,代碼以下:<!-- 註冊服務 --> <service android:name=".MyService"> <intent-filter> <!-- 指定調用AIDL服務的ID --> <actionandroid:name="net.blogjava.mobile.aidlservice.RemoteService" /> </intent-filter> </service>爲何要指定調用AIDL服務的ID,就是要告訴外界MyService這個類可以被別的進程訪問,只要別的進程知道這個ID,正是有了這個ID,B工程才能找到A工程實現通訊。說明:AIDL並不須要權限B工程: 首先咱們要將A工程中生成的RemoteService.java文件拷貝到B工程中,在bindService方法中綁定aidl服務 綁定AIDL服務就是將RemoteService的ID做爲intent的action參數。 說明:若是咱們單獨將RemoteService.aidl文件放在一個包裏,那個在咱們將gen目錄下的該包拷貝到B工程中。若是咱們將RemoteService.aidl文件和咱們的其餘類存放在一塊兒,那麼咱們在B工程中就要創建相應的包,以保證RmoteService.java文件的報名正確,咱們不能修改RemoteService.java文件 bindService(newInten("net.blogjava.mobile.aidlservice.RemoteService"),serviceConnection, Context.BIND_AUTO_CREATE); ServiceConnection的onServiceConnected(ComponentName name, IBinderservice)方法中的service參數就是A工程中MyService類中繼承了RemoteService.stub類的內部類的對象。49. 請解釋下Android程序運行時權限與文件系統權限的區別。運行時權限Dalvik( android受權) 文件系統 linux 內核受權50. 系統上安裝了多種瀏覽器,可否指定某瀏覽器訪問指定頁面?請說明起因。經過直接發送Uri把參數帶過去,或者經過manifest裏的intentfilter裏的data屬性51. 你如何評價Android系統?優缺點。答:Android平臺手機 5大優點: 1、開放性 在優點方面,Android平臺首先就是其開發性,開發的平臺容許任何移動終端廠商加入到Android聯盟中來。顯著的開放性能夠使其擁有更多的開發者,隨着用戶和應用的日益豐富,一個嶄新的平臺也將很快走向成熟。開放性對於Android的發展而言,有利於積累人氣,這裏的人氣包括消費者和廠商,而對於消費者來說,隨大的受益正是豐富的軟件資源。開放的平臺也會帶來更大競爭,如此一來,消費者將能夠用更低的價位購得心儀的手機。2、掙脫運營商的束縛 在過去很長的一段時間,特別是在歐美地區,手機應用每每受到運營商制約,使用什麼功能接入什麼網絡,幾乎都受到運營商的控制。從去年iPhone 上市,用戶能夠更加方便地鏈接網絡,運營商的制約減小。隨着EDGE、HSDPA這些2G至3G移動網絡的逐步過渡和提高,手機隨意接入網絡已不是運營商口中的笑談,當你能夠經過手機IM軟件方便地進行即時聊天時,再回想不久前天價的彩信和圖鈴下載業務,是否是像噩夢同樣?互聯網巨頭Google推進的Android終端天生就有網絡特點,將讓用戶離互聯網更近。3、豐富的硬件選擇 這一點仍是與Android平臺的開放性相關,因爲Android的開放性,衆多的廠商會推出千奇百怪,功能特點各具的多種產品。功能上的差別和特點,卻不會影響到數據同步、甚至軟件的兼容,比如你從諾基亞 Symbian風格手機 一下改用蘋果 iPhone ,同時還可將Symbian中優秀的軟件帶到iPhone上使用、聯繫人等資料更是能夠方便地轉移,是否是很是方便呢?4、不受任何限制的開發商 Android平臺提供給第三方開發商一個十分寬泛、自由的環境,不會受到各類條條框框的阻擾,可想而知,會有多少新穎別緻的軟件會誕生。但也有其兩面性,血腥、暴力、情色方面的程序和遊戲如可控制正是留給Android難題之一。5、無縫結合的Google應用 現在叱詫互聯網的Google已經走過10年度歷史,從搜索巨人到全面的互聯網滲透,Google服務如地圖、郵件、搜索等已經成爲鏈接用戶和互聯網的重要紐帶,而Android平臺手機將無縫結合這些優秀的Google服務。再說Android的5大不足:1、安全和隱私 因爲手機與互聯網的緊密聯繫,我的隱私很可貴到保守。除了上網過程當中經意或不經意留下的我的足跡,Google這個巨人也時時站在你的身後,洞穿一切,所以,互聯網的深刻將會帶來新一輪的隱私危機。2、首先開賣Android手機的不是最大運營商 衆所周知,T-Mobile在23日,於美國紐約發佈了Android首款手機G1。可是在北美市場,最大的兩家運營商乃AT&T和Verizon,而目前所知取得Android手機銷售權的僅有 T-Mobile和Sprint,其中T-Mobile的3G網絡相對於其餘三家也要遜色很多,所以,用戶能夠買帳購買G1,可否體驗到最佳的3G網絡服務則要另當別論了!3、運營商仍然可以影響到Android手機 在國內市場,很多用戶對購得移動定製機不滿,感受所購的手機被人塗畫了廣告通常。這樣的狀況在國外市場一樣出現。Android手機的另外一發售運營商Sprint就將在其機型中內置其手機商店程序。4、同類機型用戶減小 在很多手機論壇都會有針對某一型號的子論壇,對一款手機的使用心得交流,並分享軟件資源。而對於Android平臺手機,因爲廠商豐富,產品類型多樣,這樣使用同一款機型的用戶愈來愈少,缺乏統一機型的程序強化。舉個稍顯不當的例子,如今山寨機氾濫,品種各異,就不多有專門針對某個型號山寨機的討論和羣組,除了哪些功能異常搶眼、頗受追捧的機型之外。5、過度依賴開發商缺乏標準配置 在使用PC端的Windows Xp系統的時候,都會內置微軟Windows Media Player這樣一個瀏覽器程序,用戶能夠選擇更多樣的播放器,如Realplay或暴風影音等。但入手開始使用默認的程序一樣能夠應付多樣的須要。在Android平臺中,因爲其開放性,軟件更多依賴第三方廠商,好比Android系統的SDK中就沒有內置音樂播放器,所有依賴第三方開發,缺乏了產品的統一性。52. 什麼是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。這種實踐須要應用到全部顯示用戶界面的線程,由於他們都面臨着一樣的超時問題。53. 什麼狀況會致使Force Close ?如何避免?可否捕獲致使其的異常? 答:通常像空指針啊,能夠看起logcat,而後對應到程序中 來解決錯誤 54. Android自己的api並未聲明會拋出異常,則其在運行時有無可能拋出runtime異常,你遇到過嗎?諾有的話會致使什麼問題?如何解決?55. 簡要解釋一下activity、 intent 、intent filter、service、Broadcase、BroadcaseReceiver 答:一個activity呈現了一個用戶能夠操做的可視化用戶界面 一個service不包含可見的用戶界面,而是在後臺無限地運行 能夠鏈接到一個正在運行的服務中,鏈接後,能夠經過服務中暴露出來的藉口與其進行通訊 一個broadcast receiver是一個接收廣播消息並做出迴應的component,broadcastreceiver沒有界面 intent:content provider在接收到ContentResolver的請求時被激活。 activity, service和broadcast receiver是被稱爲intents的異步消息激活的。 一個intent是一個Intent對象,它保存了消息的內容。對於activity和service來講,它指定了請求的操做名稱和待操做數據的URI Intent對象能夠顯式的指定一個目標component。若是這樣的話,android會找到這個component(基於manifest文件中的聲明)並激活它。但若是一個目標不是顯式指定的,android必須找到響應intent的最佳component。 它是經過將Intent對象和目標的intent filter相比較來完成這一工做的。一個component的intent filter告訴android該component能處理的intent。intent filter也是在manifest文件中聲明的。56. IntentService有何優勢? 答:IntentService 的好處 * Acitivity的進程,當處理Intent的時候,會產生一個對應的Service * Android的進程處理器如今會盡量的不kill掉你 * 很是容易使用 57. 橫豎屏切換時候activity的生命週期? 一、不設置Activity的android:configChanges時,切屏會從新調用各個生命週期,切橫屏時會執行一次,切豎屏時會執行兩次 二、設置Activity的android:configChanges="orientation"時,切屏仍是會從新調用各個生命週期,切橫、豎屏時只會執行一次 三、設置Activity的android:configChanges="orientation|keyboardHidden"時,切屏不會從新調用各個生命週期,只會執行onConfigurationChanged方法 如何將SQLite數據庫(dictionary.db文件)與apk文件一塊兒發佈? 解答:能夠將dictionary.db文件複製到Eclipse Android工程中的res aw目錄中。全部在res aw目錄中的文件不會被壓縮,這樣能夠直接提取該目錄中的文件。能夠將dictionary.db文件複製到res aw目錄中58. 如何將打開res aw目錄中的數據庫文件? 解答:在Android中不能直接打開res aw目錄中的數據庫文件,而須要在程序第一次啓動時將該文件複製到手機內存或SD卡的某個目錄中,而後再打開該數據庫文件。複製的基本方法是使用getResources().openRawResource方法得到res aw目錄中資源的 InputStream對象,而後將該InputStream對象中的數據寫入其餘的目錄中相應文件中。在Android SDK中能夠使用SQLiteDatabase.openOrCreateDatabase方法來打開任意目錄中的SQLite數據庫文件。59. Android引入廣播機制的用意? 答:a:從MVC的角度考慮(應用程序內) 其實回答這個問題的時候還能夠這樣問,android爲何要有那4大組件,如今的移動開發模型基本上也是照搬的web那一套MVC架構,只不過是改了點嫁妝而已。android的四大組件本質上就是爲了實現移動或者說嵌入式設備上的MVC架構,它們之間有時候是一種相互依存的關係,有時候又是一種補充關係,引入廣播機制能夠方便幾大組件的信息和數據交互。 b:程序間互通消息(例如在本身的應用程序內監聽系統來電) c:效率上(參考UDP的廣播協議在局域網的方便性) d:設計模式上(反轉控制的一種應用,相似監聽者模式)60. Android dvm的進程和Linux的進程, 應用程序的進程是否爲同一個概念 DVM指dalivk的虛擬機。每個Android應用程序都在它本身的進程中運行,都擁有一個獨立的Dalvik虛擬機實例。而每個DVM都是在Linux 中的一個進程,因此說能夠認爲是同一個概念。61. sim卡的EF 文件有何做用 sim卡的文件系統有本身規範,主要是爲了和手機通信,sim自己能夠有本身的操做系統,EF就是做存儲並和手機通信用的 62. 嵌入式操做系統內存管理有哪幾種,各有何特性 頁式,段式,段頁,用到了MMU,虛擬空間等技術 63. 什麼是嵌入式實時操做系統, Android 操做系統屬於實時操做系統嗎? 嵌入式實時操做系統是指當外界事件或數據產生時,可以接受並以足夠快的速度予以處理,其處理的結果又能在規定的時間以內來控制生產過程或對處理系統做出快速響應,並控制全部實時任務協調一致運行的嵌入式操做系統。主要用於工業控制、軍事設備、航空航天等領域對系統的響應時間有苛刻的要求,這就須要使用實時系統。又可分爲軟實時和硬實時兩種,而android是基於linux內核的,所以屬於軟實時。64. 一條最長的短信息約佔多少byte? 中文70(包括標點),英文160,160個字節。 65. android中的動畫有哪幾類,它們的特色和區別是什麼? 兩種,一種是Tween動畫、還有一種是Frame動畫。Tween動畫,這種實現方式能夠使視圖組件移動、放大、縮小以及產生透明度的變化;另外一種Frame動畫,傳統的動畫方法,經過順序的播放排列好的圖片來實現,相似電影。66. handler機制的原理 andriod提供了Handler 和 Looper 來知足線程間的通訊。Handler先進先出原則。Looper類用來管理特定線程內對象之間的消息交換(MessageExchange)。 1)Looper: 一個線程能夠產生一個Looper對象,由它來管理此線程裏的MessageQueue(消息隊列)。 2)Handler: 你能夠構造Handler對象來與Looper溝通,以便push新消息到MessageQueue裏;或者接收Looper從Message Queue取出)所送來的消息。 3) Message Queue(消息隊列):用來存放線程放入的消息。 4)線程:UIthread 一般就是main thread,而Android啓動程序時會替它創建一個MessageQueue。 67. 說說mvc模式的原理,它在android中的運用 MVC(Model_view_contraller)」模型_視圖_控制器」。 MVC應用程序老是由這三個部分組成。Event(事件)致使Controller改變Model或View,或者同時改變二者。只要Controller改變了Models的數據或者屬性,全部依賴的View都會自動更新。相似的,只要Contro68. DDMS和TraceView的區別? DDMS是一個程序執行查看器,在裏面能夠看見線程和堆棧等信息,TraceView是程序性能分析器。69. java中如何引用本地語言 能夠用JNI(java nativeinterface java 本地接口)接口。70. 談談Android的IPC(進程間通訊)機制 IPC是內部進程通訊的簡稱,是共享"命名管道"的資源。Android中的IPC機制是爲了讓Activity和Service之間能夠隨時的進行交互,故在Android中該機制,只適用於Activity和Service之間的通訊,相似於遠程方法調用,相似於C/S模式的訪問。經過定義AIDL接口文件來定義IPC接口。Servier端實現IPC接口,Client端調用IPC接口本地代理。71. NDK是什麼NDK是一些列工具的集合,NDK提供了一系列的工具,幫助開發者迅速的開發C/C++的動態庫,並能自動將so和java 應用打成apk包。NDK集成了交叉編譯器,並提供了相應的mk文件和隔離cpu、平臺等的差別,開發人員只需簡單的修改mk文件就能夠建立出so