学习目标:
- Java面试题
- MySQL面试题
- Redis面试题
学习内容:
2024-01-25:
- mybatis中#{}和${}的区别
- Spring事务什么时候会失效
- 负载均衡算法有哪些
具体内容:
mybatis中#{}和${}的区别
概念
#{}是预编译处理、是占位符,${}是字符串替换,是拼接符
Mybatis在处理#{}的时候,会将sql中的#{}替换为?号,调用PreparedStatement来赋值
Mybatis在处理${}的时候,会将${}替换为变量的值,调用Statement来赋值;
使用#{}可以有效防止SQL注入,提高系统安全性
Spring事务什么时候会失效
概念
spring事务的原理是AOP,进行了切面增强,失效的根本原因就是AOP切面不起作用了
场景
1、发生了自调用,类里面使用了this调用本类的方法,此时这个this不是代理类,而是对象本身,需要将this变成类的代理类即可
2、方法不是public,@Transactional只能用于public方法上,否则会失效,非public方法可以开启AspectJ代理模式
3、数据库不支持事务
4、没有被spring管理
5、异常被吃掉,事务不会回滚
负载均衡算法有哪些
1、轮询:按照顺序将请求均衡的分配到所有的服务器上,不关心任何服务器状态
2、随机:通过系统随机函数,根据后台列表的大小值随机选取一台进行访问
3、源地址哈希值:获取客户端IP,使用哈希函数算法得到要访问服务器的序号,同一个IP在服务器列表没有发生改变的情况下,永远只会访问指定的那一台服务器
4、加权轮询:不同的服务器配置不同,可以设置权重,多分配请求给权重高的服务器
5、加权随机:同加权轮询一样,可对指定服务器多分配请求
6、最小连接数:相对而言最灵活的一种算法,针对不同配置的服务器配置,请求处理速度等连接情况,动态分配一台积压连接数最小的服务器来处理情况,尽可能的提高后台服务器的利用效率。