Java面试题---框架
框架
author: “\U0001F336 辣椒炒饭”
tags:
- Spring
- SpringMVC
- SpringBoot
categories: - 面试题
date: 2023-03-04 18:21:00
框架
author: “\U0001F336 辣椒炒饭”
tags:
- Spring
- SpringMVC
- SpringBoot
categories: - 面试题
date: 2023-03-04 18:21:00
框架
author: “\U0001F336 辣椒炒饭”
tags:
- Spring
- SpringMVC
- SpringBoot
categories: - 面试题
date: 2023-03-04 18:21:00
# 谈一谈 Spring 框架。
一般来说,Spring 框架是指 Spring Framework,其核心的两个概念是 IoC(Inversion of Control: 控制反转)和 AOP(Aspect-Oriented-Programming:面向切面编程),优点是便于集成第三方组件(电子邮件,任务,调度,缓存等)
# Spring,Spring MVC,Spring Boot 之间的关系。
Spring 包含多个功能模块,最重要的就是 Spring-Core (作用是 IoC 依赖注入功能),Spring 的模块也依赖该模块,比如 Spring MVC
SpringMVC 提供快速的 MVC 架构能力,核心思想是通过把业务层,数据,显示分离来组织代码。
SpringBoot 简化了配置,可以做到开箱即用。
# 谈谈你对 Spring IoC 的理解。
IoC 控制反转,是一种设计思想,将手动创建对象的控制权交给 Spring 框架来管理,
其实依赖注入就是一个很明显的例子。
# 什么是 Spring Bean?
Bean 代指的就是那些被 IoC 容器所管理的对象。
# 将一个类声明为 Bean 的注解有哪些?
就是常用的几个 SpringBoot 注解
- @Component: 通用注解,可标注任意类为 Spring 组件,如果一个 Bean 不知道属于哪个层,可以使用 @Component 注解。
- @Repository: 对应持久即 Dao 层,主要用于数据库相关操作
- @Serverice: 对应服务层,主要涉及一些复杂的逻辑,需要用到 Dao 层。
- @Controller: 对应 Spring MVC 控制层,主要用户接受用户请求并调用 Service 层返回数据给前端页面。
# @Component 和 @Bean 的区别是什么?
前者作用于是类,后者是方法。
@Compnonent 通常是通过类路径扫描来自动侦测以及自动装配到 Spring 容器中,@Bean 比 @Component 注解的自定义性强。
# 注入 Bean 的注解有哪些?
Spring 内置的 @Autowired 以及 JDK 内置的 @Resource 和 @Inject 都可以用于注入 Bean。
# @Autowired 和 @Resource 的区别是什么?
Autowired 属于 Spring 内置的注解,默认的注入方式 ByType,也就是说会优先根据接口类型去匹配并注入 Bean
(接口的实现类)
@Autowired 是 Spring 提供的注解。@Resource 是 JDK 提供的注解。前者是 ByType,后者是 ByName。
# Bean 的作用域有哪些?
- singleton : IoC 容器中只有唯一的 bean 实例。Spring 中的 bean 默认都是单例的,是对单例设计模式的应用。
- prototype : 每次获取都会创建一个新的 bean 实例。也就是说,连续 getBean () 两次,得到的是不同的 Bean 实例。
- request (仅 Web 应用可用): 每一次 HTTP 请求都会产生一个新的 bean(请求 bean),该 bean 仅在当前 HTTP request 内有效。
- session (仅 Web 应用可用) : 每一次来自新 session 的 HTTP 请求都会产生一个新的 bean(会话 bean),该 bean 仅在当前 HTTP session 内有效。
- application/global-session (仅 Web 应用可用): 每个 Web 应用在启动时创建一个 Bean(应用 Bean),该 bean 仅在当前应用启动时间内有效。
- websocket (仅 Web 应用可用):每一次 WebSocket 会话产生一个新的 bean。
# Spring Boot 中的监视器是什么?
SpringBoot actuator 是 Spring 启动框架中的重要功能之一。Spring Boot 监视器
# 什么时候需要给实体类序列化?
- 需要把内存中的对象状态数据保存在一个文件或者数据库中时
- 网络通信时把套接字在网络中传输对象时,使用 RPC 协议进行网络通信。
# 为什么 Java 类需要实现 Serializable 接口。
- 将对象持久化,把对象的字节序列永久的保存至硬盘上,通常为一个文件,允许我们在内存中创建可复用的 Java 对象。
- 网络传输对象,在网络上传输对象的字节系列。