Spring簡答題

1:請解釋下Spring框架中的IoC?前端

 Spring中的 org.springframework.beans 包和 org.springframework.context包構成了Spring框架IoC容器的基礎。BeanFactory 接口提供了一個先進的配置機制,使得任何類型的對象的配置成爲可能。ApplicationContex接口對BeanFactory(是一個子接口)進行了擴展,在BeanFactory的基礎上添加了其餘功能,好比與Spring的AOP更容易集成,也提供了處理message resource的機制(用於國際化)、事件傳播以及應用層的特別配置,好比針對Web應用的WebApplicationContext。java

org.springframework.beans.factory.BeanFactory 是Spring IoC容器的具體實現,用來包裝和管理前面提到的各類bean。BeanFactory接口是Spring IoC 容器的核心接口。程序員

---------------------------------------------------------------------------------------------------------------------------------web

2:BeanFactory和ApplicationContext有什麼區別?spring

BeanFactory 能夠理解爲含有bean集合的工廠類。BeanFactory 包含了種bean的定義,以便在接收到客戶端請求時將對應的bean實例化。sql

BeanFactory還能在實例化對象的時生成協做類之間的關係。此舉將bean自身與bean客戶端的配置中解放出來。BeanFactory還包含了bean生命週期的控制,調用客戶端的初始化方法(initialization methods)和銷燬方法(destruction methods)。數據庫

從表面上看,application context如同bean factory同樣具備bean定義、bean關聯關係的設置,根據請求分發bean的功能。但application context在此基礎上還提供了其餘的功能。apache

---------------------------------------------------------------------------------------------------------------------------------編程

3:IOC有什麼優勢?後端

IOC或依賴注入減小了應用程序的代碼量。它使得應用程序的測試很簡單,由於在單元測試中再也不須要單例或JNDI查找機制。簡單的實現以及較少的干擾機制使得鬆耦合得以實現。IOC容器支持勤性單例及延遲加載服務

---------------------------------------------------------------------------------------------------------------------------------

4:Spring應用程序看起來像什麼?

一個定義功能的接口

實現包括屬性,setter和getter方法,功能等Spring AOP 、Spring的XML配置文件

使用該功能的客戶端編程

---------------------------------------------------------------------------------------------------------------------------------

5:Spring中的依賴注入是什麼?

依賴注入做爲控制反轉(IOC)的一個層面,能夠有多種解釋方式。在這個概念中,你不用建立對象而只須要描述如何建立它們。你沒必要經過代碼直接的將組件和         服務鏈接在一塊兒,而是經過配置文件說明哪些組件須要什麼服務。以後IOC容器負責銜接。

---------------------------------------------------------------------------------------------------------------------------------

6:如何向Spring 容器提供配置元數據?

有三種方式向Spring 容器提供元數據:

XML配置文件

基於註解配置

基於Java的配置

---------------------------------------------------------------------------------------------------------------------------------

7:如何定義bean的做用域?

在Spring中建立一個bean的時候,咱們能夠聲明它的做用域。只須要在bean定義的時候經過’scope’屬性定義便可。例如,當Spring須要產生每次一個新的bean實例時,應該聲明bean的scope屬性爲prototype。若是每次你但願Spring返回一個實例,應該聲明bean的scope屬性爲singleton。

---------------------------------------------------------------------------------------------------------------------------------

8:sprinmvc工做原理?:

1.spring mvc請全部的請求都提交給DispatcherServlet,它會委託應用系統的其餘模塊負責負責對請求進行真正的處理工做。

2.DispatcherServlet查詢一個或多個HandlerMapping,找處處理請求的Controller.

3.DispatcherServlet請請求提交到目標Controller

4.Controller進行業務邏輯處理後,會返回一個ModelAndView

5.Dispathcher查詢一個或多個ViewResolver視圖解析器,找到ModelAndView對象指定的視圖對象

6.視圖對象負責渲染返回給客戶端。

---------------------------------------------------------------------------------------------------------------------------------

9:什麼是Spring MVC框架的控制器?

控制器提供對應用程序行爲的訪問,一般經過服務接口實現。控制器解析用戶的輸入,並將其轉換爲一個由視圖呈現給用戶的模型。Spring 經過一種極其抽象的方式實現控制器,它容許用戶建立多種類型的控制器

---------------------------------------------------------------------------------------------------------------------------------

10:什麼是@Qualifier 註解?

當有多個相同類型的bean而只有其中的一個須要自動裝配時,將@Qualifier 註解和@Autowire 註解結合使用消除這種混淆,指明須要裝配的bean。

