給大家分享一下常見(jiàn)的Spring框架面試題

獵蘿卜給大家分享一下常見(jiàn)的Spring框架面試題
作為一名高級(jí)java工程師,不僅要具備扎實(shí)的理論功底,還要有較多的項(xiàng)目經(jīng)驗(yàn),要對(duì)市面上的主流技術(shù)有一個(gè)大致的了解??蚣苣軌蛱嵘绦蜷_(kāi)發(fā)效率,也是高薪Java工程師面試必問(wèn)的技術(shù),今天邯鄲英才小編就給大家分享一下常見(jiàn)的Spring框架面試題。1、什么是Spring? Spring是個(gè)Java企業(yè)級(jí)應(yīng)用的開(kāi)源開(kāi)發(fā)框架。Spring主要用來(lái)開(kāi)發(fā)Java應(yīng)用,但是有些擴(kuò)展是針對(duì)構(gòu)建J2EE平臺(tái)的web應(yīng)用。Spring框架目標(biāo)是簡(jiǎn)化Java企業(yè)級(jí)應(yīng)用開(kāi)發(fā),并通過(guò)POJO為基礎(chǔ)的編程模型促進(jìn)良好的編程習(xí)慣。2、選擇使用Spring框架的原因? 使用Spring: 第一是使用它的IOC功能,在解耦上達(dá)到了配置級(jí)別。 第二是使用它對(duì)數(shù)據(jù)庫(kù)訪問(wèn)事務(wù)相關(guān)的封裝。 第三就是各種其他組件與Spring的融合,在Spring中更加方便快捷的繼承其他一些組件。3、Spring 是如何管理事務(wù)的? spring的事務(wù)聲明有兩種方式,編程式和聲明式。spring主要是通過(guò)“聲明式事務(wù)”的方式對(duì)事務(wù)進(jìn)行管理,即在配置文件中進(jìn)行聲明,通過(guò)AOP將事務(wù)切面切入程序,最大的好處是大大減少了代碼量。4、Spring IoC容器配置Bean的方式? 1)基于XML文件進(jìn)行配置。 2)基于注解進(jìn)行配置。 3)基于Java程序進(jìn)行配置(Spring 3+)5、Spring框架有哪些不同的模塊? 核心容器模塊、應(yīng)用上下文模塊Application context、AOP模塊、JDBC抽象和DAO模塊、O/R映射整合模塊、Web模塊、MVC框架模塊。6、一個(gè)簡(jiǎn)單的Spring應(yīng)用程序包括什么? 這些應(yīng)用程序像任何Java應(yīng)用程序。它們是由多個(gè)類組成,每個(gè)類執(zhí)行應(yīng)用程序內(nèi)的一個(gè)特定的功能。這些類的配置是通過(guò)一個(gè)XML文件向?qū)Ψ綄?dǎo)入依賴。此XML文件描述如何配置類,稱為Spring配置文件。7、如何給Spring容器提供配置元數(shù)據(jù)? 有三種重要的方法給Spring 容器提供配置元數(shù)據(jù):XML配置文件、基于注解的配置、基于Java的配置。8、在Spring中如何注入一個(gè)Java集合? Spring提供以下幾種集合的配置元素: 1)<list>類型用于注入一列值,允許有相同的值。 2)<set> 類型用于注入一組值,不允許有相同的值。 3)<map> 類型用于注入一組鍵值對(duì),鍵和值都可以為任意類型。 4)<props>類型用于注入一組鍵值對(duì),鍵和值都只能為String類型。9、在Spring框架中如何更有效地使用JDBC? 使用Spring JDBC框架,資源管理和錯(cuò)誤處理的代價(jià)都會(huì)被減輕。所以開(kāi)發(fā)者只需statements和queries從數(shù)據(jù)存取數(shù)據(jù),JDBC也可以在Spring框架提供的模板類的幫助下更有效地被使用,這個(gè)模板叫JDBC Template 。10、Bean 是如何被管理的? 在Spring框架中,一旦把一個(gè)bean納入到Spring IoC容器之中,這個(gè)bean的生命周期就會(huì)交由容器進(jìn)行管理,一般擔(dān)當(dāng)管理者角色的是BeanFactory或ApplicationContext。認(rèn)識(shí)一下Bean的生命周期活動(dòng),對(duì)更好的利用它有很大的幫助。 概括來(lái)說(shuō)主要有四個(gè)階段:實(shí)例化,初始化,使用,銷毀。11、Spring中的自動(dòng)裝配有哪些限制? 1)如果使用了構(gòu)造器注入或者setter注入,那么將覆蓋自動(dòng)裝配的依賴關(guān)系。 2)基本數(shù)據(jù)類型的值、字符串字面量、類字面量無(wú)法使用自動(dòng)裝配來(lái)注入。 3)優(yōu)先考慮使用顯式的裝配來(lái)進(jìn)行更精確的依賴注入而不是使用自動(dòng)裝配。12、Resource 是如何被查找、加載的? Resource 接口是 Spring 資源訪問(wèn)策略的抽象,它本身并不提供任何資源訪問(wèn)實(shí)現(xiàn),具體的資源訪問(wèn)由該接口的實(shí)現(xiàn)類完成——每個(gè)實(shí)現(xiàn)類代表一種資源訪問(wèn)策略。Spring 為 Resource 接口提供了如下實(shí)現(xiàn)類: 1)UrlResource:訪問(wèn)網(wǎng)絡(luò)資源的實(shí)現(xiàn)類。 2)ClassPathResource:訪問(wèn)類加載路徑里資源的實(shí)現(xiàn)類。 3)FileSystemResource:訪問(wèn)文件系統(tǒng)里資源的實(shí)現(xiàn)類。 4)ServletContextResource:訪問(wèn)相對(duì)于 ServletContext 路徑里的資源的實(shí)現(xiàn)類: 5)InputStreamResource:訪問(wèn)輸入流資源的實(shí)現(xiàn)類。 6)ByteArrayResource:訪問(wèn)字節(jié)數(shù)組資源的實(shí)現(xiàn)類。 這些 Resource 實(shí)現(xiàn)類,針對(duì)不同的的底層資源,提供了相應(yīng)的資源訪問(wèn)邏輯,并提供便捷的包裝,以利于客戶端程序的資源訪問(wèn)。13、有哪些常用的 Context? 最常被使用的 ApplicationContext 接口實(shí)現(xiàn): 1)FileSystemXmlApplicationContext:該容器從 XML 文件中加載已被定義的 bean。在這里,你需要提供給構(gòu)造器 XML 文件的完整路徑。 2)ClassPathXmlApplicationContext:該容器從 XML 文件中加載已被定義的 bean。在這里,你不需要提供 XML 文件的完整路徑,只需正確配置 CLASSPATH 環(huán)境變量即可,因?yàn)?,容器?huì)從 CLASSPATH 中搜索 bean 配置文件。 3)WebXmlApplicationContext:該容器會(huì)在一個(gè) web 應(yīng)用程序的范圍內(nèi)加載在 XML 文件中已被定義的 bean。14、Spring中Bean的作用域有哪些? 1)singleton作用域 在默認(rèn)情況下,spring的ApplicationContext容器在啟動(dòng)時(shí),自動(dòng)實(shí)例化所有singleton的Bean并緩存于容器中.雖然啟動(dòng)時(shí)會(huì)花費(fèi)一些時(shí)間,但帶來(lái)兩個(gè)好處:首先對(duì)Bean提前的實(shí)例化操作會(huì)及早發(fā)現(xiàn)一些潛在的配置問(wèn)題.其次Bean以緩存的方式保存,當(dāng)運(yùn)行時(shí)使用到該Bean時(shí)就無(wú)須再實(shí)例化了,加快了運(yùn)行效率.如果用戶不希望在容器啟動(dòng)時(shí)提前實(shí)例化singleton的Bean,可以通過(guò)lazy-init屬性進(jìn)行控制. 2)prototype作用域 在默認(rèn)情況下,spring容器在啟動(dòng)時(shí)不實(shí)例化prototype的Bean.此外,spring容器將prototype的Bean交給調(diào)用者后,就不再管理它的生命周期. 3)request作用域 每次HTTP請(qǐng)求都會(huì)創(chuàng)建一個(gè)新的Bean,HTTP請(qǐng)求處理完畢后,銷毀這個(gè)Bean.該作用域僅適用于webApplicationContext環(huán)境. 4)session作用域 同一個(gè)HTTP session共享一個(gè)Bean,不同HTTP session使用不同的Bean,當(dāng)HTTP Session結(jié)束后,實(shí)例才被銷毀.該作用域僅適用于webApplicationContext環(huán)境 5)globalSession作用域 同一個(gè)全局session共享一個(gè)Bean,一般用于portlet應(yīng)用環(huán)境,該作用域僅適用于webApplicationContext環(huán)境.15、什么是IoC和DI?DI是如何實(shí)現(xiàn)的? 1)IOC IOC是Inversion of Control的縮寫,“控制反轉(zhuǎn)”之意。 軟件系統(tǒng)在沒(méi)有引入IOC容器之前,對(duì)象A依賴于對(duì)象B,那么對(duì)象A在初始化或者運(yùn)行到某一點(diǎn)的時(shí)候,自己必須主動(dòng)去創(chuàng)建對(duì)象B或者使用已經(jīng)創(chuàng)建的對(duì)象B。無(wú)論是創(chuàng)建還是使用對(duì)象B,控制權(quán)都在自己手上。 軟件系統(tǒng)在引入IOC容器之后,這種情形就完全改變了,由于IOC容器的加入,對(duì)象A與對(duì)象B之間失去了直接聯(lián)系,所以,當(dāng)對(duì)象A運(yùn)行到需要對(duì)象B的時(shí)候,IOC容器會(huì)主動(dòng)創(chuàng)建一個(gè)對(duì)象B注入到對(duì)象A需要的地方。 通過(guò)前后的對(duì)比,我們不難看出來(lái):對(duì)象A獲得依賴對(duì)象B的過(guò)程,由主動(dòng)行為變?yōu)榱吮粍?dòng)行為,控制權(quán)顛倒過(guò)來(lái)了,這就是“控制反轉(zhuǎn)”這個(gè)名稱的由來(lái)。 2)DI 2004年,Martin Fowler探討了同一個(gè)問(wèn)題,既然IOC是控制反轉(zhuǎn),那么到底是“哪些方面的控制被反轉(zhuǎn)了呢?”,經(jīng)過(guò)詳細(xì)地分析和論證后,他得出了答案:“獲得依賴對(duì)象的過(guò)程被反轉(zhuǎn)了”。控制被反轉(zhuǎn)之后,獲得依賴對(duì)象的過(guò)程由自身管理變?yōu)榱擞蒊OC容器主動(dòng)注入。 依賴注入(DI)和控制反轉(zhuǎn)(IOC)是從不同的角度的描述的同一件事情,就是指通過(guò)引入IOC容器,利用依賴關(guān)系注入的方式,實(shí)現(xiàn)對(duì)象之間的解耦。 3)優(yōu)點(diǎn) 降低類之間耦合,可維護(hù)性比較好,非常便于進(jìn)行單元測(cè)試,便于調(diào)試程序和診斷故障。 模塊之間通過(guò)接口交流,互不干擾,便于團(tuán)隊(duì)開(kāi)發(fā)。 可復(fù)用性好 模塊具有熱插拔特性,可直接修改配置文件。 4)缺點(diǎn) 引入了第三方IOC容器,生成對(duì)象的步驟變得有些復(fù)雜 IOC容器生成對(duì)象是通過(guò)反射方式,在運(yùn)行效率上有一定的損耗。 額外的配置工作。16、如何通過(guò)HibernateDaoSupport將Spring和Hibernate結(jié)合起來(lái)? 用Spring的SessionFactory調(diào)用LocalSessionFactory。集成過(guò)程分三步: 配置the Hibernate Session Factory、繼承HibernateDaoSupport實(shí)現(xiàn)一個(gè)DAO、在AOP支持的事務(wù)中裝配。17、解釋一下Spring MVC框架及其控制器 Spring配備構(gòu)建Web應(yīng)用的全功能MVC框架。Spring可以很便捷地和其他MVC框架集成,如Struts、Spring的MVC框架用控制反轉(zhuǎn)把業(yè)務(wù)對(duì)象和控制邏輯清晰地隔離。它也允許以聲明的方式把請(qǐng)求參數(shù)和業(yè)務(wù)對(duì)象綁定。 控制器提供一個(gè)訪問(wèn)應(yīng)用程序的行為,此行為通常通過(guò)服務(wù)接口實(shí)現(xiàn)??刂破鹘馕鲇脩糨斎氩⑵滢D(zhuǎn)換為一個(gè)由視圖呈現(xiàn)給用戶的模型。Spring用一個(gè)非常抽象的方式實(shí)現(xiàn)了一個(gè)控制層,允許用戶創(chuàng)建多種用途的控制器。18、Spring MVC的工作原理是怎樣的? Spring MVC的工作原理如所示: 1)客戶端的所有請(qǐng)求都交給前端控制器DispatcherServlet來(lái)處理,它會(huì)負(fù)責(zé)調(diào)用系統(tǒng)的其他模塊來(lái)真正處理用戶的請(qǐng)求。 2)DispatcherServlet收到請(qǐng)求后,將根據(jù)請(qǐng)求的信息(包括URL、HTTP協(xié)議方法、請(qǐng)求頭、請(qǐng)求參數(shù)、Cookie等)以及HandlerMapping的配置找到處理該請(qǐng)求的Handler(任何一個(gè)對(duì)象都可以作為請(qǐng)求的Handler)。 3)在這個(gè)地方Spring會(huì)通過(guò)HandlerAdapter對(duì)該處理器進(jìn)行封裝。 4)HandlerAdapter是一個(gè)適配器,它用統(tǒng)一的接口對(duì)各種Handler中的方法進(jìn)行調(diào)用。 5)Handler完成對(duì)用戶請(qǐng)求的處理后,會(huì)返回一個(gè)ModelAndView對(duì)象給DispatcherServlet,ModelAndView顧名思義,包含了數(shù)據(jù)模型以及相應(yīng)的視圖的信息。 6)ModelAndView的視圖是邏輯視圖,DispatcherServlet還要借助ViewResolver完成從邏輯視圖到真實(shí)視圖對(duì)象的解析工作。 7)當(dāng)?shù)玫秸嬲囊晥D對(duì)象后,DispatcherServlet會(huì)利用視圖對(duì)象對(duì)模型數(shù)據(jù)進(jìn)行渲染。 8)客戶端得到響應(yīng),可能是一個(gè)普通的HTML頁(yè)面,也可以是XML或JSON字符串,還可以是一張圖片或者一個(gè)PDF文件。19、什么是Spring的內(nèi)部bean? 當(dāng)一個(gè)bean僅被用作另一個(gè)bean的屬性時(shí),它能被聲明為一個(gè)內(nèi)部bean,為了定義inner bean,在Spring 的 基于XML的 配置元數(shù)據(jù)中,可以在或元素內(nèi)使用 元素,內(nèi)部bean通常是匿名的,它們的Scope一般是prototype。20、在Spring框架中如何更有效地使用JDBC? 使用SpringJDBC 框架,資源管理和錯(cuò)誤處理的代價(jià)都會(huì)被減輕。所以開(kāi)發(fā)者只需寫statements 和 queries從數(shù)據(jù)存取數(shù)據(jù),JDBC也可以在Spring框架提供的模板類的幫助下更有效地被使用,這個(gè)模板叫JdbcTemplate (例子見(jiàn)這里here) 1)JdbcTemplate JdbcTemplate 類提供了很多便利的方法解決諸如把數(shù)據(jù)庫(kù)數(shù)據(jù)轉(zhuǎn)變成基本數(shù)據(jù)類型或?qū)ο螅瑘?zhí)行寫好的或可調(diào)用的數(shù)據(jù)庫(kù)操作語(yǔ)句,提供自定義的數(shù)據(jù)錯(cuò)誤處理。 2)Spring對(duì)DAO的支持 Spring對(duì)數(shù)據(jù)訪問(wèn)對(duì)象(DAO)的支持旨在簡(jiǎn)化它和數(shù)據(jù)訪問(wèn)技術(shù)如JDBC,Hibernate or JDO 結(jié)合使用。這使我們可以方便切換持久層。編碼時(shí)也不用擔(dān)心會(huì)捕獲每種技術(shù)特有的異常。 當(dāng)然,以上只是部分高級(jí)Java工程師面試會(huì)遇到的問(wèn)題,如果你想成為企業(yè)高薪競(jìng)聘的人才,一定要與時(shí)俱進(jìn)更新知識(shí)體系!收藏 0打賞作者邯鄲英才網(wǎng)人力資源管理工具有哪些?9個(gè)人力資源管理工具職場(chǎng)上要加薪請(qǐng)問(wèn)憑什么?薪酬體系改了但有一些人不符合新的薪酬體系該怎么辦? 面試題Spring框架面試題
