我最近看到一本比較好的講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注入。