真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

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

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

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序定制開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了容縣免費(fèi)建站歡迎大家使用!

1. 談?wù)勀銓pring的理解

    Spring是一個(gè)開源的輕量級(jí)的IoC和AOP容器框架,它為Java 應(yīng)用程序提供了全面的基礎(chǔ)設(shè)施,其目的是簡化企業(yè)應(yīng)用程序的開發(fā),它使得開發(fā)者只需要關(guān)心業(yè)務(wù)需求,從而提高開發(fā)效率和系統(tǒng)的可維護(hù)性。

2.spring的配置方式

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

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

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

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

    Spring AOP:AOP服務(wù),提供面向方面的編程實(shí)現(xiàn);

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

    Spring ORM:對現(xiàn)有的ORM框架的支持,例如:對Hibernate的支持;

    Spring Web:為創(chuàng)建Web應(yīng)用程序提供綜合性支持,例如多方文件上傳;

    Spring MVC:提供面向Web應(yīng)用的Model-View-Controller(即:模型-視圖-控制器)實(shí)現(xiàn);

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

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

4.spring有那些優(yōu)點(diǎn)

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

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

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

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

5.談?wù)勀銓?Spring IoC 和 AOP的理解

     IoC 控制反轉(zhuǎn),是指創(chuàng)建對象的控制權(quán)的轉(zhuǎn)移,以前創(chuàng)建對象的主動(dòng)權(quán)和時(shí)機(jī)是由自己把控的,而現(xiàn)在這種權(quán)力轉(zhuǎn)移到Spring容器中,并由容器根據(jù)配置文件去創(chuàng)建實(shí)例和管理各個(gè)實(shí)例之間的依賴關(guān)系,對象與對象之間松散耦合,也利于功能的復(fù)用。DI依賴注入,和控制反轉(zhuǎn)是同一個(gè)概念的不同角度的描述,即 應(yīng)用程序在運(yùn)行時(shí)依賴IoC容器來動(dòng)態(tài)注入對象需要的外部資源。  

    AOP面向切面編程,可以說它是對面向?qū)ο缶幊蹋ㄗⅲ好嫦驅(qū)ο蠛喎Q(OOP): 允許開發(fā)者定義縱向的關(guān)系,但并適用于定義橫向的關(guān)系,導(dǎo)致了大量代碼的重復(fù),而不利于各個(gè)模塊的重用)的一種補(bǔ)充用于將那些與業(yè)務(wù)無關(guān),但卻對多個(gè)對象產(chǎn)生影響的公共行為和邏輯,抽取并封裝為一個(gè)可重用的模塊,這個(gè)模塊被命名為“切面”(Aspect),減少系統(tǒng)中的重復(fù)代碼,降低了模塊間的耦合度,同時(shí)提高了系統(tǒng)的可維護(hù)性??捎糜跈?quán)限認(rèn)證、日志、事務(wù)處理。

6.Spring IoC 的注入方式

    注入方式:構(gòu)造器注入、注解注入、setter方法注入

7.BeanFactory和ApplicationContext有什么區(qū)別?

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

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

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

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

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

        ②ApplicationContext,它是在容器啟動(dòng)時(shí),一次性創(chuàng)建了所有的Bean。這樣,在容器啟動(dòng)時(shí),我們就可以發(fā)現(xiàn)Spring中存在的配置錯(cuò)誤,這樣有利于檢查所依賴屬性是否注入。 ApplicationContext啟動(dòng)后預(yù)載入所有的單實(shí)例Bean,通過預(yù)載入單實(shí)例bean ,確保當(dāng)你需要的時(shí)候,你就不用等待,因?yàn)樗鼈円呀?jīng)創(chuàng)建好了。

        ③相對于基本的BeanFactory,ApplicationContext 唯一的不足是占用內(nèi)存空間。當(dāng)應(yīng)用程序配置Bean較多時(shí),程序啟動(dòng)較慢。

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

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

8.Spring AOP和AspectJ AOP有什么區(qū)別?

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

9.Spring中的bean生命周期

