java程序員面試題
做好面試準(zhǔn)備是每位Java程序員在求職面試中應(yīng)該做的,那么你對(duì)面試問(wèn)題有了解了嗎?以下是小編幫你們整理的java程序員面試題,一起來(lái)學(xué)習(xí)啦。
java程序員面試題(一)
1.Java異常處理中,try {}里有一個(gè)return語(yǔ)句,那么緊跟在這個(gè)try后的finally {}里的code會(huì)不會(huì)被執(zhí)行,什么時(shí)候被執(zhí)行,在return前還是后?
解答:會(huì)執(zhí)行,在return前執(zhí)行。
2.EJB包含哪3種bean
解答:session bean(會(huì)話bean), entity bean(實(shí)體bean), message bean(消息bean)
3.Class.forName(String className)這個(gè)方法的作用
解答:通過(guò)類(lèi)的全名獲得該類(lèi)的類(lèi)對(duì)象
4.你認(rèn)為在表上建立索引可以提高數(shù)據(jù)庫(kù)系統(tǒng)的效率嗎,為什么?
解答:不一定
建立太多的索引將會(huì)影響更新和插入的速度,因?yàn)樗枰瑯痈旅總€(gè)索引文件。對(duì)于一個(gè)經(jīng)常需要更新和插入的表格,就沒(méi)有必要為一個(gè)很少使用的where子句單獨(dú)建立索引了,對(duì)于比較小的表,排序的開(kāi)銷(xiāo)不會(huì)很大,也沒(méi)有必要建立另外的索引。
5.hibernate中的java對(duì)象有幾種狀態(tài),其相互關(guān)系如何(區(qū)別和相互轉(zhuǎn)換)。
解答:在Hibernate中,對(duì)象有三種狀態(tài):臨時(shí)狀態(tài)、持久狀態(tài)和游離狀態(tài)。 臨時(shí)狀態(tài):當(dāng)new一個(gè)實(shí)體對(duì)象后,這個(gè)對(duì)象處于臨時(shí)狀態(tài),即這個(gè)對(duì)象只是一個(gè)保存臨時(shí)數(shù)據(jù)的內(nèi)存區(qū)域,如果沒(méi)有變量引用這個(gè)對(duì)象,則會(huì)被jre垃圾回收機(jī)制回收。這個(gè)對(duì)象所保存的數(shù)據(jù)與數(shù)據(jù)庫(kù)沒(méi)有任何關(guān)系,除非通過(guò)Session的save或者SaveOrUpdate把臨時(shí)對(duì)象與數(shù)據(jù)庫(kù)關(guān)聯(lián),并把數(shù)據(jù)插入或者更新到數(shù)據(jù)庫(kù),這個(gè)對(duì)象才轉(zhuǎn)換為持久對(duì)象;
持久狀態(tài):持久化對(duì)象的實(shí)例在數(shù)據(jù)庫(kù)中有對(duì)應(yīng)的記錄,并擁有一個(gè)持久化表示(ID)。對(duì)持久化對(duì)象進(jìn)行delete操作后,數(shù)據(jù)庫(kù)中對(duì)應(yīng)的記錄將被刪除,那么持久化對(duì)象與數(shù)據(jù)庫(kù)記錄不再存在對(duì)應(yīng)關(guān)系,持久化對(duì)象變成臨時(shí)狀態(tài)。
持久化對(duì)象被修改變更后,不會(huì)馬上同步到數(shù)據(jù)庫(kù),直到數(shù)據(jù)庫(kù)事務(wù)提交。在同步之前,持久化對(duì)象是臟的(Dirty)。
游離狀態(tài):當(dāng)Session進(jìn)行了Close、Clear或者evict后,持久化對(duì)象雖然擁有持久化標(biāo)識(shí)符和與數(shù)據(jù)庫(kù)對(duì)應(yīng)記錄一致的值,但是因?yàn)闀?huì)話已經(jīng)消失,對(duì)象不在持久化管理之內(nèi),所以處于游離狀態(tài)(也叫:脫管狀態(tài))。游離狀態(tài)的對(duì)象與臨時(shí)狀態(tài)對(duì)象是十分相似的,只是它還含有持久化標(biāo)識(shí)。
6、struts2中,Action通過(guò)什么方式獲得用戶(hù)從頁(yè)面輸入的數(shù)據(jù),又是通過(guò)什么方式把其自身的數(shù)據(jù)傳給視圖的?
解答:
1)可以直接通過(guò)與表單元素相同名稱(chēng)的數(shù)據(jù)成員(需要存在符合命名規(guī)范set和get方法)獲取頁(yè)面表單數(shù)據(jù)。
2)會(huì)把處理好的數(shù)據(jù)成員放入值棧中,到頁(yè)面可以使用struts2標(biāo)簽取值就可以了。
7.常用的設(shè)計(jì)模式有哪些?說(shuō)明工廠模式。
解答:Java中的23種設(shè)計(jì)模式:
Factory(工廠模式), Builder(建造模式),F(xiàn)actory Method(工廠方法模式),
Prototype(原始模型模式),Singleton(單例模式),Facade(門(mén)面模式),
Adapter(適配器模式),Bridge(橋梁模式),Composite(合成模式),
Decorator(裝飾模式),F(xiàn)lyweight(享元模式),Proxy(代理模式),
Command(命令模式),Interpreter(解釋器模式),Visitor(訪問(wèn)者模式),
Iterator(迭代子模式),Mediator(調(diào)停者模式),Memento(備忘錄模式),
Observer(觀察者模式),State(狀態(tài)模式),Strategy(策略模式),
Template Method(模板方法模式), Chain Of Responsibleity(責(zé)任鏈模式)
工廠模式:工廠模式是一種經(jīng)常被使用到的模式,根據(jù)工廠模式實(shí)現(xiàn)的類(lèi)可以根據(jù)提供的數(shù)據(jù)生成一組類(lèi)中某一個(gè)類(lèi)的實(shí)例,通常這一組類(lèi)有一個(gè)公共的抽象父類(lèi)并且實(shí)現(xiàn)了相同的方法,但是這些方法針對(duì)不同的數(shù)據(jù)進(jìn)行了不同的操作。首先需要定義一個(gè)基類(lèi),該類(lèi)的子類(lèi)通過(guò)不同的方法實(shí)現(xiàn)了基類(lèi)中的方法。然后需要定義一個(gè)工廠類(lèi),工廠類(lèi)可以根據(jù)條件生成不同的子類(lèi)實(shí)例。當(dāng)?shù)玫阶宇?lèi)的實(shí)例后,開(kāi)發(fā)人員可以調(diào)用基類(lèi)中的方法而不必考慮到底返回的是哪一個(gè)子類(lèi)的實(shí)例。
java程序員面試題(二)
1.什么是AOP和OOP,IOC和DI有什么不同?
解答:
1)面向?qū)ο缶幊?Object Oriented Programming,OOP,面向?qū)ο蟪绦蛟O(shè)計(jì))是一種計(jì)算機(jī)編程架構(gòu)。AOP是OOP的延續(xù),是Aspect Oriented Programming的縮寫(xiě),意思是面向方面編程。 將通用需求功能從不相關(guān)類(lèi)之中分離出來(lái);同時(shí),能夠使得很多類(lèi)共享一個(gè)行為,一旦行為發(fā)生變化,不必修改很多類(lèi),只要修改這個(gè)行為就可以。AOP就是這種實(shí)現(xiàn)分散關(guān)注的編程方法,它將“關(guān)注”封裝在“方面”中
2)控制反轉(zhuǎn)IOC(Inversion of Control) 控制指的就是程序相關(guān)類(lèi)之間的依賴(lài)關(guān)系.傳統(tǒng)觀念設(shè)計(jì)中,通常由調(diào)用者來(lái)創(chuàng)建被調(diào)用者的實(shí)例, 在Spring里,創(chuàng)建被調(diào)用者的工作不再由調(diào)用者來(lái)完成,而是由Spring容器完成,依賴(lài)關(guān)系被反轉(zhuǎn)了,稱(chēng)為控制反轉(zhuǎn),目的是為了獲得更好的擴(kuò)展性和良好的可維護(hù)性。依賴(lài)注入(Dependency injection)創(chuàng)建被調(diào)用者的工作由Spring容器完成,然后注入調(diào)用者,因此也稱(chēng)依賴(lài)注入。控制反轉(zhuǎn)和依賴(lài)注入是同一個(gè)概念。
2.Struts1中actionform和action屬于MVC哪一層,為什么?
解答:actionform和action屬于MVC的Model層,Action用來(lái)處理業(yè)務(wù)邏輯,actionform保存用戶(hù)表單數(shù)據(jù)以便于在不同頁(yè)面間傳遞。而MVC中的model層就是業(yè)務(wù)邏輯層,該層用于實(shí)現(xiàn)具體的業(yè)務(wù)邏輯、狀態(tài)維護(hù)及管理。
3.error和exception有什么區(qū)別?
解答:
error表示系統(tǒng)級(jí)的錯(cuò)誤和程序不必處理的異常,是恢復(fù)不是不可能但很困難的情況下的一種嚴(yán)重問(wèn)題;比如內(nèi)存溢出,不可能指望程序能處理這樣的情況; exception表示需要捕捉或者需要程序進(jìn)行處理的異常,是一種設(shè)計(jì)或?qū)崿F(xiàn)問(wèn)題;也就是說(shuō),它表示如果程序運(yùn)行正常,從不會(huì)發(fā)生的情況。
4.Log4J是Apache組織的開(kāi)源一個(gè)開(kāi)源項(xiàng)目,通過(guò)Log4J,可以指定日志信息輸出的目的地,如console、file等。Log4J采用日志級(jí)別機(jī)制,請(qǐng)按照輸出級(jí)別由低到高的順序?qū)懗鋈罩据敵黾?jí)別。
解答:Log4J分 為OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定義的級(jí)別。Log4j建議只使用四個(gè)級(jí)別,優(yōu)先級(jí)從高到低分別是 ERROR、WARN、INFO、DEBUG。通過(guò)在這里定義的級(jí)別,您可以控制到應(yīng)用程序中相應(yīng)級(jí)別的日志信息的開(kāi)關(guān)。比如在這里定義了INFO級(jí)別, 則應(yīng)用程序中所有DEBUG級(jí)別的日志信息將不被打印出來(lái)。
5.說(shuō)出幾個(gè)與spring同類(lèi)型的開(kāi)源框架,說(shuō)出幾個(gè)與hibernate同類(lèi)型的開(kāi)源框架,說(shuō)出幾個(gè)與struts同類(lèi)型的開(kāi)源框架
解答:
1)與spring同類(lèi)型的開(kāi)源框架:JUIDE、EJB3.0、picoContainer
2)與hibernate同類(lèi)型的開(kāi)源框架 :ibatis,jdo,JPA
3)幾個(gè)與struts同類(lèi)型的開(kāi)源框架:webwork,tapestry,JSF
java程序員面試題(三)
1.什么是數(shù)據(jù)庫(kù)的參照完整性?
解答:數(shù)據(jù)庫(kù)的參照完整性是指表與表之間的一種對(duì)應(yīng)關(guān)系,通常情況下可以通過(guò)設(shè)置兩表之間的主鍵、外鍵關(guān)系,或者編寫(xiě)兩表的觸發(fā)器來(lái)實(shí)現(xiàn)。 有對(duì)應(yīng)參照完整性的兩張表格,在對(duì)他們進(jìn)行數(shù)據(jù)插入、更新、刪除的過(guò)程中,系統(tǒng)都會(huì)將被修改表格與另一張對(duì)應(yīng)表格進(jìn)行對(duì)照,從而阻止一些不正確的數(shù)據(jù)的操作。
2.如何優(yōu)化數(shù)據(jù)庫(kù),如何提高數(shù)據(jù)庫(kù)的性能?
解答:
1) 硬件調(diào)整性能
最有可能影響性能的是磁盤(pán)和網(wǎng)絡(luò)吞吐量,解決辦法擴(kuò)大虛擬內(nèi)存,并保證有足夠可以擴(kuò)充的空間;把數(shù)據(jù)庫(kù)服務(wù)器上的不必要服務(wù)關(guān)閉掉;把數(shù)據(jù)庫(kù)服務(wù)器和主域服務(wù)器分開(kāi);把SQL數(shù)據(jù)庫(kù)服務(wù)器的吞吐量調(diào)為最大;在具有一個(gè)以上處理器的機(jī)器上運(yùn)行SQL。
2)調(diào)整數(shù)據(jù)庫(kù)
若對(duì)該表的查詢(xún)頻率比較高,則建立索引;建立索引時(shí),想盡對(duì)該表的所有查詢(xún)搜索操作, 按照where選擇條件建立索引,盡量為整型鍵建立為有且只有一個(gè)簇集索引,數(shù)據(jù)在物理上按順序在數(shù)據(jù)頁(yè)上,縮短查找范圍,為在查詢(xún)經(jīng)常使用的全部列建立非簇集索引,能最大地覆蓋查詢(xún);但是索引不可太多,執(zhí)行UPDATE DELETE INSERT語(yǔ)句需要用于維護(hù)這些索引的開(kāi)銷(xiāo)量急劇增加;避免在索引中有太多的索引鍵;避免使用大型數(shù)據(jù)類(lèi)型的列為索引;保證每個(gè)索引鍵值有少數(shù)行。
3)使用存儲(chǔ)過(guò)程
應(yīng)用程序的實(shí)現(xiàn)過(guò)程中,能夠采用存儲(chǔ)過(guò)程實(shí)現(xiàn)的對(duì)數(shù)據(jù)庫(kù)的操作盡量通過(guò)存儲(chǔ)過(guò)程來(lái)實(shí)現(xiàn),因?yàn)榇鎯?chǔ)過(guò)程是存放在數(shù)據(jù)庫(kù)服務(wù)器上的一次性被設(shè)計(jì)、編碼、測(cè)試,并被再次使用,需要執(zhí)行該任務(wù)的應(yīng)用可以簡(jiǎn)單地執(zhí)行存儲(chǔ)過(guò)程,并且只返回結(jié)果集或者數(shù)值,這樣不僅可以使程序模塊化,同時(shí)提高響應(yīng)速度,減少網(wǎng)絡(luò)流量,并且通過(guò)輸入?yún)?shù)接受輸入,使得在應(yīng)用中完成邏輯的一致性實(shí)現(xiàn)。
4)應(yīng)用程序結(jié)構(gòu)和算法
建立查詢(xún)條件索引僅僅是提高速度的前提條件,響應(yīng)速度的提高還依賴(lài)于對(duì)索引的使用。因?yàn)槿藗冊(cè)谑褂肧QL時(shí)往往會(huì)陷入一個(gè)誤區(qū),即太關(guān)注于所得的結(jié)果是否正確,特別是對(duì)數(shù)據(jù)量不是特別大的數(shù)據(jù)庫(kù)操作時(shí),是否建立索引和使用索引的好壞對(duì)程序的響應(yīng)速度并不大,因此程序員在書(shū)寫(xiě)程序時(shí)就忽略了不同的實(shí)現(xiàn)方法之間可能存在的性能差異,這種性能差異在數(shù)據(jù)量特別大時(shí)或者大型的或是復(fù)雜的數(shù)據(jù)庫(kù)環(huán)境中(如聯(lián)機(jī)事務(wù)處理OLTP或決策支持系統(tǒng)DSS)中表現(xiàn)得尤為明顯。在工作實(shí)踐中發(fā)現(xiàn),不良的SQL往往來(lái)自于不恰當(dāng)?shù)乃饕O(shè)計(jì)、不充份的連接條件和不可優(yōu)化的where子句。在對(duì)它們進(jìn)行適當(dāng)?shù)膬?yōu)化后,其運(yùn)行速度有了明顯地提高!
3.JS中的三種彈出式消息提醒(警告窗口、確認(rèn)窗口、信息輸入窗口)的命令是什么?
解答:alert confirm prompt
4.描述JSP和Servlet的區(qū)別、共同點(diǎn)、各自應(yīng)用的范圍
解答:JSP在本質(zhì)上就是SERVLET,但是兩者的創(chuàng)建方式不一樣.Servlet完全是JAVA程序代碼構(gòu)成,擅長(zhǎng)于流程控制和事務(wù)處理,通過(guò)Servlet來(lái)生成動(dòng)態(tài)網(wǎng)頁(yè)很不直觀.JSP由HTML代碼和JSP標(biāo)簽構(gòu)成,可以方便地編寫(xiě)動(dòng)態(tài)網(wǎng)頁(yè).因此在實(shí)際應(yīng)用中采用Servlet來(lái)控制業(yè)務(wù)流程,而采用JSP來(lái)生成動(dòng)態(tài)網(wǎng)頁(yè).
5.在java語(yǔ)言中int 和 Integer 有什么區(qū)別
解答:int是基本數(shù)據(jù)類(lèi)型,Integer是int的包裝類(lèi),屬于引用類(lèi)型
看了“java程序員面試題”