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