JAVA面試題大全(含復習資料)_第1頁
JAVA面試題大全(含復習資料)_第2頁
JAVA面試題大全(含復習資料)_第3頁
JAVA面試題大全(含復習資料)_第4頁
JAVA面試題大全(含復習資料)_第5頁
已閱讀5頁,還剩95頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1.J2EE是什么?它包括哪些技術(shù)?

解答:從整體上講,J2EE是運用Java技術(shù)開發(fā)企業(yè)級應用的工業(yè)標準,它是Java技術(shù)不斷

適應和促進企業(yè)級應用過程中的產(chǎn)物。適用于企業(yè)級應用的J2EE,供應一個平臺獨立的、

可移植的、多用戶的、平安的和基于標準的企業(yè)級平臺,從而簡化企業(yè)應用的開發(fā)、管理和

部署。J2EE是一個標準,而不是一個現(xiàn)成的產(chǎn)品。

主要包括以下這些技術(shù):

1)ServlelServlet是Java平臺上的CGI技術(shù)。Servlel在服務器端運行,動態(tài)地生成Web頁

面。與傳統(tǒng)的CGI和許多其它類似CGI的技術(shù)相比,JavaServlet具有更高的效率并更簡潔

運用。對于Servlet,重復的請求不會導致同一程序的多次轉(zhuǎn)載,它是依靠線程的方式來支

持并發(fā)訪問的。2)JSPJSP(JavaServerPage)是一種實現(xiàn)一般靜態(tài)HTML和動態(tài)頁面輸出混

合編碼的技術(shù)。從這一點來看,特殊類似MicrosoftASP、PHP等技術(shù)。借助形式上的內(nèi)容

和外觀表現(xiàn)的分別,Web頁面制作的任務可以比較便利地劃分給頁面設(shè)計人員和程序員,

并便利地通過JSP來合成。在運行時態(tài),JSP將會被首先轉(zhuǎn)換成Servlet,并以Servlet的形

態(tài)編譯運行,因此它的效率和功能與Servlet相比沒有差別,一樣具有很高的效率。3)EJB

EJB定義了一組可重用的組件:EnterpriseBeans0開發(fā)人員可以利用這些組件,像搭積木一

樣建立分布式應用。4)JDBC

JDBC(JavaDatabaseConnectivity,Java數(shù)據(jù)庫連接)API是一個標準SQL(StructuredQuery

Language,結(jié)構(gòu)化查詢語言)數(shù)據(jù)庫訪問接口,它使數(shù)據(jù)庫開發(fā)人員能夠用標準JavaAPI編

寫數(shù)據(jù)庫應用程序。JDBCAPI主要用來連接數(shù)據(jù)庫和干脆調(diào)用SQL叮囑執(zhí)行各種SQL語

句。利用JDBCAPI可以執(zhí)行一般的SQL語句、動態(tài)SQL語句及帶IN和OUT參數(shù)的存儲

過程。Java中的JDBC相當于Microsoft平臺中的ODBC(OpenDatabaseConnectivity)?

2.測試生命周期、測試過程分為幾個階段,以及各階段的含義?

解答:軟件測試生命周期一般包括6個階段:1)支配2)分析,3)設(shè)計,4)構(gòu)建,5)測

試周期,6)最終測試和實施,

1)支配:產(chǎn)品定義階段

2).分析:外部文檔階段

3).設(shè)計:文檔架構(gòu)階段

4).構(gòu)建:單元測試階段

5).測試周期:錯誤修正,重復系統(tǒng)測試階段

6).最終的測試和實施:代碼凍結(jié)階段

3.您做系統(tǒng)設(shè)計用何種工具?

解答:Visio,rationalrose,powerdesigner等

4.什么是Web容器?

解答:容器就是一種服務程序,在服務器一個端口就有一個供應相應服務的程序,而這個程

序就是處理從客戶端發(fā)出的請求,如JAVA中的Tomcat容器,ASP的HS或PWS都是這樣

的容器。

5.運行時異樣與一般異樣有何異同?

解答:異樣表示程序運行過程中可能出現(xiàn)的非正常狀態(tài),運行時異樣表示虛擬機的通常操作

中可能遇到的異樣,是一種常見運行錯誤。java編譯器要求方法必需聲明拋出可能發(fā)生的非

運行時異樣,但是并不要求必需聲明拋出未被捕獲的運行時異樣。

6.Hibernate中:不看數(shù)據(jù)庫,不看XML文件,不看查詢語句,怎么樣能

知道表結(jié)構(gòu)?

解答:可以看與XML文件對應的域模型。

7.目前幾種主流數(shù)據(jù)庫軟件的應用特點、適用范圍各是什么?

解答:國際國內(nèi)的主導關(guān)系型數(shù)據(jù)庫管理系統(tǒng)有SQLServer.ORACLE>SYBASE.

INFORMIX和DB2。本文從性能,可伸縮性和并行性,平安性,操作簡便,運用風險,開

放性,易維護性和價格,數(shù)據(jù)庫二次開發(fā)方面比較了SQLServer,Oracle>SYBASE、DB2、

INFORMIX數(shù)據(jù)庫:

1)性能

SQLServer:老版本多用戶時性能不佳,新版本的性能有了明顯的改善,各項處理實力都有

了明顯的提高。保持了多項TPC-C(TPC-C值被廣泛用于衡量C/S環(huán)境下,由服務器和客戶

端構(gòu)筑的整體系統(tǒng)的性能,它由事物處理性能委員會(TPC,TransactionProcessingCorp)制

定,TPC為非贏利性國際組織。)紀錄。

Oracle:性能最高,保持WindowsNT下的TPC-C的世界記錄。SYBASE:性能較高,

支持Sun、IBM、HP>Compaq和Veritas的集群設(shè)備的特性,實現(xiàn)高可用性。適應于平安性

要求極高的系統(tǒng)。DB2:適用于數(shù)據(jù)倉庫和在線事物處理,性能較高??蛻舳酥С旨皯?/p>

用模式。INFORMIX:性能較高,支持集群,實現(xiàn)高可用性。適應于平安性要求極高的系

統(tǒng),尤其是銀行,證券系統(tǒng)的應用.2)可伸縮性,并行性SQLServer:以前版本SQLServer

并行實施和共存模型并不成熟。很難處理大量的用戶數(shù)和數(shù)據(jù)卷。伸縮性有限。新版本性能

有了較大的改善,在MicrosoftAdvancedServers上有突出的表現(xiàn),超過了他的主要競爭對手。

Oracle:平行服務器通過使一組結(jié)點共享同一簇中的工作來擴展WindowNT的實力,供應高

可用性和高伸縮性的簇的解決方案。假如WindowsNT不能滿足須要,用戶可以把數(shù)據(jù)庫移

