Java筆試題集錦

Java筆試題集錦java

1.MVC的各個部分都有那些技術來實現?怎樣實現? c++

答:MVCModelViewController的簡寫。"Model" 表明的是應用的業務邏輯(經過JavaBeanEJB組件實現), "View" 是應用的表示面(由JSP頁面產生),"Controller" 是提供應用的處理過程控制(一般是一個Servlet),經過這樣的設計模型把應用邏輯,處理過程和顯示邏輯分紅不一樣的組件實現。這些組件可以進行交互和重用。 web

 

2.J2EE是什麼? 算法

答:Je22Sun公司提出的多層(multi-diered),分佈式(distributed),基於組件(component-base)的企業級應用模型(enterpriese application model).在這種一個應用系統中,可依照功能劃分爲不一樣的組件,這些組件又可在不一樣計算機上,並且處於對應的層次(tier)中。所屬層次包含客戶層(clietn tier)組件,web層和組件,Business層和組件,企業信息系統(EIS)層。 sql

 

3.J2EE是技術仍是平臺仍是框架? 數據庫

答:J2EE自己是一個標準,一個爲企業分佈式應用的開發提供的標準平臺。 編程

J2EE也是一個框架,包含JDBCJNDIRMIJMSEJBJTA等技術。 設計模式

 

4.STRUTS的應用(STRUTS架構) 數組

答:Struts是採用Java Servlet/JavaServer Pages技術,開發Web應用程序的開放源代碼的framework 採用Struts能開發出基於MVC(Model-View-Controller)設計模式的應用構架。 Struts有例如如下的主要功能: 瀏覽器

.包括一個controller servlet,能將用戶的請求發送到對應的Action對象。

.JSP自由tag庫,並且在controller servlet中提供關聯支持,幫助開發員建立交互式表單應用。

.提供了一系列有用對象:XML處理、經過Java reflection APIs本身主動處理JavaBeans屬性、國際化的提示和消息。

 

5.WEB SERVICE名詞解釋。JSWDL開發包的介紹。JAXPJAXM的解釋。SOAPUDDI,WSDL解釋。

答:Web ServiceWeb Service是基於網絡的、分佈式的模塊化組件,它運行特定的任務,遵照詳細的技術規範,這些規範使得Web Service能與其它兼容的組件進行互操做。

JAXP(Java API for XML Parsing) 定義了在Java中使用DOM, SAX, XSLT的通用的接口。這樣在你的程序中你僅僅要使用這些通用的接口,當你需要改變詳細的實現時候也不需要改動代碼。

JAXM(Java API for XML Messaging) 是爲SOAP通訊提供訪問方法和傳輸機制的API

WSDL是一種 XML 格式,用於將網絡服務描寫敘述爲一組端點,這些端點對包括面向文檔信息或面向過程信息的消息進行操做。這樣的格式首先對操做和消息進行抽象描寫敘述,而後將其綁定到詳細的網絡協議和消息格式上以定義端點。相關的詳細端點即組合成爲抽象端點(服務)。

SOAP即簡單對象訪問協議(Simple Object Access Protocol),它是用於交換XML編碼信息的輕量級協議。

UDDI 的目的是爲電子商務創建標準;UDDI是一套基於Web的、分佈式的、爲Web Service提供的、信息註冊中心的實現標準規範,同一時候也包括一組使企業能將自身提供的Web Service註冊,以使別的企業能夠發現的訪問協議的實現標準。

 

6.C/S B/S 差異:

答:有例如如下八個方面的不一樣:

(1)硬件環境不一樣:

  C/S 通常創建在專用的網絡上, 小範圍裏的網絡環境, 局域網之間再經過專門server提供鏈接和數據交換服務.

  B/S 創建在廣域網之上的, 沒必要是專門的網絡硬件環境,例與電話上網, 租用設備. 信息本身管理. 有比C/S更強的適應範圍, 通常僅僅要有操做系統和瀏覽器便可

(2)對安全要求不一樣

  C/S 通常面向相對固定的用戶羣, 對信息安全的控制能力很是強. 通常高度機密的信息系統採用C/S 結構適宜. 可以經過B/S公佈部分可公開信息.

  B/S 創建在廣域網之上, 對安全的控制能力相對弱, 可能面向不可知的用戶。

()對程序架構不一樣

  C/S 程序可以更加註重流程, 可以對權限多層次校驗, 對系統執行速度可以較少考慮.

  B/S 對安全以及訪問速度的多重的考慮, 創建在需要更加優化的基礎之上. C/S有更高的要求 B/S結構的程序架構是發展的趨勢, MS.Net系列的BizTalk 2000 Exchange 2000, 全面支持網絡的構件搭建的系統. SUN IBM推的JavaBean 構件技術等,使 B/S更加成熟.

()軟件重用不一樣

  C/S 程序可以不可避免的整體性考慮, 構件的重用性不如在B/S要求下的構件的重用性好.

  B/S 對的多重結構,要求構件相對獨立的功能. 能夠相對較好的重用.就入買來的餐桌能夠再利用,而不是作在牆上的石頭桌子

()系統維護不一樣 

  C/S 程序由於整體性, 必須整體考察, 處理出現的問題以及系統升級. 升級難. 多是再作一個全新的系統

  B/S 構件組成,方面構件個別的更換,實現系統的無縫升級. 系統維護開銷減到最小.用戶從網上本身下載安裝就可以實現升級.

()處理問題不一樣

  C/S 程序可以處理用戶面固定, 並且在一樣區域, 安全要求高需求, 與操做系統相關. 應該都是一樣的系統

  B/S 創建在廣域網上, 面向不一樣的用戶羣, 分散地域, 這是C/S沒法做到的. 與操做系統平臺關係最小.

()用戶接口不一樣

  C/S 可能是創建的Window平臺上,表現方法有限,對程序猿廣泛要求較高

  B/S 創建在瀏覽器上, 有更加豐富和生動的表現方式與用戶交流. 並且大部分難度減低,減低開發成本.

()信息流不一樣

  C/S 程序一般是典型的中央集權的機械式處理, 交互性相對低

  B/S 信息流向可變化, B-B B-C B-G等信息、流向的變化, 更像交易中心。

 

7.什麼是JNDI

