java面试问题记录 20230223

  1. Spring Boot 的常用注解

  1. @SpringBootApplication:主要用于启动类上,标明该类是 Spring Boot 应用的入口。

  1. @Controller:标识一个类是 Spring MVC 控制器。

  1. @RestController:与 @Controller 相似,但是返回的结果是 JSON/XML 等,而不是视图。

  1. @Service:标识一个类是业务逻辑层。

  1. @Repository:标识一个类是 DAO 层。

  1. @Autowired:自动装配 Bean。

  1. @Value:自动装配配置文件中的属性值。

8.@Transactional:事务注解

2.@Transactional 注解 啥时候会回滚

在 Spring 中,@Transactional 注解可以用来标记一个方法或类的方法,使它们成为事务性操作。当标记了 @Transactional 的方法出现异常时,Spring 将会回滚事务。具体来说,如果一个方法被标记了 @Transactional,并且在该方法中抛出了 RuntimeException 异常或其子类的异常,那么 Spring 会自动回滚该事务。当然,也可以通过设置 rollbackFor 属性,让 Spring 在出现特定的异常时回滚事务。

假设在一个银行转账的场景中,从一个账户向另一个账户转账,需要在代码中使用 @Transactional 注解来保证转账操作的原子性和一致性。如果转账过程中发生异常,比如接收方账户不存在或余额不足等,那么事务会自动回滚,转出方的账户余额不会被扣减,保证了数据的完整性。

在 Spring 的 @Transactional 注解中,属性 rollbackFor 可以用于指定当哪些异常发生时需要回滚事务。具体来说,如果在 @Transactional 注解中指定了 rollbackFor 属性,则当方法抛出指定类型的异常时,Spring 会自动回滚事务。

例如,假设我们有一个 UserService 接口,其中定义了一个 transferMoney() 方法用于转账操作,它使用了 @Transactional 注解:

javaCopy codepublicinterfaceUserService {

@Transactional(rollbackFor = {InsufficientBalanceException.class})voidtransferMoney(String fromUser, String toUser, double amount)throws InsufficientBalanceException;

}

在上面的例子中,我们使用 rollbackFor 属性指定了 InsufficientBalanceException 类型的异常,这表示当该异常抛出时,Spring 会回滚事务。如果转账过程中出现了余额不足的情况,该方法会抛出 InsufficientBalanceException 异常,从而触发事务回滚,保证转账操作的一致性和正确性。

3.PG 和 MySQL 的区别

PostgreSQL(简称PG)和MySQL是两个常见的开源关系型数据库管理系统(RDBMS),二者有以下几个方面的区别:

  1. 数据类型:PG支持更丰富的数据类型,如数组、JSON、XML、UUID等,而MySQL相对较少;

  1. 事务处理:PG支持更复杂的事务处理和更严格的ACID(原子性、一致性、隔离性、持久性)规则,MySQL则较为简单;

  1. 性能:在大数据量和高并发情况下,PG的性能相对较好,而MySQL在小数据量和低并发情况下表现更好;

  1. 复制:PG的复制机制更加灵活和可靠,可以进行异步和同步复制,支持多主复制等,而MySQL则较为简单。

需要注意的是,PG和MySQL都是优秀的数据库管理系统,选择使用哪一个取决于具体的应用场景和需求。

4.ArrayList 和LinkedList的区别

ArrayList 和 LinkedList 都是 Java 集合框架中常用的 List 实现类,它们之间的主要区别在于底层数据结构不同。

ArrayList 底层采用数组实现,内部维护一个 Object[] 数组用于存储元素,每次添加元素时,如果数组容量不足,则会进行扩容,需要重新分配一个更大的数组,并将原数组中的元素复制到新数组中。因为 ArrayList 是基于数组实现的,所以它支持随机访问,查找元素时时间复杂度为 O(1),但是插入和删除元素时,需要将插入位置后面的元素全部向后移动一位,时间复杂度为 O(n)。

LinkedList 底层采用双向链表实现,每个节点包含前驱节点、后继节点和数据三个部分。LinkedList 不支持随机访问,查找元素时需要从链表头或链表尾开始遍历,时间复杂度为 O(n),需要注意的是,有些文章里面说,LinkedList 插入元素的时间复杂度近似 O ( 1 ),其实是有问题的,因为 add(int index, E element) 方法在插入元素的时候会调用 node(index) 查找元素,该方法之前我们之间已经确认过了,时间复杂度为 O ( n ),即便随后调用 linkBefore() 方法进行插入的时间复杂度为 O ( 1 ),总体上的时间复杂度仍然为 O ( n ) 才对。

因此,如果需要经常进行随机访问操作,应该选择 ArrayList,如果需要经常进行插入和删除操作,应该选择 LinkedList。

5. 网关的作用

Spring Cloud 网关的作用是在微服务架构中作为一个入口,接收客户端请求并将请求路由到后端服务。它可以用来处理安全、流量控制、监控、负载均衡等问题。具体而言,Spring Cloud 网关可以实现以下功能:

  1. 路由:将请求路由到不同的后端服务。

  1. 过滤:在请求路由到后端服务之前,可以对请求进行过滤处理,比如请求验证、日志记录等。

  1. 监控:统计各个服务的请求次数、响应时间等指标,帮助管理员及时发现异常。

  1. 安全:对请求进行鉴权、加密等操作,确保系统安全性。

  1. 负载均衡:对请求进行负载均衡,避免单一服务负载过大。

综上所述,Spring Cloud 网关是微服务架构中非常重要的一个组件,可以为整个系统提供高效、安全、稳定的请求入口

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值