最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java面試題沖刺第七天--Spring框架1

 更新時間:2021年07月13日 16:01:24   作者:_陳哈哈  
這篇文章主要為大家分享了最有價值的三道Spring框架面試題,涵蓋內容全面,包括數(shù)據(jù)結構和算法相關的題目、經(jīng)典面試編程題等,感興趣的小伙伴們可以參考一下

面試題1:能簡單說一下你對Spring框架的理解么?

我們一般說的Spring框架就是Spring Framework,一種輕量級框架,用于提高開發(fā)人員的開發(fā)效率和可維護性。它是很多模塊的集合,使用這些模塊可以很方便地協(xié)助我們進行開發(fā)。這些模塊包括:核心容器數(shù)據(jù)訪問/集成、響應式 web 編程AOP(面向切面編程)、工具、消息和測試模塊

下圖對應的是Spring 4.x的版本,目前最新的5.x版本中Web模塊的Portlet組件已經(jīng)被廢棄掉,同時增加了用于異步響應式處理的WebFlux組件。

在這里插入圖片描述

主要模塊包括:

Spring Core:Core封裝包是框架的最基礎部分,提供IOC和依賴注入特性。這里的基礎概念是BeanFactory,它提供對Factory模式的經(jīng)典實現(xiàn)來消除對程序性單例模式的需要,并真正地允許你從程序邏輯中分離出依賴關系和配置。

Spring AOP:AOP模塊是Spring的AOP庫,提供了AOP(攔截器)機制,并提供常用的攔截器,供用戶自定義和配置。

Spring JDBC:負責Java數(shù)據(jù)庫連接。

Spring JMS:負責Java消息服務。

Spring ORM:用于支持常用的Hibernate,Mybatis等框架,Spring本身并不對ORM進行實現(xiàn),僅對常見的ORM框架進行封裝,并對其進行管理;

Spring Web:WEB模塊提供對常見框架如Struts X,SpringMVC,JSF的支持,Spring能夠管理這些框架,將Spring的資源注入給框架,也能在這些框架的前后插入攔截器。

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

  Core Container中的Core組件是Spring所有組件的核心,Beans組件和Context組件是實現(xiàn)IOC和DI的基礎,AOP組件用來實現(xiàn)面向切面編程。

追問1:常見的Core組件有哪些?

  • IoC Container,控制反轉容器
  • Events,事件編程
  • Resources,資源加載
  • i18n,國際化
  • Validation,校驗
  • Data Binding,數(shù)據(jù)綁定
  • Type Conversion,類型轉換
  • SpEL,Spring 表達式
  • AOP,面向切面編程

面試題2:談談對Spring IOC的理解

IOC(Inversion Of Controll,控制反轉)是一種設計思想,就是將原本在程序中手動創(chuàng)建對象的控制權,交由給Spring框架來管理。

IOC在其他語言中也有應用,并非Spring特有。IOC容器是Spring用來實現(xiàn)IOC的載體,IOC容器實際上就是一個Map(key, value),Map中存放的是各種對象。

在這里插入圖片描述

將對象之間的相互依賴關系交給IOC容器來管理,并由IOC容器完成對象的注入。這樣可以很大程度上簡化應用的開發(fā),把應用從復雜的依賴關系中解放出來。IOC容器就像是一個工廠一樣,當我們需要創(chuàng)建一個對象的時候,只需要配置好配置文件/注解即可,完全不用考慮對象是如何被創(chuàng)建出來的。在實際項目中一個Service類可能由幾百甚至上千個類作為它的底層,假如我們需要實例化這個Service,可能要每次都搞清楚這個Service所有底層類的構造函數(shù),這是不現(xiàn)實的。如果利用IOC的話,你只需要配置好,然后在需要的地方引用就行了,大大增加了項目的可維護性且降低了開發(fā)難度。

Spring時代我們一般通過XML文件來配置Bean,后來開發(fā)人員覺得用XML文件來配置不太友好,于是Sprng Boot注解配置就慢慢開始流行起來。

追問1:Spring中的bean的作用域有哪些?

spring 支持 5 種作用域,如下:

  • singleton:唯一bean實例,Spring中的bean默認都是單例的。
  • prototype:每次請求都會創(chuàng)建一個新的bean實例。
  • request:每一次HTTP請求都會產(chǎn)生一個新的bean,該bean僅在當前HTTP request內有效。
  • session:每一次HTTP請求都會產(chǎn)生一個新的bean,該bean僅在當前HTTP session內有效。
  • global-session:全局session作用域,僅僅在基于Portlet的Web應用中才有意義,Spring5中已經(jīng)沒有了。Portlet是能夠生成語義代碼(例如HTML)片段的小型Java Web插件。它們基于Portlet容器,可以像Servlet一樣處理HTTP請求。但是與Servlet不同,每個Portlet都有不同的會話。

追問2:Spring中的bean生命周期?

  1. Bean容器找到配置文件中Spring Bean的定義。
  2. Bean容器利用Java Reflection API創(chuàng)建一個Bean的實例。
  3. 如果涉及到一些屬性值,利用set()方法設置一些屬性值。
  4. 如果Bean實現(xiàn)了BeanNameAware接口,調用setBeanName()方法,傳入Bean的名字。

