Linux运维工程师笔试题第十九套

试题内容

  1. 简述一下客户端请求网页里a.css的过程。
    akb48

  2. HTTP 协议中与缓存相关的HTTP Header有哪些?
    https://segmentfault.com/a/1190000014445687?utm_source=index-hottest/*&^%$ 这篇文章吧。

  3. SQL语句:update apps set ID="12345" and NAME="李四" where ID="100001" and NAME="张三"的执行结果是什么?为什么会有这个结果?
    akb48

mysql官方要求以逗号分隔的col_name=value列表,如果是and的话,题目中的句子实际执行效果是update apps set ID=("12345" and NAME="李四") where ID="11111" and NAME="张三",即括号里的是一个逻辑表达式,但是由于NAME是等于张三而不是李四,于是就等于ID="12345" and False,即False,在mysql里False等于0。所以出现了这个情况。

  1. 接上题,如果要正确达到目的应该怎么写?
    正确写法是:update apps set ID="12345",NAME="李四" where ID="100001" and NAME="张三",这样才能达到同时修改两个列的目的。

  2. POST和GET的区别
    https://www.cnblogs.com/logsharing/p/8448446.html 这篇文章吧。

  3. 如何保证用户鉴权过程是安全的?
    用户在网页输入用户名A和密码B,对“A+B+有规律的字符串”进行加密得到C,将A和C传递给服务器。由于A是明文的,服务器可根据A去数据库里得到相应的密码B,也用同样的步骤生成D,比较C和D是否相同即可。

  4. Lunix如何查看某个进程的线程?
    两种方法:
    1)ps -T -p pid,返回的结果里spid就是线程号
    2)top -H -p pid
    3)pstree -p 进程用户名 | grep 进程名ps -Lf 进程名pstack 进程名

  5. 数据库事务隔离级别
    数据库事务的隔离级别有4个,由低到高依次为Read uncommitted(读未提交) 、Read committed(读提交,SQL和ORACLE的默认规则) 、Repeatable read(重复读,MYSQL默认的) 、Serializable(序列化,效率低但是最准确) ,这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。

  6. 将软连接的原文件删除,能否编辑此软连接?会有什么现象?
    可以通过echo命令编辑此软连接,结果生成名跟原文件一样的文件,inode也一样,但是文件内容已经是echo的新内容了。

  7. 如何识别此文件是硬链接?
    使用ll -hit查看文件,如果索引数不是1就是硬链接。

  8. 数据库延迟同步的语句是什么?
    一般来说为了防止数据库误操作,都会给一个异地备份数据库配置延迟同步功能,语句如下:

    1
    2
    3
    mysql>stop slave;
    mysql>CHANGE MASTER TO MASTER_DELAY = 1800;单位为秒
    mysql>start slave;
  9. SQL语句执行很慢的原因都有什么?
    https://zhuanlan.zhihu.com/p/62941196 这篇文章。

  10. 什么场景会造成CPU低而负载确很高呢?
    造成这种现象的原因是:等待磁盘I/O完成的进程过多,导致进程队列长度过大,但是cpu运行的进程却很少,这样就体现到负载过大了,cpu使用率低。具体表现有以下场景:
    场景一:磁盘读写请求过多就会导致大量I/O等待:上面说过,cpu的工作效率要高于磁盘,而进程在cpu上面运行需要访问磁盘文件,这个时候cpu会向内核发起调用文件的请求,让内核去磁盘取文件,这个时候会切换到其他进程或者空闲,这个任务就会转换为不可中断睡眠状态。当这种读写请求过多就会导致不可中断睡眠状态的进程过多,从而导致负载高,cpu低的情况。

场景二:MySQL中存在没有索引的语句或存在死锁等情况:我们都知道MySQL的数据是存储在硬盘中,如果需要进行sql查询,需要先把数据从磁盘加载到内存中。当在数据特别大的时候,如果执行的sql语句没有索引,就会造成扫描表的行数过大导致I/O阻塞,或者是语句中存在死锁,也会造成I/O阻塞,从而导致不可中断睡眠进程过多,导致负载过大。
具体解决方法可以在MySQL中运行show full processlist命令查看线程等待情况,把其中的语句拿出来进行优化。

场景三:外接硬盘故障,常见有挂了NFS,但是NFS server故障:比如我们的系统挂载了外接硬盘如NFS共享存储,经常会有大量的读写请求去访问NFS存储的文件,如果这个时候NFS Server故障,那么就会导致进程读写请求一直获取不到资源,从而进程一直是不可中断状态,造成负载很高。

  1. 为什么普通用户没有/etc/passwd的写权限,可以修改用户密码?
    这是应为passwd命令的权限是-rwsr-xr-x. 1 root root,其中这个s的意思是被赋予了SetUID权限,即passwd命令执行时是以root身份执行的,即可以更改密码的原因。
    akb48

    参考资料

    https://github.com/kaiye/kaiye.github.com/issues/3
    https://tech.meituan.com/2014/08/20/innodb-lock.html (Innodb中的事务隔离级别和锁的关系)
    https://segmentfault.com/a/1190000020459073 (CPU 使用率低高负载的原因)
感谢您请我喝咖啡~O(∩_∩)O,如果要联系请直接发我邮箱chenx1242@163.com,我会回复你的
-------------本文结束感谢您的阅读-------------