到UNIX中,具有很好的伸縮性。SYBASE:新版本具有較好的并行性,速度快,對巨量

數(shù)據(jù)無明顯影響,但是技術(shù)實現(xiàn)困難,須要程序支持,伸縮性有限。DB2:DB2具有很好

的并行性。DB2把數(shù)據(jù)庫管理擴充到了并行的、多節(jié)點的環(huán)境。數(shù)據(jù)庫分區(qū)是數(shù)據(jù)庫的一

部分,包含自己的數(shù)據(jù)、索引、配置文件、和事務日志。數(shù)據(jù)庫分區(qū)有時被稱為節(jié)點或數(shù)據(jù)

庫節(jié)點,伸縮性有限。INFORMIX:接受單進程多線程的技術(shù),具有較好的并行性。但是

僅運行于UNIX平臺,伸縮性有限。3)平安性SQLserver:MicrosoftAdvancedServer獲

得最高平安認證,服務器平臺的穩(wěn)定性是數(shù)據(jù)庫的穩(wěn)定性的基礎(chǔ),新版本的SQL的平安性

有了極大的提高。Oracle:獲得最高認證級別的ISO標準認證。SYBASE:通過Sun公

司J2EE認證測試,獲得最高認證級別的ISO標準認證。DB2:獲得最高認證級別的ISO

標準認證。INFORMIX:獲得最高認證級別的ISO標準認證。4)操作簡便SQLServer:

操作簡潔,接受圖形界面。管理也很便利,而且編程接口特殊友好(它的SQL-DMO讓編程變

得特殊便利?。瑥囊拙S護性和價格上SQLServer明顯占有優(yōu)勢。Oracle:較困難,同時

供應GUI和叮囑行,在WindowsNT和Unix,Linux下操作相同。對數(shù)據(jù)庫管理人員要求

較高。SYBASE:困難,運用叮囑行操作,對數(shù)據(jù)庫管理人員要求較高。DB2:操作簡

潔,同時供應GUI和叮囑行,在WindowsNT和Unix下操作相同。INFORMIX:運用和管

理困難,叮囑行操作。對數(shù)據(jù)庫管理人員要求較高。5)運用風險SQLServer:完全重寫

的代碼,性能和兼容性有了較大的提高,與Oracle,DB2的性能差距明顯減小。該產(chǎn)品的

出臺閱歷了長期的測試,為產(chǎn)品的平安和穩(wěn)定進行了全面的檢測,平平穩(wěn)定性有了明顯的提

高。Oracle:長時間的開發(fā)閱歷,完全向下兼容,可以平安的進行數(shù)據(jù)庫的升級,在企業(yè),

政府中得到廣泛的應用。并且假如在WINNT上無法滿足數(shù)據(jù)的要求,可以平安的把數(shù)據(jù)轉(zhuǎn)

移到UNIX上來。

SYBASE:開發(fā)時間較長,升級較困難,穩(wěn)定性較好,數(shù)據(jù)平安有保障。風險小。在平安

要求極高的銀行,證券行業(yè)中得到了廣泛的應用。DB2:在巨型企業(yè)得到廣泛的應用,向

下兼容性好。風險小。INFORMIX:開發(fā)時間較長,升級較困難,穩(wěn)定性較好,數(shù)據(jù)平安

有保障。風險小。在平安要求極高的銀行,證券行業(yè)中得到了廣泛的應用。6)開放性SQL

Server:只能在Windows上運行,C/S結(jié)構(gòu),只支持Windows客戶,可以用

ADO,DAO,OLEDB,ODBC連接。Windows9X系列產(chǎn)品是偏重于桌面應用,NTserver適合各

種大中小型企業(yè)。操作系統(tǒng)的穩(wěn)定對數(shù)據(jù)庫是特殊重要的。Windows平臺的牢靠性,平安

性經(jīng)過了最高級別的C2認證的。在處理大數(shù)據(jù)量的關(guān)鍵業(yè)務時供應了較好的性能。

Oracle:能在全部主流平臺上運行(包括Windows)o完全支持全部的工業(yè)標準。接受完全

開放策略。多層次網(wǎng)絡計算,支持多種工業(yè)標準,可以用ODBCJDBCQCI等網(wǎng)絡客戶連接。

可以使客戶選擇最適合的解決方案。對開發(fā)商全力支持。SYBASE:能在全部主流平臺上

運行,在銀行業(yè)中得到了廣泛的應用。DB2:有較好的開放性,最適于海量數(shù)據(jù)??缙脚_,

多層結(jié)構(gòu),支持ODBC,JDBC等客戶。在大型的國際企業(yè)中得到最為廣泛的應用,在全球的

500家最大的企業(yè)中,大部分接受DB2數(shù)據(jù)庫服務器。1INFORMIX:僅運行在UNIX平臺,

包括SUNOS、HPUX、ALFAOSF/lo在銀行中得到廣泛的應用。7)易維護性和價格SQL

Server:從易維護性和價格上SQLServer明顯占有優(yōu)勢?;贛icrosoft的一貫風格,SQL

Server的圖形管理界面帶來了明顯的易用性,微軟的數(shù)據(jù)庫管理員培訓進行的比較充分,

可以輕松的找到很好的數(shù)據(jù)庫管理員,數(shù)據(jù)庫管理費用比較低,SQLServer的價格也是很低

的,但是在License的購買上會抬高價格??傮w來說SQLServer的價格在商用數(shù)據(jù)庫中是最

低的。Oracle:從易維護性和價格上來說Oracle的價格是比較高的,管理比較困難,由于

Oracle的應用很廣泛,閱歷豐富的Oracle數(shù)據(jù)庫管理員可以比較簡潔的找到,從而實現(xiàn)Oracle

的良好管理。因此Oracle的性能價格比在商用數(shù)據(jù)庫中是最好的。SYBASE:SYBASE的

價格是比較低的,但是SYBASE的在企業(yè)和政府中的應用較少,很難找到閱歷豐富的管理

員,運行管理費用較高。

DB2:價格高,管理員少,在中國的應用較少,運行管理費用都很高,適用于大型企業(yè)的數(shù)

據(jù)倉庫應用。INFORMIX:價格在這些系統(tǒng)中居于中間,與SYBASE一樣,在企業(yè)和政府

中應用較少,僅在銀行中得

到了廣泛的應用。閱歷豐富的管理人員較少,運行管理費用高。8)數(shù)據(jù)庫二次開發(fā)SQL

Server:數(shù)據(jù)庫的二次開發(fā)工具許多,包括VisualC++,VisualBasic等開發(fā)工具,可以實現(xiàn)很

好的Windows應用,開發(fā)簡潔。Oracle:數(shù)據(jù)庫的二次開發(fā)工具許多,涵蓋了數(shù)據(jù)庫開發(fā)的

