JAVA復(fù)試問(wèn)題答案_第1頁(yè)
JAVA復(fù)試問(wèn)題答案_第2頁(yè)
JAVA復(fù)試問(wèn)題答案_第3頁(yè)
JAVA復(fù)試問(wèn)題答案_第4頁(yè)
JAVA復(fù)試問(wèn)題答案_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、(一) JAVA復(fù)試的問(wèn)題整理 1 Hibernate 的優(yōu)化流程是如何實(shí)現(xiàn)的,流程是怎么樣?1.盡量使用many-to-one,避免使用單向one-to-many2.靈活使用單向one-to-many3.不用一對(duì)一,使用多對(duì)一代替一對(duì)一4.配置對(duì)象緩存,不使用集合緩存5.一對(duì)多使用Bag 多對(duì)一使用Set6.繼承使用顯示多態(tài) HQL:from object polymorphism="exlicit" 避免查處所有對(duì)象7.消除大表,使用二級(jí)緩存 2 Struts1與Struts2的區(qū)別? 在Action 實(shí)現(xiàn)類方面的對(duì)比:Struts 1 要求Action 類繼承一個(gè)抽象

2、基類;Struts 1 的 一個(gè)具體問(wèn)題是使用抽象類編程而不是接口。Struts 2 Action 類可以實(shí)現(xiàn)一個(gè)Action接口,也可以實(shí)現(xiàn)其他接口,使可選和定制的服務(wù)成為可能。Struts2 提供一ActionSupport  基類去實(shí)現(xiàn)常用的接口。即使 Action  接口不是必須實(shí)現(xiàn)的,只有一個(gè)包含execute 方法的POJO 類都可以用作 Struts 2 的Action 。 線程模式方面的對(duì)比:Struts 1 Action 是單例模式并且必須是線程安全的,因?yàn)閮H有Action 的一個(gè)實(shí)例來(lái)處理所有的請(qǐng)求。單例策略限制了Struts 1 Action 能做的事

3、,并且要在開(kāi)發(fā)時(shí)特別小心。Action 資源必須是線程安全的或同步的;Struts 2 Action對(duì)象為每一個(gè)請(qǐng)求產(chǎn)生一個(gè)實(shí)例,因此沒(méi)有線程安全問(wèn)題。 Servlet 依賴方面的對(duì)比:Struts 1 Action 依賴于 Servlet API,因?yàn)镾truts 1 Action 的execute 方法中有HttpServletRequest 和HttpServletResponse 方法。Struts 2 Action 不再依賴于 Servlet API,從而允許Action 脫離Web 容器運(yùn)行,從而降低了測(cè)試Action 的難度。當(dāng)然,如果Action 需要直接訪問(wèn)HttpServl

4、etRequest 和HttpServletResponse 參數(shù),Struts 2 Action 仍然可以訪問(wèn)它們。但是,大部分時(shí)候,Action 都無(wú)需直接訪問(wèn)HttpServetRequest 和HttpServletResponse,從而給開(kāi)發(fā)者更多靈活的選擇。 可測(cè)性方面的對(duì)比:測(cè)試Struts 1 Action 的一個(gè)主要問(wèn)題是execute 方法依賴于Servlet API,這使得Action 的測(cè)試要依賴于Web 容器。為了脫離Web 容器測(cè)試 Struts1 的Action,必須借助于第三方擴(kuò)展:Struts TestCase,該擴(kuò)展下包含了系列的Mock 對(duì)象(模擬了Htt

5、pServetRequest 和HttpServletResponse 對(duì)象),從而可以脫離Web 容器測(cè) 試Struts 1 的Action 類。Struts 2 Action 可以通過(guò)初始化、設(shè)置屬性、調(diào)用方法來(lái)測(cè)試。 封裝請(qǐng)求參數(shù)的對(duì)比:Struts 1 使用ActionForm 對(duì)象封裝用戶的請(qǐng)求參數(shù),所有的 ActionForm 必須繼承一個(gè)基類:ActionForm。普通的JavaBean 不能用作ActionForm,因此,開(kāi)發(fā)者必須創(chuàng)建大量的ActionForm 類封裝用戶請(qǐng)求參數(shù)。雖然 Struts 1 提供了動(dòng)態(tài) ActionForm來(lái)簡(jiǎn)化 ActionForm的開(kāi)發(fā),但依

