JAVA面試題集(三)

來源:互聯網
上載者:User

61、servlet的生命週期
web容器載入servlet,生命週期開始。通過調用servlet的init()方法進行servlet的初始化。通過調用service()方法實現,根據請求的不同調用不同的do***()方法。結束服務,web容器調用servlet的destroy()方法。
62、如何現實servlet的單線程模式
<%@ page isThreadSafe=”false”%>
63、頁面間對象傳遞的方法
request,session,application,cookie等
64、JSP和Servlet有哪些相同點和不同點,他們之間的聯絡是什嗎?
JSP是Servlet技術的擴充,本質上是Servlet的簡易方式,更強調應用的外表表達。JSP編譯後是"類servlet"。Servlet和JSP最主要的不同點在於,Servlet的應用邏輯是在Java檔案中,並且完全從展示層中的HTML裡分離開來。而JSP的情況是Java和HTML可以組合成一個副檔名為.jsp的檔案。JSP側重於視圖,Servlet主要用於控制邏輯。
65、四種會話跟蹤技術
會話範圍ServletsJSP 頁面描述
page否是代表與一個頁面相關的對象和屬性。一個頁面由一個編譯好的 Java servlet 類(可以帶有任何的 include 指令,但是沒有 include 動作)表示。這既包括 servlet 又包括被編譯成 servlet 的 JSP 頁面
request是是代表與 Web 客戶機發出的一個請求相關的對象和屬性。一個請求可能跨越多個頁面,涉及多個 Web 元件(由於 forward 指令和 include 動作的關係)
session是是代表與用於某個 Web 客戶機的一個使用者體驗相關的對象和屬性。一個 Web 會話可以也經常會跨越多個客戶機請求
application是是代表與整個 Web 應用程式相關的對象和屬性。這實質上是跨越整個 Web 應用程式,包括多個頁面、請求和會話的一個全域範圍
66、Request對象的主要方法:
setAttribute(String name,Object):設定名字為name的request的參數值
getAttribute(String name):返回由name指定的屬性值
getAttributeNames():返回request對象所有屬性的名字集合,結果是一個枚舉的執行個體
getCookies():返回用戶端的所有Cookie對象,結果是一個Cookie數組
getCharacterEncoding():返回請求中的字元編碼方式
getContentLength():返回請求的Body的長度
getHeader(String name):獲得HTTP協議定義的檔案頭資訊
getHeaders(String name):返回指定名字的request Header的所有值,結果是一個枚舉的執行個體
getHeaderNames():返回所以request Header的名字,結果是一個枚舉的執行個體
getInputStream():返回請求的輸入資料流,用於獲得請求中的資料
getMethod():獲得用戶端向伺服器端傳送資料的方法
getParameter(String name):獲得用戶端傳送給伺服器端的有name指定的參數值
getParameterNames():獲得用戶端傳送給伺服器端的所有參數的名字,結果是一個枚舉的執行個體
getParameterValues(String name):獲得有name指定的參數的所有值
getProtocol():擷取用戶端向伺服器端傳送資料所依據的協議名稱
getQueryString():獲得查詢字串
getRequestURI():擷取發出請求字串的用戶端地址
getRemoteAddr():擷取用戶端的IP地址
getRemoteHost():擷取用戶端的名字
getSession([Boolean create]):返回和請求相關Session
getServerName():擷取伺服器的名字
getServletPath():擷取用戶端所請求的指令檔的路徑
getServerPort():擷取伺服器的連接埠號碼
removeAttribute(String name):刪除請求中的一個屬性
67、J2EE是技術還是平台還是架構?
    J2EE本身是一個標準,一個為企業分布式應用的開發提供的標準平台。
    J2EE也是一個架構,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技術。
68、我們在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;
  }
69、簡述邏輯操作(&,|,^)與條件操作(&&,||)的區別。
區別主要答兩點:a.條件操作只能操作布爾型的,而邏輯操作不僅可以操作布爾型,而且可以運算元值型
b.邏輯操作不會產生短路
70、XML文檔定義有幾種形式?它們之間有何本質區別?解析XML文檔有哪幾種方式?
a: 兩種形式 dtd  schema,b: 本質區別:schema本身是xml的,可以被XML解析器解析(這也是從DTD上發展schema的根本目的),c:有DOM,SAX,STAX等
    DOM:處理大型檔案時其效能下降的非常厲害。這個問題是由DOM的樹結構所造成的,這種結構佔用的記憶體較多,而且DOM必須在解析檔案之前把整個文檔裝入記憶體,適合對XML的隨機訪問
