溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java工程師有哪些常見spring面試題

發布時間:2021-10-29 17:41:56 來源:億速云 閱讀:176 作者:iii 欄目:編程語言

本篇內容主要講解“Java工程師有哪些常見spring面試題”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Java工程師有哪些常見spring面試題”吧!

1. 談談你對spring的理解

    Spring是一個開源的輕量級的IoC和AOP容器框架,它為Java 應用程序提供了全面的基礎設施,其目的是簡化企業應用程序的開發,它使得開發者只需要關心業務需求,從而提高開發效率和系統的可維護性。

2.spring的配置方式

    spring常見的配置方式:基于XML的配置、基于注解的配置、基于Java的配置。

3.請列舉一下spring中有那些重要的模塊

    Spring Core:核心類庫,其spring所有功能都依賴于該類庫,提供IOC服務;

    Spring Context:提供框架式的Bean訪問方式,以及企業級功能(JNDI、定時任務等);

    Spring AOP:AOP服務,提供面向方面的編程實現;

    Spring DAO:對JDBC的抽象,簡化了數據訪問異常的處理;

    Spring ORM:對現有的ORM框架的支持,例如:對Hibernate的支持;

    Spring Web:為創建Web應用程序提供綜合性支持,例如多方文件上傳;

    Spring MVC:提供面向Web應用的Model-View-Controller(即:模型-視圖-控制器)實現;

    Spring Test:提供了對JUnit和TestNG測試的支持;

    Spring Aspects:該模塊為與AspectJ的集成提供支持。

4.spring有那些優點

    (1)spring采用低侵入式設計,大大降低了代碼污染;

    (2)spring通過DI機制將對象之間的依賴關系交由框架處理,減低組件的耦合性;

    (3)Spring AOP技術,將一些通用任務,如安全、事務、日志、權限等進行集中式管理,從而提供更好的復用。

    (4)spring對于主流的應用框架提供了很好集成支持。

5.談談你對 Spring IoC 和 AOP的理解

     IoC 控制反轉,是指創建對象的控制權的轉移,以前創建對象的主動權和時機是由自己把控的,而現在這種權力轉移到Spring容器中,并由容器根據配置文件去創建實例和管理各個實例之間的依賴關系,對象與對象之間松散耦合,也利于功能的復用。DI依賴注入,和控制反轉是同一個概念的不同角度的描述,即 應用程序在運行時依賴IoC容器來動態注入對象需要的外部資源。  

    AOP面向切面編程,可以說它是對面向對象編程(注:面向對象簡稱(OOP): 允許開發者定義縱向的關系,但并適用于定義橫向的關系,導致了大量代碼的重復,而不利于各個模塊的重用)的一種補充用于將那些與業務無關,但卻對多個對象產生影響的公共行為和邏輯,抽取并封裝為一個可重用的模塊,這個模塊被命名為“切面”(Aspect),減少系統中的重復代碼,降低了模塊間的耦合度,同時提高了系統的可維護性??捎糜跈嘞拚J證、日志、事務處理。

6.Spring IoC 的注入方式

    注入方式:構造器注入、注解注入、setter方法注入

