Spring相关大厂常问面试题

  • 1. 什么是 Spring 框架?
  • 2. 列举一些重要的Spring模块?
  • 3. @RestController 与 @Controller 的区别
  • 4. 谈谈自己对于 Spring IoC 和 AOP 的理解
  • 5. Spring 中的 bean 的作用域有哪些?
  • 6. Spring 中的单例 bean 的线程安全问题了解吗
  • 7. @Component 和 @Bean 的区别是什么?
  • 8. 将一个类声明为Spring的 bean 的注解有哪些?
  • 9. Spring 中的 bean 生命周期?

1. 什么是 Spring 框架?

Spring 是一种轻量级开发框架,旨在提高开发人员的开发效率以及系统的可维护性。
我们一般说 Spring 框架指的都是 Spring Framework,它是很多模块的集合,使用这些模块可以很方便地协助我们进行开发。这些模块是:核心容器、数据访问/集成,、Web、AOP(面向切面编程)、工具、消息和测试模块。比如:Core Container 中的 Core 组件是Spring 所有组件的核心,Beans 组件和 Context 组件是实现IOC和依赖注入的基础,AOP组件用来实现面向切面编程。

2. 列举一些重要的Spring模块?

Spring Core: 基础,可以说 Spring 其他所有的功能都需要依赖于该类库。主要提供 IoC 依赖注入功能。
Spring Aspects : 该模块为与AspectJ的集成提供支持。
Spring AOP :提供了面向切面的编程实现。
Spring JDBC : Java数据库连接。
Spring JMS :Java消息服务。
Spring ORM : 用于支持Hibernate等ORM工具。
Spring Web : 为创建Web应用程序提供支持。
Spring Test : 提供了对 JUnit 和 TestNG 测试的支持。

3. @RestController 与 @Controller 的区别

  • @Controller 返回一个页面
    单独使用 @Controller 不加 @ResponseBody 的话一般使用在要返回一个视图的情况,这种情况属于比较传统的Spring MVC 的应用,对应于前后端不分离的情况。
  • @RestController 返回JSON 或 XML 形式数据但
    @RestController 只返回对象,对象数据直接以 JSON 或 XML 形式写入 HTTP 响应(Response)中,这种情况属于 RESTful Web服务,这也是目前日常开发所接触的最常用的情况(前后端分离)。

4. 谈谈自己对于 Spring IoC 和 AOP 的理解

IoC(Inverse of Control:控制反转)是一种设计思想,就是 将原本在程序中手动创建对象的控制权,交由Spring框架来管理。 IoC 在其他语言中也有应用,并非 Spring 特有。 IoC 容器是 Spring 用来实现 IoC 的载体, IoC 容器实际上就是个Map(key,value),Map 中存放的是各种对象。
将对象之间的相互依赖关系交给 IoC 容器来管理,并由 IoC 容器完成对象的注入。这样可以很大程度上简化应用的开发,把应用从复杂的依赖关系中解放出来。 IoC 容器就像是一个工厂一样,当我们需要创建一个对象的时候,只需要配置好配置文件/注解即可,完全不用考虑对象是如何被创建出来的。

AOP(Aspect-Oriented Programming:面向切面编程)能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性。
Spring AOP就是基于动态代理的,如果要代理的对象,实现了某个接口,那么Spring AOP会使用JDKProxy,去创建代理对象,而对于没有实现接口的对象,就无法使用 JDK Proxy 去进行代理了,这时候Spring AOP会使用Cglib ,这时候Spring AOP会使用 Cglib 生成一个被代理对象的子类来作为代理

5. Spring 中的 bean 的作用域有哪些?

  • singleton : 唯一 bean 实例,Spring 中的 bean 默认都是单例的。
  • prototype : 每次请求都会创建一个新的 bean 实例。
  • request : 每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP request内有效。
  • session : 每一次HTTP请求都会产生一个新的 bean,该bean仅在当前 HTTP session 内有效。
  • global-session: 全局session作用域,仅仅在基于portlet的web应用中才有意义,Spring5已经没有了。Portlet是能够生成语义代码(例如:HTML)片段的小型Java Web插件。它们基于portlet容器,可以像servlet一样处理HTTP请求。但是,与 servlet 不同,每个 portlet 都有不同的会话

