面试中面试官问你啥问题,小编都给你整理在这里了。每天都会整理一份最接地气的面试题,希望能帮助到你!
同时带上一套视频教程【带你横扫PHP职场 全面解读PHP面试】,感谢你对本公众号的关注,关注本公众号,回复:160705 即可获取。
一、谈谈数据库优化?
从sql优化方面来讲:
1. 不要返回任何用不到的字段
2. 尽量避免全表扫描,在where和order by涉及的字段上加索引
3. 尽量避免在 where 子句中对字段进行 null 值判断,会使索引失效
4. 尽量避免在 where 子句中使用 != 或 <> 操作符,会使索引失效
5. 尽量避免在 where 子句中使用 or 来连接条件,会使索引失效
6. 尽量避免在where子句中对字段进行函数操作,会使索引失效
从表优化方面来讲:
1. 可以水平分表,将一张表拆成多张结构一样的表,用表名区分
2. 可以垂直分表,将表中较大的字段拆分到另一张表中,该表与原表是一对一的关系
从库优化方面来讲:
可以将数据库分为主从库,主库用来写数据,多个从库用来读数据,主库与从库之间通过某种机制实现数据同步
数据库优化精选
二、Mysql有哪几种索引?
从逻辑角度来讲:
1. 普通索引:最基本的索引,没有任何限制
2. 主键索引:一种特殊的唯一索引,不允许有空值
3. 唯一索引:索引字段的值必须唯一,可以有空值
4. 组合索引:在多个字段上创建的索引,遵循最左前缀集合的原则
5. 全文索引:可以在varchar或text的字段上创建
从物理角度来讲:
1. 聚集索引
2. 非聚集索引
索引相关的精选
3 [精选] MySQL的索引,是基础又是重点。建议全面熟悉
4 [精选] 曾经,我以为我很懂MySQL索引, 看完才知道!
三、什么是事务?
满足ACID特性的一组操作,ACID包括原子性、隔离性、一致性、持久性
事务相关的精选
2 [精选] MySQL 事务隔离级别和实现原理,开发人员必备知识点
四、Inno和MyISAM这两种数据引擎有什么区别?
1. InnoDB支持事务、外键、行级锁等高级数据库功能,适合频繁修改以及安全性较高的应用
2. MyISAM不支持事务等高级数据库功能,适合以查询、插入为主的应用,更加注重查询的性能
五、什么是sql注入?怎么解决?
sql注入指web应用程序对用户输入数据的合法性没有判断或过滤不严格,进而导致攻击者可以在事
先定义的sql语句上添加额外的sql语句,以此来实现欺骗数据库从而执行非授权的任意查询
解决方案:
1. 对用户的输入进行校验,可以通过正则表达或限制长度
2. 使用参数化的sql而不是使用动态拼装的sql
3. 避免直接响应数据库异常信息,最好自定义错误信息进行包装
4. 限制数据库权限
web安全的精选
2 经常遇到的3大Web安全漏洞防御详解:XXS,CSRS以及SQL注入
3 PHP安全的方式-session会话劫持与会话固定,你如何防范?
六、如何分析sql?explain有哪些常用字段?
使用explain关键字可以模拟优化器执行SQL语句,分析查询语句或是结构的性能瓶颈
常用字段:
1.id:表的读取顺序,id相同,读取顺序从上到下,id不同,值越大则优先级越高。
2. select_type:查询类型simple表示简单查询,不包含子查询或联合查询;
若查询中包含复杂的子部分,则最外层查询为primary;
在select或where列表中包含的子查询,会被标记为subquery;from列表中包含的子查询,会被标记为derived;第二个select在union后,会被标记为union
3. table:显示sql操作属于那张表
4. type:表示sql语句的好坏,从好到坏依次为system > const > eq_ref > ref > range > index > all
5. possible_key:可能使用的索引
6. key:实际使用的索引
分析sql的相关精选
面试官问:说说你对mysql中explain各个字段的见解吧
七、谈谈数据库锁?
在并发的情况下,事务的隔离性很难保证,解决方案是锁
共享锁/读锁:成功申请读锁的前提是没有其它线程对查询结果使用过写锁,读锁申请成功后,其它线程可以对它进行读操作,但不允许对其进行写操作,即便是当前线程也不行
独占锁/写锁:成功申请写锁的前提是没有其它线程对查询结果使用过读锁或写锁,写锁申请成功后,其它线程不可对其进行读写操作
锁机制的相关精选
3 MySQL的各种锁(表锁,行锁,悲观锁,乐观锁,间隙锁,死锁)
八、什么是死锁?如何解决?
两个及两个以上的线程因争夺资源而造成相互等待的现象
解决方案:尽可能使用低的隔离级别,将事务所设计的数据全部加锁,否则不予执行。
死锁的相关精选
九、笔试:如何查询每个班前三的成绩?
select stu.class,stu.score
from student stu
where (select count(*) from student where class=a.class and a.score<score) < 3
order by stu.class,stu.score desc;
十、笔试:如何查询文章表中发布文章数大于10的用户?
select uid from t_article group by uid having count(uid)>10
十一、笔试:如何查询文章表中发布文章数前三的用户?
select uid from t_article group by uid order by count(uid) desc limit 0,3
更多sql语句可查看:SQL练习题,做完这套题你的SQL就算过关了
文章来自:https://blog.csdn.net/weixin_42190521/article/details/116153247
以上是本文的全部内容,希望对大家的学习有帮助,觉得有用,有需要就支持一下吧