文章目录

  • 一. SSM框架
  • 1. 对Spring容器的理解
  • 2. Spring bean的生命周期、注入方式和作用域
  • 3. SpringMVC工作流程
  • 4. MyBatis的缓存
  • 5. MyBatis中#{}和${}的区别
  • 6. MyBatis中的动态SQL
  • 7. 简述SpringMVC中如何返回json数据。
  • 8. Spring的事务管理
  • 二. SpringBoot和SpringCloud
  • 1. SpringBoot优点:
  • 2. Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?
  • 3. Spring Boot 自动配置原理是什么?
  • 4. SpringBoot和SpringCloud的关系
  • 5. SpringBoot的配置文件有哪些?怎么实现多环境配置?
  • 6. SpringCloud五大组件
  • 7. Nacos作用以及注册中心原理
  • 三. 常用注解
  • 四. Spring、SpringMVC、SpringBoot区别


一. SSM框架

1. 对Spring容器的理解

Spring是一个开源容器框架,可以接管web层,业务层,dao层,持久层的组件,并且可以配置各种bean,和维护bean与bean之间的关系。

Spring容器的主要核心是:控制反转(IOC)依赖注入(DI)面向切面编程(AOP)
控制反转(IOC):当我们直接或间接通过构造方法创建对象时,spring容器使用了工厂模式直接帮我们把这个对象创建好了,不需要自己创建了,直接调用spring提供的对象就行了。IOC是依靠缓存解决循环依赖的。

  1. 一级缓存 存放已经 ready 的 bean,供其他 bean 使用
  2. 二级缓存,存放循环依赖中首先被创建的 bean(被增强后的单例 bean)
  3. 三级缓存, 存放对象名和对象工厂

依赖注入(DI):spring 使用 javaBean 对象的 set 方法或者带参数的构造方法为我们在创建所需对象时,将属性自动设成了我们所需要的的值。
面向切面编程(AOP):将一个个对象某些类似的方面横向抽成一个切面,对这个切面进行一些如权限控制、事物管理,记录日志等公用操作处理的过程就是面向切面编程的思想。
AOP实现动态代理的方式:

  1. 如果是接口采用JDK动态代理。
  2. 如果是类采用CGLIB方式实现动态代理。

2. Spring bean的生命周期、注入方式和作用域

Bean的生命周期

  1. 调用构造器或者通过工厂的方式创建bean对象
  2. 给bean对象注入值
  3. 调用初始化方法,进行初始化,初始化方法是通过init-method指定的
  4. 初始化以后,就可以使用了
  5. 当IOC容器关闭时,销毁bean对象

注入方式

  1. 通过构造方法注入
  2. 通过setter方法注入

Bean的作用域
原型的、单例的、Request、Session

3. SpringMVC工作流程

 用户发送请求至前端控制器
 前端控制器收到请求调用处理器映射器。
 处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给前端控制器。
 前端控制器调用处理器适配器
 处理器适配器经过适配调用具体的处理器(Controller,也叫后端控制器)。
 Controller执行完成返回ModelAndView
 处理器适配器将controller执行结果ModelAndView返回给前端控制器
 前端控制器将ModelAndView传给视图解析器
 视图解析器解析后返回具体View
 前端控制器根据View进行视图渲染,然后响应给用户。

4. MyBatis的缓存

一级缓存是SqlSession级别的缓存,默认开启。
二级缓存是NameSpace级别的缓存,多个SqlSession可以开启,需要进行配置开启。
缓存的查找顺序:二级缓存、一级缓存、数据库

5. MyBatis中#{}和${}的区别

1.#{}是预编译处理,${}是字符串替换
2.MyBatis在处理#{}时,将SQL中的#{}全部替换为?号,可以有效防止SQL注入,提高系统安全性。
3.MyBatis在处理${}时,把${}替换成变量的值,有SQL注入风险。

6. MyBatis中的动态SQL

if:进行条件的判断
where:在if判断后的SQL语句前面添加WHERE关键字,并处理SQL语句开始位置的AND或OR的问题
set:主要用于修改操作时出现的逗号问题
foreach:迭代操作

7. 简述SpringMVC中如何返回json数据。

1.在项目中加入json转换的依赖。
2.在请求处理方法中将返回值改为具体返回的数据类型。
3.在请求处理方法上使用 @ResponseBody注解

8. Spring的事务管理

注解:Transactional

二. SpringBoot和SpringCloud

1. SpringBoot优点:

独立运行,简化配置,自动配置,无代码生成和XML配置,应用监控

2. Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?

核心注解:@SpringBootApplication
组成:
@SpringBootConfiguration:组合了 @Configuration,实现了配置文件的功能
@EnableAutoConfiguration:自动配置
@ComponentScan:组件扫描

