Android開發面試經——4.常見Java基礎筆試題,androidjava

來源:互聯網
上載者:User

Android開發面試經——4.常見Java基礎筆試題,androidjava

關注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的區別
String的長度是不可變的,StringBuffer的長度是可變的。如果你對字串中的內容經常進行操作,特別是內容要修改時,那麼使用StringBuffer,如果最後需要String,那麼使用StringBuffer的toString()方法。
StringBuder是不安全的 String 是安全的

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;         }    }
第二種形式:
public class Singleton {  private static Singleton instance = null;  public static synchronized Singleton getInstance() {  //這個方法比上面有所改進,不用每次都進行產生對象,只是第一次       //使用時產生執行個體,提高了效率!  if (instance==null)    instance=new Singleton();return instance;   } }

其他形式:
定義一個類,它的建構函式為private的,所有方法為static的。
一般認為第一種形式要更加安全些

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.