在這里插入圖片描述

  1. 如果Bean實現(xiàn)了BeanClassLoaderAware接口,調用setBeanClassLoader()方法,傳入ClassLoader對象的實例。
  2. 如果Bean實現(xiàn)了BeanFactoryAware接口,調用setBeanClassFacotory()方法,傳入ClassLoader對象的實例。
  3. 與上面的類似,如果實現(xiàn)了其他*Aware接口,就調用相應的方法。
  4. 如果有和加載這個Bean的Spring容器相關的BeanPostProcessor對象,執(zhí)行postProcessBeforeInitialization()方法。
  5. 如果Bean實現(xiàn)了InitializingBean接口,執(zhí)行afeterPropertiesSet()方法。
  6. 如果Bean在配置文件中的定義包含init-method屬性,執(zhí)行指定的方法。
  7. 如果有和加載這個Bean的Spring容器相關的BeanPostProcess對象,執(zhí)行postProcessAfterInitialization()方法。
  8. 當要銷毀Bean的時候,如果Bean實現(xiàn)了DisposableBean接口,執(zhí)行destroy()方法。
  9. 當要銷毀Bean的時候,如果Bean在配置文件中的定義包含destroy-method屬性,執(zhí)行指定的方法

追問3: Spring 中的 bean 是線程安全的嗎?

Spring容器中的Bean是否線程安全,容器本身并沒有提供Bean的線程安全策略,因此可以說Spring容器中的Bean本身不具備線程安全的特性,但是具體還是要結合具體scope的Bean去研究。

結合上面提到的Spring bean 的作用域(scope)

1.對于prototype作用域的Bean,每次都創(chuàng)建一個新對象,也就是線程之間不存在Bean共享,因此不會有線程安全問題。

2.對于singleton作用域的Bean,所有的線程都共享一個單例實例的Bean,因此是存在線程安全問題的。但是如果單例Bean是一個無狀態(tài)Bean,也就是線程中的操作不會對Bean的成員執(zhí)行查詢以外的操作,那么這個單例Bean是線程安全的。比如Controller類、Service類和Dao等,這些Bean大多是無狀態(tài)的,只關注于方法本身。

有狀態(tài)Bean(Stateful Bean) :就是有實例變量的對象,可以保存數(shù)據(jù),是非線程安全的。

無狀態(tài)Bean(Stateless Bean):就是沒有實例變量的對象,不能保存數(shù)據(jù),是不變類,是線程安全的。

線程安全這個問題,要從單例與原型Bean分別進行說明。

對于有狀態(tài)的bean(比如ModelAndView),就需要自行保證線程安全,最淺顯的解決辦法就是將有狀態(tài)的bean的作用域由“singleton”改為“prototype”。也可以采用ThreadLocal解決線程安全問題,為每個線程提供一個獨立的變量副本,不同線程只操作自己線程的副本變量。

ThreadLocal和線程同步機制都是為了解決多線程中相同變量的訪問沖突問題。

  • 同步機制:采用了“時間換空間”的方式,僅提供一份變量,不同的線程在訪問前需要獲取鎖,沒獲得鎖的線程則需要排隊。
  • ThreadLocal:采用了“空間換時間”的方式。ThreadLocal會為每一個線程提供一個獨立的變量副本,從而隔離了多個線程對數(shù)據(jù)的訪問沖突。因為每一個線程都擁有自己的變量副本,從而也就沒有必要對該變量進行同步了。

面試題3:說一下 SpringMVC 運行流程?

在這里插入圖片描述

流程說明:

  • 客戶端(瀏覽器)發(fā)送請求,直接請求到DispatcherServlet。
  • DispatcherServlet根據(jù)請求信息調用HandlerMapping,解析請求對應的Handler。
  • 解析到對應的Handler(也就是我們平常說的Controller控制器)。
  • HandlerAdapter會根據(jù)Handler來調用真正的處理器(對應的接口)來處理請求和執(zhí)行相對應的業(yè)務邏輯。
  • 處理器處理完業(yè)務后,會返回一個ModelAndView對象,Model是返回的數(shù)據(jù)對象,View是邏輯上的View。
  • ViewResolver(視圖解析器)會根據(jù)邏輯View去查找實際的View。
  • DispatcherServlet把返回的Model傳給View(視圖渲染)。
  • 把View返回給請求者(瀏覽器)。

