面试之查漏补缺
乍一看,题都不难,但手生了后好多不看 manual 都生写不出来。
没啥可说的,直接上问题。
找出文件中空行的行号
答:用 grep 配合参数 -n 显示行号,具体命令:
1 | grep -n "^$" file |
把文件中所有的换行替换成空格
sed
答:用 sed 命令来把文件合成一行以后再替换,详见命令:
1 | sed -e '1h;2,$H;$!d;g;s/\n/ /g' file |
tr
答:用 tr 命令替换 ‘\n’ 为 ‘ ‘,详见命令:
1 | tr '\n' ' ' < file | sed 's/ $/\n/' |
查看状态是 established 的连接
答:用 ss 命令:
1 | ss -t state established |
防火墙设置
规则要求:
- 对所有地址开放本服务器的80端口、10~20端口。
- 其他机器可以用ping命令来探测本服务器的链接情况
- 其他没有被准许的端口将禁止访问
答:用 iptables,具体如下:
1 | iptables -A INPUT -p tcp -m multiport --dports 10:20,80 -j ACCEPT |
Nginx 优化配置点
work processes
worker_processes
Nginx worker 的进程数,缺省为 1;推荐设为 auto,将实现每颗 cpu 核跑一个 worker 进程
worker_connections
每个 worker 进程可以同时处理的最大连接数。
Keepalive Connections
keepalive_requests
客户端可以通过单个 keepalive 连接进行的请求数,可以酌情调大。
keepalive_timeout
酌情调整
keepalive
每个 worker 进程保持与上游服务器 keepalive 的空闲连接数,注意,要启用这个,需要同时配置如下设置:
1 | proxy_http_version 1.1; |
sendfile
操作系统的 sendfile() 系统调用将数据从一个文件描述符复制到另一个文件描述符,通常实现零复制,这可以加快 TCP 数据传输的速度
caching
启用缓存,您可以大大缩短对客户端的响应时间,同时可以大大减少后端服务器的负载
compression
压缩发送给客户端的响应可以大大减小客户端的大小,因此它们使用较少的网络带宽。需要注意的是:启用压缩会消耗 CPU 资源,如果服务器的 CPU 资源是瓶颈的话慎用。还有,本来已经压缩过的内容(如图片)不要启用
MySQL 的联合索引
联合索引又叫复合索引,是多个字段组成的一条索引。
- 联合索引的最左前缀匹配是指 where 条件一定要有联合索引的第一个字段
- 是否走联合索引跟 where 条件的顺序无关
- 遇到范围查询(>、<、between、like)就会停止匹配
MySQL 的主从复制(同步)
先决条件:
- master 上启用 binlog
原理:
- master 上 binglog dump 线程将 binlog 的变化内容发给 slave
- slave 上的 I/O 线程收到 master 上发过来的 binlog 内容后,写入本地的 relay log
- slave 上的 SQL 线程读取 relay log,并根据其内容回放到 slave