當(dāng)前位置:高考升學(xué)網(wǎng) > 招聘筆試題 > 正文
9. Struts和struts2.0有什么區(qū)別,使用時需要注意什么?
/Action類
Struts1要求Action類繼承一個抽象類,Struts1使用抽象類編程而不是接口
Struts2可以實現(xiàn)Action接口也可以不實現(xiàn),Struts2提供一個ActionSuport基類去實現(xiàn)常用接口。Action接口不是必須的,任何有execute的標(biāo)識的POJO都有可能成為struts2的Action的對象
/線程模式
Struts1的Action是單例模式并且是線程安全的,僅有Action一個實例來處理所有請求。單策略模式限制了Struts1 Action能做的事。比且在開發(fā)時要注意Action資源必須是線程
安全比且是同步的。
Struts2的Action對象為每個請求產(chǎn)生一個實例,因此沒有線程安全問題。
/Servlet依賴
Struts1 Action依賴與Servlet API,因為當(dāng)一個Action被調(diào)用時HttpServletRequest和HttpServletResponse被傳遞給execute方法。
Struts2 Action不依賴與容器,允許Action脫離容器被單獨測試。如果需要,struts2依然可以訪問初始的request和response。但是,其他的元素減少或者消除了直接訪問HttpServletRequest和HttpServletResponse的必要性。
/可測性:
測試Struts1 Action的一個主要問題是execute方法暴漏了Servlet API(這使得測試要依賴于容器)。一個第三方擴(kuò)展--Struts TestCase--提供了一套Struts1的模擬對象(來進(jìn)行測試)
struts2 Action可以通過初始化、設(shè)置屬性、調(diào)用方法來測試,“依賴注入”支持也使測試更容易。
/捕獲輸入:
struts1使用ActionForm對象捕獲輸入。所有ActionForm必須繼承一個基類。因為其他JavaBean不能用作ActionForm,開發(fā)者經(jīng)常創(chuàng)建多余的基類不或輸入。動態(tài)Bean(DynaBeans)可以作為創(chuàng)建傳統(tǒng)ActionForm的選擇,但是,開發(fā)者可能是在重新描述(創(chuàng)建)已經(jīng)存在的JavaBean(仍然會導(dǎo)致有沉余的JavaBean)。
Struts2直接使用Acrtion屬性作為輸入屬性,消除了對第二個輸入對象的請求。輸入屬性可能是有自己(子)屬性的Rich對象類型。Action屬性能過通過web頁面上的Taglibs訪問。struts2也支持ActionForm模式。Richard對象類型,包括業(yè)務(wù)對象,能夠用作輸入/輸出對象。這種ModelDriven特性簡化了Taglib對POJO輸入對象的引用。
/表達(dá)式語言
Struts1整合了JSTL,因此使用JSTL EL。這種EL有基本對象圖遍歷,但是對集合和索引屬性的支持很脆弱。
Struts2可以使用JSTL,但是也支持一個更強大和靈活的表達(dá)式語言--“object graph Notation Language”(OGNL)
/綁定值到頁面(view)
Struts1使用標(biāo)準(zhǔn)JSP機(jī)制吧對象綁定到頁面中來訪問。
struts2使用ValueStack技術(shù),使taglib能夠訪問值而不需要把你的頁面(view)和對象綁定起來。ValueStack策略允許通過一系列名稱相同但類型不同的屬性重同頁面(view)
/類型轉(zhuǎn)換
Struts1 ActionForm屬性通常都是String類型。struts1使用Commons-Beanutils進(jìn)行類型轉(zhuǎn)換。每個類一個轉(zhuǎn)換器,對每一個實例來說是不可配置的
struts2 使用OGNL進(jìn)行類型轉(zhuǎn)換,提供基本和常用對象的轉(zhuǎn)換器。
/效驗
Struts1支持在ActionForm的validate方法中手動效驗,或者通過Commons Validator的擴(kuò)展來效驗。同一個類可以有不同的效驗內(nèi)容,但不能效驗子對象。
Struts2支持通過validate方法和XWork效驗框架進(jìn)行效驗。XWork效驗框架使用為屬性類類型定義的效驗和內(nèi)容效驗,來支持Chain效驗子屬性。
/Action執(zhí)行的控制
Struts1支持每一個模塊有單獨的Request Processors(生命周期),但是模塊中的所有Action必須共享相同的生命周期。
struts2支持通過攔截器堆棧(Interceptor Stacks)為每一個Action創(chuàng)建不能的生命周期。堆棧能夠根據(jù)需要和不同的Action一起使用。
10. 使用Java定義一個單鏈表結(jié)構(gòu),編程實現(xiàn)對定義的單鏈表結(jié)構(gòu)的反轉(zhuǎn)。
/
@author luochengcheng
定義一個單鏈表
/
class Node {
//變量
privatEint record;
//指向下一個對象
private Node nextNode;
public Node(int record) {
super();
this.record = record;
}
publicintgetRecord() {
return record;
}
public void setRecord(int record) {
this.record = record;
}
public Node getNextNode() {
returnnextNode;
}
public void setNextNode(Node nextNode) {
this.nextNode = nextNode;
}
}
/
@author luochengcheng
兩種方式實現(xiàn)單鏈表的反轉(zhuǎn)(遞歸、普通)
新手強烈建議旁邊拿著紙和筆跟著代碼畫圖(便于理解)
/
public class ReverseSingleList {
/
遞歸,在反轉(zhuǎn)當(dāng)前節(jié)點之前先反轉(zhuǎn)后續(xù)節(jié)點
/
public static Node reverse(Node head) {
if (null == head || null == head.getNextNode()) {
return head;
}
Node reversedHead = reverse(head.getNextNode());
head.getNextNode().setNextNode(head);
head.setNextNode(null);
returnreversedHead;
}
/
遍歷,將當(dāng)前節(jié)點的下一個節(jié)點緩存后更改當(dāng)前節(jié)點指針
/
public static Node reverse2(Node head) {
if (null == head) {
return head;
}
Node P = head;
Node cur = head.getNextNode();
Node next;
while (null != cur) {
next = cur.getNextNode();
cur.setNextNode(P);
P = cur;
cur = next;
}
//將原鏈表的頭節(jié)點的下一個節(jié)點置為null,再將反轉(zhuǎn)后的頭節(jié)點賦給head
head.setNextNode(null);
head = P;
return head;
}
public static void main(String[] args) {
Node head = new Node(0);
Node tmp = null;
Node cur = null;
// 構(gòu)造一個長度為10的鏈表,保存頭節(jié)點對象head
for (int i = 1; i < 10; i++) {
tmp = new Node(i);
if (1 == i) {
head.setNextNode(tmp);
} else {
cur.setNextNode(tmp);
}
cur = tmp;
}
//打印反轉(zhuǎn)前的鏈表
Node h = head;
while (null != h) {
System.out.print(h.getRecord() + " ");
h = h.getNextNode();
}
//調(diào)用反轉(zhuǎn)方法
head = reverse2(head);
System.out.println("\n");
//打印反轉(zhuǎn)后的結(jié)果
while (null != head) {
System.out.print(head.getRecord() + " ");
head = head.getNextNode();
}
}
}
運行:
C:\ex>java ReverseSingleList
0 1 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 1 0
11. 如何比較2個超大數(shù)組是否相等,要求時間復(fù)雜度O(n)(寫出思路)
12. 現(xiàn)有8個硬幣和一個天平,其中有一個硬幣比其他的輕,最少需要幾次能找到該硬幣,如何實現(xiàn),寫出思路。
2020年河北新聞網(wǎng)兩學(xué)一做
時間:2023-09-18 07:0:242020年河北新聞網(wǎng)兩學(xué)一做
時間:2023-09-15 11:0:59兩學(xué)一做學(xué)習(xí)教育知
時間:2023-09-21 06:0:302020年開展兩學(xué)一做學(xué)習(xí)教
時間:2023-09-19 21:0:30