Spring 面试题大全(持续更新中……)

1.注入属性是都有哪些注解?

①@Autowired:最常用的注解,注入的是引用类型,根据byType自动注入,如果想要byName,可以搭配@Qualifier注解使用

②@Value:注入八大基本数据类型和String

③@Resource:相当于@Autowired根据,默认是根据byName自动注入(要求JDK1.6)

④@Reference:dubbo独有的注解

2.@RequestMapping和@RequestParam的区别

@RequestMapping是修饰方法或者类的,@RequestParam是修饰属性的

3.后台如何接受前端返回的JSON数据

如果是表单提交的话,可以通过request.getParameter()获取;其他的可以在后台的方法上加上@ResponseBody注解

spring没有内置转json的类,需要依赖三方jar包--jackson

4.什么是Spring?核心内容有什么?

Spring是个生态,是分层的javaee的一站式开源框架。

Spring的两大核心内容是IOC和AOP。

IOC是控制反转,创建和管理对象的事交给Spring容器来做,底层采用的是反射+工厂模式;默认是单例的,只创建一个bean实例,如果想要多例可以通过scope指定,IOC中有一个名词叫做DI(依赖注入),是为属性赋值的,DI有三种注入方式:构造器注入、setter注入、接口注入

AOP是面向切面编程,将业务逻辑代码与非业务逻辑代码(比如:日志、事务)分离,底层用的是动态代理模式,实现了代码复用,增强了代码可读性,主要应用有:日志输出、事务管理、权限拦截、性能检测

5.介绍一下SpringMVC

springMVC是spring下的表现层子框架,springMVC有一个核心控制器,所有的请求都会先发送到核心控制器这里,核心控制器在Tomcat启动时会创建并执行init函数,init函数会读被@Controller标注的类,将由@RequestMapping标注的方法的映射关系存放到HandlerMapping(处理器映射器)中,键放地址,值放方法,当前端发送来请求时,会由核心控制器发送到处理器映射器,通过地址执行相应的方法,并将结果返回给核心控制器做处理后,返回给用户。

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L21lZXRiZXR0ZXJoYw==,size_16,color_FFFFFF,t_70

6.过滤器(filter)与拦截器(Interceptor)的区别

  • 过滤器是基于servlet的,在web.xml里配置;拦截器是基于框架的,在mvc.xml里配置
  • 过滤器底层是回调函数;拦截器底层是反射机制
  • 过滤器对所有请求过滤;拦截器对controller请求过滤
  • 过滤器只被调用一次,拦截器被多次调用

7.@Value和@ConfigurationProperties的区别

  1. @ConfigurationProperties写在类上,其他的信息写在配置文件中;@Value写在属性上
  2. @ConfigurationProperties可以批量注入,传入的值是对象;@Value是一个一个注入,传入具体的属性
  3. @ConfigurationProperties支持松散绑定,对名字的要求没有那么严格(firstName first_name);@Value不支持松散绑定
  4. @ConfigurationProperties不支持spel;@Valuespel;@Value支持spel
  5. @ConfigurationProperties支持JSR303校验;@Valuespel;@Value不支持JSR303校验

8.SpringBoot与SpringCloud的区别

  • springboot相当于单个微服务,springcloud是将一个个单个微服务整合起来
  • springboot可以离开springcloud单独开发,springcloud离不开springboot,依赖关系
  • springboot专注开发单个个体微服务,springcloud关注全局服务治理框架

9.Spring的常用注解

  • @AutoWried
  • @Controller
  • @Service
  • @Configuration
  • @Component
  • @RequestMapping
  • @ResponseBody

10.Spring Bean生命周期

读取配置---定义bean---实例化bean---对象赋值---初始化---销毁

11.Spring的循环依赖

spring循环依赖是指2个以上对象相互拥有彼此,形成闭环。

spring是通过三级缓存来解决这个问题的。一级缓存存放初始化好的对象,二级缓存存放属性未填充的对象,三级缓存存放bean工厂。

12.Dubbo与SpringCloud的区别?

  1. springCloud采用rest方式;dubbo采用RPC方式
  2. springCloud的注册中心是eureka;dubbo的是zookeeper
  3. springCloud侧重于微服务一站式解决方案;dubbo的定位是一款RPC框架

13.Spring Cloud有哪些组件?

  1. 服务注册与发现  eureka
  2. 负载均衡  ribbon
  3. 网关  zuul
  4. 断路器  hystrix
  5. 安全  security
  6. 远程调用 feign

14.什么是服务熔断?什么是服务降级?

服务熔断是A服务调用B服务发现调用不通,就不在让A服务发起调用,避免“雪崩效应”

服务降级是A服务调用B服务,调用失败后访问callback中的降级方法

15.微服务的优缺点,在项目中踩过的坑

优点:

  • 服务内聚,一个服务干一件事
  • 易于与第三方集成
  • 低耦合
  • 开发效率高

缺点:

  • 运维难度增大
  • 服务间通信成本高

16.eureka和zookeeper都是注册中心,区别是什么?

  1. zookeeper保证的是CP;eureka保证的是AP
  2. zookeeper的master节点宕机时,其他节点会重新选举leader,在选举期间整个zk不可用。eureka在一个节点挂掉后,会随机选取另一个节点,不过不能保证数据时效性。
  3. eureka有自我保护机制

17.springboot启动原理(自动配置)

初始化一个SpringApplication对象,执行对象的run方法。

@SpringBootApplication 相当于@Configuration  @EnableAutoConfiguration  @ComponentScan

三个注解的总和。

在使用springboot时,会依赖autoconfigure包。这个包里有一个spring.factories文件,该文件定义很多入口的配置类,在springboot启动时内部会加载这个文件,进而加载有需要的配置类。

18.spring是如何管理事物的?

  • 在数据库连接池中获取一个连接
  • 设置为手动提交

PlatformTransactionManager是事物管理器接口,里边有获取事物信息、提交、回滚事物的三个方法。常见的事务管理器都实现了这个接口。

事物分为编程式事物和声明式事物

@Transactional注解的实现原理是spring容器会为加入这个注解的对象,生成一个代理对象,实际调用的是代理对象,代理对象实现了AOP的增强   

19.Spring事物失效的几种情况

  1. new出来的对象,使用事物不生效,因为只有spring定义的bean才接受事物。
  2. 非public方法事物失效,因为AOP的特性。
  3. 不支持事物的数据库引擎,会导致事物失效
  4. 当前类的内部方法调用,比如a方法加了事物,b方法没有,在b方法中调用a,事物失效。

 

 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值