三大框架面試題
三大框架面試題目有哪些呢?面試前對面試題目做好準備對面試很有利,以下是小編幫你們整理的三大框架面試題,一起來學習啦。
三大框架面試題篇一
一、Spring依賴注入的3種實現(xiàn)方式是什么?
依賴注入的3種實現(xiàn)方式分別是:接口注入(interface injection)、Set注入(setter injection)和構造注入(constructor injection)。接口注入指的就是在接口中定義要注入的信息,并通過接口完成注入。其具體步驟包括(1)編寫一個接口,各種數(shù)據(jù)的注入將通過這個接口進行。(2)任何想要使用數(shù)據(jù)的類都必須實現(xiàn)這個接口 。Set注入指的就是在接受注入的類中定義一個Set方法,并在參數(shù)中定義需要注入的元素。構造注入指的就是在接受注入的類中定義一個構造方法,并在參數(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的配置。包含等元素的配置(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è)務bean和action bean等。(2)引入aop和tx命名空間,配置聲明式事務(3)配置web.xml,添加Spring監(jiān)聽器和context-param初始化參數(shù),告知監(jiān)聽器applicationContext.xml的位置。
三、Struts的運行機制是什么
1、客戶端初始化一個指向Servlet容器(例如Tomcat)的請求;
2、這個請求經過一系列的過濾器(Filter)(這些過濾器中有一個叫做ActionContextCleanUp的可選過濾器,這個過濾器對于Struts2和其他框架的集成很有幫助,例如:SiteMesh Plugin);
3、接著StrutsPrepareAndExecuteFilter被調用,StrutsPrepareAndExecuteFilter詢問ActionMapper來決定這個請求是否需要調用某個Action
4、如果ActionMapper決定需要調用某個Action,StrutsPrepareAndExecuteFilter把請求的處理交給ActionProxy;
5、ActionProxy通過Configuration Manager詢問框架的配置文件,找到需要調用的Action類;
6、ActionProxy創(chuàng)建一個ActionInvocation的實例。
7、ActionInvocation實例使用命名模式來調用,在調用Action的過程前后,涉及到相關攔截器(Intercepter)的調用。
8、一旦Action執(zhí)行完畢,ActionInvocation負責根據(jù)struts.xml中的配置找到對應的返回結果。返回結果通常是 (但不總是,也可能是另外的一個Action鏈)一個需要被表示的JSP或者FreeMarker的模版。在表示的過程中可以使用Struts2 框架中繼承的標簽。在這個過程中需要涉及到ActionMapper。
四、說說IOC和AOP的概念以及在Spring中是如何應用的
1.控制反轉(Inversion of Control,英文縮寫為IoC)是一個重要的面向對象編程的法則來削減計算機程序的耦合問題,也是輕量級的Spring框架的核心。 控制反轉一般分為兩種類型,依賴注入(Dependency Injection,簡稱DI)和依賴查找(Dependency Lookup)。依賴注入應用比較廣泛。
2.AOP為Aspect Oriented Programming的縮寫,意為:面向切面編程,通過預編譯方式和運行期動態(tài)代理實現(xiàn)程序功能的統(tǒng)一維護的一種技術。AOP是OOP的延續(xù)。利用AOP可以對業(yè)務邏輯的各個部分進行隔離,從而使得業(yè)務邏輯各部分之間的耦合度降低,提高程序的可重用性,同時提高了開發(fā)的效率。
3.IOC是典型的工廠模式,而AOP則是典型的代理模式的體現(xiàn)。spring的IoC容器是spring的核心,spring AOP是spring框架的重要組成部分
4.在spring中ioc最典型的應用就是整合并管理各個組件,如整合ssh時,spring可以管理datasource,sessionfactory,dao,service,action等bean,這些傳統(tǒng)開發(fā)方式中均是由硬編碼的方式實現(xiàn);而aop則在spring中表現(xiàn)為各種通知,spring提供了諸如MethodBeforeAdvice,AfterReturningAdvice,AfterThrowingAdvice等API,并在spring提供的聲明式事務中也提供了相應的tx命名空間,利用aop簡化事務配置
三大框架面試題篇二
一、Struts中mvc中分別使用的什么技術?
1.在Action的實現(xiàn)方面,而Struts2中可以是一個POJO。Struts2支持通過攔截器堆棧為每一個Action創(chuàng)建不同的生命周期,其中攔截器在AOP(Aspect-Oriented Programming)中用于在某個方法或字段被訪問之前或之后加入某些操作
2.線程模型方面,Struts2的Action是一個請求對應一個實例(每次請求時都新new出一個對象),沒有線程安全方面的問題。
3.Servlet依賴方面,Struts2中的Action不再依賴于Servlet API,有利于測試,并且實現(xiàn)TDD。
4.封裝請求參數(shù),Struts2可以選擇使用POJO類來封裝請求的參數(shù),或者直接使用Action的屬性。
5.表達式語言方面,Struts2整合了OGNL(Object Graph NavigationLanguage)。
6.綁定值到視圖技術,Struts2使用“ValueStack”技術。
7.類型轉換,Struts2中使用OGNL進行轉換,可以更方便的使用。
8.Struts2支持重寫validate方法或者使用XWork的驗證框架。同時也很好的使用了Java的國際化機制
二、Spring是怎么實現(xiàn)事務處理的?
Spring 提供兩種事務處理方式,一種是編程式事務處理;一種是聲明式事務處理。其中編程式事務處理使用TransactionTemplate進行事務處理(Spring進行commit和rollback)。而Spring 的聲明式事務處理,可以說是 Spring AOP的一種實現(xiàn)。
因為事務處理是所謂方面( Aspect )的一個子集。因此默認情況下,事務處理是利用 Java動態(tài)代理機制實現(xiàn)的,這樣就必須先定義一個接口,然后再編寫實現(xiàn);而對于沒有接口的 Javabean ,則通過 CGLIB 實現(xiàn)。這部分是 SpringAOP 部分的內容。
其實就是在執(zhí)行某個業(yè)務方法之前添加了tx.beginTran()事務開啟,若沒有異常,業(yè)務方法執(zhí)行完畢后添加了tx.commitTran()事務提交。若有異常拋出,則添加了tx.rollbackTran();事務回滾。
使用Spring?AOP進行事務控制需要具備一定的規(guī)則,若是開發(fā)人員的業(yè)務Service或者說業(yè)務Service中的業(yè)務方法命名不按照事前定義好的規(guī)則進行命名的話,AOP是攔截不到的。
三、談談Hibernate的緩存機制
Hibernate的緩存包括Session的緩存和SessionFactory的緩存,其中SessionFactory的緩存又可以分為兩類:內置緩存和外置緩存。Session的緩存是內置的,不能被卸載,也被稱為Hibernate的第一級緩存。
SessionFactory的內置緩存和Session的緩存在實現(xiàn)方式上比較相似,前者是SessionFactory對象的一些集合屬性包含的數(shù)據(jù),后者是指Session的一些集合屬性包含的數(shù)據(jù)。SessionFactory的內置緩存中存放了映射元數(shù)據(jù)和預定義SQL語句,映射元數(shù)據(jù)是映射文件中數(shù)據(jù)的拷貝,而預定義SQL語句是在Hibernate初始化階段根據(jù)映射元數(shù)據(jù)推導出來,SessionFactory的內置緩存是只讀的,應用程序不能修改緩存中的映射元數(shù)據(jù)和預定義SQL語句,因此SessionFactory不需要進行內置緩存與映射文件的同步。
SessionFactory的外置緩存是一個可配置的插件。在默認情況下,SessionFactory不會啟用這個插件。外置緩存的數(shù)據(jù)是數(shù)據(jù)庫數(shù)據(jù)的拷貝,外置緩存的介質可以是內存或者硬盤。SessionFactory的外置緩存也被稱為Hibernate的第二級緩存。
四、MyBatis和Hibernate有什么區(qū)別
1)MyBATIS非常簡單易學,Hibernate相對較復雜,門檻較高。
2) 二者都是比較優(yōu)秀的開源產品。但Hibernate現(xiàn)在已經是主流O/R Mapping框架,從文檔的豐富性,產品的完善性,版本的開發(fā)速度都要強于MyBatis。
3) 當系統(tǒng)屬于二次開發(fā),無法對數(shù)據(jù)庫結構做到控制和修改,那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應該會比hibernate快一些或者很多(根據(jù)實際情況會有所不同)。
9) 對不同數(shù)據(jù)庫類型的支持。MyBatis對不同數(shù)據(jù)庫類型的支持不夠好,如果你要開發(fā)的系統(tǒng)是要在對中數(shù)據(jù)間移植,那可能用hibernate比較好。
10)對缺省的cache支持。MyBatis對缺省的cache支持不夠好,但是hibernate的cache支持其實也不是很好,而且很復雜。尤其是對于大并發(fā)量的應用。
五、Hashmap和Hashtable的區(qū)別
1 HashMap不是線程安全的,hastmap是將鍵映射到值的對象,其中鍵和值都是對象,并且不能包含重復鍵,但可以包含重復值。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算法都大概一樣,所以性能不會有很大的差異
三大框架面試題篇三
1.你對spring的理解是什么?
1)開源框架
2)IoC(控制反轉),將類的創(chuàng)建和依賴關系寫在配置文件里,由配置文件注入,實現(xiàn)了松耦合
3)AOP 將安全,事務等于程序邏輯相對獨立的功能抽取出來,利用spring的配置文件將這些功能插進去,實現(xiàn)了按照方面編程,提高了復用性。
或者答概念Spring是一個輕型容器(light-weight container),其核心是Bean工廠(Bean Factory),用以構造我們所需要的M(Model)。在此基礎之上,Spring提供了AOP(Aspect-Oriented Programming, 面向層面的編程)的實現(xiàn),用它來提供非管理環(huán)境下申明方式的事務、安全等服務;對Bean工廠的擴展ApplicationContext更加方便我們實現(xiàn)J2EE的應用;DAO/ORM的實現(xiàn)方便我們進行數(shù)據(jù)庫的開發(fā);Web MVC和Spring Web提供了Java Web應用的框架或與其他流行的Web框架進行集成。
2.Spring框架有哪幾部分組成?
Spring 核心容器(Core):提供Spring框架的基本功能。核心容器的主要組件是BeanFactory,她是工廠模式的實現(xiàn)。BeanFactory使用控制反轉(Ioc)模式將應用程序的配置和依賴性規(guī)范與實際的應用代碼程序分開。
Spring AOP:通過配置管理特性,Spring AOP模塊直接面向方面的編程功能集成到了Spring框架中,所以可以很容易的使Spring框架管理的任何對象支持 AOP。Spring AOP模塊為基于Spring的應用程序中的對象提供了事務管理服務。通過使用Spring AOP,不用依賴于EJB組件,就可以將聲明性事務管理集成到應用程序中。
Spring ORM:Spring框架集成了若干ORM框架,從而提供了ORM的對象關系工具,其中包括 JDO、Hibernate、iBatis和TopLink。所有這些都遵從Spring的通用事務和DAO異常層結構。 Spring DAO:JDBC DAO抽象層提供了有意義的異常層次的結構,可用該結構來管理異常處理和不同數(shù)據(jù)供應商拋出的異常錯誤信息。異常層次結構簡化了錯誤處理,并且大大的降低 了需要編寫的異常代碼數(shù)量(例如,打開和關系連接)。Spring DAO的面向JDBC的異常遵從通用的DAO異常層結構。
Spring WEB:Web上下文模塊建立在上下文模塊(Context)的基礎之上,為基于Web服務的應用程序提供了上下文的服務。所以Spring框架支持 Jakarta Struts的集成。Web模塊還簡化了處理多部分請求及將請求參數(shù)綁定到域對象的工作。
Spring上下文(Context):Spring上下文是一個配置文件,向Spring框架提供上下文信息。Spring上下文包括企業(yè)服務,例如 JNDI、EJB、電子郵件、國際化校驗和調度功能。
Spring MVC:Spring的MVC框架是一個全功能的構建Web應用程序的MVC實現(xiàn)。通過策略接口,MVC框架變成為高度可配置的,MVC容納的大量視圖技術,包括JSP、Velocity、Tiles、iText和Pol
3.IOC的優(yōu)點是什么?
IOC 或依賴注入把應用的代碼量降到最低。它使應用容易測試,單元測試不再需要單例和JNDI查找機制。最小的代價和最小的侵入性使松散耦合得以實現(xiàn)。IOC容器支持加載服務時的餓漢式初始化和懶加載。