Java程序員如何應對面試?Spring面試題有哪些?Spring是一個輕量級的IOC和AOP容器框架,是爲Java應用程序提供基礎服務的一套框架,目的是用於簡化企業應用程序的開發。隨着Spring框架在企業中的普遍應用,Java程序員在面試過程當中也常常被提問對Spring的掌握。如下是千鋒小編整理的Spring面試題解析,但願可以給你們帶來幫助。程序員
Spring的優勢?面試
1)spring屬於低侵入式設計,代碼的污染極低;spring
2)spring的DI機制將對象之間的依賴關係交由框架處理,減低組件的耦合性;編程
3)Spring提供了AOP技術,支持將一些通用任務,如安全、事務、日誌、權限等進行集中式管理,從而提供更好的複用;安全
4)spring對於主流的應用框架提供了集成支持。網絡
IOC是什麼?session
IOC(Inversion Of Controll,控制反轉)是一種設計思想,將本來在程序中手動建立對象的控制權,交由給Spring框架來管理。IOC容器是Spring用來實現IOC的載體,IOC容器實際上就是一個Map(key、value),Map中存放的是各類對象。框架
這樣能夠很大程度上簡化應用的開發,把應用從複雜的依賴關係中解放出來。IOC容器就像是一個工廠,當須要建立一個對象,只須要配置好配置文件/註解便可,不用考慮對象是如何被建立出來的,大大增長了項目的可維護性且下降了開發難度。ide
AOP是什麼?性能
AOP(Aspect-Oriented Programming,面向切面編程)可以將那些與業務無關,卻爲業務模塊所共同調用的邏輯或責任(例如事務處理、日誌管理、權限控制等)封裝起來,便於減小系統的重複代碼,下降模塊間的耦合度,並有利於將來的可擴展性和可維護性。使用AOP以後咱們能夠把一些通用功能抽象出來,在須要用到的地方直接使用便可,這樣能夠大大簡化代碼量,提升了系統的擴展性。
Spring AOP是基於動態代理的,若是要代理的對象實現了某個接口,那麼Spring AOP就會使用JDK動態代理去建立代理對象;而對於沒有實現接口的對象,就沒法使用JDK動態代理,轉而使用CGlib動態代理生成一個被代理對象的子類來做爲代理。
BeanFactory和ApplicationContext有什麼區別?
1)BeanFactory是Spring裏面最底層的接口,包含了各類Bean的定義,讀取bean配置文檔,管理bean的加載、實例化,控制bean的生命週期,維護bean之間的依賴關係。ApplicationContext接口做爲BeanFactory的派生,除了提供BeanFactory所具備的功能外,還提供了更完整的框架功能。
2)BeanFactroy採用的是延遲加載形式來注入Bean的,即只有在使用到某個Bean時(調用getBean()),纔對該Bean進行加載實例化。ApplicationContext是在容器啓動時,一次性建立了全部的Bean。這樣在容器啓動時,咱們就能夠發現Spring中存在的配置錯誤,這樣有利於檢查所依賴屬性是否注。
3)BeanFactory一般以編程的方式被建立,ApplicationContext還能以聲明的方式建立,如使用ContextLoader。
4)BeanFactory和ApplicationContext都支持BeanPostProcessor、BeanFactoryPostProcessor的使用,但二者之間的區別是:BeanFactory須要手動註冊,而ApplicationContext則是自動註冊。
Spring AOP/AspectJ AOP的區別?
1)Spring AOP屬於運行時加強,而AspectJ是編譯時加強;
2)Spring AOP基於代理(Proxying),而AspectJ基於字節碼操做(Bytecode Manipulation);
3)AspectJ相比於Spring AOP功能更增強大,可是Spring AOP相對來講更簡單。若是切面比較少,那麼二者性能差別不大。可是,當切面太多的話,最好選擇AspectJ,它比SpringAOP快不少。
Spring支持幾種bean的做用域?
1)singleton:默認,每一個容器中只有一個bean的實例,單例的模式由BeanFactory自身來維護。
2)prototype:爲每個bean請求提供一個實例。
3)request:爲每個網絡請求建立一個實例,在請求完成之後,bean會失效並被垃圾回收器回收。
4)session:與request範圍相似,確保每一個session中有一個bean的實例,在session過時後,bean會隨之失效。
5)global-session:全局做用域,global-session和Portlet應用相關。當你的應用部署在Portlet容器中工做時,它包含不少portlet。若是你想要聲明讓全部的portlet共用全局的存儲變量的話,那麼這全局變量須要存儲在global-session中。全局做用域與Servlet中的session做用域效果相同。
固然,不一樣的企業對於求職者的技能需求也會有所不一樣,考察的重點也不盡相同。若是你想了解更多Java就業面試技巧,能夠選擇專業的學習方式,助力你更快更好的入行Java。