2024.11.1
1、过滤器和拦截器的区别
过滤器是基于spring的
拦截器是基于Java Web的
2、session 和 cookie 的区别、关系
| cookie | session |
存储位置 | 保存在浏览器 (客户端) | 保存在服务器 |
存储数据大小 | 限制大小,存储数据约为4KB | 不限制大小,因为它是对象 |
生命周期 | 可以主动设置生命周期 ,过期会自动删除 | 可以设置,生命周期有限制(有间隔,一般为30min) |
数据类型 | 字符串类型 | object |
安全性 | cookie不安全 (存储在浏览器的) | 安全 |
session 依赖于 cookie
一、3、HTTP状态码
200 | 成功 |
301 | 请求资源被转发,移动 |
404 | url错误,找不到 |
500 | 服务器内部出错 |
4、对Spring IOC的理解
它是 bean 对象的容器,管理 Java 对象的实例化和初始化,控制对象与对象之间的依赖关系
5、Bean的作用域
singleton:单例模式
prototype:原型模式 【深拷贝】
request
session
global-session
6、Bean的生命周期
从定义开始,到实例化-->属性注入-->初始化-->最终在使用完毕后被销毁
7、重定向和转发
- 重定向 2 次请求,请求转发 1 次请求
- 重定向地址栏会变,请求转发地址栏不变
- 重定向是浏览器跳转,请求转发是服务器跳转
- 重定向可以跳转到任意网址,请求转发只能跳转当前项目
- 定向会丢失请求参数, 请求转发不会丢失请求数据
8、spring Boot 自动装配原理
启动注解:@SpringBootApplication 是复合注解
包含 @SpringBootConfiguration(是spring配置类)【包含@Bean注解的方式定义 Bean 方法 】
@EnableAutoConfiguration(启用自动配置类 使用了 SPI 技术)【会根据应用程序的依赖和配置信息,自动配置适当的Bean和组件】
调用了 AutoConfigurationImportSelector 这个注解下的selectImports方法,这个方法中有springFactoriesLoader,使用了 SPI 技术扫描META-INF下面的spring.factory文件
@ComponentScan(组件扫描)【以查找和加载Spring组件。默认情况下,它会扫描注解所在类的包及其子包下的所有组件,并将它们注册到Spring容器中】三个核心注解
9、过滤器和拦截器的区别
- 过滤器(filter)是基于 Java Web 的
- 拦截器(interceptore)是基于 spring 的提供的
10、 什么是拆箱和装箱
拆箱:将包装类型转换为基本类型
装箱:将基本类型封装成引用类型,封装成对象,可以使用对象的方法
11、装箱和拆箱的区别
拆箱:将包装类型转换为基本类型
装箱:将基本类型封装成引用类型,封装成对象,可以使用对象的方法
12、Autowired 和 Resource 的区别:
Autowired | Resource | |
装配策略不同 | 根据类型进行装配 | 先根据名称,找不到再根据类型装配 |
属于 spring 注解 | jdk 自带的注解 |
AutoWired: 默认按类型进行装配,默认情况下必须要求依赖对象必须存在
Resource:默认按照名称装配,名称可以通过 name 属性进行指定
@Autowired 与@Qualifier 配合使用
13、Spring MVC 执行流程
Spring Mvc的两个适配器
处理器适配器:(HandlerAdapter) (HttpRequestHandlerAdapter)
设计模式:责任链和适配器
详细
- 用户向前端控制器 (DispatcherServlet) 发送请求
- 前端控制器 (DispatcherServlet) 接收到请求后调用处理映射器 (HandlerMappin g)
- 处理器映射器 (HandlerMapper) 找到具体的处理器,生成处理器对象以及处理器拦截器,再一起返回给前端控制器
- 然后前端控制器调用处理器适配器
- 处理器适配器调用具体的处理器
- 处理器适配器 (HandlerAdapter)将处理器执行结果ModelAndView返回给前端控制器 (Controller)
- 然后前端控制器将ModelAndView传给视图解析器解析View
- 前端控制器将视图解析器返回的View进行渲染,然后响应给用户
14、Spring MVC 设计模式
适配器模式:允许多个对象按照特定的顺序处理请求,在 spring mvc 中调用处理器映射器返回一条执行链,包含(拦截器和处理器)的执行顺序,再由处理器适配器调用执行,是一个责任链设计模式
责任链模式:目的是解决接口和实现类不匹配问题,如果一个接口拥有很多方法,但是我们只期望使用某些方法时,如果用类实现这个接口,则必须重写所有抽象方法,这个时间则可以使用适配器来处理
15、Java Web 三大组件
Listener (监听器)
Fliter (过滤器)
servlet (控制器)
16、Spring IOC 注入的方式
构造方法注入
属性注入(有@Autowired 和 @Resource )
set 方法注入
17、 如何写一个编程式事务
- 先注入事务管理器 PlatformTransactionManager
- 定义事物的配置 DefaultTransactionDefinition(传播属性、隔离级别 可设可不设,不设置就是默认的)
- 开启事务
- 最后再判断,如果没有异常就提交事务,如果有异常就回滚事务
//1.注入事务管理器@Autowiredprivate PlatformTransactionManager transactionManager;//2.编程式事务public void createUser(User user) {//3.定义一个事务默认配置DefaultTransactionDefinition def = new DefaultTransactionDefinition();//设置事务传播属性def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);//设置事务传隔离级别def.setIsolationLevel(TransactionDefinition.ISOLATION_DEFAULT);//4.开启事务TransactionStatus transaction = transactionManager.getTransaction(def);try {//保存当前执行操作userDao.save(user);
// int i = 1 / 0;//5.提交事务transactionManager.commit(transaction);} catch (Exception e) {//6.回滚事务transactionManager.rollback(transaction);throw e;}
18、 事务的特性
原子性(Atomicity / əˈtɒmɪsɪti /):即不可分割性,事务要么全部被执行,要么就全部不被执行。
一致性(Consistency / kənˈsɪstənsi /):事务必须使数据库从一个一致性状态变换到另一个一致性状态,即一个事务执行之前和执行之后都必须处于一致性状态
隔离性(Isolation / aɪˈsoʊ.leɪ.ʃən /):即一个事务执行之前和执行之后都必须处于一致性状态。
持久性(Durability / djuːˈræ.bɪ.lɪ.ti /):事务一旦结束,数据就持久到数据库。
redo_log:解决持久性
undo_log:解决一致性和原子性
19、jdk1.8 新特性
1. 接口增强
接口增强(允许接口有方法体)
接口用default和static修饰,
2.函数式接口
函数式接口(只有一个抽象类接口)
使用@FunctionalInterface
注解来标记判断其是否只包含一个抽象方法
3.方法引用
方法引用(一种语法糖)
Lambda表达式的简化形式,可以提高代码的可读性和简洁性。语法:类名::方法名
4.Stream Api(重要)
Java Stream 常用操作方式
过滤 | 使用filter()方法可以过滤掉集合中不符合条件的元素。 |
映射 | 使用map()方法可以对集合-中的每一个元素进行映射处理。 |
排序 | 使用sorted()方法可以对集合中的元素进行排序。 |
去重 | 使用distinct()方法去掉集合中的重复的元素。 |
统计 | 使用count()方法可以对集合中的元素进行统计。 |
分组 | 使用groupingBy()方法可以按照某一个属性进行分组。 |
遍历 | 使用forEach()方法可以遍历集合中的每一个元素。 |
聚合 | 使用reduce()方法可以对集合中的元素进行聚合计算。 |
转换 | 使用collect()方法可以将集合中的元素转换为另一个集合。 |
平均 | 使用average()方法可以用于计算一组元素的平均值。 |
匹配 | 使用anyMatch()、allMatch()、noneMatch()方法可以对集合中的元素进行匹配判断。 |
5.Optional 工具类
Optional类(工具类)
为了避免null值异常,防止报 NullpointException(空指针异常)。
6.新的日期和时间
新的日期、时间的 API