各個階段,開發(fā)簡潔。SYBASE:開發(fā)工具較少,閱歷豐富的人員很少。DB2:在國外巨型

企業(yè)得到廣泛的應用,中國的閱歷豐富的人員很少。INFORMIX:在銀行業(yè)中得到廣泛的應

用,但是在中國的閱歷豐富的人員很少。

8.存儲過程和函數(shù)的區(qū)分

解答:

從參數(shù)的返回狀況來看:

假如返回多個參數(shù)值最好運用存儲過程,假如只有一個返回值的話可以運用函數(shù)。

從調(diào)用狀況來看:

假如在SQL語句(DML或SELECT)中調(diào)用的話確定是存儲函數(shù)或存儲的封裝函數(shù)不行以

是存儲過程,但調(diào)用存儲函數(shù)的時候還有好多限制以及函數(shù)的純度等級的問題,假如是在過

程化語句中調(diào)用的話,就要看你要實現(xiàn)什么樣的功能。函數(shù)一般狀況下是用來計算并返回一

個計算結(jié)果而存儲過程一般是用來完成特定的數(shù)據(jù)操作(比如修改、插入數(shù)據(jù)庫表或執(zhí)行某

些DDL語句等等),所以雖然他們的語法上很相像但用戶在運用他們的時候所須要完成的

功能大部分狀況下是不同的。

9.試述數(shù)據(jù)庫完整愛惜的主要任務和措施。

解答:數(shù)據(jù)庫的完整性愛惜也就是數(shù)據(jù)庫中數(shù)據(jù)正確性的維護。數(shù)據(jù)庫完整性包括三個內(nèi)容:

實體完整性規(guī)則,參照物完整性規(guī)則以及用戶定義完整性規(guī)則。前兩個是有DBMS自動處

理。

實體完整性規(guī)則是說針對于基表中的關(guān)鍵字中屬性值不能為空值,是數(shù)據(jù)庫完整性的基本要

求,主關(guān)鍵字和元組的唯一性對應。

參照物完整性規(guī)則是不允許引用不存在的元組:即基表中的外關(guān)鍵字要么為空,要么關(guān)聯(lián)基

表中必存在元組。

用戶定義完整性規(guī)則針對詳細的數(shù)據(jù)環(huán)境由用戶詳細設(shè)置的規(guī)則,它反應了詳細應用中的語

義要求。一個完整性規(guī)則一般由下面三部分組成:完整性約束條件設(shè)置,完整性約束條件的檢

查以及完整性約束條件的處理.后兩部分在數(shù)據(jù)庫中一般有相應的模塊處理。另外觸發(fā)器也

可以做完整性的愛惜,但觸發(fā)器大量用于主動性領(lǐng)域。

10.請說明SQLServer中deletefromtablea&truncatetabletablea的區(qū)分

解答:兩者都可以用來刪除表中全部的記錄。區(qū)分在于:truncate是DDL操作,它移動HWK,

使HWK值為0,不須要rollbacksegment.而Delete是DML操作須要rollbacksegment且花

費較長時間.

11.Oracle安裝完成后,如何用叮囑行啟動和關(guān)閉數(shù)據(jù)庫?

解答:

打開:STARTUP[FORCE][RESTRICT][PFILE=filename][OPEN[RECOVER][database]|

MOUNT|NOMOUNT]STARTUPOPEN:STARTUP缺省的參數(shù)就是OPEN,打開數(shù)據(jù)庫,

允許數(shù)據(jù)庫的訪問。當前實例的限制文件中所描述的全部文件都已經(jīng)打開。STARTUP

MOUNT:MOUNT數(shù)據(jù)庫,僅僅給DBA進行管理操作,不允許數(shù)據(jù)庫的用戶訪問。僅僅

只是當前實例的限制文件被打開,數(shù)據(jù)文件未打開。STARTUPNOMOUNT:僅僅通過初

始化文件,支配出SGA區(qū),啟動數(shù)據(jù)庫后臺進程,沒有打開限制文件和數(shù)據(jù)文件。不能訪

問任何數(shù)據(jù)庫。STARTUPPFILE=filename:以filename為初始化文件啟動數(shù)據(jù)庫,不是接

受缺省初始化文件。STARTUPFORCE:中止當前數(shù)據(jù)庫的運行,并起先重新正常的啟動

數(shù)據(jù)庫。STARTUPRESTRICT:只允許具有RESTRICTEDSESSION權(quán)限的用戶訪問數(shù)據(jù)

庫。STARTUPRECOVER:數(shù)據(jù)庫啟動,并起先介質(zhì)復原

關(guān)閉

SHUTDOWN有四個參數(shù):NORMAL、TRANSACTIONAL>IMMEDIATE,ABORT,缺省

不帶任何參數(shù)時表示是NORMAL0

叮囑SHUTDOWNNORMAL:不允許新的連接、等待會話結(jié)束、等待事務結(jié)束、做一個檢

查點并關(guān)閉數(shù)據(jù)文件。啟動時不須要實例復原。SHUTDOWNTRANSACTIONAL:不允許

新的連接、不等待會話結(jié)束、等待事務結(jié)束、做一個檢查點并關(guān)閉數(shù)據(jù)文件。啟動時不須要

實例復原。SHUTDOWNIMMEDIATE:不允許新的連接、不等待會話結(jié)束、不等待事務

結(jié)束、做一個檢查點并關(guān)閉數(shù)據(jù)文件。沒有結(jié)束的事務是自動rollback的。啟動時不須要實

例復原。SHUTDOWNABORT:不允許新的連接、不等待會話結(jié)束、不等待事務結(jié)束、不

做檢查點且沒有關(guān)閉數(shù)據(jù)文件。啟動時自動進行實例復原。另外,對于NORMAL>

TRANSACTIONAL,IMMEDIATE,DBBufferCache的內(nèi)容寫入了數(shù)據(jù)文件,沒有提交的

事務被回滾,全部的資源被釋放,數(shù)據(jù)庫被“干凈”的關(guān)閉。對于ABORT,DBBufferCache

的內(nèi)容沒有寫入數(shù)據(jù)文件,沒有提交的事務也沒有回滾.數(shù)據(jù)庫沒有dismount和關(guān)閉,數(shù)

據(jù)文件也沒有關(guān)閉。當數(shù)據(jù)庫啟動時,須要通過redolog復原數(shù)據(jù),通過回滾

段對事務回滾,對資源進行釋放。

12.類有哪三個基本特性?各特性的優(yōu)點?

解答:類具有封裝性、繼承性和多態(tài)性。

封裝性:類的封裝性為類的成員供應公有、缺省、愛惜和私有等多級訪問權(quán)限,目的是隱藏

類中的私有變量和類中方法的實現(xiàn)微小環(huán)節(jié)。

