国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 Java Java面試題 java框架面試題目(1)

java框架面試題目(1)

Dec 07, 2019 pm 03:03 PM
java

java框架面試題目(1)

談?wù)勀銓truts的理解。

struts是一個以MVC模式設(shè)計(jì)的Web層框架,其實(shí)它就是一個Servlet,這個Servlet名為ActionServlet,或是ActionServlet的子類別。 (推薦學(xué)習(xí):java面試題目

我們可以在web.xml檔中將符合某種特徵的所有請求交給這個Servlet處理,這個Servlet再參考一個設(shè)定檔將各個請求分別分配給不同的action去處理。

(struts的設(shè)定檔可以有多個,可以依模組配置各自的設(shè)定文件,這樣可以防止設(shè)定檔的過度膨脹)

2.ActionServlet把請求交給action去處理之前,會將請求參數(shù)封裝成一個formbean物件(就是一個java類,這個類別中的每個屬性對應(yīng)一個請求參數(shù))

3.要說明的是, ActionServlet把formbean物件傳遞給action的execute方法之前,可能會呼叫formbean的validate方法進(jìn)行校驗(yàn),只有校驗(yàn)通過後才將這個formbean物件傳遞給action的execute方法,否則,它將傳回一個錯誤頁面,這個錯誤頁面由input屬性指定。

4.action執(zhí)行完後要回傳顯示的結(jié)果視圖,這個結(jié)果視圖是用一個ActionForward物件來表示的,actionForward物件透過struts-config.xml設(shè)定檔中的設(shè)定關(guān)聯(lián)到某個jsp頁面。

因?yàn)槌淌街惺褂玫氖窃趕truts-config.xml設(shè)定檔為jsp頁面設(shè)定的邏輯名,這樣就可以實(shí)作action程式碼與傳回的jsp頁面名稱的解耦。

(以上,也可以結(jié)合自己使用感受談自己的看法)

談?wù)勀銓ibernate的理解。

1. 物件導(dǎo)向設(shè)計(jì)的軟體內(nèi)部運(yùn)作過程可以理解成就是在不斷創(chuàng)造各種新物件、建立物件之間的關(guān)係,呼叫物件的方法來改變各個物件的狀態(tài)和對象消亡的過程,不管程式運(yùn)行的過程和操作怎麼樣,本質(zhì)上都是要得到一個結(jié)果,程式上一個時刻和下一個時刻的運(yùn)行結(jié)果的差異就表現(xiàn)在記憶體中的物件狀態(tài)發(fā)生了變化。

2.為了在關(guān)機(jī)和記憶體空間不夠的狀況下,保持程式的運(yùn)作狀態(tài),需要將記憶體中的物件狀態(tài)保存到持久化裝置和從持久化裝置中恢復(fù)出物件的狀態(tài),通常都是保存到關(guān)係資料庫來保存大量物件資訊。

從Java程式的運(yùn)行功能上來講,保存物件狀態(tài)的功能相比系統(tǒng)運(yùn)作的其他功能來說,應(yīng)該是一個很不起眼的附屬功能,java採用jdbc來實(shí)現(xiàn)這個功能,這個不起眼的功能卻要編寫大量的程式碼,而做的事情僅僅是保存對象和恢復(fù)對象,並且那些大量的jdbc代碼並沒有什麼技術(shù)含量,基本上是採用一套例行公事的標(biāo)準(zhǔn)代碼模板來編寫,是一種苦活和重複性的工作。

3.透過資料庫保存java程式運(yùn)行時產(chǎn)生的對象和恢復(fù)對象,其實(shí)就是實(shí)現(xiàn)了java對象與關(guān)係資料庫記錄的映射關(guān)係,稱為ORM(即Object RelationMapping),人們可以透過封裝JDBC程式碼來實(shí)現(xiàn)了這個功能,封裝出來的產(chǎn)品稱之為ORM框架,Hibernate就是其中一個流行的ORM框架。

使用Hibernate框架,不用寫JDBC程式碼,只是呼叫一個save方法,就可以將物件儲存到關(guān)聯(lián)式資料庫中,只是呼叫一個get方法,就可以從資料庫中載入出一個物件。

4.使用Hibernate的基本流程是:配置Configuration對象、產(chǎn)生SessionFactory、建立session對象,啟動事務(wù),完成CRUD操作,提交事務(wù),關(guān)閉session。

