面試----java基礎

1作用域public,private,protected,以及不寫時的區別答:區別如下:
作用域           當前類       同一package    子孫類       其他package
public             √              √                   √                 √
protected        √              √                  √                  ×
friendly           √              √                   ×                 ×
private            √              ×                   ×                 ×

不寫時默認爲friendly


2Anonymous Inner Class (匿名內部類) 是否可以extends(繼承)其它類,是否可以implements(實現)interface(接口)
答:匿名的內部類是沒有名字的內部類。不能extends(繼承) 其它類,但一個內部類可以作爲一個接口,由另一個內部類實現

關於JAVA內部類:一個內部類的定義是定義在另一個類內部的類。
  存在它的原因是:
  1.一個內部類的對象能夠訪問創建它的對象的實現,包括私有數據。即內部類實例對包含它的哪個類的實例來說,是特權的。
  2.對於同一個包中的其他類來說,內部類能夠隱藏起來,換句話說,內部類不管方法的可見性如何,那怕是public,除了包容類,其他類都無法使用它。
  3.匿名內部類可以很方便的定義回調。
  4.使用內部類可以非常方便的編寫事件驅動程序。

實它真正的目的僅僅爲了定義回調--進一步就是事件驅動。
接口和回調:編程一個常用的模式是回調模式,在這種模式中你可以指定當一個特定時間發生時回調對象上的方法。

注意事項:

匿名類和內部類中的中的this :
有時候,我們會用到一些內部類和匿名類。當在匿名類中用this時,這個this則指的是匿名類或內部類本身。
這時如果我們要使用外部類的方法和變量的話,則應該加上外部類的類名。如下面這個例子:

public class A {
  int i = 1;
  public A() {
    Thread thread = new Thread() {
      public void run() {
        for(;;) {
          A.this.run();
          try {
            sleep(1000);
          } catch(InterruptedException ie) {
          }
        }
      }
    };
    thread.start();
  }
  public void run() {
    System.out.println("i = " + i);
    i++;
  }
  public static void main(String[] args) throws Exception {
    new A();
  }
} 

   在上面這個例子中, thread 是一個匿名類對象,在它的定義中,它的 run 函數裏用到了外部類的 run 函數。
    這時由於函數同名,直接調用就不行了。這時有兩種辦法,一種就是把外部的 run 函數換一個名字,但這種辦法對於一個開發到中途的應用來說是不可取的
    。那麼就可以用這個例子中的辦法用外部類的類名加上 this 引用來說明要調用的是外部類的方法 run。

拓展:http://qsky.iteye.com/blog/153493


4&和&&的區別
答:&是位運算符,表示按位與運算,&&是邏輯運算符,表示邏輯與(and)


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


6什麼時候用assert
答:assertion(斷言)在軟件開發中是一種常用的調試方式,很多開發語言中都支持這種機制。在實現中,assertion就是在程序中的一條語句,它對一個boolean表達式進行檢查,一個正確程序必須保證這個boolean表達式的值爲true;如果該值爲false,說明程序已經處於不正確的狀態下,系統將給出警告或退出。一般來說,assertion用於保證程序最基本、關鍵的正確性。assertion檢查通常在開發和測試時開啓。爲了提高性能,在軟件發佈後,assertion檢查通常是關閉的




7String s = new String("xyz");創建了幾個String Object
答:兩個,一個字符對象,一個字符對象引用對象



11數組有沒有length()這個方法? String有沒有length()這個方法
答:數組沒有length()這個方法,有length的屬性。String有length()這個方法


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


13Set裏的元素是不能重複的,那麼用什麼方法來區分重複與否呢? 是用==還是equals()? 它們有何區別
答:Set裏的元素是不能重複的,那麼用iterator()方法來區分重複與否。equals()是判讀兩個Set是否相等
    equals()和==方法決定引用值是否指向同一對象equals()在類中被覆蓋,爲的是當兩個分離的對象的內容和類型相配的話,返回真值


常見的runtime exceptio。

ArithmeticException(除數爲0的異常), BufferOverflowException(緩衝區上溢異常), BufferUnderflowException(緩衝區下溢異常), IndexOutOfBoundsException(出界異常), NullPointerException(空指針異常), EmptyStackException(空棧異常), IllegalArgumentException(不合法的參數異常),


