[转]Java常用概念解答
1.?事務是什么?
事務是作為一個邏輯單元執行的一系列操作,一個邏輯工作單元必須有四個屬性,稱為?ACID(原子性、
一致性、隔離性和持久性)屬性,只有這樣才能成為一個事務:
原子性
事務必須是原子工作單元;對于其數據修改,要么全都執行,要么全都不執行。
一致性
事務在完成時,必須使所有的數據都保持一致狀態。在相關數據庫中,所有規則都必須應用于事務的修改
,以保持所有數據的完整性。事務結束時,所有的內部數據結構(如?B?樹索引或雙向鏈表)都必須是正
確的。
隔離性
由并發事務所作的修改必須與任何其它并發事務所作的修改隔離。事務查看數據時數據所處的狀態,要么
是另一并發事務修改它之前的狀態,要么是另一事務修改它之后的狀態,事務不會查看中間狀態的數據。
這稱為可串行性,因為它能夠重新裝載起始數據,并且重播一系列事務,以使數據結束時的狀態與原始事
務執行的狀態相同。
持久性
事務完成之后,它對于系統的影響是永久性的。該修改即使出現系統故障也將一直保持。
2.?在數據庫中條件查詢速度很慢的時候,如何優化?
1.建索引
2.減少表之間的關聯
3.優化sql,盡量讓sql很快定位數據,不要讓sql做全表查詢,應該走索引,把數據量大的表排在前面
4.簡化查詢字段,沒用的字段不要,已經對返回結果的控制,盡量返回少量數據
3.??session.load()和session.get()區別
Session.load/get方法均可以根據指定的實體類和id從數據庫讀取記錄,并返回與之對應的實體對象。其區別在于:
1) 如果未能發現符合條件的記錄,get方法返回null,而load方法會拋出一個ObjectNotFoundException。
2) Load方法可返回實體的代理類實例,而get方法永遠直接返回實體類。
3?)?load方法可以充分利用內部緩存和二級緩存中的現有數據,而get方法則僅僅在內部緩存中進行數據查找,如沒有發現對應數據,將越過二級緩存,直接調用SQL完成數據讀取。
4.??說一下Servlet的生命周期
A:定位:用戶根據地址請求指定的servlet,web.xml根據用戶輸入的地址,定位到具體的servlet。
B:加載:將找到的servlet類加載到web容器中(servlet容器)。
C:實例化:調用默認無參構造函數,實現servlet的實例化。
D:初始化:調用Init方法,實現成員變量的初始化。
E:服務處理:servlet的service方法接收用戶請求,根據當前用戶請求的方式是get還是post,service自動將用戶請求傳遞到doGet和doPost方法中進行處理。處理完成后,產生響應結果。
F:銷毀:調用destroy方法,實現servlet的釋放工作。
服務器關閉時進行釋放。或者是servlet產生改變重新加載前進行釋放原來的servlet。
注意:在servlet容器中,一個servlet只會產生一個一個實例對象進行工作。
5.??談談final,?finally,?finalize的區別。
final?修飾符(關鍵字)如果一個類被聲明為final,意味著它不能再派生出新的子類,不能作為父
類被繼承。因此一個類不能既被聲明為?abstract的,又被聲明為final的。將變量或方法聲明為final,
可以保證它們在使用中不被改變。被聲明為final的變量必須在聲明時給定初值,而在以后的引用中只能
讀取,不可修改。被聲明為final的方法也同樣只能使用,不能重載。
finally?再異常處理時提供?finally?塊來執行任何清除操作。如果拋出一個異常,那么相匹配的
catch?子句就會執行,然后控制就會進入?finally?塊(如果有的話)。
finalize?方法名。Java?技術允許使用?finalize()?方法在垃圾收集器將對象從內存中清除出去之前
做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調用的。它是在
Object?類中定義的,因此所有的類都繼承了它。子類覆蓋?finalize()?方法以整理系統資源或者執行其
他清理工作。finalize()?方法是在垃圾收集器刪除對象之前對這個對象調用的。
6.??為什么使用Hibernate,Hibernate執行流程。
1.?封裝了jdbc,簡化了很多重復性代碼。
2.?簡化了DAO層編碼工作,使開發更對象化了。
3.?移植性好,支持各種數據庫,如果換個數據庫只要在配置文件中變換配置就可以了,不用改變hibernate代碼。
4.?支持透明持久化,因為hibernate操作的是純粹的(pojo)java類,沒有實現任何接口,沒有侵入性。所以說它是一個輕量級框架。
Hibernate執行流程:
1.?通過Configuration().configure();讀取并解析hibernate.cfg.xml配置文件。
2.?由hibernate.cfg.xml中的讀取解析映射信息。
3.?通過config.buildSessionFactory();//得到sessionFactory。
4.?sessionFactory.openSession();//得到session。
5.?session.beginTransaction();//開啟事務。
6.?persistent?operate;
7.?session.getTransaction().commit();//提交事務
8.?關閉session;
9.?關閉sessionFactory;
二?手寫編程題
1.?請用C++、Java、C#或VB.NET?任意一種面向對象的語言實現一個計算器控制臺程序,要求輸入輸入兩個數?和?運算符,得到結果。
2.?寫一段代碼驗證StringBuffer?,String?字符串連接性能差別
String?tempstr?=?“abcdefghijklmnopqrstuvwxyz”;
int?times=5000;
long?here1=?System.currentTimeMillis();
String?str?=?“”;
for?(int?i?=?0;?i?<?times;i++)?{
str?=str+?tempstr;
}
long?here2=?System.currentTimeMillis();
long?time?=?(here2?-?here1);
System.out.println(“以上代碼執行需要”+time+”毫秒”);
long?here1=?System.currentTimeMillis();
StringBuffer?sb?=?new?StringBuffer();
for?(int?i?=?0;?i?<?times;?i++)?{
sb.append(tempstr);
}
long?here2=?System.currentTimeMillis();
long?time?=?(here2?-?here1);
System.out.println(“以上代碼執行需要”+time+”毫秒”);
?
?
1.servlet的生命周期??
答:servlet有良好的生存期的定義,包括加載和實例化、初始化、處理請求以及服務結束。???這個生存期由javax.servlet.Servlet接口的init,service和destroy方法表達。????web容器加載servlet,生命周期開始。
??通過調用servlet的init()方法進行servlet的初始化。
??通過調用service()方法實現,根據請求的不同調用不同的do***()方法。???結束服務,web容器調用servlet的destroy()方法。?2、Servlet執行時一般實現哪幾個方法??答:public?void?init(ServletConfig?config)?public?ServletConfig?getServletConfig()?public?String?getServletInfo()
public?void?service(ServletRequest?request,ServletResponse?response)?public?void?destroy()
3.說出Servlet的生命周期,并說出Servlet和CGI的區別。
Servlet被服務器實例化后,容器運行其init方法,請求到達時運行其service方法,service方法自動派遣運行與請求對應的doXXX方法(doGet,doPost)等,當服務器決定將實例銷毀的時候調用其destroy方法。與cgi的區別在于servlet處于服務器進程中,它通過多線程方式運行其service方法,一個實例可以服務于多個請求,并且其實例一般不會銷毀,而CGI對每個請求都產生新的進程,服務完成后就銷毀,所以效率上低于servlet。
2.簡述jsp和servlet的聯系。?Java?Servlet是JSP技術的基礎,而且大型的Web應用程序的開發需要Java?Servlet和JSP配合才能完成。現在許多Web服務器都支持Servlet,即使不直接支持Servlet的Web服務器,也可以通過附件的應用服務器和模塊來支持Servlet,這得益于Java的跨平臺特性。另外,由于Servlet內部以線程方式提供提供服務,不必對于每個請求都啟動一個進程,并且利用多線程機制可以同時為多個請求服務,因此Servlet的效率非常高。
4、JSP和Servlet有哪些相同點和不同點,他們之間的聯系是什么???JSP是Servlet技術的擴展,本質上是Servlet的簡易方式,更強調應用的外表表達。JSP編譯后是"類servlet"。Servlet和JSP最主要的不同點在于,Servlet的應用邏輯是在Java文件中,并且完全從表示層中的HTML里分離開來。而JSP的情況是Java和HTML可以
組合成一個擴展名為.jsp的文件。JSP側重于視圖,Servlet主要用于控制邏輯。?5、MVC的各個部分都有那些技術來實現?如何實現??
答:MVC是Model-View-?Controller的簡寫。"Model"?代表的是應用的業務邏輯(通過JavaBean,EJB組件實現),?"View"?是應用的表示面(由JSP頁面產生),"Controller"?是提供應用的處理過程控制(一般是一個Servlet),通過這種設計模型把應用邏輯,處理過程和顯示邏輯分成不同的組件實現。這些組件可以進行交互和重?用。?
6.?jsp有哪些內置對象?作用分別是什么??
答:JSP共有以下9種基本內置組件(可與ASP的6種內部組件相對應):?(1?request)HttpServletRequest類的Request對象.
????作用:代表請求對象,此請求會包含來自GET/POST請求的參數。主要用于接受客戶端通過HTTP協議連接傳輸到服務器端的數據。它包含了有關瀏覽器請求的信息,并且提供了幾個用于獲取cookie,?header,?和session數據的有用的方法。?
(2?response)HttpServletResponse類的Respone對象.
????作用:代表響應對象,主要用于向客戶端發送數據。網頁傳回用戶端的回應,并提供了幾個用于設置送回?瀏覽器的響應的方法(如cookies,頭信息等)?(3?out)???JspWriter類的out對象.?????作用:主要用于向客戶端輸出數據(用來傳送回應的輸出?);??Out的基類是JspWriter,并提供了幾個方法使你能用于向瀏覽器回送輸出結果。?(4?session)HttpSession類的session對象.
????作用:主要用于來分別保存每個用戶信息,與請求關聯的會話;會話狀態維持是Web應用開發者必須面對的問題。
(5?applicaton)???ServletContex類的application對象
????作用:主要用于保存用戶信息,代碼片段的運行環境;它是一個共享的內置對象,即一個容器中的多個用戶共享一個application對象,故其保存的信息被所有用戶所共享.這有助于查找有關servlet引擎和servlet環境的信息.
(6?pageContext)PageContext類的PageContext對象
????作用:管理網頁屬性,為JSP頁面包裝頁面的上下文,管理對屬于JSP中特殊可見部分中已命名對象的訪問,它的創建和初始化都是由容器來完成的。?(7?config)???ServletConfig類的Config對象.
???作用:代碼片段配置對象,表示Servlet的配置。該對象用于存取servlet實例的初始化參數。
(8?page)Object類的Page(相當于this)對象.
????作用:處理JSP網頁(JSP網頁本身),是Object類的一個實例,指的是JSP實現類的實例(表示從該頁面產生的一個servlet實例),即它也是JSP本身,只有在JSP頁面范圍之內才是合法的。?(9?Exception)作用:處理JSP文件執行時發生的錯誤和異常,針對錯誤網頁,未捕捉的例外??7.JSP的內置對象及方法。
???request?request表示HttpServletRequest對象。它包含了有關瀏覽器請求的信息,并且提供了幾個用于獲取cookie,?header,?和session數據的有用的方法。?
???response?response表示HttpServletResponse對象,并提供了幾個用于設置送回?瀏覽器的響應的方法(如cookies,頭信息等)????
?out?對象是javax.jsp.JspWriter的一個實例,并提供了幾個方法使你能用于向瀏覽器回送輸出結果。?????pageContext?pageContext表示一個javax.servlet.jsp.PageContext對象。它是用于方便存取各種范圍的名字空間,
servlet相關的對象的API,并且包裝了通用的servlet相關功能的方法。?
???session?session表示一個請求的javax.servlet.http.HttpSession對象。Session可以存貯用戶的狀態信息?????application?applicaton?表示一個javax.servle.ServletContext對象。這有助于查找有關servlet引擎和servlet環境的信息?
???config?config表示一個javax.servlet.ServletConfig對象。該對象用于存取servlet實例的初始化參數。?????page?page表示從該頁面產生的一個servlet實例?8、jsp有哪些動作?作用分別是什么???答:JSP共有以下6種基本動作?
??jsp:include:在頁面被請求的時候引入一個文件。????jsp:useBean:尋找或者實例化一個JavaBean。????jsp:setProperty:設置JavaBean的屬性。?
??jsp:getProperty:輸出某個JavaBean的屬性。????jsp:forward:把請求轉到一個新的頁面。?
??jsp:plugin:根據瀏覽器類型為Java插件生成OBJECT或EMBED標記??9、Request對象的主要方法:
setAttribute(String?name,Object):設置名字為name的request的參數值?getAttribute(String?name):返回由name指定的屬性值
getAttributeNames():返回request對象所有屬性的名字集合,結果是一個枚舉的實例
?
轉載于:https://www.cnblogs.com/ZhuRenWang/p/4743668.html
總結
以上是生活随笔為你收集整理的[转]Java常用概念解答的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【LINUX/UNIX网络编程】之使用消
- 下一篇: word中取消自动目录超链接的方法