5.使用Hibernate時,先要配置hibernate.cfg.xml文件,其中配置資料庫連接資訊和方言等,還要為每個實(shí)體配置相應(yīng)的hbm.xml文件,hibernate.cfg.xml文件中需要登記每個hbm.xml檔。

6.在應(yīng)用Hibernate時,重點(diǎn)要了解Session的快取原理,級聯(lián),延遲載入和hql查詢。

(以上,也可以結(jié)合自己使用JDBC時的繁瑣談hibernate的感受)

談?wù)勀銓pring的理解。

1.Spring是實(shí)作了工廠模式的工廠類別(這裡有必要解釋清楚什麼是工廠模式),這個類別名為BeanFactory(實(shí)際上是一個介面),在程式中通常BeanFactory的子類別ApplicationContext。 Spring相當(dāng)於一個大的工廠類,在其設(shè)定檔中透過元素配置用於建立實(shí)例物件的類別名稱和實(shí)例物件的屬性。

2. Spring提供了對IOC良好支持,IOC是一種程式設(shè)計(jì)思想,是一種架構(gòu)藝術(shù),利用這種思想可以很好地實(shí)現(xiàn)模組之間的解耦,IOC也稱為DI (Depency Injection)。

3. Spring提供了對AOP技術(shù)的良好封裝, AOP稱為面向切面編程,就是系統(tǒng)中有很多各不相干的類別的方法,在這些眾多方法中要加入某種系統(tǒng)功能的程式碼,例如,加入日誌,加入權(quán)限判斷,加入異常處理,這種應(yīng)用稱為AOP。

實(shí)現(xiàn)AOP功能採用的是代理技術(shù),客戶端程式不再呼叫目標(biāo),而呼叫代理類,代理類與目標(biāo)類對外具有相同的方法聲明,有兩種方式可以實(shí)現(xiàn)相同的方法聲明,一是實(shí)現(xiàn)相同的接口,二是作為目標(biāo)的子類。

在JDK中採用Proxy類別產(chǎn)生動態(tài)代理的方式為某個介面產(chǎn)生實(shí)作類,如果要為某個類別產(chǎn)生子類,則可以用CGLI B。

在產(chǎn)生的代理類別的方法中加入系統(tǒng)功能和呼叫目標(biāo)類別的相應(yīng)方法,系統(tǒng)功能的代理以Advice對象進(jìn)行提供,顯然要創(chuàng)建代理對象,至少需要目標(biāo)類和Advice類。 spring提供了這種支持,只需要在spring設(shè)定檔中配置這兩個元素即可實(shí)現(xiàn)代理和aop功能。

(以上,也可以結(jié)合自己用感受談自己的看法)

談?wù)凷truts的優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

1. 實(shí)作MVC模式,結(jié)構(gòu)清晰,使開發(fā)者只專注於業(yè)務(wù)邏輯的實(shí)作.

2.有豐富的tag可以用 ,Struts的標(biāo)記庫(Taglib),如能靈活動用,則能大大提高開發(fā)效率

3. 頁面導(dǎo)航使系統(tǒng)的脈絡(luò)更加清晰。透過一個配置文件,即可掌握整個系統(tǒng)各部分之間的聯(lián)繫,這對於後期的維護(hù)有著莫大的好處。尤其是當(dāng)另一批開發(fā)者接手這個專案時,這種優(yōu)勢體現(xiàn)得更??明顯。

4. 提供Exception處理機(jī)制.

5. 資料庫連結(jié)池管理

6. 支援I18N

缺點(diǎn):

一,轉(zhuǎn)到展示層時,需要設(shè)定forward,如果有十個展示層的jsp,需要設(shè)定十次struts,而且還不包括有時候目錄、檔案變更,需要重新修改forward,注意,每次修改配置之後,要求重新部署整個項(xiàng)目,而tomcate這樣的伺服器,還必須重新啟動伺服器

二,Struts的Action必需是thread-safe方式,它僅僅允許一個實(shí)例去處理所有的請求。所以action用到的所有的資源都必需統(tǒng)一同步,這就造成了線程安全的問題。

三,測試不方便. Struts的每個Action都同Web層耦合在一起,這樣它的測試依賴於Web容器,單元測試也很難實(shí)現(xiàn)。不過有一個Junit的擴(kuò)充工具Struts TestCase可以實(shí)現(xiàn)它的單元測試。