答:(Java Naming & Directory InterfaceJAVA命名文件夾服務。主要提供的功能是:提供一個文件夾系統,讓其餘各地的應用程序在其上面留下本身的索引,從而知足高速查找和定位分佈式應用程序的功能。

 

8.什麼是JMS

答:(Java Message ServiceJAVA消息服務。主要實現各個應用程序之間的通信。包含點對點和廣播

 

9.什麼是JTA

答:(Java Transaction APIJAVA事務服務。提供各類分佈式事務服務。應用程序僅僅需調用其提供的接口就能夠。

 

10.開發中都用到了那些設計模式?用在什麼場合?

答:每個模式都描寫敘述了一個在咱們的環境中不斷出現的問題,而後描寫敘述了該問題的解決方式的核心。經過這樣的方式,你可以無數次地使用那些已有的解決方式,無需在反覆一樣的工做。主要用到了MVC的設計模式。用來開發JSP/Servlet或者J2EE的相關應用。簡單工廠模式等。

 

11.j2ee常用的設計模式?說明工廠模式。

答: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(責任鏈模式)

工廠模式:工廠模式是一種經常被使用到的模式,依據工廠模式實現的類可以依據提供的數據生成一組類中某一個類的實例,一般這一組類有一個公共的抽象父類並且實現了一樣的方法,但是這些方法針對不一樣的數據進行了不一樣的操做。首先需要定義一個基類,該類的子類經過不一樣的方法實現了基類中的方法。而後需要定義一個工廠類,工廠類可以依據條件生成不一樣的子類實例。當獲得子類的實例後,開發者可以調用基類中的方法而沒必要考慮究竟返回的是哪個子類的實例。

 

12.UML方面

答:標準建模語言UML。用例圖,靜態圖(包含類圖、對象圖和包圖),行爲圖,交互圖(順序圖,合做圖),實現圖

 

13.RMI

RMI 指的是遠程方法調用 (Remote Method Invocation)。它是一種機制,可讓在某個 Java 虛擬機上的對象調用還有一個 Java 虛擬機中的對象上的方法。能夠用此方法調用的不論什麼對象必須實現該遠程接口。調用這樣一個對象時,其參數爲 "marshalled" 並將其從本地虛擬機發送到遠程虛擬機(該遠程虛擬機的參數爲 "unmarshalled")上。該方法終止時,將編組來自遠程機的結果並將結果發送到調用方的虛擬機。假設方法調用致使拋出異常,則該異常將指示給調用方。

 


JAVA 基礎

 

1.怎樣得到數組的長度?

數組名.length

 

2.訪問修飾符「public/private/protected/缺省的修飾符的使用類?

public :  公共,都可訪問

private:  私有的,同一個java類中可以訪問.子類不能訪問.

protected: 同一個包中的類均可訪問.子類可以訪問.

缺省,friendly :當前類,同一個包,都可以訪問.

做用域           當前類       同一package  子孫類       其它package

public            √              √                  √             √

protected        √              √                  √             ×

friendly          √              √                   ×            ×

private           √              ×                   ×            ×

 

3.Anonymous Inner Class (匿名內部類) 可否夠extends(繼承)其餘類,可否夠implements(實現)interface(接口)?

匿名內部類是沒有名字的內部類,不能繼承其餘類,但一個內部類可以做爲一個接口,由還有一個內部類實現.

 

1、因爲匿名內部類沒有名字,因此它沒有構造函數。因爲沒有構造函數,因此它必須全然借用父類的構造函數來實例化,換言之:匿名內部類全然把建立對象的任務交給了父類去完畢。

 

2、在匿名內部類裏建立新的方法沒有太大意義,但它可以經過覆蓋父類的方法達到奇妙效果,如上例所看到的。這是多態性的體現。

 

3、因爲匿名內部類沒有名字,因此沒法進行向下的強制類型轉換,持有對一個匿名內部類對象引用的變量類型必定是它的直接或間接父類類型。

 

new <類或接口> <類的主體>

 

匿名類

 

匿名類是不能有名稱的類,因此沒辦法引用它們。必須在建立時,做爲new語句的一部分來聲明它們。

 

這就要採用還有一種形式的new語句,例如如下所看到的:

 

 

new <類或接口> <類的主體>

 

這樣的形式的new語句聲明一個新的匿名類,它對一個給定的類進行擴展,或者實現一個給定的接口。它還建立那個類的一個新實例,並把它做爲語句的結果而返回。要擴展的類和要實現的接口是new語句的操做數,後跟匿名類的主體。

 

假設匿名類對還有一個類進行擴展,它的主體可以訪問類的成員、覆蓋它的方法等等,這和其它不論什麼標準的類都是同樣的。假設匿名類實現了一個接口,它的主體必須實現接口的方法。

 

注意匿名類的聲明是在編譯時進行的,實例化在執行時進行。這意味着for循環中的一個new語句會建立一樣匿名類的幾個實例,而不是建立幾個不一樣匿名類的一個實例。

 

從技術上說,匿名類可被視爲非靜態的內部類,因此它們具備和方法內部聲明的非靜態內部類同樣的權限和限制。

 

假設要運行的任務需要一個對象,但卻不值得建立全新的對象(緣由多是所需的類過於簡單,或者是由於它僅僅在一個方法內部使用),匿名類就顯得很實用。匿名類尤爲適合在Swing應用程序中高速建立事件處理程序。

 

exp:

return new Contents() {

private int i = 11;

public int value() { return i; }

};

 

這樣的奇怪的語法要表達的意思是:建立從Contents衍生出來的匿名類的一個對象。由new表達式返回的句柄會本身主動上溯造型成一個Contents句柄。匿名內部類的語法事實上要表達的是:

 

class MyContents extends Contents {

private int i = 11;

public int value() { return i; }

}

return new MyContents();

若試圖定義內部類,並想使用在匿名內部類外部定義的一個對象,則編譯器要求外部對象必須是final屬性.

public class Parcel9 {

  public Destination

  dest(final String dest, final float price) {

    return new Destination() {

      private int cost;

      // Instance initialization for each object:

      {

        cost = Math.round(price);

        if(cost > 100)

          System.out.println("Over budget!");

      }

      private String label = dest;

      public String readLabel() { return label; }

    };

  }

  public static void main(String[] args) {

    Parcel9 p = new Parcel9();

    Destination d = p.dest("Tanzania", 101.395F);

  }

}

 

4.static nested class inner class的不一樣?

nested classc++中是嵌套類,inner classjava中是內部類.不一樣就是在因而否有指向外部的引用上.靜態內部類意味着建立一個static內部類的對象,不需要一個外部類對象;不能從一個static內部類的一個對象訪問到一個外部類的對象.

 

5.&&&的差異

&是位運算符,表示按位與運算;&&是邏輯運算符,表示邏輯與(and)

 

6.CollectionCollections的差異

collection是集合類的上級接口,繼承與它的接口主要是setlist

當中list必須以特定的順序容納元素;而一個set不能包括反覆的元素.

映射(Map)一系列"-".可以返回本身鍵的一個set,一個包括本身值的list,或者包括本身(-)對的一個list.

都可構建本身的重複器.

collections類是針對集合類的一個幫助類.它提供一系列的靜態方法對各類集合的搜索,排序,線程安全化等操做.

 

public class SimpleCollection {

  public static void main(String[] args) {

    Collection c = new ArrayList();

    for(int i = 0; i < 10; i++)

      c.add(Integer.toString(i));

    Iterator it = c.iterator();

    while(it.hasNext())

      System.out.println(it.next());

  }

}

 

7.何時用assert

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

 

8.String s = new String("xyz");建立了幾個String Object***

兩個,一個字符對象,一個字符對象引用對象

 

9.math.round(11.5)math.round(-11.5)

前者等於12,後者等於-11.round方法返回與參數最接近的長整數.參數加0.5,求其floor

 

10. short s1 = 1;s1 = s1+1;是否有錯誤? short s1 = 1;s1 += 1;是否有錯誤?

前者s1+1返回一個int,需要強制類型轉換.

後者正確.

 

11.java種有沒有goto?

,爲保留字.但是還沒有使用.

 

12.OverloadOverride的差異。Overloaded的方法可否夠改變返回值的類型?

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

 

13.Set裏的元素是不能反覆的,那麼用什麼方法來區分反覆與否呢? 是用==仍是equals()? 它們有何差異

答:Set裏的元素是不能反覆的,那麼用iterator()方法來區分反覆與否。equals()是判讀兩個Set是否相等

equals()==方法決定引用值是否指向同一對象equals()在類中被覆蓋,爲的是當兩個分離的對象的內容和類型相配的話,返回真值

 

14.給我一個你最多見到的runtime exception?

答:常見的執行時異常有例如如下這些

ArithmeticException(異常的運算條件),

ArrayStoreException(向一個對象數組存放一錯誤類型的對象時)BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException..

 

15.errorexception有什麼差異?

答:error 表示恢復不是不可能但很是困難的狀況下的一種嚴重問題。比方說內存溢出。不可能期望程序能處理這種狀況

    exception 表示一種設計或實現問題。也就是說,它表示假設程序執行正常,從不會發生的狀況

 

16.List, Set, Map是否繼承自Collection接口

答: ListSet是,Map不是

 

17.abstract classinterface的差異

:聲明方法的存在而不去實現它的類叫虛擬類(abstract class).它用於建立一個體現某些基本行爲的類,併爲該類聲明方法,但不能在該類中實現該類的狀況.不能建立abstract class的實例.但是可以聲明一個abstract class變量,將其指向其詳細子類的一個實例.不能有抽象構造函數或抽象靜態方法.Abstract 類的子類爲它們父類中的所有抽象方法提供實現,不然它們也是抽象類爲。取而代之,在子類中實現該方法。知道其行爲的其餘類可以在類中實現這些方法.

接口(interface)是抽象類的變體。在接口中,所有方法都是抽象的。多繼承性可經過實現這種接口而得到。接口中的所有方法都是抽象的,沒有一個有程序體。接口僅僅可以定義static final成員變量。接口的實現與子類相似,除了該實現類不能從接口定義中繼承行爲。當類實現特殊接口時,它定義(即將程序體給予)所有這種接口的方法。而後,它可以在實現了該接口的類的不論什麼對象上調用接口的方法。由於有抽象類,它贊成使用接口名做爲引用變量的類型。一般的動態聯編將生效。引用可以轉換到接口類型或從接口類型轉換,instanceof 運算符可以用來決定某對象的類是否實現了接口.

接口是一個更純的抽象類.

 

18.接口是否可繼承接口? 抽象類是否可實現(implements)接口? 抽象類是否可繼承實體類(concrete class)

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

 

19.abstractmethod是否可同一時候是static,是否可同一時候是native,是否可同一時候是synchronized

答:都不能.當中synchronized:(同步.避免在你和別人同一時候訪問一個屬性的時候,屬性的值發生不一樣步的問題.)

    native:(聲明本地方法的keyword,可以經過聲明的方法調用本地的動態連接庫或者有CC++等開發的函數。)

 

20.構造器Constructor是否可被override(構造函數)

答:構造器Constructor不能被繼承,所以不能重寫Overriding,但可以被重載Overloading

1). 構造器不能是native,final,static,synchronized ,可以是public,private,或什麼都沒有。

2). 構造器函數裏可以寫return,但後面什麼都不準有(包含null)

3). 構造器不能返回值.

     但假設有個"構造器"返值了,它就不是構造器嘍,僅僅是個普通方法

