2019/11/7 XXX 2家公司面试

1、分布式的场景怎么保证数据一致性?(给你一个场景你怎么设计)

使用mysql的乐观锁实现,步骤:首先读取需要更新的数据,前提是数据后面有一个字段version(版本号),此时记为version1,当你要去更新他的时候,用version1去和数据库的这条数据比较是否相等,如果相等,则修改,并且version1改为version2,那如果发现version1和数据库的vesion不相等时候就说明被别人修改了,此时重试。

2、如果这种操作是否会造成死循环的现象呢,就是某一个线程一直操作不了数据?这么解决

首先这个问题实质需要解决的时他的一个顺序性,怎么保证顺序性呢?给他排序。或者使用Zookeeper的乐观锁,他是使用临时顺序节点。先创建父锁,然后获取下面的所有的锁,然后排序,没有则监听前一个锁。
如果使用重试机制,可以捕获他的异常来重试,使用aop解决,做切面处理

3、事务何时回滚,是怎么实现的

在java中异常的基类为Throwable,他有两个子类xception与Errors。同时RuntimeException就是Exception的子类,只有RuntimeException才会进行回滚;

Spring事务回滚机制是这样的:当所拦截的方法有指定异常抛出,事务才会自动进行回滚!
我们需要注意的地方有四点: 如果你在开发当中引入Spring进行事务管理,但是事务没能正常的自动回滚,可以对照下面四点,缺一不可!

①被拦截方法-—— 注解式:方法或者方法所在类被@Transactional注解;
②异常—— 该方法的执行过程必须出现异常,这样事务管理器才能被触发,并对此做出处理;
③指定异常—— 默认配置下,事务只会对Error与RuntimeException及其子类这些UNChecked异常,做出回滚。 一般的Exception这些Checked异常不会发生回滚(如果一般Exception想回滚要做出配置)

事务传播机制:https://blog.csdn.net/weixin_44734394/article/details/102926384
事务:读未提交 脏
读已提交 不可重复读 (工作)
可重复读 幻读
丢失更新
ACID原则 :原子 一直 隔离性 持久性

标题4、arraylist是怎么扩容的是怎么排序的、如果存的对象,怎么根据对象中的年龄排序

数组类型的集合、可重复、有序的
第一步:扩容 如果是空的则直接给10的长度 否则加1 ; 把原来的数组复制到另一个内存空间更大的数组中
第二步:添加元素 把新元素添加到扩容以后的数组中
对象的compareTo方法重写 正序和倒序
5、反射的运用
6、业务扣减的逻辑
7、mysql的索引
8、xxl-job分布式任务调度平台
https://www.cnblogs.com/toov5/p/9976916.html

发布了33 篇原创文章 · 获赞 1 · 访问量 993

猜你喜欢

转载自blog.csdn.net/weixin_44734394/article/details/102969698
xxx