7.BeanFactory和ApplicationContext有什么區別?

    BeanFactory和ApplicationContext是Spring的兩大核心接口,都可以當做Spring的容器。其中ApplicationContext是BeanFactory的子接口。

    (1)BeanFactory:是Spring里面最底層的接口,包含了各種Bean的定義,讀取bean配置文檔,管理bean的加載、實例化,控制bean的生命周期,維護bean之間的依賴關系。ApplicationContext接口作為BeanFactory的派生,除了提供BeanFactory所具有的功能外,還提供了更完整的框架功能:

        ①繼承MessageSource,因此支持國際化。

        ②統一的資源文件訪問方式。
        ③提供在監聽器中注冊bean的事件。
        ④同時加載多個配置文件。
        ⑤載入多個(有繼承關系)上下文 ,使得每一個上下文都專注于一個特定的層次,比如應用的web層。

  (2)①BeanFactroy采用的是延遲加載形式來注入Bean的,即只有在使用到某個Bean時(調用getBean()),才對該Bean進行加載實例化。這樣,我們就不能發現一些存在的Spring的配置問題。如果Bean的某一個屬性沒有注入,BeanFacotry加載后,直至第一次使用調用getBean方法才會拋出異常。

        ②ApplicationContext,它是在容器啟動時,一次性創建了所有的Bean。這樣,在容器啟動時,我們就可以發現Spring中存在的配置錯誤,這樣有利于檢查所依賴屬性是否注入。 ApplicationContext啟動后預載入所有的單實例Bean,通過預載入單實例bean ,確保當你需要的時候,你就不用等待,因為它們已經創建好了。

        ③相對于基本的BeanFactory,ApplicationContext 唯一的不足是占用內存空間。當應用程序配置Bean較多時,程序啟動較慢。

    (3)BeanFactory通常以編程的方式被創建,ApplicationContext還能以聲明的方式創建,如使用ContextLoader。

(4)BeanFactory和ApplicationContext都支持BeanPostProcessor、BeanFactoryPostProcessor的使用,但兩者之間的區別是:BeanFactory需要手動注冊,而ApplicationContext則是自動注冊。

8.Spring AOP和AspectJ AOP有什么區別?

    Spring AOP是屬于運行時增強,而AspectJ是編譯時增強。Spring AOP基于代理(Proxying),而AspectJ基于字節碼操作(Bytecode Manipulation)。
    Spring AOP已經集成了AspectJ,AspectJ應該算得上是Java生態系統中最完整的AOP框架了。AspectJ相比于Spring AOP功能更加強大,但是Spring AOP相對來說更簡單。
    如果我們的切面比較少,那么兩者性能差異不大。但是,當切面太多的話,最好選擇AspectJ,它比SpringAOP快很多。

9.Spring中的bean生命周期

(1)實例化Bean:
    對于BeanFactory容器,當客戶向容器請求一個尚未初始化的bean時,或初始化bean的時候需要注入另一個尚未初始化的依賴時,容器就會調用createBean進行實例化。對于ApplicationContext容器,當容器啟動結束后,通過獲取BeanDefinition對象中的信息,實例化所有的bean。


(2)設置對象屬性(依賴注入):
    實例化后的對象被封裝在BeanWrapper對象中,緊接著,Spring根據BeanDefinition中的信息 以及 通過BeanWrapper提供的設置屬性的接口完成依賴注入。


(3)處理Aware接口:
    接著,Spring會檢測該對象是否實現了xxxAware接口,并將相關的xxxAware實例注入給Bean:
        ①如果這個Bean已經實現了BeanNameAware接口,會調用它實現的setBeanName(String beanId)方法,此處傳遞的就是Spring配置文件中Bean的id值;
        ②如果這個Bean已經實現了BeanFactoryAware接口,會調用它實現的setBeanFactory()方法,傳遞的是Spring工廠自身。
        ③如果這個Bean已經實現了ApplicationContextAware接口,會調用setApplicationContext(ApplicationContext)方法,傳入Spring上下文;


(4)BeanPostProcessor:
    如果想對Bean進行一些自定義的處理,那么可以讓Bean實現了BeanPostProcessor接口,那將會調用postProcessBeforeInitialization(Object obj, String s)方法。


(5)InitializingBean 與 init-method:
       如果Bean在Spring配置文件中配置了 init-method 屬性,則會自動調用其配置的初始化方法。


(6)如果這個Bean實現了BeanPostProcessor接口,將會調用postProcessAfterInitialization(Object obj, String s)方法;由于這個方法是在Bean初始化結束時調用的,所以可以被應用于內存或緩存技術;
以上幾個步驟完成后,Bean就已經被正確創建了,之后就可以使用這個Bean了。


