oppo后端16连问(二)
4. 你们的接口幂等是如何保证的?
如果你调用下游接口超时了,是不是考虑重试?如果重试,下游接口就需要支持幂等啦。
实现幂等一般有这8种方案:
• select+insert+主键/唯一索引冲突
• 直接insert + 主键/唯一索引冲突
• 状态机幂等
• 抽取防重表
• token令牌
• 悲观锁(如select for update,很少用)
• 乐观锁
• 分布式锁
大家平时是用哪个方案解决幂等的,最后结合工作实际讲讲哈。可以看下我之前这篇文章: 聊聊幂等设计
5. 你们的mySQL架构是怎样的?
大家可以结合自己公司的MySQL架构聊聊。如果不是很清楚的话,可以结合我之前写的来看看哈:面试必备:聊聊MySQL的主从
数据的库高可用方案
• 双机主备
• 一主一从
• 一主多从
• MariaDB同步多主机
• 数据库中间件
5.1 双机主备
• 优点:一个机器故障了可以自动切换,操作比较简单。
• 缺点:只有一个库在工作,读写压力大,未能实现读写分离,并发也有一定限制
5.2 一主一从
• 优点:从库支持读,分担了主库的压力,提升了并发度。一个机器故障了可以自动切换,操作比较简单。
• 缺点:一台从库,并发支持还是不够,并且一共两台机器,还是存在同时故障的机率,不够高可用。
5.3 一主多从
• 优点:多个从库支持读,分担了主库的压力,明显提升了读的并发度。
• 缺点:只有一台主机写,因此写的并发度不高
5.4 MariaDB同步多主机集群
• 有代理层实现负载均衡,多个数据库可以同时进行读写操作;各个数据库之间可以通过Galera Replication方法进行数据同步,每个库理论上数据是完全一致的。
• 优点:读写的并发度都明显提升,可以任意节点读写,可以自动剔除故障节点,具有较高的可靠性。
• 缺点:数据量不支持特别大。要避免大事务卡死,如果集群节点一个变慢,其他节点也会跟着变慢。
5.5 数据库中间件
• mycat分片存储,每个分片配置一主多从的集群。
• 优点:解决高并发高数据量的高可用方案
• 缺点:维护成本比较大。
大家有兴趣可以看看我这篇文章哈:面试必备:聊聊MySQL的主从
6. 常见的索引结构有?哈希表结构属于哪种场景?
哈希表、有序数组和搜索树。
• 哈希表这种结构适用于只有等值查询的场景
• 有序数组适合范围查询,用二分法快速得到,时间复杂度为 O(log(N))。查询还好,如果是插入,就得挪动后面所有的记录,成本太高。因此它一般只适用静态存储引擎,比如保存2018年某个城市的所有人口信息。
• B+树适合范围查询,我们一般建的索引结构都是B+树。
7.给你ab,ac,abc字段,你是如何加索引的?
这主要考察联合索引的最左前缀原则知识点。
• 这个最左前缀可以是联合索引的最左N个字段。比如组合索引(a,b,c)可以相当于建了(a),(a,b),(a,b,c)三个索引,大大提高了索引复用能力。
• 最左前缀也可以是字符串索引的最左M个字符。
因此给你ab,ac,abc字段,你可以直接加abc联合索引和ac联合索引即可。