(1)實(shí)例化Bean:
    對于BeanFactory容器,當(dāng)客戶向容器請求一個(gè)尚未初始化的bean時(shí),或初始化bean的時(shí)候需要注入另一個(gè)尚未初始化的依賴時(shí),容器就會(huì)調(diào)用createBean進(jìn)行實(shí)例化。對于ApplicationContext容器,當(dāng)容器啟動(dòng)結(jié)束后,通過獲取BeanDefinition對象中的信息,實(shí)例化所有的bean。


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


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


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


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


(6)如果這個(gè)Bean實(shí)現(xiàn)了BeanPostProcessor接口,將會(huì)調(diào)用postProcessAfterInitialization(Object obj, String s)方法;由于這個(gè)方法是在Bean初始化結(jié)束時(shí)調(diào)用的,所以可以被應(yīng)用于內(nèi)存或緩存技術(shù);
以上幾個(gè)步驟完成后,Bean就已經(jīng)被正確創(chuàng)建了,之后就可以使用這個(gè)Bean了。


(7)DisposableBean:
    當(dāng)Bean不再需要時(shí),會(huì)經(jīng)過清理階段,如果Bean實(shí)現(xiàn)了DisposableBean這個(gè)接口,會(huì)調(diào)用其實(shí)現(xiàn)的destroy()方法;


(8)destroy-method:
    最后,如果這個(gè)Bean的Spring配置中配置了destroy-method屬性,會(huì)自動(dòng)調(diào)用其配置的銷毀方法。

生命周期如下圖所示:

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

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

10.Spring MVC的工作原理

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

如下圖所示:

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

11.Spring框架中用到了哪些設(shè)計(jì)模式

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

12.spring中bean的作用域

    Spring容器中的bean可以分為5個(gè)范圍:

    (1). singleton:默認(rèn),每個(gè)容器中只有一個(gè)bean的實(shí)例,單例的模式由BeanFactory自身來維護(hù)。
    (2).prototype:為每一個(gè)bean請求提供一個(gè)實(shí)例。
    (3).request:為每一個(gè)網(wǎng)絡(luò)請求創(chuàng)建一個(gè)實(shí)例,在請求完成以后,bean會(huì)失效并被垃圾回收器回收。
    (4).session:與request范圍類似,確保每個(gè)session中有一個(gè)bean的實(shí)例,在session過期后,bean會(huì)隨之失效。
    (5).global-session:全局作用域,global-session和Portlet應(yīng)用相關(guān)。當(dāng)你的應(yīng)用部署在Portlet容器中工作時(shí),它包含很多portlet。如果你想要聲明讓所有的portlet共用全局的存儲(chǔ)變量的話,那么這全局變量需要存儲(chǔ)在global-session中。全局作用域與Servlet中的session作用域效果相同。

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

    (1)Set方法注入;

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

    (3)靜態(tài)工廠注入;

    (4)實(shí)例工廠

14.Spring框架xml配置中有哪幾種自動(dòng)裝配

    在Spring框架xml配置中共有5種自動(dòng)裝配:

    (1)no:默認(rèn)的方式是不進(jìn)行自動(dòng)裝配的,通過手工設(shè)置ref屬性來進(jìn)行裝配bean。

    (2)byName:通過bean的名稱進(jìn)行自動(dòng)裝配,如果一個(gè)bean的 property 與另一bean 的name 相同,就進(jìn)行自動(dòng)裝配。 

    (3)byType:通過參數(shù)的數(shù)據(jù)類型進(jìn)行自動(dòng)裝配。

    (4)constructor:利用構(gòu)造函數(shù)進(jìn)行裝配,并且構(gòu)造函數(shù)的參數(shù)通過byType進(jìn)行裝配。

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

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

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

    (2).@Repository注解。對應(yīng)持久層,即Dao層,主要用于數(shù)據(jù)庫相關(guān)操作。

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

    (4).@Controller注解。對應(yīng)Spring MVC的控制層,即Controller層,主要用于接受用戶請求并調(diào)用Service層的方法返回?cái)?shù)據(jù)給前端頁面。

到此,相信大家對“Java工程師有哪些常見spring面試題”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!


當(dāng)前文章:Java工程師有哪些常見spring面試題
文章來源:http://weahome.cn/article/jdissi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部