2019-02-27

MySQL

死锁

两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。

产生死锁的四个必要条件:

  1. 互斥条件:一个资源每次只能被一个进程使用。
  2. 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
  3. 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
  4. 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

死锁产生影响
当产生某表死锁的一开始,所有涉及这张表的操作都将受到阻塞。假设这张表在业务逻辑上是读写频繁的,那就会使很多操作在那里排队等待,而排队等待会占用数据库连接,当该达到该数据库连接数的最大承载数之后,就会使所有数据库操作均无法再继续下去,致使数据库各项指标异常,导致整个环境崩溃。

如何发现死锁

SHOW FULL PROCESSLIST;
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;

如何处理死锁:通过以上方法一可以查询对应死锁的数据库进程,可以直接杀掉kill 进程ID。

避免死锁:

  1. 按同一顺序访问对象。
  2. 避免事务中的用户交互。
  3. 保持事务简短并在一个批处理中。
  4. 使用低隔离级别。
  5. 使用绑定连接。

隔离级别

  • 读未提交:一个事务还没提交时,它做的变更就能被别的事务看到。脏读。
  • 读提交:一个事物提交之后,它做的变更才会被其他事务看到。不可重复读,同样一条记录,两次查询可能会有不同结果。
  • 可重复读:一个事物执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。当然在可重复读隔离级别下,未提交变更对其它事务也是不可见的。幻读,当某个事务在读取某个范围内的记录时,另一个事务在该范围内插入新的记录,再次读取产生幻行。多版本并发控制MVCC来解决。
  • 串行化:同一行记录,写加写锁,读加读锁。当读写锁冲突时,后访问的事务必须等到前一事务执行完成,才能继续执行。解决幻读。

B+树和B树

MySQL 中的 B-Tree 索引的物理文件大多都是以 Balance Tree 的结构来存储的,也就是所有实际需要的数据都存放于 Tree 的叶子节点 ,而且到任何一个叶子节点 的最短路径的长度都是完全相同的,可能各种数据库(或 MySQL 的各种存储引擎)在存放自己的 B-Tree 索引的时候会对存储结构稍作改造。如 Innodb B+Tree ,在每一叶子节点 上面出了存放索引键的相关信息之外,还存储了指向与该叶子节点 相邻的后一个叶子节点的指针信息,这主要是为了加快检索多个相邻叶子节点的效率考虑。
在 Innodb 存储引擎中,存在两种不同形式的索引,主键索引的叶子节点存的是整行数据,在innodb里,主键索引也被称为聚簇索引。非主键索引的叶子节点内容是主键的值,在innodb里,非主键索引也被称为二级索引。

悲观锁、乐观锁

乐观锁顾名思义就是在操作时很乐观,认为操作不会产生并发问题(不会有其他线程对数据进行修改),因此不会上锁。但是在更新时会判断其他线程在这之前有没有对数据进行修改,一般会使用版本号机制或CAS(compare and swap)算法实现。

总是假设最坏的情况,每次取数据时都认为其他线程会修改,所以都会加(悲观)锁。一旦加锁,不同线程同时执行时,只能有一个线程执行,其他的线程在入口处等待,直到锁被释放。悲观锁在MySQL、Java有广泛的使用:MySQL的读锁、写锁、行锁等。

MySQL 索引是不是越多越好?为什么?

数据的变更(增删改)都需要维护索引,因此更多的索引意味着更多的维护成本;更多的索引意味着也需要更多的空间;过小的表,建索引可能会更慢。

主从

一个节点存了多少数据,怎么规定大小,与磁盘页对应

InnoDB存储引擎默认一个数据页大小为16kb,非叶子节点存放(key,pointer),pointer为6个字节,key为4个字节,即非叶子节点能存放16kb/14左右的key,pointer,而叶子节点如果一条数据大小为100字节,那一个叶子节点大约可存放160条数据。

如果高度为3,则可存放数据为:16kb/14 * 16kb/14 * 160大约1亿多数据。

因此InnoDB存储引擎b+树的高度基本为2-3。

  • 数据库InnoDB下如何加锁?
  • 分析 delect from table where user_id=“1”;这句话怎么加锁的?
  • 如果user_id使用单列索引,联合索引,又是怎么加锁的?
  • mysql实现事务的原理(MVCC)
  • SQL 语句的具体执行过程,比如会怎么利用索引,怎么优化之类的 explain show processlist
  • 为什么控制高度?(连续读磁盘 效率高)
  • 详细描述b+?(以innodb索引为例给他画了下)
  • innodb 数据隔离级别 (四个隔离级别说了下 顺带把脏读 幻读 不可重复度说了下)
    不影响使用的扩容
    CAP,mysql集群满足了什么,什么满足了CP
  • 数据库索引结构采用的是什么数据结构?为什么要采用这个结构?假如将数据全部加载到内存,b+树还有优势吗?理由。
  • 聚集索引是什么?

主从分离延时什么造成的

切换备份机业务方需要做什么

redis实现分布式事务锁,有什么缺点

redis:
redis的模型,redis为什么快?redis为什么是单线程的?多核心机器如何部署redis(单进程占用单核)?
epoll,poll和select;
redis,mysql***作的时间数量级;
redis各种集群的方式,哨兵模式;
redis持久化的方式,aof文件太大了怎么办,主从同步的方式;
redis的五种常用数据结构,以及对应的底层数据结构的实现(zpilist,skiplist,quicklist,sds等等要有些了解);
讲讲对Redis的了解,有哪些基本类型和各自底层实现方法

  • redis有哪几种数据类型吗?你比较熟悉哪几种?为什么?
  • redis里面的哈希表
  • Redis 底层用到了哪些数据结构?使用 Redis 的 set 来做过什么?
  • Redis 使用过程中遇到什么问题?搭建过 Redis 集群吗?
  • 微博刷新选取所有关注人的最新n条记录如何取
  • redis分片,客户端的请求怎么处理
  • 6 Redis了解么,如果Redis有1亿个key,使用keys命令是否会影响线上服务,我说会,因为是单线程模型,可以部署多个节点。
    7 问我知不知道有一条命令可以实现上面这个功能。不知道
    8 Redis的持久化方式,aod和rdb,具体怎么实现,追加日志和备份文件,底层实现原理的话知道么,不清楚。
    9 Redis的list是怎么实现的,我说用ziplist+quicklist实现的,ziplist压缩空间,quicklist实现链表。
    10 sortedset怎么实现的,使用dict+skiplist实现的,问我skiplist的数据结构,大概说了下是个实现简单的快速查询结构。
    Redis 底层用到了哪些数据结构?使用 Redis 的 set 来做过什么?
    Redis 使用过程中遇到什么问题?搭建过 Redis 集群吗?

消息队列:
常用的消息队列设计和适用的各种场景;
kafka的原理,kafka作为消息队列和redis的区别;
一个topic中的partition是不是一定散布在同一个broker中?
如果要保证消息全局有序,怎么做?
leader选举是怎么选的?
kafka中consumer怎么保持状态的?
kafka是哪个公司出的?(还真老有人问)
有没有用过一些消息中间件
了解什么消息队列,rmq和kafka,没细问

操作系统:
经常问的就是linux指令,死锁的各种问题,虚拟内存什么的,这块掌握的不是很好。
linux命令:打印中间一列
ab1 ab ab2
cd1 cd cd2
ef1 ef ef2
linux常考指令

操作系统

  • 操作系统的竞态?自旋锁说一下
  • 如何实现线程的同步?线程的上下文有哪些东西?
  • 查看文件打开的句柄
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容