4). super();this();這兩個方法僅僅能在構造方法裏調用.

5). 成員變量聲明時候賦值,比構造函數還早.

 

21.可否夠繼承String

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

 

22.try {}裏有一個return語句,那麼緊跟在這個try後的finally {}裏的code會不會被運行,何時被運行,在return前仍是後

答:會運行,在return前運行

 

23.用最有效率的方法算出2乘以8等於幾

答:2 << 3

 

24.兩個對象值一樣(x.equals(y) == true),但卻可有不一樣的hash code,這句話對不正確

答:不正確,有一樣的hash code

C++中,每個類多有地址。

java也同樣,只是hash code不是地址,而是一個標識對象用的。(我的以爲)

每個對象的hash code是不同的,Object的默認hash code記得是按引用地址的。

對於String例外,是按String內容輸出hash code的,這樣可以用equals()來比較String

內容是否相等了,而不是地址

Java 應用程序運行期間,在同一對象上屢次調用 hashCode 方法時,必須一致地返回一樣的整數,前提是對象上 equals 比較中所用的信息沒有被改動。從某一應用程序的一次運行到同一應用程序的還有一次運行,該整數無需保持一致。

假設依據 equals(Object) 方法,兩個對象是相等的,那麼在兩個對象中的每個對象上調用 hashCode 方法都必須生成一樣的整數結果。