SAX:不現於DOM,SAX是事件驅動型的XML解析方式。它順序讀取XML檔案,不需要一次全部裝載整個檔案。當遇到像檔案開頭,文檔結束,或者標籤開頭與標籤結束時,它會觸發一個事件,使用者通過在其回調事件中寫入處理代碼來處理XML檔案,適合對XML的順序訪問
    STAX:Streaming API for XML (StAX)
71、簡述synchronized和java.util.concurrent.locks.Lock的異同 ?
主要相同點:Lock能完成synchronized所實現的所有功能
主要不同點:Lock有比synchronized更精確的線程語義和更好的效能。synchronized會自動釋放鎖,而Lock一定要求程式員手工釋放,並且必須在finally從句中釋放。
72、EJB的角色和三個對象
一個完整的基於EJB的分散式運算結構由六個角色群組成,這六個角色可以由不同的開發商提供,每個角色所作的工作必須遵循Sun公司提供的EJB規範,以保證彼此之間的相容性。這六個角色分別是EJB組件開發人員(Enterprise Bean Provider) 、應用組合者(Application Assembler)、部署者(Deployer)、EJB 伺服器提供者(EJB Server Provider)、EJB 容器提供者(EJB Container Provider)、系統管理員(System Administrator)
三個對象是Remote(Local)介面、Home(LocalHome)介面,Bean類
73、EJB容器提供的服務
主要提供聲明周期管理、代碼產生、持久性管理、安全、交易管理、鎖和並發行管理等服務。
74、EJB規範規定EJB中禁止的操作有哪些?
    1.不能操作線程和線程API(線程API指非線程對象的方法如notify,wait等),2.不能操作awt,3.不能實現伺服器功能,4.不能對靜態屬生存取,5.不能使用IO操作直接存取檔案系統,6.不能載入本地庫.,7.不能將this作為變數和返回,8.不能迴圈調用。
75、remote介面和home介面主要作用
remote介面定義了業務方法,用於EJB用戶端調用業務方法。
home介面是EJB工廠用於建立和移除尋找EJB執行個體