6、然需要在配置文件中定義ActionForm;Struts2 直接使用Action 屬性來(lái)封裝用戶請(qǐng)求屬性,避免了開(kāi)發(fā)者需要大量開(kāi)發(fā) ActionForm 類的煩瑣,實(shí)際上,這些屬性還可以是包含子屬性的 Ric對(duì)象類型。如果開(kāi)發(fā)者依然懷念 Struts 1  ActionForm 的模式,Struts2 提供ModelDriven 模式,可以讓開(kāi)發(fā)者使用單獨(dú)的Model 對(duì)象來(lái)封裝用戶請(qǐng)求參數(shù),但該Model 對(duì)象無(wú)需繼承任何 Struts 2 基類,是一個(gè)POJO,從而降低了代碼污染。 表達(dá)式語(yǔ)言方面的對(duì)比:Struts1 整合了 JSTL,因此可以使用JSTL 表達(dá)式語(yǔ)言。這種表達(dá)

7、式語(yǔ)言有基本對(duì)象圖遍歷,但在對(duì)集合和索引屬性的支持上則功能不強(qiáng);Struts 2 可以使用JSTL,但它整合了一種更強(qiáng)大和靈活的表達(dá)式語(yǔ)言:OGNL(Object Graph Notation Language),因此,Struts 2 下的表達(dá)式語(yǔ)言功能更加強(qiáng)大。綁定值到視圖的對(duì)比:Struts1 使用標(biāo)準(zhǔn)JSP 機(jī)制把對(duì)象綁定到視圖頁(yè)面;Struts2 使用“ValueStack ”技術(shù),使標(biāo)簽庫(kù)能夠訪問(wèn)值,而不需要把對(duì)象和視圖頁(yè)面綁定在一起。 類型轉(zhuǎn)換的對(duì)比:Struts1  ActionForm  屬性通常都是 String  類型。Struts 

8、;1 使用commons-Beanutils 進(jìn)行類型轉(zhuǎn)換,每個(gè)類一個(gè)轉(zhuǎn)換器,轉(zhuǎn)換器是不可配置的;Struts 2 使用OGNL 進(jìn)行類型轉(zhuǎn)換,支持基本數(shù)據(jù)類型和常用對(duì)象之間的轉(zhuǎn)換。 數(shù)據(jù)校驗(yàn)的對(duì)比:Struts1 支持在 ActionForm 重寫validate 方法中手動(dòng)校驗(yàn),或者通過(guò)整合 Commons-validator 框架來(lái)完成數(shù)據(jù)校驗(yàn)。Struts 2 支持通過(guò)重寫validate方法進(jìn)行校驗(yàn),也支持整合XWork 校驗(yàn)框架進(jìn)行校驗(yàn)。 Action 執(zhí)行控制的對(duì)比:Struts 1 支持每一個(gè)模塊對(duì)應(yīng)一個(gè)請(qǐng)求處理(即生命周期的概念),但是模塊中的所有Action 必須共享相同的

9、生命周期。Struts 2 支持通過(guò)攔截器堆棧(Interceptor    Stacks)為每一個(gè)Action 創(chuàng)建不同的生命周期。開(kāi)發(fā)者可以根據(jù)需要?jiǎng)?chuàng)建相應(yīng)堆棧,從而和不同的Action 一起使用。3 Struts1的原理 1.初始化:struts框架的總控制器ActionServlet是一個(gè)Servlet,它在web.xml中配置成自動(dòng)啟動(dòng)的Servlet,在啟動(dòng)時(shí)總控制器會(huì)讀取配置文件(struts-config.xml)的配置信息,為struts不同的模塊初始化相應(yīng)的對(duì)象。(面向?qū)ο笏枷? 2.發(fā)送請(qǐng)求:用戶提交表單或通過(guò)URL向WEB服務(wù)器提交請(qǐng)求,請(qǐng)

