【JAVA秒會技術之秒殺面試官】JavaEE常見面試題(五)
答:①原子性(Atomicity)
指事務是一個不可分割的工作單位,事務中的操作要麽全都發生,要麽全不發生;
②一致性(Consistency)
事務前後數據的完成性必須保持一致;(例:轉賬前後的,兩個人的金額總數是不變的)
③隔離性(Isolation)
指多個用戶並發訪問數據庫時,一個用戶的事務不能被其他用戶的事務幹擾,多個並發事務之間要項目隔離;
④持久性(Durability)
指一個事務一旦被提交,它對數據庫中數據的改變是永久性的,接下來即使數據庫發生故障,也不應該對其有任何影響;
52.事務並發訪問的問題?
答:①臟讀:一個事務讀到了另一個事務未提交的數據;
②不可重復讀:在同一個事務中,多次查詢的結果不一致(由update引起的)
③虛讀/幻讀:在同一個事務中,多次查詢的結果不一致(由insert引起的)
53.隔離的級別?
答:①讀未提交
read uncommitted;一個事務讀到另一個事務沒有提交的數據;
(未解決,3問題都存在)
②讀已提交 —— oracle默認
read committed;一個事務讀到另一個事務已提交的數據;
(解決臟讀)
③可重復讀 --- mysql默認
repeatable read;在一個事務中讀到的數據始終保持一致,無論另一個事務是否提交
(解決臟讀和不可重復讀)
④串行化
serializable 串行化,同時只能執行一個事務,相當於單線程事務;
(都解決)
54.tuncate和delete區別?
答:① truncate數據ddl delete屬於dml
② truncate是先刪除drop該表,再create該表。而且無法回滾!!!
55.在Hibernate中實現數據檢索的5種方式?
答:① 對象導航(關聯級別的數據檢索)
② HQL語句
③ SQL語句
④ QBC語句
⑤ 通過OID加載(get( ) / load( ))
56.Cascade與Inverse區別?
答:①Cascade主要用於級聯操作(如:級聯添加,刪除等);
②Inverse主要用於控制權是否要反轉,一般將控制權放在多方,可以提高效率;
如:當刪除部門時,級聯刪除部門下的所有用戶。
若inverse = “false” 默認值,可以不配
控制臺輸出3條語句:
Update user set deptId = null where deptId = 1;//解決父子關系
Delete from user where deptId is null; //先幹掉子類
Delete from user where id=1; //再自殺
若inverse = “true” 代表控制權要反轉,交給多方維護,相率會提高;
控制臺輸出2條語句:
Delete from user where deptId=1; //自殺
Delete from user where id=1;//自殺
57.PO類的定義規範?
答:①是一個共有類;
②提供無參共有構造方法;
③屬性是私有的;
④為私有屬性提供共有的getter/setter;
⑤不能使用final修飾;
⑥可以實現java.io.Serializbale接口;
⑦如果是基本類型,需要使用它的包裝類;
58.請分別寫出一對一,一對多,多對一,多對多的PO類映射文件?
59.抽取BaseAction的理由?
答:①通過實現RequestAware、SessionAware、ApplicationAware接口,自定義protected Map request/session/application,並提供getter方法,繼承setter方法,此時再編寫Action類時,依賴的是自己的API,將來框架升級改造時,只要修改BaseAction就可以了,可以更好的實現與Struts2的解耦合;
②可以在BaseAction中抽取一些公共的操作方法;
60.XML文檔定義有幾種形式?它們之間有何本質區別?解析XML文檔有哪幾種方式?
答:(1)XML文檔有兩種約束方式:DTD約束和Schema約束;
(2)區別:
①DTD不符合XML的語法結構,schema符合XML的語法結構;
②DTD的約束擴展性比較差,XML文檔只能引入一個DTD的文件。schema可以引入多個文件;
③DTD不支持名稱空間(理解包結構),schema支持名稱空間;
④DTD支持數據比較少,schema支持更多的數據類型;
(3)解析方式主要有三種:
①DOM解析:
(a)加載整個xml的文檔到內存中,形成樹狀結構,生成對象;
(b)容易產生內存溢出;
(c)可以做增刪改;
②SAX解析
(a)邊讀邊解析;
(b)不可以做增刪改;
③ DOM4J解析(hibernate底層采用)
(a)可讓SAX解析也產生樹狀結構。
(b)主要api開發步驟:
1)SAXReader.read(xxx.xml)代表解析xml的文檔,返回對象是Document;
2)Document.getRootElement(),返回的是文檔的根節點,是Element對象;
3)Element:
.element(...) -- 獲得指定名稱第一個子元素。可以不指定名稱;
.elements(...) -- 獲得指定名稱的所有子元素。可以不指定名稱;
.getText() -- 獲得當前元素的文本內容;
.elementText(...) -- 獲得指定名稱子元素的文本值
.addElement() -- 添加子節點
.setText() -- 設置子標簽內容
4)XMLWriter.write("..") --寫出
5)XMLWriter.close() --關閉輸出流
61.你們項目為什麽選用maven進行構建?
答:①首先,maven是一個優秀的項目構建工具。使用maven,可以很方便的對項目進行分模塊構建,這樣在開發和測試打包部署時,效率會提高很多。
②其次,maven可以進行依賴的管理。使用maven,可以將不同系統的依賴進行統一管理,並且可以進行依賴之間的傳遞和繼承。
【JAVA秒會技術之秒殺面試官】JavaEE常見面試題(五)