JAVA面試常用的基礎(chǔ)知識(shí)(3)

學(xué)人智庫(kù) 時(shí)間:2018-02-10 我要投稿
【clearvueentertainment.com - 學(xué)人智庫(kù)】

  getContentLength():返回請(qǐng)求的Body的長(zhǎng)度

  getHeader(String name):獲得HTTp協(xié)議定義的文件頭信息

  getHeaders(String name):返回指定名字的request Header的所有值,結(jié)果是一個(gè)枚舉的實(shí)例

  getHeaderNames():返回所以request Header的名字,結(jié)果是一個(gè)枚舉的實(shí)例

  getInputStream():返回請(qǐng)求的輸入流,用于獲得請(qǐng)求中的數(shù)據(jù)

  getMethod():獲得客戶端向服務(wù)器端傳送數(shù)據(jù)的方法

  getparameter(String name):獲得客戶端傳送給服務(wù)器端的有name指定的參數(shù)值

  getparameterNames():獲得客戶端傳送給服務(wù)器端的所有參數(shù)的名字,結(jié)果是一個(gè)枚舉的實(shí)例

  getparameterValues(String name):獲得有name指定的參數(shù)的所有值

  getprotocol():獲取客戶端向服務(wù)器端傳送數(shù)據(jù)所依據(jù)的協(xié)議名稱

  getQueryString():獲得查詢字符串

  getRequestURI():獲取發(fā)出請(qǐng)求字符串的客戶端地址

  getRemoteAddr():獲取客戶端的Ip地址

  getRemoteHost():獲取客戶端的名字

  getSession([Boolean create]):返回和請(qǐng)求相關(guān)Session

  getServerName():獲取服務(wù)器的名字

  getServletpath():獲取客戶端所請(qǐng)求的腳本文件的路徑

  getServerport():獲取服務(wù)器的端口號(hào)

  removeAttribute(String name):刪除請(qǐng)求中的一個(gè)屬性

  67、J2EE是技術(shù)還是平臺(tái)還是框架?

  J2EE本身是一個(gè)標(biāo)準(zhǔn),一個(gè)為企業(yè)分布式應(yīng)用的開(kāi)發(fā)提供的標(biāo)準(zhǔn)平臺(tái)。

  J2EE也是一個(gè)框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技術(shù)。

  68、我們?cè)趙eb應(yīng)用開(kāi)發(fā)過(guò)程中經(jīng)常遇到輸出某種編碼的字符,如iso8859-1等,如何輸出一個(gè)某種編碼的字符串?

  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、簡(jiǎn)述邏輯操作(&,|,^)與條件操作(&&,||)的區(qū)別。

  區(qū)別主要答兩點(diǎn):a.條件操作只能操作布爾型的,而邏輯操作不僅可以操作布爾型,而且可以操作數(shù)值型

  b.邏輯操作不會(huì)產(chǎn)生短路

  70、XML文檔定義有幾種形式?它們之間有何本質(zhì)區(qū)別?解析XML文檔有哪幾種方式?

  a: 兩種形式 dtd schema

  b: 本質(zhì)區(qū)別:schema本身是xml的,可以被XML解析器解析(這也是從DTD上發(fā)展schema的根本目的)

  c:有DOM,SAX,STAX等

  DOM:處理大型文件時(shí)其性能下降的非常厲害。這個(gè)問(wèn)題是由DOM的樹(shù)結(jié)構(gòu)所造成的,這種結(jié)構(gòu)占用的內(nèi)存較多,而且DOM必須在解析文件之前把整個(gè)文檔裝入內(nèi)存,適合對(duì)XML的隨機(jī)訪問(wèn)

  SAX:不現(xiàn)于DOM,SAX是事件驅(qū)動(dòng)型的XML解析方式。它順序讀取XML文件,不需要一次全部裝載整個(gè)文件。當(dāng)遇到像文件開(kāi)頭,文檔結(jié)束,或者標(biāo)簽開(kāi)頭與標(biāo)簽結(jié)束時(shí),它會(huì)觸發(fā)一個(gè)事件,用戶通過(guò)在其回調(diào)事件中寫(xiě)入處理代碼來(lái)處理XML文件,適合對(duì)XML的順序訪問(wèn)

  STAX:Streaming ApI for XML (StAX)

  xml文檔有兩種定義方法:

  dtd:數(shù)據(jù)類(lèi)型定義(data type definition),用以描述XML文檔的文檔結(jié)構(gòu),是早期的XML文檔定義形式。

  schema:其本身是基于XML語(yǔ)言編寫(xiě)的,在類(lèi)型和語(yǔ)法上的限定能力比dtd強(qiáng),處理也比較方便,因?yàn)榇苏饾u代替dtd成為新的模式定義語(yǔ)言。

  71、簡(jiǎn)述synchronized和java.util.concurrent.locks.Lock的異同 ?

  主要相同點(diǎn):Lock能完成synchronized所實(shí)現(xiàn)的所有功能

  主要不同點(diǎn):Lock有比synchronized更精確的線程語(yǔ)義和更好的性能。synchronized會(huì)自動(dòng)釋放鎖,而Lock一定要求程序員手工釋放,并且必須在finally從句中釋放。

  72、EJB的角色和三個(gè)對(duì)象

  一 個(gè)完整的基于EJB的分布式計(jì)算結(jié)構(gòu)由六個(gè)角色組成,這六個(gè)角色可以由不同的開(kāi)發(fā)商提供,每個(gè)角色所作的工作必須遵循Sun公司提供的EJB規(guī)范,以保證 彼此之間的兼容性。這六個(gè)角色分別是EJB組件開(kāi)發(fā)者(Enterprise Bean provider) 、應(yīng)用組合者(Application Assembler)、部署者(Deployer)、EJB 服務(wù)器提供者(EJB Server provider)、EJB 容器提供者(EJB Container provider)、系統(tǒng)管理員(System Administrator)

  三個(gè)對(duì)象是Remote(Local)接口、Home(LocalHome)接口,Bean類(lèi)

  73、EJB容器提供的服務(wù)

  主要提供聲明周期管理、代碼產(chǎn)生、持續(xù)性管理、安全、事務(wù)管理、鎖和并發(fā)行管理等服務(wù)。

  74、EJB規(guī)范規(guī)定EJB中禁止的操作有哪些?

  1. 不能操作線程和線程ApI(線程ApI指非線程對(duì)象的方法如notify,wait等),2.不能操作awt,3.不能實(shí)現(xiàn)服務(wù)器功能,4.不能對(duì)靜態(tài)屬 生存取,5.不能使用IO操作直接存取文件系統(tǒng),6.不能加載本地庫(kù).,7.不能將this作為變量和返回,8.不能循環(huán)調(diào)用。

  75、remote接口和home接口主要作用

  remote接口定義了業(yè)務(wù)方法,用于EJB客戶端調(diào)用業(yè)務(wù)方法。

  home接口是EJB工廠用于創(chuàng)建和移除查找EJB實(shí)例

  76、bean 實(shí)例的生命周期

  對(duì) 于Stateless Session Bean、Entity Bean、Message Driven Bean一般存在緩沖池管理,而對(duì)于Entity Bean和Statefull Session Bean存在Cache管理,通常包含創(chuàng)建實(shí)例,設(shè)置上下文、創(chuàng)建EJB Object(create)、業(yè)務(wù)方法調(diào)用、remove等過(guò)程,對(duì)于存在緩沖池管理的Bean,在create之后實(shí)例并不從內(nèi)存清除,而是采用緩沖 池調(diào)度機(jī)制不斷重用實(shí)例,而對(duì)于存在Cache管理的Bean則通過(guò)激活和去激活機(jī)制保持Bean的狀態(tài)并限制內(nèi)存中實(shí)例數(shù)量。

  77、EJB的激活機(jī)制

  以Stateful Session Bean 為例:其Cache大小決定了內(nèi)存中可以同時(shí)存在的Bean實(shí)例的數(shù)量,根據(jù)MRU或NRU算法,實(shí)例在激活和去激活狀態(tài)之間遷移,激活機(jī)制是當(dāng)客戶端調(diào) 用某個(gè)EJB實(shí)例業(yè)務(wù)方法時(shí),如果對(duì)應(yīng)EJB Object發(fā)現(xiàn)自己沒(méi)有綁定對(duì)應(yīng)的Bean實(shí)例則從其去激活Bean存儲(chǔ)中(通過(guò)序列化機(jī)制存儲(chǔ)實(shí)例)回復(fù)(激活)此實(shí)例。狀態(tài)變遷前會(huì)調(diào)用對(duì)應(yīng)的 ejbActive和ejbpassivate方法。

  78、EJB的幾種類(lèi)型

  會(huì)話(Session)Bean ,實(shí)體(Entity)Bean 消息驅(qū)動(dòng)的(Message Driven)Bean

  會(huì)話Bean又可分為有狀態(tài)(Stateful)和無(wú)狀態(tài)(Stateless)兩種

  實(shí)體Bean可分為Bean管理的持續(xù)性(BMp)和容器管理的持續(xù)性(CMp)兩種

  79、客服端調(diào)用EJB對(duì)象的幾個(gè)基本步驟

  設(shè)置JNDI服務(wù)工廠以及JNDI服務(wù)地址系統(tǒng)屬性,查找Home接口,從Home接口調(diào)用Create方法創(chuàng)建Remote接口,通過(guò)Remote接口調(diào)用其業(yè)務(wù)方法。

  80、如何給weblogic指定大小的內(nèi)存?

  在啟動(dòng)Weblogic的腳本中(位于所在Domian對(duì)應(yīng)服務(wù)器目錄下的startServerName),增加set MEM_ARGS=-Xms32m -Xmx200m,可以調(diào)整最小內(nèi)存為32M,最大200M

  81、如何設(shè)定的weblogic的熱啟動(dòng)模式(開(kāi)發(fā)模式)與產(chǎn)品發(fā)布模式?

  可以在管理控制臺(tái)中修改對(duì)應(yīng)服務(wù)器的啟動(dòng)模式為開(kāi)發(fā)或產(chǎn)品模式之一;蛘咝薷姆⻊(wù)的啟動(dòng)文件或者commenv文件,增加set pRODUCTION_MODE=true。

  82、如何啟動(dòng)時(shí)不需輸入用戶名與密碼?

  修改服務(wù)啟動(dòng)文件,增加 WLS_USER和WLS_pW項(xiàng)。也可以在boot.properties文件中增加加密過(guò)的用戶名和密碼.

  83、在weblogic管理制臺(tái)中對(duì)一個(gè)應(yīng)用域(或者說(shuō)是一個(gè)網(wǎng)站,Domain)進(jìn)行jms及ejb或連接池等相關(guān)信息進(jìn)行配置后,實(shí)際保存在什么文件中?

  保存在此Domain的config.xml文件中,它是服務(wù)器的核心配置文件。

  84、說(shuō)說(shuō)weblogic中一個(gè)Domain的缺省目錄結(jié)構(gòu)?比如要將一個(gè)簡(jiǎn)單的helloWorld.jsp放入何目錄下,然的在瀏覽器上就可打入 http://主機(jī):端口號(hào)//helloword.jsp就可以看到運(yùn)行結(jié)果了? 又比如這其中用到了一個(gè)自己寫(xiě)的javaBean該如何辦?

  Domain 目錄服務(wù)器目錄applications,將應(yīng)用目錄放在此目錄下將可以作為應(yīng)用訪問(wèn),如果是Web應(yīng)用,應(yīng)用目錄需要滿足Web應(yīng)用目錄要求,jsp文 件可以直接放在應(yīng)用目錄中,Javabean需要放在應(yīng)用目錄的WEB-INF目錄的classes目錄中,設(shè)置服務(wù)器的缺省應(yīng)用將可以實(shí)現(xiàn)在瀏覽器上無(wú) 需輸入應(yīng)用名。

  85、在weblogic中發(fā)布ejb需涉及到哪些配置文件

  不同類(lèi)型的EJB涉及的配置文件不同,都涉及到的配置文件包括ejb-jar.xml,weblogic-ejb-jar.xmlCMp實(shí)體Bean一般還需要weblogic-cmp-rdbms-jar.xml

  86、如何在weblogic中進(jìn)行ssl配置與客戶端的認(rèn)證配置或說(shuō)說(shuō)j2ee(標(biāo)準(zhǔn))進(jìn)行ssl的配置

  缺 省安裝中使用DemoIdentity.jks和DemoTrust.jks KeyStore實(shí)現(xiàn)SSL,需要配置服務(wù)器使用Enable SSL,配置其端口,在產(chǎn)品模式下需要從CA獲取私有密鑰和數(shù)字證書(shū),創(chuàng)建identity和trust keystore,裝載獲得的密鑰和數(shù)字證書(shū)?梢耘渲么薙SL連接是單向還是雙向的。

  87、如何查看在weblogic中已經(jīng)發(fā)布的EJB?

  可以使用管理控制臺(tái),在它的Deployment中可以查看所有已發(fā)布的EJB

  88、CORBA是什么?用途是什么?

  CORBA 標(biāo)準(zhǔn)是公共對(duì)象請(qǐng)求代理結(jié)構(gòu)(Common Object Request Broker Architecture),由對(duì)象管理組織 (Object Management Group,縮寫(xiě)為 OMG)標(biāo)準(zhǔn)化。它的組成是接口定義語(yǔ)言(IDL), 語(yǔ)言綁定(binding:也譯為聯(lián)編)和允許應(yīng)用程序間互操作的協(xié)議。 其目的為:用不同的程序設(shè)計(jì)語(yǔ)言書(shū)寫(xiě)在不同的進(jìn)程中運(yùn)行,為不同的操作系統(tǒng)開(kāi)發(fā)。

  89、說(shuō)說(shuō)你所熟悉或聽(tīng)說(shuō)過(guò)的j2ee中的幾種常用模式?及對(duì)設(shè)計(jì)模式的一些看法

  Session Facade pattern:使用SessionBean訪問(wèn)EntityBean

  Message Facade pattern:實(shí)現(xiàn)異步調(diào)用

  EJB Command pattern:使用Command JavaBeans取代SessionBean,實(shí)現(xiàn)輕量級(jí)訪問(wèn)

  Data Transfer Object Factory:通過(guò)DTO Factory簡(jiǎn)化EntityBean數(shù)據(jù)提供特性

  Generic Attribute Access:通過(guò)AttibuteAccess接口簡(jiǎn)化EntityBean數(shù)據(jù)提供特性

  Business Interface:通過(guò)遠(yuǎn)程(本地)接口和Bean類(lèi)實(shí)現(xiàn)相同接口規(guī)范業(yè)務(wù)邏輯一致性

  EJB架構(gòu)的設(shè)計(jì)好壞將直接影響系統(tǒng)的性能、可擴(kuò)展性、可維護(hù)性、組件可重用性及開(kāi)發(fā)效率。項(xiàng)目越復(fù)雜,項(xiàng)目隊(duì)伍越龐大則越能體現(xiàn)良好設(shè)計(jì)的重要性。

  90、說(shuō)說(shuō)在weblogic中開(kāi)發(fā)消息Bean時(shí)的persistent與non-persisten的差別

  persistent方式的MDB可以保證消息傳遞的可靠性,也就是如果EJB容器出現(xiàn)問(wèn)題而JMS服務(wù)器依然會(huì)將消息在此MDB可用的時(shí)候發(fā)送過(guò)來(lái),而non-persistent方式的消息將被丟棄。

  既然沒(méi)有標(biāo)準(zhǔn)答案,就根據(jù)自己的所了解的,補(bǔ)充修正一下好了

  91、Servlet執(zhí)行時(shí)一般實(shí)現(xiàn)哪幾個(gè)方法?

  public void init(ServletConfig config)

  public ServletConfig getServletConfig()

  public String getServletInfo()

  public void service(ServletRequest request,ServletResponse response)

  public void destroy()

  init ()方法在servlet的生命周期中僅執(zhí)行一次,在服務(wù)器裝載servlet時(shí)執(zhí)行。缺省的init()方法通常是符合要求的,不過(guò)也可以根據(jù)需要進(jìn)行 override,比如管理服務(wù)器端資源,一次性裝入GIF圖像,初始化數(shù)據(jù)庫(kù)連接等,缺省的inti()方法設(shè)置了servlet的初始化參數(shù),并用它 的ServeltConfig對(duì)象參數(shù)來(lái)啟動(dòng)配置,所以覆蓋init()方法時(shí),應(yīng)調(diào)用super.init()以確保仍然執(zhí)行這些任務(wù)。

  service ()方法是servlet的核心,在調(diào)用service()方法之前,應(yīng)確保已完成init()方法。對(duì)于HttpServlet,每當(dāng)客戶請(qǐng)求一個(gè) HttpServlet對(duì)象,該對(duì)象的service()方法就要被調(diào)用,HttpServlet缺省的service()方法的服務(wù)功能就是調(diào)用與 HTTp請(qǐng)求的方法相應(yīng)的do功能,dopost()和doGet(),所以對(duì)于HttpServlet,一般都是重寫(xiě)dopost()和doGet() 方法。