Linux运维工程师面试题6

中科医院曝光 https://baike.baidu.com/item/%E5%88%98%E4%BA%91%E6%B6%9B/21900249?fr=ge_ala
Linux运维工程师面试题(6)1数据库事务的四个特性及含义2mysql的sql语句怎么优化3varchar与char的区别是什么?大小限制?utf8字符集下varchar最多能存多少个字符?4索引有什么用?5sql注入是怎么产生的,如何防止?6csrf是什么?如何防范?7如何加强MySQL安全,请给出可行的具体措施?8如是数据库慢导致网站打开慢,如何排查并解决?9MySQL有多少种日志10MySQL数据库cpu飙升到%的话他怎么处理?Linux运维工程师面试题(6)

祝各位小伙伴们早日找到自己心仪的工作。

持续学习才不会被淘汰。

地球不爆炸,我们不放假。

机会总是留给有有准备的人的。

加油,打工人!

1数据库事务的四个特性及含义

数据库事务的4个特性:原?性、持久性、?致性、隔离性

原?性:整个事务中的所有操作要么全部完成,要么全部都不完成,如果在事务中操作出现异常,那么事务将会进?回滚,就像这个事务从来没有执?过?样;

持久性:在事务完成后,该事务所有的操作都将持久化在数据库中,不会被回滚;

?致性:在事务开始之前和事务结束之后,数据库的完整性约束并没有被破坏;

隔离性:确保在同?时间类只有?个事务处理某个数据。

2mysql的sql语句怎么优化

尽量避免使用or、in、notin和在where语句后?使?!=、操作符以及对NULL值得判断,否则数据库引擎将放弃索引而使用全表扫描。使用exists替换in。

尽量放弃使?select*,返回无用的字段会降低查询效率,需要什么数据就取出什么数据。

使?join代替?查询。

设置合适的字段属性:例如尽量把字段设置为NOTNULL,这样引擎就不要对?NULL值。

在表中建立索引,优先考虑where、groupby使用到的字段。

尽量避免在字段开头模糊查询,会导致数据库引擎放弃索引进行全表扫描

3varchar与char的区别是什么?大小限制?utf8字符集下varchar最多能存多少个字符?

char和varchar最的不同就是个是固定度,个是可变度。由于是可变度,因此存储的是实际字符串再加上个记录字符串度的字节。如果分配给char或varchar列的值超过列的最度,则对值进裁剪。

varchar(M)和char(M),M都表示字符数。varchar的最大长度为个字节,不同的编码所对应的最?可存储的字符数不同。char最多可以存放个字符,不同的编码最?可?字节数不同。字符类型若为utf8,每个字符最多占3个字节,varchar最大长度不能超过。

例:

char(4)定义的是固定长度4,存储时,如果字符数不够4位,会在后面用空格补全存入数据库。

varchar(4)定义的是变长长度,存储时,如果字符没有达到定义的位数4时,也不会在后面补空格。

4索引有什么用?

对于建?索引的列,mysql的查询效率会提?很多。

索引可以降低服务需要扫描的数据量,减少了I/O次数

索引可以帮助服务器避免排序和使用临时表

索引可以帮助将随机I/O转为顺序I/O

5sql注入是怎么产生的,如何防止?

sql注?产?原因:因为在程序开发过程中没有对sql语句进行检查或未进行关键字检查,导致客户端可以提交sql语句到服务器运行。

如何防止:

对sql与进行检查,过滤。

不要使用sql拼接的方式来拼接sql语句,对常?的方法进行封装避免暴露sql语句(使用ORM)。

6csrf是什么?如何防范?

csrf成为跨站伪造请求,利用用户信任过的?站去执??些恶意的操作

如何防范:

检查Referer字段,严格要求该字段只来自于信任的URL;

添加校验token,将token值附加在表单中,攻击者是无法获取这个字,服务端进行检查发现该值为空时将会拒绝服务。

7如何加强MySQL安全,请给出可行的具体措施?

避免直接从互联网访问mysql数据库,确保特定主机才拥有访问权限;

定期备份数据库;

禁用或限制远程访问,在my.cnf文件里设置bind-address指定ip;

移除test数据库(默认匿名用户可以访问test数据库);

禁用localinfilemysqlselectload_file("/etc/passwd");在my.cnf里[mysqld]下添加set-variable=local-infile=0

移除匿名账户和废弃的账户;

限制mysql数据库用户的权限;

移除和禁用.mysql_history文件。

8如是数据库慢导致网站打开慢,如何排查并解决?

登陆mysql查看有哪些sql语句占用时间过长,howprocesslist;

用explain查看消耗时间过长的SQL语句是否走了索引;

对SQL语句优化,建立索引。

9MySQL有多少种日志

错误日志:errorlog,记录出错信息,也记录一些警告信息或者正确的信息;

通用日志:generallog,记录所有对数据库请求的信息,不论这些请求是否得到了正确的执行;

慢查询日志:slowquerylog,设置一个阈值,将运行时间超过该值的所有SQL语句都记录到慢查询的日志文件中;

二进制日志:binarylog,记录对数据库执行更改的所有操作;

中继日志:releylog,在主从复制架构中,从服务器用于保存从主服务器的二进制日志中读取的事件;

事务日志:transactionlog,事务日志的写入类型为"追加",因此其操作为"顺序IO";通常也被称为:预写式日志writeaheadlogging。事务日志文件:ib_logfile0,ib_logfile1。

10MySQL数据库cpu飙升到%的话他怎么处理?

当cpu飙升到%时,先用操作系统命令top命令观察是不是mysqld占用导致的,如果不是,找出占用高的进程,并进行相关处理。

如果是mysqld造成的,showprocesslist,看看里面跑的session情况,是不是有消耗资源的sql在运行。找出消耗高的sql,看看执行计划是否准确,index是否缺失,或者实在是数据量太大造成。

一般来说,肯定要kill掉这些线程(同时观察cpu使用率是否下降),等进行相应的调整(比如说加索引、改sql、改内存参数)之后,再重新跑这些SQL。

也有可能是每个sql消耗资源并不多,但是突然之间,有大量的session连进来导致cpu飙升,这种情况就需要跟应用一起来分析为何连接数会激增,再做出相应的调整,比如说限制连接数等。

关于我

全网可搜《阿贤Linux》

CSDN、知乎、哔哩哔哩、博客园、51CTO、掘金、思否、开源中国、阿里云、腾讯云、华为云、今日头条、百家号、GitHub、个人博客




转载请注明:http://www.aierlanlan.com/grrz/7472.html