面试3复盘(未完)

一上来就给我干蒙了

Java8新特性

Java 8 (又称为 jdk 1.8)
Lambda 表达式 − Lambda 允许把函数作为一个方法的参数(函数作为参数传递到方法中)。

方法引用 − 方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码。

默认方法 − 默认方法就是一个在接口里面有了一个实现的方法。

新工具 − 新的编译工具,如:Nashorn引擎 jjs、 类依赖分析器jdeps。

Stream API −新添加的Stream API(java.util.stream) 把真正的函数式编程风格引入到Java中。

Date Time API − 加强对日期与时间的处理。

Optional 类 − Optional 类已经成为 Java 8 类库的一部分,用来解决空指针异常。

Nashorn, JavaScript 引擎 − Java 8提供了一个新的Nashorn javascript引擎,它允许我们在JVM上运行特定的javascript应用。

事务的注解?

@Transactional
参考文章:文章有误https://www.cnblogs.com/xiaohan666/p/9272581.html
事务的管理方式有2种:
编程式事务管理:需要将数据库的自动提交等取消,并且需要自己编写事务代码
声明式事务管理模式:spring利用spring AOP特性编写了注解的方式来管理事务,避免开发人员编写大量的事务代码

什么时候不回滚?

Spring会对unchecked异常进行事务回滚;如果是checked异常则不回滚。

辣么什么是checked异常,什么是unchecked异常?

派生于Error或者RuntimeException(比如空指针,1/0)的异常称为unchecked异常

其他继承自java.lang.Exception得异常统称为Checked Exception,如IOException、SqlException等

再通俗一点:你写代码出现的空指针等异常,会被回滚,文件读写,网络出问题,spring就没法回滚了。

如果我想check异常也想回滚怎么办,注解上面写明异常类型即可。

@Transactional(rollbackFor={Exception.class.RuntimeException.class})

类似的还有norollbackFor,自定义不回滚的异常。

看图:https://www.processon.com/view/54e04d67e4b0c4be3d43cb2b?fromnew=1#map

特性:

  1. 在service类标签上添加@Transactional(即实现类,一般不建议在接口上),可以将整个类纳入spring事务管理,在每个业务方法执行时都会开启一个事务,不过这些事务采用相同的管理方式。并且当在某个service实现类中某个方法调用了另一个这个实现类中的方法,则两个方法都必须声明事务,才能被当成一个事务进行管理
  2. @Transactional 注解只能应用到 public 可见度的方法上。 如果应用在protected、private或者 package可见度的方法上,也不会报错,不过事务设置不会起作用。
  3. 默认情况下,spring会对unchecked异常进行事务回滚;如果是checked异常则不回滚。
  4. 只读事务: @Transactional(readOnly=true)
    启动事务会增加线程开销,数据库因共享读取而锁定(具体跟数据库类型和事务隔离级别有关)。通常情况下,仅是读取数据时,不必设置只读事务而增加额外的系统开销。

解决Transactional注解不回滚

  1. 检查你方法是不是public的。

  2. 你的异常类型是不是unchecked异常。SQL异常是unchecked异常 如果我想check异常也想回滚怎么办,注解上面写明异常类型即可。

@Transactional(rollbackFor={Exception.class.SQLException.class})

类似的还有norollbackFor,自定义不回滚的异常。
另外 如果已经在service中进行了try catch 操作 由于已经被抓获异常 故事务也不会回滚

  1. 数据库引擎要支持事务,如果是mysql,注意表要使用支持事务的引擎,比如innodb,如果是myisam,事务是不起作用的。
  2. 是否开启了对注解的解析
<tx:annotation-driven transaction-manager="transactionManager"
proxy-target-class="true"/>
  1. spring是否扫描到你这个包,如下是扫描到org.test下面的包
<context:component-scan base-package="org.test"
</context:component-scan>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值