Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> java面試題 android面試題 ( 一 )

java面試題 android面試題 ( 一 )

編輯:關於Android編程

由於現在是畢業季 , 所以更新一篇關於面試的博文吧~ 大概意思就是如下 , 因為面試的話只需要回答這些就足夠了~

1.Overload和Override的區別Overloaded的方法是否可以改變返回值的類型?

方法的重寫Overriding和重載Overloading是Java多態性的不同表現。

重寫Overriding是父類與子類之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。

如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫(Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被"屏蔽"了。

如果在一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型,則稱為方法的重載(Overloading)。

Overloaded的方法是可以改變返回值的類型。

2. String和StringBuffer的區別

String的長度是不可變的,自己會查詢棧裡面的值,如果有這個值,將重新定義;StringBuffer的長度是可變的。如果你對字符串中的內容經常進行操作,特別是內容要修改時,那麼使用StringBuffer,如果最後需要String,那麼使用StringBuffer(緩存)的toString()方法。

StringBuilder與String比較在創建字符串方面,節約內存。

3.實現一個字符串倒序

字符串“abcde”通過寫一個函數不讓調用第三方的字符串,實現一個字符串倒序,比如字符串“abcde”變成“edcba”

Stringsrc="ABCDEF"; Stringdst=newStringBuffer(src).reverse().toString();

4.抽象類與接口的區別(abstract與interface的區別)

abstract可以修飾抽象方法,而一個類只要有一個抽象方法,就必須用abstract定義該類,即抽象類。抽象類,被繼承,實現它裡面的方法,可以只有普通方法。

用interface修飾的類,裡面的方法都是抽象方法(不能實例化),因此在定義接口的時候,可以直接不加那些修飾,系統會默認的添上去。接口裡面的字段都是公有常量,即publicstaticfinal修飾的字段。可以沒有函數原型,裡面可以是空的。

5.集合的實現類與區別

collections集合工具類,提供了集合一系列的排序方法

Collection接口,集合結構總的父接口,有兩個子接口List和Set

List接口元素有序可重復.

實現類有:ArrayList數組實現輕量級,運行快,線程不安全。JDK1.2查詢快

Vector數組實現重量級,運行慢,線程安全。JDK1.0

LinkedList鏈表實現常用語堆棧與隊列的實現增刪操作快

Set接口元素無序不可重復

實現類有:HashSet,底層用hashCode()算法實現,保證元素的無序唯一,自定義對象存進HashSet為了保證元素內容不重復需要覆蓋hashCode()與equals()方法。散列表(Hashtable,也叫哈希表),是根據關鍵碼值(Keyvalue)而直接進行訪問的數據結構

SortedSet(不重要)元素有序(Unicode升序)唯一

TreeSet要求元素有序,自定義的對象需要實現Comparable接口的compareTo(objecto)方法

Map(接口):與Collection接口無關,有一個子接口SortedMap特點:元素是key-value,key

唯一,無序;value可重復

實現類:HashMap輕量級線程不安全的,允許key或value為nullJDK1.2

HashTable重量級線程安全的不允許key或value為nullJDK1.0

Properties是HashTable的子類,主鍵和值都是字符串

SortedMap:(不重要)

特點:key唯一,有序(Unicode升序)

實現類:TreeMap

6.線程有幾種狀態,分別是哪些(調用run()和調用start()的區別)

1)新建狀態(New):新創建了一個線程對象。

2)就緒狀態(Runnable):線程對象創建後,其他線程調用了該對象的start()方法。該狀態的線程位於可運行線程池中,變得可運行,等待獲取CPU的使用權。

3)運行狀態(Running):就緒狀態的線程獲取了CPU,執行run()方法。

4)阻塞狀態(Blocked):阻塞狀態是線程因為某種原因放棄CPU使用權,暫時停止運行。直到線程進入就緒狀態,才有機會轉到運行狀態。阻塞的情況分三種:

①等待阻塞:運行的線程執行wait()方法,JVM會把該線程放入等待池中。

②同步阻塞:運行的線程在獲取對象的同步鎖時,若該同步鎖被別的線程占用,則JVM會把該線程放入鎖池中。

③其他阻塞:運行的線程執行sleep()或join()方法,或者發出了I/O請求時,JVM會把該線程置為阻塞狀態。當sleep()狀態超時、join()等待線程終止或者超時、或者I/O處理完畢時,線程重新轉入就緒狀態。