3. Spring Boot 自动配置原理是什么?

注解 @EnableAutoConfiguration, @Configuration, @ConditionalOnClass 就是自动配置的核心
@EnableAutoConfiguration:实现自动配置的注解
@Configuration:表示是一个配置文件

4. SpringBoot和SpringCloud的关系

  1. SpringBoot是Spring的一套快速配置脚手架,可以基于SpringBoot快速单个开发微服务。SpringCloud是基于SpringBoot的快速开发工具。
  2. SpringBoot专注于快速、方便集成的单个微服务个体。
    SpringCloud是专注于全局服务处理框架。
  3. SpringBoot使用了默认大于配置的理念,能不配置就不配置。
    SpringCloud是基于SpringBoot实现的,必须基于SpringBoot开发。

5. SpringBoot的配置文件有哪些?怎么实现多环境配置?

SpringBoot的核心配置文件是 applicationbootstrap 配置文件。
application 配置文件这个容易理解,主要用于 Spring Boot 项目的自动化配置。

bootstrap配置文件的特性:

  1. boostrap 由父 ApplicationContext 加载,比 applicaton 优先加载
  2. boostrap 里面的属性不能被覆盖

bootstrap 配置文件有以下几个应用场景:

  1. 使用 Spring Cloud Config 配置中心时,这时需要在 bootstrap 配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息;
  2. 一些固定的不能被覆盖的属性;
  3. 一些加密/解密的场景;

提供多套配置文件,如:
applcation.properties
application-dev.properties
application-test.properties
application-prod.properties

6. SpringCloud五大组件

1.Eureka:注册中心 2.Zuul:网关 3.Ribbon:负载均衡
4.Feign:远程调用 5.Hystrix:熔断器
Gateway:网关,路由,负载均衡等多种作用 Config:分布式配置

7. Nacos作用以及注册中心原理

Nacos分为注册中心配置中心;注册中心分为server(服务器)和client(客户端)

面试回答 架构 面试的框架_配置文件

注册中心原理:
服务注册的策略是每5秒向server发起一次心跳,心跳带上了服务名,服务IP,服务端口等信息。同时server也会向Client主动发起健康检查,支持TCP/HTTP检查。如果15秒内无心跳且健康检查失败则认为实例不健康,如果30秒内健康检查失败则剔除实例。

三. 常用注解

  1. RequestMapping:请求映射
  2. Autowired:自动装配
  3. Component:受spring管理的组件
  4. RequestBody:完成请求报文到对象的转换
  5. ResponseBody:完成对象到响应报文的转换

@Resource与@Autowired用法区别
相同点:@Resource和@Autowired都可以作为注入属性的修饰,在接口仅有单一实现类时,两个注解的修饰效果相同,可以互相替换,不影响使用。
不同点

  1. @Resource是Java自己的注解,@Resource有两个属性是比较重要的,分是name和type;Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。
  2. @Autowired是spring的注解,是spring2.5版本引入的,Autowired只根据type进行注入,不会去匹配name。如果涉及到type无法辨别注入对象时,那需要依赖@Qualifier或@Primary注解一起来修饰。

@ResponseBody和@RequestBody的区别
1、ResponseBody
@Responsebody 注解表示该方法的返回的结果直接写入 HTTP 响应正文(ResponseBody)中,一般在异步获取数据时使用;通常是在使用 @RequestMapping 后,返回值通常解析为跳转路径,加上 @Responsebody 后返回结果不会被解析为跳转路径,而是直接写入HTTP 响应正文中。

作用: 该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。

使用时机: 返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;

2、RequestBody
@RequestBody是作用在形参列表上,用于将前台发送过来固定格式的数据【xml 格式或者 json等】封装为对应的 JavaBean 对象,封装时使用到的一个对象是系统默认配置的 HttpMessageConverter进行解析,然后封装到形参上。

四. Spring、SpringMVC、SpringBoot区别

1.概念

  1. Spring:Spring是一个开源容器框架,可以接管web层,业务层,dao层,持久层的组件,并且可以配置各种bean,维护bean与bean之间的关系。Spring的核心是控制反转(IOC)、依赖注入(DI)、面向切面编程(AOP)。简单来说就是一个分层的轻量级开源框架。
  2. SpringMVC:SpringMVC是一种web层mvc框架,用于替代servlet(处理|响应请求,获取表单参数,表单校验等)。SpringMVC相当于是Struts2加上Spring的整合。
  3. SpringBoot:SpringBoot是一个微服务框架,简化了应用的开发和部署,提供了一堆依赖打包,按照使用习惯解决了依赖问题。-> 习惯大于约定

2.关系:SpringMVC < Spring < SpringBoot

3.总结:Spring Boot只是Spring本身的扩展,使开发,测试和部署更加方便。