---------------------------------------------------------------------------------------------------------------------------------

11:怎樣開啓註解裝配?

註解裝配在默認狀況下是不開啓的,爲了使用註解裝配,咱們必須在Spring配置文件中配置 <context:annotation-config/>元素。

---------------------------------------------------------------------------------------------------------------------------------

12:自動裝配有哪些侷限性 ?

重寫: 你仍需用 <constructor-arg>和 <property> 配置來定義依賴,意味着總要重寫自動裝配。

基本數據類型:你不能自動裝配簡單的屬性,如基本數據類型,String字符串,和類。

模糊特性:自動裝配不如顯式裝配精確,若是有可能,建議使用顯式裝配。

---------------------------------------------------------------------------------------------------------------------------------

13:依賴注入有幾種方式?

set注入

構造器注入

自動裝配

---------------------------------------------------------------------------------------------------------------------------------

14:AOP的底層實現?

使用JDK動態代理

---------------------------------------------------------------------------------------------------------------------------------

15:請說明一下AOP中須要的最基本的三個類:

目標類 切面類 代理類

---------------------------------------------------------------------------------------------------------------------------------

16:寫出spring中的註解及其含義(至少6個)

@Component 標識一個受Spring管理的組件

@Respository標識持久層

@Service 標識服務層

@Controller 標識控制層

@Autowired  它能夠對類成員變量、方法及構造函數進行標註,完成自動裝配的工做

@Qualifier 指定注入 Bean 的名稱

---------------------------------------------------------------------------------------------------------------------------------

17:請說一下SpringMVC的執行流程?

1.spring mvc將全部的請求都提交給DispatcherServlet,它會委託應用系統的其餘模塊負責對請求 進行真正的處理工做。

2.DispatcherServlet查詢一個或多個HandlerMapping,找處處理請求的Controller.

3.DispatcherServlet請請求提交到目標Controller

4.Controller進行業務邏輯處理後,會返回一個ModelAndView

5.Dispathcher查詢一個或多個ViewResolver視圖解析器,找到ModelAndView對象指定的視圖對象

6.視圖對象負責渲染返回給客戶端。

---------------------------------------------------------------------------------------------------------------------------------

18:講下SpringMvc和Struts1,Struts2的比較的優點?

性能上Struts1>SpringMvc>Struts2 開發速度上SpringMvc和Struts2差很少,比Struts1要高

---------------------------------------------------------------------------------------------------------------------------------

19:怎麼樣在方法裏面獲得Request,或者Session

直接在方法的形參中聲明request,SpringMvc就自動把request對象傳入

---------------------------------------------------------------------------------------------------------------------------------

20:SpringMVC怎麼樣設定重定向和轉發的

在返回值前面加"forward:"就可讓結果轉發,譬如"forward:user.do?name=method4" 在返回值前面加"redirect:"就可讓返回值重定向,譬如"redirect:http://www.baidu.com"

---------------------------------------------------------------------------------------------------------------------------------

21:什麼是Spring的MVC框架?

Spring 配備構建Web 應用的全功能MVC框架。Spring能夠很便捷地和其餘MVC框架集成,如Struts,Spring 的MVC框架用控制反轉把業務對象和控制邏輯清晰地隔離。它也容許以聲明的方式把請求參數和業務對象綁定。

---------------------------------------------------------------------------------------------------------------------------------

22:DispatcherServlet的做用?

Spring的MVC框架是圍繞DispatcherServlet來設計的,它用來處理全部的HTTP請求和響應。

---------------------------------------------------------------------------------------------------------------------------------

23:WebApplicationContext是幹什麼的?

 WebApplicationContext 繼承了ApplicationContext 並增長了一些WEB應用必備的特有功能,它不一樣於通常的ApplicationContext ,由於它能處理主題,並找到被關聯的servlet。

---------------------------------------------------------------------------------------------------------------------------------

24:什麼是Spring MVC框架的控制器?

控制器提供一個訪問應用程序的行爲,此行爲一般經過服務接口實現。控制器解析用戶輸入並將其轉換爲一個由視圖呈現給用戶的模型。Spring用一個很是抽象的方式實現了一個控制層,容許用戶建立多種用途的控制器。

---------------------------------------------------------------------------------------------------------------------------------

25:Spring 框架中都用到了哪些設計模式?

代理模式—在AOP和remoting中被用的比較多。

單例模式—在spring配置文件中定義的bean默認爲單例模式。

