日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SSM常见面试题

發布時間:2023/12/10 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SSM常见面试题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SSM常見面試題

    • 1.spring bean 容器的生命周期是什么樣的?
    • 2.BeanFactory 和 ApplicationContext 的區別?
    • 3.spring 的特性?談談你對 spring 的理解?spring 用來干嘛?
    • 4.jdk 的動態代理和 cglib 動態代理有什么區別?
    • 5.aop 的實現原理?
    • 6.springmvc 的原理?springmvc 的工作流程?
    • 7.springmvc 的常用注解有哪些?
    • 8.mybatis 使用了哪些設計模式?你了解過哪些設計模式?

1.spring bean 容器的生命周期是什么樣的?

  • 實例化一個Bean--new
  • 按照Spring上下文對實例化的Bean進行配置--IOC注入
  • 如果這個Bean已經實現了BeanNameAware接口,會調用它實現的setBeanName(String)方法,傳遞Spring配置文件中Bean的id值
  • 如果這個Bean已經實現了BeanFactoryAware接口,會調用它實現的setBeanFactory(setBeanFactory(BeanFactory)傳遞Spring工廠自身(可以用這個方式來獲取其它Bean,只需在Spring配置文件中配置一個普通的Bean就可以);
  • 如果這個Bean已經實現了ApplicationContextAware接口,會調用setApplicationContext(ApplicationContext)方法,傳入Spring上下文(同樣這個方式也可以實現步驟4的內容,但比4更好,因為ApplicationContext是BeanFactory的子接口,有更多的實現方法);
  • 如果這個Bean關聯了BeanPostProcessor接口,將會調用postProcessBeforeInitialization(Object obj, String s)方法,BeanPostProcessor經常被用作是Bean內容的更改,并且由于這個是在Bean初始化結束時調用那個的方法,也可以被應用于內存或緩存技術;
  • 如果Bean在Spring配置文件中配置了init-method屬性會自動調用其配置的初始化方法。
  • 如果這個Bean關聯了BeanPostProcessor接口,將會調用postProcessAfterInitialization(Object obj, String s)方法、;
  • ???? :以上工作完成以后就可以應用這個Bean了,那這個Bean是一個Singleton的,所以一般情況下我們調用同一個id的Bean會是在內容地址相同的實例。

  • 當Bean不再需要時,會經過清理階段,如果Bean實現了DisposableBean這個接口,會調用其實現的destroy()方法;
  • 最后,如果這個Bean的Spring配置中配置了destroy-method屬性,會自動調用其配置的銷毀方法。
  • 2.BeanFactory 和 ApplicationContext 的區別?

  • ApplicationContextBeanFactory子接口
  • BeanFactory:bean工廠接口;負責創建bean實例;容器里面保存的所有單例bean其實是一個map;Spring最底層的接口
  • ApplicationContext:是容器接口;更多負責容器功能的實現;(可以基于BeanFactory創建好的對象之上完成強大的容器)
  • BeanFactory是最底層的接口,ApplicationContext留給程序員使用的ioc容器接口;ApplicationContext是BeanFactory的子接口
  • 3.spring 的特性?談談你對 spring 的理解?spring 用來干嘛?

    ??????Spring框架是 Java 應用最廣的框架,它的成功來源于理念,而不是技術本身,它的理念包括 IOC (Inversion of Control,控制反轉) 和 AOP(Aspect Oriented Programming,面向切面編程)。

    優點:

  • 低侵入 / 低耦合 (降低組件之間的耦合度,實現軟件各層之間的解耦)
  • 聲明式事務管理(基于切面和慣例)
  • 方便集成其他框架(如MyBatis、Hibernate)
  • 降低 Java 開發難度
  • Spring 框架中包括了 J2EE 三層的每一層的解決方案(一站式)
  • Spring 能幫我們做什么?

    ??????①.Spring 能幫我們根據配置文件創建及組裝對象之間的依賴關系。
    ??????②.Spring 面向切面編程能幫助我們無耦合的實現日志記錄,性能統計,安全控制。
    ??????③.Spring 能非常簡單的幫我們管理數據庫事務。
    ??????④.Spring 還提供了與第三方數據訪問框架(如Hibernate、JPA)無縫集成,而且自己也提供了一套JDBC訪問模板來方便數據庫訪問。
    ??????⑤.Spring 還提供與第三方Web(如Struts1/2、JSF)框架無縫集成,而且自己也提供了一套Spring MVC框架,來方便web層搭建。
    ??????⑥.Spring 能方便的與Java EE(如Java Mail、任務調度)整合,與更多技術整合(比如緩存框架)。
    ??

    4.jdk 的動態代理和 cglib 動態代理有什么區別?

  • jdk動態代理: JDK是基于反射機制,生成一個實現代理接口的匿名類,然后重寫方法,實現方法的增強。它生成類的速度很快,但是運行時因為是基于反射,調用后續的類操作會很慢。而且他是只能針對接口編程的。只能針對接口不能針對類實現代理。
  • cglib動態代理:CGLIB是基于繼承機制,繼承被代理類,所以方法不要聲明為final,然后重寫父類方法達到增強了類的作用。底層是基于asm第三方框架,是對代理對象類的class文件加載進來,通過修改其字節碼生成子類來處理。生成類的速度慢,但是后續執行類的操作時候很快,可以針對類和接口。
  • 5.aop 的實現原理?

  • aop底層采用動態代理機制實現:接口+實現類
  • 接口:spring采用jdk的動態代理proxy
  • 實現類:spring采用cglib實現字節碼增強
  • aop的橫向機制原理:由代理創建出一個和impl實現類平級的一個對象,但是這個對象不是一個真正的對象,只是一個代理對象,但它可以實現和impl相同的功能。
  • 6.springmvc 的原理?springmvc 的工作流程?

    SpringMVC的原理圖:

    SpringMVC工作流程?

  • 用戶發送請求至前端控制器DispatcherServlet。
  • DispatcherServlet收到請求調用HandlerMapping處理器映射器。
  • 處理器映射器找到具體的處理器(可以根據xml配置、注解進行查找),生成處理器對象及處理器攔截器(如果有則生成)一并返回給DispatcherServlet。
  • DispatcherServlet調用HandlerAdapter處理器適配器。
  • HandlerAdapter經過適配調用具體的處理器(Controller,也叫后端控制器)。
  • Controller執行完成返回ModelAndView。
  • HandlerAdapter將controller執行結果ModelAndView返回給DispatcherServlet。
  • DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器。
  • ViewResolver解析后返回具體View。
  • DispatcherServlet根據View進行渲染視圖(即將模型數據填充至視圖中)
  • DispatcherServlet響應用戶
    ??
  • 7.springmvc 的常用注解有哪些?

  • 控制反轉

    @Component,標注為一個普通的bean@Service@Repository
  • 依賴注入

    @Autowired@Qulifier@Resource@Value
  • 全局配置

    @Configuration,代替配置文件,相當于beans@ComponentScan,配置掃描包@Scope,配置bean的生命周期
  • 8.mybatis 使用了哪些設計模式?你了解過哪些設計模式?

    1、建造者模式(Builder Pattern)
    ??????使用多個簡單的對象一步一步構建成一個復雜的對象。它提供了一種創建對象的最佳方式。例如SqlSessionFactoryBuilder、XMLConfigBuilder、XMLMapperBuilder等
    XMLConfigBuilder :XML配置構建器,建造者模式,繼承BaseBuilder

    2、 簡單工廠模式(Simple Factory Pattern)
    ??????又稱為靜態工廠方法(Static Factory Method)模式,它屬于類創建型模式,專門定義一個類來負責創建其他類的實例,被創建的實例通常都具有共同的父類。如:
    ???SqlSessionFactory:創建SqlSession對象。
    ???ObjectFactory:對象工廠:所有對象都要由工廠來產生 。
    ???MapperProxyFactory:創建映射器代理 MapperProxy對象。

    3、 單例模式(Singleton Pattern)
    ??????三個要點:

  • 某個類只能有一個實例;
  • 它必須自行創建這個實例;
  • 它必須自行向整個系統提供這個實例。單例模式是一種對象創建型模式。單例模式又名單件模式或單態模式。
  • 如:ErrorContext和LogFactory
    ??????ErrorContext:用在每個線程范圍內的單例,用于記錄該線程的執行環境錯誤信息,
    ??????LogFactory:是提供給整個Mybatis使用的日志工廠,用于獲得針對項目配置好的日志對象。

    4、代理模式(Proxy Pattern)
    ??????Mybatis核心使用的模式,給某一個對象提供一個代理,并由代理對象控制對原對象的引用。它是一種對象結構型模式。
    ????????如MapperProxy為綁定我們開發的Mapper和Mapper.xml創建代理類、Plugin為每個插件創建一個代理類等。

    5、組合模式

    ??????組合多個對象形成樹形結構以表示“整體-部分”的結構層次。
    ??????組合模式最關鍵的地方葉子對象和組合對象實現相同的接口。
    例如SqlNode和各個子類ChooseSqlNode等;

    6、適配器模式(Adapter Pattern)
    ??????作為兩個不兼容的接口之間的橋梁。這種類型的設計模式屬于結構型模式,它結合了兩個獨立接口的功能。
    ??????例如Log的Mybatis接口和它對jdbc、log4j等各種日志框架的適配實現

    7、模板方法模式(Template Pattern)
    ??????是基于繼承的代碼復用的基本技術。模板方法模式中,一個抽象類公開定義了執行它的方法的方式/模板。它的子類可以按需要重寫方法實現,但調用將以抽象類中定義的方式進行。這種類型的設計模式屬于行為型模式。定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。

    ??????例如BaseExecutor和SimpleExecutor,還有BaseTypeHandler和所有的子類如IntegerTypeHandler;

    8、裝飾器模式(Decorator Pattern)
    ??????裝飾器模式:允許向一個現有的對象添加新的功能,同時又不改變其結構。這種類型的設計模式屬于結構型模式,它是作為現有的類的一個包裝。這種模式創建了一個裝飾類,用來包裝原有的類,并在保持類方法簽名完整性的前提下,提供了額外的功能。

    ??????例如Cache包中的cache.decorators子包中等各個裝飾者的實現;

    9、迭代器模式(Iterator)
    ??????又叫游標(Cursor)模式。GOF定義為:提供一種方法訪問一個容器(container)對象中各個元素,而又不需暴露該對象的內部細節。

    ??????例如迭代器模式PropertyTokenizer;

    總結

    以上是生活随笔為你收集整理的SSM常见面试题的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。