四,類型的轉(zhuǎn)換. Struts的FormBean把所有的資料都當(dāng)作String類型,它可以使用工具Commons-Beanutils進(jìn)行類型轉(zhuǎn)換。但它的轉(zhuǎn)換都是在Class級別,而且轉(zhuǎn)換的類型是不可設(shè)定的。類型轉(zhuǎn)換時的錯誤訊息回傳給使用者也是非常困難的。

五,對Servlet的依賴性過強(qiáng). Struts處理Action時必需要依賴ServletRequest和ServletResponse,所有它擺脫不了Servlet容器。

六,前端表達(dá)式語言方面.Struts整合了JSTL,所以它主要使用JSTL的表達(dá)式語言來取得資料??墒荍STL的表達(dá)式語言在Collection和索引屬性方面處理顯得很弱。

七,對Action執(zhí)行的控制困難. Struts建立一個Action,如果想控制它的執(zhí)行順序?qū)浅@щy。甚至你要重新去寫Servlet來實(shí)現(xiàn)你的這個功能需求。

八,對Action執(zhí)行前後的處理. Struts處理Action的時候是基於class的hierarchies,很難在action處理前後進(jìn)行操作。

九,對事件支援不夠.在struts中,實(shí)際是一個表單Form對應(yīng)一個Action類別(或DispatchAction),換一句話說:在Struts中實(shí)際上是一個表單只能對應(yīng)一個事件,struts這種事件方式稱為application event,application event和component event相比是一種粗粒度的事件

iBatis與Hibernate有什麼不同?

相同點(diǎn):屏蔽jdbc api的底層存取細(xì)節(jié),使用我們不用與jdbc api打交道,就可以存取資料。

jdbc api程式設(shè)計(jì)流程固定,也將sql語句與java程式碼混雜在了一起,經(jīng)常需要拼湊sql語句,細(xì)節(jié)很繁瑣。

ibatis的好處:屏蔽jdbc api的底層存取細(xì)節(jié);將sql語句與java程式碼進(jìn)行分離;提供了將結(jié)果集自動封裝稱為實(shí)體物件和物件的集合的功能,queryForList傳回物件集合,用queryForObject傳回單一物件;提供了自動將實(shí)體物件的屬性傳遞給sql語句的參數(shù)。

Hibernate是一個全自動的orm映射工具,它可以自動產(chǎn)生sql語句,ibatis需要我們自己在xml設(shè)定檔中寫sql語句,hibernate要比ibatis功能負(fù)責(zé)、強(qiáng)大很多。因?yàn)閔ibernate會自動產(chǎn)生sql語句,我們無法控制該語句,我們就無法去寫特定的高效率的sql。

對於一些不太複雜的sql查詢,hibernate可以很好幫我們完成,但是,對於特別複雜的查詢,hibernate就很難適應(yīng)了,這時候用ibatis就是不錯的選擇,因?yàn)閕batis還是由我們自己寫sql語句。

在hibernate進(jìn)行多表查詢每個表中各取幾個字段,也就是說查詢出來的結(jié)果集沒有一個實(shí)體類與之對應(yīng)如何解決?

解決方案一,:依照Object[]資料取出數(shù)據(jù),然後自己組bean

解決方案二:每個表的bean寫建構(gòu)函數(shù),例如表一要找出field1,field2兩個字段,那麼有一個建構(gòu)函數(shù)就是Bean(type1 filed1,type2 field2) ,然後在hql裡面就可以直接產(chǎn)生這個bean了。

介紹Hibernate的二級快取

按照以下想法來回答:

(1)先說清楚什麼是緩存

(2)再說有了hibernate的Session就是一級緩存,即有了一級緩存,為什麼還要有二級緩存

(3)最後再說如何配置Hibernate的二級緩存。

1,快取就是把以前從資料庫查詢出來和使用過的物件保存在記憶體中(一個資料結(jié)構(gòu)中),這個資料結(jié)構(gòu)通常是或類似HashMap,當(dāng)以後要使用某個物件時,先查詢快取中是否有這個物件。

如果有則使用快取中的對象,如果沒有則去查詢資料庫,並將查詢出來的對象保存在快取中,以便下次使用。

2,Hibernate的Session就是一種緩存,我們通常將之稱為Hibernate的一級緩存,當(dāng)想使用session從資料庫中查詢出一個物件時,Session也是先從自己內(nèi)部查看是否存在這個對象,存在則直接傳回,不存在才去存取資料庫,並將查詢的結(jié)果保存在自己內(nèi)部。

