本篇內(nèi)容主要講解“Javaweb的面試題有哪些”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Javaweb的面試題有哪些”吧!
創(chuàng)新互聯(lián)建站致力于成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站,成都網(wǎng)站設(shè)計(jì),集團(tuán)網(wǎng)站建設(shè)等服務(wù)標(biāo)準(zhǔn)化,推過(guò)標(biāo)準(zhǔn)化降低中小企業(yè)的建站的成本,并持續(xù)提升建站的定制化服務(wù)水平進(jìn)行質(zhì)量交付,讓企業(yè)網(wǎng)站從市場(chǎng)競(jìng)爭(zhēng)中脫穎而出。 選擇創(chuàng)新互聯(lián)建站,就選擇了安全、穩(wěn)定、美觀的網(wǎng)站建設(shè)服務(wù)!
61,JDBC訪問(wèn)數(shù)據(jù)庫(kù)的基本步驟是什么?
1,加載驅(qū)動(dòng)
2,通過(guò)DriverManager對(duì)象獲取連接對(duì)象Connection
3,通過(guò)連接對(duì)象獲取會(huì)話
4,通過(guò)會(huì)話進(jìn)行數(shù)據(jù)的增刪改查,封裝對(duì)象
5,關(guān)閉資源
62,說(shuō)說(shuō)preparedStatement和Statement的區(qū)別
1,效率:預(yù)編譯會(huì)話比普通會(huì)話對(duì)象,數(shù)據(jù)庫(kù)系統(tǒng)不會(huì)對(duì)相同的sql語(yǔ)句不會(huì)再次編譯
2,安全性:可以有效的避免sql注入攻擊!sql注入攻擊就是從客戶端輸入一些非法的特殊字符,而使服務(wù)器端在構(gòu)造sql語(yǔ)句的時(shí)候仍然能夠正確構(gòu)造,從而收集程序和服務(wù)器的信息和數(shù)據(jù)。
比如:“select * from t_user where userName = ‘” + userName + “ ’ and password =’” + password + “’”
如果用戶名和密碼輸入的是’1’ or ‘1’=’1’ ; 則生產(chǎn)的sql語(yǔ)句是:
“select * from t_user where userName = ‘1’ or ‘1’ =’1’ and password =’1’ or ‘1’=’1’ 這個(gè)語(yǔ)句中的where 部分沒(méi)有起到對(duì)數(shù)據(jù)篩選的作用。
63,說(shuō)說(shuō)事務(wù)的概念,在JDBC編程中處理事務(wù)的步驟。
1 事務(wù)是作為單個(gè)邏輯工作單元執(zhí)行的一系列操作。
2,一個(gè)邏輯工作單元必須有四個(gè)屬性,稱為原子性、一致性、隔離性和持久性 (ACID) 屬性,只有這樣才能成為一個(gè)事務(wù)
事務(wù)處理步驟:
3,conn.setAutoComit(false);設(shè)置提交方式為手工提交
4,conn.commit()提交事務(wù)
5,出現(xiàn)異常,回滾 conn.rollback();
64,數(shù)據(jù)庫(kù)連接池的原理。為什么要使用連接池。
1,數(shù)據(jù)庫(kù)連接是一件費(fèi)時(shí)的操作,連接池可以使多個(gè)操作共享一個(gè)連接。
2,數(shù)據(jù)庫(kù)連接池的基本思想就是為數(shù)據(jù)庫(kù)連接建立一個(gè)“緩沖池”。預(yù)先在緩沖池中放入一定數(shù)量的連接,當(dāng)需要建立數(shù)據(jù)庫(kù)連接時(shí),只需從“緩沖池”中取出一個(gè),使用完畢之后再放回去。我們可以通過(guò)設(shè)定連接池最大連接數(shù)來(lái)防止系統(tǒng)無(wú)盡的與數(shù)據(jù)庫(kù)連接。更為重要的是我們可以通過(guò)連接池的管理機(jī)制監(jiān)視數(shù)據(jù)庫(kù)的連接的數(shù)量、使用情況,為系統(tǒng)開(kāi)發(fā),測(cè)試及性能調(diào)整提供依據(jù)。
3,使用連接池是為了提高對(duì)數(shù)據(jù)庫(kù)連接資源的管理
當(dāng)我們使用事務(wù)時(shí),有可能會(huì)出現(xiàn)這樣的情況,有一行數(shù)據(jù)剛更新,與此同時(shí)另一個(gè)查詢讀到了這個(gè)剛更新的值。這樣就導(dǎo)致了臟讀,因?yàn)楦碌臄?shù)據(jù)還沒(méi)有進(jìn)行持久化,更新這行數(shù)據(jù)的業(yè)務(wù)可能會(huì)進(jìn)行回滾,這樣這個(gè)數(shù)據(jù)就是無(wú)效的。數(shù)據(jù)庫(kù)的TRANSACTIONREADCOMMITTED,TRANSACTIONREPEATABLEREAD,和TRANSACTION_SERIALIZABLE隔離級(jí)別可以防止臟讀。
幻讀是指一個(gè)事務(wù)多次執(zhí)行一條查詢返回的卻是不同的值。假設(shè)一個(gè)事務(wù)正根據(jù)某個(gè)條件進(jìn)行數(shù)據(jù)查詢,然后另一個(gè)事務(wù)插入了一行滿足這個(gè)查詢條件的數(shù)據(jù)。之后這個(gè)事務(wù)再次執(zhí)行了這條查詢,返回的結(jié)果集中會(huì)包含剛插入的那條新數(shù)據(jù)。這行新數(shù)據(jù)被稱為幻行,而這種現(xiàn)象就叫做幻讀。
只有TRANSACTION_SERIALIZABLE隔離級(jí)別才能防止產(chǎn)生幻讀。
67,JDBC的DriverManager是用來(lái)做什么的?
JDBC的DriverManager是一個(gè)工廠類,我們通過(guò)它來(lái)創(chuàng)建數(shù)據(jù)庫(kù)連接。當(dāng)JDBC的Driver類被加載進(jìn)來(lái)時(shí),它會(huì)自己注冊(cè)到DriverManager類里面
然后我們會(huì)把數(shù)據(jù)庫(kù)配置信息傳成DriverManager.getConnection()方法,DriverManager會(huì)使用注冊(cè)到它里面的驅(qū)動(dòng)來(lái)獲取數(shù)據(jù)庫(kù)連接,并返回給調(diào)用的程序。
68,execute,executeQuery,executeUpdate的區(qū)別是什么?
1,Statement的execute(String query)方法用來(lái)執(zhí)行任意的SQL查詢,如果查詢的結(jié)果是一個(gè)ResultSet,這個(gè)方法就返回true。如果結(jié)果不是ResultSet,比如insert或者update查詢,它就會(huì)返回false。我們可以通過(guò)它的getResultSet方法來(lái)獲取ResultSet,或者通過(guò)getUpdateCount()方法來(lái)獲取更新的記錄條數(shù)。
2,Statement的executeQuery(String query)接口用來(lái)執(zhí)行select查詢,并且返回ResultSet。即使查詢不到記錄返回的ResultSet也不會(huì)為null。我們通常使用executeQuery來(lái)執(zhí)行查詢語(yǔ)句,這樣的話如果傳進(jìn)來(lái)的是insert或者update語(yǔ)句的話,它會(huì)拋出錯(cuò)誤信息為 “executeQuery method can not be used for update”的java.util.SQLException。 ,
3,Statement的executeUpdate(String query)方法用來(lái)執(zhí)行insert或者update/delete(DML)語(yǔ)句,或者 什么也不返回,對(duì)于DDL語(yǔ)句,返回值是int類型,如果是DML語(yǔ)句的話,它就是更新的條數(shù),如果是DDL的話,就返回0。
只有當(dāng)你不確定是什么語(yǔ)句的時(shí)候才應(yīng)該使用execute()方法,否則應(yīng)該使用executeQuery或者executeUpdate方法。
69,SQL查詢出來(lái)的結(jié)果分頁(yè)展示一般怎么做?
Oracle:
select * from
(select *,rownum as tempid from student ) t
where t.tempid between ” + pageSize*(pageNumber-1) + ” and ” + pageSize*pageNumber
MySQL:
select * from students limit ” + pageSize*(pageNumber-1) + “,” + pageSize;
sql server:
select top ” + pageSize + ” * from students where id not in +
(select top ” + pageSize * (pageNumber-1) + id from students order by id) +
“order by id;
70,JDBC的ResultSet是什么?
在查詢數(shù)據(jù)庫(kù)后會(huì)返回一個(gè)ResultSet,它就像是查詢結(jié)果集的一張數(shù)據(jù)表。
ResultSet對(duì)象維護(hù)了一個(gè)游標(biāo),指向當(dāng)前的數(shù)據(jù)行。開(kāi)始的時(shí)候這個(gè)游標(biāo)指向的是第一行。如果調(diào)用了ResultSet的next()方法游標(biāo)會(huì)下移一行,如果沒(méi)有更多的數(shù)據(jù)了,next()方法會(huì)返回false??梢栽趂or循環(huán)中用它來(lái)遍歷數(shù)據(jù)集。
默認(rèn)的ResultSet是不能更新的,游標(biāo)也只能往下移。也就是說(shuō)你只能從第一行到最后一行遍歷一遍。不過(guò)也可以創(chuàng)建可以回滾或者可更新的ResultSet
當(dāng)生成ResultSet的Statement對(duì)象要關(guān)閉或者重新執(zhí)行或是獲取下一個(gè)ResultSet的時(shí)候,ResultSet對(duì)象也會(huì)自動(dòng)關(guān)閉。
可以通過(guò)ResultSet的getter方法,傳入列名或者從1開(kāi)始的序號(hào)來(lái)獲取列數(shù)據(jù)。
到此,相信大家對(duì)“Javaweb的面試題有哪些”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!