Android開發面試經——3.常見Java基礎筆試題

 

關注finddreams博客:http://blog.csdn.net/finddreams/article/details/44403041 
由於Androd使用Java語言來編程的,因此咱們作Android開發全面的掌握Java基礎是必須的。在面試的過程當中,咱們發現不少公司發的筆試題有不少知識點都是Java的,搞安卓久了,Java基礎的一些知識點也都快忘了,今天就讓咱們來一塊兒複習一些Java基礎,但願能在面試中用到;面試

一、Overload和Override的區別。Overloaded的方法是否能夠改變返回值的類型? 
方法的重寫Overriding和重載Overloading是Java多態性的不一樣表現。重寫Overriding是父類與子類之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。若是在子類中定義某方法與其父類有相同的名稱和參數,咱們說該方法被重寫 (Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被」屏蔽」了。若是在一個類中定義了多個同名的方法,它們或有不一樣的參數個數或有不一樣的參數類型,則稱爲方法的重載(Overloading)。Overloaded的方法是能夠改變返回值的類型。編程

二、String和StringBuffer,StringBuilder的區別 
String 字符串常量 
StringBuffer 字符串變量(線程安全) 
StringBuilder 字符串變量(非線程安全) 
String的長度是不可變的,StringBuffer,StringBuilder的長度是可變的。若是你對字符串中的內容常常進行操做,特別是內容要修改時,那麼使用StringBuffer,若是最後須要String,那麼使用StringBuffer的toString()方法。設計模式

三、說出ArrayList,Vector, LinkedList的存儲性能和特性 
ArrayList和Vector都是使用數組方式存儲數據,此數組元素數大於實際存儲的數據以便增長和插入元素,它們都容許直接按序號索引元素,可是插入元素要涉及數組元素移動等內存操做,因此索引數據快而插入數據慢,Vector因爲使用了synchronized方法(線程安全),一般性能上較ArrayList差,而LinkedList使用雙向鏈表實現存儲,按序號索引數據須要進行前向或後向遍歷,可是插入數據時只須要記錄本項的先後項便可,因此插入速度較快。數組

4.字符串「abcde」經過寫一個函數不讓調用第三方的字符串,實現一個字符串倒序,好比字符串「abcde」變成「edcba」 
String src = 「abcde」; 
String dst = new StringBuffer(src).reverse().toString();安全

五、Collection 和 Collections的區別。 
Collection是集合類的上級接口,繼承與他的接口主要有Set 和List. 
Collections是針對集合類的一個幫助類,他提供一系列靜態方法實現對各類集合的搜索、排序、線程安全化等操做markdown

六、final, finally, finalize的區別。 
final 用於聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。 
finally是異常處理語句結構的一部分,表示老是執行。 
finalize是Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,能夠覆蓋此方法提供垃圾收集時的其餘資源回收,例如關閉文件等。異步

七、sleep() 和 wait() 有什麼區別? 
1.這兩個方法來自不一樣的類分別是,sleep來自Thread類,和wait來自Object類。 
2.最主要是sleep方法沒有釋放鎖,而wait方法釋放了鎖,使得其餘線程可使用同步控制塊或者方法。sleep不出讓系統資源;wait是進入線程等待池等待,出讓系統資源,其餘線程能夠佔用CPU。通常wait不會加時間限制,由於若是wait線程的運行資源不夠,再出來也沒用,要等待其餘線程調用notify/notifyAll喚醒等待池中的全部線程,纔會進入就緒隊列等待OS分配系統資源。sleep(milliseconds)能夠用時間指定使它自動喚醒過來,若是時間不到只能調用interrupt()強行打斷。 
3.wait,notify和notifyAll只能在同步控制方法或者同步控制塊裏面使用,而sleep能夠在任何地方使用 
4. Sleep須要捕獲異常,而wait不須要ide

八、同步和異步有何異同,在什麼狀況下分別使用他們?舉例說明。 
若是數據將在線程間共享。例如正在寫的數據之後可能被另外一個線程讀到,或者正在讀的數據可能已經被另外一個線程寫過了,那麼這些數據就是共享數據,必須進行同步存取。 
當應用程序在對象上調用了一個須要花費很長時間來執行的方法,而且不但願讓程序等待方法的返回時,就應該使用異步編程,在不少狀況下采用異步途徑每每更有效率。異步編程

9,抽象類與接口的區別(abstract與interface的區別) 
abstract能夠修飾抽象方法,而一個類只要有一個抽象方法,就必須用abstract定義該類,即抽象類。 
用interface修飾的類,裏面的方法都是抽象方法,所以在定義接口的時候,能夠直接不加那些修飾,系統會默認的添上去。接口裏面的字段都是公有常量,即public static final修飾的字段。

十、線程中wait,join,sleep,yield, notify,notifyall,synchronized,區別及聯繫 
1).sleep()方法 
在指定時間內讓當前正在執行的線程暫停執行,但不會釋放「鎖標誌」。不推薦使用。sleep()使當前線程進入阻塞狀態,在指定時間內不會執行。 
2).wait()方法 
在其餘線程調用對象的notify或notifyAll方法前,致使當前線程等待。線程會釋放掉它所佔有的「鎖標誌」,從而使別的線程有機會搶佔該鎖。 
喚醒當前對象鎖的等待線程使用notify或notifyAll方法,waite() 和notify()必須在synchronized函數或synchronized block中進行調用。 
yield方法暫停當前正在執行的線程對象。yield()只是使當前線程從新回到可執行狀態,因此執行 
3)yield()的線程有可能在進入到可執行狀態後立刻又被執行。yield()只能使同優先級或更高優先級的線程有執行的機會。 
4).join方法 
等待該線程終止。等待調用join方法的線程結束,再繼續執行。如:t.join();//主要用於等待t線程運行結束,若無此句,main則會執行完畢,致使結果不可預測。

