Android面試筆記總結(二)

有總結的工作纔有意義,有總結的人生纔會有進步。

本系列面試筆記所有問題,源自面試過程中的記錄總結,主要涉及Java和Android,但是由於面試過程中任何問題都有可能被問到,所以也會涉及一些其他方向的知識。部分答案參考網上朋友的文章,如有錯誤之處,歡迎批評指正。奮鬥

1 在Android中,如何使用Http協議編程?

答:實例代碼如下

<span style="font-size:18px;">HttpClient hclient  = new DefaultHttpClient();
Httppost hpost = new HttpPost(url);
HttpResponse response = null;
try{
     response = hclient.execute(hpost);
     if(response.getStatusLine.getStatusCode()==200){
           return EntityUtils.toByteArray(Response.getEntity());
     }
}catch(Exception e){
 //catch the Exception
}</span>
2 Http和Https有什麼區別?

答: Https協議是由ssl+http協議構建的可以進行加密傳輸、身份認證的網絡協議,要比Http協議安全。Http協議使用80端口,Https默認使用443端口。Https使用需要到CA申請一個證書,該證書可以證明服務器的用途,只有擁有該證書的Server才能被客戶端所信任,才能進行連接。

3 Http協議的get和post方法的區別有哪些?

答:Get是從服務器端請求數據,而Post是像服務器發送數據。Get方式傳輸的數據量特別小,一般在2KB左右,效率高。Post方式由於是將表單數據封裝在數據報中,它是等服務器來讀取數據,因此傳輸的數據量較大,但是效率也低於Get方式。get方式是直接將表單數據追加到URl的後面,明文傳輸安全性較差。Post講表單數據封裝在數據報中,不是明文傳輸,安全性較高。

4 Android中的異步任務AsyncTask怎麼使用?

答:AsyncTask是Android中的輕量級的異步類,可以通過直接繼承這個Asynctask類實現異步操作,其主要特點是任務在主線程之外運行,而回調方法在主線程中運行。AsyncTask類的使用步驟大致如下:

① 子類繼承AsyncTask類

② 在子類中重寫AsyncTask中的幾個方法。

 1)onPreExecute() 該方法在執行實際的後臺操作前被主線程調用,在這裏可以做些準備工作,比如顯示一個進度條等工作。

 2)doInbackground() 該方法在執行onPreExecute()方法之後被子線程(後臺線程)調用,在這裏進行一個後臺的、耗時的操作,最終返回一個result。

 3)onPostExceute() 在doInbackground()方法執行完畢之後,該方法被主線程調用,後臺的計算結果result將通過這個方法傳遞給主線程,在這裏可以進行UI界面的更新操作。

5 二叉排序樹的定義是什麼?

答:二叉排序樹又稱爲二叉查找樹/二叉搜索樹。其性質:每一個節點有不超過兩個子節點,並且左子樹節點小於或等於父節點,右節點大於等於父節點。

6 什麼是平衡二叉樹?

答:AVL數的定義:首先它是一種特殊的二叉排序樹,其次它的左子樹和右子樹都是平衡二叉樹,且左子樹和右子樹的深度之差不超過1。

    平衡因子:可以定義爲左子樹減去右子樹的深度。

    平衡二叉樹查找元素的次數不超過樹的深度,時間複雜度爲 Log N。

7 靜態內部類和匿名內部類的區別是什麼?

答:首先都是內部類,靜態的話就從static關鍵字說起,不能違背JVM的定義規則,一段代碼符合不符合要求可以通過變量的實例化時間談起,匿名內部類的主要就是匿名,像一般按鈕等監聽方法都喜歡使用匿名內部類的形式。

8 談談對Java反射機制的理解。

答:反射主要是指程序可以訪問、檢測和修改他的本身狀態或行爲的一種能力。可以將java的反射機制理解爲一面鏡子,如果我們可以通過一個類的名字推出類的內部結構、可以訪問成員和方法(public和private都可以)。

9 Java強引用、弱引用、軟引用之間的區別有哪些?(新浪微博面試題)

答:1)強引用:平時創建的引用變量都是強引用變量。A a = new A(); 即使OOM(內存溢出),a變量也不會被系統回收。

    2)軟引用:softReference,當JVM內存不足時,軟引用類對象會被系統Kill掉,一般用來實現高速緩存,最大限度的使用內存並且不會發生OOM現象。

    3)弱引用:weakReference,一旦弱引用變量被JVM發現,無論當時內存還剩餘多少可用,JVM都會將這個弱引用變量回收。一般適合生存週期較長,重新創建開銷不打的對象。

    4)虛引用: 虛引用必須和ReferenceQueue(引用隊列)聯合使用,一般用於跟蹤對象被gc回收的活動。

10 談談對Java線程池概念的理解。

答:線程池是java5之後新增的功能。線程池就是提前準備的若干個線程等待執行任務,只要任務來了,就從線程池中取出一個線程執行任務,當任務執行結束時,將該線程重新放回線程池等待新的任務。

優點:對於大量的任務來說,節省資源,不用頻繁的創建線程和銷燬線程,節省了系統開銷。

ExecutorService pool = new Executors.new FixedThreadPool(10);//創建10線程等待執行任務
pool.execute(new Runnale(){});//參數是實現了Runnable接口的對象

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章