招银提前批 视频一面 7.10
招银提前批 视频一面 7.10
大概30分钟,中间面试官打了个电话
- 自我介绍
- 上来先做题,lc easy难度
- 介绍下HashMap和ConcurrentHashMap
- 介绍下ArrayList和LinkedList
- 介绍下static关键字,其他关键字有了解的再介绍一下
- SQL了解么,写个sql吧。订单表,有订单id和下单商品,统计销量最多的前10个商品的sql语句(太久没写sql了,没写上来)
- 介绍项目
- Spring事务开启
- Spring基于@Transactional 的事务失效场景(不了解)
补充最后一问
- 如果使用 MySQL 且引擎是 MyISAM,则事务会不起作用,原因是 MyISAM 不支持事务,改成 InnoDB 引擎则支持事务。
- 注解 @Trasactional 只能加在 public 修饰的方法上事务才起效。如果加在 protect、private 等非 public 修饰的方法上,事务将失效。
- 如果在开启了事务的方法内,使用了 try-catch 语句块对异常进行了捕获,而没有将异常抛到外层,事务将不起效。
- 在不同类之间的方法调用中,如果 A 方法开启了事务,B 方法没有开启事务,B 方法调用了 A 方法。如果 B 方法中发生异常,但不是调用的 A 方法产生的,则异常不会使 A 方法的事务回滚,此时事务无效。如果 B 方法中发生异常,异常是调用的 A 方法产生的,则 A 方法的事务回滚,此时事务有效。在 B 方法上加上注解 @Trasactional,这样 A 和 B 方法就在同一个事务里了,不管异常产生在哪里,事务都是有效的。简单地说,不同类之间方法调用时,异常发生在无事务的方法中,但不是被调用的方法产生的,被调用的方法的事务无效。只有异常发生在开启事务的方法内,事务才有效。
- 在同一个类的方法之间调用,如果 A 方法调用了 B 方法,不管 A 方法有没有开启事务, B 方法的事务是无效的。
- 如果使用了Spring + MVC,则 context:component-scan 重复扫描问题可能会引起事务失效。
- 在同一个Service中两个方法,一个方法调用另外一个本Service的方法,俩个都加了transactional注解,第二个也会失效。