spring如何实现aop???
spring基于JDK的proxy动态代理或者cglib实现aop
动态代理:运行时生成代理类,基于反射,定义目标类和实现的接口,定义handler实现invocationhandler接口,然后将接口的类加载器和接口类数组、handler作为proxy的参数返回一个代理对象。
静态代理:编译时生成代理类,需要编写代理类,代理类和目标类都实现了共同的接口和方法,代理类持有目标类的引用。
cglib:CGLIB通过动态生成目标类的子类来实现代理。这个子类会重写目标类中所有不是final的方法,并在这些方法中拦截父类方法的调用。这样做可以在不修改目标类代码的情况下,对方法执行增强操作。
远程调用过程出现服务无法影响,怎么处理???
进行服务熔断处理,采用后备方案
合同导入10w条数据,怎么实现1-2秒完成???
采用线程池:确定每个线程插入的数据量,比如1000,然后计算线程数量,总共为10个线程,所以配置为coresize:5,maxsize:10,线程存活时间为1秒,阻塞队列为100,拒绝策略采用callerruns。然后自定义Runnerable接口实现类,每次从列表数据中获取当前线程要处理的列表(开始位置-结束位置的列表),然后批量插入,最后countdownlatch-1。
策略模式是什么???
是一种行为型的设计模式,其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。大多用于if-else过多的情况
主要角色有:context、strategy、concreteStrategy
context类有包含strategy的map,实现ApplicationListener的onApplicationEvent方法,通过自定义的ioc获取到strategy类型的实现类,并将各种实现类存到map里面,每次执行的时候,根据策略标志拿到对应的策略实现类并执行。
strategy接口含有策略标志、任务执行方法。
concreteStrategy实现类返回具体的标志和处理具体的执行任务。
乐观锁???
乐观锁一般是默认不发生资源竞争的一种锁,通过版本号 或者
CAS实现:变量,预期值,更新值 当预期值和内存中的数据一致才更改为更新值
但是会造成ABA问题,因为途中修改变量再改回去这种事情是不允许发生的,可以通过AtomicStampedReference来实现,添加时间戳和版本标志