8# SRE 工程师的面经 (WIP)
# 运维
1. [运维](#运维)
1. [线下一个服务响应很慢, 你如何排查? 排查流程是?](#线下一个服务响应很慢-你如何排查-排查流程是)
1. [排除法](#排除法)
1. [首先检查负载均衡系统](#首先检查负载均衡系统)
2. [检查应用服务器](#检查应用服务器)
3. [检查与应用相关文件服务器](#检查与应用相关文件服务器)
4. [检查缓存服务器. 同上](#检查缓存服务器-同上)
5. [检查数据库](#检查数据库)
6. [排查是否被挂马](#排查是否被挂马)
7. [排查最近更新的业务程序是不是用了奇怪的死循环或者海量查询](#排查最近更新的业务程序是不是用了奇怪的死循环或者海量查询)
2. [熔断, 限流, 降级的区别?](#熔断-限流-降级的区别)
3. [Linux 系统](#linux-系统)
1. [都说 Linux 下一切皆文件, 你是怎么理解的?](#都说-linux-下一切皆文件-你是怎么理解的)
2. [都说 socket 在 Linux 实际是一个文件, 是通过什么技术将 socket 变成一个文件的?](#都说-socket-在-linux-实际是一个文件-是通过什么技术将-socket-变成一个文件的)
3. [Linux 下软 / 硬连接是什么, 他们有什么区别?](#linux-下软--硬连接是什么-他们有什么区别)
4. [Linux 下一个用户登录以下文件加载顺序是? `~/.bash_profile, ~/.bash_login, ~/.profile, ~/.bashrc, /etc/profile`](#linux-下一个用户登录以下文件加载顺序是-bash_profile-bash_login-profile-bashrc-etcprofile)
5. [都说 systemd 他可以并行启动, 他的实现原理是?](#都说-systemd-他可以并行启动-他的实现原理是)
6. [僵尸进程 / 孤儿进程他们是? 区别是啥?](#僵尸进程--孤儿进程他们是-区别是啥)
7. [为什么说 ssh 很安全? 具体原理是? 如何保证?](#为什么说-ssh-很安全-具体原理是-如何保证)
8. [Linux 端口数一共多少, 怎么确定的?](#linux-端口数一共多少-怎么确定的)
9. [举例 Linux 内置命令](#举例-linux-内置命令)
10. [ACL 是什么意思?](#acl-是什么意思)
4. [网络](#网络)
1. [网络 mtu 是什么? 他发生在那一层, 如果 2 个设备 mtu 值不同, 以谁为准, 那么 2 个设备是如何协商的? 详细协商流程是?](#网络-mtu-是什么-他发生在那一层-如果-2-个设备-mtu-值不同-以谁为准-那么-2-个设备是如何协商的-详细协商流程是)
2. [0.0.0.0 255.255.255.255 这 2 个 ip 地址是什么意思? 他们的适用场景是? VIP 如何漂移的? 他的底层原理是?](#0000-255255255255-这-2-个-ip-地址是什么意思-他们的适用场景是-vip-如何漂移的-他的底层原理是)
3. [tunnel VPN 翻墙他实现的原理是, 他是怎么绕过防火墙的, 数据包传输流程, 他在那一层欺骗了防火墙等](#tunnel-vpn-翻墙他实现的原理是-他是怎么绕过防火墙的-数据包传输流程-他在那一层欺骗了防火墙等)
5. [nginx](#nginx)
1. [nginx 相关 正向 /反向代理是什么意思? 他们区别是?](#nginx-相关-正向-反向代理是什么意思-他们区别是)
2. [一般架构 nginx 集群 -> 反向代理 -> tomcat, 为什么不能反过来部署呢?](#一般架构-nginx-集群---反向代理---tomcat-为什么不能反过来部署呢)
3. [高并发 / 动静分离如何实现?](#高并发--动静分离如何实现)
6. [Git](#git)
1. [git 相关 svn/git 分别是? 他们有什么区别?](#git-相关-svngit-分别是-他们有什么区别)
2. [都说 git 管理 /切分支轻量, 他们轻量在哪里, 具体原理是?](#都说-git-管理-切分支轻量-他们轻量在哪里-具体原理是)
3. [`git rebase xxx` 发送冲突, 他的根本原因是? 不要说具体场景 `git fetch/git pull` 他们区别是?](#git-rebase-xxx-发送冲突-他的根本原因是-不要说具体场景-git-fetchgit-pull-他们区别是)
4. [`index / local / remote / workspace` 他们是? 比如 `git add xxx` 他发生了什么?](#index--local--remote--workspace-他们是-比如-git-add-xxx-他发生了什么)
5. [`git pull` 做了哪些工作?](#git-pull-做了哪些工作)
6. [`git rebase` 和 `git marge` 区别是?](#git-rebase-和-git-marge-区别是)
7. [Docker](#docker)
1. [Dockerfile 优化](#dockerfile-优化)
2. [`run yum install -y balabala & run yum clean cache` 这么写有问题吗?](#run-yum-install--y-balabala--run-yum-clean-cache-这么写有问题吗)
3. [导出镜像时如何尽可能压缩体积?](#导出镜像时如何尽可能压缩体积)
4. [如何解决 ubuntu 容器中没有 `ping, ifconfig, killall` 等命令的问题 是否需要解决这种问题?](#如何解决-ubuntu-容器中没有-ping-ifconfig-killall-等命令的问题-是否需要解决这种问题)
5. [简单谈谈怎么用 compse 部署个 crud 系统](#简单谈谈怎么用-compse-部署个-crud-系统)
6. [Docker 的 overlay2 storage driver 比起 overlay 有哪些改进? 是如何做到的?](#docker-的-overlay2-storage-driver-比起-overlay-有哪些改进-是如何做到的)
7. [swarm 内部负载均衡突然死活路由不到某一个 worker 上了, 如何解决](#swarm-内部负载均衡突然死活路由不到某一个-worker-上了-如何解决)
8. [`RUN rm -rf some_file` 镜像大小会减小吗?](#run-rm--rf-some_file-镜像大小会减小吗)
9. [Docker Compose 概述](#docker-compose-概述)
10. [都是 docker 轻量级, 他轻量在哪里, 从技术角度分析, 咱们都是搞技术, 不需要从产品角度分析他为什么轻量?](#都是-docker-轻量级-他轻量在哪里-从技术角度分析-咱们都是搞技术-不需要从产品角度分析他为什么轻量)
11. [`docker volume, bind, mount` 他们区别是什么? 如何构建最小的镜像, 说说你的思路?](#docker-volume-bind-mount-他们区别是什么-如何构建最小的镜像-说说你的思路)
12. [`docker -p/P` 他的实现原理是什么?](#docker--pp-他的实现原理是什么)
13. [`ADD` 和 `copy` 的区别](#add-和-copy-的区别)
14. [简述 / 阐述 docker 的网络原理, 底层实现](#简述--阐述-docker-的网络原理-底层实现)
8. [MySQL](#mysql)
1. [联合索引字段顺序会产生影响吗? 产生什么影响?](#联合索引字段顺序会产生影响吗-产生什么影响)
2. [什么情况下需要建索引? 什么情况下不建?](#什么情况下需要建索引-什么情况下不建)
3. [mysql 查看连接数和进程数?](#mysql-查看连接数和进程数)
4. [慢查询是什么?](#慢查询是什么)
9. [Redis](#redis)
1. [redis 哨兵机制主从是如何切换的?](#redis-哨兵机制主从是如何切换的)
10. [Kubernetes](#kubernetes)
1. [k8s 请求到达 APIserver 的整个流程](#k8s-请求到达-apiserver-的整个流程)
2. [k8s 部署应用一共有几种方式](#k8s-部署应用一共有几种方式)
3. [k8s 自动扩容的底层实现原理](#k8s-自动扩容的底层实现原理)
## 线下一个服务响应很慢, 你如何排查? 排查流程是?
### 排除法
#### 首先检查负载均衡系统
1. 检查系统负载, 内存使用情况;
2. 检查磁盘空间使用情况;
3. 检查系统日志;
4. 检查应用程序运行情况, 执行命令 ipvsadmin, 有转发数而且数字不断变化, 这可以确认应用程序 keepalived 及 lvs 都是正常的.
#### 检查应用服务器
1. 检查服务器应用进程的 CPU, 内存, 磁盘占用情况;
2. 查看系统日志是否有文件系统损坏, 内核异常相关报错;
3. 检查 nginx 是否正常运行;
#### 检查与应用相关文件服务器
1. 检查文件服务器的运行压力;
2. 读日志;
#### 检查缓存服务器. 同上
#### 检查数据库
1. 检查守护进程运行情况;
2. 读日志, 检查是否有错误日志或异常输出;
3. 检查数据库连接进程状况;
#### 排查是否被挂马
#### 排查最近更新的业务程序是不是用了奇怪的死循环或者海量查询
## 熔断, 限流, 降级的区别?
- 熔断: 类似于电器的保险丝, 当某服务出现不可用或响应超时的情况时, 为了防止整个系统出现雪崩, 暂时停止对该服务的调用的行为. 熔断发生后, 通过策略去试探调用某服务, 服务回复可用后停止熔断行为.
- 限流: 上游服务对本服务请求 QPS 超过阙值时, 通过延迟处理, 拒绝处理等行为对请求量进行限制, 以保证本服务不被压垮, 从而持续提供稳定服务. 常见的限流算法有滑动窗口, 令牌桶, 漏桶等.
- 降级: 当服务压力过大时, 通过降低一些需求来保证处理能力持续可用, 譬如降低即时性和数据一致.
## Linux 系统
### 都说 Linux 下一切皆文件, 你是怎么理解的?
- 是一种面向对象的设计思想, 就是说将一切设备当做文件, 从而调用操作文件的接口. 串口, 内存, 蓝牙, 进程信息, 网卡, 建立的每个通讯都是文件. 这个原理与子类都能当做基类访问是一样的, 就是操作系统层面的面向对象思想.
### 都说 socket 在 Linux 实际是一个文件, 是通过什么技术将 socket 变成一个文件的?
- socket 也是一个接口, 本质是对 TCP / UDP / IP 的封装 API.
### Linux 下软 / 硬连接是什么, 他们有什么区别?
- 硬连接指通过索引节点来进行连接. Linux 文件系统中, 保存在磁盘分区中的文件都会获得一个索引节点号号, 多个文件名指向同一索引节点的连接就是硬连接. 硬连接的作用是允许一个文件拥有多个有效路径名 (文件真正删除的条件是与之相关的所有硬连接文件均被删除). Symbolic Link 叫软连接. 软链接文件有类似于 Windows 的快捷方式, 实际上是一个特殊的文件, 文件实际上是一个文本文件, 其中包含的有另一文件的位置信息.
### Linux 下一个用户登录以下文件加载顺序是? `~/.bash_profile, ~/.bash_login, ~/.profile, ~/.bashrc, /etc/profile`
```shell
# load global environment variable
execute /etc/profile
# detect user environment variable
if ~/.bash_profile exists then
execute ~/.bash_profile
# load user environment variable
if ~/.bashrc exists then
execute ~/.bashrc
fi
else
if ~/.bash_login exist then
execute ~/.bash_login
else
if ~/.profile exist then
execute ~/.profile
end if
end if
end if
```
> 非登录情况加载: `~/.bashrc, /etc/bashrc`
### 都说 systemd 他可以并行启动, 他的实现原理是?
- systemd 通过 socket 激活的机制让所有程序全部并行启动, 且仅按照系统启动的需要启动相应的服务.
### 僵尸进程 / 孤儿进程他们是? 区别是啥?
- 僵尸进程: 子进程停止活动但未释放资源.
- 父进程停止后, 依然正常运行的子进程, 会进入 init 进程托管直到任务结束后释放资源.
### 为什么说 ssh 很安全? 具体原理是? 如何保证?
- 结合对称与非对称加密保护通信通道.
- 修改端口, 只用证书登录, ip 黑白名单, 开启两步验证.
### Linux 端口数一共多少, 怎么确定的?
- 65536 (可用的 = 65536-去掉一些系统保留端口 (0-1024)), 即一个 short 类型的量.
### 举例 Linux 内置命令
- 例如: `pwd, echo, which, type`; 使用 `type` 可以查看一个命令是不是内置的.
### ACL 是什么意思?
- Access Control List, Linux 的一个权限管理应用.
## 网络
### 网络 mtu 是什么? 他发生在那一层, 如果 2 个设备 mtu 值不同, 以谁为准, 那么 2 个设备是如何协商的? 详细协商流程是?
### 0.0.0.0 255.255.255.255 这 2 个 ip 地址是什么意思? 他们的适用场景是? VIP 如何漂移的? 他的底层原理是?
### tunnel VPN 翻墙他实现的原理是, 他是怎么绕过防火墙的, 数据包传输流程, 他在那一层欺骗了防火墙等
## nginx
### nginx 相关 正向 /反向代理是什么意思? 他们区别是?
### 一般架构 nginx 集群 -> 反向代理 -> tomcat, 为什么不能反过来部署呢?
### 高并发 / 动静分离如何实现?
## Git
### git 相关 svn/git 分别是? 他们有什么区别?
### 都说 git 管理 /切分支轻量, 他们轻量在哪里, 具体原理是?
### `git rebase xxx` 发送冲突, 他的根本原因是? 不要说具体场景 `git fetch/git pull` 他们区别是?
### `index / local / remote / workspace` 他们是? 比如 `git add xxx` 他发生了什么?
### `git pull` 做了哪些工作?
- `git pull` 是 `git fetch + git merge`, 将远程仓库内容拉取到本地再与本地仓库相同分支的内容进行合并.
### `git rebase` 和 `git marge` 区别是?
## Docker
### Dockerfile 优化
- 移除 apt 的 cache, 对经常变化的指令放在最后 可以优化增量部分
- 参考 nginx 的 alpine.
### `run yum install -y balabala & run yum clean cache` 这么写有问题吗?
- 有, 一个 `run` 对应一层`layer`, docker 镜像会记录每一次 `run` 直接的 diff, 上面的单独 `run yum clean cache` 并不会减小镜像大小.
### 导出镜像时如何尽可能压缩体积?
- 11
### 如何解决 ubuntu 容器中没有 `ping, ifconfig, killall` 等命令的问题 是否需要解决这种问题?
- 22
### 简单谈谈怎么用 compse 部署个 crud 系统
### Docker 的 overlay2 storage driver 比起 overlay 有哪些改进? 是如何做到的?
### swarm 内部负载均衡突然死活路由不到某一个 worker 上了, 如何解决
### `RUN rm -rf some_file` 镜像大小会减小吗?
### Docker Compose 概述
- Compose 是一个用于定义和运行多容器 Docker 应用程序的工具, 适用于所有环境: 生产, 登台, 开发, 测试以及 CI 工作流程.
### 都是 docker 轻量级, 他轻量在哪里, 从技术角度分析, 咱们都是搞技术, 不需要从产品角度分析他为什么轻量?
### `docker volume, bind, mount` 他们区别是什么? 如何构建最小的镜像, 说说你的思路?
### `docker -p/P` 他的实现原理是什么?
### `ADD` 和 `copy` 的区别
- `ADD` 能加载网络源, `copy` 只能加载本地源, `ADD` 是 `copy` 的超集.
### 简述 / 阐述 docker 的网络原理, 底层实现
## MySQL
### 联合索引字段顺序会产生影响吗? 产生什么影响?
- 会, 最左优先原则: 要想 SQL 执行的时候能够用到联合索引, 那么联合索引中的第一个字段一定要在 where 语句中, 并且不能让该字段参与任何运算.
### 什么情况下需要建索引? 什么情况下不建?
- 那么如果查询语句的查询条件仅用到 `primary key`, 那么就不需要增加索引, 此外如果查询条件的字段是仅包含两三个值的枚举类型, 也是不需要增加索引.
### mysql 查看连接数和进程数?
- `show processlist`
### 慢查询是什么?
- SQL 的执行时间超过 MySQL 中 `long_query_time` 参数的值的时候, 会被记录到慢查询 SQL 日志文件中.
## Redis
### redis 哨兵机制主从是如何切换的?
## Kubernetes
### k8s 请求到达 APIserver 的整个流程
### k8s 部署应用一共有几种方式
### k8s 自动扩容的底层实现原理
评论
发表评论