目录
集合总结

Java异常体系

常见的运行时异常?
1.NullPointerException 空指针异常
2.ClassNotFoundException 指定类不存在
3.NumberFormatException 字符串转换为数字异常
4.IndexOutOfBoundsException 数组下标越界异常
5.ClassCastException 数据类型转换异常
6.FileNotFoundException 文件未找到异常
7.NoSuchMethodException 方法不存在异常
8.IOException IO 异常
9.SocketException Socket 异常
Object类有哪些方法

权限修饰符

分布式锁
实现分布式锁的三种方式
1.基于数据库实现分布式锁 基于数据库的实现方式的核心思想是:在数据库中创建一个表,表中包含方法名等字段,并在方法名字段上创建唯一索引,想要执行某个方法,
就使用这个方法名向表中插入数据,成功插入则获取锁,执行完成后删除对应的行数据释放锁。
2.基于缓存(Redis等)实现分布式锁 SETNX expire delete
(1)获取锁的时候,使用setnx加锁,并使用expire命令为锁添加一个超时时间,超过该时间则自动释放锁,锁的value值为一个随机生成的UUID,通过此在释放锁的时候进行判断。当且仅当 key 不存在,将 key 的值设为 value ,并返回1;若给定的 key 已经存在,则 SET NX 不做任何动作,并返回0。
(2)获取锁的时候还设置一个获取的超时时间,若超过这个时间则放弃获取锁。
(3)释放锁的时候,通过UUID判断是不是该锁,若是该锁,则执行delete进行锁释放。
3.基于Zookeeper实现分布式锁 zooKeeper是一个为分布式应用提供一致性服务的开源组件,它内部是一个分层的文件系统目录树结构,规定同一个目录下只能有一个唯一文件名
分布式事务
事务失效的8种原因
1、spring的事务注解@Transactional只能放在public修饰的方法上才起作用,如果放在其他非public(private,protected)方法上,虽然不报错,但是事务不起作用
2、如使用mysql且引擎是MyISAM,则事务会不起作用,原因是MyISAM不支持事务,可以改成InnoDB引擎
3、在业务代码中如果抛出RuntimeException异常,事务回滚;但是抛出Exception,事务不回滚;
4、如果在加有事务的方法内,使用了try…catch…语句块对异常进行了捕获,而catch语句块没有throw new RuntimeExecption异常,事务也不会回滚
5、在类A里面有方法a 和方法b, 然后方法b上面用 @Transactional加了方法级别的事务,在方法a里面 调用了方法b, 方法b里面的事务不会生效。原因是在同一个类之中,方法互相调用,切面无效 ,而不仅仅是事务。这里事务之所以无效,是因为spring的事务是通过aop实现的。解决方法:
@Service
public class OrderServiceImpl implements OrderService {
@Autowired
private OrderService orderService;
@Transactional
public void update(Order order) {
orderService.updateOrder(order);
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void updateOrder(Order order) {
// update order
}
}
6.数据源没有配置事务管理器
@ComponentScan("com.alanchen")
@EnableTransactionManagement
@Confi

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