5)死亡狀態(Dead):線程執行完了或者因異常退出了run()方法,該線程結束生命周期。

當調用start方法的時候,該線程就進入就緒狀態。等待CPU進行調度執行,此時還沒有真正執行線程。

當調用run方法的時候,是已經被CPU進行調度,執行線程的主要任務。

7.線程的實現方式

線程的實現有兩種方式,一是繼承Thread類,二是實現Runnable接口

8.sleep()與wait()的區別

這兩個方法來自不同的類分別是,sleep來自Thread類,和wait來自Object類。

最主要是sleep方法沒有釋放鎖,而wait方法有釋放了鎖,使得其他線程可以使用同步控制塊或者方法。sleep不出讓系統資源;wait是進入線程等待池等待,出讓系統資源,其他線程可以占用CPU。一般wait不會加時間限制,因為如果wait線程的運行資源不夠,再出來也沒用,要等待其他線程調用notify/notifyAll喚醒等待池中的所有線程,才會進入就緒隊列等待OS分配系統資源。sleep(milliseconds)可以用時間指定使它自動喚醒過來,如果時間不到只能調用interrupt()強行打斷。

wait,notify和notifyAll只能在同步控制方法或者同步控制塊裡面使用,而sleep可以在任何地方使用。

sleep需要捕獲異常,而wait不需要

9.線程中sleep,wait,join,yield,notify,notifyall,synchronized區別及聯系

1》sleep()方法

在指定時間內讓當前正在執行的線程暫停執行,但不會釋放“鎖標志”。不推薦使用。sleep()使當前線程進入阻塞狀態,在指定時間內不會執行。

2》wait()方法

在其他線程調用對象的notify或notifyAll方法前,導致當前線程等待。線程會釋放掉它所占有的“鎖標志”,從而使別的線程有機會搶占該鎖。

喚醒當前對象鎖的等待線程使用notify或notifyAll方法,waite()和notify()必須在synchronized函數或synchronizedblock中進行調用。

3》yield方法

暫停當前正在執行的線程對象。yield()只是使當前線程重新回到可執行狀態,所以執行yield()的線程有可能在進入到可執行狀態後馬上又被執行。yield()只能使同優先級或更高優先級的線程有執行的機會。

4》join方法

等待該線程終止。等待調用join方法的線程結束,再繼續執行。如:t.join(); //主要用於等待t線程運行結束,若無此句,main則會執行完畢,導致結果不可預測。

10.Final、finally、finanlize()的區別

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

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

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

11.什麼是設計模式?

設計模式(Design pattern)是一套被反復使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。毫無疑問,設計模式於己於他人於系統都是多贏的;設計模式使代碼編制真正工程化;設計模式是軟件工程的基石脈絡,如同大廈的結構一樣。

12.java常用的設計模式?說明工廠模式

Java中的23種設計模式:

Factory(工廠模式),Builder(建造模式),FactoryMethod(工廠方法模式),Prototype(原始模型模式),

Singleton(單例模式),Facade(門面模式),Adapter(適配器模式),Bridge(橋梁模式),Composite(合成模式),

Decorator(裝飾模式),Flyweight(享元模式),Proxy(代理模式),Command(命令模式),Interpreter(解釋器模式),

Visitor(訪問者模式),Iterator(迭代子模式),Mediator(調停者模式),Memento(備忘錄模式),

Observer(觀察者模式),State(狀態模式),Strategy(策略模式),TemplateMethod(模板方法模式),ChainOfResponsibleity(責任鏈模式)

工廠模式是一種經常被使用到的模式,根據工廠模式實現的類可以根據提供的數據生成一組類中某一個類的實例,通常這一組類有一個公共的抽象父類並且實現了相同的方法,但是這些方法針對不同的數據進行了不同的操作。首先需要定義一個基類,該類的子類通過不同的方法實現了基類中的方法。然後需要定義一個工廠類,工廠類可以根據條件生成不同的子類實例。當得到子類的實例後,開發人員可以調用基類中的方法而不必考慮到底返回的是哪一個子類的實例。

13.常用設計模式及應用場景

常用設計模式:

單例模式:Calendar實例的獲取

適配器模式:Adapter為ListViewGridView等添加數據

工廠模式:SpringIOC反轉控制

代理模式:SpringAOP面向切面編程

