一、什麼是Spring框架?Spring框架有哪些主要模塊? Spring框架是一個爲Java應用程序的開發提供了綜合、普遍的基礎性支持的Java平臺。前端
Spring幫助開發者解決了開發中基礎性的問題,使得開發人員能夠專一於應用程序的開發。java
Spring框架自己亦是按照設計模式精心打造,這使得咱們能夠在開發環境中安心的集成Spring框架,沒必要擔憂Spring是如何在後臺進行工做的。web
Spring框架至今已集成了20多個模塊。這些模塊主要被分以下圖所示的核心容器、數據訪問/集成,、Web、AOP(面向切面編程)、工具、消息和測試模塊。spring
二、使用Spring框架能帶來哪些好處? 下面列舉了一些使用Spring框架帶來的主要好處:數據庫
Dependency Injection(DI方法使得構造器和JavaBean properties文件中的依賴關係一目瞭然。編程
與EJB容器相比較,IoC容器更加趨向於輕量級。這樣一來IoC容器在有限的內存和CPU資源的狀況下進行應用程序的開發和發佈就變得十分有利。json
Spring並無閉門造車,Spring利用了已有的技術好比ORM框架、logging框架、J2EE、Quartz和JDK Timer,以及其餘視圖技術。後端
Spring框架是按照模塊的形式來組織的。由包和類的編號就能夠看出其所屬的模塊,開發者僅僅須要選用他們須要的模塊便可。設計模式
要測試一項用Spring開發的應用程序十分簡單,由於測試相關的環境代碼都已經囊括在框架中了。更加簡單的是,利用JavaBean形式的POJO類,能夠很方便的利用依賴注入來寫入測試數據。tomcat
Spring的Web框架亦是一個精心設計的Web MVC框架,爲開發者們在web框架的選擇上提供了一個除了主流框架好比Struts、過分設計的、不流行web框架的之外的有力選項。
Spring提供了一個便捷的事務管理接口,適用於小型的本地事物處理(好比在單DB的環境下)和複雜的共同事物處理(好比利用JTA的複雜DB環境)。
三、什麼是控制反轉(IOC)?什麼是依賴注入? 控制反轉是應用於軟件工程領域中的,在運行時被裝配器對象來綁定耦合對象的一種編程技巧,對象之間耦合關係在編譯時一般是未知的。在傳統的編程方式中,業 務邏輯的流程是由應用程序中的早已被設定好關聯關係的對象來決定的。在使用控制反轉的狀況下,業務邏輯的流程是由對象關係圖來決定的,該對象關係圖由裝配 器負責實例化,這種實現方式還能夠將對象之間的關聯關係的定義抽象化。而綁定的過程是經過「依賴注入」實現的。
控制反轉是一種以給予應用程序中目標組件更多控制爲目的設計範式,並在咱們的實際工做中起到了有效的做用。
依賴注入是在編譯階段還沒有知所需的功能是來自哪一個的類的狀況下,將其餘對象所依賴的功能對象實例化的模式。這就須要一種機制用來激活相應的組件以提供特定的功能,因此依賴注入是控制反轉的基礎。不然若是在組件不受框架控制的狀況下,框架又怎麼知道要建立哪一個組件?
在Java中依然注入有如下三種實現方式:
四、請解釋下Spring框架中的IoC? Spring中的org.springframework.beans 包和org.springframework.context包構成了Spring框架IoC容器的基礎。
BeanFactory 接口提供了一個先進的配置機制,使得任何類型的對象的配置成爲可能。ApplicationContex接口對BeanFactory(是一個子接口)進行了擴展,在BeanFactory的基礎上添加了其餘功能,好比與Spring的AOP更容易集成,也提供了處理message resource的機制(用於國際化)、事件傳播以及應用層的特別配置,好比針對Web應用的WebApplicationContext。
org.springframework.beans.factory.BeanFactory 是Spring IoC容器的具體實現,用來包裝和管理前面提到的各類bean。BeanFactory接口是Spring IoC 容器的核心接口。
IOC:把對象的建立、初始化、銷燬交給spring來管理,而不是由開發者控制,實現控制反轉。
五、BeanFactory和ApplicationContext有什麼區別? BeanFactory 能夠理解爲含有bean集合的工廠類。BeanFactory 包含了種bean的定義,以便在接收到客戶端請求時將對應的bean實例化。
BeanFactory還能在實例化對象的時生成協做類之間的關係。此舉將bean自身與bean客戶端的配置中解放出來。BeanFactory還包含 了bean生命週期的控制,調用客戶端的初始化方法(initialization methods)和銷燬方法(destruction methods)。
從表面上看,application context如同bean factory同樣具備bean定義、bean關聯關係的設置,根據請求分發bean的功能。但applicationcontext在此基礎上還提供了其餘的功能。
2. 統一的資源文件讀取方式
3. 已在監聽器中註冊的bean的事件
如下是三種較常見的 ApplicationContext 實現方式:
一、ClassPathXmlApplicationContext:從classpath的XML配置文件中讀取上下文,並生成上下文定義。應用程序上下文從程序環境變量中
ApplicationContext context = new
ClassPathXmlApplicationContext(「bean.xml」);
複製代碼
二、FileSystemXmlApplicationContext :由文件系統中的XML配置文件讀取上下文。
ApplicationContext context = new
FileSystemXmlApplicationContext(「bean.xml」);
複製代碼
三、XmlWebApplicationContext:由Web應用的XML文件讀取上下文。
四、AnnotationConfigApplicationContext(基於Java配置啓動容器)
六、Spring有幾種配置方式? 將Spring配置到應用開發中有如下三種方式:
七、如何用基於XML配置的方式配置Spring? 在Spring框架中,依賴和服務須要在專門的配置文件來實現,我經常使用的XML格式的配置文件。這些配置文件的格式一般用開頭,而後一系列的bean定義和專門的應用配置選項組成。
SpringXML配置的主要目的時候是使全部的Spring組件均可以用xml文件的形式來進行配置。這意味着不會出現其餘的Spring配置類型(好比聲明的方式或基於Java Class的配置方式)
Spring的XML配置方式是使用被Spring命名空間的所支持的一系列的XML標籤來實現的。Spring有如下主要的命名空間:context、beans、jdbc、tx、aop、mvc和aso。 如:
<beans>
<!-- JSON Support -->
<bean name="viewResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver"/>
<bean name="jsonTemplate" class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"/>
<bean id="restTemplate" class="org.springframework.web.client.RestTemplate"/>
</beans>
複製代碼
下面這個web.xml僅僅配置了DispatcherServlet,這件最簡單的配置便能知足應用程序配置運行時組件的需求。
<web-app>
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
複製代碼
八、如何用基於Java配置的方式配置Spring? Spring對Java配置的支持是由@Configuration註解和@Bean註解來實現的。由@Bean註解的方法將會實例化、配置和初始化一個 新對象,這個對象將由Spring的IoC容器來管理。@Bean聲明所起到的做用與 元素相似。被 @Configuration所註解的類則表示這個類的主要目的是做爲bean定義的資源。被@Configuration聲明的類能夠經過在同一個類的 內部調用@bean方法來設置嵌入bean的依賴關係。 最簡單的@Configuration 聲明類請參考下面的代碼:
@Configuration
public class AppConfig{
@Bean
public MyService myService() {
return new MyServiceImpl();
}
}
複製代碼
對於上面的@Beans配置文件相同的XML配置文件以下:
<beans>
<bean id="myService" class="com.somnus.services.MyServiceImpl"/>
</beans>
複製代碼
上述配置方式的實例化方式以下:利用AnnotationConfigApplicationContext 類進行實例化
public static void main(String[] args) {
ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);
MyService myService = ctx.getBean(MyService.class);
myService.doStuff();
}
要使用組件組建掃描,僅需用@Configuration進行註解便可:
@Configuration
@ComponentScan(basePackages = "com.somnus")
public class AppConfig {
...
}
複製代碼
在上面的例子中,com.acme包首先會被掃到,而後再容器內查找被@Component 聲明的類,找到後將這些類按照Sring bean定義進行註冊。
若是你要在你的web應用開發中選用上述的配置的方式的話,須要用AnnotationConfigWebApplicationContext 類來讀 取配置文件,能夠用來配置Spring的Servlet監聽器ContextLoaderListener或者Spring MVC的DispatcherServlet。
<web-app>
<!-- Configure ContextLoaderListener to use AnnotationConfigWebApplicationContext
instead of the default XmlWebApplicationContext -->
<context-param>
<param-name>contextClass</param-name>
<param-value>
org.springframework.web.context.support.AnnotationConfigWebApplicationContext
</param-value>
</context-param>
<!-- Configuration locations must consist of one or more comma- or space-delimited
fully-qualified @Configuration classes. Fully-qualified packages may also be
specified for component-scanning -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>com.howtodoinjava.AppConfig</param-value>
</context-param>
<!-- Bootstrap the root application context as usual using ContextLoaderListener -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Declare a Spring MVC DispatcherServlet as usual -->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- Configure DispatcherServlet to use AnnotationConfigWebApplicationContext
instead of the default XmlWebApplicationContext -->
<init-param>
<param-name>contextClass</param-name>
<param-value>
org.springframework.web.context.support.AnnotationConfigWebApplicationContext
</param-value>
</init-param>
<!-- Again, config locations must consist of one or more comma- or space-delimited
and fully-qualified @Configuration classes -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>com.howtodoinjava.web.MvcConfig</param-value>
</init-param>
</servlet>
<!-- map all requests for /app/* to the dispatcher servlet -->
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/app/*</url-pattern>
</servlet-mapping>
</web-app
複製代碼
九、怎樣用註解的方式配置Spring?
十、請解釋Spring Bean的生命週期?
十一、Spring Bean的做用域之間有什麼區別?
十二、什麼是Spring inner beans?
1三、Spring框架中的單例Beans是線程安全的麼?
1四、請舉例說明如何在Spring中注入一個Java Collection?
1五、如何向Spring Bean中注入一個Java.util.Properties?
1六、請解釋Spring Bean的自動裝配?
1七、請解釋自動裝配模式的區別?
1八、如何開啓基於註解的自動裝配?
1九、請舉例解釋@Required註解?
20、請舉例解釋@Autowired註解?
2一、請舉例說明@Qualifier註解?
2二、構造方法注入和設值注入有什麼區別?
2三、Spring框架中有哪些不一樣類型的事件?
2四、FileSystemResource和ClassPathResource有何區別?
2五、Spring 框架中都用到了哪些設計模式?
一、什麼是Spring Cloud? Spring cloud流應用程序啓動器是基於Spring Boot的Spring集成應用程序,提供與外部系統的集成。 Spring cloud Task,一個生命週期短暫的微服務框架,用於快速構建執行有限數據處理的應用程序。
二、使用Spring Cloud有什麼優點? 使用Spring Boot開發分佈式微服務時,咱們面臨如下問題
三、服務註冊和發現是什麼意思?Spring Cloud如何實現? 當咱們開始一個項目時,咱們一般在屬性文件中進行全部的配置。隨着愈來愈多的服務開發和部署,添加和修改這些屬性變得更加複雜。有些服務可能會降低,而某些位置可能會發生變化。手動更改屬性可能會產生問題。 Eureka服務註冊和發現能夠在這種狀況下提供幫助。因爲全部服務都在Eureka服務器上註冊並經過調用Eureka服務器完成查找,所以無需處理服務地點的任何更改和處理。
四、負載平衡的意義什麼? 在計算中,負載平衡能夠改善跨計算機,計算機集羣,網絡連接,中央處理單元或磁盤驅動器等多種計算資源的工做負載分佈。負載平衡旨在優化資源使用,最大化吞吐量,最小化響應時間並避免任何單一資源的過載。使用多個組件進行負載平衡而不是單個組件可能會經過冗餘來提升可靠性和可用性。負載平衡一般涉及專用軟件或硬件,例如多層交換機或域名系統服務器進程。
五、什麼是Hystrix?它如何實現容錯? Hystrix是一個延遲和容錯庫,旨在隔離遠程系統,服務和第三方庫的訪問點,當出現故障是不可避免的故障時,中止級聯故障並在複雜的分佈式系統中實現彈性。
一般對於使用微服務架構開發的系統,涉及到許多微服務。這些微服務彼此協做。
思考如下微服務
假設若是上圖中的微服務9失敗了,那麼使用傳統方法咱們將傳播一個異常。但這仍然會致使整個系統崩潰。
隨着微服務數量的增長,這個問題變得更加複雜。微服務的數量能夠高達1000.這是hystrix出現的地方 咱們將使用Hystrix在這種狀況下的Fallback方法功能。咱們有兩個服務employee-consumer使用由employee-consumer公開的服務。
簡化圖以下所示
如今假設因爲某種緣由,employee-producer公開的服務會拋出異常。咱們在這種狀況下使用Hystrix定義了一個回退方法。這種後備方法應該具備與公開服務相同的返回類型。若是暴露服務中出現異常,則回退方法將返回一些值。
六、什麼是Hystrix斷路器?咱們須要它嗎?
七、什麼是Netflix Feign?它的優勢是什麼?
八、什麼是Spring Cloud Bus?咱們須要它嗎?
一、什麼是SpringMvc? SpringMvc是spring的一個模塊,基於MVC的一個框架,無需中間整合層來整合。
二、Spring MVC的優勢: 1)它是基於組件技術的.所有的應用對象,不管控制器和視圖,仍是業務對象之類的都是 java組件.而且和Spring提供的其餘基礎結構緊密集成.
2)不依賴於Servlet API(目標雖是如此,可是在實現的時候確實是依賴於Servlet的)
3)能夠任意使用各類視圖技術,而不只僅侷限於JSP
4)支持各類請求資源的映射策略
5)它應是易於擴展的
三、SpringMVC工做原理? 1)客戶端發送請求到DispatcherServlet
2)DispatcherServlet查詢handlerMapping找處處理請求的Controller
3)Controller調用業務邏輯後,返回ModelAndView
4)DispatcherServlet查詢ModelAndView,找到指定視圖
5)視圖將結果返回到客戶端
四、SpringMVC流程? 1)用戶發送請求至前端控制器DispatcherServlet。
2)DispatcherServlet收到請求調用HandlerMapping處理器映射器。
3)處理器映射器找到具體的處理器(能夠根據xml配置、註解進行查找),生成處理器對象及處理器攔截器(若是有則生成)一併返回給DispatcherServlet。
4)DispatcherServlet調用HandlerAdapter處理器適配器。
5)HandlerAdapter通過適配調用具體的處理器(Controller,也叫後端控制器)。
6)Controller執行完成返回ModelAndView。
7)HandlerAdapter將controller執行結果ModelAndView返回給DispatcherServlet。
8)DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器。
9)ViewReslover解析後返回具體View。
10)DispatcherServlet根據View進行渲染視圖(即將模型數據填充至視圖中)。
11)DispatcherServlet響應用戶。
五、SpringMvc的控制器是否是單例模式,若是是,有什麼問題,怎麼解決? 是單例模式,因此在多線程訪問的時候有線程安全問題,不要用同步,會影響性能的,解決方案是在控制器裏面不能寫字段。
六、若是你也用過struts2.簡單介紹下springMVC和struts2的區別有哪些? 1)springmvc的入口是一個servlet即前端控制器,而struts2入口是一個filter過慮器。
2)springmvc是基於方法開發(一個url對應一個方法),請求參數傳遞到方法的形參,能夠設計爲單例或多例(建議單例),struts2是基於類開發,傳遞參數是經過類的屬性,只能設計爲多例。
3)Struts採用值棧存儲請求和響應的數據,經過OGNL存取數據,springmvc經過參數解析器是將request請求內容解析,並給方法形參賦值,將數據和視圖封裝成ModelAndView對象,最後又將ModelAndView中的模型數據經過reques域傳輸到頁面。Jsp視圖解析器默認使用jstl。
七、SpingMvc中的控制器的註解通常用那個,有沒有別的註解能夠替代? 通常用@Conntroller註解,表示是表現層,不能用用別的註解代替。
八、 @RequestMapping註解用在類上面有什麼做用? 是一個用來處理請求地址映射的註解,可用於類或方法上。用於類上,表示類中的全部響應請求的方法都是以該地址做爲父路徑。
九、怎麼樣把某個請求映射到特定的方法上面? 直接在方法上面加上註解@RequestMapping,而且在這個註解裏面寫上要攔截的路徑
十、若是在攔截請求中,我想攔截get方式提交的方法,怎麼配置? 能夠在@RequestMapping註解裏面加上method=RequestMethod.GET
十一、怎麼樣在方法裏面獲得Request,或者Session?
十二、我想在攔截的方法裏面獲得從前臺傳入的參數,怎麼獲得?
1三、若是前臺有不少個參數傳入,而且這些參數都是一個對象的,那麼怎麼樣快速獲得這個對象?
1四、SpringMvc中函數的返回值是什麼?
1五、SpringMVC怎麼樣設定重定向和轉發的?
1六、SpringMvc用什麼對象從後臺向前臺傳遞數據的?
1七、SpringMvc中有個類把視圖和數據都合併的一塊兒的,叫什麼?
1八、怎麼樣把ModelMap裏面的數據放入Session裏面?
1九、SpringMvc怎麼和AJAX相互調用的?
20、當一個方法向AJAX返回特殊對象,譬如Object,List等,須要作什麼處理?
2一、SpringMvc裏面攔截器是怎麼寫的
2二、講下SpringMvc的執行流程
一、什麼是Spring Boot? 多年來,隨着新功能的增長,spring變得愈來愈複雜。只需訪問https://spring.io/projects頁面,咱們就會看到能夠在咱們的應用程序中使用的全部Spring項目的不一樣功能。若是必須啓動一個新的Spring項目,咱們必須添加構建路徑或添加Maven依賴關係,配置應用程序服務器,添加spring配置。所以,開始一個新的spring項目須要不少努力,由於咱們如今必須從頭開始作全部事情。
Spring Boot是解決這個問題的方法。Spring Boot已經創建在現有spring框架之上。使用spring啓動,咱們避免了以前咱們必須作的全部樣板代碼和配置。所以,Spring Boot能夠幫助咱們以最少的工做量,更加健壯地使用現有的Spring功能。
二、Spring Boot有哪些優勢?
三、什麼是JavaConfig? Spring JavaConfig是Spring社區的產品,它提供了配置Spring IoC容器的純Java方法。所以它有助於避免使用XML配置。使用JavaConfig的優勢在於:
面向對象的配置。因爲配置被定義爲JavaConfig中的類,所以用戶能夠充分利用Java中的面向對象功能。一個配置類能夠繼承另外一個,重寫它的@Bean方法等。
減小或消除XML配置。基於依賴注入原則的外化配置的好處已被證實。可是,許多開發人員不但願在XML和Java之間來回切換。JavaConfig爲開發人員提供了一種純Java方法來配置與XML配置概念類似的Spring容器。從技術角度來說,只使用JavaConfig配置類來配置容器是可行的,但實際上不少人認爲將JavaConfig與XML混合匹配是理想的。
類型安全和重構友好。JavaConfig提供了一種類型安全的方法來配置Spring容器。因爲Java 5.0對泛型的支持,如今能夠按類型而不是按名稱檢索bean,不須要任何強制轉換或基於字符串的查找。
四、如何從新加載Spring Boot上的更改,而無需從新啓動服務器? 這可使用DEV工具來實現。經過這種依賴關係,您能夠節省任何更改,嵌入式tomcat將從新啓動。Spring Boot有一個開發工具(DevTools)模塊,它有助於提升開發人員的生產力。Java開發人員面臨的一個主要挑戰是將文件更改自動部署到服務器並自動重啓服務器。開發人員能夠從新加載Spring Boot上的更改,而無需從新啓動服務器。這將消除每次手動部署更改的須要。Spring Boot在發佈它的第一個版本時沒有這個功能。這是開發人員最須要的功能。DevTools模塊徹底知足開發人員的需求。該模塊將在生產環境中被禁用。它還提供H2數據庫控制檯以更好地測試應用程序。
五、Spring Boot中的監視器是什麼? Spring boot actuator是spring啓動框架中的重要功能之一。Spring boot監視器可幫助您訪問生產環境中正在運行的應用程序的當前狀態。有幾個指標必須在生產環境中進行檢查和監控。即便一些外部應用程序可能正在使用這些服務來向相關人員觸發警報消息。監視器模塊公開了一組可直接做爲HTTP URL訪問的REST端點來檢查狀態。
六、如何在Spring Boot中禁用Actuator端點安全性? 默認狀況下,全部敏感的HTTP端點都是安全的,只有具備ACTUATOR角色的用戶才能訪問它們。安全性是使用標準的HttpServletRequest.isUserInRole方法實施的。 咱們可使用:management.security.enabled = false 來禁用安全性。只有在執行機構端點在防火牆後訪問時,才建議禁用安全性。
七、如何在自定義端口上運行Spring Boot應用程序? 爲了在自定義端口上運行Spring Boot應用程序,您能夠在application.properties中指定端口。
八、什麼是YAML? YAML是一種人類可讀的數據序列化語言。它一般用於配置文件。
與屬性文件相比,若是咱們想要在配置文件中添加複雜的屬性,YAML文件就更加結構化,並且更少混淆。能夠看出YAML具備分層配置數據。
九、如何實現Spring Boot應用程序的安全性? 爲了實現Spring Boot的安全性,咱們使用 spring-boot-starter-security依賴項,而且必須添加安全配置。它只須要不多的代碼。配置類將必須擴展WebSecurityConfigurerAdapter並覆蓋其方法。
十、如何集成Spring Boot和ActiveMQ? 對於集成Spring Boot和ActiveMQ,咱們使用
spring-boot-starter-activemq 依賴關係。 它只須要不多的配置,而且不須要樣板代碼。
十一、如何使用Spring Boot實現分頁和排序?
十二、什麼是Swagger?你用Spring Boot實現了它嗎?
1三、什麼是Spring Profiles?
1四、什麼是Spring Batch?
1五、什麼是FreeMarker模板?
1六、如何使用Spring Boot實現異常處理?
1七、您使用了哪些starter maven依賴項?
1八、什麼是CSRF攻擊?
1九、什麼是WebSockets?
20、什麼是AOP?
2一、什麼是Apache Kafka?
2二、咱們如何監視全部Spring Boot微服務?