模板方法—用來解決代碼重複的問題。

好比. RestTemplate, JmsTemplate, JpaTemplate。

前端控制器—Srping提供了DispatcherServlet來對請求進行分發。

視圖幫助(View Helper )—Spring提供了一系列的JSP標籤,高效宏來輔助將分散的代碼整合在視圖裏。

依賴注入—貫穿於BeanFactory / ApplicationContext接口的核心理念。

工廠模式—BeanFactory用來建立對象的實例。

---------------------------------------------------------------------------------------------------------------------------------

26:MVC是三層開發結構,這三個字母按順序分別表明

Model、View、Controller

---------------------------------------------------------------------------------------------------------------------------------

27:請簡述什麼是MVC模式?

一、是一種開發軟件工程的設計模式。

二、M即Model,模型,定義數據模型和業務模型,一般由javabean實現;

V即View,視圖,定義與客戶端進行交互的界面,一般由jsp,freemarker實現;

C即Controller,控制器,接收客戶端請求並調用模型和視圖處理請求,一般由servlet實現。

---------------------------------------------------------------------------------------------------------------------------------

28:請寫出SpringMVC中的web.xml文件關於核心控制器的配置內容。[提示:DispatcherServlet]

答:以下所示:

  <servlet>

   <servlet-name>dispatcher</servlet-name>

   <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

   <init-param>

    <param-name>contextConfigLocation</param-name>

    <param-value>classpath:spring-*.xml</param-value>

   </init-param>

   <load-on-startup>1</load-on-startup>

  </servlet>

 

  <servlet-mapping>

   <servlet-name>dispatcher</servlet-name>

   <url-pattern>*.action</url-pattern>

  </servlet-mapping>

---------------------------------------------------------------------------------------------------------------------------------

29:請簡單描述SpringMVC框架的執行流程,要求條理清晰。

答:(1)客戶端在提交請求後,服務器接收請求並轉交給springmvc項目中的前端控制器DispatcherServlet;

(2)DispatcherServlet根據映射把請求轉發給後端處理器Handler,Handler調用模型進行相應的處理;

(3)Handler處理器把處理後的結果封裝到模型和視圖對象[ModelAndView]中並返回到DispatcherServlet;

(4)DispatcherServlet再根據映射找到指定的視圖jsp並對返回數據進行渲染;

(5)視圖jsp把通過渲染以後的數據返回到DispatcherServlet;

(6)DispatcherServlet把最終的結果頁面數據返回給客戶端。

---------------------------------------------------------------------------------------------------------------------------------

30:如何理解ORM概念?請簡單描述。

ORM解決的主要問題是對象關係的映射。域模型和關係模型分別是創建在概念模型的基礎上的。域模型是面向對象的,而關係模型是面向關係的。通常狀況下,一個持久化類和一個表對應,類的每一個實例對應表中的一條記錄,類的每一個屬性對應表的每一個字段。

---------------------------------------------------------------------------------------------------------------------------------

31:ORM技術的特色是什麼?

答:1.提升了開發效率。因爲ORM能夠自動對Entity對象與數據庫中的Table進行字段與屬性的映射,因此咱們實際可能已經不須要一個專用的、龐大的數據訪問層。

  1. ORM提供了對數據庫的映射,不用sql直接編碼,可以像操做對象同樣從數據庫獲取數據。

---------------------------------------------------------------------------------------------------------------------------------

32:在使用MyBatis的mapper方式時應注意哪些問題?

答:

(1)mapper映射與接口必須是相同的主文件名

(2)mapper映射與接口必須在相同的包中

(3)mapper映射中的命名空間屬性[namespace]的值必須是mapper接口的全限定名稱

(4)mapper映射中的操做元素的標識屬性[id]的值必須是mapper接口中相應方法的名稱

(5)若是須要輸入參數,則mapper映射中的操做元素的parameterType屬性的值必須是mapper接口中相應方法的形參類型的全稱

(6)若是存在返回值參數,則mapper映射中的操做元素的resultType屬性的值必須是mapper接口中相應方法的返回值類型的全稱

---------------------------------------------------------------------------------------------------------------------------------

33:簡述在使用測試框架JUnit時經常使用的註解有哪些並說明各自的做用?

答:

@Test(expected,timeout):定義測試用例,expected屬性指按期望拋出的異常,timeout屬性指定執行限定的時間,

 

單位是毫秒

@Before:定義在每一個測試用例執行以前所執行的方法

@After:定義在每一個測試用例執行以後所執行的方法

