1、Spring
1、Spring基础
- Spring框架了解吗?
- 轻量级,开箱即用。旨在提高开发效率、系统可维护性。
- 主要模块:核心容器(Core Container)、数据访问/集成(Data Access/Integeration)、Web(包含Spring MVC)、AOP、工具(Instrument)、消息(Messaging)、测试(Test)等。
- Spring的优缺点
- 优点:轻量级(2MB)、控制反转(实现解耦合)、面向切面(业务逻辑与系统服务分离)、MVC框架、容器(管理对象生命周期和配置)、事务管理、异常处理
- 缺点:使用大量反射框架,非常占内存。(1)重量级框架;(2)集成复杂;(3)配置复杂...
- Spring,Spring MVC,Spring Boot之间的关系
- Spring MVC是Spring中的模块,帮助Spring快速构建MVC架构的Web程序。
- Spring Boot旨在简化Spring开发(减少配置文件)
2、Spring IoC、AOP
IoC
- 能说一下IoC(Inversion of Control)的设计模式吗?
- 是一种设计思想而非具体实现。将手动创建对象的控制权(控制)交给Spring(反转)。
- IoC容器管理对象之间的相互依赖关系,完成对象的注入。(创建对象只需配置文件/注解即可,不用考虑对象如何被创建的)
- 优点:降低代码耦合度、提高代码可测试性、复用性、灵活性
- IoC原理
- 工厂模式+反射机制
- 什么是Spring Bean?
- IoC容器管理的对象。
- Spring提供了三种方式来配置IoC容器中的bean:(1)基于xml文件;(2)基于注解;(3)基于注解+java代码显示配置
- 将一个类声明为Bean的注解有哪些?
- @Component
- @Repository
- @Service
- @Controller
- 什么数据结构存储Spring给我们管理的bean?
- 默认为HashMap,"Bean名称-Bean实例" 对应 "key-value"(Bean存储在BeanFactory容器中)
- @Component 和 @Bean 的区别是什么?
- @Component在类上使用,表明这个类是个组件类,需要Spring为这个类创建bean。
- @Bean在方法上使用,告诉Spring这个方法将会返回一个Bean对象,需要把返回的对象注册到Spring的应用上下文中。
- (bean更灵活,但需要自己实现动态逻辑。component由容器管理,但是省事一些)
- 注入Bean的注解有哪些?
- @Autowired、@Resource、@Inject
- bean的几种注入(创建)方式
- 使用构造器创建Bean实例、使用静态工厂方法创建Bean、调用实例工厂方法创建Bean
- @Autowired 和 @Resource 的区别是什么?
- @Autowired是Spring提供,@Resource是JDK提供
- @Autowired注入方式为byType,@Resource注入方式为byName
- ...
- Bean的作用域有哪些?
- singleton
- prototype
- request
- session
- application/global-session
- websocket
- 补充:配置bean作用域的方式:1)xml方式;2)注解方式
- 单例Bean的线程安全问题了解吗?
- Bean的生命周期了解吗?
- Spring的工作流程
AOP
- 谈谈你对Spring AOP的理解?
- 是一种通过 预编译方式 和 运行期动态代理 的方式实现程序动态统一添加功能的技术。所谓切面,就是将那些与业务逻辑无关的公共功能(比如日志记录、事务处理等)分离出来,形成一个个独立的切面(Aspect),然后在程序运行时将这些切面动态地应用到业务逻辑中
- 实现方式:JDK动态代理、CGLib动态代理
- AOP实现类
- 通知(Advice)、切点(Pointcut)、切面(Aspect)、连接点(Join Point)、织入(Weaving)、目标(target)、代理(Proxy)
- AOP中有哪几种设计模式?怎么实现的?
- Spring AOP 和 AspectJ AOP有什么区别?
- JDK代理和CGLib代理的区别?
- 你的项目有没有使用AOP?
3、Spring MVC
- 说一下你对Spring MVC的理解
- 通过将业务逻辑、数据、显示分离来组织代码,轻量级Web框架
- 通过注解,让Java类成为处理请求的控制器而无需实现任何接口
- Spring MVC的优点?
- 与Spring集成使用方便、配置简单易上手、支持RESTful风格、支持各种视图
- Spring MVC核心组件有哪些?
- 前端控制器(DispatcherServlet)
- 处理器映射器(HandlerMapping)
- 处理器适配器(HandlerAdapter)
- 处理器(Handler)
- 视图解析器(ViewResolver)
- 视图(View)
- Spring MVC工作原理了解吗?
- 统一异常怎么处理?
- 使用注解。@ControllerAdvice + @ExceptionHandler
- Spring MVC常用注解有哪些?
- @Controller、@RequestMapping、@ResponseBody、@RequestBody、@PathVariable、@RestController、@ExceptionHandler
- 介绍下Spring MVC拦截器
- 对应HandlerInterceor接口
- Spring MVC怎么配置拦截器
- SpringMVC的拦截器和Filter过滤器有什么差别?
4、Spring事务
- Spring管理事务的方式有几种?
- 编程式事务
- 声明式事务
- Spring 事务中哪几种事务传播行为?
- Spring 事务中的隔离级别有哪几种?
- @Transactional(rollbackFor = Exception.class)注解了解吗?
2、Spring Boot
- 什么是Spring Boot?
- 简化Spring。不再依赖Spring中的xml配置。“习惯优于配置”
- Spring Boot的优缺点?
- 优点:快速的构建能力、起步依赖、内嵌容器支持、易于维护、易于部署(内置servlet)
- 缺点:学习成本、过度封装、运行时占用资源、版本更新频繁
- 什么是SpringBoot Starter?
- 简化配置。解决的是依赖管理配置复杂的问题。构建Web程序加spring-boot-starter-web。想引入持久化功能加spring-boot-starter-data-jpa
- SpringBoot常用的Start有哪些?
- 运行SpringBoot有哪几种方式?
- SpringBoot的核心注解是哪个? -@SpringBootApplication
- @Value注解的原理
- SpringBoot需要独立的容器运行吗?
- 不需要,内置了Tomcat/Jetty等容器
- SpringBoot支持哪些日志框架?
- Java Util Logging, Log4j2, Lockback
- Spring Boot常用的两种配置文件(yaml配置的优势在哪里?)
- properties、yaml
- yaml优势:配置有序、支持数组、简洁
3、Spring MVC
- 说一下你对Spring MVC的理解?
- 轻量级web框架
- 核心思想:通过将业务逻辑、数据、显示分离来组织代码
- 通过一套注解,让一个简单的Java类成为处理请求的控制器,而无须实现任何接口;支持restful风格
- SpringMVC有哪些优点?
- 与Spring集成使用方便,生态好
- 配置简单,快速上手
- 支持restful风格
- 支持各种视图技术,支持各种请求资源映射策略
- Spring MVC的核心组件有哪些?
- 前端控制器(DispatcherServlet)、处理器映射器(HandlerMapping)、处理器适配器(HandlerAdapter)、处理器(Handler)、视图解析器(ViewResolver)、视图(View)
- Spring MVC工作原理(执行流程)了解吗?
- 快速记忆技巧:核心控制器捕获请求、查找Handler、执行Handler、选择ViewResolver,通过ViewResolver渲染视图并返回
- 统一异常怎么处理?
- 使用注解。
@ControllerAdvice+@ExceptionHandler
- 使用注解。
- SpringMVC常用注解有哪些?
- @Controller、@ResponseBody、@RequestBody、@PathVariable、@RestController: @Controller+@ResponseBody、@ExceptionHandler
- 介绍下SpringMVC拦截器
- SpringMVC怎么配置拦截器?
- 定义的Interceptor类要实现HandlerInterceptor接口;
- 继承适配器类,接着在接口方法当中,实现处理逻辑;然后在SpringMvc的配置文件中配置拦截器
- SpringMVC的拦截器和Filter过滤器有什么差别?