最全十分钟就能回顾Spring常问的知识点,带你突击面试没问题!,2024Java网络编程总结篇

Java核心架构进阶知识点

面试成功其实都是必然发生的事情,因为在此之前我做足了充分的准备工作,不单单是纯粹的刷题,更多的还会去刷一些Java核心架构进阶知识点,比如:JVM、高并发、多线程、缓存、Spring相关、分布式、微服务、RPC、网络、设计模式、MQ、Redis、MySQL、设计模式、负载均衡、算法、数据结构、kafka、ZK、集群等。而这些也全被整理浓缩到了一份pdf——《Java核心架构进阶知识点整理》,全部都是精华中的精华,本着共赢的心态,好东西自然也是要分享的

image

image

image

内容颇多,篇幅却有限,这就不在过多的介绍了,大家可根据以上截图自行脑补

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

AOP的功能就是在运行时,把指定的代码动态的加入到指定的地方,来完成一些非业务逻辑的功能,从而避免手动编写这些代码。

AOP往往采用动态代理的方式来实现。

作用域

Spring bean的作用域主要有五种:

  • singleton:在整个Spring IoC容器仅存在一个Bean实例,Bean以单例方式存在。singleton是Spring的默认配置。
  • prototype每次从Spring IoC容器中获取Bean时,都返回一个新的实例
  • request:每次HTTP请求都会创建一个新的Bean实例。该作用域仅适用于Spring构建的web环境。
  • session:同一个HTTP Session共享一个Bean,不同Session使用不同的Bean。该作用域仅适用于Spring构建的web环境。
  • application:限定一个Bean的作用域为整个web应用。该作用域仅适用于Spring构建的web环境。

实例化

Spring中的bean的实例化主要有三种方式

  • 无参构造方法,这种方式最常用
  • 使用静态工厂
  • 使用实例工厂

注入方式

属性的注入有两种方式:byTypebyName

  • byType:如果容器中存在一个与指定属性类型相同的bean,那么将该属性自动装配。
    比如在Controller注入Service

private IUserService userService

byType方式会自动注入IUserService的实现类UserServiceImpl,如果实现类有多个,默认会抛出异常。下文讲述如何解决。

  • byName:通过属性名称自动装配。
    比如在Controller注入Service

private IUserService userService

通过byName的方式需要指定实现类UserServiceImplName

@Service(“userService”)
public class UserServiceImpl implements IUserService {…}

事务隔离级别

Spring提供了五种隔离级别:

  • DEFAULT(默认):意思就是数据库用啥我用啥
  • SERIALIZABLE(串行化):事务之间以一种串行的方式执行
  • REPEATABLE READ(可重复读):是MySQL默认的隔离级别,同一个事务中相同的查询会看到同样的数据行
  • READ COMMITED(读已提交):一个事务可以读到另一个事务已经提交的数据
  • READ UNCOMMITED(读未提交):一个事务可以读到另一个事务未提交的数据

除了第一个是Spring新增的,其余的四个都是和数据库的事务隔离级别一一对应

事务传播机制

事务传播机制是指在一个可能含有事务的方法中,调用了另一个可能含有事务的方法,这两个事务应该如何去取舍。最常见的场景就是在Service层。比如OrderService#createOrder()方法里调用了StockService#decreaseStock(),而这两个方法明显都是有事务的。这时,两个事务如何相互影响就是事务传播机制。

Spring提供了七种事务传播机制:

  • REQUIRED:Spring默认值,如果存在事务,则加入当前事务;如果没有事务,则开启一个新的事务。
  • REQUIRES_NEW:如果当前存在事务,把当前事务挂起,新建事务。
  • SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行。
  • NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
  • MANDATORY:如果当前存在事务,则加入当前事务;如果没有事务,就抛出异常。
  • NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。
  • NESTED:支持当前事务,新增Savepoint,与当前事务同步提交或回滚。外层事务失败时,会回滚内层事务所做的动作。而内层事务操作失败并不会引起外层事务的回滚。

生命周期

Spring管理了对象的生命周期,所以有必要了解Spring到底是怎么管理bean的生命周期的。如果我们想要在bean生命周期的某个时刻执行特定的功能应该怎么办?

Spring bean的生命周期颇为复杂,以下是整个过程,参考org.springframework.beans.factory.BeanFactory
Spring Bean生命周期

常用注解

标识类

  • @Component:标识此类由Spring IOC容器管理
  • @Controller:标识此类是接收和转发请求用的Controller类,是@Component的细化注解
  • @Service:标识此类是处理业务逻辑的Service类,是@Component的细化注解
  • @Repository:标识此类是处理持久化操作相关的类,通常是XxxDao,是@Component的细化注解

注入类

  • @Autowired:属于Spring,是根据类型(byType)的方式自动注入属性,默认是必须的。如果要设置成可选,需要把required设置成false

@Autowired(required = false)
private IUserService userService;

如果IUserService的实现类不止一个,默认会报错。需要配合注解@Qualifier指定具体的实现类

public interface IUserService {
}

@Component(“helloUserService”)
public class HelloUserServiceImpl implements IUserService {
}

@Component(“worldUserService”)
public class WorldUserServiceImpl implements IUserService {
}

正确注入方式

@Autowired
@Qualifier(“helloUserService”)
private IUserService userService;

  • @Qualifier:见@Autowired
  • @Resource属于JDK,默认是按照名称(byName)进行装配的。
  • 如果没有指定name属性,默认取字段的名称作为bean名称寻找依赖对象。
  • 如果没有指定name属性,且byName的方式无法装配,则会按照byType的方式进行装配。
  • 如果仅指定的type属性,也会通过byType的方式进行装配,找不到或者找到多个都会抛异常。
  • 只要指定了name属性,就不会再按照byType的方式进行装配。
  • @Value:用于注入一些配置文件中的常量,如jdbc相关的配置等

web相关

  • @RequestMapping:这个注解会将HTTP请求映射到Controller的处理方法上。

// 简单用法
@RequestMapping(“/index”)

// 映射多个url
@RequestMapping({“/index”, “/home”})

// 限制请求方式为Post,等同于注解 @PostMapping(“/index”)
@RequestMapping(value = “/index”, method = RequestMethod.POST)

  • @RequestBody:将HTTP请求正文插入方法中,用来处理请求的Content-Type不是application/x-www-form-urlencoded(表单)编码的内容,例如:application/jsonapplication/xml等。也就是说当客户端向后台提交数据不是以表单,而是以JSON数据的方式时,可以使用@RequestBody注解将数据映射到后台参数列表

// 前端
$.ajax({
type: ‘POST’,
dataType: “json”,
contentType: “application/json; charset=utf-8”,
data: JSON.stringify(paramJson),
url: “”,
success: function (data) {
}

总结

总的来说,面试是有套路的,一面基础,二面架构,三面个人。

最后,小编这里收集整理了一些资料,其中包括面试题(含答案)、书籍、视频等。希望也能帮助想进大厂的朋友

三面蚂蚁金服成功拿到offer后,他说他累了

三面蚂蚁金服成功拿到offer后,他说他累了

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**

需要这份系统化的资料的朋友,可以点击这里获取

  • 10
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值