范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

我要进大厂之mysql夺命连环13问

  想进大厂,mysql不会那可不行,来接受mysql面试挑战吧,看看你能坚持到哪里?1. 能说下myisam 和 innodb的区别吗?
  myisam引擎是5.1版本之前的默认引擎,支持全文检索、压缩、空间函数等,但是不支持事务和行级锁,所以一般用于有大量查询少量插入的场景来使用,而且myisam不支持外键,并且索引和数据是分开存储的。
  innodb是基于聚簇索引建立的,和myisam相反它支持事务、外键,并且通过MVCC来支持高并发,索引和数据存储在一起。2. 说下mysql的索引有哪些吧,聚簇和非聚簇索引又是什么?
  索引按照数据结构来说主要包含B+树和Hash索引。
  假设我们有张表,结构如下:create table user(   id int(11) not null,   age int(11) not null,   primary key(id),   key(age) );
  B+树是左小右大的顺序存储结构,节点只包含id索引列,而叶子节点包含索引列和数据,这种数据和索引在一起存储的索引方式叫做聚簇索引,一张表只能有一个聚簇索引。假设没有定义主键,InnoDB会选择一个唯一的非空索引代替,如果没有的话则会隐式定义一个主键作为聚簇索引。
  这是主键聚簇索引存储的结构,那么非聚簇索引的结构是什么样子呢?非聚簇索引(二级索引)保存的是主键id值,这一点和myisam保存的是数据地址是不同的。
  最终,我们一张图看看InnoDB和Myisam聚簇和非聚簇索引的区别
  3. 那你知道什么是覆盖索引和回表吗?
  覆盖索引指的是在一次查询中,如果一个索引包含或者说覆盖所有需要查询的字段的值,我们就称之为覆盖索引,而不再需要回表查询。
  而要确定一个查询是否是覆盖索引,我们只需要explain sql语句看Extra的结果是否是"Using index"即可。
  以上面的user表来举例,我们再增加一个name字段,然后做一些查询试试。explain select * from user where age=1; //查询的name无法从索引数据获取 explain select id,age from user where age=1; //可以直接从索引获取 4. 锁的类型有哪些呢
  mysql锁分为共享锁和排他锁,也叫做读锁和写锁。
  读锁是共享的,可以通过lock in share mode实现,这时候只能读不能写。
  写锁是排他的,它会阻塞其他的写锁和读锁。从颗粒度来区分,可以分为表锁和行锁两种。
  表锁会锁定整张表并且阻塞其他用户对该表的所有读写操作,比如alter修改表结构的时候会锁表。
  行锁又可以分为乐观锁和悲观锁,悲观锁可以通过for update实现,乐观锁则通过版本号实现。5. 你能说下事务的基本特性和隔离级别吗?
  事务基本特性ACID分别是:
  原子性指的是一个事务中的操作要么全部成功,要么全部失败。
  一致性指的是数据库总是从一个一致性的状态转换到另外一个一致性的状态。比如A转账给B100块钱,假设中间sql执行过程中系统崩溃A也不会损失100块,因为事务没有提交,修改也就不会保存到数据库。
  隔离性指的是一个事务的修改在最终提交前,对其他事务是不可见的。
  持久性指的是一旦事务提交,所做的修改就会永久保存到数据库中。
  而隔离性有4个隔离级别,分别是:
  read uncommit 读未提交,可能会读到其他事务未提交的数据,也叫做脏读。
  用户本来应该读取到id=1的用户age应该是10,结果读取到了其他事务还没有提交的事务,结果读取结果age=20,这就是脏读。
  read commit 读已提交,两次读取结果不一致,叫做不可重复读。
  不可重复读解决了脏读的问题,他只会读取已经提交的事务。
  用户开启事务读取id=1用户,查询到age=10,再次读取发现结果=20,在同一个事务里同一个查询读取到不同的结果叫做不可重复读。
  repeatable read 可重复复读,这是mysql的默认级别,就是每次读取结果都一样,但是有可能产生幻读。
  serializable 串行,一般是不会使用的,他会给每一行读取的数据加锁,会导致大量超时和锁竞争的问题。6. 那ACID靠什么保证的呢?
  A原子性由undo log日志保证,它记录了需要回滚的日志信息,事务回滚时撤销已经执行成功的sql
  C一致性一般由代码层面来保证
  I隔离性由MVCC来保证
  D持久性由内存+redo log来保证,mysql修改数据同时在内存和redo log记录这次操作,事务提交的时候通过redo log刷盘,宕机的时候可以从redo log恢复7. 那你说说什么是幻读,什么是MVCC?
  要说幻读,首先要了解MVCC,MVCC叫做多版本并发控制,实际上就是保存了数据在某个时间节点的快照。
  我们每行数实际上隐藏了两列,创建时间版本号,过期(删除)时间版本号,每开始一个新的事务,版本号都会自动递增。
  还是拿上面的user表举例子,假设我们插入两条数据,他们实际上应该长这样。
  id name create_version delete_version 1 张三 1 2 李四 2
  这时候假设小明去执行查询,此时current_version=3select * from user where id<=3;
  同时,小红在这时候开启事务去修改id=1的记录,current_version=4update user set name="张三三" where id=1;
  执行成功后的结果是这样的
  id name create_version delete_version 1 张三 1 2 李四 2 1 张三三 4
  如果这时候还有小黑在删除id=2的数据,current_version=5,执行后结果是这样的。
  id name create_version delete_version 1 张三 1 2 李四 2 5 1 张三三 4
  由于MVCC的原理是查找创建版本小于或等于当前事务版本,删除版本为空或者大于当前事务版本,小明的真实的查询应该是这样select * from user where id<=3 and create_version<=3 and (delete_version>3 or delete_version is null);
  所以小明最后查询到的id=1的名字还是"张三",并且id=2的记录也能查询到。这样做是为了保证事务读取的数据是在事务开始前就已经存在的,要么是事务自己插入或者修改的。
  明白MVCC原理,我们来说什么是幻读就简单多了。举一个常见的场景,用户注册时,我们先查询用户名是否存在,不存在就插入,假定用户名是唯一索引。小明开启事务current_version=6查询名字为"王五"的记录,发现不存在。小红开启事务current_version=7插入一条数据,结果是这样:
  id Name create_version delete_version 1 张三 1 2 李四 2 3 王五 7小明执行插入名字"王五"的记录,发现唯一索引冲突,无法插入,这就是幻读。8. 那你知道什么是间隙锁吗?
  间隙锁是可重复读级别下才会有的锁,结合MVCC和间隙锁可以解决幻读的问题。我们还是以user举例,假设现在user表有几条记录
  id Age 1 10 2 20 3 30
  当我们执行:begin; 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); #失败
  只有10可以插入成功,那么因为表的间隙mysql自动帮我们生成了区间(左开右闭)(negative infinity,10],(10,20],(20,30],(30,positive infinity)
  由于20存在记录,所以(10,20],(20,30]区间都被锁定了无法插入、删除。
  如果查询21呢?就会根据21定位到(20,30)的区间(都是开区间)。
  需要注意的是唯一索引是不会有间隙索引的。9. 你们数据量级多大?分库分表怎么做的?
  首先分库分表分为垂直和水平两个方式,一般来说我们拆分的顺序是先垂直后水平。
  垂直分库
  基于现在微服务拆分来说,都是已经做到了垂直分库了
  垂直分表
  如果表字段比较多,将不常用的、数据较大的等等做拆分
  水平分表
  首先根据业务场景来决定使用什么字段作为分表字段(sharding_key),比如我们现在日订单1000万,我们大部分的场景来源于C端,我们可以用user_id作为sharding_key,数据查询支持到最近3个月的订单,超过3个月的做归档处理,那么3个月的数据量就是9亿,可以分1024张表,那么每张表的数据大概就在100万左右。
  比如用户id为100,那我们都经过hash(100),然后对1024取模,就可以落到对应的表上了。10. 那分表后的ID怎么保证唯一性的呢?
  因为我们主键默认都是自增的,那么分表之后的主键在不同表就肯定会有冲突了。有几个办法考虑:设定步长,比如1-1024张表我们分别设定1-1024的基础步长,这样主键落到不同的表就不会冲突了。分布式ID,自己实现一套分布式ID生成算法或者使用开源的比如雪花算法这种分表后不使用主键作为查询依据,而是每张表单独新增一个字段作为唯一主键使用,比如订单表订单号是唯一的,不管最终落在哪张表都基于订单号作为查询依据,更新也一样。11. 分表后非sharding_key的查询怎么处理呢?可以做一个mapping表,比如这时候商家要查询订单列表怎么办呢?不带user_id查询的话你总不能扫全表吧?所以我们可以做一个映射关系表,保存商家和用户的关系,查询的时候先通过商家查询到用户列表,再通过user_id去查询。打宽表,一般而言,商户端对数据实时性要求并不是很高,比如查询订单列表,可以把订单表同步到离线(实时)数仓,再基于数仓去做成一张宽表,再基于其他如es提供查询服务。数据量不是很大的话,比如后台的一些查询之类的,也可以通过多线程扫表,然后再聚合结果的方式来做。或者异步的形式也是可以的。List>> taskList = Lists.newArrayList(); for (int shardingIndex = 0; shardingIndex < 1024; shardingIndex++) {     taskList.add(() -> (userMapper.getProcessingAccountList(shardingIndex))); } List list = null; try {     list = taskExecutor.executeTask(taskList); } catch (Exception e) {     //do something }  public class TaskExecutor {     public  List executeTask(Collection<? extends Callable> tasks) throws Exception {         List result = Lists.newArrayList();         List> futures = ExecutorUtil.invokeAll(tasks);         for (Future future : futures) {             result.add(future.get());         }         return result;     } }12. 说说mysql主从同步怎么做的吧?
  首先先了解mysql主从同步的原理master提交完事务后,写入binlogslave连接到master,获取binlogmaster创建dump线程,推送binglog到slaveslave启动一个IO线程读取同步过来的master的binlog,记录到relay log中继日志中slave再开启一个sql线程读取relay log事件并在slave执行,完成同步slave记录自己的binglog
  由于mysql默认的复制方式是异步的,主库把日志发送给从库后不关心从库是否已经处理,这样会产生一个问题就是假设主库挂了,从库处理失败了,这时候从库升为主库后,日志就丢失了。由此产生两个概念。
  全同步复制
  主库写入binlog后强制同步日志到从库,所有的从库都执行完成后才返回给客户端,但是很显然这个方式的话性能会受到严重影响。
  半同步复制
  和全同步不同的是,半同步复制的逻辑是这样,从库写入日志成功后返回ACK确认给主库,主库收到至少一个从库的确认就认为写操作完成。13. 那主从的延迟怎么解决呢?
  这个问题貌似真的是个无解的问题,只能是说自己来判断了,需要走主库的强制走主库查询。
  - END -
  更多开发面试只是,私信回复666获取

还记得天后孙悦吗?三任男友入狱破产后,她成了啥样?听到这歌,你的DNA动了吗前几天刷微博,无意中还刷到了这首歌的演唱者孙悦的最新动态。微博底下,还有许多粉丝留言,催她赶紧出新歌。说起来,孙悦确实是在歌坛上消失很久了。25年前,她就吴彤还是不懂杨洋,要不然这期青春环游记怕是要封神了对于青春环游记这档综艺节目,相信很多观众还是相当喜欢的。作为一档搞笑类综艺来说,有贾玲和杨迪两位撑场,可以说笑点是可以得到保证的。除了两位综艺咖之外,周深范丞丞郎朗三位也是给观众留邵峰为妻子治病倾家荡产,二十年不离不弃,一番话曾让妻子哽咽说起春晚的小品演员,大家最先想到的是赵本山冯巩蔡明潘长江等这些知名的演员,娱乐圈有这样一个人,他与郭冬临孙涛冯巩都有过合作,曾9次登上春晚的舞台,大家不怎么知道他的名字,但大家一定戏子无情娱乐应该有下限这篇文章,纯属发牢骚,看一乐呵古语说得好,戏子无情,老祖宗的话都是经过几代人验证过后总结下来的精髓,真实一点不差!你看看现在娱乐圈,哪一个顶流能作为榜样的作用?尤其是对于未成年人来相声大师竟是色盲,去世后12年才披露如今德云社可以说是一个非常火的团体了,是目前来讲中国最著名的大型专业相声社团之一,于1995年成立。现在要说相声的话,应该首先想到的就是郭德纲以及于谦了,而德云社也是由郭德纲一手创33岁释小龙瘦身成网红,酷似杨幂前夫帅到认不出释小龙是大家非常熟悉的一位童星,他小时候拍摄过很多经典的影视作品,他在新乌龙院里就凭借帅气呆萌一身正气的模样,红遍大江南北之后他在少年包青天饰演展昭,也十分经典不过,随著年龄的增长张小斐彻底不红了?从票房女王到无人问津,她到底咋了?前不久的金鸡百花电影节中,张小斐因获最佳女主角提名,再次引起了友们的关注。之所以用再次,是因为张小斐在她被封为国民妈妈后,渐渐从热搜新闻里消失。既没有综艺邀约,也没有疯狂营销通稿,哪一部日本电影让你印象最深刻?在我的心中,最印象深刻的莫过于1974年的一部老电影望乡。豆瓣评分8。7分,这是一部充满了苦难色彩的电影,庆幸的是,因为这部电影也让更多人铭记了那群曾经背向日本,长眠地下的南洋姐。中国影史票房前10国产占9部,这是不是意味着国产电影正在崛起?印度前十都是本土片,碾压好莱坞按照俺的想法,电影不是看票房的,是不是好电影是看观众捧不捧场。唐山大地震俺看了两遍!现在的电影宣传的在NB,俺也不进电影院。电影是否崛起不是看国内表现人性之恶可以恶到什么程度?2011年10月8日下午,18岁高三学生吴天昊在打蓝球时,与人发生冲突,对方家长带数十人持刀猛砍吴天昊,吴天昊头部被砍十多刀,左手砍断,右手砍伤,后因内脏出血衰竭,于10月9日上午请问绑架陈亚男的歹徒怎么处理的?昨天通过陈亚男的离婚声明中说自己前不久被歹徒持刀绑架。昨天陈亚男在离婚的发布中说前不久被歹徒跟踪甚至持刀劫持到汽车里嘴里塞袜子,这可不是普通的治安,持刀劫持这可是刑事案件,目前没有
宋茜的好身材真包不住了,黑色皮裙穿得很撩人,线条饱满有女人味经典的黑色往往伴随着很深沉的效果,穿搭风格整体也围绕着沉稳气质,根据不同的面料材质搭配,会有比较微小的改变。时尚的潮流和风格以及流行色,变化的速度是非常快的,因此想要让穿搭的时尚度钟楚红的气质太好了,大刘嘉玲6岁魅力却不输,两人穿搭优雅穿裤装更能凸显气质还是穿裙装更有魅力,是很多人都比较纠结的问题,但实际上只要熟练地掌握服装的搭配,每一种款式都可以展现很强的个性,最重要的服装的配色和设计。裙子的选择要比裤子单品要邓文迪的气质真挺好,花裙子一般人很难驾驭,女王风范挺强现如今好看的服装款式是越来越多了,很多人情有独钟那些净版的穿搭,认为经典的搭配更能凸显成熟稳重的气质,但往往缺乏更加大胆的尝试,也错失了很多时髦的穿搭。很多亮眼的设计和比较灵动的款66岁奚美娟穿缎面裙,气质竟不输32岁的文咏珊,优雅魅力很强想要一直美到老,并不是没有可能的,美是一个人整体造型的展现,因此除了自身的容貌以外,也离不开服装的帮衬。不同的年龄段适合的穿搭有很大的差异,但不论怎样都逃不开搭配技巧。五十岁以上的28岁的宋芸桦和38岁的陈妍希一样成熟,穿搭很关键,选择要慎重裙子对绝大多数的女士来说都不陌生,风格多样的裙装让不同年龄段和不同气质的女性,都能找到合适的搭配,颜色上和版型上的组合,让裙子的样式更加时尚。能够让一个人整体魅力更加偏向成熟的裙装金晨随便穿穿也好有气质,惬意舒适的穿搭设计不爱,让人羡慕一个人的穿着打扮也是人格魅力的一部分,日常的搭配不需要很花哨,有时候简简单单也能够有很出彩的气质,对色彩和款式的掌控要是到位了,服装的搭配也就变得得心应手。常见的休闲穿搭都没有那么学生收到录取通知后,别忽视里面的小纸条,一年可省好几千元文红丽十年寒窗苦读,收到录取通知书的时候,一切幸苦都值得了。学生收到录取通知书,自然是欣喜万分,恨不得拿出来给亲戚朋友都显摆一下。不过除了录取通知书之外,学校也会放进一些其他的东西河南新增一所重量级大学,总投资12亿,当地学生有福了文红丽河南的高考竞争难度居高不下,当地考生更该努力学习,才能脱颖而出。河南是我国的高考大省,一直以来高考的难度就非常大,不仅竞争激烈,而且教育资源也比较稀缺。之所以会出现这种状况,射雕神雕被骂也要翻拍,为何金庸这部剧35年无人敢碰?射雕英雄传神雕侠侣倚天屠龙记这些经典IP,几乎每年都会被翻拍成影视剧。即使口碑难以超越原作,但是总是能够带来很多的热度,即使是扑街,也会扑得轰轰烈烈。被骂也要翻拍!比如钟汉良版的天26年前的太极宗师吴京打太极迷倒多少人,还给女主当替身提到吴京,很多人的第一反应都是硬汉,战狼,百亿影帝,票房收割机不可否认,吴京在华语电影圈的影响力。据猫眼数据分析,吴京目前的个人票房成绩已经达到了170亿,排在了主演票房榜的第二名为什么上学时,一般住校生都会比走读生多,原因原来在这里文红丽教育的本质,就是促进同学们个性的全面发展。而在如今这种教育环境下,同学们所承受到的压力是比较大的。一般情况下,住校生每天生活在学校里。老师对于学生的生活作息管理更加严格,学习