Java2017面试宝典--XML部分、 流行的框架与新技术、软件工程与设计模式、 j2ee部分、EBJ部分、 webservice部分...
?
1、xml有哪些解析技術(shù)?區(qū)別是什么?
答:有DOM,SAX,STAX等
DOM:處理大型文件時其性能下降的非常厲害。這個問題是由DOM的樹結(jié)構(gòu)所造成的,這種結(jié)構(gòu)占用的內(nèi)存較多,而且DOM必須在解析文件之前把整個文檔裝入內(nèi)存,適合對XML的隨機(jī)訪問SAX:不現(xiàn)于DOM,SAX是事件驅(qū)動型的XML解析方式。它順序讀取XML文件,不需要一次全部裝載整個文件。當(dāng)遇到像文件開頭,文檔結(jié)束,或者標(biāo)簽開頭與標(biāo)簽結(jié)束時,它會觸發(fā)一個事件,用戶通過在其回調(diào)事件中寫入處理代碼來處理XML文件,適合對XML的順序訪問
STAX:Streaming APIfor XML (StAX)
講解這些區(qū)別是不需要特別去比較,就像說傳智播客與其他培訓(xùn)機(jī)構(gòu)的區(qū)別時,我們只需說清楚傳智播客有什么特點(diǎn)和優(yōu)點(diǎn)就行了,這就已經(jīng)間接回答了彼此的區(qū)別。
?
2、你在項目中用到了xml技術(shù)的哪些方面?如何實(shí)現(xiàn)的?
答:用到了數(shù)據(jù)存貯,信息配置兩方面。在做數(shù)據(jù)交換平臺時,將不能數(shù)據(jù)源的數(shù)據(jù)組裝成XML文件,然后將XML文件壓縮打包加密后通過網(wǎng)絡(luò)傳送給接收者,接收解密與解壓縮后再同XML文件中還原相關(guān)信息進(jìn)行處理。在做軟件配置時,利用XML可以很方便的進(jìn)行,軟件的各種配置參數(shù)都存貯在XML文件中。
3、用jdom解析xml文件時如何解決中文問題?如何解析?
答:看如下代碼,用編碼方式加以解決?
package test;?
import java.io.*;?
public class DOMTest?
{?
private String inFile = "c:\\people.xml"?
private String outFile = "c:\\people.xml"?
public static void main(String args[])?
{?
new DOMTest();?
}?
public DOMTest()?
{?
try?
{?
javax.xml.parsers.DocumentBuilder builder =
javax.xml.parsers.DocumentBuilderFactory.newInstance().newDocumentBuilder();
org.w3c.dom.Document doc = builder.newDocument();?
org.w3c.dom.Element root = doc.createElement("老師");
org.w3c.dom.Element wang = doc.createElement("王");
org.w3c.dom.Element liu = doc.createElement("劉");
wang.appendChild(doc.createTextNode("我是王老師"));?
root.appendChild(wang);?
doc.appendChild(root);?
javax.xml.transform.Transformer transformer =?
javax.xml.transform.TransformerFactory.newInstance().newTransformer();?
transformer.setOutputProperty(javax.xml.transform.OutputKeys.ENCODING,"gb2312");?
transformer.setOutputProperty(javax.xml.transform.OutputKeys.INDENT,"yes");
transformer.transform(newjavax.xml.transform.dom.DOMSource(doc),?
new
javax.xml.transform.stream.StreamResult(outFile));
}?
catch (Exception e)?
{?
System.out.println (e.getMessage());?
}?
}?
}
4、編程用JAVA解析XML的方式.
答:用SAX方式解析XML,XML文件如下:
<?xml version=1.0encoding=gb2312?>
<person>
<name>王小明</name>
<college>信息學(xué)院</college>
<telephone>6258113</telephone>
<notes>男,1955年生,博士,95年調(diào)入海南大學(xué)</notes>
</person>
事件回調(diào)類SAXHandler.java
import java.io.*;
importjava.util.Hashtable;
import org.xml.sax.*;
public classSAXHandler extends HandlerBase
{
private Hashtabletable = new Hashtable();
private StringcurrentElement = null;
private StringcurrentValue = null;
public voidsetTable(Hashtable table)
{
this.table = table;
}
public HashtablegetTable()
{
return table;
}
public voidstartElement(String tag, AttributeList attrs)
throws SAXException
{
currentElement = tag;
}
public voidcharacters(char[] ch, int start, int length)
throws SAXException
{
currentValue = newString(ch, start, length);
}
public voidendElement(String name) throws SAXException
{
if(currentElement.equals(name))
table.put(currentElement,currentValue);
}
?
}
JSP內(nèi)容顯示源碼,SaxXml.jsp:
<HTML>
<HEAD>
<TITLE>剖析XML文件people.xml</TITLE>
</HEAD>
<BODY>
<%@ pageerrorPage=ErrPage.jsp
contentType=text/html;charset=GB2312%>
<%@ pageimport=java.io.* %>
<%@ page import=java.util.Hashtable%>
<%@ pageimport=org.w3c.dom.* %>
<%@ pageimport=org.xml.sax.* %>
<%@ pageimport=javax.xml.parsers.SAXParserFactory %>
<%@ pageimport=javax.xml.parsers.SAXParser %>
<%@ pageimport=SAXHandler %>
<%
File file = new File(c:\people.xml);
FileReader reader =new FileReader(file);
Parser parser;
SAXParserFactory spf= SAXParserFactory.newInstance();
SAXParser sp =spf.newSAXParser();
SAXHandler handler =new SAXHandler();
sp.parse(newInputSource(reader), handler);
Hashtable hashTable =handler.getTable();
out.println(<TABLEBORDER=2><CAPTION>教師信息表</CAPTION>);
out.println(<TR><TD>姓名</TD>+ <TD> +
(String)hashTable.get(newString(name)) + </TD></TR>);
out.println(<TR><TD>學(xué)院</TD>+ <TD> +
(String)hashTable.get(newString(college))+</TD></TR>);
out.println(<TR><TD>電話</TD>+ <TD> +
(String)hashTable.get(newString(telephone)) + </TD></TR>);
out.println(<TR><TD>備注</TD>+ <TD> +
(String)hashTable.get(newString(notes)) + </TD></TR>);
out.println(</TABLE>);
%>
</BODY>
</HTML>
5、XML文檔定義有幾種形式?它們之間有何本質(zhì)區(qū)別?解析XML文檔有哪幾種方式?
a: 兩種形式dtd schema,b: 本質(zhì)區(qū)別:schema本身是xml的,可以被XML解析器解析(這也是從DTD上發(fā)展schema的根本目的),c:有DOM,SAX,STAX等
DOM:處理大型文件時其性能下降的非常厲害。這個問題是由DOM的樹結(jié)構(gòu)所造成的,這種結(jié)構(gòu)占用的內(nèi)存較多,而且DOM必須在解析文件之前把整個文檔裝入內(nèi)存,適合對XML的隨機(jī)訪問
SAX:不現(xiàn)于DOM,SAX是事件驅(qū)動型的XML解析方式。它順序讀取XML文件,不需要一次全部裝載整個文件。當(dāng)遇到像文件開頭,文檔結(jié)束,或者標(biāo)簽開頭與標(biāo)簽結(jié)束時,它會觸發(fā)一個事件,用戶通過在其回調(diào)事件中寫入處理代碼來處理XML文件,適合對XML的順序訪問
STAX:Streaming API for XML (StAX)
?
流行的框架與新技術(shù)
?
1、談?wù)勀銓truts的理解。
答:
1. struts是一個按MVC模式設(shè)計的Web層框架,其實(shí)它就是一個大大的servlet,這個Servlet名為ActionServlet,或是ActionServlet的子類。我們可以在web.xml文件中將符合某種特征的所有請求交給這個Servlet處理,這個Servlet再參照一個配置文件(通常為/WEB-INF/struts-config.xml)將各個請求分別分配給不同的action去處理。
一個擴(kuò)展知識點(diǎn):struts的配置文件可以有多個,可以按模塊配置各自的配置文件,這樣可以防止配置文件的過度膨脹;
2.ActionServlet把請求交給action去處理之前,會將請求參數(shù)封裝成一個formbean對象(就是一個java類,這個類中的每個屬性對應(yīng)一個請求參數(shù)),封裝成一個什么樣的formbean對象呢?看配置文件。
3.要說明的是, ActionServlet把formbean對象傳遞給action的execute方法之前,可能會調(diào)用formbean的validate方法進(jìn)行校驗,只有校驗通過后才將這個formbean對象傳遞給action的execute方法,否則,它將返回一個錯誤頁面,這個錯誤頁面由input屬性指定,(看配置文件)作者為什么將這里命名為input屬性,而不是error屬性,我們后面結(jié)合實(shí)際的運(yùn)行效果進(jìn)行分析。
4.action執(zhí)行完后要返回顯示的結(jié)果視圖,這個結(jié)果視圖是用一個ActionForward對象來表示的,actionforward對象通過struts-config.xml配置文件中的配置關(guān)聯(lián)到某個jsp頁面,因為程序中使用的是在struts-config.xml配置文件為jsp頁面設(shè)置的邏輯名,這樣可以實(shí)現(xiàn)action程序代碼與返回的jsp頁面名稱的解耦。
?
你對struts可能還有自己的應(yīng)用方面的經(jīng)驗,那也要一并說出來。
2、談?wù)勀銓ibernate的理解。
答:
1. 面向?qū)ο笤O(shè)計的軟件內(nèi)部運(yùn)行過程可以理解成就是在不斷創(chuàng)建各種新對象、建立對象之間的關(guān)系,調(diào)用對象的方法來改變各個對象的狀態(tài)和對象消亡的過程,不管程序運(yùn)行的過程和操作怎么樣,本質(zhì)上都是要得到一個結(jié)果,程序上一個時刻和下一個時刻的運(yùn)行結(jié)果的差異就表現(xiàn)在內(nèi)存中的對象狀態(tài)發(fā)生了變化。
2.為了在關(guān)機(jī)和內(nèi)存空間不夠的狀況下,保持程序的運(yùn)行狀態(tài),需要將內(nèi)存中的對象狀態(tài)保存到持久化設(shè)備和從持久化設(shè)備中恢復(fù)出對象的狀態(tài),通常都是保存到關(guān)系數(shù)據(jù)庫來保存大量對象信息。從Java程序的運(yùn)行功能上來講,保存對象狀態(tài)的功能相比系統(tǒng)運(yùn)行的其他功能來說,應(yīng)該是一個很不起眼的附屬功能,java采用jdbc來實(shí)現(xiàn)這個功能,這個不起眼的功能卻要編寫大量的代碼,而做的事情僅僅是保存對象和恢復(fù)對象,并且那些大量的jdbc代碼并沒有什么技術(shù)含量,基本上是采用一套例行公事的標(biāo)準(zhǔn)代碼模板來編寫,是一種苦活和重復(fù)性的工作。
3.通過數(shù)據(jù)庫保存java程序運(yùn)行時產(chǎn)生的對象和恢復(fù)對象,其實(shí)就是實(shí)現(xiàn)了java對象與關(guān)系數(shù)據(jù)庫記錄的映射關(guān)系,稱為ORM(即ObjectRelation Mapping),人們可以通過封裝JDBC代碼來實(shí)現(xiàn)了這種功能,封裝出來的產(chǎn)品稱之為ORM框架,Hibernate就是其中的一種流行ORM框架。使用Hibernate框架,不用寫JDBC代碼,僅僅是調(diào)用一個save方法,就可以將對象保存到關(guān)系數(shù)據(jù)庫中,僅僅是調(diào)用一個get方法,就可以從數(shù)據(jù)庫中加載出一個對象。
4.使用Hibernate的基本流程是:配置Configuration對象、產(chǎn)生SessionFactory、創(chuàng)建session對象,啟動事務(wù),完成CRUD操作,提交事務(wù),關(guān)閉session。
5.使用Hibernate時,先要配置hibernate.cfg.xml文件,其中配置數(shù)據(jù)庫連接信息和方言等,還要為每個實(shí)體配置相應(yīng)的hbm.xml文件,hibernate.cfg.xml文件中需要登記每個hbm.xml文件。
6.在應(yīng)用Hibernate時,重點(diǎn)要了解Session的緩存原理,級聯(lián),延遲加載和hql查詢。
3、AOP的作用。
4、你對Spring的理解。
1.Spring實(shí)現(xiàn)了工廠模式的工廠類(在這里有必要解釋清楚什么是工廠模式),這個類名為BeanFactory(實(shí)際上是一個接口),在程序中通常BeanFactory的子類ApplicationContext。Spring相當(dāng)于一個大的工廠類,在其配置文件中通過<bean>元素配置用于創(chuàng)建實(shí)例對象的類名和實(shí)例對象的屬性。
2. Spring提供了對IOC良好支持,IOC是一種編程思想,是一種架構(gòu)藝術(shù),利用這種思想可以很好地實(shí)現(xiàn)模塊之間的解耦。IOC也稱為DI(DepencyInjection),什么叫依賴注入呢?
譬如,Class Programmer
{
Computer computer = null;
public void code()
{
//Computer computer = newIBMComputer();
//Computer computer =beanfacotry.getComputer();
computer.write();
}
public void setComputer(Computercomputer)
{
this.computer = computer;
}
}
另外兩種方式都由依賴,第一個直接依賴于目標(biāo)類,第二個把依賴轉(zhuǎn)移到工廠上,第三個徹底與目標(biāo)和工廠解耦了。在spring的配置文件中配置片段如下:
<bean id=”computer”class=”cn.itcast.interview.Computer”>
</bean>
?
<bean id=”programmer”class=”cn.itcast.interview.Programmer”>
<property name=”computer” ref=”computer”></property>
</bean>
3. Spring提供了對AOP技術(shù)的良好封裝, AOP稱為面向切面編程,就是系統(tǒng)中有很多各不相干的類的方法,在這些眾多方法中要加入某種系統(tǒng)功能的代碼,例如,加入日志,加入權(quán)限判斷,加入異常處理,這種應(yīng)用稱為AOP。實(shí)現(xiàn)AOP功能采用的是代理技術(shù),客戶端程序不再調(diào)用目標(biāo),而調(diào)用代理類,代理類與目標(biāo)類對外具有相同的方法聲明,有兩種方式可以實(shí)現(xiàn)相同的方法聲明,一是實(shí)現(xiàn)相同的接口,二是作為目標(biāo)的子類在,JDK中采用Proxy類產(chǎn)生動態(tài)代理的方式為某個接口生成實(shí)現(xiàn)類,如果要為某個類生成子類,則可以用CGLI B。在生成的代理類的方法中加入系統(tǒng)功能和調(diào)用目標(biāo)類的相應(yīng)方法,系統(tǒng)功能的代理以Advice對象進(jìn)行提供,顯然要創(chuàng)建出代理對象,至少需要目標(biāo)類和Advice類。spring提供了這種支持,只需要在spring配置文件中配置這兩個元素即可實(shí)現(xiàn)代理和aop功能,例如,
<bean id=”proxy”type=”org.spring.framework.aop.ProxyBeanFactory”>
<property name=”target” ref=””></property>
<property name=”advisor” ref=””></property>
?
</bean>
?
5、談?wù)凷truts中的Action servlet。
6、Struts優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
1. 實(shí)現(xiàn)MVC模式,結(jié)構(gòu)清晰,使開發(fā)者只關(guān)注業(yè)務(wù)邏輯的實(shí)現(xiàn).
2.有豐富的tag可以用 ,Struts的標(biāo)記庫(Taglib),如能靈活動用,則能大大提高開發(fā)效率
3. 頁面導(dǎo)航
使系統(tǒng)的脈絡(luò)更加清晰。通過一個配置文件,即可把握整個系統(tǒng)各部分之間的聯(lián)系,這對于后期的維護(hù)有著莫大的好處。尤其是當(dāng)另一批開發(fā)者接手這個項目時,這種優(yōu)勢體現(xiàn)得更加明顯。
4. 提供Exception處理機(jī)制 .
5. 數(shù)據(jù)庫鏈接池管理
6. 支持I18N
缺點(diǎn)
一、 轉(zhuǎn)到展示層時,需要配置forward,如果有十個展示層的jsp,需要配置十次struts,而且還不包括有時候目錄、文件變更,需要重新修改forward,注意,每次修改配置之后,要求重新部署整個項目,而tomcate這樣的服務(wù)器,還必須重新啟動服務(wù)器
二、 二、 Struts 的Action必需是thread-safe方式,它僅僅允許一個實(shí)例去處理所有的請求。所以action用到的所有的資源都必需統(tǒng)一同步,這個就引起了線程安全的問題。
三、 測試不方便. Struts的每個Action都同Web層耦合在一起,這樣它的測試依賴于Web容器,單元測試也很難實(shí)現(xiàn)。不過有一個Junit的擴(kuò)展工具Struts TestCase可以實(shí)現(xiàn)它的單元測試。
四、 類型的轉(zhuǎn)換. Struts的FormBean把所有的數(shù)據(jù)都作為String類型,它可以使用工具Commons-Beanutils進(jìn)行類型轉(zhuǎn)化。但它的轉(zhuǎn)化都是在Class級別,而且轉(zhuǎn)化的類型是不可配置的。類型轉(zhuǎn)化時的錯誤信息返回給用戶也是非常困難的。
五、 對Servlet的依賴性過強(qiáng). Struts處理Action時必需要依賴ServletRequest 和ServletResponse,所有它擺脫不了Servlet容器。
六、 前端表達(dá)式語言方面.Struts集成了JSTL,所以它主要使用JSTL的表達(dá)式語言來獲取數(shù)據(jù)。可是JSTL的表達(dá)式語言在Collection和索引屬性方面處理顯得很弱。
七、 對Action執(zhí)行的控制困難. Struts創(chuàng)建一個Action,如果想控制它的執(zhí)行順序?qū)浅@щy。甚至你要重新去寫Servlet來實(shí)現(xiàn)你的這個功能需求。
八、 對Action 執(zhí)行前和后的處理. Struts處理Action的時候是基于class的hierarchies,很難在action處理前和后進(jìn)行操作。
九、 對事件支持不夠. 在struts中,實(shí)際是一個表單Form對應(yīng)一個Action類(或DispatchAction),換一句話說:在Struts中實(shí)際是一個表單只能對應(yīng)一個事件,struts這種事件方式稱為application event,application event和component event相比是一種粗粒度的事件
?
?
7、STRUTS的應(yīng)用(如STRUTS架構(gòu))
Struts是采用JavaServlet/JavaServer Pages技術(shù),開發(fā)Web應(yīng)用程序的開放源碼的framework。采用Struts能開發(fā)出基于MVC(Model-View-Controller)設(shè)計模式的應(yīng)用構(gòu)架。 Struts有如下的主要功能:一.包含一個controllerservlet,能將用戶的請求發(fā)送到相應(yīng)的Action對象。二.JSP自由tag庫,并且在controller servlet中提供關(guān)聯(lián)支持,幫助開發(fā)員創(chuàng)建交互式表單應(yīng)用。三.提供了一系列實(shí)用對象:XML處理、通過Java reflection APIs自動處理JavaBeans屬性、國際化的提示和消息。
?
8、說說struts1與struts2的區(qū)別。
1.都是MVC的WEB框架,
2 struts1的老牌框架,應(yīng)用很廣泛,有很好的群眾基礎(chǔ),使用它開發(fā)風(fēng)險很小,成本更低!struts2雖然基于這個框架,但是應(yīng)用群眾并多,相對不成熟,未知的風(fēng)險和變化很多,開發(fā)人員相對不好招,使用它開發(fā)項目的風(fēng)險系數(shù)更大,用人成本更高!
3.struts2畢竟是站在前輩的基礎(chǔ)設(shè)計出來,它會改善和完善struts1中的一些缺陷,struts1中一些懸而未決問題在struts2得到了解決。
4.struts1的前端控制器是一個Servlet,名稱為ActionServlet,struts2的前端控制器是一個filter,在struts2.0中叫FilterDispatcher,在struts2.1中叫StrutsPrepareAndExecuteFilter。
5.struts1的action需要繼承Action類,struts2的action可以不繼承任何類;struts1對同一個路徑的所有請求共享一個Action實(shí)例,struts2對同一個路徑的每個請求分別使用一個獨(dú)立Action實(shí)例對象,所有對于struts2的Action不用考慮線程安全問題。
6.在struts1中使用formbean封裝請求參數(shù),在struts2中直接使用action的屬性來封裝請求參數(shù)。
7.struts1中的多個業(yè)務(wù)方法放在一個Action中時(即繼承DispatchAction時),要么都校驗,要么都不校驗;對于struts2,可以指定只對某個方法進(jìn)行校驗,當(dāng)一個Action繼承了ActionSupport且在這個類中只編寫了validateXxx()方法,那么則只對Xxx()方法進(jìn)行校驗。
?
(一個請求來了的執(zhí)行流程進(jìn)行分析,struts2是自動支持分模塊開發(fā),并可以不同模塊設(shè)置不同的url前綴,這是通過package的namespace來實(shí)現(xiàn)的;struts2是支持多種類型的視圖;struts2的視圖地址可以是動態(tài)的,即視圖的名稱是支持變量方式的,舉例,論壇發(fā)帖失敗后回來還要傳遞boardid。視圖內(nèi)容顯示方面:它的標(biāo)簽用ognl,要el強(qiáng)大很多,在國際化方面支持分模塊管理,兩個模塊用到同樣的key,對應(yīng)不同的消息;)
?
?
與Struts1不同,Struts2對用戶的每一次請求都會創(chuàng)建一個Action,所以Struts2中的Action是線程安全的。
?
給我印象最深刻的是:struts配置文件中的redirect視圖的url不能接受參數(shù),而struts2配置文件中的redirect視圖可以接受參數(shù)。
?
?
9、hibernate中的update()和saveOrUpdate()的區(qū)別,session的load()和get()的區(qū)別。
10、簡述 Hibernate 和 JDBC 的優(yōu)缺點(diǎn)? 如何書寫一個 one to many 配置文件.
11、iBatis與Hibernate有什么不同?
相同點(diǎn):屏蔽jdbc api的底層訪問細(xì)節(jié),使用我們不用與jdbcapi打交道,就可以訪問數(shù)據(jù)。
jdbc api編程流程固定,還將sql語句與java代碼混雜在了一起,經(jīng)常需要拼湊sql語句,細(xì)節(jié)很繁瑣。
ibatis的好處:屏蔽jdbc api的底層訪問細(xì)節(jié);將sql語句與java代碼進(jìn)行分離;提供了將結(jié)果集自動封裝稱為實(shí)體對象和對象的集合的功能,queryForList返回對象集合,用queryForObject返回單個對象;提供了自動將實(shí)體對象的屬性傳遞給sql語句的參數(shù)。
?
Hibernate是一個全自動的orm映射工具,它可以自動生成sql語句,ibatis需要我們自己在xml配置文件中寫sql語句,hibernate要比ibatis功能負(fù)責(zé)和強(qiáng)大很多。因為hibernate自動生成sql語句,我們無法控制該語句,我們就無法去寫特定的高效率的sql。對于一些不太復(fù)雜的sql查詢,hibernate可以很好幫我們完成,但是,對于特別復(fù)雜的查詢,hibernate就很難適應(yīng)了,這時候用ibatis就是不錯的選擇,因為ibatis還是由我們自己寫sql語句。
?
?
12、寫Hibernate的一對多和多對一雙向關(guān)聯(lián)的orm配置?
9、hibernate的inverse屬性的作用?
解決方案一,按照Object[]數(shù)據(jù)取出數(shù)據(jù),然后自己組bean
解決方案二,對每個表的bean寫構(gòu)造函數(shù),比如表一要查出field1,field2兩個字段,那么有一個構(gòu)造函數(shù)就是Bean(type1 filed1,type2
field2) ,然后在hql里面就可以直接生成這個bean了。
?
13、在DAO中如何體現(xiàn)DAO設(shè)計模式?
解決方案一,按照Object[]數(shù)據(jù)取出數(shù)據(jù),然后自己組bean
解決方案二,對每個表的bean寫構(gòu)造函數(shù),比如表一要查出field1,field2兩個字段,那么有一個構(gòu)造函數(shù)就是Bean(type1 filed1,type2
field2) ,然后在hql里面就可以直接生成這個bean了。
?
14、spring+Hibernate中委托方案怎么配置?
解決方案一,按照Object[]數(shù)據(jù)取出數(shù)據(jù),然后自己組bean
解決方案二,對每個表的bean寫構(gòu)造函數(shù),比如表一要查出field1,field2兩個字段,那么有一個構(gòu)造函數(shù)就是Bean(type1 filed1,type2
field2) ,然后在hql里面就可以直接生成這個bean了。
?
15、spring+Hibernate中委托方案怎么配置?
解決方案一,按照Object[]數(shù)據(jù)取出數(shù)據(jù),然后自己組bean
解決方案二,對每個表的bean寫構(gòu)造函數(shù),比如表一要查出field1,field2兩個字段,那么有一個構(gòu)造函數(shù)就是Bean(type1 filed1,type2
field2) ,然后在hql里面就可以直接生成這個bean了。
?
16.hibernate進(jìn)行多表查詢每個表中各取幾個字段,也就是說查詢出來的結(jié)果集沒有一個實(shí)體類與之對應(yīng)如何解決;
?
解決方案一,按照Object[]數(shù)據(jù)取出數(shù)據(jù),然后自己組bean
解決方案二,對每個表的bean寫構(gòu)造函數(shù),比如表一要查出field1,field2兩個字段,那么有一個構(gòu)造函數(shù)就是Bean(type1 filed1,type2
field2) ,然后在hql里面就可以直接生成這個bean了。
17.介紹一下Hibernate的二級緩存
按照以下思路來回答:(1)首先說清楚什么是緩存,(2)再說有了hibernate的Session就是一級緩存,即有了一級緩存,為什么還要有二級緩存,(3)最后再說如何配置Hibernate的二級緩存。
(1)緩存就是把以前從數(shù)據(jù)庫中查詢出來和使用過的對象保存在內(nèi)存中(一個數(shù)據(jù)結(jié)構(gòu)中),這個數(shù)據(jù)結(jié)構(gòu)通常是或類似Hashmap,當(dāng)以后要使用某個對象時,先查詢緩存中是否有這個對象,如果有則使用緩存中的對象,如果沒有則去查詢數(shù)據(jù)庫,并將查詢出來的對象保存在緩存中,以便下次使用。下面是緩存的偽代碼:
引出hibernate的第二級緩存,用下面的偽代碼分析了Cache的實(shí)現(xiàn)原理
Dao
{
hashmap map = new map();
User getUser(integer id)
{
User user = map.get(id)
if(user == null)
{
user = session.get(id);
map.put(id,user);
}
return user;
}
}
?
Dao
{
Cache cache = null
setCache(Cache cache)
{
this.cache = cache
}
?
User getUser(int id)
{
if(cache!=null)
{
User user =cache.get(id);
if(user ==null)
{
user =session.get(id);
cache.put(id,user);
}
return user;
}
?
return session.get(id);
}
}
(2)Hibernate的Session就是一種緩存,我們通常將之稱為Hibernate的一級緩存,當(dāng)想使用session從數(shù)據(jù)庫中查詢出一個對象時,Session也是先從自己內(nèi)部查看是否存在這個對象,存在則直接返回,不存在才去訪問數(shù)據(jù)庫,并將查詢的結(jié)果保存在自己內(nèi)部。由于Session代表一次會話過程,一個Session與一個數(shù)據(jù)庫連接相關(guān)連,所以Session最好不要長時間保持打開,通常僅用于一個事務(wù)當(dāng)中,在事務(wù)結(jié)束時就應(yīng)關(guān)閉。并且Session是線程不安全的,被多個線程共享時容易出現(xiàn)問題。通常只有那種全局意義上的緩存才是真正的緩存應(yīng)用,才有較大的緩存價值,因此,Hibernate的Session這一級緩存的緩存作用并不明顯,應(yīng)用價值不大。Hibernate的二級緩存就是要為Hibernate配置一種全局緩存,讓多個線程和多個事務(wù)都可以共享這個緩存。我們希望的是一個人使用過,其他人也可以使用,session沒有這種效果。
(3)二級緩存是獨(dú)立于Hibernate的軟件部件,屬于第三方的產(chǎn)品,多個廠商和組織都提供有緩存產(chǎn)品,例如,EHCache和OSCache等等。在Hibernate中使用二級緩存,首先就要在hibernate.cfg.xml配置文件中配置使用哪個廠家的緩存產(chǎn)品,接著需要配置該緩存產(chǎn)品自己的配置文件,最后要配置Hibernate中的哪些實(shí)體對象要納入到二級緩存的管理中。明白了二級緩存原理和有了這個思路后,很容易配置起Hibernate的二級緩存。擴(kuò)展知識:一個SessionFactory可以關(guān)聯(lián)一個二級緩存,也即一個二級緩存只能負(fù)責(zé)緩存一個數(shù)據(jù)庫中的數(shù)據(jù),當(dāng)使用Hibernate 的二級緩存后,注意不要有其他的應(yīng)用或SessionFactory來更改當(dāng)前數(shù)據(jù)庫中的數(shù)據(jù),這樣緩存的數(shù)據(jù)就會與數(shù)據(jù)庫中的實(shí)際數(shù)據(jù)不一致。
?
18、Spring 的依賴注入是什么意思? 給一個 Bean 的 message 屬性, 字符串類型, 注入值為 "Hello" 的 XML 配置文件該怎么寫?
?
19、Jdo是什么?
JDO是Java對象持久化的新的規(guī)范,為java data object的簡稱,也是一個用于存取某種數(shù)據(jù)倉庫中的對象的標(biāo)準(zhǔn)化API。JDO提供了透明的對象存儲,因此對開發(fā)人員來說,存儲數(shù)據(jù)對象完全不需要額外的代碼(如JDBC API的使用)。這些繁瑣的例行工作已經(jīng)轉(zhuǎn)移到JDO產(chǎn)品提供商身上,使開發(fā)人員解脫出來,從而集中時間和精力在業(yè)務(wù)邏輯上。另外,JDO很靈活,因為它可以在任何數(shù)據(jù)底層上運(yùn)行。JDBC只是面向關(guān)系數(shù)據(jù)庫(RDBMS)JDO更通用,提供到任何數(shù)據(jù)底層的存儲功能,比如關(guān)系數(shù)據(jù)庫、文件、XML以及對象數(shù)據(jù)庫(ODBMS)等等,使得應(yīng)用可移植性更強(qiáng)。
?
20、什么是spring的IOC AOP
21、STRUTS的工作流程!
22、spring 與EJB的區(qū)別!!
?
?軟件工程與設(shè)計模式
1、UML方面
標(biāo)準(zhǔn)建模語言UML。用例圖,靜態(tài)圖(包括類圖、對象圖和包圖),行為圖,交互圖(順序圖,合作圖),實(shí)現(xiàn)圖。
2、j2ee常用的設(shè)計模式?說明工廠模式。
總共23種,分為三大類:創(chuàng)建型,結(jié)構(gòu)型,行為型
我只記得其中常用的6、7種,分別是:
創(chuàng)建型(工廠、工廠方法、抽象工廠、單例)
結(jié)構(gòu)型(包裝、適配器,組合,代理)
行為(觀察者,模版,策略)
然后再針對你熟悉的模式談?wù)勀愕睦斫饧纯伞?/p>
?
Java中的23種設(shè)計模式:
Factory(工廠模式), Builder(建造模式), FactoryMethod(工廠方法模式),
Prototype(原始模型模式),Singleton(單例模式), Facade(門面模式),
Adapter(適配器模式), Bridge(橋梁模式), Composite(合成模式),
Decorator(裝飾模式), Flyweight(享元模式), Proxy(代理模式),
Command(命令模式), Interpreter(解釋器模式), Visitor(訪問者模式),
Iterator(迭代子模式), Mediator(調(diào)停者模式), Memento(備忘錄模式),
Observer(觀察者模式), State(狀態(tài)模式), Strategy(策略模式),
Template Method(模板方法模式), Chain Of Responsibleity(責(zé)任鏈模式)
工廠模式:工廠模式是一種經(jīng)常被使用到的模式,根據(jù)工廠模式實(shí)現(xiàn)的類可以根據(jù)提供的數(shù)據(jù)生成一組類中某一個類的實(shí)例,通常這一組類有一個公共的抽象父類并且實(shí)現(xiàn)了相同的方法,但是這些方法針對不同的數(shù)據(jù)進(jìn)行了不同的操作。首先需要定義一個基類,該類的子類通過不同的方法實(shí)現(xiàn)了基類中的方法。然后需要定義一個工廠類,工廠類可以根據(jù)條件生成不同的子類實(shí)例。當(dāng)?shù)玫阶宇惖膶?shí)例后,開發(fā)人員可以調(diào)用基類中的方法而不必考慮到底返回的是哪一個子類的實(shí)例。
3、開發(fā)中都用到了那些設(shè)計模式?用在什么場合?
每個模式都描述了一個在我們的環(huán)境中不斷出現(xiàn)的問題,然后描述了該問題的解決方案的核心。通過這種方式,你可以無數(shù)次地使用那些已有的解決方案,無需在重復(fù)相同的工作。主要用到了MVC的設(shè)計模式。用來開發(fā)JSP/Servlet或者J2EE的相關(guān)應(yīng)用。簡單工廠模式等。
j2ee部分
1、BS與CS的聯(lián)系與區(qū)別。
C/S是Client/Server的縮寫。服務(wù)器通常采用高性能的PC、工作站或小型機(jī),并采用大型數(shù)據(jù)庫系統(tǒng),如Oracle、Sybase、InFORMix或SQL Server。客戶端需要安裝專用的客戶端軟件。
B/S是Brower/Server的縮寫,客戶機(jī)上只要安裝一個瀏覽器(Browser),如Netscape Navigator或InternetExplorer,服務(wù)器安裝Oracle、Sybase、InFORMix或SQL Server等數(shù)據(jù)庫。在這種結(jié)構(gòu)下,用戶界面完全通過WWW瀏覽器實(shí)現(xiàn),一部分事務(wù)邏輯在前端實(shí)現(xiàn),但是主要事務(wù)邏輯在服務(wù)器端實(shí)現(xiàn)。瀏覽器通過Web Server 同數(shù)據(jù)庫進(jìn)行數(shù)據(jù)交互。
C/S 與B/S 區(qū)別:
1.硬件環(huán)境不同:
C/S 一般建立在專用的網(wǎng)絡(luò)上, 小范圍里的網(wǎng)絡(luò)環(huán)境, 局域網(wǎng)之間再通過專門服務(wù)器提供連接和數(shù)據(jù)交換服務(wù).
B/S 建立在廣域網(wǎng)之上的, 不必是專門的網(wǎng)絡(luò)硬件環(huán)境,例與電話上網(wǎng), 租用設(shè)備. 信息自己管理. 有比C/S更強(qiáng)的適應(yīng)范圍,一般只要有操作系統(tǒng)和瀏覽器就行
2.對安全要求不同
C/S 一般面向相對固定的用戶群, 對信息安全的控制能力很強(qiáng). 一般高度機(jī)密的信息系統(tǒng)采用C/S 結(jié)構(gòu)適宜. 可以通過B/S發(fā)布部分可公開信息.
B/S 建立在廣域網(wǎng)之上, 對安全的控制能力相對弱, 可能面向不可知的用戶。
3.對程序架構(gòu)不同
C/S 程序可以更加注重流程, 可以對權(quán)限多層次校驗, 對系統(tǒng)運(yùn)行速度可以較少考慮.
B/S 對安全以及訪問速度的多重的考慮, 建立在需要更加優(yōu)化的基礎(chǔ)之上. 比C/S有更高的要求 B/S結(jié)構(gòu)的程序架構(gòu)是發(fā)展的趨勢, 從MS的.Net系列的BizTalk2000 Exchange 2000等, 全面支持網(wǎng)絡(luò)的構(gòu)件搭建的系統(tǒng).SUN 和IBM推的JavaBean構(gòu)件技術(shù)等,使 B/S更加成熟.
4.軟件重用不同
C/S 程序可以不可避免的整體性考慮, 構(gòu)件的重用性不如在B/S要求下的構(gòu)件的重用性好.
B/S 對的多重結(jié)構(gòu),要求構(gòu)件相對獨(dú)立的功能. 能夠相對較好的重用.就入買來的餐桌可以再利用,而不是做在墻上的石頭桌子
5.系統(tǒng)維護(hù)不同
C/S 程序由于整體性, 必須整體考察, 處理出現(xiàn)的問題以及系統(tǒng)升級. 升級難. 可能是再做一個全新的系統(tǒng)
B/S 構(gòu)件組成,方面構(gòu)件個別的更換,實(shí)現(xiàn)系統(tǒng)的無縫升級. 系統(tǒng)維護(hù)開銷減到最小.用戶從網(wǎng)上自己下載安裝就可以實(shí)現(xiàn)升級.
6.處理問題不同
C/S 程序可以處理用戶面固定, 并且在相同區(qū)域, 安全要求高需求, 與操作系統(tǒng)相關(guān). 應(yīng)該都是相同的系統(tǒng)
B/S 建立在廣域網(wǎng)上, 面向不同的用戶群, 分散地域, 這是C/S無法作到的. 與操作系統(tǒng)平臺關(guān)系最小.
7.用戶接口不同
C/S 多是建立的Window平臺上,表現(xiàn)方法有限,對程序員普遍要求較高
B/S 建立在瀏覽器上, 有更加豐富和生動的表現(xiàn)方式與用戶交流. 并且大部分難度減低,減低開發(fā)成本.
8.信息流不同
C/S 程序一般是典型的中央集權(quán)的機(jī)械式處理,交互性相對低
B/S 信息流向可變化, B-B B-CB-G等信息、流向的變化, 更像交易中心。
2、應(yīng)用服務(wù)器與WEB SERVER的區(qū)別?
應(yīng)用服務(wù)器:Weblogic、Tomcat、Jboss
WEB SERVER:IIS、Apache
3、應(yīng)用服務(wù)器有那些?
BEA WebLogic Server,IBMWebSphere Application Server,Oracle9i Application Server,jBoss,Tomcat
?
4、J2EE是什么?
答:Je22是Sun公司提出的多層(multi-diered),分布式(distributed),基于組件(component-base)的企業(yè)級應(yīng)用模型(enterpriese application model).在這樣的一個應(yīng)用系統(tǒng)中,可按照功能劃分為不同的組件,這些組件又可在不同計算機(jī)上,并且處于相應(yīng)的層次(tier)中。所屬層次包括客戶層(clietntier)組件,web層和組件,Business層和組件,企業(yè)信息系統(tǒng)(EIS)層。
?
一個另類的回答:j2ee就是增刪改查。
5、J2EE是技術(shù)還是平臺還是框架?什么是J2EE
J2EE本身是一個標(biāo)準(zhǔn),一個為企業(yè)分布式應(yīng)用的開發(fā)提供的標(biāo)準(zhǔn)平臺。
J2EE也是一個框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技術(shù)。
6、請對以下在J2EE中常用的名詞進(jìn)行解釋(或簡單描述)
web容器:給處于其中的應(yīng)用程序組件(JSP,SERVLET)提供一個環(huán)境,使JSP,SERVLET直接更容器中的環(huán)境變量接口交互,不必關(guān)注其它系統(tǒng)問題。主要有WEB服務(wù)器來實(shí)現(xiàn)。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。該容器提供的接口嚴(yán)格遵守J2EE規(guī)范中的WEB APPLICATION 標(biāo)準(zhǔn)。我們把遵守以上標(biāo)準(zhǔn)的WEB服務(wù)器就叫做J2EE中的WEB容器。
EJB容器:Enterprisejava bean 容器。更具有行業(yè)領(lǐng)域特色。他提供給運(yùn)行在其中的組件EJB各種管理功能。只要滿足J2EE規(guī)范的EJB放入該容器,馬上就會被容器進(jìn)行高效率的管理。并且可以通過現(xiàn)成的接口來獲得系統(tǒng)級別的服務(wù)。例如郵件服務(wù)、事務(wù)管理。
JNDI:(JavaNaming & Directory Interface)JAVA命名目錄服務(wù)。主要提供的功能是:提供一個目錄系統(tǒng),讓其它各地的應(yīng)用程序在其上面留下自己的索引,從而滿足快速查找和定位分布式應(yīng)用程序的功能。
JMS:(JavaMessage Service)JAVA消息服務(wù)。主要實(shí)現(xiàn)各個應(yīng)用程序之間的通訊。包括點(diǎn)對點(diǎn)和廣播。
JTA:(JavaTransaction API)JAVA事務(wù)服務(wù)。提供各種分布式事務(wù)服務(wù)。應(yīng)用程序只需調(diào)用其提供的接口即可。
JAF:(JavaAction FrameWork)JAVA安全認(rèn)證框架。提供一些安全控制方面的框架。讓開發(fā)者通過各種部署和自定義實(shí)現(xiàn)自己的個性安全控制策略。
RMI/IIOP:(RemoteMethod Invocation /internet對象請求中介協(xié)議)他們主要用于通過遠(yuǎn)程調(diào)用服務(wù)。例如,遠(yuǎn)程有一臺計算機(jī)上運(yùn)行一個程序,它提供股票分析服務(wù),我們可以在本地計算機(jī)上實(shí)現(xiàn)對其直接調(diào)用。當(dāng)然這是要通過一定的規(guī)范才能在異構(gòu)的系統(tǒng)之間進(jìn)行通信。RMI是JAVA特有的。
7、如何給weblogic指定大小的內(nèi)存?
(這個問題不作具體回答,列出來只是告訴讀者可能會遇到什么問題,你不需要面面俱到,什么都精通。)
?
在啟動Weblogic的腳本中(位于所在Domian對應(yīng)服務(wù)器目錄下的startServerName),增加setMEM_ARGS=-Xms32m -Xmx200m,可以調(diào)整最小內(nèi)存為32M,最大200M
8、如何設(shè)定的weblogic的熱啟動模式(開發(fā)模式)與產(chǎn)品發(fā)布模式?
可以在管理控制臺中修改對應(yīng)服務(wù)器的啟動模式為開發(fā)或產(chǎn)品模式之一。或者修改服務(wù)的啟動文件或者commenv文件,增加setPRODUCTION_MODE=true。
9、如何啟動時不需輸入用戶名與密碼?
修改服務(wù)啟動文件,增加 WLS_USER和WLS_PW項。也可以在boot.properties文件中增加加密過的用戶名和密碼.
10、在weblogic管理制臺中對一個應(yīng)用域(或者說是一個網(wǎng)站,Domain)進(jìn)行jms及ejb或連接池等相關(guān)信息進(jìn)行配置后,實(shí)際保存在什么文件中?
保存在此Domain的config.xml文件中,它是服務(wù)器的核心配置文件。
11、說說weblogic中一個Domain的缺省目錄結(jié)構(gòu)?比如要將一個簡單的helloWorld.jsp放入何目錄下,然的在瀏覽器上就可打入http://主機(jī):端口號//helloword.jsp就可以看到運(yùn)行結(jié)果了? 又比如這其中用到了一個自己寫的javaBean該如何辦?
Domain目錄服務(wù)器目錄applications,將應(yīng)用目錄放在此目錄下將可以作為應(yīng)用訪問,如果是Web應(yīng)用,應(yīng)用目錄需要滿足Web應(yīng)用目錄要求,jsp文件可以直接放在應(yīng)用目錄中,Javabean需要放在應(yīng)用目錄的WEB-INF目錄的classes目錄中,設(shè)置服務(wù)器的缺省應(yīng)用將可以實(shí)現(xiàn)在瀏覽器上無需輸入應(yīng)用名。
12、在weblogic中發(fā)布ejb需涉及到哪些配置文件
不同類型的EJB涉及的配置文件不同,都涉及到的配置文件包括ejb-jar.xml,weblogic-ejb-jar.xmlCMP實(shí)體Bean一般還需要weblogic-cmp-rdbms-jar.xml
13、如何在weblogic中進(jìn)行ssl配置與客戶端的認(rèn)證配置或說說j2ee(標(biāo)準(zhǔn))進(jìn)行ssl的配置?
缺省安裝中使用DemoIdentity.jks和DemoTrust.jks KeyStore實(shí)現(xiàn)SSL,需要配置服務(wù)器使用Enable SSL,配置其端口,在產(chǎn)品模式下需要從CA獲取私有密鑰和數(shù)字證書,創(chuàng)建identity和trustkeystore,裝載獲得的密鑰和數(shù)字證書。可以配置此SSL連接是單向還是雙向的。
14、如何查看在weblogic中已經(jīng)發(fā)布的EJB?
可以使用管理控制臺,在它的Deployment中可以查看所有已發(fā)布的EJB
EBJ部分
1、EJB是基于哪些技術(shù)實(shí)現(xiàn)的?并說出SessionBean和EntityBean的區(qū)別,StatefulBean和StatelessBean的區(qū)別。
EJB包括Session Bean、EntityBean、Message Driven Bean,基于JNDI、RMI、JAT等技術(shù)實(shí)現(xiàn)。
SessionBean在J2EE應(yīng)用程序中被用來完成一些服務(wù)器端的業(yè)務(wù)操作,例如訪問數(shù)據(jù)庫、調(diào)用其他EJB組件。EntityBean被用來代表應(yīng)用系統(tǒng)中用到的數(shù)據(jù)。
對于客戶機(jī),SessionBean是一種非持久性對象,它實(shí)現(xiàn)某些在服務(wù)器上運(yùn)行的業(yè)務(wù)邏輯。
對于客戶機(jī),EntityBean是一種持久性對象,它代表一個存儲在持久性存儲器中的實(shí)體的對象視圖,或是一個由現(xiàn)有企業(yè)應(yīng)用程序?qū)崿F(xiàn)的實(shí)體。
Session Bean 還可以再細(xì)分為 Stateful Session Bean 與 StatelessSession Bean ,這兩種的 Session Bean都可以將系統(tǒng)邏輯放在 method之中執(zhí)行,不同的是 Stateful Session Bean 可以記錄呼叫者的狀態(tài),因此通常來說,一個使用者會有一個相對應(yīng)的 Stateful Session Bean 的實(shí)體。StatelessSession Bean 雖然也是邏輯組件,但是他卻不負(fù)責(zé)記錄使用者狀態(tài),也就是說當(dāng)使用者呼叫 Stateless Session Bean 的時候,EJBContainer 并不會找尋特定的 Stateless Session Bean 的實(shí)體來執(zhí)行這個 method。換言之,很可能數(shù)個使用者在執(zhí)行某個 Stateless Session Bean 的methods 時,會是同一個 Bean 的 Instance 在執(zhí)行。從內(nèi)存方面來看, Stateful Session Bean 與 StatelessSession Bean 比較, Stateful Session Bean 會消耗J2EE Server 較多的內(nèi)存,然而 Stateful Session Bean 的優(yōu)勢卻在于他可以維持使用者的狀態(tài)。
?
2、簡要講一下 EJB 的 7 個 Transaction Level?
3、EJB與JAVA BEAN的區(qū)別?
Java Bean 是可復(fù)用的組件,對Java Bean并沒有嚴(yán)格的規(guī)范,理論上講,任何一個Java類都可以是一個Bean。但通常情況下,由于JavaBean是被容器所創(chuàng)建(如Tomcat)的,所以Java Bean應(yīng)具有一個無參的構(gòu)造器,另外,通常Java Bean還要實(shí)現(xiàn)Serializable接口用于實(shí)現(xiàn)Bean的持久性。Java Bean實(shí)際上相當(dāng)于微軟COM模型中的本地進(jìn)程內(nèi)COM組件,它是不能被跨進(jìn)程訪問的。Enterprise Java Bean 相當(dāng)于DCOM,即分布式組件。它是基于Java的遠(yuǎn)程方法調(diào)用(RMI)技術(shù)的,所以EJB可以被遠(yuǎn)程訪問(跨進(jìn)程、跨計算機(jī))。但EJB必須被布署在諸如Webspere、WebLogic這樣的容器中,EJB客戶從不直接訪問真正的EJB組件,而是通過其容器訪問。EJB容器是EJB組件的代理,EJB組件由容器所創(chuàng)建和管理。客戶通過容器來訪問真正的EJB組件。
4、EJB包括(SessionBean,EntityBean)說出他們的生命周期,及如何管理事務(wù)的?
SessionBean:StatelessSession Bean 的生命周期是由容器決定的,當(dāng)客戶機(jī)發(fā)出請求要建立一個Bean的實(shí)例時,EJB容器不一定要創(chuàng)建一個新的Bean的實(shí)例供客戶機(jī)調(diào)用,而是隨便找一個現(xiàn)有的實(shí)例提供給客戶機(jī)。當(dāng)客戶機(jī)第一次調(diào)用一個Stateful Session Bean 時,容器必須立即在服務(wù)器中創(chuàng)建一個新的Bean實(shí)例,并關(guān)聯(lián)到客戶機(jī)上,以后此客戶機(jī)調(diào)用Stateful Session Bean 的方法時容器會把調(diào)用分派到與此客戶機(jī)相關(guān)聯(lián)的Bean實(shí)例。
EntityBean:EntityBeans能存活相對較長的時間,并且狀態(tài)是持續(xù)的。只要數(shù)據(jù)庫中的數(shù)據(jù)存在,Entity beans就一直存活。而不是按照應(yīng)用程序或者服務(wù)進(jìn)程來說的。即使EJB容器崩潰了,Entity beans也是存活的。Entity Beans生命周期能夠被容器或者 Beans自己管理。
EJB通過以下技術(shù)管理實(shí)務(wù):對象管理組織(OMG)的對象實(shí)務(wù)服務(wù)(OTS),Sun Microsystems的TransactionService(JTS)、Java TransactionAPI(JTA),開發(fā)組(X/Open)的XA接口。
5、EJB容器提供的服務(wù)
主要提供聲明周期管理、代碼產(chǎn)生、持續(xù)性管理、安全、事務(wù)管理、鎖和并發(fā)行管理等服務(wù)。
?
6、EJB的激活機(jī)制
以Stateful Session Bean 為例:其Cache大小決定了內(nèi)存中可以同時存在的Bean實(shí)例的數(shù)量,根據(jù)MRU或NRU算法,實(shí)例在激活和去激活狀態(tài)之間遷移,激活機(jī)制是當(dāng)客戶端調(diào)用某個EJB實(shí)例業(yè)務(wù)方法時,如果對應(yīng)EJBObject發(fā)現(xiàn)自己沒有綁定對應(yīng)的Bean實(shí)例則從其去激活Bean存儲中(通過序列化機(jī)制存儲實(shí)例)回復(fù)(激活)此實(shí)例。狀態(tài)變遷前會調(diào)用對應(yīng)的ejbActive和ejbPassivate方法。
7、EJB的幾種類型
會話(Session)Bean ,實(shí)體(Entity)Bean消息驅(qū)動的(Message Driven)Bean
會話Bean又可分為有狀態(tài)(Stateful)和無狀態(tài)(Stateless)兩種
實(shí)體Bean可分為Bean管理的持續(xù)性(BMP)和容器管理的持續(xù)性(CMP)兩種
8、客服端調(diào)用EJB對象的幾個基本步驟
設(shè)置JNDI服務(wù)工廠以及JNDI服務(wù)地址系統(tǒng)屬性,查找Home接口,從Home接口調(diào)用Create方法創(chuàng)建Remote接口,通過Remote接口調(diào)用其業(yè)務(wù)方法。
webservice部分
1、WEB SERVICE名詞解釋。JSWDL開發(fā)包的介紹。JAXP、JAXM的解釋。SOAP、UDDI,WSDL解釋。
Web ServiceWebService是基于網(wǎng)絡(luò)的、分布式的模塊化組件,它執(zhí)行特定的任務(wù),遵守具體的技術(shù)規(guī)范,這些規(guī)范使得Web Service能與其他兼容的組件進(jìn)行互操作。
JAXP(Java API forXML Parsing) 定義了在Java中使用DOM, SAX, XSLT的通用的接口。這樣在你的程序中你只要使用這些通用的接口,當(dāng)你需要改變具體的實(shí)現(xiàn)時候也不需要修改代碼。
JAXM(Java API forXML Messaging) 是為SOAP通信提供訪問方法和傳輸機(jī)制的API。
WSDL是一種XML 格式,用于將網(wǎng)絡(luò)服務(wù)描述為一組端點(diǎn),這些端點(diǎn)對包含面向文檔信息或面向過程信息的消息進(jìn)行操作。這種格式首先對操作和消息進(jìn)行抽象描述,然后將其綁定到具體的網(wǎng)絡(luò)協(xié)議和消息格式上以定義端點(diǎn)。相關(guān)的具體端點(diǎn)即組合成為抽象端點(diǎn)(服務(wù))。
SOAP即簡單對象訪問協(xié)議(Simple Object Access Protocol),它是用于交換XML編碼信息的輕量級協(xié)議。
UDDI 的目的是為電子商務(wù)建立標(biāo)準(zhǔn);UDDI是一套基于Web的、分布式的、為WebService提供的、信息注冊中心的實(shí)現(xiàn)標(biāo)準(zhǔn)規(guī)范,同時也包含一組使企業(yè)能將自身提供的Web Service注冊,以使別的企業(yè)能夠發(fā)現(xiàn)的訪問協(xié)議的實(shí)現(xiàn)標(biāo)準(zhǔn)。
2、CORBA是什么?用途是什么?
CORBA 標(biāo)準(zhǔn)是公共對象請求代理結(jié)構(gòu)(Common Object Request Broker Architecture),由對象管理組織 (Object Management Group,縮寫為 OMG)標(biāo)準(zhǔn)化。它的組成是接口定義語言(IDL), 語言綁定(binding:也譯為聯(lián)編)和允許應(yīng)用程序間互操作的協(xié)議。其目的為:用不同的程序設(shè)計語言書寫在不同的進(jìn)程中運(yùn)行,為不同的操作系統(tǒng)開發(fā)。
3. Linux
4、LINUX下線程,GDI類的解釋。
LINUX實(shí)現(xiàn)的就是基于核心輕量級進(jìn)程的"一對一"線程模型,一個線程實(shí)體對應(yīng)一個核心輕量級進(jìn)程,而線程之間的管理在核外函數(shù)庫中實(shí)現(xiàn)。
GDI類為圖像設(shè)備編程接口類庫。
5. 問得稀里糊涂的題
6、四種會話跟蹤技術(shù)
會話作用域ServletsJSP 頁面描述
page否是代表與一個頁面相關(guān)的對象和屬性。一個頁面由一個編譯好的 Java servlet 類(可以帶有任何的 include 指令,但是沒有 include 動作)表示。這既包括 servlet 又包括被編譯成 servlet 的JSP 頁面
request是是代表與 Web 客戶機(jī)發(fā)出的一個請求相關(guān)的對象和屬性。一個請求可能跨越多個頁面,涉及多個 Web 組件(由于 forward 指令和include 動作的關(guān)系)
session是是代表與用于某個 Web 客戶機(jī)的一個用戶體驗相關(guān)的對象和屬性。一個 Web 會話可以也經(jīng)常會跨越多個客戶機(jī)請求
application是是代表與整個 Web 應(yīng)用程序相關(guān)的對象和屬性。這實(shí)質(zhì)上是跨越整個 Web 應(yīng)用程序,包括多個頁面、請求和會話的一個全局作用域
7、簡述邏輯操作(&,|,^)與條件操作(&&,||)的區(qū)別。
區(qū)別主要答兩點(diǎn):a.條件操作只能操作布爾型的,而邏輯操作不僅可以操作布爾型,而且可以操作數(shù)值型
b.邏輯操作不會產(chǎn)生短路
?
轉(zhuǎn)載于:https://www.cnblogs.com/mrysc/p/8993511.html
總結(jié)
以上是生活随笔為你收集整理的Java2017面试宝典--XML部分、 流行的框架与新技术、软件工程与设计模式、 j2ee部分、EBJ部分、 webservice部分...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: javaSocket网络编程
- 下一篇: asp.net mvc 自定义全局过滤器