76、bean 執行個體的生命週期
對於Stateless Session Bean、Entity Bean、Message Driven Bean一般存在緩衝池管理,而對於Entity Bean和Statefull Session Bean存在Cache管理,通常包含建立執行個體,設定上下文、建立EJB Object(create)、業務方法調用、remove等過程,對於存在緩衝池管理的Bean,在create之後執行個體並不從記憶體清除,而是採用緩衝池調度機制不斷重用執行個體,而對於存在Cache管理的Bean則通過啟用和去啟用機制保持Bean的狀態並限制記憶體中執行個體數量。
77、EJB的啟用機制
以Stateful Session Bean 為例:其Cache大小決定了記憶體中可以同時存在的Bean執行個體的數量,根據MRU或NRU演算法,執行個體在啟用和去啟用狀態之間遷移,啟用機制是當用戶端調用某個EJB執行個體業務方法時,如果對應EJB Object發現自己沒有綁定對應的Bean執行個體則從其去啟用Bean儲存中(通過序列化機制儲存執行個體)回複(啟用)此執行個體。狀態變遷前會調用對應的ejbActive和ejbPassivate方法。
78、EJB的幾種類型
會話(Session)Bean ,實體(Entity)Bean 訊息驅動的(Message Driven)Bean
會話Bean又可分為有狀態(Stateful)和無狀態(Stateless)兩種
實體Bean可分為Bean管理的持久性(BMP)和容器管理的持久性(CMP)兩種
79、客服端調用EJB對象的幾個基本步驟
設定JNDI服務工廠以及JNDI服務地址系統屬性,尋找Home介面,從Home介面調用Create方法建立Remote介面,通過Remote介面調用其業務方法。
80、如何給weblogic指定大小的記憶體?
在啟動Weblogic的指令碼中(位於所在Domian對應伺服器目錄下的startServerName),增加set MEM_ARGS=-Xms32m -Xmx200m,可以調整最小記憶體為32M,最大200M
81、如何設定的weblogic的暖開機模式(開發模式)與產品發布模式?
可以在管理主控台中修改對應伺服器的啟動模式為開發或產品模式之一。或者修改服務的開機檔案或者commenv檔案,增加set PRODUCTION_MODE=true。
82、如何啟動時不需輸入使用者名稱與密碼?
修改服務開機檔案,增加 WLS_USER和WLS_PW項。也可以在boot.properties檔案中增加加密過的使用者名稱和密碼.
83、在weblogic管理制台中對一個應用域(或者說是一個網站,Domain)進行jms及ejb或串連池等相關資訊進行配置後,實際儲存在什麼檔案中?
儲存在此Domain的config.xml檔案中,它是伺服器的核心設定檔。
84、說說weblogic中一個Domain的預設目錄結構?比如要將一個簡單的helloWorld.jsp放入何目錄下,然的在瀏覽器上就可打入http://主機:連接埠號碼//helloword.jsp就可以看到運行結果了? 又比如這其中用到了一個自己寫的javaBean該如何辦?
Domain目錄/伺服器目錄/applications,將應用目錄放在此目錄下將可以作為應用訪問,如果是Web應用,應用目錄需要滿足Web應用目錄要求,jsp檔案可以直接放在應用目錄中,Javabean需要放在應用目錄的WEB-INF目錄的classes目錄中,設定伺服器的預設應用將可以實現在瀏覽器上無需輸入應用程式名稱。
85、在weblogic中發布ejb需涉及到哪些設定檔
不同類型的EJB涉及的設定檔不同,都涉及到的設定檔包括ejb-jar.xml,weblogic-ejb-jar.xmlCMP實體Bean一般還需要weblogic-cmp-rdbms-jar.xml
86、如何在weblogic中進行ssl配置與用戶端的認證配置或說說j2ee(標準)進行ssl的配置
預設安裝中使用DemoIdentity.jks和DemoTrust.jks  KeyStore實現SSL,需要設定管理員使用Enable SSL,配置其連接埠,在產品模式下需要從CA擷取私人密鑰和數位憑證,建立identity和trust keystore,裝載獲得的密鑰和數位憑證。可以配置此SSL串連是單向還是雙向的。
87、如何查看在weblogic中已經發布的EJB?
可以使用管理主控台,在它的Deployment中可以查看所有發行的EJB
88、CORBA是什麼?用途是什麼?
CORBA 標準是公用對象請求代理結構(Common Object Request Broker Architecture),由對象管理組織 (Object Management Group,縮寫為 OMG)標準化。它的組成是介面定義語言(IDL), 語言綁定(binding:也譯為聯編)和允許應用程式間互操作的協議。 其目的為:用不同的程式設計語言書寫在不同的進程中運行,為不同的作業系統開發。
89、說說你所熟悉或聽說過的j2ee中的幾種常用模式?及對設計模式的一些看法
  Session Facade Pattern:使用SessionBean訪問EntityBean
Message Facade Pattern:實現非同步呼叫
EJB Command Pattern:使用Command JavaBeans取代SessionBean,實現輕量級訪問
Data Transfer Object Factory:通過DTO Factory簡化EntityBean資料提供特性
Generic Attribute Access:通過AttibuteAccess介面簡化EntityBean資料提供特性
Business Interface:通過遠程(本地)介面和Bean類實現相同介面規範商務邏輯一致性
EJB架構的設計好壞將直接影響系統的效能、可擴充性、可維護性、組件可重用性及開發效率。項目越複雜,項目隊伍越龐大則越能體現良好設計的重要性。
90、說說在weblogic中開發訊息Bean時的persistent與non-persisten的差別
persistent方式的MDB可以保證訊息傳遞的可靠性,也就是如果EJB容器出現問題而JMS伺服器依然會將訊息在此MDB可用的時候發送過來,而non-persistent方式的訊息將被丟棄。

91、Servlet執行時一般實現哪幾個方法?
public void init(ServletConfig config)
public ServletConfig getServletConfig()
public String getServletInfo()
public void service(ServletRequest request,ServletResponse response)
public void destroy()
92、j2ee常用的設計模式?說明原廠模式。
    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(責任鏈模式)