6. Spring 中的单例 bean 的线程安全问题了解吗

  • 单例 bean 存在线程问题,主要是因为当多个线程操作同一个对象的时候,对这个对象的非静态成员变量的写操作会存在线程安全问题。
  • 常见的有两种解决办法:
  1. 在Bean对象中尽量避免定义可变的成员变量(不太现实)。
  2. 在类中定义一个ThreadLocal成员变量,将需要的可变成员变量保存在ThreadLocal 中(推荐的一 种方式)。

7. @Component 和 @Bean 的区别是什么?

  1. 作用对象不同: @Component 注解作用于类,而 @Bean 注解作用于方法。
  2. @Component 通常是通过类路径扫描来自动侦测以及自动装配到Spring容器中(我们可以使用@ComponentScan 注解定义要扫描的路径从中找出标识了需要装配的类自动装配到 Spring 的bean 容器中)。 @Bean 注解通常是我们在标有该注解的方法中定义产生这个 bean, @Bean 告诉了Spring这是某个类的示例,当我需要用它的时候还给我。
  3. @Bean 注解比 Component 注解的自定义性更强,而且很多地方我们只能通过 @Bean 注解来注册bean。比如当我们引用第三方库中的类需要装配到 Spring 容器时,则只能通过 @Bean 来实现。

8. 将一个类声明为Spring的 bean 的注解有哪些?

@Component :通用的注解,可标注任意类为 Spring 组件。如果一个Bean不知道属于哪个层,可以使用 @Component 注解标注。
@Repository : 对应持久层即 Dao 层,主要用于数据库相关操作。
@Service : 对应服务层,主要涉及一些复杂的逻辑,需要用到 Dao层。
@Controller : 对应 Spring MVC 控制层,主要用户接受用户请求并调用 Service 层返回数据给前端页面。

9. Spring 中的 bean 生命周期?

  • Bean 容器找到配置文件中 Spring Bean 的定义。
  • Bean 容器利用 Java Reflection API 创建一个Bean的实例。
  • 如果涉及到一些属性值 利用 set() 方法设置一些属性值。
  • 如果 Bean 实现了 BeanNameAware 接口,调用 setBeanName() 方法,传入Bean的名字。
  • 如果 Bean 实现了 BeanClassLoaderAware 接口,调用 setBeanClassLoader() 方法,传入ClassLoader 对象的实例。
  • 与上面的类似,如果实现了其他 *.Aware 接口,就调用相应的方法。
  • 如果有和加载这个 Bean 的 Spring 容器相关的 BeanPostProcessor 对象,执行
    postProcessBeforeInitialization() 方法
  • 如果Bean实现了 InitializingBean 接口,执行 afterPropertiesSet() 方法。
  • 如果 Bean 在配置文件中的定义包含 init-method 属性,执行指定的方法。
  • 如果有和加载这个 Bean的 Spring 容器相关的 BeanPostProcessor 对象,执行
    postProcessAfterInitialization() 方法
  • 当要销毁 Bean 的时候,如果 Bean 实现了 DisposableBean 接口,执行 destroy() 方法。
  • 当要销毁 Bean 的时候,如果 Bean 在配置文件中的定义包含 destroy-method 属性,执行指定的方法。

这篇文章如果对小伙伴们有帮助的话,希望点个赞支持一下~ 十分感谢~


