我最近看到一本比較好的講java web方面面試的書,java web輕量級開發面試教程

其中不僅用案例和視訊講述了Spring MVC,Hibernate, ORM等方面的技巧,而且還實際講到了面試技巧。

如下部分是對資料庫面試方面的總結。

如果在面試或與資深人事交流的過程中,你能有效合理地展示出本章所給出的一些知識點,那麼對你的評價就會是“對資料庫有深入瞭解”,甚至能加上“有設計資料表的經驗”,即便你說有過3年商業專案資料庫操作的經驗,那麼別人也能相信。

相反,如果一個工作經驗滿3年的程式設計師或許動手程式設計能力不差,但無法在交流溝通過程中證明這點,或者乾脆不知道怎麼證明,那麼對他的評價往往可能是“資料庫層面,有過商業專案的經驗,但只會些基本的增刪改查(頂多再加上會檢視儲存過程等技術),無法獨立擔當資料庫方面的工作”。

下面列些資料庫方面的常見面試問題,大家可以以此來衡量一下對本章知識點的掌握程度。

問題1,你有沒有建表的經驗?建表時你是否會遵循三正規化?

設計資料表時,需要權衡資料冗餘和連線代價,詳細內容請參考2.1.3節你的描述。

問題2,你有過哪些資料庫的優化經驗?

大家可以說用過索引,具體的知識點可以參考2.3節。

問題3,請你敘述一下不應該建索引的場景。

問題4,like語句會不會走索引?

問題5,索引的結構是什麼?建索引會有什麼代價?我們應該如何權衡要不要建索引?

關於上述三個問題,代價可以參考2.3節的描述。

問題6,事務隔離級別有哪些級別?具體的髒讀,幻讀和不可重複讀的含義是什麼?

參考2.4.4節的描述。

問題7,Statement和PreparedStatement物件有什麼差別?

大家可以圍繞預處理和批處理這兩個角度來回答。

以下我們再列些資料庫方面比較高階的知識點,這些知識點需要靠專案經驗來沉澱,一般高階程式設計師能知道,而初學者或初級程式設計師未必知道,大家可以在面試時,找合適的機會說出來,這樣面試官一定會對你刮目相看。

知識點1,在資料庫程式設計時,儘量用try…catch…finally的程式碼結構,同時在finally裡放置釋放資料庫連線等資源的程式碼,因為如果我們不主動地關閉資料庫連線,這部分所佔用的記憶體是無法被垃圾回收器(GC)主動回收的。

知識點2,為了提升資料庫操作的效能,我會用到PreparedStatement來進行批處理操作,但每批執行的SQL語句的數量不能太多,否則會把緩衝區撐爆,一般每批是500條左右。

知識點3,通過PreparedStatement的預處理機制,我們可以有效地防止SQL注入。