繼承性:類的繼承性供應從已存在的類創(chuàng)建新類的機制,繼承(inheritance)使一個新類自

動擁有被繼承類(父類)的全部可繼承的成員。

多態(tài)性:類的多態(tài)性供應類中方法執(zhí)行的多樣性,多態(tài)性有兩種表現(xiàn)形式:重載和覆蓋。

13.談談對XML的理解?說明Web應用中Web.xml文件的作用?

解答:XML(ExtensibleMarkupLanguage)即可擴展標記語言,它與HTML一樣,都是

SGML(StandardGeneralizedMarkupLanguage,標準通用標記語言)。Xml是Internet環(huán)境中跨

平臺的,依靠于內(nèi)容的技術(shù),是當前處理結(jié)構(gòu)化文檔信息的有力工具。擴展標記語言XML

是一種簡潔的數(shù)據(jù)存儲語言,運用一系列簡潔的標記描述數(shù)據(jù),而這些標記可以用便利的方

式建立,雖然XML占用的空間比二進制數(shù)據(jù)要占用更多的空間,但XML極其簡潔易于駕

馭和運用。

web.xml的作用是配置歡迎頁,servlet,filter,listener等的。

14.jsp有哪些內(nèi)置對象?作用分別是什么?(至少三個)

解答:

□request表示ServletRequest對象。它包含了有關(guān)閱讀器請求的信息,并且供應了幾個

用于獲得cookie,header和session數(shù)據(jù)的有用的方法。2)response表示ServletResponse

對象,并供應了幾個用于設(shè)置送回閱讀器的響應的方法(如cookies,頭信息等)。3)out

對象是javax.jsp.JspWriler的一個實例,并供應了幾個方法使你能用于向閱讀器回送輸出結(jié)

果。4)pageContext表示一個javax.servlet.jsp.PageContext對象。它是用于便利存取各種范

圍的名字空間、servlet相關(guān)的對象的API,并且包裝了通用的servlet相關(guān)功能的方法。5)

session表示一個請求的javax.servlet..Session對象。Session可以存貯用戶的狀態(tài)信

息。6)application表示一個javax.servle.ServletContext對象。這有助于查找有關(guān)servlet引

擎和servlet環(huán)境的信息。7)config表示一個javax.servlet.ServletConfig對象。該對象用于

存取servlet實例的初始化參

數(shù)。8)page表示從該頁面產(chǎn)生的一個servlet實例。

9)exception針對錯誤網(wǎng)頁,未捕獲的例外

15.事務是什么?有哪些屬性,并簡要說明這些屬性的含義。

解答:事務(Transaction)是訪問并可能更新數(shù)據(jù)庫中各種數(shù)據(jù)項的一個程序執(zhí)行單元(unit)。

事務通常由高級數(shù)據(jù)庫操縱語言或編程語言(如SQL,C++或Java)書寫的用戶程序的執(zhí)行

所引起,并用形如begintransaction和endtransaction語句(或函數(shù)調(diào)用)來界定。事務由事

務起先(begintransaction)和事務結(jié)束(endtransaction)之間執(zhí)行的全體操作組成。

事務應當具有4個屬性:原子性、一樣性、隔離性、持續(xù)性。這四個屬性通常稱為ACID特

性。

原子性(atomicity),一個事務是一個不行分割的工作單位,事務中包括的諸操作要么都做,

要么都不做。

一樣性(consistency)。事務必需是使數(shù)據(jù)庫從一個一樣性狀態(tài)變到另一個一樣性狀態(tài)。一

樣性與原子性是密切相關(guān)的。

隔離性(isolation),一個事務的執(zhí)行不能被其他事務干擾。即一個事務內(nèi)部的操作及運用的

數(shù)據(jù)對并發(fā)的其他事務是隔離的,并發(fā)執(zhí)行的各個事務之間不能相互干擾。

許久性(durability)?持續(xù)性也稱永久性(permanence),指一個事務一旦提交,它對數(shù)據(jù)庫

中數(shù)據(jù)的變更就應當是永久性的。接下來的其他操作或故障不應當對其有任何影響。

16、Collection和Collections的區(qū)分?

解答:Collection是java.util下的接口,它是各種集合的父接口,繼承于它的接口主要有Set

和List;Collections是個java.util下的類,是針對集合的幫助類,供應一系列靜態(tài)方法實現(xiàn)

對各種集合的搜尋、排序、線程平安化等操作。

17、HashMap與TreeMap的區(qū)分?

解答:HashMap通過hashcode對其內(nèi)容進行快速查找,而TreeMap中全部的元素都保持著

某種固定的依次,假如你須要得到一個有序的結(jié)果你就應當運用TreeMap(HashMap中元素

的排列依次是不固定的)。

18、ArrayList和Vector的區(qū)分?

解答:同步性:Vector是線程平安的,也就是說是同步的,而ArrayList是線程擔憂全的,不

是同步的;數(shù)據(jù)增長:當須要增長時,Vector默認增長為原來一培,而ArrayList卻是原來的一

半。

19、HashMap和Hashtable的區(qū)分?

解答:HashM叩是Hashtable的輕量級實現(xiàn)(非線程平安的實現(xiàn)),他們都實現(xiàn)了Map接口,

主要區(qū)分

在于HashMap允許空(null)鍵值(key),由于非線程平安,效率上高于Hashtable..HashMap

允許將null作為一個entry的key或者value,而Hashtable不允許。HashMap把Hashlable

的contains方法去掉了,改成containsvalue和containsKey?因為contains方法簡潔讓人引起

誤會。Hashlable繼承自Dictionary類,而HashMap是Javal.2引進的Mapinterface的一個實

現(xiàn)。最大的不同是,Hastable的方法是synchronize的,而HashMap不是,在多個線程訪問

Hashlable時,不須要自己為它的方法實現(xiàn)同步,而HashMap就必需為之供應同步。

20.請說出ArrayList,Vector,LinkedList的存儲性能和特性

解答:ArrayList和Vector都是運用數(shù)組方式存儲數(shù)據(jù),此數(shù)組元素數(shù)大于實際存儲的數(shù)據(jù)

以便增加和插入元素,它們都允許干脆按序號索引元素,但是插入元素要涉及數(shù)組元素移動

等內(nèi)存操作,所以索引數(shù)據(jù)快而插入數(shù)據(jù)慢,Vector由于運用了synchronized方法(線程平

安),通常性能上較ArrayList差,而LinkedList運用雙向鏈表實現(xiàn)存儲,按序號索引數(shù)據(jù)須

要進行前向或后向遍歷,但是插入數(shù)據(jù)時只須要記錄本項的前后項即可,所以插入速度較快。

21.描述J2EE框架的多層結(jié)構(gòu),并簡要說明各層的作用。

