Spring基础面试题(三)

1. JWT令牌由哪几个部分组成,每一个部分都表示什么含义? 存储什么样的数据?

三部分组成,

1.Header:存储的是令牌的类型,原始数据是Json

2.Payload:载荷,存储的是自定义的数据,原始数据是Json

3.Signature:签名,防止Token被篡改确保安全,可以通过签名算法计算的。
2. 你们项目中的异常是如何处理的? 如何定义一个全局异常处理器 ? 全局异常处理器中是否可以定义多个方法来捕获不同类型的异常 ?

在类上定义一个@RestControllerAdvice的注解,声明这是一个全局异常处理器,其中@RestControllerAdvice = @ControllerAdvice + @ResponseBody,处理异常的方法返回值会转换为json后再响应给前端。定义多个方法可以捕获多个不同类型的异常。
3. Mybatis的映射配置文件定义的规范是什么 ?  项目开发中,你们的SQL是基于注解方式开发的还是XML映射配置文件开发的。

1.同包同名,与Mapper层对应的接口包名和接口名一致

2.方法与接口层定义的方法一致。

简单的增删查改用SQL注解,动态复杂的SQL会使用XML映射文件。

### Spring 框架基础面试题目 #### 什么是Spring框架? Spring是一个轻量级的Java开发框架,旨在简化企业应用程序开发。它提供了依赖注入、面向切面编程(AOP)、事务管理等功能[^1]。 #### 什么是Spring Bean? Spring Bean是由Spring IoC容器管理和实例化的Java对象。这些对象由Spring容器配置并注入到其他对象中,从而实现依赖注入的功能[^2]。 #### 一个Spring Bean定义包含哪些内容? 一个Spring Bean定义通常包括以下几部分: - 类名:指定要实例化的目标类。 - 属性:可以设置Bean的各种属性值。 - 方法:初始化和销毁方法等生命周期回调函数。 - 构造参数:用于传递构造函数所需的参数。 - 自动装配模式:控制如何自动装配依赖关系。 - 范围:指明Bean的作用范围(如singleton, prototype等)。 #### 如何给Spring容器提供配置元数据? 可以通过种主要方式来向Spring容器提供配置信息: - XML文件形式; - 注解驱动的方式,在代码里使用特定注解标记组件和服务; - Java Config,即完全采用纯Java代码的形式来进行配置。 #### Spring基于XML注入Bean有哪些方式? 主要有四种基本类型的依赖注入方法: - 设值注入(Setter Injection),通过setter方法完成; - 构造器注入(Constructor Injection),利用带参构造器进行赋值; - 字段注入(Field Injection),直接操作成员变量; - 工厂方法注入(Factory Method Injection),借助工厂模式创建对象。 #### 怎样定义类的作用域? 在声明Bean时可通过`scope`属性设定其作用域,默认情况下是单例模式(`singleton`);也可以设成原型模式(`prototype`)或其他自定义的作用域类型。 #### 解释Spring支持的几种Bean的作用域? 常见的作用域有: - `Singleton`: 整个应用上下文中只有一个共享实例; - `Prototype`: 每次请求都会新建一个新的实例; - `Request`: 对于每次HTTP请求都创建新的Bean实例; - `Session`: 同一session内保持同一个Bean实例; - `Global Session`: 在全局范围内维持唯一的一个Bean实例,主要用于Portlet环境下的Web应用。 #### 单例bean是否线程安全? 默认情况下,Spring中的单例beans不是线程安全的。如果多个线程同时访问同一无状态的业务逻辑层,则可能会出现问题。因此开发者需自行考虑同步机制或设计为无状态的服务。 #### Spring如何处理多线程并发问题? 对于需要在线程间共享的数据结构,应该采取适当措施确保它们的安全性,比如使用ThreadLocal存储局部副本,或是引入读写锁保护资源访问。另外还可以结合AOP技术拦截方法执行前后的动作以增强安全性。 #### @Autowired注解的工作原理是什么? 当遇到带有此注解的方法/字段时,Spring会尝试按照类型匹配找到合适的候选者,并将其注入进来。如果有多个符合条件的选择项存在歧义的话,那么还需要进一步依据名称或者其他限定符来做更精确的选择。 #### 是否可以在Spring中注入null 或空字符串? 是可以做到这一点的。只要允许目标属性接受这样的输入即可,不过这往往意味着某些特殊场景下才会有意义,例如表示未设置的状态或者是可选参数的存在。 ```java // 示例代码展示@Autowired注入过程 @Service public class MyService { private final AnotherService anotherService; @Autowired(required = false) public MyService(@Nullable AnotherService anotherService) { this.anotherService = anotherService; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值