10、求的數(shù)據(jù)用HTTP協(xié)議傳給web服務(wù)器。 3.form填充:struts的總控制器ActionServlet在用戶提交請(qǐng)求時(shí)將數(shù)據(jù)放到對(duì)應(yīng)的form對(duì)象中的成員變量中。 4.派發(fā)請(qǐng)求:控制器根據(jù)配置信息對(duì)象ActionConfig將請(qǐng)求派發(fā)到具體的Action,對(duì)應(yīng)的formBean一并傳給這個(gè)Action中的excute()方法。 5.處理業(yè)務(wù):Action一般只包含一個(gè)excute()方法,它負(fù)責(zé)執(zhí)行相應(yīng)的業(yè)務(wù)邏輯(調(diào)用其它的業(yè)務(wù)模塊)完畢后返回一個(gè)ActionForward對(duì)象。服務(wù)器通過(guò)ActionForward對(duì)象進(jìn)行轉(zhuǎn)發(fā)工作。 6.返回響應(yīng):Action將業(yè)務(wù)處理的不同結(jié)果返回一個(gè)

11、目標(biāo)響應(yīng)對(duì)象給總控制器。 7.查找響應(yīng):總控制器根據(jù)Action處理業(yè)務(wù)返回的目標(biāo)響應(yīng)對(duì)象,找到對(duì)應(yīng)的資源對(duì)象,一般情況下為jsp頁(yè)面。 8.響應(yīng)用戶:目標(biāo)響應(yīng)對(duì)象將結(jié)果傳遞給資源對(duì)象,將結(jié)果展現(xiàn)給用戶。4 IO的流程如何實(shí)現(xiàn) 1,根據(jù)輸入源不同,構(gòu)造不同的輸入流2,根據(jù)不同的需要,包裝原始的輸入流。比如用BufferdInputStream提高性能。3,根據(jù)輸出源不同,構(gòu)造不同的輸出流。4,根據(jù)不同的需要,包裝原始的輸入流。5,從輸入流中讀取數(shù)據(jù)寫入輸出流中。6,關(guān)閉輸出,輸入流 5 WEB開(kāi)發(fā)安全的注意要點(diǎn)1登陸驗(yàn)證碼。利用一個(gè)servlet隨機(jī)產(chǎn)生一個(gè)驗(yàn)證碼,由于驗(yàn)證碼是機(jī)器隨機(jī)產(chǎn)生的,

12、因此暴力破解程序無(wú)法預(yù)料到具體是什么,所以可以防止暴力破解。2登陸身份驗(yàn)證。系統(tǒng)的每個(gè)功能都必須經(jīng)過(guò)身份驗(yàn)證后才能訪問(wèn),沒(méi)有認(rèn)證的請(qǐng)求會(huì)被過(guò)濾掉,這是最基本的安全要求:1,所有功能都通過(guò)Struts的Action來(lái)進(jìn)行訪問(wèn),不直接以jsp的形式向用戶提供功能訪問(wèn),這樣一方面可以防止向用戶暴露程序的資源名稱,另一方面也可更方便的進(jìn)行權(quán)限控制。2,對(duì)Struts的Actionservlet設(shè)置filter,利用該filter來(lái)檢查用戶的權(quán)限,這樣既可以防止用戶登陸后跨url訪問(wèn)。3防 止擾過(guò)權(quán)限認(rèn)證的直接資源訪問(wèn)。雖然前面的設(shè)計(jì)中,已經(jīng)要求所有的功能都通過(guò)struts的Action來(lái)進(jìn)行訪問(wèn),但是

13、還是不能排除惡意用戶可能會(huì)知道 程序資源名稱(jsp文件),如果這類用戶直接輸入jsp文件的url訪問(wèn),有可能會(huì)對(duì)系統(tǒng)形成威脅。因此需要禁止所有用戶發(fā)起的直接資源訪問(wèn)。通常以這 種方式來(lái)實(shí)現(xiàn):在Web應(yīng)用中創(chuàng)建一個(gè)從不使用的角色:NeverUsedRole,將所有的jsp資源文件配置為必須具有NeverUserRole才 能訪問(wèn)。由于根本沒(méi)有任何用戶可以成為該角色。由于根本沒(méi)有任何用戶可以成為該角色,所以也就無(wú)法對(duì)該角色對(duì)應(yīng)的資源直接訪問(wèn)。 6 常用的集合的區(qū)別Collection接口 Collection是最基本的集合接口,一個(gè)Collection代表一組Object,即Collection

