Java面試知識點

1. Error和Exception的區別?

   Error表示系統級的錯誤和程序不必處理的錯誤;

   Exception表示需要捕獲和程序進行處理的異常;

2.堆和棧有什麼區別?

   棧是一種線性結構,後進先出,增加和刪除在同一端;堆是棧的一個組成元素;

  堆是用來new創建出來的對象和數組的空間,棧是存放基本數據類型的變量和引用的內存空間;

   棧中的變量,超過變量的作用域範圍,就會被回收內存空間;堆中的內存則是由Java虛擬機的垃圾回收器來回收,只有當內存不夠的時候,垃圾收集器會回收堆的內存空間;

3.throw和throws的區別?

   throws是聲明一個方法可能拋出的異常,throw是拋出具體的異常。throws用於方法聲明的後面,throw則用於方法方法的內部來拋出異常;

   throws表示當前方法不需要捕獲的異常,由系統重新拋出給方法的調用者;throw是捕獲異常,重新封裝後拋出上一級;

4.super和this的區別?

   Java虛擬機會爲當前類的對象分配一個指向自身的指針,this就是這個對象的默認引用;需要用到this的情況:

   調用本類的一個構造方法;

   局部變量和成員變量同名的時候,要用this.num的方式來調用成員變量;

   訪問當前方法的引用;

   super是指向父類的應用。下面是要用到super的情況:

   調用父類的構造方法,通過super來調用;

   在子類訪問父類被屏蔽的方法和屬性;

5.類的初始化機制?

  創建類的實例;

  調用類的靜態方法;

  訪問某個類的或接口的靜態變量;

  調用Java API的某些反射方法;

  初始化一個類的子類;

  啓動類。

6.構造方法的特點?

  沒有返回值;

  方法名和類名相同;

  不能被static,final,synchronized,native等修飾;

  不能顯式調用構造方法;

 7.垃圾回收的優點和缺點?

    把程序員從複雜的內存的跟蹤,檢測,釋放中解放出來,

    防止內存泄露,提高程序的健壯性;

    程序中的對象只有不被引用變量引用的時候,纔可以回收;

    程序無法迫使垃圾收集器回收內存;

    當垃圾收集器要回收這個對象的內存的時候,會調用finalize方法,但是調用這個方法可能會導致這個對象復活。

8.異常處理機制?

    把異常分類,用Java類來表示異常;

    把異常的代碼和正常的流程分開,提高程序的可讀性,簡化結構;

    靈活處理異常,當前可以處理的異常就處理,不能處理的異常拋出給調用者處理;

    濫用異常會降低程序的性能;

    過多使用異常會影響程序的可讀性;

    容易覆蓋程序的錯誤,影響調試;

    用異常來表示正確的情況,違背了異常的處理機制。

9.異常的處理原則?

    異常只能用於非正常的情況;

    爲異常提供說明文檔;

    儘可能避免運行性異常;

    保持異常的原子性;

    避免過於龐大的try代碼塊;

    catch最好跟具體的異常;

    不雅忽略catch捕獲的異常。

10.Java的異常處理機制和簡答應用?

     當違反Java的語義規則的時候,Java虛擬機就會錯誤表示一個異常。Java的違背語義規則有兩種情況:

    一種是Java內置的類庫的語義檢查,如數組越界,null異常;

   另一種是程序員擴充語義檢查,自定義異常,在適當的地方和適當的時候拋出異常。

11.接口的特徵

    接口的變量時靜態常量,默認是用public static final來修飾;

    接口中的方法是公有的抽象方法,用public abstract來修飾;

    接口中不能有構造函數;

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

   不允許創建一個接口的實例。

12.抽象類和接口的區別?

    都代表系統的抽象層;

   不能被實例化;

   都可以有抽象的方法;

   一個類可以有實現多個接口,但是隻能繼承一個類;

   抽象類可以與構造函數,但是接口不能有構造函數;

   類代表的是is a的關係,接口代表的是has a的關係;

   接口的變量都是公有的靜態常量,但是抽象類可有各種類型的變量;

  接口中的方法必須是抽象的,但是抽象類的方法可以有實現;