15、error和exception有什麼區別
答:error 表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說內存溢出。不可能指望程序能處理這樣的情況
    exception 表示一種設計或實現問題。也就是說,它表示如果程序運行正常,從不會發生的情況


16,抽象類與接口的區別。

 抽象類可以由自己的數據成員,同時也可以有不爲抽象的方法。

而在接口中,只能有靜態常量的數據成員,即 static final 的數據成員。所有的方法都是abstract的.

一個類只能繼承一個抽象類,但是可以實現多個接口

從設計的理念上來看,抽象類是is-a 的關係 ,接口是has -a 的關係


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

20、構造器Constructor是否可被override
答:構造器Constructor不能被繼承,因此不能重寫Overriding,但可以被重載Overloading

21是否可以繼承String類
答:String類是final類故不可以繼承


try {}裏有一個return語句,那麼緊跟在這個try後的finally {}裏的code會不會被執行,什麼時候被執行,在return前還是後
答:會執行,在return前執行

23用最有效率的方法算出2乘以8等於幾
答:2 << 3 向右移位3次.相當於2的三次方.


25當一個對象被當作參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後的結果,那麼這裏到底是值傳遞還是引用傳遞
答:是值傳遞。Java 編程語言只有值傳遞參數。當一個對象實例作爲一個參數被傳遞到方法中時,參數的值就是對該對象的引用。對象的內容可以在被調用的方法中改變,但對象的引用是永遠不會改變的

【值傳遞,只是這個“值”是對象的引用。】


26swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上
答:switch(expr1)中,expr1是一個整數表達式。因此傳遞給 switch 和 case 語句的參數應該是 int、 short、 char 或者 byte。long,string 都不能作用於swtich


27ArrayList和Vector的區別,HashMap和Hashtable的區別?
答:就ArrayList與Vector主要從二方面來說.
一.同步性:Vector是線程安全的,也就是說是同步的,而ArrayList是線程序不安全的,不是同步的
二.數據增長:當需要增長時,Vector默認增長爲原來一培,而ArrayList卻是原來的一半
就HashMap與HashTable主要從三方面來說。
一.歷史原因:Hashtable是基於陳舊的Dictionary類的,HashMap是Java 1.2引進的Map接口的一個實現
二.同步性:Hashtable是線程安全的,也就是說是同步的,而HashMap是線程序不安全的,不是同步的
三.值:只有HashMap可以讓你將空值作爲一個表的條目的key或value


28char型變量中能不能存貯一箇中文漢字?爲什麼?
答:是能夠定義成爲一箇中文的,因爲java中以unicode編碼,一個char佔16個字節,所以放一箇中文是沒問題的,一個字符是8個字節,一個漢字是兩個字符。


GC是什麼? 爲什麼要有GC
答:GC是垃圾收集的意思(Gabage Collection),內存處理是編程人員容易出現問題的地方,忘記或者錯誤的內存回收會導致程序或系統的不穩定甚至崩潰,Java提供的GC功能可以自動監測對象是否超過作用域從而達到自動回收內存的目的,Java語言沒有提供釋放已分配內存的顯示操作方法。


34談談final, finally, finalize的區別
答:final—修飾符(關鍵字)如果一個類被聲明爲final,意味着它不能再派生出新的子類,不能作爲父類被繼承。因此一個類不能既被聲明爲 abstract的,又被聲明爲final的。將變量或方法聲明爲final,可以保證它們在使用中不被改變。被聲明爲final的變量必須在聲明時給定初值,而在以後的引用中只能讀取,不可修改。被聲明爲final的方法也同樣只能使用,不能重載
finally—再異常處理時提供 finally 塊來執行任何清除操作。如果拋出一個異常,那麼相匹配的 catch 子句就會執行,然後控制就會進入 finally 塊(如果有的話)
finalize—方法名。Java 技術允許使用 finalize() 方法在垃圾收集器將對象從內存中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調用的。它是在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統資源或者執行其他清理工作。finalize() 方法是在垃圾收集器刪除對象之前對這個對象調用的


