共计 2578 个字符,预计需要花费 7 分钟才能阅读完成。
Linux 运维工程师面试题(6)
祝各位小伙伴们早日找到本人心仪的工作。
继续学习才不会被淘汰。
地球不爆炸,咱们不放假。
机会总是留给有有筹备的人的。
加油,打工人!
1 数据库事务的四个个性及含意
数据库事务的 4 个个性:原⼦性、持久性、⼀致性、隔离性
- 原⼦性:整个事务中的所有操作要么全副实现,要么全副都不实现,如果在事务中操作出现异常,那么事务将会进⾏回滚,就像这个事务素来没有执⾏过⼀样;
- 持久性:在事务实现后,该事务所有的操作都将长久化在数据库中,不会被回滚;
- ⼀致性:在事务开始之前和事务完结之后,数据库的完整性束缚并没有被毁坏;
- 隔离性:确保在同⼀工夫类只有⼀个事务处理某个数据。
2 mysql 的 sql 语句怎么优化
- 尽量避免应用 or、in、not in 和在 where 语句后⾯使⽤ !=、<> 操作符以及对 NULL 值得判断,否则数据库引擎将放弃索引而应用全表扫描。应用 exists 替换 in。
- 尽量放弃使⽤ select *,返回无用的字段会升高查问效率,须要什么数据就取出什么数据。
- 使⽤ join 代替⼦查问。
- 设置适合的字段属性:例如尽量把字段设置为 NOT NULL,这样引擎就不要对⽐ NULL 值。
- 在表中建设索引,优先思考 where、group by 应用到的字段。
- 尽量避免在字段结尾含糊查问,会导致数据库引擎放弃索引进行全表扫描
3 varchar 与 char 的区别是什么?大小限度?utf8 字符集下 varchar 最多能存多少个字符?
char 和 varchar 最⼤的不同就是⼀个是固定⻓度,⼀个是可变⻓度。因为是可变⻓度,因而存储的是理论字符串再加上⼀个记录字符串⻓度的字节。如果调配给 char 或 varchar 列的值超过列的最⼤⻓度,则对值进⾏裁剪。
varchar(M) 和 char(M),M 都示意字符数。varchar 的最大长度为 65535 个字节,不同的编码所对应的最⼤可存储的字符数不同。char 最多能够寄存 255 个字符,不同的编码最⼤可⽤字节数不同。字符类型若为 utf8,每个字符最多占 3 个字节,varchar 最大长度不能超过 21845。
例:
char(4)定义的是固定长度 4,存储时,如果字符数不够 4 位,会在前面用空格补全存入数据库。
varchar(4)定义的是变长长度,存储时,如果字符没有达到定义的位数 4 时,也不会在前面补空格。
4 索引有什么用?
对于建⽴索引的列,mysql 的查问效率会提⾼很多。
- 索引能够升高服务须要扫描的数据量,缩小了 I / O 次数
- 索引能够帮忙服务器防止排序和应用长期表
- 索引能够帮忙将随机 I / O 转为程序 I /O
5 sql 注入是怎么产生的,如何避免?
sql 注⼊产⽣起因:因为在程序开发过程中没有对 sql 语句进行查看或未进行关键字查看,导致客户端能够提交 sql 语句到服务器运行。
如何避免:
- 对 sql 与进行查看,过滤。
- 不要应用 sql 拼接的形式来拼接 sql 语句,对常⽤的办法进行封装防止裸露 sql 语句(应用 ORM)。
6 csrf 是什么?如何防备?
csrf 成为跨站伪造申请,利用用户信赖过的⽹站去执⾏⼀些歹意的操作
如何防备:
- 查看 Referer 字段,严格要求该字段只来自于信赖的 URL;
- 增加校验 token,将 token 值附加在表单中,攻击者是无奈获取这个字,服务端进行查看发现该值为空时将会拒绝服务。
7 如何增强 MySQL 平安,请给出可行的具体措施?
- 防止间接从互联网拜访 mysql 数据库,确保特定主机才领有拜访权限;
- 定期备份数据库;
- 禁用或限度近程拜访,在 my.cnf 文件里设置 bind-address 指定 ip;
- 移除 test 数据库(默认匿名用户能够拜访 test 数据库);
- 禁用 local infile
mysql> select load_file("/etc/passwd");
在 my.cnf 里 [mysqld] 下增加set-variable=local-infile=0
- 移除匿名账户和废除的账户;
- 限度 mysql 数据库用户的权限;
- 移除和禁用
.mysql_history
文件。
8 如是数据库慢导致网站关上慢,如何排查并解决?
- 登陆 mysql 查看有哪些 sql 语句占用工夫过长,
how processlist;
- 用 explain 查看耗费工夫过长的 SQL 语句是否走了索引;
- 对 SQL 语句优化,建设索引。
9 MySQL 有多少种日志
- 谬误日志:error log,记录出错信息,也记录一些正告信息或者正确的信息;
- 通用日志:general log,记录所有对数据库申请的信息,不管这些申请是否失去了正确的执行;
- 慢查问日志:slow query log,设置一个阈值,将运行工夫超过该值的所有 SQL 语句都记录到慢查问的日志文件中;
- 二进制日志:binary log,记录对数据库执行更改的所有操作;
- 中继日志:reley log,在主从复制架构中,从服务器用于保留从主服务器的二进制日志中读取的事件;
- 事务日志:transaction log,事务日志的写入类型为 ” 追加 ”,因而其操作为 ” 程序 IO”;通常也被称为:预写式日志 write ahead logging。事务日志文件:ib_logfile0,ib_logfile1。
10 MySQL 数据库 cpu 飙升到 500% 的话他怎么解决?
当 cpu 飙升到 500% 时,先用操作系统命令 top 命令察看是不是 mysqld 占用导致的,如果不是,找出占用高的过程,并进行相干解决。
如果是 mysqld 造成的,show processlist,看看外面跑的 session 状况,是不是有耗费资源的 sql 在运行。找出耗费高的 sql,看看执行打算是否精确,index 是否缺失,或者切实是数据量太大造成。
一般来说,必定要 kill 掉这些线程(同时察看 cpu 使用率是否降落),等进行相应的调整(比如说加索引、改 sql、改内存参数)之后,再从新跑这些 SQL。
也有可能是每个 sql 耗费资源并不多,然而忽然之间,有大量的 session 连进来导致 cpu 飙升,这种状况就须要跟利用一起来剖析为何连接数会激增,再做出相应的调整,比如说限度连接数等。
对于我
全网可搜《阿贤 Linux》
CSDN、知乎、哔哩哔哩、博客园、51CTO、掘金、思否、开源中国、阿里云、腾讯云、华为云、今日头条、百家号、GitHub、集体博客
公众号:阿贤 Linux
集体博客:blog.waluna.top
https://blog.waluna.top/
原文链接: Linux 运维工程师面试题(6).