觀察者模式:ContentObserver監聽內容改變

14.用兩種方式實現單例模式,兩種方式的區別

(懶漢式)程序執行過程中需要這個類的對象時再實例化該類的對象

步驟:

1)定義靜態私有對象

2)構造方法私有化保證在類的外部無法實例化該類的對象

3)定義對外開放的靜態方法在調用方法是判斷對象是否為空,為空再創建對象返回

publicclassSingleton{

privatestaticSingletonsingleton;

//構造方法私有化,保證在類的外部無法實例化該類的對象

privateSingleton(){

}

publicstaticsynchronizedSingletongetSingletonInstance(){

if(singleton==null){

singleton=newSingleton();

}

returnsingleton;

}

}

(餓漢式)類加載的時候就實例化該類的對象

publicclassSingleton{

privatestaticSingletonsingleton=newSingleton();

//構造方法私有化,保證在類的外部無法實例化該類的對象

privateSingleton(){

}

publicstaticSingletongetSingletonInstance(){

returnsingleton;

}

}

餓漢式是線程安全的,在類創建的同時就已經創建好一個靜態的對象供系統使用,以後不在改變

懶漢式如果在創建實例對象時不加上synchronized則會導致對對象的訪問不是線程安全的

15Android系統架構

1》應用程序層java語言應用程序開發

2》應用程序框架層java語言OS定制framework層開發

3》系統運行庫層CC++實現so庫

4》Linux內核層

16. Android系統的優勢和不足

Android平台手機 5大優勢:

⑴開放性

在優勢方面,Android平台首先就是其開發性,開發的平台允許任何移動終端廠商加入到Android聯盟中來。顯著的開放性可以使其擁有更多的開發者,隨著用戶和應用的日益豐富,一個嶄新的平台也將很快走向成熟。開放性對於Android的發展而言,有利於積累人氣,這裡的人氣包括消費者和廠商,而對於消費者來講,隨大的受益正是豐富的軟件資源。開放的平台也會帶來更大競爭,如此一來,消費者將可以用更低的價位購得心儀的手機。

⑵掙脫運營商的束縛

在過去很長的一段時間,特別是在歐美地區,手機應用往往受到運營商制約,使用什麼功能接入什麼網絡,幾乎都受到運營商的控制。從去年iPhone 上市 ,用戶可以更加方便地連接網絡,運營商的制約減少。隨著EDGE、HSDPA這些2G至3G移動網絡的逐步過渡和提升,手機隨意接入網絡已不是運營商口中的笑談,當你可以通過手機IM軟件方便地進行即時聊天時,再回想不久前天價的彩信和圖鈴下載業務,是不是像噩夢一樣?互聯網巨頭Google推動的Android終端天生就有網絡特色,將讓用戶離互聯網更近。

⑶豐富的硬件選擇

這一點還是與Android平台的開放性相關,由於Android的開放性,眾多的廠商會推出千奇百怪,功能特色各具的多種產品。功能上的差異和特色,卻不會影響到數據同步、甚至軟件的兼容,好比你從諾基亞 Symbian風格手機 一下改用蘋果 iPhone ,同時還可將Symbian中優秀的軟件帶到iPhone上使用、聯系人等資料更是可以方便地轉移,是不是非常方便呢?

⑷不受任何限制的開發商

Android平台提供給第三方開發商一個十分寬泛、自由的環境,不會受到各種條條框框的阻擾,可想而知,會有多少新穎別致的軟件會誕生。但也有其兩面性,血腥、暴力、情色方面的程序和游戲如可控制正是留給Android難題之一。

⑸無縫結合的Google應用

如今叱詫互聯網的Google已經走過10年度歷史,從搜索巨人到全面的互聯網滲透,Google服務如地圖、郵件、搜索等已經成為連接用戶和互聯網的重要紐帶,而Android平台手機將無縫結合這些優秀的Google服務。

再說Android的5大不足:

⑴安全和隱私

由於手機與互聯網的緊密聯系,個人隱私很難得到保守。除了上網過程中經意或不經意留下的個人足跡,Google這個巨人也時時站在你的身後,洞穿一切,因此,互聯網的深入將會帶來新一輪的隱私危機。

⑵首先開賣Android手機的不是最大運營商