13.static的用法?

   static代表內存中只有一份拷貝,所有的額對象實例共用這一份內存;

   static的變量和方法可以用類名去訪問;

  不能用abstract來修飾靜態變量和方法;

  靜態方法不能使用this,super的關鍵字;

  靜態方法不可以使用成員函數和成員變量;

  在類加載的時候,靜態變量會被加載一次,加載的順序和靜態代碼塊的順序有關。

14 abstract的使用?

    abstract修飾類,表示這個是抽象類,可有抽象方法,但是抽象類不能被實例化;

    abstract修飾方法,表示這個方法是抽象方法,抽象方法只有聲明,沒有方法體;

    抽象類和抽象方法不能被final修飾;

15.多態有什麼特徵?

   對於引用類型的變量,編譯器按照它聲明的類型處理;

   對於引用類型的變量,運行時Java虛擬機根據它實際引用的類型來處理;

   實例方法和運行時候的實際類型的方法綁定,屬於動態綁定,因爲運行的時候由Java虛擬機決定的;

   靜態方法和引用變量所聲明的類型的方法綁定,屬於靜態綁定,因爲在編譯的時候已經決定了;

  成員變量和所聲明的類型的變量綁定,屬於靜態綁定,因爲在編譯的時候已經決定了。

16.靜態內部類和內部類的區別?

   靜態內部類不依賴於外部類被實例化,而普通的內部類依賴於外部類的實例化。

17.什麼是GC?

   GC是垃圾回收器,內存是編程人員很容易出現問題的地方,忘記或者錯誤的內存管理會導致程序不穩定甚至奔潰,

   Java的GC功能可以自動檢測對象是否超過作用域而達到自動回收內存的目的,

18.length()和length?

   數組有length;String有length()的方法;

19.Java中的內置異常原理?

   當違反Java的語義時候,Java的虛擬機就會拋出異常。一種是Java的內置語義檢查,一種是程序員擴充的語義檢查,如創建自己的異常類。

20.Java虛擬機加載Class文件的機制和原理?

    JVm的類加載是由classLoader和它的子類來完成,在運行的時候查找和加載類。

21.簡述Synchronized和lock的異同?

    lock可以實現synchronized的功能;

    lock可以比synchronized有更好的線程語義和線程性能;

    synchronized自動釋放內置的鎖,Lock要手工釋放鎖;

22.Java如何進行異常處理?

   Java通過面向對象的方法進行異常處理,把各種不同的異常分類,提供了良好的接口。Java中每一個異常都是對象,它是Throwable類和它的子類。

   當方法遇到異常的時候,JVM就會生成一個異常類,可以通過調用這個異常類的方法來對異常進行處理。

23.Java的可序列化?

     序列化是一種處理對象流的機制,爲了解決在對象流進行讀寫所產生的問題。

24.EJB是基於哪些技術實現的?並說出SessionBean和EntityBean的區別,StatefulBean和StatelessBean的區別。

    EJB包括SessionBean,EntityBean和Message Driven Bean,基於JNDI、RMI、JAT等技術實現。

   實體Bean代表系統要用到的數據;

   SessionBean是J2EE應用程序用來完成服務器端的一些業務操作,例如訪問數據庫,調用其它EJB組件;

  25.JSP中動態INCLUDE與靜態INCLUDE的區別?

     靜態INCLUDE不會檢查文件的變化,把文件插入到頁面執行,<@ include="index.html">
     動態INCLUDE包含的是一個動態文件,相當於調用,就是那個文件編譯執行,返回結果,可以傳遞參數,會檢查文件的變化。

26.JavaBean和EJB的區別?

    JavaBean是可重用的組件,對於JavaBean沒有嚴格的規範,理論上,任何一個Java類都可以是JavaBean。JavaBean一般是由如Tomcat這樣的容器創建,

    要有一個無參數的構造函數,要實現Serialable接口。EJB是分佈式組件,它是基於Java的遠程調用技術實現的。EJB容器是EJB的遠程代理。