14、的元素 (Elements)。一些Collection允許相同的元素而另一些不行。一些能排序而另一些不行。Java SDK不提供直接繼承自Collection的類,Java SDK提供的類都是繼承自Collection的“子接口”如List和Set。 List接口 List是有序的Collection,使用此接口能夠精確的控制每個(gè)元素插入的位置。用戶能夠使用索引(元素在List中的位置,類似于數(shù)組下標(biāo))來(lái)訪問(wèn)List中的元素,這類似于Java的數(shù)組。和下面要提到的Set不同,List允許有相同的元素。 LinkedList類 LinkedList實(shí)現(xiàn)了List接口,允許null元素。此外Lin

15、kedList提供額外的get,remove,insert方法在 LinkedList的首部或尾部。這些操作使LinkedList可被用作堆棧(stack),隊(duì)列(queue)或雙向隊(duì)列(deque)。 注意LinkedList沒(méi)有同步方法。如果多個(gè)線程同時(shí)訪問(wèn)一個(gè)List,則必須自己實(shí)現(xiàn)訪問(wèn)同步。 ArrayList類 ArrayList實(shí)現(xiàn)了可變大小的數(shù)組。它允許所有元素,包括null。ArrayList沒(méi)有同步。size,isEmpty,get,set方法運(yùn)行時(shí)間為常數(shù)。但是add方法開(kāi)銷為分?jǐn)偟某?shù),添加n個(gè)元素需要O(n)的時(shí)間。其他的方法運(yùn)行時(shí)間為線性。 當(dāng)需要插入大量元素時(shí),在插

16、入前可以調(diào)用ensureCapacity方法來(lái)增加ArrayList的容量以提高插入效率。 和LinkedList一樣,ArrayList也是非同步的(unsynchronized)。 Vector類 Vector非常類似ArrayList,但是Vector是同步的。由Vector創(chuàng)建的Iterator,雖然和ArrayList創(chuàng)建的Iterator是同一接口,但是,因?yàn)閂ector是同步的,當(dāng)一個(gè) Iterator被創(chuàng)建而且正在被使用,另一個(gè)線程改變了Vector的狀態(tài)(例如,添加或刪除了一些元素),這時(shí)調(diào)用Iterator的方法時(shí)將拋出 ConcurrentModificationExce

17、ption,因此必須捕獲該異常。 Stack 類 Stack繼承自Vector,實(shí)現(xiàn)一個(gè)后進(jìn)先出的堆棧。Stack提供5個(gè)額外的方法使得Vector得以被當(dāng)作堆棧使用?;镜膒ush 和pop方法,還有peek方法得到棧頂?shù)脑?,empty方法測(cè)試堆棧是否為空,search方法檢測(cè)一個(gè)元素在堆棧中的位置。Stack剛創(chuàng)建后是空 棧。 set接口 Set是一種不包含重復(fù)的元素的Collection,即任意的兩個(gè)元素e1和e2都有e1.equals(e2)=false,Set最多有一個(gè)null元素。 Map接口 請(qǐng)注意,Map沒(méi)有繼承Collection接口,Map提供key到value的映射。一

18、個(gè)Map中不能包含相同的key,每個(gè)key只能 映射一個(gè)value。Map接口提供3種集合的視圖,Map的內(nèi)容可以被當(dāng)作一組key集合,一組value集合,或者一組key-value映射。 Hashtable類 Hashtable繼承Map接口,實(shí)現(xiàn)一個(gè)key-value映射的哈希表。任何非空(non-null)的對(duì)象都可作為key或者value。 Hashtable是同步的。 HashMap類 HashMap和Hashtable類似,不同之處在于HashMap是非同步的,并且允許null,即null value和null key。,但是將HashMap視為Collection時(shí)(values

19、()方法可返回Collection),其迭代子操作時(shí)間開(kāi)銷和HashMap 的容量成比例。因此,如果迭代操作的性能相當(dāng)重要的話,不要將HashMap的初始化容量設(shè)得過(guò)高,或者load factor過(guò)低。 7 sql的優(yōu)化1)Shared pool的優(yōu)化應(yīng)該放在優(yōu)先考慮,因?yàn)橐粋€(gè)cache miss在shared pool中發(fā)生比在data buffer中發(fā)生導(dǎo)致的成本更高2)盡可能避免排序;盡可能在內(nèi)存中排序;分配合適的臨時(shí)空間以減少空間分配調(diào)用。3)建立Indexes,但索引的層次越多,效率越低,索引所包含的字段不超過(guò)4個(gè)。4)表分區(qū)5)使用where過(guò)濾行 Select id from d

