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