27.EJB包括(SessionBean,EntityBean)說出他們的生命週期,及如何管理事務的?
    SessionBean的生命週期是由容器決定的;

    EntityBean存活時間較長,並且是連續的,只要數據庫中的數據存在,EntityBean就存在。

28.數據連接池的工作機制是什麼?

   J2EE的服務器啓動的時候,會啓動一定數目的連接,並且維護不少於此數目的連接。當有連接到來的時候,連接池驅動程序會返回一個未使用的連接並標記爲

   忙。如果當前沒有空連接,連接池會新建一個連接,標記爲忙。當池連接調用完之後,又會重新標記爲空閒。

29.JSP的內置對象及方法?

   request表示HttpServletRequest,包含了所有瀏覽器的請求信息,提供了獲取Cookie,Session和Header的方法;

   response表示HttpServletResponse,包含了處理請求的相應方法;

   out是JspWriter的一個實例,提供了幾個向瀏覽器返回結果的方法;

   session是用於保存用戶會話的信息;

   aplication表示一個ServletContext對象,有利於查找servlet引擎和servlet環境的信息;

   config表示ServletConfig,用於初始化存取Servlet實例化的參數;

   page表示一個Servlet的實例。

   pageContext表示一個javax.servlet.jsp.PageContext對象。它是用於方便存取各種範圍的名字空間、servlet相關的對象的API,並且包裝了通用的servlet相關功能的方法。

30.jsp的常用指令?

   <%@ page language="java" contentType="text/html;charset="UTF-8" pageContext="UTF-8">

   <%@  include="path">

   <%@ taglib prefix="tagPrefix" uri="tagURI">

31.頁面間對象傳遞的方法
   request,session,application,cookie

32.JSP和Servlet有哪些相同點和不同點,他們之間的聯繫是什麼?
   jsp的本質是Servlet,翻譯後就是類Servlet文件;

   Servlet只有Java代碼,邏輯清晰,用於邏輯控制;jsp由HTML和Java代碼顯示,用於試圖顯示。

33.四種會話跟蹤技術?

   page代表頁面相關的對象和屬性;

   request代表一個請求相關的對象和屬性;

   Session代表會話相關的對象和屬性,可以跨多個請求;

   Application代表整個應用程序相關的對象和屬性。

34.排序都有哪幾種方法?請列舉。用JAVA實現一個快速排序.

   / /使用快速排序方法對a[ 0 :n- 1 ]排序

   從a[0:n-1]選取一個數值爲middle,作爲支點;

   把剩下的元素分割爲兩段left和right,使得left那段的元素小於middle,right那段的元素大於middle;

   遞歸地使用快排對left段的元素排序;

   遞歸地使用快排對right段的元素排序;

35.請對以下在J2EE中常用的名詞進行解釋(或簡單描述)
   web容器:給處於其中的應用程序組件(JSP,SERVLET)提供一個環境,使JSP,SERVLET直接更容器中的環境變量接口交互,不必關注其它系統問題。

   EJB容器:Enterprise java bean 容器。更具有行業領域特色。

  JNDI:(Java Naming & Directory Interface)JAVA命名目錄服務:提供一個目錄系統,讓其他的應用程序在上面留下一個自己的索引,滿足快速查找和定位

             分佈式應用程序的功能;

  JMS:(Java Message Service)JAVA消息服務:用於應用程序之間的通訊;

  JTA:(Java Transaction API)JAVA事務服務:提供分佈式事務管理;

  JAF:(Java Action FrameWork)JAVA安全認證框架;

  RMI/IIOP:(Remote Method Invocation /internet對象請求中介協議)他們主要用於通過遠程調用服務。

36.J2EE是什麼?

  J2EE是sun提出來的多層,分佈式,基於組件的企業級應用模型。它包括客戶層,web層,Business層,企業信息系統層。

37.BS和CS的區別和聯繫?

  C/S是Client/Server的縮寫,B/S是Brower/Server的縮寫。

  硬件環境不同: 局域網和廣域網;

  對安全要求不同:

  程序架構不同:

  軟件重用不同:

  系統維護不同:

  用戶接口不同

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章