@BeforeClass:定義在全部測試用例執行以前所執行的靜態方法

@AfterClass:定義在全部測試用例執行以後所執行的靜態方法

---------------------------------------------------------------------------------------------------------------------------------

34:MyBatis編程步驟是什麼樣的?

① 建立SqlSessionFactory

② 經過SqlSessionFactory建立SqlSession

③ 經過sqlsession執行數據庫操做

④ 調用session.commit()提交事務

⑤ 調用session.close()關閉會話

---------------------------------------------------------------------------------------------------------------------------------

35:Mybatis中如何執行批處理?

使用BatchExecutor完成批處理

---------------------------------------------------------------------------------------------------------------------------------

36:請簡述Mybatis的工做流程 ?

(1) 加載配置並初始化

(2) 接收調用請求

(3) 處理操做請求 觸發條件:API 接口層傳遞請求過來

(4)返回處理結果將最終的處理結果返回。

---------------------------------------------------------------------------------------------------------------------------------

37:請說明工做日誌文件log4j.properties的內容應該如何編寫? log4j.rootLogger=debug,stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.conversionPattern=%d %p %c %m%n

---------------------------------------------------------------------------------------------------------------------------------

38:當實體類中的屬性名和表中的字段名不同如何解決?

經過在查詢的sql語句中定義字段名的別名,讓字段名的別名和實體類的屬性名一致

<select id=」selectorder」 parametertype=」int」 resultetype=」me.gacl.domain.order」>

select order_id id, order_no orderno ,order_price price form orders where order_id=#{id};

</select>

---------------------------------------------------------------------------------------------------------------------------------

39:Mybatis鏈接查詢怎麼實現?

使用@Results({

  @Result(column="關聯查詢的字段",property="對象",one = @One(select="徹底限定名.方法名"))

 })

---------------------------------------------------------------------------------------------------------------------------------

 

40:mybatis-spring整合的時候 須要在Spring配置哪一個bean?

SqlsessionfactoryBean

---------------------------------------------------------------------------------------------------------------------------------

41:MyBatis(IBatis)的好處是什麼

ibatis把sql語句從Java源程序中獨立出來, 放在單獨的XML文件中編寫,給程序的維護帶來了很大便利。 ibatis封裝了底層JDBC API的調用細節,並能自動將結果集轉換成Java Bean對象, 大大簡化了Java數據庫編程的重複工做。 由於Ibatis須要程序員本身去編寫sql語句, 程序員能夠結合數據庫自身的特色靈活控制sql語句, 所以可以實現比hibernate等全自動orm框架更高的查詢效率,可以完成複雜查詢

---------------------------------------------------------------------------------------------------------------------------------

42:請寫出4個動態SQL的元素?

if choose where set

---------------------------------------------------------------------------------------------------------------------------------

43:請說出動態SQL的做用:

動態SQL元素和使用JSTL或其餘類型基於XML的文本處理器類似

Mybatis採用功能強大的OGNL表達式來完成

---------------------------------------------------------------------------------------------------------------------------------

44:Mybatis動態sql是作什麼的?簡述一下動態sql的執行原理?

Mybatis動態sql可讓咱們在Xml映射文件內以標籤的形式編寫sql,完成邏輯判斷和動態拼接sql的功能,其執行原理爲,使用OGNL從sql參數對象中計算表達式的值,根據表達式的值動態拼接sql,以此來完成動態sql的功能。

---------------------------------------------------------------------------------------------------------------------------------

45:在實現分頁技術時,一般須要設置哪些變量來講明與分頁邏輯有關的參數?

答:當前頁碼;每頁記錄數;總記錄數;總頁數;當前頁面數據。

---------------------------------------------------------------------------------------------------------------------------------

46:在實現分頁時至少須要獲取哪些數據?

答:當前頁碼,當前頁,總記錄數,總頁數,當前數據

---------------------------------------------------------------------------------------------------------------------------------

47:請簡要說明ResultMap標籤中的各個屬性的意義是什麼?

答:(1)id屬性 ,resultMap標籤的標識。

(2)type屬性 ,返回值的全限定類名,或類型別名。

(3)autoMapping屬性 ,值範圍true(默認值)|false, 設置是否啓動自動映射功能,自動映射功能就是自動查找與字段名小寫同名的屬性名,並調用setter方法。而設置爲false後,則須要在`resultMap`內明確註明映射關係纔會調用對應的setter方法。

---------------------------------------------------------------------------------------------------------------------------------

