1.同类方法a、b,都注解了事务,a调用b,b抛出异常,a、b方法数据库操作会回滚吗?
结论:在同一个类中,一个方法调用另外一个有注解(比如@Async,@Transational)的方法,注解是不会生效的
spring 在扫描bean的时候会扫描方法上是否包含@Transactional注解,如果包含,spring会为这个bean动态地生成一个子类(即代理类,proxy),代理类是继承原来那个bean的。此时,当这个有注解的方法被调用的时候,实际上是由代理类来调用的,代理类在调用之前就会启动transaction。然而,如果这个有注解的方法是被同一个类中的其他方法调用的,那么该方法的调用并没有通过代理类,而是直接通过原来的那个bean,所以就不会启动transaction,我们看到的现象就是@Transactional注解无效
————————————————
版权声明:本文为CSDN博主「蜗行牛步1024」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/levae1024/article/details/82998386
2.工厂模式、责任链模式
工厂
https://gitee.com/jinlibing/example/tree/master/src/main/java/org/example/factory责任链
https://gitee.com/jinlibing/example/tree/master/src/main/java/org/example/chain
3.联合索引生效业务场景,最左前缀匹配原则,in会用到索引吗?
联合索引生效业务场景:查询时有多个字段总是同时出现
最左前缀匹配原则:key index (a,b,c),可以支持a | a,b| a,b,c 3种组合进行查找,但不支持 b,c进行查找
in会用到索引吗:会索引(a,b,c)select * from myTest where a=3 and b>7 and c=3; ---- b范围值,断点,阻塞了c的索引
select * from myTest where b=3 and c=4; --- 联合索引必须按照顺序使用,并且需要全部使用,这里没有a
最后说说索引失效的条件
不在索引列上做任何操作(计算、函数、(自动or手动)类型转换),会导致索引失效而转向全表扫描
存储引擎不能使用索引范围条件右边的列
尽量使用覆盖索引(只访问索引的查询(索引列和查询列一致)),减少select *
mysql在使用不等于(!=或者<>)的时候无法使用索引会导致全表扫描
is null,is not null也无法使用索引
like以通配符开头(’%abc…’)mysql索引失效会变成全表扫描的操作。引用 https://zhuanlan.zhihu.com/p/108179618
4.linklist为什么add update remove效率高
基于双向链表实现,只需要修改插入位置或删除位置左右数据的引用目标即可
5.java 8 lambda去重
List<String> myList = list.stream().distinct().collect(Collectors.toList());
6.遇到什么问题怎么解决
-- mysql 默认设置show variables like 'group_concat_max_len';
--
SET GLOBAL group_concat_max_len = 102400;
SET SESSION group_concat_max_len = 102400;
7.mybatis $ #区别?
#{}方式能够很大程度防止sql注入(安全),${}方式无法防止Sql注入
https://blog.csdn.net/qq_44543508/article/details/97106696