JAVA面试题(待更新) 初学者总结 大佬勿喷~

spring、springboot、springmvc面试题

1.Spring框架是什么?

Spring是一个轻量级的Ioc和AOP容器框架,简化企业应用程序的开发,它使得开发只需要关心业务,常见的配置方式有三种:XML的配置、注解的配置、基于JAVA的配置

2.Autowired和Resource关键字的区别?

@Resource和@Autowired都是做bean的注入时使用,其实@Resource不是Spring的注解,它是一个包需要导入。

共同点:

两者都可以写在字段和setter方法上

不同点:

  1. 来源不同:@Autowired来自于Spring框架,而@Resource来自于JAVA的JSR-250规范

  2. 依赖查找的顺序不同:@Autowired先根据类型再根据名称查询,而且@Resource现根据名称再根据类 型查询

  3. 支持的参数不同:@Autowired只支设置一个参数,而且Resource支持设置多个参数

  4. 依赖注入的用法支持不同:Autowired既支持构造方法注入,又支持属性注入和setter注入,@Resource只支持属性注入和Setter注入。

3.Spring Bean 生命周期描述下

首先说一下Servlet的生命周期:实例化,初始init,接收请求service,销毁destroy;

Spring上下文中的Bean生命周期也类似,如下:

1)实例化Bean:

对于BeanFactory容器,当客户向容器请求一个尚未初始化的bean时,或初始化bean的时候需要注

入另一个尚未初始化的依赖时,容器就会调用createBean进行实例化。对于ApplicationContext容

器,当容器启动结束后,通过获取BeanDefifinition对象中的信息,实例化所有的bean。

2)设置对象属性(依赖注入):

实例化后的对象被封装在BeanWrapper对象中,紧接着,Spring根据BeanDefifinition中的信息 以

及 通过BeanWrapper提供的设置属性的接口完成依赖注入。

3)处理Aware接口:

接着,Spring会检测该对象是否实现了xxxAware接口,并将相关的xxxAware实例注入给Bean:

①如果这个Bean已经实现了BeanNameAware接口,会调用它实现的setBeanName(String

beanId)方法,此处传递的就是Spring配置文件中Bean的id值;

②如果这个Bean已经实现了BeanFactoryAware接口,会调用它实现的setBeanFactory()方法,传

递的是Spring工厂自身。

③如果这个Bean已经实现了ApplicationContextAware接口,会调用

setApplicationContext(ApplicationContext)方法,传入Spring上下文;

4)BeanPostProcessor:

如果想对Bean进行一些自定义的处理,那么可以让Bean实现了BeanPostProcessor接口,那将会

调用postProcessBeforeInitialization(Object obj, String s)方法。

5)InitializingBean 与 init-method:

如果Bean在Spring配置文件中配置了 init-method 属性,则会自动调用其配置的初始化方法。

6)如果这个Bean实现了BeanPostProcessor接口,将会调用

postProcessAfterInitialization(Object obj, String s)方法;由于这个方法是在Bean初始化结束时调

用的,所以可以被应用于内存或缓存技术;

以上几个步骤完成后,Bean就已经被正确创建了,之后就可以使用这个Bean了。

7)DisposableBean:

当Bean不再需要时,会经过清理阶段,如果Bean实现了DisposableBean这个接口,会调用其实现

的destroy()方法;

8)destroy-method:

最后,如果这个Bean的Spring配置中配置了destroy-method属性,会自动调用其配置的销毁方

法。

4.依赖注入的方式有几种,各是什么?

  1. 构造器注入:将依赖对象通过构造函数的参数注入给依赖对象,并且在初始化对象的时候注入

    优点:对象初始化完成后可获得可使用的对象

    缺点:注入的对象很多时,构造器参数列表将会很长;不够灵活.

  2. setter方法注入:通过调用成员变量提供的setter函数将依赖对象注入给依赖类

    优点:灵活,可以选择性注入需要的对象

    缺点: 依赖对象初始化完成后由于尚未注入被依赖对象,因此还不能使用。

  3. 接口注入:依赖类必须要实现指定的接口,然后实现该接口的一个函数,该函数就是用于依赖注入。

        缺点: 侵入性太强,不建议使用

5.谈谈对ioc的理解

