我最近看到一本比較好的講java web方面面試的書,java web輕量級開發面試教程。java
其中不只用案例和視頻講述了Spring MVC,Hibernate, ORM等方面的技巧,並且還實際講到了面試技巧。程序員
以下部分是對數據庫面試方面的總結。web
若是在面試或與資深人事交流的過程當中,你能有效合理地展現出本章所給出的一些知識點,那麼對你的評價就會是「對數據庫有深刻了解」,甚至能加上「有設計數據表的經驗」,即使你說有過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注入。