解答:

1)Presenlationlayer(表示層)

a.表示邏輯(生成界面代碼)

b.接收請求

c.處理業(yè)務層拋出的異樣

d.負責規(guī)則驗證(數(shù)據(jù)格式,數(shù)據(jù)非空等)

e.流程限制

2)Servicelayer(服務層/業(yè)務層)

a.封裝業(yè)務邏輯處理,并且對外暴露接口

b.負責事務,平安等服務

3)Persistencelayer(許久層)

a封裝數(shù)據(jù)訪問的邏輯,暴露接口

b.供應便利的數(shù)據(jù)訪問的方案(查詢語言,API,映射機制等)

4)Domainlayer(域?qū)樱?/p>

a.業(yè)務對象以及業(yè)務關(guān)系的表示

b.處理簡潔的業(yè)務邏輯

c.域?qū)拥膶ο罂梢源┰奖硎緦?,業(yè)務層,許久層

軟件分層結(jié)構(gòu)使得代碼維護特殊便利,設(shè)計明確,各層獨立,專注自己擅長的領(lǐng)域。

22.請談談對SOA的相識。

解答:面對服務的體系結(jié)構(gòu)(Service-OrienledArchitecture,SOA)是一個組件模型,它將應

用程序的不同功能單元(稱為服務)通過這些服務之間定義良好的接口和契約聯(lián)系起來。接

口是接受中立的方式進行定義的,它應當獨立于實現(xiàn)服務的硬件平臺、操作系統(tǒng)和編程語言。

這使得構(gòu)建在各種這樣的系統(tǒng)中的服務可以一種統(tǒng)一和通用的方式進行交互。

23.簡要描述如何結(jié)合struts、hibernate、spring開發(fā)Web應用?

解答:Struts可以將jsp頁面的表單關(guān)聯(lián)起來,就是把JSP頁面的表單數(shù)據(jù)封裝成javaBean,

這樣的話,在action中你再也不須要運用傳統(tǒng)的request.getParameter("name");還有struts有

一個限制器,你在struts編程中的限制器(XxxAction)都是繼承總的ActionServlet,它能集中處

理請求,然后轉(zhuǎn)到相關(guān)的頁面。還有struts的表單驗證組件,不用你寫js驗證了,只須要你配置

一下文件就可以了。另外struts的令牌機制可以防表單重復提交。

Spring是一個輕量級容器,非侵入性.包含依靠注入,AOP等。它是為了解決企業(yè)應用程序開

發(fā)困難性而創(chuàng)建的??蚣艿闹饕獌?yōu)勢之一就是其分層架構(gòu),分層架構(gòu)允許您選擇運用哪一個

組件,同時為J2EE應用程序開發(fā)供應集成的框架。

Hibernate:它可以讓我們以00的方式操作數(shù)據(jù)庫,這讓我們看到了hibernate的強大之處,

體驗到操作數(shù)據(jù)的便利。但hibernate最刺眼之處是hibernate的緩存機制,而不是以00的

方式操作數(shù)據(jù)庫。Hibernate的緩存機制不外乎是一級緩存session,二級緩存sessionFactory,

和第三方緩存如ehcache。也就是hibernate的最強大的地方是它的緩存,理解了這個才能真

正的理解hibernate,Hibernate的命名查詢/命名參數(shù)查詢,就是將hql語句放在一個單獨的xml

文件之中,它照舊讓人們以面對對象的方式去操縱數(shù)據(jù),而不用在以00的方式寫著代碼的

同時,然后再轉(zhuǎn)變思維,用面對關(guān)系的方式去寫那些sql語句。但hibernate不僅做了這些,

它的nativesql查詢方式,完全滿足sql語句的偏愛者,它像ibatis一樣,將sql語句放在配

置文件之中。

24.說明反轉(zhuǎn)限制(I0C)和面對方向編程(A0P)在spring中的應用

解答:Spring核心容器(Core)供應Spring框架的基本功能。核心容器的主要組件是

BeanFactory,它是工廠模式的實現(xiàn)。BeanFactory運用限制反轉(zhuǎn)(loc)模式將應用程序的配

置和依靠性規(guī)范與實際的應用代碼程序分開。Spring的聲明式事務基于AOP實現(xiàn),卻并不

須要程序開發(fā)者成為AOP專家,亦可輕易運用Spring的聲明式事務管理。

25.請看如下片段:

<setname="address”

lazy="true”

inverse="false”

cascade=aall-delete-orphan>

<keycolumn="USERID"></key>

<one-to-manyclass=ucom.norteksoft.erm.model.Address/>

</set>

說明lazy、inverse、cascade以及all-delete-orphan屬性的含義;并給出示例代碼,說明在如

下組合狀況下,對于save、update>delete一對多關(guān)系中的一方對象操作時的區(qū)分:

inverse

cascade

true

ail-delete-orphan

false

all-delete-orphan

true

all

false

all

true

none

false

none

解答:

(一)lazy:延遲加載

Lazy的有效期:只有在session打開的時候才有效;session關(guān)閉后lazy就沒效了。

lazy策略可以用在:

a.<class>標簽上:可以取值true/false

b.〈property〉標簽上,可以取值true/false,這個特性須要類增加

c.<set>/<list>等集合上,可以取值為true/false/extra

d.<one-to-one>/<many-to-one>等標簽上,可以取值false/proxy/no-proxy

1)get和load的區(qū)分:

a.get不支持延遲加載,而load支持。

b.當查詢特定的數(shù)據(jù)庫中不存在的數(shù)據(jù)時,get會返回null,而load則拋出異樣。

2)類(Class)的延遲加載:

a.設(shè)置<class>標簽中的lazy="true",或是保持默認(即不配置lazy屬性)

b.假如lazy的屬性值為true,那么在運用load方法加載數(shù)據(jù)時,只有確好用到數(shù)據(jù)的時候

才會發(fā)

出sql語句;這樣有可能削減系統(tǒng)的開銷。

3)集合(collection)的延遲加載:可以取值true,false,extra

a.true:默認取值,它的意思是只有在調(diào)用這個集合獲得里面的元素對象時,才發(fā)出查詢語句,

加載其集合元素的數(shù)據(jù)

b.false:取消懶加載特性,即在加載對象的同時,就發(fā)出其次條查詢語句加載其關(guān)聯(lián)集合的數(shù)

據(jù)

c.extra:一種比較聰慧的懶加載策略,即調(diào)用集合的size/contains等方法的時候,hibernate并

不會去加載整個集合的數(shù)據(jù),而是發(fā)出一條聰慧的SQL語句,以便獲得須要的值,只有在

真正須要用到這些集合元素對象數(shù)據(jù)的時候,才去發(fā)出查詢語句加載全部對象的數(shù)據(jù)