由於Session代表一次會話過程,一個Session與一個資料庫連線相關(guān)連,所以Session最好不要長時間保持打開,通常只用於一個事務(wù)當(dāng)中,在事務(wù)結(jié)束時就應(yīng)關(guān)閉。而Session是線程不安全的,被多個線程共享時容易出現(xiàn)問題。

通常只有那種全域意義上的快取才是真正的快取應(yīng)用,才有較大的快取價值,因此,Hibernate的Session這一級快取的快取作用並不明顯,應(yīng)用價值不大。

Hibernate的二級快取就是要為Hibernate配置一種全域緩存,讓多個執(zhí)行緒和多個事務(wù)都可以共享這個快取。

我們希望的是一個人使用過,其他人也可以使用,session沒有這種效果。

3,二級快取是獨(dú)立於Hibernate的軟體元件,屬於第三方的產(chǎn)品,多個廠商和組織都提供有快取產(chǎn)品,例如,EHCache和OSCache等等。在Hibernate中使用二級緩存,首先就要在hibernate.cfg.xml配置中配置使用哪個廠家的緩存產(chǎn)品,接著需要配置該緩存產(chǎn)品自己的配置文件,最後要配置Hibernate中的哪些實(shí)體對像要納入到二級快取的管理中。

明白了二級快取原理和有了這個想法後,很容易配置起Hibernate的二級快取。

擴(kuò)展知識:一個SessionFactory可以關(guān)聯(lián)一個二級緩存,也即一個二級緩存只能負(fù)責(zé)緩存一個資料庫中的數(shù)據(jù),當(dāng)使用Hibernate的二級緩存後,注意不要有其他的應(yīng)用或SessionFactory來更改目前資料庫中的數(shù)據(jù),這樣快取的資料就會與資料庫中的實(shí)際資料不一致。

JDO是什麼?

JDO是Java物件持久化的新的規(guī)範(fàn),為java data object的簡稱,也是一個用來存取某種資料倉儲中的物件的標(biāo)準(zhǔn)化API。 JDO提供了透明的物件存儲,因此對開發(fā)人員來說,儲存資料物件完全不需要額外的程式碼(如JDBC API的使用)。

這些繁瑣的例行工作已經(jīng)轉(zhuǎn)移到JDO產(chǎn)品提供者身上,使開發(fā)人員解脫出來,從而集中時間和精力在業(yè)務(wù)邏輯上。另外,JDO很靈活,因?yàn)樗梢栽谌魏钨Y料底層上運(yùn)行。

比較:JDBC只是關(guān)聯(lián)式資料庫(RDBMS)JDO比較通用,提供到任何資料底層的儲存功能,例如關(guān)聯(lián)式資料庫、檔案、XML以及物件資料庫(ODBMS)等等,使得應(yīng)用可攜性更強(qiáng)。

Hibernate的一對多和多對一雙向關(guān)聯(lián)的差異? ?

一對多關(guān)聯(lián)映射和多對一關(guān)聯(lián)映射實(shí)現(xiàn)的基本原理都是一樣的,既是在多的一端加入一個外鍵指向一的一端外鍵,而主要的區(qū)別就是維護(hù)端不同。

它們的差異在於維護(hù)的關(guān)係不同:

一對多關(guān)聯(lián)映射是指在載入一的一端資料的同時載入多的一端的資料多對一關(guān)聯(lián)映射是指在載入多的一端資料的同時載入一的一端的資料。

Hibernate是如何延遲載入??

1. Hibernate2延遲載入實(shí)作:a)實(shí)體物件 b)集合(Collection)?

#

2. Hibernate3 提供了屬性的延遲載入功能當(dāng)Hibernate在查詢資料的時候,資料並沒有存在與記憶體中,當(dāng)程式真正對資料的操作時,物件才存在與記憶體中,就實(shí)現(xiàn)了延遲載入,他節(jié)省了伺服器的記憶體開銷,從而提高了伺服器的效能。?

以上是java框架面試題目(1)的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1601
29
PHP教程
1502
276
如何使用JDBC處理Java的交易? 如何使用JDBC處理Java的交易? Aug 02, 2025 pm 12:29 PM

要正確處理JDBC事務(wù),必須先關(guān)閉自動提交模式,再執(zhí)行多個操作,最後根據(jù)結(jié)果提交或回滾;1.調(diào)用conn.setAutoCommit(false)以開始事務(wù);2.執(zhí)行多個SQL操作,如INSERT和UPDATE;3.若所有操作成功則調(diào)用conn.commit(),若發(fā)生異常則調(diào)用conn.rollback()確保數(shù)據(jù)一致性;同時應(yīng)使用try-with-resources管理資源,妥善處理異常並關(guān)閉連接,避免連接洩漏;此外建議使用連接池、設(shè)置保存點(diǎn)實(shí)現(xiàn)部分回滾,並保持事務(wù)盡可能短以提升性能。