下面狀況不 是必需的:假設依據 equals(java.lang.Object) 方法,兩個對象不相等,那麼在兩個對象中的任一對象上調用 hashCode 方法必然會生成不一樣的整數結果。但是,程序猿應該知道,爲不相等的對象生成不一樣整數結果可以提升哈希表的性能。

實際上,由 Object 類定義的 hashCode 方法確實會針對不一樣的對象返回不一樣的整數。(這一般是經過將該對象的內部地址轉換成一個整數來實現的,但是 JavaTM 編程語言不需要這樣的實現技巧。)

 

25.當一個對象被看成參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後的結果,那麼這裏到底是值傳遞仍是引用傳遞

答:是值傳遞。Java 編程語言僅僅有值傳遞參數。當一個對象實例做爲一個參數被傳遞到方法中時,參數的值就是對該對象的引用。對象的內容可以在被調用的方法中改變,但對象的引用是永遠不會改變的.

 

26.swtich可否做用在byte上,可否做用在long上,可否做用在String

答:witchexpr1)中,expr1是一個整數表達式。所以傳遞給 switch case 語句的參數應該是 int short char 或者 bytelong,string 都不能做用於swtich

 

27.ArrayListVector的差異,HashMapHashtable的差異

答:就ArrayListVector主要從二方面來講.

.同步性:Vector是線程安全的,也就是說是同步的,而ArrayList是線程序不安全的,不是同步的

.數據增加:當需要增加時,Vector默認增加爲原來一培,而ArrayList倒是原來的一半

HashMapHashTable主要從三方面來講。

.歷史緣由:Hashtable是基於陳舊的Dictionary類的,HashMapJava 1.2引進的Map接口的一個實現

.同步性:Hashtable是線程安全的,也就是說是同步的,而HashMap是線程序不安全的,不是同步的

.值:僅僅有HashMap可以讓你將空值做爲一個表的條目的keyvalue

 

28.GC是什麼? 爲何要有GC