4)Hibernate單端關(guān)聯(lián)懶加載策略:即在<one-to-one>/<many-to-one>標簽上可以配置

懶加載策略??梢匀≈禐椋篺alse/proxy/no-proxy

a.false:取消懶加載策略,即在加載對象的同時,發(fā)出查詢語句,加載其關(guān)聯(lián)對象

xy:這是hibernate對單端關(guān)聯(lián)的默認懶加載策略,即只有在調(diào)用到其關(guān)聯(lián)對象的方法的

時候才真正發(fā)出查詢語句查詢其對象數(shù)據(jù),其關(guān)聯(lián)對象是代理類

c.no-proxy:這種懶加載特性須要對類進行增加,運用no-proxy,其關(guān)聯(lián)對象不是代理類

留意:在class標簽上配置的lazy屬性不會影響到關(guān)聯(lián)對象!!!

(二)inverse

inverse是指的關(guān)聯(lián)關(guān)系的限制方向,inverse=false的side(side其實是指inverse=false所位

于的class元素)端有責任維護關(guān)系,而inverse—true端無須維護這些關(guān)系

(三)cascade

cascade指的是層級之間的連鎖操作。在定義關(guān)聯(lián)對象的映射時,運用cascade="all”,

cascade="save-update”,cascade="all-delete-orphanM或cascade="delete"

a.假如父對象被保存,全部的子對象會被傳遞到saveOrUpdate()方法去執(zhí)行(cascade="

save-update")

b.假如父對象被傳遞到update?;蛘遱aveOrUpdate。,全部的子對象會被傳遞到saveOrUpdate()

方法去執(zhí)行(cascade="save-update")

c.假如一個臨時的子對象被一個許久化的父對象引用了,它會被傳遞到saveOrUpdate。去執(zhí)

行(cascade="save-updateM)

d.假如父對象被刪除了,全部的子對象對被傳遞到delete。方法執(zhí)行(cascade^'delete")

e.假如臨時的子對象不再被許久化的父對象引用,什么都不會發(fā)生(必要時,程序應當明確

的刪除這個子對象),除非聲明白cascade^'all-delete-orphan”,在這種狀況下,成為“孤兒”

的子對象會被

刪除。

(四)save、update、delete一對多關(guān)系中的一方對象操作時的區(qū)分

1)當一方設(shè)置inverse=true時,全部由一方發(fā)出的操作都不會關(guān)聯(lián)到多方。

2)當一方設(shè)置inverse=false,cascade=all-delete-orphan時,將刪除不再和一方對象關(guān)聯(lián)的全部

多方對象。

3)當一方設(shè)置inverse=false,cascade=all時,當保存和刪除一方對象時,級聯(lián)保存和刪除全部

關(guān)聯(lián)的多方對象。

4)當一方設(shè)置inverse=false,cascade=none時,當對一方操作時,不級聯(lián)到關(guān)聯(lián)的多方對象。

26.簡潔說明什么是遞歸?什么狀況會運用?并運用java實現(xiàn)一個簡潔的遞歸程序。

解答:

1)遞歸做為一種算法在程序設(shè)計語言中廣泛應用.是指函數(shù)/過程/子程序在運行過程中干脆

或間接調(diào)用自身而產(chǎn)生的重入現(xiàn)象。

2)遞歸算法一般用于解決三類問題:

a.數(shù)據(jù)的定義是按遞歸定義的。(Fibonacci(斐波那契)函數(shù))

b.問題解法按遞歸算法實現(xiàn)。(回溯)

c.數(shù)據(jù)的結(jié)構(gòu)形式是按遞歸定義的。(樹的遍歷,圖的搜尋)

3).這是一個排列的例子,它所做的工作是將輸入的一個字符串中的全部元素進行排序并輸

出,例如:你給出的參數(shù)是"abc"則程序會輸出:abcacbbacbcacabcbaa.算法的出口在

于:1ow=high也就是現(xiàn)在給出的排列元素只有一個時。b.算法的靠近過程:先確

定排列的第一位元素,也就是循環(huán)中i所代表的元素,然后1。w+1起先削減排列元素,

如此下去,直到1ow=highpublicclassFoo{

publicstaticvoidmain(String[]args){

permute("abc");

}

publicstaticvoidpermute(Stringstr){

char[]strArray=str.toCharArrayO;

permute(strArray,0,strArray.length-1);

publicstaticvoidpermute(char[]list,intlow,inthigh){

inti;

if(low==high){

Stringcout="”;

for(i=0;i<=high;i++)

cout+=listfi];

System.out.println(cout);

}else{

for(i=low;i<=high;i++){

chartemp=list[low];

list[low]=listfi];

list[i]=temp;

permute(list,low+1,high);

temp=list[low];

list[low]=list[i];

listfi]=temp;

27.列出自己常用的jdk包.

解答:JDK常用的package

java.lang:這個是系統(tǒng)的基礎(chǔ)類,比如String等都是這里面的,這個package是唯個可

以不用import就可以運用的Package

java.io:這里面是全部輸入輸出有關(guān)的類,比如文件操作等

:這里面是與網(wǎng)絡有關(guān)的類,比如URL,URLConnection等。

java.util:這個是系統(tǒng)幫助類,特殊是集合類Collection,List,Map等。

java.sql:這個是數(shù)據(jù)庫操作的類,Connection,Statememt,ResultSet等

28.列出自己常用的jdk中的數(shù)據(jù)結(jié)構(gòu)

解答:線性表,鏈表,哈希表是常用的數(shù)據(jù)結(jié)構(gòu)。

29.List、M叩、Set三個接口存儲元素時各有什么特點?

解答:

1)List是有序的Collection,運用此接口能夠精確的限制每個元素插入的位置。用戶能夠運

用索引(元素在List中的位置,類似于數(shù)組下標)來訪問List中的元素,這類似于Java的

數(shù)組。

2)Set是一種不包含重復的元素的Collection,即隨意的兩個元素el和e2都有

e1.equals(e2)=false,Set最多有一個null元素。

3)Map接口:請留意,Map沒有繼承Collection接口,Map供應key到value的映射

30.簡述基于Struts框架Web應用的工作流程

解答:在web應用啟動時就會加載初始化ActionServlet,ActionServlet從struts-config.xml文

件中讀取配置信息,把它們存放到各種配置對象中,當ActionServlet接收到一個客戶請求時,

將執(zhí)行如下流程.1)檢索和用戶請求匹配的ActionMapping實例,假如不存在,就返回請求路徑

無效信息;2)假如ActionForm實例不存在,就創(chuàng)建一個ActionForm對象,把客戶提交的表單數(shù)

據(jù)保存到ActionForm對象中;3)依據(jù)配置信息確定是否須要表單驗證.假如須要驗證,就調(diào)用

