您好,登錄后才能下訂單哦!
前言
最近一直都在面試,整理了幾家公司常問的三大框架面試題,現(xiàn)在把它帶答案整理好在這里分享給大家,希望對大家有所幫助。
1 、什么是 Spring 框架?Spring 框架有哪些主要模塊?
Spring 框架是一個為 Java 應(yīng)用程序的開發(fā)提供了綜合、廣泛的基礎(chǔ)性支持的 Java 平臺。
Spring 幫助開發(fā)者解決了開發(fā)中基礎(chǔ)性的問題,使得開發(fā)人員可以專注于應(yīng)用程序的開發(fā)。
Spring 框架本身亦是按照設(shè)計模式精心打造,這使得我們可以在開發(fā)環(huán)境中安心的集成 Spring 框
架,不必?fù)?dān)心 Spring 是如何在后臺進(jìn)行工作的。
Spring 框架至今已集成了 20 多個模塊。這些模塊主要被分如下圖所示的核心容器、數(shù)據(jù)訪問/集
成,、Web、AOP(面向切面編程)、工具、消息和測試模塊。
2 、使用 Spring 框架能帶來哪些好處?
下面列舉了一些使用 Spring 框架帶來的主要好處:
Dependency Injection(DI) 方法使得構(gòu)造器和 JavaBean properties 文件中的依賴關(guān)系一
目了然。
與 EJB 容器相比較,IoC 容器更加趨向于輕量級。這樣一來 IoC 容器在有限的內(nèi)存和 CPU 資
源的情況下進(jìn)行應(yīng)用程序的開發(fā)和發(fā)布就變得十分有利。
Spring 并沒有閉門造車,Spring 利用了已有的技術(shù)比如 ORM 框架、logging 框架、J2EE、Q
uartz 和 JDK Timer,以及其他視圖技術(shù)。
Spring 框架是按照模塊的形式來組織的。由包和類的編號就可以看出其所屬的模塊,開發(fā)者僅
僅需要選用他們需要的模塊即可。
要測試一項用 Spring 開發(fā)的應(yīng)用程序十分簡單,因為測試相關(guān)的環(huán)境代碼都已經(jīng)囊括在框架中
了。更加簡單的是,利用 JavaBean 形式的 POJO 類,可以很方便的利用依賴注入來寫入測試
數(shù)據(jù)。
Spring 的 Web 框架亦是一個精心設(shè)計的 Web MVC 框架,為開發(fā)者們在 web 框架的選擇上
提供了一個除了主流框架比如 Struts、過度設(shè)計的、不流行 web 框架的以外的有力選項。
Spring 提供了一個便捷的事務(wù)管理接口,適用于小型的本地事物處理(比如在單 DB 的環(huán)境
下)和復(fù)雜的共同事物處理(比如利用 JTA 的復(fù)雜 DB 環(huán)境)。
3 、什么是控制反轉(zhuǎn)(IOC) ?什么是依賴注入?
控制反轉(zhuǎn)是應(yīng)用于軟件工程領(lǐng)域中的,在運行時被裝配器對象來綁定耦合對象的一種編程技巧,對
象之間耦合關(guān)系在編譯時通常是未知的。在傳統(tǒng)的編程方式中,業(yè) 務(wù)邏輯的流程是由應(yīng)用程序中的
早已被設(shè)定好關(guān)聯(lián)關(guān)系的對象來決定的。在使用控制反轉(zhuǎn)的情況下,業(yè)務(wù)邏輯的流程是由對象關(guān)系
圖來決定的,該對象關(guān)系圖由裝配 器負(fù)責(zé)實例化,這種實現(xiàn)方式還可以將對象之間的關(guān)聯(lián)關(guān)系的定
義抽象化。而綁定的過程是通過“依賴注入”實現(xiàn)的。
控制反轉(zhuǎn)是一種以給予應(yīng)用程序中目標(biāo)組件更多控制為目的設(shè)計范式,并在我們的實際工作中起到
了有效的作用。
依賴注入是在編譯階段尚未知所需的功能是來自哪個的類的情況下,將其他對象所依賴的功能對象
實例化的模式。這就需要一種機制用來激活相應(yīng)的組件以提供特定的功能,所以依賴注入是控制反
轉(zhuǎn)的基礎(chǔ)。否則如果在組件不受框架控制的情況下,框架又怎么知道要創(chuàng)建哪個組件?
在 Java 中依然注入有以下三種實現(xiàn)方式:
構(gòu)造器注入
Setter 方法注入
4 、請解釋下 Spring 框架中的 IoC ?
Spring 中的 org.springframework.beans 包和 org.springframework.context 包
構(gòu)成了 Spring 框架 IoC 容器的基礎(chǔ)。
BeanFactory 接口提供了一個先進(jìn)的配置機制,使得任何類型的對象的配置成為可能。
ApplicationContex 接口對 BeanFactory (是一個子接口)進(jìn)行了擴(kuò)展,在 BeanFactory
的基礎(chǔ)上添加了其他功能,比如與 Spring 的 AOP 更容易集成,也提供了處理 message resource
的機制(用于國際化)、事件傳播以及應(yīng)用層的特別配置,比如針對 Web 應(yīng)用的
WebApplicationContext。
org.springframework.beans.factory.BeanFactory 是 Spring IoC 容器的具體實現(xiàn),
用來包裝和管理前面提到的各種 bean。BeanFactory 接口是 Spring IoC 容器的核心接口。
IOC:把對象的創(chuàng)建、初始化、銷毀交給 spring 來管理,而不是由開發(fā)者控制,實現(xiàn)控制反轉(zhuǎn)。
1、什么是 Spring MVC?
答:SpringMvc 是 spring 的一個模塊,基于 MVC 的一個框架,無需中間整合層來整合。
2、Spring MVC 的優(yōu)點:
答:
1)它是基于組件技術(shù)的.全部的應(yīng)用對象,無論控制器和視圖,還是業(yè)務(wù)對象之類的都是 java
組件.并且和 Spring 提供的其他基礎(chǔ)結(jié)構(gòu)緊密集成.
2)不依賴于 Servlet API(目標(biāo)雖是如此,但是在實現(xiàn)的時候確實是依賴于 Servlet 的)
3)可以任意使用各種視圖技術(shù),而不僅僅局限于 JSP
4)支持各種請求資源的映射策略
5)它應(yīng)是易于擴(kuò)展的
3、SpringMVC 工作原理?
答:
1)客戶端發(fā)送請求到 DispatcherServlet
2)DispatcherServlet 查詢 handlerMapping 找到處理請求的 Controller
3)Controller 調(diào)用業(yè)務(wù)邏輯后,返回 ModelAndView
4)DispatcherServlet 查詢 ModelAndView,找到指定視圖
5)視圖將結(jié)果返回到客戶端
1、什么是 MyBatis?
答:MyBatis 是一個可以自定義 SQL、存儲過程和高級映射的持久層框架。
2、講下 MyBatis 的緩存
答:MyBatis 的緩存分為一級緩存和二級緩存,一級緩存放在 session 里面,默認(rèn)就有,二級緩
存放在它的命名空間里,默認(rèn)是不打開的,使用二級緩存屬性類需要實現(xiàn) Serializable 序列化
接口(可用來保存對象的狀態(tài)),可在它的映射文件中配置<cache/>
3、Mybatis 是如何進(jìn)行分頁的?分頁插件的原理是什么?
答:
1)Mybatis 使用 RowBounds 對象進(jìn)行分頁,也可以直接編寫 sql 實現(xiàn)分頁,也可以使用
Mybatis 的分頁插件。
2)分頁插件的原理:實現(xiàn) Mybatis 提供的接口,實現(xiàn)自定義插件,在插件的攔截方法內(nèi)攔
截待執(zhí)行的 sql,然后重寫 sql。
舉例:select from student,攔截 sql 后重寫為:select t. from (select * from student)t
limit 0,10
4、簡述 Mybatis 的插件運行原理,以及如何編寫一個插件?
答:
1)Mybatis 僅可以編寫針對 ParameterHandler、ResultSetHandler、StatementHandler、
Executor 這 4 種接口的插件,Mybatis 通過動態(tài)代理,為需要攔截的接口生成代理對象以實
現(xiàn)接口方法攔截功能,每當(dāng)執(zhí)行這 4 種接口對象的方法時,就會進(jìn)入攔截方法,具體就是
InvocationHandler 的 invoke()方法,當(dāng)然,只會攔截那些你指定需要攔截的方法。
2)實現(xiàn) Mybatis 的 Interceptor 接口并復(fù)寫 intercept()方法,然后在給插件編寫注解,指定
要攔截哪一個接口的哪些方法即可,記住,別忘了在配置文件中配置你編寫的插件。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。