2022最新Spring相关大厂常问技术面试题大全 —— 金三银四好时机相关推荐

  1. 提个醒。阿里内网最新发布“M8”级Java面试笔记,助力金三银四

    真正的金三银四已经悄然开始.从认识的HR那得知,有些公司甚至在过年前就开始布局了..而年前偃旗息鼓的,年后也势必加速进入这波抢人大战! 因此,真的要等到3.4月份再做准备的话,就晚了. 这不最近,就有 ...

  2. 2万字8千字72道大厂JVM面试题【金三银四(金九银十)面试小抄之Java经典面试题JVM篇总结】(附答案)

  3. 万字攻略,详解腾讯面试(二,BAT等大厂必问技术面试题

    ===== 组员面试,不是100%必须的环节,然而有时候组长太忙,就会让组员先面试,探探路. 郭靖屁颠屁颠地到了腾讯,参加面试,遇到的就是组员面试,这个组员,一般是组内的骨干员工,职级通常是9级,很可 ...

  4. 2022春招、金三银四,面试官必问的1000道Java面试题及答案整理

    前言 不论是校招还是社招都避免不了各种面试,如何去准备面试就显得格外重要. 这不马上金三银四了,相信有很多小伙伴为社招或跳槽做准备,最近小编也常常在刷面试题,发现网上很多Java面试题都没有答案,所以 ...

  5. 金三银四,最新面试行情

    这个金三银四,开始复习面试,面了大概五六天,平均一天两场,小厂居多,大厂只面了字节和蚂蚁. 梳理一下一周以来面过的公司,给大家看一下现在大致的一个面试行情(顺序不是严格的时间顺序) 蓝标传媒,北京,无 ...

  6. 金三银四的腾讯、阿里、​字节等大厂前端社招面经

    大家好,我是若川.最近金三银四,今天分享一篇腾讯.阿里.字节等大厂的前端社招面试经验的好文,相信看完会有所收获.也欢迎点击下方卡片关注或者星标我的公众号若川视野 作者面了将近一个月,目前还没挂过,但由 ...

  7. 【建议收藏】2021年中高级Android大厂面试秘籍,为你保驾护航金三银四,直通大厂(Java篇)

    前言 成为一名优秀的Android开发,需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~. A awesome android expert interview questions a ...

  8. 【建议收藏】2020年中高级Android大厂面试秘籍,为你保驾护航金三银四,直通大厂(Android高级篇上)...

    前言 成为一名优秀的Android开发,需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~. A awesome android expert interview questions a ...

  9. 【建议收藏】2020年中高级Android大厂面试秘籍,为你保驾护航金三银四,直通大厂(Android基础篇)...

    前言 成为一名优秀的Android开发,需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~. A awesome android expert interview questions a ...

最新文章

  1. C++ Primer 5th笔记(chap 14 重载运算和类型转换)函数调用运算符
  2. 如何改变 Python 中线程的执行顺序
  3. java 当中的验证码_Java Web中验证码的实现
  4. java用swing日历标记节日_如何用JavaSwing作一个日历控制程序?
  5. 基于RV1126平台imx291分析 --- media部件注册 imx291
  6. 窝囊同事做测试三年未涨工资,被开当天,bat全部高管门口迎接。
  7. 2021年四大流行Android手机自动化测试工具,全在这里了
  8. IE查看源文件重定向到 桌面的解决方法
  9. 当我们在谈论高并发的时候究竟在谈什么?
  10. 17.4.17 漫画与人脸识别(一)
  11. 无计算机基础的学电子化移交,由于目标计算机积极拒绝,无法连接。 127.0.0.1-8080-这是什么意思啊...
  12. java爬取今日头条文章
  13. 微信小程序业务好(做)跑吗?我想做小程序代理业务
  14. 【java数据类型】
  15. Java入门123:一个老鸟的Java学习心得(二维码版)
  16. L1-009 N个数求和 (20分)(分数求和)
  17. 计算机事件查看u盘使用情况,关于U盘使用记录的日志文件
  18. 关于J2EE,J2SE,J2ME
  19. 天泉湖酒店式养生社区服务中心漏电火灾监控系统的设计与应用
  20. if...else if...else

热门文章

  1. 基于live555的视频直播 DM368IPNC RTSP分析
  2. 在恰当的地方使用MongoDB的WriteConcern.SAFE参数
  3. 842. Split Array into Fibonacci Sequence
  4. [Leetcode][第257题][JAVA][二叉树的所有路径][BFS][DFS]
  5. HDOJ-1257 最少拦截系统
  6. 语言三做一年级算题_一年级数学期末考试,学生交卷说能考100分,快让你家孩子试试吧...
  7. python list存储方式_Python 之 将 list 存储为 .mat 文件
  8. 开机自启动脚本_使用xtu降低笔记本(游戏本)cpu电压及功耗·游戏本延时(以及试着解决开机自启动的问题)...
  9. 软件测试之控制流图以及环形复杂度独立路径求解问题
  10. java小应用_java小应用