答:GC是垃圾收集的意思(Gabage Collection,內存處理是編程人員easy出現故障的地方,忘記或者錯誤的內存回收會致使程序或系統的不穩定甚至崩潰,Java提供的GC功能可以本身主動監測對象是否超過做用域從而達到本身主動回收內存的目的,Java語言沒有提供釋放已分配內存的顯示操做方法。

 

29.floatfloat f=3.4是否正確?

:不對。精度不許確,應該用強制類型轉換,例如如下所看到的:float f=(float)3.4

 

30.介紹JAVA中的Collection FrameWork(包含怎樣寫本身的數據結構)?

答:Collection FrameWork例如如下:

Collection

├List

│├LinkedList

│├ArrayList

│└Vector

 └Stack

└Set

Map

├Hashtable

├HashMap

└WeakHashMap

Collection是最主要的集合接口,一個Collection表明一組Object,即Collection的元素(Elements

Map提供keyvalue的映射.

 

31.抽象類與接口?

答:抽象類與接口都用於抽象,但是抽象類(JAVA)可以有本身的部分實現,而接口則全然是一個標識(同一時候有多重繼承的功能)

JAVA類實現序例化的方法是實現java.io.Serializable接口

Collection框架中實現比較要實現Comparable 接口和 Comparator 接口

 

32.STRINGSTRINGBUFFER的差異。

答:STRING的長度是不可變的,STRINGBUFFER的長度是可變的。假設你對字符串中的內容經常進行操做,特別是內容要改動時,那麼使用StringBuffer,假設最後需要String,那麼使用StringBuffertoString()方法

 

33.談談final, finally, finalize的差異

答:final—修飾符(keyword)假設一個類被聲明爲final,意味着它不能再派生出新的子類,不能做爲父類被繼承。所以一個類不能既被聲明爲 abstract的,又被聲明爲final的。將變量或方法聲明爲final,可以保證它們在使用中不被改變。被聲明爲final的變量必須在聲明時給定初值,而在之後的引用中僅僅能讀取,不可改動。被聲明爲final的方法也相同僅僅能使用,不能重載

finally—再異常處理時提供 finally 塊來運行不論什麼清除操做。假設拋出一個異常,那麼相匹配的 catch 子句就會運行,而後控制就會進入 finally 塊(假設有的話)

finalize—方法名。Java 技術贊成使用 finalize() 方法在垃圾收集器將對象從內存中清除出去以前作必要的清理工做。這種方法是由垃圾收集器在肯定這個對象沒有被引用時對這個對象調用的。它是在 Object 類中定義的,所以所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統資源或者運行其它清理工做。finalize() 方法是在垃圾收集器刪除對象以前對這個對象調用的

 

34.面向對象的特徵有哪些方面

答:主要有下面四方面:

1.抽象:

抽象就是忽略一個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象並不打算了解全部問題,而僅僅是選擇當中的一部分,臨時不用部分細節。抽象包含兩個方面,一是過程抽象,二是數據抽象。

2.繼承:

繼承是一種聯結類的層次模型,並且贊成和鼓舞類的重用,它提供了一種明白表述共性的方法。對象的一個新類可以從現有的類中派生,這個過程稱爲類繼承。新類繼承了原始類的特性,新類稱爲原始類的派生類(子類),而原始類稱爲新類的基類(父類)。派生類可以從它的基類那裏繼承方法和實例變量,並且類可以改動或添加新的方法使之更適合特殊的需要。

3.封裝:

封裝是把過程和數據包圍起來,對數據的訪問僅僅能經過已定義的界面。面向對象計算始於這個基本概念,即現實世界可以被描繪成一系列全然自治、封裝的對象,這些對象經過一個受保護的接口訪問其它對象。

4. 多態性:

多態性是指贊成不一樣類的對象對同一消息做出響應。多態性包括參數化多態性和包括多態性。多態性語言具備靈活、抽象、行爲共享、代碼共享的優點,很是好的攻克了應用程序函數同名問題。

 

35.String是最主要的數據類型嗎

答:基本數據類型包含byteintcharlongfloatdoublebooleanshort

java.lang.String類是final類型的,所以不可以繼承這個類、不能改動這個類。爲了提升效率節省空間,咱們應該用StringBuffer

 

36.int Integer 有什麼差異

答:Java 提供兩種不一樣的類型:引用類型和原始類型(或內置類型)。Intjava的原始數據類型,Integerjavaint提供的封裝類。Java爲每個原始類型提供了封裝類。原始類型封裝類,booleanBoolean,charCharacter,byteByte,shortShort,intInteger,longLong,floatFloat,doubleDouble引用類型和原始類型的行爲全然不一樣,並且它們具備不一樣的語義。引用類型和原始類型具備不一樣的特徵和使用方法,它們包含:大小和速度問題,這樣的類型以哪一種類型的數據結構存儲,當引用類型和原始類型用做某個類的實例數據時所指定的缺省值。對象引用實例變量的缺省值爲 null,而原始類型實例變量的缺省值與它們的類型有關.

 

37.執行時異常與通常異常有何異同

答:異常表示程序執行過程當中可能出現的非正常狀態,執行時異常表示虛擬機的一般操做中可能遇到的異常,是一種常見執行錯誤。java編譯器要求方法必須聲明拋出可能發生的非執行時異常,但是並不要求必須聲明拋出未被捕獲的執行時異常。

 

38.說出ArrayList,Vector, LinkedList的存儲性能和特性

答:ArrayListVector都是使用數組方式存儲數據,此數組元素數大於實際存儲的數據以便添加和插入元素,它們都贊成直接按序號索引元素,但是插入元素要涉及數組元素移動等內存操做,因此索引數據快而插入數據慢,Vector由於使用了synchronized方法(線程安全),一般性能上較ArrayList差,而LinkedList使用雙向鏈表實現存儲,按序號索引數據需要進行前向或後向遍歷,但是插入數據時僅僅需要記錄本項的先後項就能夠,因此插入速度較快

 

39.HashMapHashtable的差異

答:HashMapHashtable的輕量級實現(非線程安全的實現),他們都完畢了Map接口,主要差異在於HashMap贊成空(null)鍵值(key,由於非線程安全,效率上可能高於Hashtable

HashMap贊成將null做爲一個entrykey或者value,而Hashtable不一樣意。

HashMapHashtablecontains方法去掉了,改爲containsvaluecontainsKey。因爲contains方法easy讓人引發誤解。

Hashtable繼承自Dictionary類,而HashMapJava1.2引進的Map interface的一個實現。

最大的不一樣是,Hashtable的方法是Synchronize的,而HashMap不是,在多個線程訪問Hashtable時,不需要本身爲它的方法實現同步,而HashMap 就必須爲之提供外同步。

HashtableHashMap採用的hash/rehash算法都大概同樣,因此性能不會有很是大的差別。

 

40.heapstack有什麼差異****

答:棧是一種線形集合,其加入和刪除元素的操做應在同一段完畢。棧依照後進先出的方式進行處理。堆是棧的一個組成元素

 

41.Java中的異常處理機制的簡單原理和應用

答:當JAVA程序違反了JAVA的語義規則時,JAVA虛擬機就會將發生的錯誤表示爲一個異常。違反語義規則包含2種狀況。一種是JAVA類庫內置的語義檢查。好比數組下標越界,會引起IndexOutOfBoundsException;訪問null的對象時會引起NullPointerException。還有一種狀況就是JAVA贊成程序猿擴展這樣的語義檢查,程序猿可以建立本身的異常,並自由選擇在什麼時候用throwkeyword引起異常。所有的異常都是java.lang.Thowable的子類。

 

42.垃圾回收的長處和原理。並考慮2種回收機制

答:Java語言中一個顯著的特色就是引入了垃圾回收機制,使c++程序猿最頭疼的內存管理的問題迎刃而解,它使得Java程序猿在編敲代碼的時候再也不需要考慮內存管理。由於有個垃圾回收機制,Java中的對象再也不有"做用域"的概念,僅僅有對象的引用纔有"做用域"。垃圾回收可以有效的防止內存泄露,有效的使用可以使用的內存。垃圾回收器通常是做爲一個單獨的低級別的線程執行,不可預知的狀況下對內存堆中已經死亡的或者長時間沒有使用的對象進行清楚和回收,程序猿不能實時的調用垃圾回收器對某個對象或所有對象進行垃圾回收。回收機制有分代複製垃圾回收和標記垃圾回收,增量垃圾回收。

 

43.你所知道的集合類都有哪些?主要方法?

答:最常用的集合類是 List Map List 的詳細實現包含 ArrayList Vector,它們是可變大小的列表,比較適合構建、存儲和操做不論什麼類型對象的元素列表。 List 適用於按數值索引訪問元素的情形。

Map 提供了一個更通用的元素存儲方法。 Map 集合類用於存儲元素對(稱做""""),當中每個鍵映射到一個值。

 

44.描寫敘述一下JVM載入class文件的原理機制?

答:JVM中類的裝載是由ClassLoader和它的子類來實現的,Java ClassLoader 是一個重要的Java執行時系統組件。它負責在執行時查找和裝入類文件的類。

 

45.排序都有哪幾種方法?請列舉

答:  排序的方法有:插入排序(直接插入排序、希爾排序),交換排序(冒泡排序、高速排序),選擇排序(直接選擇排序、堆排序),歸併排序,分配排序(箱排序、基數排序)

高速排序的僞代碼。

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

a[ 0 :n- 1 ]中選擇一個元素做爲m i d d l e,該元素爲支點

把餘下的元素切割爲兩段left r i g h t,使得l e f t中的元素都小於等於支點,而right 中的元素都大於等於支點

遞歸地使用高速排序方法對left 進行排序

遞歸地使用高速排序方法對right 進行排序

所得結果爲l e f t + m i d d l e + r i g h t

 

46.JAVA語言怎樣進行異常處理,keyword:throws,throw,try,catch,finally分別表明什麼意義?在try塊中可以拋出異常嗎?

答:Java經過面向對象的方法進行異常處理,把各類不一樣的異常進行分類,並提供了良好的接口。在Java中,每個異常都是一個對象,它是Throwable類或其餘子類的實例。當一個方法出現異常後便拋出一個異常對象,該對象中包括有異常信息,調用這個對象的方法可以捕獲到這個異常並進行處理。Java的異常處理是經過5個關鍵詞來實現的:trycatchthrowthrowsfinally。普通狀況下是用try來運行一段程序,假設出現異常,系統會拋出(throws)一個異常,這時候你可以經過它的類型來捕捉(catch)它,或最後(finally)由缺省處理器來處理。

try來指定一塊預防所有"異常"的程序。緊跟在try程序後面,應包括一個catch子句來指定你想要捕捉的"異常"的類型。

throw語句用來明白地拋出一個"異常"

throws用來標明一個成員函數可能拋出的各類"異常"

Finally爲確保一段代碼不管發生什麼"異常"都被運行一段代碼。

可以在一個成員函數調用的外面寫一個try語句,在這個成員函數內部寫還有一個try語句保護其它代碼。每當遇到一個try語句,"異常"的框架就放到堆棧上面,直到所有的try語句都完畢。假設下一級的try語句沒有對某種"異常"進行處理,堆棧就會展開,直到遇到有處理這樣的"異常"try語句。

 

47.一個".java"源文件裏可否夠包含多個類(不是內部類)?有什麼限制?

答:可以。必須僅僅有一個類名與文件名稱一樣。

 

48.java中有幾種類型的流?JDK爲每種類型的流提供了一些抽象類以供繼承,請說出他們各自是哪些類?

答:字節流,字符流。字節流繼承於InputStream OutputStream,字符流繼承於InputStreamReader OutputStreamWriter。在java.io包中還有更多的流,主要是爲了提升性能和使用方便。

 

49.java中會存在內存泄漏嗎,請簡單描寫敘述。

答:會。本身實現堆載的數據結構時有可能會出現內存泄露

 

50.垃圾回收器的基本原理是什麼?垃圾回收器可以當即回收內存嗎?有什麼辦法主動通知虛擬機進行垃圾回收

答:對於GC來講,當程序猿建立對象時,GC就開始監控這個對象的地址、大小以及使用狀況。一般,GC採用有向圖的方式記錄和管理堆(heap)中的所有對象。經過這樣的方式肯定哪些對象是"可達的",哪些對象是"不可達的"。當GC肯定一些對象爲"不可達"時,GC就有責任回收這些內存空間。可以。程序猿可以手動運行System.gc(),通知GC運行,但是Java語言規範並不保證GC必定會運行。

 

51.靜態變量和實例變量的差異?

答:static i = 10; //常量   class A a;  a.i =10;//可變

 

52.什麼是java序列化,怎樣實現java序列化?*****

答:序列化就是一種用來處理對象流的機制,所謂對象流也就是將對象的內容進行流化。可以對流化後的對象進行讀寫操做,也可將流化後的對象傳輸於網絡之間。序列化是爲了解決在對對象流進行讀寫操做時所引起的問題。

序列化的實現:將需要被序列化的類實現Serializable接口,該接口沒有需要實現的方法,implements Serializable僅僅是爲了標註該對象是可被序列化的,而後使用一個輸出流(如:FileOutputStream)來構造一個ObjectOutputStream(對象流)對象,接着,使用ObjectOutputStream對象的writeObject(Object obj)方法就可以將參數爲obj的對象寫出(即保存其狀態),要恢復的話則用輸入流。

 

53.可否夠從一個static方法內部發出對非static方法的調用?

答:不可以,假設當中包括對象的method();不能保證對象初始化.

 

54.clone()方法時,一般都有一行代碼,是什麼?

答:Clone 有缺省行爲,super.clone();他負責產生正確大小的空間,並逐位複製。

 

55.JAVA中,怎樣跳出當前的多重嵌套循環?

答:用break; return 方法。

 

56.ListMapSet三個接口,存取元素時,各有什麼特色?

答:List 以特定次序來持有元素,可有反覆元素。Set 沒法擁有反覆元素,內部排序。Map 保存key-value值,value可多值。

 

57.說出一些常用的類,包,接口,請各舉5

答:常用的類:BufferedReader  BufferedWriter  FileReader  FileWirter  String  Integer

常用的包:java.lang  java.awt  java.io  java.util  java.sql

常用的接口:Remote  List  Map  Document  NodeList

 

58.描寫敘述使用JDBC鏈接數據庫的過程  

  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");  

  String   url   =   "jdbc:obdc:mydb";  

  Connection   con   =   DriverManager.getConnection(url);  

  Statement   stmt   =   con.createStatement();  

  ResultSet   rs   =   stmt.execte("select   *   from   mytable");  

 

59.什麼是JNDI?  

  java命名文件夾接口

 

60.Java 的通訊編程,編程題(或問答),用JAVA SOCKET編程,讀server幾個字符,再寫入本地顯示?

:Server端程序:

package test;

import java.net.*;

import java.io.*;

 

public class Server

{

private ServerSocket ss;

private Socket socket;

private BufferedReader in;

private PrintWriter out;

public Server()

{

try

{

ss=new ServerSocket(10000);

while(true)

{

socket = ss.accept();

String RemoteIP = socket.getInetAddress().getHostAddress();

String RemotePort = ":"+socket.getLocalPort();

System.out.println("A client come in!IP:"+RemoteIP+RemotePort);

in = new BufferedReader(new

 

InputStreamReader(socket.getInputStream()));

String line = in.readLine();

System.out.println("Cleint send is :" + line);

out = new PrintWriter(socket.getOutputStream(),true);

out.println("Your Message Received!");

out.close();

in.close();

socket.close();

}

}catch (IOException e)

{

out.println("wrong");

}

}

public static void main(String[] args)

{

new Server();

}

};

Client端程序:

package test;

import java.io.*;

import java.net.*;

 

public class Client

{

Socket socket;

BufferedReader in;

PrintWriter out;

public Client()

{

try

{

System.out.println("Try to Connect to 127.0.0.1:10000");

socket = new Socket("127.0.0.1",10000);

System.out.println("The Server Connected!");

System.out.println("Please enter some Character:");

BufferedReader line = new BufferedReader(new

 

InputStreamReader(System.in));

out = new PrintWriter(socket.getOutputStream(),true);

out.println(line.readLine());

in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

System.out.println(in.readLine());

out.close();

in.close();

socket.close();

}catch(IOException e)

{

out.println("Wrong");

}

}

public static void main(String[] args)

{

new Client();

}

};

 

61. 線程的基本概念、線程的本狀態以及狀態之間的關係

新建 (Born) : 新建的線程處於新建狀態

就緒 (Ready) : 在建立線程後,它將處於就緒狀態,等待 start() 方法被調用

執行 (Running) : 線程在開始執行時進入執行狀態

睡眠 (Sleeping) : 線程的運行可經過使用 sleep() 方法來臨時停止。在睡眠後,線程將進入就緒狀態

等待 (Waiting) : 假設調用了 wait() 方法,線程將處於等待狀態。用於在兩個或多個線程併發執行時。

掛起 (Suspended) : 在暫時中止或中斷線程的運行時,線程就處於掛起狀態。

恢復 (Resume) : 在掛起的線程被恢復運行時,可以說它已被恢復。

堵塞 (Blocked) – 在線程等待一個事件時(好比輸入/輸出操做),就稱其處於堵塞狀態。

死亡 (Dead) – run() 方法已完畢運行或其 stop() 方法被調用以後,線程就處於死亡狀態。

串行化的注意事項以及怎樣實現串行化答:假設有循環引用是不可以串行化的。對象輸出流的WriteObject方法和 對象輸入流的ReadObect 方法

 

62.內部類要點?

靜態內部類可以有靜態成員,而非靜態內部類則不能有靜態成員。

靜態內部類的非靜態成員可以訪問外部類的靜態變量,而不可訪問外部類的非靜態變量。

非靜態內部類的非靜態成員可以訪問外部類的非靜態變量。

 

 

63.java中有幾種方法可以實現一個線程?用什麼keyword修飾同步方法? stop()suspend()方法爲什麼不推薦使用?

答:有兩種實現方法,各自是繼承Thread類與實現Runnable接口

synchronizedkeyword修飾同步方法

反對使用stop(),是因爲它不安全。它會解除由線程獲取的所有鎖定,而且假設對象處於一種不連貫狀態,那麼其它線程能在那種狀態下檢查和改動它們。結果很是難檢查出真正的問題所在。suspend()方法easy發生死鎖。調用suspend()的時候,目標線程會停下來,但卻仍然持有在這以前得到的鎖定。此時,其它不論什麼線程都不能訪問鎖定的資源,除非被"掛起"的線程恢復執行。對不論什麼線程來講,假設它們想恢復目標線程,同一時候又試圖使用不論什麼一個鎖定的資源,就會形成死鎖。因此不該該使用suspend(),而應在本身的Thread類中置入一個標誌,指出線程應該活動仍是掛起。若標誌指出線程應該掛起,便用wait()命其進入等待狀態。若標誌指出線程應當恢復,則用一個notify()又一次啓動線程。

 

64.sleep() wait() 有什麼差異?

答:sleep是線程類(Thread)的方法,致使此線程暫停運行指定時間,給運行機會給其它線程,但是監控狀態依舊保持,到時後會本身主動恢復。調用sleep不會釋放對象鎖。

waitObject類的方法,對此對象調用wait方法致使本線程放棄對象鎖,進入等待此對象的等待鎖定池,僅僅有針對此對象發出notify方法(或notifyAll)後本線程才進入對象鎖定池準備得到對象鎖進入執行狀態。

 

65.同步和異步有何異同,在什麼狀況下分別使用他們?舉例說明。

答:假設數據將在線程間共享。好比正在寫的數據之後可能被還有一個線程讀到,或者正在讀的數據可能已經被還有一個線程寫過了,那麼這些數據就是共享數據,必須進行同步存取。

當應用程序在對象上調用了一個需要花費很是長時間來運行的方法,並且不但願讓程序等待方法的返回時,就應該使用異步編程,在很是多狀況下採用異步途徑每每更有效率。

 

66.啓動一個線程是用run()仍是start()?

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

 

67.當一個線程進入一個對象的一個synchronized方法後,其餘線程是否可進入此對象的其它方法?

答:不能,一個對象的一個synchronized方法僅僅能由一個線程訪問。

 

68.請說出你所知道的線程同步的方法。

答:wait():使一個線程處於等待狀態,並且釋放所持有的對象的lock

sleep():使一個正在執行的線程處於睡眠狀態,是一個靜態方法,調用此方法要捕捉InterruptedException異常。

notify():喚醒一個處於等待狀態的線程,注意的是在調用此方法的時候,並不能確切的喚醒某一個等待狀態的線程,而是由JVM肯定喚醒哪一個線程,而且不是按優先級。

Allnotity():喚醒所有處入等待狀態的線程,注意並不是給所有喚醒線程一個對象的鎖,而是讓它們競爭。

 

69.多線程有幾種實現方法,都是什麼?同步有幾種實現方法,都是什麼?

答:多線程有兩種實現方法,各自是繼承Thread類與實現Runnable接口

同步的實現方面有兩種,各自是synchronized,waitnotify

 

70.線程的基本概念、線程的基本狀態以及狀態之間的關係

答:線程指在程序運行過程當中,能夠運行程序代碼的一個運行單位,每個程序至少都有一個線程,也就是程序自己。

Java中的線程有四種狀態各自是:執行、就緒、掛起、結束

 

71.簡述synchronizedjava.util.concurrent.locks.Lock的異同

答:主要一樣點:Lock能完畢synchronized所實現的所有功能

主要不一樣點:Lock有比synchronized更精確的線程語義和更好的性能。synchronized會本身主動釋放鎖,而Lock必定要求程序猿手工釋放,並且必須在finally從句中釋放。


jsp筆試

 

1.jsp有哪些內置對象?做用各自是什麼?

答:JSP共同擁有下面9種基本內置組件(可與ASP6種內部組件相相應):

 request 用戶端請求,此請求會包括來自GET/POST請求的參數

   response 網頁傳回用戶端的迴應

   pageContext 網頁的屬性是在這裏管理

   session 與請求有關的會話期

   application servlet 正在運行的內容

   out 用來傳送回應的輸出

   config servlet的構架部件

   page JSP網頁自己

   exception 針對錯誤網頁,未捕捉的例外

 

2.jsp有哪些動做?做用各自是什麼?

:JSP共同擁有下面6種基本動做

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

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

   jsp:setProperty:設置JavaBean的屬性。

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

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

   jsp:plugin:依據瀏覽器類型爲Java插件生成OBJECTEMBED標記

 

 

4.JSP中動態INCLUDE與靜態INCLUDE的差異?

答:動態INCLUDEjsp:include動做實現

   <jsp:include page="included.jsp" flush="true" />它老是會檢查所含文件裏的變化,適合用於包括動態頁面,並且可以帶參數

   靜態INCLUDEinclude僞碼實現,但不會檢查所含文件的變化,適用於包括靜態頁面

   <%@ include file="included.htm" %>

 

5.兩種跳轉方式各自是什麼?有什麼差異?

答:有兩種,分別爲:

  <jsp:include page="included.jsp" flush="true">

  <jsp:forward page= "nextpage.jsp"/>

前者頁面不會轉向include所指的頁面,僅僅是顯示該頁的結果,主頁面仍是原來的頁面。運行完後還會回來,至關於函數調用。並且可以帶參數.後者全然轉向新頁面,不會再回來。至關於go to 語句。

 

6.JSP的內置對象及方法。

答:request表示HttpServletRequest對象。它包括了有關瀏覽器請求的信息,並且提供了幾個用於獲取cookie, header, session數據的實用的方法。

    response表示HttpServletResponse對象,並提供了幾個用於設置送回 瀏覽器的響應的方法(如cookies,頭信息等)

    out對象是javax.jsp.JspWriter的一個實例,並提供了幾個方法使你能用於向瀏覽器回送輸出結果。

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

    session表示一個請求的javax.servlet.http.HttpSession對象。Session可以存貯用戶的狀態信息

    applicaton 表示一個javax.servle.ServletContext對象。這有助於查找有關servlet引擎和servlet環境的信息

    config表示一個javax.servlet.ServletConfig對象。該對象用於存取servlet實例的初始化參數。

    page表示從該頁面產生的一個servlet實例


servlet筆試題目

 

1.說一說Servlet的生命週期?

:servlet有良好的生存期的定義,包含載入和實例化、初始化、處理請求以及服務結束。這個生存期由javax.servlet.Servlet接口的init,servicedestroy方法表達。 Servlet被server實例化後,容器執行其init方法,請求到達時執行其service方法,service方法本身主動派遣執行與請求相應的doXXX方法(doGetdoPost)等,當server決定將實例銷燬的時候調用其destroy方法。

cgi的差異在於servlet處於server進程中,它經過多線程方式執行其service方法,一個實例可以服務於多個請求,並且事實上例通常不會銷燬,而CGI對每個請求都產生新的進程,服務完畢後就銷燬,因此效率上低於servlet

 

2.JAVA SERVLET APIforward() redirect()的差異?

:前者僅是容器中控制權的轉向,在client瀏覽器地址欄中不會顯示出轉向後的地址;後者則是全然的跳轉,瀏覽器將會獲得跳轉的地址,並又一次發送請求連接。這樣,從瀏覽器的地址欄中可以看到跳轉後的連接地址。因此,前者更加高效,在前者可以知足需要時,儘可能使用forward()方法,並且,這樣也有助於隱藏實際的連接。在有些狀況下,比方,需要跳轉到一個其餘server上的資源,則必須使用sendRedirect()方法。

 

3.Servlet的基本架構

答:

public class ServletName extends HttpServlet {

  public void doPost(HttpServletRequest request, HttpServletResponse response) throws

      ServletException, IOException  {

      }

  public void doGet(HttpServletRequest request, HttpServletResponse response) throws

      ServletException, IOException  {

      }

}

 

4.什麼狀況下調用doGet()doPost()

答:Jsp頁面中的form標籤裏的method屬性爲get時調用doGet(),爲post時調用doPost()

 

5.servlet的生命週期

答:web容器載入servlet,生命週期開始。經過調用servletinit()方法進行servlet的初始化。經過調用service()方法實現,依據請求的不一樣調用不一樣的do***()方法。結束服務,web容器調用servletdestroy()方法。

 

6.怎樣現實servlet的單線程模式

答:<%@ page isThreadSafe="false"%>

 

7. 頁面間對象傳遞的方法

答:requestsessionapplicationcookie

 

8.四種會話跟蹤技術

答:會話做用域ServletsJSP 頁面描寫敘述

page否是表明與一個頁面相關的對象和屬性。一個頁面由一個編譯好的 Java servlet 類(可以帶有不論什麼的 include 指令,但是沒有 include 動做)表示。這既包含 servlet 又包含被編譯成 servlet JSP 頁面

request是是表明與 Web 客戶機發出的一個請求相關的對象和屬性。一個請求可能跨越多個頁面,涉及多個 Web 組件(由於 forward 指令和 include 動做的關係)

session是是表明與用於某個 Web 客戶機的一個用戶體驗相關的對象和屬性。一個 Web 會話可以也經常會跨越多個客戶機請求

application是是表明與整個 Web 應用程序相關的對象和屬性。這實質上是跨越整個 Web 應用程序,包含多個頁面、請求和會話的一個全局做用域

 

 

10.咱們在web應用開發過程當中經常遇到輸出某種編碼的字符,如iso8859-1等,怎樣輸出一個某種編碼的字符串?

答:

  Public String translate (String str) {

    String tempStr = "";

    try {

      tempStr = new String(str.getBytes("ISO-8859-1"), "GBK");

      tempStr = tempStr.trim();

    }

    catch (Exception e) {

      System.err.println(e.getMessage());

    }

    return tempStr;

  }

 

11.Servlet運行時通常實現哪幾個方法?

答:

public void init(ServletConfig config)

public ServletConfig getServletConfig()

public String getServletInfo()

public void service(ServletRequest request,ServletResponse response)

public void destroy()

 

12.說出數據鏈接池的工做機制是什麼?

答:J2EEserver啓動時會創建必定數量的池鏈接,並一直維持很多於此數目的池鏈接。client程序需要鏈接時,池驅動程序會返回一個未使用的池鏈接並將其表記爲忙。假設當前沒有空暇鏈接,池驅動程序就新建必定數量的鏈接,新建鏈接的數量有配置參數決定。當使用的池鏈接調用完畢後,池驅動程序將此鏈接表記爲空暇,其它調用就可以使用這個鏈接。

 

13.Class.forName的做用?爲何要用?

答:調用該訪問返回一個以字符串指定類名的類的對象。

相關文章
相關標籤/搜索