java基礎知識面試題
Java面試中,常常提問一些Java的基礎知識,那么你有提前了解面試題目了嗎?以下是小編幫你們整理的java基礎知識面試題,一起來學習啦。
java基礎知識面試題(一)
1.Java異常處理中,try{}里有一個return語句那么緊跟在這個try后的finally{}里面的code會不會被執行,什么時候被執行,在return前還是后?
會執行,在return之前
2.EJB包含哪3中bean?
Session bean(會話bean),entity bean(實體bean),message bean(消息bean)
3.Class.forName(String className)這個方法的作用?
通過類的全名獲得該類的類對象
4.你認為在表上建立索引可以提高數據庫系統的效率嗎?為什么?
不一定。建立太多的索引將會影響更新和插入的速度,因為他需要同樣更新每個索引文件。對于一個經常需要更新和插入的表格,就沒有必要為一個甚少使用的where字句單獨建立索引,對于比較小的表,排序的開銷不會很大,也沒有必要建立另外的索引。
5.Hibernate中的java對象有幾種狀態,其相互關系如何(區別和相互轉換)。
在hibernate中,對象有三種狀態:臨時狀態、持久狀態和游離狀態。
臨時狀態:當new一個實體對象后,這個對象處于臨時狀態,即這個對象只是一個保存臨時數據的內存區域,,如果沒有變量引用這個對象,則會被jre垃圾回收機制回收掉。這個對象所保存的數據與數據庫沒有任何關系,除非通過session的sava或是savaorupdate把臨時對象與數據庫關聯,并把數據插入或者更新到數據庫,這個對象才轉換為持久對象。 持久狀態:持久化對象的實例在數據庫中有對應的記錄,并擁有一個持久化表示(ID)。對持久化現象進行delete操作,數據庫中對應的記錄將被刪除,那么持久化對象與數據庫記錄不再存在對應關系,持久化對象變成臨時狀態。持久化對象被修改變更后,不會馬上同步到數據庫,直到數據庫事務提交。在同步之前,持久化對象是臟的(Dirty)。
游離狀態:當session進行了close,clear或者evict后,持久化對象雖然用于持久化標識符和數據庫對應記錄一致的值,但是因為會話已經失效,對象不再持久化管理之內,所有處于游離狀態。(也叫托管狀態)。游離狀態的對象與臨時狀態對象是十分相似的,只是他還含有持久化標識。
java基礎知識面試題(二)
1.對hibernate的延遲加載如何理解,在實際應用中,延遲加載與session關閉的矛盾是如何處理的?
延遲加載就是并不是在讀取的時候把數據加載進來,而是等到使用時再加載。那么Hibernate是怎么知道用戶在什么時候使用數據了呢?又是如何加載數據呢?其實很簡單,他使用了代理機制。返回給用戶的并不是實體本身,而是實體對象的代理。代理對象在用戶調用getter方法時就會去數據庫加載數據。但加載數據就需要數據庫連接。而當我們把會話關閉時,數據庫連接就同時釋放了。這種情況就叫做未初始化的關系。
延遲加載與session關閉的矛盾一般可以這樣處理:
1)關閉延遲加載特性
操作起來比較簡單,因為hibernate的延遲加載特性實在hbm配置里面可控制的。默認lazy=”true”,集體配置可以查看一下相關文檔,就不詳細敘述了。
但是用這個解決辦法方帶來的隱患是十分大的。
首先,出現no session or session was closed就證明了你已經存在外檢關聯表,如果去掉延遲加載的話,則表示每次查詢的開銷會變得非常大,如果關聯表越多,后果也可以現象得到。所有不建議使用這個方法解決。
2)在session關閉之前把我們想要查詢的數據先獲取了。
首先需要了解一下session什么時候關閉,也就是他的生命周期。通常情況下hibernate會在查詢數據關閉session,而使用getHibernateTemplate().get方法查詢后會延遲關閉的事件。會在事務結束后才關閉。
使用攔截器(interceptor)或者過濾器(Filter)控制session。
Spring為解決hibernate這一特性提供的解決方案可以有效的控制session的生命周期。
2.什么是AOP和OOP,IOC和DI由有什么不同?
1)面向對象編程(Object Oriented Programming,OOP,面向對象設計程序)是一種計算機編程架構。AOP是OOP的延續,是Aspect Oriented Programming的縮寫,意思是面向方面編程。將通用需求功能從不相關類之中分離出來;同時,能夠使得很多類共享一個行為,一單行為發生變化,不必修改很多類,止血藥修改這個行為就可以了。AOP就是這種實現分散關注的編程方法,他將“關注”封裝在“方面”中
2)控制反轉IOC(Inversion of Control)控制指的就是程序相關類之間的依賴關系,傳統觀念設置中,通常由調用者來創建被調用者的實例,在Spring里,創建被調用者的工作不在由調用者來完成,而是由Spring容器完成,依賴關系被反轉了,稱之為控制反轉,目的是為了獲得更好的擴展性和良好的可維護性。依賴注入(Dependency injection)創建被調用者的工作由Spring容器完成,然后注入調用者,因此也被稱之為依賴注入。控制反轉和依賴注入是同一個概念。
3.Struts1中的actionForm和action處于MVC的那一層?為什么?
ActionForm和action屬于MVC的Model層,Action用來處理業務邏輯,ActionForm保存用戶表單數據以便于在不同頁面間傳遞。而MVC中的model層就是業務邏輯層,該層用于實現具體的業務邏輯、狀態維護及管理。
4.Error和eception有什么區別?
Error表示系統級別的錯誤和程序不必處理的異常,是恢復不是不可能當時很困難的情況下的一種嚴重問題,比如說內存溢出,不可能指望程序能處理這樣的情況。
Exception表示需要捕捉或者需要程序進行處理的異常,是一種設計或實現問題;也就是說,他表示程序運行正常,從不會發生的情況。
5.Log4j是apache組織的開元一個開源項目,通過log4j可以指定日志信息輸出的目的地,如console,file等。Log4j采用日志級別機制,請按照輸出級別由高到低的順序寫出日志輸出級別。
Log4j分為OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者定義自己的級別。Log4j建議只使用四個界別,優先級從高到低分別是ERROR、WARN、INFO、DEBUG。通過在這里定義的級別,可以控制到應用程序中相應級別的日志信息的開關。比如在這里定義了INFO級別。則應用程序中所有DEBUG級別的日志信息將不被打印出來。
java基礎知識面試題(三)
1.說出幾個與Spring同類型的開源框架,說出幾個與hibernate同類型的開源框架,說出幾個與struts同類型的開源框架。
1)與spring同類型的開源框架:JUIDE、EJB3.0、picoContainer
2)與hibernate同類型的開源框架:ibatis、jdo、JPA
3)幾個與struts同類型的開源框架:webwork、tapestry、JSF
2.Struts2中,OGNL訪問值棧的時候查找的順序是什么?請排序:模型對象、臨時對象、固定名稱的隨想、action對象
Struts2的值棧排序順序為:
1)臨時對象
2)模型對象
3)Action對象
4)固定名稱對象(如#application,#session,#request等對象)
3.Struts2中,Action通過什么方式獲得用戶從頁面輸入的數據,又是通過什么方式把自身的數據傳給視圖的?
1)可以直接通過與表單元素相同名稱的數據成員(需要促進在符合命名規范的set和get方法)獲取頁面表單數據。
2)會把處理好的數據成員放入值棧中,到頁面可以使用struts標簽取值就可以了。
4.常用的設計模式有哪些?說明工廠模式.
Java中的23中設計模式:
Factory(工廠模式),Builder(建造模式),Factory Method(工廠方法模式),Prototype(原始模型模式),Singlerton(單例模式),Facade(門面模式),Adapter(適配器模式),Bridge(橋梁模式),Composite(合成模式),Decorator(裝飾模式),Flyweight(享元模式),Proxy(代理模式),Command(命令模式),Interpreter(解釋器模式),Visitor(訪問者模式),Iterator(迭代器模式),Mediator(調停者模式),Memento(備忘錄模式),Observer(觀察者模式),State(狀態模式),Strategy(策略模式),Template Method(模板方法模式),Chain Of Responsiblety(責任鏈模式)
看了“java基礎知識面試題”