首页 > 其他分享 >面试题——Spring

面试题——Spring

时间:2024-06-15 15:02:31浏览次数:26  
标签:容器 面试题 作用域 Spring Bean 实例 IOC

★1.Spring和SpringBuffer和SpringBuilder的区别?

        值可变性

      Spring中的值是final修饰的,不可变,当试图修改这个不可变值时等于创建一个新的对象。

      SpringBuffer和SpringBuilder则是可变的

        ②线程安全性

      Spring:  值不可改  (安全)

      SpringBuffer:  自带Synchernized锁  (安全)

      SpringBuilder:  值可改,无锁  (不安全)

        ③性能

      Spring:  每次修改创建新对象  (效率最慢)

      SpringBuffer:  值可改但自带锁  (效率高于Spring但低于SpringBuilder)

      SpringBuilder:  值可改,无锁  (效率最快)


2.Spring Boot常用注解

@SpringBootApplication: SpringBootConfiguration配置类、componentScan扫描包、EnableAutoConfiguration导入其他配置类

@RestController: @ResponseBody和@Controller的作用。

@Component,@Service,@Controller,@Repository: 将类注入容器。

@GetMapping、@PostMapping、@PutMapping、@DeleteMapping: 映射请求,只能接收的对应的请求。

@AutoWired: 按照类型匹配注入。

@Qualifier: 和AutoWired联合使用,在按照类型匹配的基础上,在按照名称匹配。

@Resource: 默认按照名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行按照名称查找,如果按照name找不到,就按照类型去找.

@Bean: 用于将方法返回值对象放入容器。

@RequestParam: 获取查询参数。即url?name=这种形式

@RequestBody: 该注解用于获取请求体数据(body),get没有请求体,故而一般用于post请求。@PathVariable: 获取路径参数。即url/{id}这种形式。

@Value: 将外部的值动态注入到 Bean 中。

    @Value(“${}”):可以获取配置文件的值。

    @Value(“#{}”):表示SpEl(Spring Expression Language是Spring表达式语言,可以在运行时查询和操作数据。)表达式通常用来获取 bean 的属性,或者调用 bean 的某个方法


★3.Spring AOP 和 IOC 的理解?

AOP(一种编程范式)

重用代码: 允许在其他类或方法中共享代码

简化代码: 将横切关注点与业务逻辑分离.(利于业务代码的理解和维护)

封装切面逻辑: 讲切面逻辑封装到一个模块中,并应用于整个应用程序.(利于维护和测试)

提高性能: AOP的好处就是提高系统的整体性能

松耦合: 让组件之间的依赖更松散.(利于代码复用,也利于单元测试和集中测试)

IOC(一种设计模式)

Bean容器     依赖注入(构造器注入、Setter注入、属性注入等)    控制反转     松耦合


★4.Spring IOC容器的构建流程?

1.配置元数据:根据XML或注解等方式配置IOC容器所需的元数据;例如Bean定义,依赖关系等

2.加载配置:使用BeanFactory等Spring接口,读取配置元数据

3.创建Bean实例:通过元数据的Bean定义等,用反射机制实例化创建Bean实例并储存IOC中

4.处理依赖关系:根据依赖关系,自动注入所需依赖

5.初始化Bean对象:调用Bean的初始化方法进行初始化,如init()方法

6.提供Bean:将初始化的Bean储存IOC容器,提供访问接口供程序使用

7.销毁Bean:IOC容器关闭时,调用所有Bean的销毁方法,如destory()方法


★5.Spring框架哪些地方使用了反射?

 1.依赖注入:  Spring基于反射机制获取对象并进行属性注入

 2.AOP:  Spring的JDK动态代理或者CGLIB字节码增强都是用的被代理对象方法的反射调用

 3.MVC框架:  Spring用反射机制来调用控制器方法

 4.数据库访问:  Spring是利用反射来进行数据库的访问

 5.容器管理:  Spring用反射机制来进行实例化和属性注入


★6.Spring MVC框架 ?

 核心组件

DispatcherServlet 核心的中央处理器,负责接收请求、分发,并给予客户端响应。

HandlerMapping 处理器映射器,根据 uri 去匹配查找能处理的 Handler ,并会将请求涉及到的拦截器和 Handler 一起封装。

HandlerAdapter 处理器适配器,根据 HandlerMapping 找到的 Handler ,适配执行对应的 Handler

Handler 请求处理器,处理实际请求的处理器。

ViewResolver 视图解析器,根据 Handler 返回的逻辑视图/视图,解析并渲染真正的视图,并传递给 DispatcherServlet 响应客户端


7.Spring中的Bean什么时候被实例化?

 1. 单例作用域(Singleton): Spring容器启动时,立刻实例化单例作用域的Bean放置容器中,以便随时取用

 2. 原型作用域(Prototype):请求时,才会实例化原型作用域的Bean并返回

 3. 其他作用域:如 Web 作用域和 Session 作用域等,它们的实例化时间依赖于具体的使用场景。


 ★8.Spring 注册Bean的方式有哪些?

 1. XML配置:使用Java配置类来注册Bean,通过在Java配置类中用@Configuration注解来声明配置类,并在配置类中使用@Bean注解来定义Bean的属性和实例化方式。

 2. 基于注解:使用注解快捷方便的注册Bean.例如@Service @Contorller @Repository等。

 3. 手动注册:用ApplicationContext接口提供的方法,如registerBeanDefinition()或者registerSingleton()来注册Bean。


 ★9.Spring 拦截器执行流程


  ★10.BeanFactory和FactoryBean的区别:

BeanFactory:    是Bean工厂,用于生产和管理普通的Bean对象,负责创建和提供Bean实例

FactoryBean:    只是一个特殊的接口,能自定义创建Bean对象,并控制这个Bean的创建过程


  ★11.Spring Cloud 和 Dubbo的区别:

性能:dubbo,RPC (TCP)    spring cloud (http)

跨语言: dubbo 只能在JAVA领域 spring cloud 可以跨多语言(C,JAVA,Python等)

序列化: dubbo dubbo协议    spring cloud   json

注册中心: dubbo zookepper   spring cloud nacos


 

标签:容器,面试题,作用域,Spring,Bean,实例,IOC
From: https://blog.csdn.net/LHR2575050945/article/details/139688622

相关文章