奇安信服务端开发工程师二面

  1. Reactor和Proactor的区别
    Reactor采用同步IO,用户层执行IO操作时,处于挂起状态,等待内核层完成。Proactor采用异步IO,用户层执行IO操作时,可以一边等待内核操作IO,一边自己去处理其他事情。等内核操作IO结束后,用户层被唤醒。
    在这里插入图片描述
    Reactor模式的读取操作:1) 应用程序注册读就需事件和相关联的事件处理器。2) 事件分离器等待事件的发生。3) 当发生读就需事件的时候,事件分离器调用第一步注册的事件处理器。4) 事件处理器首先执行实际的读取操作,然后根据读取到的内容进行进一步的处理。
    Proactor模式的读取操作:1) 应用程序初始化一个异步读取操作,然后注册相应的事件处理器,此时事件处理器不关注读取就绪事件,而是关注读取完成事件,这是区别于Reactor的关键。2) 事件分离器等待读取操作完成事件。3) 在事件分离器等待读取操作完成的时候,操作系统调用内核线程完成读取操作,并将读取的内容放入用户传递过来的缓存区中。这也是区别于Reactor的一点,Proactor中,应用程序需要传递缓存区。4) 事件分离器捕获到读取完成事件后,激活应用程序注册的事件处理器,事件处理器直接从缓存区读取数据,而不需要进行实际的读取操作。

  2. TCP的状态迁移
    在这里插入图片描述
    在这里插入图片描述

  3. 数据库中一般把索引建在什么字段比较合适
    1、表的主键、外键必须有索引;
    2、数据量超过300的表应该有索引;
    3、经常与其他表进行连接的表,在连接字段上应该建立索引;
    4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;
    5、索引应该建在选择性高的字段上;
    6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;
    7、复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:
    A、正确选择复合索引中的主列字段,一般是选择性较好的字段;
    B、复合索引的几个字段是否经常同时以AND方式出现在Where子句中?单字段查询是否极少甚至没有?如果是,则可以建立复合索引;否则考虑单字段索引;
    C、如果复合索引中包含的字段经常单独出现在Where子句中,则分解为多个单字段索引;
    D、如果复合索引所包含的字段超过3个,那么仔细考虑其必要性,考虑减少复合的字段;
    E、如果既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引;
    8、频繁进行数据操作的表,不要建立太多的索引;
    9、删除无用的索引,避免对执行计划造成负面影响;
    链接

  4. 什么时候适用索引
    1)字段有唯一性限制的
    2)经常用于where查询条件的字段,这样能够提高整个表的的查询速度,如果查询条件不是一个字段,可以建立联合索引
    3)经常用于order by和order by的字段,这样在查询的时候就不需要再去做一次排序了,因为我们都知道了建立索引之后在B+tree中的记录都是排序好的。

  5. 建立索引的目的
    索引的定义就是帮助存储引擎快速获取数据的一种数据结构,形象的就是索引是数据的目录。加快查找速度

  6. 什么字段不适合建立索引
    1)频繁更新的字段不适合建立索引
    2)where条件中用不到的字段不适合建立索引
    3)可以确定表数据比较少不需要建立索引
    4)数据重复且发布比较均匀的字段不适合建索引(如性别,真假值)
    5)参与列计算的列不适合建索引

  7. 什么时候不适合索引
    1)WHERE 条件,GROUP BY,ORDER BY 里用不到的字段,索引的价值是快速定位,如果起不到定位的字段通常是不需要创建索引的,因为索引是会占用物理空间的。
    2)字段中存在大量重复数据,不需要创建索引,比如性别字段,只有男女,如果数据库表中,男女的记录分布均匀,那么无论搜索哪个值都可能得到一半的数据。在这些情况下,还不如不要索引,因为 MySQL 还有一个查询优化器,查询优化器发现某个值出现在表的数据行中的百分比很高的时候,它一般会忽略索引,进行全表扫描。
    3)表数据太少的时候,不需要创建索引;
    4)经常更新的字段不用创建索引,比如不要对电商项目的用户余额建立索引,因为索引字段频繁修改,由于要维护 B+Tree的有序性,那么就需要频繁的重建索引,这个过程是会影响数据库性能的。

  8. 索引失效的情况
    1)对索引使用左或者模糊匹配
    2)对索引使用函数
    3)对索引进行表达式计算
    4)对索引隐式类型转换
    5)联合索引非最左匹配
    6)where子句中的or

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZhInen丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值