35.實現多線程的兩種方法:繼承Tread類  覆蓋public void run()  VS   實現Runnable接口。

簡單模擬一下:

/*
演示了多線程兩種實現方法的實現機制
*/

//自定義的Runnable接口
interface MyRunnable
{
       public void run();
}

//自定義的Thread類
class MyThread
{
       private MyRunnable mr;
       public MyThread(){}
       public MyThread( MyRunnable mr )
       {
              this.mr=mr;
       }

       //這裏就是關鍵
       //1.如果用繼承MyThread類的方法實現,那麼子類調用的是被覆蓋的後的run()方法
       //2.如果用實現Runnable接口的run()方法實現,那麼調用的是實現接口的run方法(即mr.run())
       public void run()
       {
              mr.run();
       }
       public void start()
       {
              this.run();
       }
}


/*
//通過繼承的方法實現多線程
class Test extends MyThread
{
     public void run()
       {
              System.out.println( " extends run " );
       }
}

*/



61 sleep()  和  wait()  有什麼區別 ? 
答: sleep是線程類(Thread)的方法,導致此線程暫停執行指定時間,給執行機會給其他線程,但是監控狀態依然保持,到時後會自動恢復。調用sleep不會釋放對象鎖。
wait是Object類的方法,對此對象調用wait方法導致本線程放棄對象鎖,進入等待此對象的等待鎖定池,只有針對此對象發出notify方法(或notifyAll)後本線程才進入對象鎖定池準備獲得對象鎖進入運行狀態。


57在JAVA中,如何跳出當前的多重嵌套循環?
答:用break; return 方法。


11.int 和integer的區別

  前者是基本數據類型,後者是封裝類,是對象。 轉換方式,Integer有intValue方法。轉換此Integer對象爲int值。

Integer還有一個靜態的方法。parseInt(String ):int

Integer還有一個將int包裝成Integer的靜態方法:static Integer  valueOf(int i)
              返回一個表示指定的 int 值的 Integer 實例。


 7、說出ArrayList,Vector, LinkedList的存儲性能和特性

  ArrayList和Vector都是使用數組方式存儲數據,此數組元素數大於實際存儲的數據以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及數組元素移動等內存操作,所以索引數據快而插入數據慢,Vector由於使用了synchronized方法(線程安全),通常性能上較ArrayList差,而LinkedList使用雙向鏈表實現存儲,按序號索引數據需要進行前向或後向遍歷,但是插入數據時只需要記錄本項的前後項即可,所以插入速度較快。



110、J2EE是什麼
 J2EE 是Sun公司提出的多層(multi-diered),分佈式(distributed),基於組件(component-base)的企業級應用模型 (enterpriese application model)



114、jsp有哪些動作?作用分別是什麼?
 JSP 共有以下6種基本動作

jsp:include:在頁面被請求的時候引入一個文件

jsp:useBean:尋找或者實例化一個JavaBean。

jsp:setProperty:設置JavaBean的屬性。

jsp:getProperty:輸出某個JavaBean的屬性。

jsp:forward:把請求轉到一個新的頁面。

jsp:plugin:根據瀏覽器類型爲Java插件生成OBJECT或EMBED標記



121、內部類可以引用他包含類的成員嗎?有沒有什麼限制?
一個內部類對象可以訪問創建它的外部類對象的內容



125、啓動一個線程是用run()還是start()?
 啓動一個線程是調用start()方法,使線程所代表的虛擬處理機處於可運行狀態,這意味着它可以由JVM調度並執行。這並不意味着線程就會立即運行。run()方法可以產生必須退出的標誌來停止一個線程。


98、MVC的各個部分都有那些技術來實現?如何實現?
MVC 是Model-View-Controller的簡寫。"Model" 代表的是應用的業務邏輯(通過JavaBean,EJB組件實現), "View" 是應用的表示面(由JSP頁面產生),"Controller" 是提供應用的處理過程控制(一般是一個Servlet),通過這種設計模型把應用邏輯,處理過程和顯示邏輯分成不同的組件實現。這些組件可以進行交互和重用。





發佈了26 篇原創文章 · 獲贊 28 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章