ioc容器实际上是一个map,里面存放是各种对象,在项目启动的时候会读取配置文件里面的bean节点,根据限定类名使用反射创建对象放入map里面。

依赖注入是实现ioc的方法,就是在ioc容器运行期间,动态将某种依赖关系注入到对象的当中

控制反转指控制权不是由当前的对象来管理的,由其它类来管理=

6.谈谈对aop的理解

将程序中的交叉业务逻辑、封装成一个切面,然后注入到目标对象中,aop可以对某个对象的功能进行增强。

7.说说你对Spring MVC的理解

  1. 什么是MVC模式

MVC:MVC是一种设计模式

  1. MVC的原理:用户发送一个请求到控制器(作用是调用业务类),然后交给模型层处理(Model)和视图渲染返回一个处理结果,然后返回结果给用户

  2. M-Model模型(完成业务逻辑)

    View视图(做界面的展示)

    Controller控制器(接收请求——>调用模型——>根据结果派发页面)

8.SpringMVC的请求流程

1、 用户发送请求至前端控制器DispatcherServlet。

2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。

3、 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器

拦截器(如果有则生成)一并返回给DispatcherServlet。

4、 DispatcherServlet调用HandlerAdapter处理器适配器。

5、 HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。

6、 Controller执行完成返回ModelAndView。

7、 HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。

8、 DispatcherServlet将ModelAndView传给ViewReslover视图解析器。

9、 ViewReslover解析后返回具体View。

10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。

11、 DispatcherServlet响应用户

9.SpringMVC常用的注解有哪些?

  • @RequestMapping:用于处理请求 url 映射的注解,可用于类或方法上。用于类上,则表示类中

    的所有响应请求的方法都是以该地址作为父路径。

  • @RequestBody:注解实现接收http请求的json数据,将json转换为java对象。

  • @ResponseBody:注解实现将conreoller方法返回对象转化为json对象响应给客户。

10.Spring框架中都用到了哪些设计模式?

  • 简单工厂模式:Spring 中的 BeanFactory 就是简单工厂模式的体现。根据传入一个唯一的标识来获

  • 得 Bean 对象,但是在传入参数后创建还是传入参数前创建,要根据具体情况来定。

  • 工厂模式:Spring 中的 FactoryBean 就是典型的工厂方法模式,实现了 FactoryBean 接口的 bean

  • 是一类叫做 factory 的 bean。其特点是,spring 在使用 getBean() 调用获得该 bean 时,会自动调

  • 用该 bean 的 getObject() 方法,所以返回的不是 factory 这个 bean,而是这个 bean.getOjbect()

  • 方法的返回值。

  • 单例模式:在 spring 中用到的单例模式有: scope="singleton" ,注册式单例模式,bean 存放于

  • Map 中。bean name 当做 key,bean 当做 value。

  • 原型模式:在 spring 中用到的原型模式有: scope="prototype" ,每次获取的是通过克隆生成的新

  • 实例,对其进行修改时对原有实例对象不造成任何影响。

  • 代理模式:Spring 中经典的 AOP,就是使用动态代理实现的,分 JDK 和 CGlib 动态代理。

11.解释Spring支持的几种bean的作用域?

Spring容器中的bean可以分为5个范围:

(1)singleton:默认,每个容器中只有一个bean的实例,单例的模式由BeanFactory自身来维

护。

(2)prototype:为每一个bean请求提供一个实例。

(3)request:为每一个网络请求创建一个实例,在请求完成以后,bean会失效并被垃圾回收器回

收。

(4)session:与request范围类似,确保每个session中有一个bean的实例,在session过期后,

bean会随之失效。

(5)global-session:全局作用域,global-session和Portlet应用相关。当你的应用部署在Portlet

容器中工作时,它包含很多portlet。如果你想要声明让所有的portlet共用全局的存储变量的话,那

么这全局变量需要存储在global-session中。全局作用域与Servlet中的session作用域效果相同。

12. Spring基于xml注入bean的几种方式?

(1)Set方法注入;

(2)构造器注入:①通过index设置参数的位置;②通过type设置参数类型;

        阿里内部资料

(3)静态工厂注入;

(4)实例工厂;

通常回答前面两种即可,因为后面两种很多人都不太会,不会的就不要说出来,不然问到你不会就

尴尬了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沉着冷静专注集中

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值