其他
面试题系列:Mysql 夺命连环13问
1. 能说下 myisam 和 innodb 的区别吗?
2. 说下 mysql 的索引有哪些吧,聚簇和非聚簇索引又是什么?
id int(11) not null,
age int(11) not null,
primary key(id),
key(age)
);
3. 那你知道什么是覆盖索引和回表吗?
explain select id,age from user where age=1; //可以直接从索引获取
4. 锁的类型有哪些呢
5. 你能说下事务的基本特性和隔离级别吗?
6. 那 ACID 靠什么保证的呢?
7. 那你说说什么是幻读,什么是 MVCC?
8. 那你知道什么是间隙锁吗?
select * from user where age=20 for update;
begin;
insert into user(age) values(10); #成功
insert into user(age) values(11); #失败
insert into user(age) values(20); #失败
insert into user(age) values(21); #失败
insert into user(age) values(30); #失败
9. 你们数据量级多大?分库分表怎么做的?
10. 那分表后的 ID 怎么保证唯一性的呢?
11. 分表后非 sharding_key 的查询怎么处理呢?
for (int shardingIndex = 0; shardingIndex < 1024; shardingIndex++) {
taskList.add(() -> (userMapper.getProcessingAccountList(shardingIndex)));
}
List<ThirdAccountInfo> list = null;
try {
list = taskExecutor.executeTask(taskList);
} catch (Exception e) {
//do something
}
public class TaskExecutor {
public <T> List<T> executeTask(Collection<? extends Callable<T>> tasks) throws Exception {
List<T> result = Lists.newArrayList();
List<Future<T>> futures = ExecutorUtil.invokeAll(tasks);
for (Future<T> future : futures) {
result.add(future.get());
}
return result;
}
}