ActionForm的validate。方法;4)假如ActionForm的validate。方法返回null或返回一個不包

含ActionMessage的ActionErrors對象,就表示表單驗證成功;5)ActionServlet依據(jù)

ActionMapping所包含的映射信息確定將請求轉(zhuǎn)發(fā)給哪個Action,假如相應的Action實例不存

在,就先創(chuàng)建這個實例,然后調(diào)用Action的execute。方法;6)Action的execute。方法返回一個

ActionForward對象,ActionServlet在把客戶請求轉(zhuǎn)發(fā)給ActionForward對象指向的JSP組件;

7)ActionForward對象指向JSP組件生成動態(tài)網(wǎng)頁,返回給客戶;

31.在項目中用過Spring的哪些方面?及用過哪些Ajax框架?

解答:在項目運用過SpringIOC,AOP,DAO,ORM,還有上下文環(huán)境。

在項目運用過Extjuery等Ajax框架.

32、abstractclass和interface有什么區(qū)分?

解答:聲明方法的存在而不去實現(xiàn)它的類被叫做抽象類(abstractclass),它用于要創(chuàng)建一個

體現(xiàn)某些基本行為的類,并為該類聲明方法,但不能在該類中實現(xiàn)該類的狀況。不能創(chuàng)建

abstract類的實例。然而可以創(chuàng)建一個變量,其類型是一個抽象類,并讓它指向詳細子類的

一個實例。不能有抽象構(gòu)造函數(shù)或抽象靜態(tài)方法。Abstract類的子類為它們父類中的全部抽

象方法供應實現(xiàn),否則它們也是抽象類。取而代之,在子類中實現(xiàn)該方法。知道其行為的其

它類可以在類中實現(xiàn)這些方法。接口(interface)是抽象類的變體。新型多繼承性可通過實

現(xiàn)這樣的接口而獲得。接口中的全部方法都是抽象的,全部成員變量都是publicstaticfinal

的。一個類可以實現(xiàn)多個接口,當類實現(xiàn)接口時,必需實現(xiàn)接口的全部方法。抽象類在Java

語言中表示的是一種單繼承的關(guān)系,對于interface來說則不然,并不要求interface的實現(xiàn)

者和interface定義在概念本質(zhì)上是一樣的,僅僅是實現(xiàn)了interface定義的契約而已。;抽象

類中可以定義自己的成員變量,也可以包含非抽象的方法,而在接口中只能有靜態(tài)的常量,

全部方法必需是抽象的;實現(xiàn)抽象類時可以只實現(xiàn)其中的部分方法,而要是實現(xiàn)一個接口的

話就必需實現(xiàn)這個接口中的全部抽象方法。

33.MVC模式中M,V,C每個代表意義,并簡述在Struts中MVC的表現(xiàn)方式。

解答:

MVC是Model-View-Controller的縮寫,Model代表的是應用的業(yè)務邏輯(通過JavaBean,

EJB組件實現(xiàn)),View是應用的表示層(由JSP頁面產(chǎn)生)Controller是通過應用的處理過

程限制,(一般是一個servert)通過這種設(shè)計模型把應用邏輯,處理過程和顯示邏輯分成不

同的組件實現(xiàn),這些組件可以進行交互和重用。

在Struts框架中Controller功能由ActionServlet和ActionMapping對象構(gòu)成,核心是一個

Servlet類型的對象ActionServlet,它用來接收客戶端的請求。ActionServlet包括一組基于配

置的ActionMapping對象,每個ActionMapping對象實現(xiàn)了一個請求到一個詳細的Model部

分的Action處理器對象之間的映射。Model部分由Action和ActionForm對象構(gòu)成。全部的

Action處理器對象都是開發(fā)者從Struts的Action類派生的子類。Action處理器對象封裝了詳

細的處理邏輯,調(diào)用業(yè)務邏輯模塊,并且把響應提交到合適的View組件以產(chǎn)生響應。Struts

供應的ActionForm組件對象可以通過定義屬性描述客戶端表單數(shù)據(jù),開發(fā)者可以從它派生

子類對象,并利用它和Struts供應的自定義標記庫相結(jié)合,可以實現(xiàn)對客戶端的表單數(shù)據(jù)的

良好封裝和支持,Action處理器對象可以干脆對它進行讀寫,而不再須要和request、response

對象進行數(shù)據(jù)交互。通過ActionForm組件對象實現(xiàn)了對View和Model之間交互的支持(View

部分是通過JSP技術(shù)實現(xiàn)的)。Struts供應了自定義的標記庫,通過這些自定義標記庫可以

特殊簡潔地和系統(tǒng)的Model部分交互,通過運用這些自定義標記庫創(chuàng)建的

JSP表單,可以實現(xiàn)對Model部分中的ActionForm的映射,完成對用戶數(shù)據(jù)的封裝。

34.java語言中public、private、protected三個關(guān)鍵字的用法,重寫和重載的區(qū)分。

解答:

作用域當前類同包子類其它

publicVVVVprotectedVVVXdefaultVVXXprivateVXXX

重寫:發(fā)生在父子類之間,方法名相同,參數(shù)的類型、個數(shù)、依次相同,返回值相同,訪問

權(quán)限不能更封閉,拋出異樣不能寬泛;

重載:發(fā)生在同一個類中,方法名相同,但是參數(shù)不同(類型不同或個數(shù)不同或參數(shù)的依次

不同),返回值可以不相同。

35.JSP頁面之間傳遞參數(shù)的方法有哪些?

解答:

1)request

2)session

3)application

4)提交表單

5)超鏈接

36.forward和redirect的區(qū)分

解答:forward是容器中限制權(quán)的轉(zhuǎn)向,是服務器請求資源,服務器干脆訪問目標地址的URL,

把那個URL的響應內(nèi)容讀取過來,然后把這些內(nèi)容再發(fā)給閱讀器,閱讀器根本不知道服務

器發(fā)送的內(nèi)容是從哪兒來的,所以它的地址欄中還是原來的地址。redirect就是服務端依據(jù)

邏輯,發(fā)送一個狀態(tài)碼,告知閱讀器重新去請求那個地址,一般來說閱讀器會用剛才請求的全

部參數(shù)重新請求,并且從閱讀器的地址欄中可以看到跳轉(zhuǎn)后的鏈接地址。前者更加高效,在

前者可以滿足須要時,盡量運用forward。方法,并且,這樣也有助于隱藏實際的鏈接;在

有些狀況下,比如,須要跳轉(zhuǎn)到一個其它服務器上的資源,則必需運用sendRedirect。方法。

37.Java反射機制的作用?

解答:Java反射機制的作用是:

1)在運行時推斷隨意一個對象所屬的類。

2)在運行時構(gòu)造隨意一個類的對象。

