MySQL索引:
1.传入ID根据传入的ID查询数据。正常的sql语句是:select * from 表a where a.id in ("","",……)问在id这个字段上的索引是否生效。
答:不一定生效,当传入的参数ID过大(或者说数据量多时)就会不生效导致全表扫描。
2.有一个表儿,它的表表有一个ID,有一个sex性别,然后现在给那个表的那个sex,当这个表那个量有一条左右,然后我给我要查出来还那个sex也是性别为男的那个用户都给查出来,然后问是不是该给这个sex的字段加上索引。
答:不加,因为sex性别这个字段的值的 区分度(或复杂度或区)别度太小了数据量一大就又会导致全表扫描。
3.我现在有一个对账系统,a服务,负责去那个去查找谁欠我钱或者我欠谁钱啊?然后然后,然后把这个,比如说
ID为一的那个用ID为一的那个交易,然后我欠了ID为一的那个交易,500块钱,然后我给ID我调用服务B,然后去给ID为一的那个用户转账500,然后再调用之后他那个服务超时了,我就要重试调用转账服务b,但是是在重试的时候,他其实已经完成那个转账了(第一次调用时就已经转账成功了,超时是因为服务于服务之间的调用超过了设置的失效时间),该怎么去限制他这个东西?避免重复转账。
答:我在可以在服务B端去把已经转账成功的那个ID给记录下来,然后当他第二次请求过来的时候,然后去筛选他这个交易是否成功,但是又有另外一种情况,就是当他第一次失败超时之后,他第二次请求紧接着过来,但是我转账还正在持续当中(还没完成),这种情况这种就可以用一种,怎么说呢,这种就可以用那个。也可以再存起来,再把这个ID也存起来,然后去去进行完先过滤,先第一步先过滤它那个ID是否是否已经转账成功,如果没有成功再过滤那个是否正在继续转账?。
但是还有一种情况就是比如说线程a你去读写的这一刹那请求过来,然后你根本,然后你也没读到,他就是过来了,这种情况应该怎么弄呢?
这个其实可以用数据库来完成,比如说我创建了一个表儿,然后用这个ID去做那个主键,然后当他请求过来的时候,我就存进去,当他第二次请求在存储的时候,他就会发生冲突了吗?然后在代码里面捕货转账那一块代码,如果发生异常或者转账失败就去修改该表,当转账失败后,能继续重试。也可以使用mq但没必要。
面试问的问题
最新推荐文章于 2023-04-06 23:06:11 发布