原廠模式:原廠模式是一種經常被使用到的模式,根據原廠模式實現的類可以根據提供的資料產生一組類中某一個類的執行個體,通常這一組類有一個公用的抽象父類並且實現了相同的方法,但是這些方法針對不同的資料進行了不同的操作。首先需要定義一個基類,該類的子類通過不同的方法實現了基類中的方法。然後需要定義一個工廠類,工廠類可以根據條件產生不同的子類執行個體。當得到子類的執行個體後,開發人員可以調用基類中的方法而不必考慮到底返回的是哪一個子類的執行個體。
93、EJB需直接實現它的業務介面或Home介面嗎,請簡述理由。
遠程介面和Home介面不需要直接實現,他們的實現代碼是由伺服器產生的,程式運行中對應實作類別會作為對應介面類型的執行個體被使用。
94、排序都有哪幾種方法?請列舉。用JAVA實現一個快速排序。
    排序的方法有:插入排序(直接插入排序、希爾排序),交換排序(冒泡排序、快速排序),選擇排序(直接選擇排序、堆排序),歸併排序,分配排序(箱排序、基數排序)
快速排序的虛擬碼。
/ /使用快速排序方法對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
95、請對以下在J2EE中常用的名詞進行解釋(或簡單描述)
web容器:給處於其中的應用程式組件(JSP,SERVLET)提供一個環境,使JSP,SERVLET直接更容器中的環境變數介面互動,不必關注其它系統問題。主要有WEB伺服器來實現。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。該容器提供的介面嚴格遵守J2EE規範中的WEB APPLICATION 標準。我們把遵守以上標準的WEB伺服器就叫做J2EE中的WEB容器。
EJB容器:Enterprise java bean 容器。更具有行業領域特色。他提供給運行在其中的組件EJB各種管理功能。只要滿足J2EE規範的EJB放入該容器,馬上就會被容器進行高效率的管理。並且可以通過現成的介面來獲得系統層級的服務。例如郵件服務、交易管理。
JNDI:(Java Naming & Directory Interface)JAVA命名目錄服務。主要提供的功能是:提供一個目錄系統,讓其它各地的應用程式在其上面留下自己的索引,從而滿足快速尋找和定位分布式應用程式的功能。
JMS:(Java Message Service)JAVAMessage Service。主要實現各個應用程式之間的通訊。包括點對點和廣播。
JTA:(Java Transaction API)JAVA事務服務。提供各種分散式交易服務。應用程式只需調用其提供的介面即可。
JAF:(Java Action FrameWork)JAVA安全認證架構。提供一些安全控制方面的架構。讓開發人員通過各種部署和自訂實現自己的個性安全控制策略。
RMI/IIOP:(Remote Method Invocation /internet對象請求中介協議)他們主要用於通過遠程調用服務。例如,遠程有一台電腦上運行一個程式,它提供股票分析服務,我們可以在本機電腦上實現對其直接調用。當然這是要通過一定的規範才能在異構的系統之間進行通訊。RMI是JAVA特有的。
96、JAVA語言如何進行異常處理,關鍵字:throws,throw,try,catch,finally分別代表什麼意義?在try塊中可以拋出異常嗎?
Java通過物件導向的方法進行異常處理,把各種不同的異常進行分類,並提供了良好的介面。在Java中,每個異常都是一個對象,它是Throwable類或其它子類的執行個體。當一個方法出現異常後便拋出一個異常對象,該對象中包含有異常資訊,調用這個對象的方法可以捕獲到這個異常並進行處理。Java的異常處理是通過5個關鍵詞來實現的:try、catch、throw、throws和finally。一般情況下是用try來執行一段程式,如果出現異常,系統會拋出(throws)一個異常,這時候你可以通過它的類型來捕捉(catch)它,或最後(finally)由預設處理器來處理。
用try來指定一塊預防所有“異常”的程式。緊跟在try程式後面,應包含一個catch子句來指定你想要捕捉的“異常”的類型。
throw語句用來明確地拋出一個“異常”。
throws用來標明一個成員函數可能拋出的各種“異常”。
Finally為確保一段代碼不管發生什麼“異常”都被執行一段代碼。
可以在一個成員函數調用的外面寫一個try語句,在這個成員函數內部寫另一個try語句保護其他代碼。每當遇到一個try語句,“異常”的架構就放到堆棧上面,直到所有的try語句都完成。如果下一級的try語句沒有對某種“異常”進行處理,堆棧就會展開,直到遇到有處理這種“異常”的try語句。
97、一個“.java”源檔案中是否可以包括多個類(不是內部類)?有什麼限制?
可以。必須只有一個類名與檔案名稱相同。
98、MVC的各個部分都有那些技術來實現?如何??
MVC是Model-View-Controller的簡寫。"Model" 代表的是應用的商務邏輯(通過JavaBean,EJB組件實現), "View" 是應用的表示面(由JSP頁面產生),"Controller" 是提供應用的處理過程式控制制(一般是一個Servlet),通過這種設計模型把應用邏輯,處理過程和顯示邏輯分成不同的組件實現。這些組件可以進行互動和重用。
99、java中有幾種方法可以實現一個線程?用什麼關鍵字修飾同步方法? stop()和suspend()方法為何不推薦使用?
有兩種實現方法,分別是繼承Thread類與實現Runnable介面
用synchronized關鍵字修飾同步方法
反對使用stop(),是因為它不安全。它會解除由線程擷取的所有鎖定,而且如果對象處於一種不連貫狀態,那麼其他線程能在那種狀態下檢查和修改它們。結果很難檢查出真正的問題所在。suspend()方法容易發生死結。調用suspend()的時候,目標線程會停下來,但卻仍然持有在這之前獲得的鎖定。此時,其他任何線程都不能訪問鎖定資源,除非被“掛起”的線程恢複運行。對任何線程來說,如果它們想恢複目標線程,同時又試圖使用任何一個鎖定資源,就會造成死結。所以不應該使用suspend(),而應在自己的Thread類中置入一個標誌,指出線程應該活動還是掛起。若標誌指出線程應該掛起,便用wait()命其進入等待狀態。若標誌指出線程應當恢複,則用一個notify()重新啟動線程。
100、java中有幾種類型的流?JDK為每種類型的流提供了一些抽象類別以供繼承,請說出他們分別是哪些類?
位元組流,字元流。位元組流繼承於InputStream / OutputStream,字元流繼承於InputStreamReader / OutputStreamWriter。在java.io包中還有許多其他的流,主要是為了提高效能和使用方便。
101、java中會存在記憶體流失嗎,請簡單描述。
會。如:int i,i2;  return (i-i2);   //when i為足夠大的正數,i2為足夠大的負數。結果會造成溢位,導致錯誤。
102、java中實現多態的機制是什嗎?
方法的重寫Overriding和重載Overloading是Java多態性的不同表現。重寫Overriding是父類與子類之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。
103、記憶體回收行程的基本原理是什嗎?記憶體回收行程可以馬上回收記憶體嗎?有什麼辦法主動通知虛擬機器進行記憶體回收?
對於GC來說,當程式員建立對象時,GC就開始監控這個對象的地址、大小以及使用方式。通常,GC採用有向圖的方式記錄和管理堆(heap)中的所有對象。通過這種方式確定哪些對象是"可達的",哪些對象是"不可達的"。當GC確定一些對象為"不可達"時,GC就有責任回收這些記憶體空間。可以。程式員可以手動執行System.gc(),通知GC運行,但是Java語言規範並不保證GC一定會執行。
104、靜態變數和執行個體變數的區別?
static i = 10; //常量
   class A a;  a.i =10;//可變
105、什麼是java序列化,如何?java序列化?
序列化就是一種用來處理物件流程的機制,所謂物件流程也就是將對象的內容進行流化。可以對流化後的對象進行讀寫操作,也可將流化後的對象傳輸於網路之間。序列化是為瞭解決在對物件流程進行讀寫操作時所引發的問題。
序列化的實現:將需要被序列化的類實現Serializable介面,該介面沒有需要實現的方法,implements Serializable只是為了標註該對象是可被序列化的,然後使用一個輸出資料流(如:FileOutputStream)來構造一個ObjectOutputStream(物件流程)對象,接著,使用ObjectOutputStream對象的writeObject(Object obj)方法就可以將參數為obj的對象寫出(即儲存其狀態),要恢複的話則用輸入資料流。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.