1. 程式人生 > >Android開發面試經——3.常見Java基礎筆試題

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

關注finddreams部落格:http://blog.csdn.net/finddreams/article/details/44403041 
因為Androd使用Java語言來程式設計的,所以我們做Android開發全面的掌握Java基礎是必須的。在面試的過程中,我們發現很多公司發的筆試題有很多知識點都是Java的,搞安卓久了,Java基礎的一些知識點也都快忘了,今天就讓我們來一起復習一些Java基礎,希望能在面試中用到;

1、Overload和Override的區別。Overloaded的方法是否可以改變返回值的型別? 
方法的重寫Overriding和過載Overloading是Java多型性的不同表現。重寫Overriding是父類與子類之間多型性的一種表現,過載Overloading是一個類中多型性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和引數,我們說該方法被重寫 (Overriding)。子類的物件使用這個方法時,將呼叫子類中的定義,對它而言,父類中的定義如同被”遮蔽”了。如果在一個類中定義了多個同名的方法,它們或有不同的引數個數或有不同的引數型別,則稱為方法的過載(Overloading)。Overloaded的方法是可以改變返回值的型別。

2、String和StringBuffer,StringBuilder的區別 
String 字串常量 
StringBuffer 字串變數(執行緒安全) 
StringBuilder 字串變數(非執行緒安全) 
String的長度是不可變的,StringBuffer,StringBuilder的長度是可變的。如果你對字串中的內容經常進行操作,特別是內容要修改時,那麼使用StringBuffer,如果最後需要String,那麼使用StringBuffer的toString()方法。

3、說出ArrayList,Vector, LinkedList的儲存效能和特性 
ArrayList和Vector都是使用陣列方式儲存資料,此陣列元素數大於實際儲存的資料以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及陣列元素移動等記憶體操作,所以索引資料快而插入資料慢,Vector由於使用了synchronized方法(執行緒安全),通常效能上較ArrayList差,而LinkedList使用雙向連結串列實現儲存,按序號索引資料需要進行前向或後向遍歷,但是插入資料時只需要記錄本項的前後項即可,所以插入速度較快。

4.字串“abcde”通過寫一個函式不讓呼叫第三方的字串,實現一個字串倒序,比如字串“abcde”變成“edcba” 
String src = “abcde”; 
String dst = new StringBuffer(src).reverse().toString();

5、Collection 和 Collections的區別。 
Collection是集合類的上級介面,繼承與他的介面主要有Set 和List. 
Collections是針對集合類的一個幫助類,他提供一系列靜態方法實現對各種集合的搜尋、排序、執行緒安全化等操作

6、final, finally, finalize的區別。

 
final 用於宣告屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。 
finally是異常處理語句結構的一部分,表示總是執行。 
finalize是Object類的一個方法,在垃圾收集器執行的時候會呼叫被回收物件的此方法,可以覆蓋此方法提供垃圾收集時的其他資源回收,例如關閉檔案等。

7、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不需要

8、同步和非同步有何異同,在什麼情況下分別使用他們?舉例說明。 
如果資料將線上程間共享。例如正在寫的資料以後可能被另一個執行緒讀到,或者正在讀的資料可能已經被另一個執行緒寫過了,那麼這些資料就是共享資料,必須進行同步存取。 
當應用程式在物件上呼叫了一個需要花費很長時間來執行的方法,並且不希望讓程式等待方法的返回時,就應該使用非同步程式設計,在很多情況下采用非同步途徑往往更有效率。

9,抽象類與介面的區別(abstract與interface的區別) 
abstract可以修飾抽象方法,而一個類只要有一個抽象方法,就必須用abstract定義該類,即抽象類。 
用interface修飾的類,裡面的方法都是抽象方法,因此在定義介面的時候,可以直接不加那些修飾,系統會預設的添上去。接口裡面的欄位都是公有常量,即public static final修飾的欄位。

10、執行緒中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則會執行完畢,導致結果不可預測。

11、介面是否可繼承介面? 抽象類是否可實現(implements)介面? 抽象類是否可繼承實體類(concrete class)? 
介面可以繼承介面。抽象類可以實現(implements)介面,抽象類是否可繼承實體類,但前提是實體類必須有明確的建構函式。

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

13、是否可以繼承String類? 
String類是final類故不可以繼承。

14、java switch支援的資料型別: 
java支援的資料型別有五種 
他們分別是: 
byte、char、short、int、列舉 
以上是JDK1.6以前的版本。JDK1.7時,又增加了String,所以相對於JDK1.7而言就是六種了

15、什麼是單例模式,請寫出一個來: 
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的。 
一般認為第一種形式要更加安全些

16、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(責任鏈模式) 
工廠模式:工廠模式是一種經常被使用到的模式,根據工廠模式實現的類可以根據提供的資料生成一組類中某一個類的例項, 
通常這一組類有一個公共的抽象父類並且實現了相同的方法,但是這些方法針對不同的資料進行了不同的操作。 
首先需要定義一個基類,該類的子類通過不同的方法實現了基類中的方法。然後需要定義一個工廠類,工廠類可以根據條件 
生成不同的子類例項。當得到子類的例項後,開發人員可以呼叫基類中的方法而不必考慮到底返回的是哪一個子類的例項。