48:在經過mybatis解決多個對象之間的關係時要使用關係映射,那麼請簡要描述當前我校的學生與班級的對應關係是什麼?

答:從單向來看,一個學生只屬於一個班級,這是單向一對一的關係;一個班級能夠包含多個學生,這是單向一對多的關係。從雙向來看,是雙向一對多或雙向多對一的關係。

---------------------------------------------------------------------------------------------------------------------------------

49:請簡要說明在mybatis中的#{}與${}二者的區別是什麼?

答:(1)在傳遞字符串參數時若是是作爲所有參數則使用#{},若是是作爲部份參數,即包含在單引號中時使用${};(2)若是參數是字段名稱或數據庫中的關鍵字時採用${}便可解決問題。

---------------------------------------------------------------------------------------------------------------------------------

50:請簡要說明Spring框架與MyBatis框架在整合時須要配置的主要步驟是什麼?

答:(1)配置數據源BasicDataSource;

(2)配置會話工廠SqlSessionFactoryBean;

(3)配置映射器的掃描器MapperScannerConfigurer。

---------------------------------------------------------------------------------------------------------------------------------

51:請簡要說明Spring框架與SpringMVC框架在整合時須要配置的主要步驟是什麼?

答:(1)指定控制器層所在的java包位置;

(2)啓用MVC註解功能;

(3)經過InternalResourceViewResolver設置邏輯視圖的前綴和後綴;

(4)建立並註冊類型轉換器ConversionServiceFactoryBean;

(5)註冊CommonsMultipartResolver開啓上傳文件功能;

(6)配置SimpleMappingExceptionResolver啓用異常處理功能

---------------------------------------------------------------------------------------------------------------------------------

52:請簡要說明Spring框架管理業務層時須要配置的主要步驟是什麼?

答:(1)指定業務層所在的java包位置;

(2)配置事務管理器DataSourceTransactionManager;

(3)啓用事務功能或添加相應的事務註解@Transactional。

---------------------------------------------------------------------------------------------------------------------------------

53:如何設置Maven 的編譯級別?

<build> 

    <plugins> 

        <plugin> 

            <groupId>org.apache.maven.plugins</groupId> 

            <artifactId>maven-compiler-plugin</artifactId> 

            <version>2.0.2</version> 

            <configuration> 

                <source>1.8</source> 

                <target>1.8</target> 

            </configuration> 

        </plugin> 

    </plugins> 

</build> 重要!!!!

---------------------------------------------------------------------------------------------------------------------------------

54:Maven 是什麼?

Maven是基於項目對象模型(POM),能夠經過一小段描述信息來管理項目的構建,報告和文檔的軟件項目管理工具。

---------------------------------------------------------------------------------------------------------------------------------

55:安裝Nexus的時候注意什麼?

1.安裝命令是Install

2.開啓管理員權限的CMD

---------------------------------------------------------------------------------------------------------------------------------

56:maven相比其餘傳統項目的幾大好處?

  1. maven統一管理包;2.對應用包的升級方便;3.開發項目不依賴與開發工具;4.集成編譯,測試,打包,發佈,部署,等一條龍服務;5.擁有各類插件

---------------------------------------------------------------------------------------------------------------------------------

57:請簡要說明springmvc中的視圖解析器InternalResourceViewResolver中經常使用的三個屬性的做用?

答:(1);viewClass屬性指明視圖類型;

(2)prefix屬性指明視圖路徑前綴;

(3)suffix屬性指明視圖路徑後綴。

---------------------------------------------------------------------------------------------------------------------------------

58:手寫兩種單例模式

public class Singleton { 

    private static Singleton instance = new Singleton(); 

    private Singleton (){} 

    public static Singleton getInstance() { 

    return instance; 

    } 

public class Singleton { 

    private static Singleton instance; 

    private Singleton (){} 

 

    public static Singleton getInstance() { 

    if (instance == null) { 

        instance = new Singleton(); 

    } 

    return instance; 

    } 

}  ---------------------------------------------------------------------------------------------------------------------------------

59:如何在web.xml中設置編碼?

<filter>

    <filter-name>CharacterEncodingFilter</filter-name>

        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

    <init-param>

        <param-name>encoding</param-name>

        <param-value>utf-8</param-value>

    </init-param>

</filter>

<filter-mapping>

    <filter-name>CharacterEncodingFilter</filter-name>

    <url-pattern>/*</url-pattern>

</filter-mapping>

---------------------------------------------------------------------------------------------------------------------------------

相關文章
相關標籤/搜索