- 相關(guān)推薦
三大框架面試問題及答案
面試前做好準(zhǔn)備,輕松面對考官的提問,下面陽光網(wǎng)小編精心整理了一些三大框架面試問題及答案的例文,希望可以幫到你!
三大框架面試問題及答案(一)
一、Spring依賴注入的3種實現(xiàn)方式是什么?
依賴注入的3種實現(xiàn)方式分別是:接口注入(interface injection)、Set注入(setter injection)和構(gòu)造注入(constructor injection)。接口注入指的就是在接口中定義要注入的信息,并通過接口完成注入。其具體步驟包括(1)編寫一個接口,各種數(shù)據(jù)的注入將通過這個接口進行。(2)任何想要使用數(shù)據(jù)的類都必須實現(xiàn)這個接口 。Set注入指的就是在接受注入的類中定義一個Set方法,并在參數(shù)中定義需要注入的元素。構(gòu)造注入指的就是在接受注入的類中定義一個構(gòu)造方法,并在參數(shù)中定義需要注入的元素。
二、SSH 框架配置流程是什么?
1.創(chuàng)建java web項目:添加struts包:freemarker,ognl,struts2-core,struts2-spring-plugin,xwork-core,commons-fileupload、commons-io、 commons-lang等 ;添加spring包:spring-aop、spring-aspects、spring-beans、spring-context、spring-core、spring-jdbc、spring-orm、spring-web等;添加hibernate包:hibernate-core等;添加其他包:ojdbc等
2.配置struts(1)配置struts核心過濾器。打開web.xml,配置struts核心過濾器和過濾器映射。(2)建立Action,繼承ActionSupport類。
(3)配置action。在struts.xml文件中,添加對Action的配置。包含<package><action><result>等元素的配置(4)新建視圖頁面
3.配置hibernate:(1)建立數(shù)據(jù)庫與數(shù)據(jù)表(2)創(chuàng)建持久層實體類及映射文件(3)編寫數(shù)據(jù)訪問類,集成HibernateDaoSupport父類
4.配置spring:(1)配置applicationContext.xml文件,配置spring會話工廠bean,數(shù)據(jù)訪問bean ,業(yè)務(wù)bean和action bean等。(2)引入aop和tx命名空間,配置聲明式事務(wù)(3)配置web.xml,添加Spring監(jiān)聽器和context-param初始化參數(shù),告知監(jiān)聽器applicationContext.xml的位置。
三、Struts的運行機制是什么
1、客戶端初始化一個指向Servlet容器(例如Tomcat)的請求;
2、這個請求經(jīng)過一系列的過濾器(Filter)(這些過濾器中有一個叫做ActionContextCleanUp的可選過濾器,這個過濾器對于Struts2和其他框架的集成很有幫助,例如:SiteMesh Plugin);
3、接著StrutsPrepareAndExecuteFilter被調(diào)用,StrutsPrepareAndExecuteFilter詢問ActionMapper來決定這個請求是否需要調(diào)用某個Action
4、如果ActionMapper決定需要調(diào)用某個Action,StrutsPrepareAndExecuteFilter把請求的處理交給ActionProxy;
5、ActionProxy通過Configuration Manager詢問框架的配置文件,找到需要調(diào)用的Action類;
6、ActionProxy創(chuàng)建一個ActionInvocation的實例。
7、ActionInvocation實例使用命名模式來調(diào)用,在調(diào)用Action的過程前后,涉及到相關(guān)攔截器(Intercepter)的調(diào)用。
8、一旦Action執(zhí)行完畢,ActionInvocation負責(zé)根據(jù)struts.xml中的配置找到對應(yīng)的返回結(jié)果。返回結(jié)果通常是 (但不總是,也可能是另外的一個Action鏈)一個需要被表示的JSP或者FreeMarker的模版。在表示的過程中可以使用Struts2 框架中繼承的標(biāo)簽。在這個過程中需要涉及到ActionMapper。
三大框架面試問題及答案(二)
一、說說IOC和AOP的概念以及在Spring中是如何應(yīng)用的
1.控制反轉(zhuǎn)(Inversion of Control,英文縮寫為IoC)是一個重要的面向?qū)ο缶幊痰姆▌t來削減計算機程序的耦合問題,也是輕量級的Spring框架的核心。 控制反轉(zhuǎn)一般分為兩種類型,依賴注入(Dependency Injection,簡稱DI)和依賴查找(Dependency Lookup)。依賴注入應(yīng)用比較廣泛。2.AOP為Aspect Oriented Programming的縮寫,意為:面向切面編程,通過預(yù)編譯方式和運行期動態(tài)代理實現(xiàn)程序功能的統(tǒng)一維護的一種技術(shù)。AOP是OOP的延續(xù)。利用AOP可以對業(yè)務(wù)邏輯的各個部分進行隔離,從而使得業(yè)務(wù)邏輯各部分之間的耦合度降低,提高程序的可重用性,同時提高了開發(fā)的效率。
3.IOC是典型的工廠模式,而AOP則是典型的代理模式的體現(xiàn)。spring的IoC容器是spring的核心,spring AOP是spring框架的重要組成部分 4.在spring中ioc最典型的應(yīng)用就是整合并管理各個組件,如整合ssh時,spring可以管理datasource,sessionfactory,dao,service,action等bean,這些傳統(tǒng)開發(fā)方式中均是由硬編碼的方式實現(xiàn);而aop則在spring中表現(xiàn)為各種通知,spring提供了諸如MethodBeforeAdvice,AfterReturningAdvice,AfterThrowingAdvice等API,并在spring提供的聲明式事務(wù)中也提供了相應(yīng)的tx命名空間,利用aop簡化事務(wù)配置
二、Struts中mvc中分別使用的什么技術(shù)?
1.在Action的實現(xiàn)方面,而Struts2中可以是一個POJO。Struts2支持通過攔截器堆棧為每一個Action創(chuàng)建不同的生命周期,其中攔截器在AOP(Aspect-Oriented Programming)中用于在某個方法或字段被訪問之前或之后加入某些操作
2.線程模型方面,Struts2的Action是一個請求對應(yīng)一個實例(每次請求時都新new出一個對象),沒有線程安全方面的問題。
3.Servlet依賴方面,Struts2中的Action不再依賴于Servlet API,有利于測試,并且實現(xiàn)TDD。
4.封裝請求參數(shù),Struts2可以選擇使用POJO類來封裝請求的參數(shù),或者直接使用Action的屬性。
5.表達式語言方面,Struts2整合了OGNL(Object Graph NavigationLanguage)。
6.綁定值到視圖技術(shù),Struts2使用“ValueStack”技術(shù)。
7.類型轉(zhuǎn)換,Struts2中使用OGNL進行轉(zhuǎn)換,可以更方便的使用。
8.Struts2支持重寫validate方法或者使用XWork的驗證框架。同時也很好的使用了Java的國際化機制
三、Spring是怎么實現(xiàn)事務(wù)處理的?
Spring 提供兩種事務(wù)處理方式,一種是編程式事務(wù)處理;一種是聲明式事務(wù)處理。其中編程式事務(wù)處理使用TransactionTemplate進行事務(wù)處理(Spring進行commit和rollback)。而Spring 的聲明式事務(wù)處理,可以說是 Spring AOP的一種實現(xiàn)。因為事務(wù)處理是所謂方面( Aspect )的一個子集。因此默認情況下,事務(wù)處理是利用 Java動態(tài)代理機制實現(xiàn)的,這樣就必須先定義一個接口,然后再編寫實現(xiàn);而對于沒有接口的 Javabean ,則通過 CGLIB 實現(xiàn)。這部分是 SpringAOP 部分的內(nèi)容。 其實就是在執(zhí)行某個業(yè)務(wù)方法之前添加了tx.beginTran()事務(wù)開啟,若沒有異常,業(yè)務(wù)方法執(zhí)行完畢后添加了tx.commitTran()事務(wù)提交。若有異常拋出,則添加了tx.rollbackTran();事務(wù)回滾。使用Spring?AOP進行事務(wù)控制需要具備一定的規(guī)則,若是開發(fā)人員的業(yè)務(wù)Service或者說業(yè)務(wù)Service中的業(yè)務(wù)方法命名不按照事前定義好的規(guī)則進行命名的話,AOP是攔截不到的。
三大框架面試問題及答案(三)
一、談?wù)凥ibernate的緩存機制
Hibernate的緩存包括Session的緩存和SessionFactory的緩存,其中SessionFactory的緩存又可以分為兩類:內(nèi)置緩存和外置緩存。Session的緩存是內(nèi)置的,不能被卸載,也被稱為Hibernate的第一級緩存。SessionFactory的內(nèi)置緩存和Session的緩存在實現(xiàn)方式上比較相似,前者是SessionFactory對象的一些集合屬性包含的數(shù)據(jù),后者是指Session的一些集合屬性包含的數(shù)據(jù)。SessionFactory的內(nèi)置緩存中存放了映射元數(shù)據(jù)和預(yù)定義SQL語句,映射元數(shù)據(jù)是映射文件中數(shù)據(jù)的拷貝,而預(yù)定義SQL語句是在Hibernate初始化階段根據(jù)映射元數(shù)據(jù)推導(dǎo)出來,SessionFactory的內(nèi)置緩存是只讀的,應(yīng)用程序不能修改緩存中的映射元數(shù)據(jù)和預(yù)定義SQL語句,因此SessionFactory不需要進行內(nèi)置緩存與映射文件的同步。SessionFactory的外置緩存是一個可配置的插件。在默認情況下,SessionFactory不會啟用這個插件。外置緩存的數(shù)據(jù)是數(shù)據(jù)庫數(shù)據(jù)的拷貝,外置緩存的介質(zhì)可以是內(nèi)存或者硬盤。SessionFactory的外置緩存也被稱為Hibernate的第二級緩存。
二、MyBatis和Hibernate有什么區(qū)別
1)MyBATIS非常簡單易學(xué),Hibernate相對較復(fù)雜,門檻較高。2) 二者都是比較優(yōu)秀的開源產(chǎn)品。但Hibernate現(xiàn)在已經(jīng)是主流O/R Mapping框架,從文檔的豐富性,產(chǎn)品的完善性,版本的開發(fā)速度都要強于MyBatis。3) 當(dāng)系統(tǒng)屬于二次開發(fā),無法對數(shù)據(jù)庫結(jié)構(gòu)做到控制和修改,那MyBatis的靈活性將比Hibernate更適合。4) 系統(tǒng)數(shù)據(jù)處理量巨大,性能要求極為苛刻,在這種情況下MyBatis會有更好的可控性和表現(xiàn)。因為MyBatis比Hibernate更容易進行sql的優(yōu)化。5) MyBatis 可以進行細粒度的優(yōu)化,減少與數(shù)據(jù)庫的交互,對于性能的提升是非常重要。6) MyBatis需要手寫sql語句,也可以生成一部分,Hibernate則基本上可以自動生成,偶爾會寫一些Hql。如果涉及到數(shù)據(jù)庫字段的修改,Hibernate修改的地方很少。7) 開發(fā)方面:開發(fā)效率上,兩者差不多 ;可維護性方面,MyBatis更好一些。8) 運行效率:在不考慮cache的情況下,MyBatis應(yīng)該會比hibernate快一些或者很多(根據(jù)實際情況會有所不同)。 9) 對不同數(shù)據(jù)庫類型的支持。MyBatis對不同數(shù)據(jù)庫類型的支持不夠好,如果你要開發(fā)的系統(tǒng)是要在對中數(shù)據(jù)間移植,那可能用hibernate比較好。10)對缺省的cache支持。MyBatis對缺省的cache支持不夠好,但是hibernate的cache支持其實也不是很好,而且很復(fù)雜。尤其是對于大并發(fā)量的應(yīng)用。
三、Hashmap和Hashtable的區(qū)別
1 HashMap不是線程安全的,hastmap是將鍵映射到值的對象,其中鍵和值都是對象,并且不能包含重復(fù)鍵,但可以包含重復(fù)值。HashMap允許null key和null value,而hashtable不允許。2 .HashTable是線程安全的一個Collection。HashMap是Hashtable的輕量級實現(xiàn)(非線程安全的實現(xiàn)),他們都完成了Map接口,主要區(qū)別在于HashMap允許空(null)鍵值(key),由于非線程安全,效率上可能高于Hashtable。 HashMap允許將null作為一個entry的key或者value,而Hashtable不允許。 HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。 Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實現(xiàn)。 最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個線程訪問Hashtable時,不需要自己為它的方法實現(xiàn)同步,而HashMap 就必須為之提供外同步。 Hashtable和HashMap采用的hash/rehash算法都大概一樣,所以性能不會有很大的差異
四、JDBC與Hibernate的優(yōu)缺點比較
JDBC與Hibernate在性能上相比,JDBC靈活性有優(yōu)勢。而Hibernate在易學(xué)性,易用性上有些優(yōu)勢。當(dāng)用到很多復(fù)雜的多表聯(lián)查和復(fù)雜的數(shù)據(jù)庫操作時,JDBC有優(yōu)勢。 相同點:
◆兩者都是JAVA的數(shù)據(jù)庫操作中間件。
◆兩者對于數(shù)據(jù)庫進行直接操作的對象都不是線程安全的,都需要及時關(guān)閉。 ◆兩者都可以對數(shù)據(jù)庫的更新操作進行顯式的事務(wù)處理。
不同點:
◆使用的SQL語言不同:JDBC使用的是基于關(guān)系型數(shù)據(jù)庫的標(biāo)準(zhǔn)SQL語言,Hibernate使用的是HQL(Hibernate query language)語言
◆操作的對象不同:JDBC操作的是數(shù)據(jù),將數(shù)據(jù)通過SQL語句直接傳送到數(shù)據(jù)庫中執(zhí)行,Hibernate操作的是持久化對象,由底層持久化對象的數(shù)據(jù)更新到數(shù)據(jù)庫中。 ◆數(shù)據(jù)狀態(tài)不同:JDBC操作的數(shù)據(jù)是“瞬時”的,變量的值無法與數(shù)據(jù)庫中的值保持一致,而Hibernate操作的數(shù)據(jù)是可持久的,即持久化對象的數(shù)據(jù)屬性的值是可以跟數(shù)據(jù)庫中的值保持一致的。
【三大框架面試問題及答案】相關(guān)文章:
面試問題及答案04-02
經(jīng)典面試問題及答案04-02
護士面試的問題及答案04-04
面試提問的問題及答案04-04
面試護士的問題及答案04-06
面試問題及答案12-09
面試問題及答案12-09
面試問題及答案技巧11-30
公司面試問題及答案04-03