20、ual where id = 16)使用表連接而不是多個(gè)查詢 使用:Select a.id,,b.app_name from A a,B b where a.id=b.id 而不是: Select a.id,,b.app_name from B b where a.id=b.id from A a7)執(zhí)行連接時(shí)使用完全限定的列引用 8)使用CASE表達(dá)式而不是多個(gè)查詢9)使用WHERE而不用HAVING 避免使用HAVING子句, HAVING 只會(huì)在檢索出所有記錄之后才對(duì)結(jié)果集進(jìn)行過(guò)濾。 這個(gè)處理需要排序,總計(jì)等操作。 如果能通過(guò)WHERE子句限制記錄的數(shù)目,那就能減

21、少這方面的開(kāi)銷。10)使用exists而不用IN11)使用相同的SQL,使用的SQL 必須絕對(duì)相同a)所有字符必須相同b)大小寫要相同c)空格要相同12)WHERE子句中的連接順序 ORACLE采用自下而上的順序解析WHERE子句,根據(jù)這個(gè)原理,表之間的連接必須寫在其他WHERE條件之前, 那些可以過(guò)濾掉最大數(shù)量記錄的條件必須寫在WHERE子句的末尾。13)SELECT子句中避免使用 * 例如:person表包含4個(gè)字段(id,name,age,address) Select id,name,age,address from person; 不用:select * from person14)

22、 使用DECODE函數(shù)來(lái)減少處理時(shí)間 使用DECODE函數(shù)可以避免重復(fù)掃描相同記錄或重復(fù)連接相同的表。15) 減少對(duì)表的查詢?cè)诤凶硬樵兊腟QL語(yǔ)句中,要特別注意減少對(duì)表的查詢。16) 使用表的別名(Alias)17) 用EXISTS替代IN 在許多基于基礎(chǔ)表的查詢中,為了滿足一個(gè)條件,往往需要對(duì)另一個(gè)表進(jìn)行聯(lián)接。在這種情況下, 使用EXISTS(或NOT EXISTS)通常將提高查詢的效率。 8 DWR是怎么實(shí)現(xiàn)它先在web.xml中配置一個(gè)Servlet,映射到特定的路徑(通常是%CONTEXT_PATH%/dwr/*)。這個(gè)Servlet的作用就是初 始化要暴露給Javascript調(diào)用

23、的Java類(通過(guò)dwr.xml進(jìn)行配置),并生成相應(yīng)的代理的Javascript類代碼。在XHR請(qǐng)求到來(lái)的 時(shí)候,Servlet負(fù)責(zé)將請(qǐng)求的參數(shù)變成對(duì)應(yīng)的Java對(duì)象,并以其為參數(shù)調(diào)用目標(biāo)Java方法,并將返回值轉(zhuǎn)化為Javascript代碼。 9 list和vector的區(qū)別List接口 List是有序的Collection,使用此接口能夠精確的控制每個(gè)元素插入的位置。用戶能夠使用索引(元素在List中的位置,類似于數(shù)組下標(biāo))來(lái)訪問(wèn)List中的元素,這類似于Java的數(shù)組。和下面要提到的Set不同,List允許有相同的元素。 LinkedList類 LinkedList實(shí)現(xiàn)了List接口,

24、允許null元素。此外LinkedList提供額外的get,remove,insert方法在 LinkedList的首部或尾部。這些操作使LinkedList可被用作堆棧(stack),隊(duì)列(queue)或雙向隊(duì)列(deque)。 注意LinkedList沒(méi)有同步方法。如果多個(gè)線程同時(shí)訪問(wèn)一個(gè)List,則必須自己實(shí)現(xiàn)訪問(wèn)同步。 ArrayList類 ArrayList實(shí)現(xiàn)了可變大小的數(shù)組。它允許所有元素,包括null。ArrayList沒(méi)有同步。size,isEmpty,get,set方法運(yùn)行時(shí)間為常數(shù)。但是add方法開(kāi)銷為分?jǐn)偟某?shù),添加n個(gè)元素需要O(n)的時(shí)間。其他的方法運(yùn)行時(shí)間為線性。 當(dāng)需要插入大量元

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論