(7)DisposableBean:
    當Bean不再需要時,會經過清理階段,如果Bean實現了DisposableBean這個接口,會調用其實現的destroy()方法;


(8)destroy-method:
    最后,如果這個Bean的Spring配置中配置了destroy-method屬性,會自動調用其配置的銷毀方法。

生命周期如下圖所示:

Java工程師有哪些常見spring面試題

Java工程師有哪些常見spring面試題  

10.Spring MVC的工作原理

流程說明:
(1).客戶端(瀏覽器)發送請求,直接請求到DispatcherServlet。
(2).DispatcherServlet根據請求信息調用HandlerMapping,解析請求對應的Handler。
(3).解析到對應的Handler(也就是我們平常說的Controller控制器)。
(4).HandlerAdapter會根據Handler來調用真正的處理器來處理請求和執行相對應的業務邏輯。
(5).處理器處理完業務后,會返回一個ModelAndView對象,Model是返回的數據對象,View是邏輯上的View。
(6).ViewResolver會根據邏輯View去查找實際的View。
(7).DispatcherServlet把返回的Model傳給View(視圖渲染)。
(8).把View返回給請求者(瀏覽器)。

如下圖所示:

Java工程師有哪些常見spring面試題

11.Spring框架中用到了哪些設計模式

(1).工廠模式:Spring 中BeanFactory就是簡單工廠模式的體現,用來創建bean對象。
(2).代理模式:Spring AOP功能的實現用到了JDK的動態代理和CGLIB字節碼生成技術。
(3).單例模式:Spring中的bean默認都是單例的。
(4).模板方法:Spring中的jdbcTemplate、hibernateTemplate等以Template結尾的對數據庫操作的類,它們就使用到了模板模式,主要用來解決代碼重復。
(5).包裝器模式:我們的項目需要連接多個數據庫,而且不同的客戶在每次訪問中根據需要會去訪問不同的數據庫。這種模式讓我們可以根據客戶的需求能夠動態切換不同的數據源。
(6).觀察者模式:Spring事件驅動模型就是觀察者模式很經典的一個應用。
(7).適配器模式:Spring AOP的增強或通知(Advice)使用到了適配器模式、Spring MVC中也是用到了適配器模式適配Controller

12.spring中bean的作用域

    Spring容器中的bean可以分為5個范圍:

    (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作用域效果相同。

13.Spring基于xml注入bean的幾種方式

    (1)Set方法注入;

    (2)構造器注入:①通過index設置參數的位置;②通過type設置參數類型;

    (3)靜態工廠注入;

    (4)實例工廠

14.Spring框架xml配置中有哪幾種自動裝配

    在Spring框架xml配置中共有5種自動裝配:

    (1)no:默認的方式是不進行自動裝配的,通過手工設置ref屬性來進行裝配bean。

    (2)byName:通過bean的名稱進行自動裝配,如果一個bean的 property 與另一bean 的name 相同,就進行自動裝配。 

    (3)byType:通過參數的數據類型進行自動裝配。

    (4)constructor:利用構造函數進行裝配,并且構造函數的參數通過byType進行裝配。

    (5)autodetect:自動探測,如果有構造方法,通過 construct的方式自動裝配,否則使用 byType的方式自動裝配。

15.spring中bean的常用注解有哪些

    (1).@Component注解。通用的注解,可標注任意類為Spring組件。如果一個Bean不知道屬于哪一個層,可以使用@Component注解標注。

    (2).@Repository注解。對應持久層,即Dao層,主要用于數據庫相關操作。

    (3).@Service注解。對應服務層,即Service層,主要涉及一些復雜的邏輯,需要用到Dao層(注入)。

    (4).@Controller注解。對應Spring MVC的控制層,即Controller層,主要用于接受用戶請求并調用Service層的方法返回數據給前端頁面。

到此,相信大家對“Java工程師有哪些常見spring面試題”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女