追問1:能介紹一下SpringMVC各組件的作用么?

  1. DispatcherServlet前端控制器。用戶請求到達前端控制器,它就相當于mvc模式中的c,dispatcherServlet是整個流程控制的中心,由它調用其它組件處理用戶的請求,dispatcherServlet的存在降低了組件之間的耦合性,系統(tǒng)擴展性提高。由框架實現(xiàn)
  2. HandlerMapping處理器映射器。HandlerMapping負責根據(jù)用戶請求的url找到Handler即處理器,springmvc提供了不同的映射器實現(xiàn)不同的映射方式,根據(jù)一定的規(guī)則去查找,例如:xml配置方式,實現(xiàn)接口方式,注解方式等。由框架實現(xiàn)
  3. Handler處理器。Handler 是繼DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler對具體的用戶請求進行處理。由于Handler涉及到具體的用戶業(yè)務請求,所以一般情況需要程序員根據(jù)業(yè)務需求開發(fā)Handler。
  4. HandlAdapter處理器適配器。通過HandlerAdapter對處理器進行執(zhí)行,這是適配器模式的應用,通過擴展適配器可以對更多類型的處理器進行執(zhí)行。由框架實現(xiàn)。
  5. ModelAndView:是springmvc的封裝對象,將model和view封裝在一起。
  6. ViewResolver視圖解析器。ViewResolver負責將處理結果生成View視圖,ViewResolver首先根據(jù)邏輯視圖名解析成物理視圖名即具體的頁面地址,再生成View視圖對象,最后對View進行渲染將處理結果通過頁面展示給用戶。
  7. View:是springmvc的封裝對象,是一個接口, springmvc框架提供了很多的View視圖類型,包括:jspview,pdfview,jstlView、freemarkerView、pdfView等。一般情況下需要通過頁面標簽或頁面模版技術將模型數(shù)據(jù)通過頁面展示給用戶,需要由程序員根據(jù)業(yè)務需求開發(fā)具體的頁面。

總結

本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關注腳本之家的更多內容!

相關文章

  • Java模擬新浪微博登陸抓取數(shù)據(jù)

    Java模擬新浪微博登陸抓取數(shù)據(jù)

    本文主要介紹了Java模擬新浪微博登陸抓取數(shù)據(jù)的實現(xiàn)方法。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • 淺析java創(chuàng)建文件和目錄

    淺析java創(chuàng)建文件和目錄

    這篇文章主要介紹了淺析java創(chuàng)建文件和目錄的關鍵技術點以及演示示例,是篇非常不錯的文章,有需要的朋友可以參考下
    2014-09-09
  • 使用Feign調用注解組件(實現(xiàn)字段賦值功能)

    使用Feign調用注解組件(實現(xiàn)字段賦值功能)

    這篇文章主要介紹了使用Feign調用注解組件(實現(xiàn)字段賦值功能),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java swing讀取txt文件實現(xiàn)學生考試系統(tǒng)

    Java swing讀取txt文件實現(xiàn)學生考試系統(tǒng)

    這篇文章主要為大家詳細介紹了Java swing讀取txt文件實現(xiàn)學生考試系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • Java結合Kotlin實現(xiàn)寶寶年齡計算

    Java結合Kotlin實現(xiàn)寶寶年齡計算

    這篇文章主要為大家介紹了Java結合Kotlin實現(xiàn)寶寶年齡計算示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • 淺析12306售票算法(java版)

    淺析12306售票算法(java版)

    這篇文章主要介紹了淺析12306售票算法(java版)的相關資料,需要的朋友可以參考下
    2016-02-02
  • JAVA中的隊列(Queue)詳解

    JAVA中的隊列(Queue)詳解

    這篇文章主要介紹了JAVA中的隊列(Queue)詳解,隊列是一種特殊的線性表,遵循先入先出、后入后出的基本原則,一般來說,它只允許在表的前端進行刪除操作,需要的朋友可以參考下
    2023-07-07
  • SpringBoot項目打包部署到Tomcat的操作流程

    SpringBoot項目打包部署到Tomcat的操作流程

    在最近一個項目中,維護行里一個年代較為久遠的單體項目,需要將項目打包放到的tomcat服務器下運行,所以本文就給大家介紹一下SpringBoot項目打包部署到Tomcat的流程步驟,需要的朋友可以參考下
    2023-08-08
  • SpringBoot利用限速器RateLimiter實現(xiàn)單機限流的示例代碼

    SpringBoot利用限速器RateLimiter實現(xiàn)單機限流的示例代碼

    本文主要介紹了SpringBoot利用限速器RateLimiter實現(xiàn)單機限流的示例代碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 一文帶你掌握SpringBoot中常見定時任務的實現(xiàn)

    一文帶你掌握SpringBoot中常見定時任務的實現(xiàn)

    這篇文章主要為大家詳細介紹了Spring?Boot中定時任務的基本用法、高級特性以及最佳實踐,幫助開發(fā)人員更好地理解和應用定時任務,提高系統(tǒng)的穩(wěn)定性和可靠性,需要的可以參考下
    2024-03-03

最新評論

吉隆县| 邯郸市| 马关县| 泊头市| 隆昌县| 宝兴县| 江孜县| 万全县| 宾川县| 两当县| 开鲁县| 河西区| 海安县| 河间市| 镇原县| 双流县| 英德市| 漳平市| 弋阳县| 洛宁县| 南通市| 庆阳市| 宝丰县| 寿阳县| 古浪县| 苍溪县| 淮安市| 左贡县| 普宁市| 宣恩县| 乌海市| 天峨县| 麻栗坡县| 都昌县| 黄大仙区| 信丰县| 黎平县| 靖江市| 巴青县| 景宁| 个旧市|