面试题数据库笔试redis查询索引2021phpsql服务器记录了篇

优采云 发布时间: 2021-08-06 23:11

  面试题数据库笔试redis查询索引2021phpsql服务器记录了篇

  标签:面试题数据库笔试Redis查询索引2021phpsql服务器

  记录了这段时间我在深圳求职以来被问到的所有问题,以后有机会会继续更新~

  内容

  数据库文章

  一、谈数据库优化?

  从sql优化方面:

  1.不要返回任何未使用的字段

  2.尽量避免全表扫描,在where和order by中涉及的字段上添加索引

  3.尽量避免where子句中字段的空值判断,会导致索引失效

  4. 尽量避免在 where 子句中使用 != 或运算符,这会使索引无效

  5. 尽量避免在 where 子句中使用 or 来连接条件,这样会使索引失效

  6.尽量避免对where子句中的字段进行函数式操作,这会使索引失效

  在表优化方面:

  1.可以横向分表,将一个表拆分成多个结构相同的表,并通过表名区分

  2.可以垂直拆分表,将表中较大的字段拆分成另一个表,这个表和原表是一一对应的

  从库优化方面:

  数据库可以分为主库和从库。主库用于写入数据,多个从库用于读取数据。主库和从库可以通过一定的机制实现数据同步。

  二、Mysql 有哪些索引?

  从逻辑的角度来看:

  1.普通索引:最基本的索引,没有任何限制

  2.主键索引:特殊的唯一索引,不允许有空值

  3.唯一索引:索引字段的值必须是唯一的,可以有空值

  4.复合索引:在多个字段上创建的索引,遵循最左前缀集的原则

  5.全文索引:可以在varchar或text字段上创建

  从物理角度来看:

  1. 聚集索引

  2.非聚集索引

  三、什么是交易?

  一组满足 ACID 特性的操作。 ACID 包括原子性、隔离性、一致性和持久性。

  四、Inno 和 MyISAM 有什么区别?

  1. InnoDB 支持事务、外键、行级锁等高级数据库功能,适合频繁修改和高安全性的应用

  2. MyISAM 不支持事务等高级数据库功能。适用于注重查询和插入,更注重查询性能的应用

  五、什么是sql注入?怎么处理?

  SQL 注入是指 Web 应用程序不判断用户输入数据的合法性或过滤不严格,导致攻击者在预定义的 SQL 语句中添加额外的 SQL 语句以欺骗数据库并执行非- 授权任意查询

  解决方案:

  1. 验证用户的输入,可以通过正则表达式表达或者限制长度

  2. 使用参数化的 sql 而不是动态组装的 sql

  3.避免直接响应数据库中的异常信息,最好自定义打包错误信息

  4. 限制数据库权限

  六、如何分析sql?解释中常见的字段有哪些?

  使用explain关键字可以模拟优化器执行SQL语句,分析查询语句或结构的性能瓶颈

  常用字段:

  1.id:表的读取顺序,id相同,读取顺序从上到下,id不同,值越大优先级越高

  2.select_type:查询类型simple表示简单查询,不包括子查询或联合查询;

  如果查询收录复杂的子部分,则最外层查询为主;

  select 或 where 列表中收录的子查询将被标记为子查询; from 列表中收录的子查询将被标记为派生的;联合之后的第二个选择将被标记为联合

  3.表:显示sql操作属于哪个表

  4. type:表示sql语句的质量,从好到坏,顺序为system>const>eq_ref>ref>range>index>all

  5. possible_key: 可能使用的索引

  6.key:实际使用的索引

  七、谈谈数据库锁?

  在并发的情况下,事务的隔离性很难保证。解决办法是加锁

  共享锁/读锁:成功申请读锁的前提是没有其他线程对查询结果使用了写锁。读锁申请成功后,其他线程可以读,但不允许写操作。 , 甚至不在当前线程中

  排他锁/写锁:写锁申请成功的前提是没有其他线程对查询结果使用过读锁或写锁。写锁申请成功后,其他线程无法对其进行读写操作。

  八、什么是死锁?如何解决?

  由于资源竞争,两个或多个线程正在相互等待

  解决方法:尽量使用低隔离级别,并且锁住厂商设计的所有数据,否则不会被执行

  九、笔试:如何查看每个班级的前三名?

  select stu.class,stu.score

from student stu

where (select count(*) from student where class=a.class and a.score $a[$j]) {

$tem = $a[$i];

$a[$i] = $a[$j];

$a[$j] = $tem;

}

}

}

  网络文章

  一、tcp 的五层协议是什么?

  应用层、传输层、网络层、数据链路层、物理层

  二、聊聊tcp三次握手?

  1.客户端向服务器发送连接请求段,其中SYN设置为1,然后选择一个起始序号seq=x

<p>2.服务器收到请求段后,向客户端发送确认段,其中SYN和ACK设置为1,确认号字段为x+1,起始序号seq=y

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线