Java核心技術及面試指南 JDBC部分的面試題總結以及答案


5.5.1 你最近的項目里用到的是哪個數據?或你用過哪些數據庫?或你對哪個數據庫最熟悉?

通過這個問題,我們將會確認候選人是否在項目里用過數據庫或JDBC。

5.5.2 你有沒有建過表?或修改表里的字段?或有沒有建過索引?

這個屬於基本的對數據庫的操作問題。

5.5.3 你有沒有存儲過程的使用經驗?如果要通過存儲過程的參數返回值,該怎么做?

我們在本章的5.1.6部分講過關於存儲過程的知識點,這里大家可以去了解下存儲過程的語法,不過大家更應當去了解存儲過程的優缺點,然后向面試官說明用到(或不用)存儲過程的原因。

第二需要確認候選人會基本的JDBC的操作,比如會創建連接,會通過Statement和PreparedStatement等對象執行增刪改查等操作,會進行批處理操作等,也列些常見的問題。

5.5.4說下你在項目里用到JDBC里的哪些對象?

5.5.5 說下通過JDBC的對象得到select的結果的流程,或說下用JDBC的對象執行增刪改操作的流程。

上述兩個問題是為了確認候選人確實用過JDBC,關於這方面,建議大家找個合適機會說出如下比較資深的知識點:我在用JDBC時,一般會用try…catch…finally的結構,在finally從句里,我會關閉數據庫對象,比如連接對象等,在catch從句里,我會做些針對性的操作,比如隔段時間重連或給出用戶能看明白的提示,而不是簡單地拋出異常了事。

5.5.6 Statement對象和PreparedStatement對象有什么差別?

通過PreparedStatement我們能執行批處理,而且通過PreparedStatement還能避免SQL注入。

5.5.7 在JDBC里如何進行批處理操作?在項目里一般批處理操作的數量一般是多少?

這方面的語法比較好描述,但請大家注意,每次批操作的數量不能太大,一般比如可以每1000條一處理。如果我們通過addBatch方法把太多的語句放入緩沖區,可能會把緩沖區撐爆掉,從而導致異常。

第三需要確認候選人掌握一些比較高級的技能,比如如何操作事務,是否有連接池的使用經驗等,這方面常見的問題如下。

5.5.8 什么是事務?你有沒有用到過事務?

大家可以去了解下事務的概念。也可以通過閱讀本章了解下在JDBC里使用事務的方法。此外,如果大家在項目里還用到過Spring來管理事務,也請把這部分的知識點說出來。

5.5.9 你是否知道事務隔離級別?JDBC里事務隔離級別有哪些?

這里大家可以先說下臟讀幻讀和不可重復讀的概念,再說在JDBC里如何通過相關的常量來設置事務隔離級別。

  建議大家再說下不合理地設置事務隔離級別會給項目帶來什么危害,比如會讓一個事務等待過長時間從而導致鎖表等嚴重情況,然后說下,比如你項目里是禁止臟讀和幻讀,那么在你項目里就需要實時監控數據庫,以防止鎖表等情況發生。

5.5.10 你是否知道連接池的概念?是否用過連接池?如果用過,用到的是哪種連接池?連接池的參數你是怎么設置的?

用連接池可以避免頻繁創建和釋放連接對象所帶來的性能損耗。本章提到的是C3P0連接池,而且也提到了一些常見參數,對於這個問題大家可以結合你的項目,參考本章的知識點綜合地整理出你的說辭。

第四方面是考察數據庫優化方面的技能。

5.5.11 你在項目里有沒有用過索引?用到的是哪種索引?

5.5.12 告訴我一種適合建索引的情況?或者告訴我在哪些場景下不適宜建索引?

5.5.13 當索引建好以后,請告訴我如何正確地使用索引,或者列舉些不能用到索引的做法?  在我們的另外一本書《Java Web輕量級開發面試教程》的相關章節里,講了這方面的問題,大家如果感興趣的話,可以閱讀相關內容。

5.5.14 這是個開放性的問題,說下你掌握的數據庫優化方面的技能。

在我們面試的過程中,發現大部分的候選人能較好地回答出前三方面基礎部分問題,但大多數的候選人卻無法說出關於性能優化的使用經驗。

其實這些候選人不是沒用過,而是沒想到或者是不會說,比如上文里提到的批處理算是一個優化技能點,連接池也是個優化點。大多數人一定用過,但即使是這些,面試時也很少有候選人能說出來。

換句話說,大家如果能整理出你用到過的優化技能,而且能在面試時條理清晰地說出來,你就能超越很多候選人。這里我們整理下關於數據庫優化的技能點。

1 索引方面,知道建索引的場合,知道哪些場景下不該建索引,知道建索引后該如何正確地使用。

2 SQL優化方面,知道如何通過執行計划查看SQL語句的代價,並能通過with等語句優化查詢語句。

3 會合理地使用批處理。

4 能合理地建表,建表時,如果表里數據量比較大,能通過添加冗余字段來防止多表關聯帶來的性能損耗。

5 知道使用數據表的監控工具,比如一旦某SQL語句運行超過2分鍾,能發警告郵件,發現連接數過多,也能發警告郵件,這樣就能知道哪些SQL需要優化。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM