最近面试
节选一些面试题目,重复的面试题目就不单列了
科联(云计算虚拟化工程师(实习))
科联给我的面试压力是最大的,整个面试过程比较紧张
Q:你知道 KVM 用于做虚拟化的,那么我该如何对使用 KVM 虚拟化的虚拟机进行跨节点组网呢?
A:不了解(知识盲区),当时猜测用 SDN 的手段
Q:如果使用 Docker Swarm 组建集群,但是不使用其提供的网络功能,你会怎么组建集群网络
A:寄
Q:Docker 的 Bridge 网络是如何实现的?怎么追踪?
A:iptables,Bridge 的具体 NAT 转发可以通过 iptables filter 看出来
Q:如果一个容器的 Bridge 网络的 Port 转发失败了,你该如何排查?
A:这个和上文一致
Q:你喜欢 CI/CD,那你用的是什么?了解过 Jenkins 么?
A:主要用的是 Github Action 和 Drone,没怎么使用过 Jenkins
Q:MySQL 备份容灾,主从复制,集群了解过么?实践过么?
A:只了解过主从复制,利用 MySQL 的 binlog
Q:你认为 Docker 的网络使用 iptables 有啥缺陷么?
A:....
Q:当一个 k8s 节点运行了一百多个 pod 涉及到一堆 Service 的 iptables 转发规则,你觉得 iptables 的性能还够用么?会不会有什么问题
A:当时没答出来。如果涉及到大量的 iptables 规则的话,iptables 确实容易遇到性能问题,因为它的表是线性扫描的,大量规则会导致这个匹配过程像一个慢查询一样。这个问题的解决方案是 IPVS or eBPF,不过当时我没想到
Q:Redis 集群了解过么?实践过么?主从呢?
A:Redis 有主从模式,单写多读。
Q:主从模式只发挥了 Redis 一半的性能,还有别的模式么?
A:还有一种数据自动分片的模式,需要某种数据的时候,根据索引去对应的 Redis 节点进行读写。其实是四种:Redis Sentinel ,Redis Cluster,Master-Slave Replication,Redis Proxy
Q:你了解灰度发布机制么?比如 Canary Release
A:在 k8s 中在 DeployMent 控制器下,我们可以设置逐步让 pod 升级上去,没有问题的话,滚动更新一个,逐步覆盖所有 pod
Moka (运维实习生)
Q:Docker 的原理是什么?
A:Docker 的隔离实现依赖于 Linux Kernel 的 namespace,资源限制则是 cgroups,网络则是依赖于 iptables
Q:你的简历里面写了你会 CI/CD,你能给我展示一下么?
A: Show repository
Q:你会怎么编写一个 Dockerfile
A:首先梳理整个项目的构建/编译流程,如果项目比较庞大的话,可以分多步骤构建,逐步输出编译/构建的中间产物,然后拿到编译/构建的最终产物,放到运行时的 Docker 镜像。在测试兼容的情况下,尽量选用基础镜像比较小的,然后 RUN 关键字尽量去覆盖所有要执行的操作,目的是为了减少 layer,软件包兼容的话,可以选用更小的软件包,比如 Busybox 可以直接扔掉一众 ls rm 等软件包。
开源中国(运维实习生)
Q:现在服务器的 CPU 占用异常高,你会如何排查?
A:(完整版)首先使用 htop/top 去锁定占用异常高的程序,假设是 Web 程序的话,首先使用 ps 和 strace 去追踪程序目前在做什么,系统调用是什么,使用 perf 去查看 CPU 占用高的函数,然后去查看日志,去查看最后一次传入的用户输入是什么,查看数据库等之类是不是慢查询,如果不是数据库的问题,查询很快,那有可能是畸形用户输入导致的程序异常,此时要使用收集到的信息和开发组成员进行排查,看是不是代码逻辑有问题,此时应该对程序做一些资源限制,比如使用 cpulimit 去限制程序的 CPU 使用等。当然还有另外一种情况,这个程序不是我们已知的程序,经过简单调查发现是挖矿病毒,此时要进行应急响应,先尝试清除挖矿病毒,排查计划任务等,然后追踪攻击链,找到被攻入的缺口,进行安全加固。某些挖矿病毒会替换掉系统的 rm ps 等基础命令,此时无法信任原有的 ELF 文件。
钛动科技(运维实习生)
Q:Linux 下如何修改文件的所有者
A:chown
Q:但是这样修改,只会修改当前文件夹,我想子目录也被修改呢?
A:加 -R 参数递归
Q:Linux 下如何查看 IP
A: ip add
Q:linux 下如何查看路由
A: ip route show , route -n
Q:你说你了解 docker,那么 docker 和 docker-compose 有什么关系
A:Docker 使用 containerd 作为容器运行时,提供一堆 API 供用户操作; compose 就是一个单机容器编排工具
Q: 那 compose 和 k8s 有啥区别
A:compose 是单机编排,k8s 是跨主机编排
Q:DNS 记录中 A,CNAME 记录分别是做什么用的
A:A 记录指向一个 v4 地址,对应的 AAAA 指向 v6 地址,CNAME 记录一般指向另一个域名,当解析的时候会解析成对应域名的 IP
Q:MX 记录是做什么的
A:主要是声明邮件服务器的地址
Q:TXT 记录呢?
A:可以用于 SSL 证书验证等。我们可以在这里放一些字符串,以达到我们想要的目的,比如 SPF,DMARC,DKIM等
Q:NGINX 的 404 ,503 是什么
A:404 一般表示访问的资源不存在,503 是服务不可用
Q:NGINX 301 ,302 指什么意思
A:301 表示永久跳转,会 Cache 到浏览器,302 是临时跳转,不会 cache
Q:了解监控告警么?
A:不了解
Q:你提到了你的 k8s 集群使用了 NFS,那么你认为 NFS 是对象存储么?
A:不是,NFS 就是一个文件服务器,归类的话是文件存储
Q:你选择 Rust 的理由是什么?
A:没有 GC,而且还不需要我手动管理内存,不喜欢 Go 的错误处理方式
Q:我看你很喜欢 Linux,那么你为什么选择 Linux
A:因为 Windows 出现错误恢复比较困难,比如注册表说是一个统一的配置信息中心,其实就是一种数据库,如果损坏炸掉了,除非有原来的备份,不然是没办法恢复的;第二,Windows 糟糕的文件权限管理;第三,我需要一个全局 UTF-8 的环境。
Q:那你了解 Linux 系统调优么?
A:?
Q:比如文件打开太多了,该怎么调整?
A:明白了,你这是对内核进行设置,在资源允许的条件下,可以适当增加文件描述符上限,连接数上限等