当前位置: 首页 > news >正文

面试题——Spring

1.SpringSpringBufferSpringBuilder的区别?

        值可变性

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

      SpringBufferSpringBuilder则是可变的

        ②线程安全性

      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.BeanFactoryFactoryBean的区别:

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

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


  ★11.Spring CloudDubbo区别:

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

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

序列化dubbo dubbo协议    spring cloud   json

注册中心: dubbo zookepper   spring cloud nacos


 

相关文章:

  • 我的创作纪念日 CF1620D Exact Change 题解
  • Python - 处理电子书的库
  • 【代码随想录训练营】【Day 49+】【动态规划-8】| Leetcode 121, 122, 123
  • C#使用OpenXml读取Word、PPT、Excel文档内容
  • linux pip 离线安装
  • 2024-6-10-zero shot,few shot以及无监督学习之间的关系是什么
  • NettyのBufferChannelSelector用法
  • 2024年春季学期《算法分析与设计》练习13
  • opencv中的图像操作
  • 端口占用多:UE4/UE5像素流送云推流时如何优化端口使用?
  • mac无法读取windows分区怎么办 苹果硬盘怎么读取
  • Android SDK版本号与API Level 的对应关系
  • ctfshow-web入门-命令执行(web53-web55)
  • 数据结构:手撕代码——顺序表
  • 【Java】解决Java报错:IllegalArgumentException
  • (三)从jvm层面了解线程的启动和停止
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 07.Android之多媒体问题
  • DataBase in Android
  • Intervention/image 图片处理扩展包的安装和使用
  • Java 多线程编程之:notify 和 wait 用法
  • Kibana配置logstash,报表一体化
  • MySQL几个简单SQL的优化
  • Redux系列x:源码分析
  • springboot_database项目介绍
  • supervisor 永不挂掉的进程 安装以及使用
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • 记一次和乔布斯合作最难忘的经历
  • 将 Measurements 和 Units 应用到物理学
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 前端_面试
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 微信小程序填坑清单
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • puppet连载22:define用法
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • ###STL(标准模板库)
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (06)金属布线——为半导体注入生命的连接
  • (2)空速传感器
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (SERIES12)DM性能优化
  • (笔试题)分解质因式
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (接上一篇)前端弄一个变量实现点击次数在前端页面实时更新
  • (三十五)大数据实战——Superset可视化平台搭建
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (四)汇编语言——简单程序
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • (转)人的集合论——移山之道
  • .bat批处理(四):路径相关%cd%和%~dp0的区别