3)在運行時推斷隨意一個類所具有的成員變量和方法。

4)在運行時調(diào)用隨意一個對象的方法

38.你是怎么理解java的泛型的?

解答:在JavaSE1.5之前,沒有泛型的狀況的下,通過對類型Object的引用來實現(xiàn)參數(shù)的

“隨意化”,“隨意化”帶來的缺點是要做顯式的強制類型轉(zhuǎn)換,而這種轉(zhuǎn)換是要求開發(fā)者對

實際參數(shù)類型可以預知的狀況下進行的。對于強制類型轉(zhuǎn)換錯誤的狀況,編譯器可能不提示

錯誤,在運行的時候才出現(xiàn)異樣,這是一個平安隱患。

泛型是JavaSE1.5的新特性,泛型的本質(zhì)是參數(shù)化類型,也就是說所操作的數(shù)據(jù)類型被指

定為一個參數(shù)。這種參數(shù)類型可以用在類、接口和方法的創(chuàng)建中,分別稱為泛型類、泛型接

口、泛型方法。

泛型的好處是在編譯的時候檢查類型平安,并且全部的強制轉(zhuǎn)換都是自動和隱式的,提高代

碼的重用率。

39.JAVA源文件中是否可以包括多個類,有什么限制

解答:一個java源文件中可以包含多個類,每個源文件中至多有一個public類,假如有的

話,那么源文件的名字必需與之相同。假如源文件中沒有public類,則源文件用什么名字都

可以,但最好還是具有特定的意義,免得自己都不記得里面寫的是什么了。

40.在一個千萬級的數(shù)據(jù)庫查尋中,如何提高查詢效率?分別說出在數(shù)據(jù)庫設(shè)計、SQL語

句、java等層面的解決方案。

解答:

1)數(shù)據(jù)庫設(shè)計方面:

a.對查詢進行優(yōu)化,應盡量避開全表掃描,首先應考慮在where及orderby涉及的列上建

立索引。

b.應盡量避開在where子句中對字段進行null值推斷,否則將導致引擎放棄運用索引而

進行全表掃描,如:selectidfromtwherenumisnull可以在num上設(shè)置默認值0,確保表

中num列沒有null值,然后這樣查詢:selectidfromtwherenum=0

c.并不是全部索引對查詢都有效,SQL是依據(jù)表中數(shù)據(jù)來進行查詢優(yōu)化的,當索引列有大

量數(shù)據(jù)重復時,查詢可能不會去利用索引,如一表中有字段sex,male、female幾乎各一半,

那么即使在sex上建了索引也對查詢效率起不了作用。

d.索引并不是越多越好,索引當然可以提高相應的select的效率,但同時也降低了insert

及叩date的效率,因為insert或update時有可能會重建索引,所以怎樣建索引須要慎重

考慮,視詳細狀況而定。一個表的索引數(shù)最好不要超過6個,若太多則應考慮一些不常運用

到的列上建的索引是否有必要。

e.應盡可能的避開更新索引數(shù)據(jù)列,因為索引數(shù)據(jù)列的依次就是表記錄的物理存儲依次,

一旦該列值變更將導致整個表記錄的依次的調(diào)整,會耗費相當大的資源。若應用系統(tǒng)須要頻

繁更新索引數(shù)據(jù)列,那么須要考慮是否應將該索引建為索引。

f.盡量運用數(shù)字型字段,若只含數(shù)值信息的字段盡量不要設(shè)計為字符型,這會降低查詢和

連接的性能,并會增加存儲開銷。這是因為引擎在處理查詢和連接時會逐個比較字符串中每

一個字符,而對于數(shù)字型而言只須要比較一次就夠了。

g.盡可能的運用varchar/nvarchar代替char/nchar,因為首先變長字段存儲空間小,可以

節(jié)約存儲空間,其次對于查詢來說,在一個相對較小的字段內(nèi)搜尋效率明顯要高些。

h.盡量運用表變量來代替臨時表。假如表變量包含大量數(shù)據(jù),請留意索引特殊有限(只有

主鍵索引)。

i.避開頻繁創(chuàng)建和刪除臨時表,以削減系統(tǒng)表資源的消耗。

j.臨時表并不是不行運用,適當?shù)剡\用它們可以使某些例程更有效,例如,當須要重復引用

大型表或常用表中的某個數(shù)據(jù)集時。但是,對于一次性事務,最好運用導出表。

k.在新建臨時表時,假如一次性插入數(shù)據(jù)量很大,那么可以運用selectinto代替create

table,避開造成大量log,以提高速度;假如數(shù)據(jù)量不大,為了緩和系統(tǒng)表的資源,應先

createtable,然后insert。

1.假如運用到了臨時表,在存儲過程的最終務必將全部的臨時表顯式刪除,先truncate

table,然后droptable,這樣可以避開系統(tǒng)表的較長時間鎖定。

2)SQL語句方面:

a.應盡量避開在where子句中運用!=或<>操作符,否則將引擎放棄運用索引而進行全表掃

描。

b.應盡量避開在where子句中運用or來連接條件,否則將導致引擎放棄運用索引而進行

全表掃描,如:selectidfromlwherenum=10ornum=20可以這樣查詢:selectidfromI

wherenum=10unionallselectidfromtwherenum=20

c.in和notin也要慎用,否則會導致全表掃描,如:selectidfromtwherenumin(1,2,3)對

于連續(xù)的數(shù)值,能用between就不要用in了:selectidfromtwherenumbetween1and3

d,下面的查詢也將導致全表掃描:selectidfromtwherenamelike'%abc%'

e.假如在where子句中運用參數(shù),也會導致全表掃描。因為SQL只有在運行時才會解析局

部變量,但優(yōu)化程序不能將訪問支配的選擇推遲到運行時;它必需在編譯時進行選擇。然而,

假如在編譯時建立訪問支配,變量的值還是未知的,因而無法作為索引選擇的輸入項。如下

面語句將進行全表掃描:selectidfromtwherenum=@num可以改為強制查詢運用索引:

selectidfromtwith(index(索弓|名))wherenum=@num

f.應盡量避開在where子句中對字段進行表達式操作,這將導致引擎放棄運用索引而進行

全表掃描。如:selectidfromtwherenum/2=100應改為:selectidfromtwherenum=100*2

g.應盡量避開在where子句中對字段進行函數(shù)操作,這將導致引擎放棄運用索引而進行全

表掃描。如:selectidfromtwheresubstring(name,l,3)='abc'-name以abc開頭的idselect

idfromtwheredatediff(day,createdate,'2023-11-30z)=0-'2023-11-30'生成的id應改為:

selectidfromtwherenamelike'abc%'selectidfromtwherecreatedate>='2023-11-

溫馨提示

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

評論

0/150

提交評論