一、Spring
1.为什么要使用Spring
(1)spring 提供 ioc 技术,容器会帮你管理依赖的对象,从而不需要自己创建和管理依赖对象了,更轻松的实现了程序的解耦。
(2)spring 提供了事务支持,使得事务操作变的更加方便。
(3)spring 提供了面向切片编程,这样可以更方便的处理某一类的问题。
(4)更方便的框架集成,spring 可以很方便的集成其他框架,比如 MyBatis、hibernate 等。
2.什么是IOC(控制反转)
ioc:控制权转移,应用程序本身不负责依赖对象的创建和维护,而是由外部容器负责和维护。ioc的目的是创建对象并且组装对象之间的关系。
3.什么是DI(依赖注入)
在依赖注入中,您不必创建对象,但必须描述如何创建它们。您不是直接在代码中将组件和服务连接在一起,而是描述配置文件中哪些组件需要哪些服务。由 IoC 容器将它们装配在一起。
4.依赖注入的几种方法
(1)构造函数注入
(2)setter 注入
(3)接口注入
(4)注解注入
5.spring 中有多少种 IOC 容器?
(1)BeanFactory - BeanFactory 就像一个包含 bean 集合的工厂类。它会在客户端要求时实例化 bean。
(2)ApplicationContext - ApplicationContext 接口扩展了 BeanFactory 接口。它在 BeanFactory 基础上提供了一些额外的功能。
6.spring 提供了哪些配置方式?
(1)基于 xml 配置
bean 所需的依赖项和服务在 XML 格式的配置文件中指定。这些配置文件通常包含许多 bean 定义和特定于应用程序的配置选项。它们通常以 bean 标签开头。
(2)基于注解配置
您可以通过在相关的类,方法或字段声明上使用注解,将 bean 配置为组件类本身,而不是使用 XML 来描述 bean 装配。默认情况下,Spring 容器中未打开注解装配。因此,您需要在使用它之前在 Spring 配置文件中启用它。
(3)基于 Java API 配置
Spring 的 Java 配置是通过使用 @Bean 和 @Configuration 来实现。
7.spring 支持几种 bean 的作用域?
spring 支持 5 种作用域,如下:
(1)singleton:spring ioc 容器中只存在一个 bean 实例,bean 以单例模式存在,是系统默认值;
(2)prototype:每次从容器调用 bean 时都会创建一个新的示例,既每次 getBean()相当于执行 new Bean()操作;
Web 环境下的作用域:
(3)request:每次 http 请求都会创建一个 bean;
(4)session:同一个 http session 共享一个 bean 实例;
(5)global-session:用于 portlet 容器,因为每个 portlet 有单独的 session,globalsession 提供一个全局性的 http session。
8.spring 自动装配 bean 有哪些方式?
no:默认值,表示没有自动装配,应使用显式 bean 引用进行装配。
byName:它根据 bean 的名称注入对象依赖项。
byType:它根据类型注入对象依赖项。
构造函数:通过构造函数来注入依赖项,需要设置大量的参数。
autodetect:容器首先通过构造函数使用 autowire 装配,如果不能,则通过 byType 自动装配。
9.解释一下什么是 aop?
aop 是面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。简单来说就是统一处理某一“切面”(类)的问题的编程思想,比如统一处理日志、异常等。
10.什么是 Aspect?
aspect(切面) 由 pointcount 和 advice 组成, 它既包含了横切逻辑的定义, 也包括了连接点的定义. Spring AOP 就是负责实施切面的框架, 它将切面所定义的横切逻辑编织到切面所指定的连接点中.
11.AOP 有哪些实现方式?
实现 AOP 的技术,主要分为两大类:
静态代理 - 指使用 AOP 框架提供的命令进行编译,从而在编译阶段就可生成 AOP 代理类,因此也称为编译时增强;
1)编译时编织(特殊编译器实现)
2)类加载时编织(特殊的类加载器实现)。
动态代理 - 在运行时在内存中“临时”生成 AOP 动态代理类,因此也被称为运行时增强。
1)JDK 动态代理
2)CGLIB
二、SpringMVC
12.spring mvc 运行流程?
(1)spring mvc 先将请求发送给 DispatcherServlet。
(2)DispatcherServlet 查询一个或多个 HandlerMapping,找到处理请求的 Controller。
(3)DispatcherServlet 再把请求提交到对应的 Controller。
(4)Controller 进行业务逻辑处理后,会返回一个ModelAndView。
(5)Dispathcher 查询一个或多个 ViewResolver 视图解析器,找到 ModelAndView 对象指定的视图对象。
(6)视图对象负责渲染返回给客户端。
13.spring mvc 有哪些组件?
(1)前置控制器 DispatcherServlet。
(2)映射控制器 HandlerMapping。
(3)处理器 Controller。
(4)模型和视图 ModelAndView。
(5)视图解析器 ViewResolver。
三、SpringBoot
14.为什么要用 spring boot?
(1)配置简单
(2)独立运行
(3)自动装配
(4)无代码生成和 xml 配置
(5)提供应用监控
(6)提升开发效率
15.spring boot 核心配置文件是什么?
(1)bootstrap (. yml 或者 . properties):boostrap 由父 ApplicationContext 加载的,比 applicaton 优先加载,且 boostrap 里面的属性不能被覆盖;
(2)application (. yml 或者 . properties):用于 spring boot 项目的自动化配置。
四、SpringCloud
16.spring cloud 的核心组件有哪些?
(1)Eureka:服务注册于发现。
(2)Feign:基于动态代理机制,根据注解和选择的机器,拼接请求 url 地址,发起请求。
(3)Ribbon:实现负载均衡,从一个服务的多台机器中选择一台。
(4)Hystrix:提供线程池,不同的服务走不同的线程池,实现了不同服务调用的隔离,避免了服务雪崩的问题。
(5)Zuul:网关管理,由 Zuul 网关转发请求给对应的服务。
五、Mybatis
17.MyBatis 中 #{}和 $ {}的区别是什么?
#{}是预编译处理,${}是字符替换。 在使用 #{}时,MyBatis 会将 SQL 中的 #{}替换成“?”,配合 PreparedStatement 的 set 方法赋值,这样可以有效的防止 SQL 注入,保证程序的运行安全。