了解Java虛擬機(jī)(JVM)內(nèi)部 了解Java虛擬機(jī)(JVM)內(nèi)部 Aug 01, 2025 am 06:31 AM

TheJVMenablesJava’s"writeonce,runanywhere"capabilitybyexecutingbytecodethroughfourmaincomponents:1.TheClassLoaderSubsystemloads,links,andinitializes.classfilesusingbootstrap,extension,andapplicationclassloaders,ensuringsecureandlazyclassloa

如何使用Java的日曆? 如何使用Java的日曆? Aug 02, 2025 am 02:38 AM

使用java.time包中的類替代舊的Date和Calendar類;2.通過LocalDate、LocalDateTime和LocalTime獲取當(dāng)前日期時間;3.使用of()方法創(chuàng)建特定日期時間;4.利用plus/minus方法不可變地增減時間;5.使用ZonedDateTime和ZoneId處理時區(qū);6.通過DateTimeFormatter格式化和解析日期字符串;7.必要時通過Instant與舊日期類型兼容;現(xiàn)代Java中日期處理應(yīng)優(yōu)先使用java.timeAPI,它提供了清晰、不可變且線

比較Java框架:Spring Boot vs Quarkus vs Micronaut 比較Java框架:Spring Boot vs Quarkus vs Micronaut Aug 04, 2025 pm 12:48 PM

前形式攝取,quarkusandmicronautleaddueTocile timeProcessingandGraalvSupport,withquarkusoftenpernperforminglightbetterine nosserless notelless centarios.2。

了解網(wǎng)絡(luò)端口和防火牆 了解網(wǎng)絡(luò)端口和防火牆 Aug 01, 2025 am 06:40 AM

NetworkPortSandFireWallsworkTogetHertoEnableCommunication whereSeringSecurity.1.NetWorkPortSareVirtualendPointSnumbered0-655 35,with-Well-with-Newonportslike80(HTTP),443(https),22(SSH)和25(smtp)sindiessingspefificservices.2.portsoperateervertcp(可靠,c

垃圾收集如何在Java工作? 垃圾收集如何在Java工作? Aug 02, 2025 pm 01:55 PM

Java的垃圾回收(GC)是自動管理內(nèi)存的機(jī)制,通過回收不可達(dá)對象釋放堆內(nèi)存,減少內(nèi)存洩漏風(fēng)險。 1.GC從根對象(如棧變量、活動線程、靜態(tài)字段等)出發(fā)判斷對象可達(dá)性,無法到達(dá)的對像被標(biāo)記為垃圾。 2.基於標(biāo)記-清除算法,標(biāo)記所有可達(dá)對象,清除未標(biāo)記對象。 3.採用分代收集策略:新生代(Eden、S0、S1)頻繁執(zhí)行MinorGC;老年代執(zhí)行較少但耗時較長的MajorGC;Metaspace存儲類元數(shù)據(jù)。 4.JVM提供多種GC器:SerialGC適用於小型應(yīng)用;ParallelGC提升吞吐量;CMS降

比較Java構(gòu)建工具:Maven vs. Gradle 比較Java構(gòu)建工具:Maven vs. Gradle Aug 03, 2025 pm 01:36 PM

Gradleisthebetterchoiceformostnewprojectsduetoitssuperiorflexibility,performance,andmoderntoolingsupport.1.Gradle’sGroovy/KotlinDSLismoreconciseandexpressivethanMaven’sverboseXML.2.GradleoutperformsMaveninbuildspeedwithincrementalcompilation,buildcac

以身作則,解釋說明 以身作則,解釋說明 Aug 02, 2025 am 06:26 AM

defer用於在函數(shù)返回前執(zhí)行指定操作,如清理資源;參數(shù)在defer時立即求值,函數(shù)按後進(jìn)先出(LIFO)順序執(zhí)行;1.多個defer按聲明逆序執(zhí)行;2.常用於文件關(guān)閉等安全清理;3.可修改命名返回值;4.即使發(fā)生panic也會執(zhí)行,適合用於recover;5.避免在循環(huán)中濫用defer,防止資源洩漏;正確使用可提升代碼安全性和可讀性。

See all articles