1. 程式人生 > >2017 Java開發面試題-資料庫篇(1)

2017 Java開發面試題-資料庫篇(1)

1、儲存過程

--建立
CREATE PROCEDURE pro_name(IN inputName inputType, OUT outputName outputType)
BEGIN
--sql statement...
SELECT ** INTO outputName FROM ** WHERE **
SET outputName = newValue;
END

--呼叫
set @inputName=value1;
set @outputName=value2;
CALL pro_name(@inputName,@outputName);

--刪除
DROP PROCEDURE pro_name;

引數型別:
IN:輸入引數
OUT:輸出引數
INOUT:既可以輸入/輸出

2、觸發器

CREATE TRIGGER AFTER INSERT/UPDATE/DELETE ON table1 FOR EACH ROW
INSERT INTO tables(...) VALUES(...);

3、資料庫三正規化

1NF:
欄位原子性,不可再分
所有關係型資料庫都滿足1NF

2NF:
1NF+資料庫表中每個例項or行必須可以唯一的被區分
一般通過加上主鍵實現

3NF:
1NF+2NF+資料庫表不包含已在其他表中已包含的非主關鍵字資訊

4、資料庫優化經驗

1、PrepareStatement效能一般比Statement高
一個sql發給伺服器執行,涉及步驟:
語法檢查-》語義分析-》編譯-》快取
或:sql-》發給oracle伺服器-》語法檢查和編譯成內部指令-》快取和執行指令
2、有外來鍵約束會影響
如果能夠保證資料的完整性,那在設計資料庫時需要去掉外來鍵
3、sql語句優化
4、建立索引
索引一般用B-Tree實現
http://blog.csdn.net/weiliangliang111/article/details/51333169
如果沒有索引的話,查詢內容一般需要全表遍歷,效率低

5、UNION vs UNION ALL

他們用於連線連個結果集
union all保留重複結果
union連結好結果集後,會排序,刪除出重複記錄
所以union all比union快

6、JDBC註冊驅動程式的三種方式

Class.forName("com.mysql.jdbc.Driver");//載入資料庫驅動  

String url="jdbc:mysql://localhost:3306/databasename";//資料庫連線子協議  
Connection conn=DriverManager.getConnection(url,"username","password"); 
能夠在編譯時不依賴於特定的JDBC Driver庫
也易於改造成從配置檔案讀取JDBC配置,可以在執行時動態更換資料庫連線驅動

System.setProperty("jdbc.driver", "com.mysql.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/databasename";//資料庫連線子協議  
Connection conn=DriverManager.getConnection(url,"username","password"); 
可以同時匯入多個驅動:
System.setProperty("jdbc.drivers","XXXDriver:XXXDriver:XXXDriver");

new com.mysql.jdbc.Driver();//建立driver物件,載入資料庫驅動  
String url="jdbc:mysql://localhost:3306/databasename";//資料庫連線子協議  
Connection conn=DriverManager.getConnection(url,"username","password");  
它必須要有jdbc驅動才可以通過編譯

7、Class.forName 的作用

程式按照引數中指定的字串形式的類名去搜索並載入相應的類
若其位元組碼已經載入,則返回代表該位元組碼的Class物件
否則,按照類載入器的委託機制去搜索和載入
若無法載入,丟擲異常ClassNotFoundException
載入完位元組碼後,就可以用Class位元組碼的newInstance建立例項
有時,程式使用的具體類名設計時無法確定,只能在執行時確定,則就需Class.forName動態載入
此類名多為配置檔案中配置的eg:
1、spring ioc每次依賴注入的具體類
2、jdbc驅動類名,以便產品交付後不用改源程式就可以改驅動類

8、資料連線池的工作機制

http://www.cnblogs.com/newpanderking/p/3875749.html
對於共享資源的著名設計模式:資源池
是為了解決資源頻繁分配、釋放造成的問題

J2EE伺服器啟動時會建立一定數量的池連線,並一直維持不少於次樹木的連線
當有新的連線請求,池池驅動程式返回空閒連線
若無空閒連線,根據配置的引數,新建一定數量的連線

Connection是原始COnnection的代理,代理Connection的close不是真的關連線
而是把他代理的Connection物件還給連線池

通過連線池的管理機制可以監控連線使用情況,為系統開發、測試、效能調整提供參考

優點:
1、資源複用
2、減少連線時間,響應快
3、簡化的程式設計模式