十一、接口是否可繼承接口? 抽象類是否可實現(implements)接口? 抽象類是否可繼承實體類(concrete class)? 
接口能夠繼承接口。抽象類能夠實現(implements)接口,抽象類是否可繼承實體類,但前提是實體類必須有明確的構造函數。

十二、abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized?

1三、是否能夠繼承String類? 
String類是final類故不能夠繼承。

1四、java switch支持的數據類型: 
java支持的數據類型有五種 
他們分別是: 
byte、char、short、int、枚舉 
以上是JDK1.6之前的版本。JDK1.7時,又增長了String,因此相對於JDK1.7而言就是六種了

1五、什麼是單例模式,請寫出一個來: 
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; } } 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
第二種形式:
public class Singleton { private static Singleton instance = null; public static synchronized Singleton getInstance() { //這個方法比上面有所改進,不用每次都進行生成對象,只是第一次 //使用時生成實例,提升了效率! if (instance==null) instance=new Singleton(); return instance; } } 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

其餘形式: 
定義一個類,它的構造函數爲private的,全部方法爲static的。 
通常認爲第一種形式要更加安全些

1六、Java經常使用的設計模式?說明工廠模式。 
Java中的23種設計模式: 
Factory(工廠模式), Builder(建造模式), Factory Method(工廠方法模式), 
Prototype(原始模型模式),Singleton(單例模式), Facade(門面模式), 
Adapter(適配器模式), Bridge(橋樑模式), Composite(合成模式), 
Decorator(裝飾模式), Flyweight(享元模式), Proxy(代理模式), 
Command(命令模式), Interpreter(解釋器模式), Visitor(訪問者模式), 
Iterator(迭代子模式), Mediator(調停者模式), Memento(備忘錄模式), 
Observer(觀察者模式), State(狀態模式), Strategy(策略模式), 
Template Method(模板方法模式), Chain Of Responsibleity(責任鏈模式) 
工廠模式:工廠模式是一種常常被使用到的模式,根據工廠模式實現的類能夠根據提供的數據生成一組類中某一個類的實例, 
一般這一組類有一個公共的抽象父類而且實現了相同的方法,可是這些方法針對不一樣的數據進行了不一樣的操做。 
首先須要定義一個基類,該類的子類經過不一樣的方法實現了基類中的方法。而後須要定義一個工廠類,工廠類能夠根據條件 
生成不一樣的子類實例。當獲得子類的實例後,開發人員能夠調用基類中的方法而沒必要考慮到底返回的是哪個子類的實例。

 
4
0
相關文章
相關標籤/搜索