面试别慌!阿里面试官透漏8个经典的Spring面试常见问题,教程
本文主要是想通过一些问题加深人们对Spring的理解,所以不会涉及太多的代码!这篇文章已经整理了很长时间。当我使用Spring时,我没有注意到下面的许多问题。我还临时查阅了许多材料和书籍来补充它们。还有许多关于春季常见问题/面对面问题的文章。我觉得大部分问题都是相互抄袭的,而且很多问题都不是很好。一些答案也是有问题的。因此,我在业余时间花了一周时间完成它,希望能对大家有所帮助。
Spring是一个轻量级开发框架,旨在提高开发人员的开发效率和系统的可维护性。
我们通常说弹簧框架指的是弹簧框架,它是许多模块的集合。使用这些模块可以很容易地帮助我们开发。这些模块是:核心容器、数据访问/集成、网络、面向方面编程、工具、消息和测试模块。例如,核心容器中的核心组件是所有Spring组件的核心,Beans组件和上下文组件是IOC和依赖注入的基础,AOP组件用于面向方面的编程。
春季网站列出了春季的6个特点:
下图对应于Spring4.x版本4.x,目前,最新版本5.x中的网页模块Portlet组件已经被丢弃,并且添加了用于异步响应处理的网页流量(WebFlux)组件。
弹簧主模块
IoC
IoC(反向控制)是一种设计思想,即最初在程序中手动创建的对象的控制被转移到Spring框架中进行管理。国际奥委会也在其他语言中使用,并不是斯普林独有的。IoC容器是Spring用来实现IoC的载体。IoC容器实际上是一个映射(键,值),其中存储了各种对象。
对象之间的依赖关系由IOC容器管理,IOC容器完成对象的注入。这样,可以在很大程度上简化应用程序的开发,并且可以将应用程序从复杂的依赖关系中解放出来。国际奥委会的集装箱就像一个工厂。当我们需要创建对象时,我们只需要配置配置文件/注释,不管对象是如何创建的。在实际项目中,服务类的底层可能有数百甚至数千个类。如果我们需要实例化这个服务,您可能需要每次都找出这个服务的所有底层类的构造函数,这可能会让人发疯。如果你使用IOC,你只需要配置它,然后在需要的地方引用它,这大大增加了项目的可维护性,降低了开发的难度。
在春天,我们通常通过XML文件配置beans。后来,开发人员觉得XML文件不太适合配置,所以回弹注释配置开始流行起来。
可以封装逻辑或职责(如事务处理、日志管理、权限控制等)。)与业务无关,但通常由业务模块调用。便于减少系统的重复代码,降低模块间的耦合度,有利于未来的可扩展性和可维护性。
Spring AOP基于动态代理。如果要代理的对象实现接口,Spring AOP将使用JDK代理创建代理对象,而对于不实现接口的对象,JDK代理不能用于代理。此时,Spring AOP将使用Cglib,Spring AOP将使用Cglib生成代理对象的子类,如下图所示:
春天进程
当然,您也可以使用AspectJ,Spring AOP已经集成了AspectJ。AspectJ应该被认为是Java生态系统中最完整的AOP框架。
在使用AOP之后,我们可以抽象一些常见的函数,并在需要的地方直接使用它们,从而大大简化了代码量。当我们需要添加新功能时,这也很方便,这也提高了系统的可伸缩性。AOP用于日志功能、事务管理和其他场景。
Spring AOP是运行时增强,而AspectJ是编译时增强。Spring AOP基于代理,而AspectJ基于字节码操作。
Spring AOP集成了AspectJ,它应该被认为是Java生态系统中最完整的AOP框架。AspectJ比Spring AOP更强大,但是Spring AOP相对更简单。
如果我们有更少的切片,那么两者在性能上没有什么区别。然而,当有太多方面时,最好选择AspectJ,它比Spring AOP快得多。
大多数时候我们在系统中不使用多线程,所以很少有人会注意这个问题。单个bean有线程问题,主要是因为当多个线程操作同一个对象时,在编写该对象的非静态成员变量时会有线程安全问题。
有两种常见的解决方案:
春豆生命周期
谈到这个问题,我们必须提到模型1和模型2,这是前两个没有Spring MVC的时代。
模型2模式仍然存在许多问题。模型2的抽象和封装远远不够。当使用模型2进行开发时,不可避免地要重复构建轮子,这大大降低了程序的可维护性和可重用性。结果,许多与JavaWeb开发相关的MVC框架开始运行,比如Struts2,但是Struts2相对较重。随着Spring轻量级开发框架的普及,Spring MVC框架在Spring生态系统中应运而生。春季MVC是目前最好的MVC框架。与Struts2相比,Spring MVC更简单,使用更方便,开发效率更高,运行速度更快。
MVC是一种设计模式,Spring MVC是一个优秀的MVC框架。Spring MVC可以帮助我们开发一个更简洁的网页层,并且它与Spring框架内在地集成在一起。在Spring MVC下,我们通常将后端项目分为服务层(处理业务)、Dao层(数据库操作)、实体层(实体类)和控制器层(控制层,将数据返回前台页面)。
猜你喜欢