眾所周知,T-Mobile在23日,於美國紐約發布 了Android首款手機G1。但是在北美市場,最大的兩家運營商乃AT&T和Verizon,而目前所知取得Android手機銷售權的僅有 T-Mobile和Sprint,其中T-Mobile的3G網絡相對於其他三家也要遜色不少,因此,用戶可以買賬購買G1,能否體驗到最佳的3G網絡服務則要另當別論了!

⑶運營商仍然能夠影響到Android手機

在國內市場,不少用戶對購得移動定制機不滿,感覺所購的手機被人塗畫了廣告一般。這樣的情況在國外市場同樣出現。Android手機的另一發售運營商Sprint就將在其機型中內置其手機商店程序。

⑷同類機型用戶減少

在不少手機論壇都會有針對某一型號的子論壇,對一款手機的使用心得交流,並分享軟件資源。而對於Android平台手機,由於廠商豐富,產品類型多樣,這樣使用同一款機型的用戶越來越少,缺少統一機型的程序強化。舉個例子,現在IPhone的所有用戶都是運行在一個公司開發的系統之上,蘋果可以控制所有的設備都是用一個架構之上。而Android則是可以運行是同種架構設備之上不同硬件之上。

⑸過分依賴開發商缺少標准配置

在使用PC端的Windows Xp系統的時候,都會內置微軟Windows Media Player這樣一個播放器程序,用戶可以選擇更多樣的播放器,如Realplay或暴風影音等。但入手開始使用默認的程序同樣可以應付多樣的需要。在 Android平台中,由於其開放性,軟件更多依賴第三方廠商,比如Android系統的SDK中就沒有內置音樂 播放器,全部依賴第三方開發,缺少了產品的統一性。

17 Android的四大組件是什麼?它們的作用是什麼

Android有四大組件:Activity、Service、Broadcast Receiver、Content Provider。

Activity :應用程序中,一個Activity通常就是一個單獨的屏幕,它上面可以顯示一些控件也可以監聽並處理用戶的事件做出響應。Activity之間通過Intent進行通信。

Service 服務:一個Service 是一段長生命周期的,沒有用戶界面的程序,可以用來開發如監控類程序。

BroadcastReceive廣播接收器:你的應用可以使用它對外部事件進行過濾只對感興趣的外部事件(如當電話呼入時,或者數據網絡可用時)進行接收並做出響應。廣播接收器沒有用戶界面。然而,它們可以啟動一個activity或serice 來響應它們收到的信息。

Content Provider內容提供者 :主要用於多個應用間數據共享。這些數據可以存儲在文件系統中或SQLite數據庫。

18 請介紹下Android中常用的五種布局

常用五種布局方式,分別是:FrameLayout(框架布局),LinearLayout (線性布局),AbsoluteLayout(絕對布局),RelativeLayout(相對布局),TableLayout(表格布局)。

1)FrameLayout:所有東西依次都放在左上角,會重疊,這個布局比較簡單,也只能放一點比較簡單的東西。

2)LinearLayout:線性布局,每一個LinearLayout裡面又可分為垂直布局(android:orientation="vertical")和水平布局(android:orientation="horizontal" )。當垂直布局時,每一行就只有一個元素,多個元素依次垂直往下;水平布局時,只有一行,每一個元素依次向右排列。

3)AbsoluteLayout:絕對布局用X,Y坐標來指定元素的位置,這種布局方式也比較簡單,但是在屏幕旋轉時,往往會出問題,而且多個元素的時候,計算比較麻煩。

4)RelativeLayout:相對布局可以理解為某一個元素為參照物,來定位的布局方式。主要屬性有:相對於某一個元素android:layout_below、 android:layout_toLeftOf相對於父元素的地方android:layout_alignParentLeft、android:layout_alignParentRigh;

5)TableLayout:表格布局,每一個TableLayout裡面有表格行TableRow,TableRow裡面可以具體定義每一個元素。每一個布局都有自己適合的方式,這五個布局元素可以相互嵌套應用,做出美觀的界面。

19 談談UI中, Padding和Margin有什麼區別,gravity與layout_gravity的區別(盒子模型)

Padding 用來指定組件內的內容距離組件邊界的距離;

Margin用來指定控件與控件之間的距離

Gravity用來指定組件內的內容相對於組件本身的位置

Layout_gravity用來指定組件相對於其父組件的位置

20 Android程序入口如何判斷

action節點中的android.intent.action.MAIN表明它所在的Activity是整個應用程序的入口點

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved