面试官:你最近一个项目是某食品数字化零售项目,你在其中用到了哪些技术栈?做了哪些工作?
你:这个项目是食品行业线上线下一体化零售平台,我主要负责后端服务、容器化部署、CI/CD 与运维保障这块。
技术栈主要有:
- 后端:SpringBoot、MySQL、Redis
- 中间件:RabbitMQ、Nginx
- 容器与云原生:Docker、Kubernetes(K8s)、Harbor 镜像仓库
- 运维与自动化:Jenkins、Linux、Shell 脚本、ELK 日志
我主要做的工作:
- 负责微服务的容器化改造,把各个业务模块打包成 Docker 镜像,统一管理。
- 在 K8s 上搭建和维护部署环境,包括 Pod、Deployment、Service、ConfigMap 这些资源。
- 搭建 CI/CD 流水线,用 Jenkins 实现代码提交后自动构建、自动部署,提升发布效率。
- 做服务监控与日志收集,保证线上稳定,出问题能快速定位。
- 配合业务做高可用、弹性扩缩容,应对促销、高峰期流量,保证系统不崩。
整体就是从开发部署到运行维护一整套云原生落地的工作。
面试官:请详细说说你使用 Docker/K8s 的实操经验。如果证券交易系统的 Pod 频繁重启,你会从哪些维度排查问题?按排查顺序说明。
你:好的面试官。我有实际项目中 Docker 镜像构建、K8s 集群部署、服务发布、问题排查的经验,包括 Deployment、Service、ConfigMap、Secret、探针、HPA 这些都用过。
证券交易系统对稳定性要求极高,Pod 频繁重启是严重问题,我会按从简单到深入、从日志到配置、从应用到资源的顺序排查:
-
先看 Pod 状态与重启次数
用kubectl get pod看是否是CrashLoopBackOff,看重启次数,确认是启动失败还是运行中崩溃。 -
查看容器日志,定位业务报错
直接kubectl logs <pod> [-c 容器],看启动时是否报错:- 证券系统常见:连接行情库/交易库失败、配置错误、端口被占、权限问题、依赖服务没起来。
-
describe Pod,看事件信息
kubectl describe pod <pod>重点看 Events:- 是否 OOM Killed(内存溢出被系统杀掉)
- 镜像拉取失败
- 探针失败(livenessProbe 重启)
- 节点资源不足、磁盘满、节点异常
-
检查健康探针配置
证券交易系统启动慢很常见:- 启动探针没配,导致存活探针提前检查,直接重启
- 就绪/存活探针超时时间太短、检查太频繁
- 检查路径/端口错误,导致误判失败
-
检查资源限制 request/limit
交易系统计算量大、内存占用高:- memory limit 太小,触发 OOM
- CPU 限制过低,导致应用响应慢、探针超时
看kubectl top pod确认真实资源使用。
-
检查容器启动命令与退出逻辑
- 主进程是否是后台运行(导致容器 1 号进程退出,Pod 直接重启)
- 脚本异常、参数错误、配置文件不存在
- 证券相关:证书、密钥、配置中心权限问题
-
检查依赖服务与网络
交易系统强依赖:数据库、消息队列、撮合引擎、第三方接口:- 网络不通、DNS 解析失败
- 中间件连接池满、超时、认证失败
- 慢查询、死锁导致进程卡死被探针重启
-
检查节点与集群状态
- 节点内存/CPU/磁盘满
- kubelet 异常、docker/containerd 异常
- 节点污点、驱逐策略触发
- 存储挂载失败、权限问题
-
最后检查重启策略与上层控制器
- Deployment 配置错误、滚动更新异常
- livenessProbe 失败阈值太小
- 有问题的 Sidecar 容器带崩整个 Pod
面试官:思路很清晰,顺序也很标准。
你:总结一下:先看状态 → 看日志 → 看事件 → 查探针 → 查资源 → 查启动命令 → 查依赖 → 查节点 → 查控制器。
证券交易系统最常见的就是:OOM、探针配置不合理、启动慢、数据库/中间件连接失败这四类。
面试官:如果客户现场 K8s 集群节点故障,需要快速恢复服务,你会怎么做?有没有做过集群容灾、备份恢复的实操?
你:有的面试官,我处理过生产环境节点宕机、集群异常的场景,也做过 etcd 备份恢复、跨节点容灾的实操。我先说节点故障快速恢复的步骤,再讲容灾与备份的实际经验。
面试官:好,先讲节点挂了,怎么快速恢复服务?
你:
我会按先恢复业务、再排查根因的思路来处理,顺序非常明确:
-
先确认故障影响范围
先看是单节点挂了,还是多个节点。
kubectl get nodes看节点状态是 NotReady 还是 Unknown。 -
立即把故障节点隔离,禁止新 Pod 调度
给节点打污点,不让新 Pod 再调度上去:
kubectl cordon <节点名> -
强制驱逐节点上的业务 Pod,让它们漂移到正常节点
用驱逐命令,让 Deployment、StatefulSet 自动在其他正常节点重建 Pod:
kubectl drain <节点名> --force --ignore-daemonsets
这一步是最快恢复业务的关键。 -
观察服务是否恢复正常
kubectl get pod -o wide
看 Pod 是否在其他节点启动、变成 Running。
证券、零售这类核心业务,只要副本数足够,一般1~3分钟内就能恢复。 -
最后再排查节点为什么挂
去节点上看:- kubelet 是否挂了
- 磁盘、内存、CPU 是否打满
- 容器运行时(containerd/docker)是否异常
- 网络是否不通
面试官:那你有没有做过 K8s 集群备份、容灾、恢复的实操?
你:
有的,我做过etcd 备份恢复和集群级容灾方案落地:
-
etcd 定期备份
K8s 所有数据都在 etcd,我在生产环境配置了定时备份脚本:
etcdctl snapshot save
每天自动备份,保留多份,上传到文件服务器/对象存储。 -
集群崩溃后的恢复实操
我做过真实演练:- 停旧集群
- 在新环境恢复 etcd 快照
- 重启 apiserver、controller-manager
- 验证所有节点、Pod、Service 全部恢复
整个过程可控,数据不丢。
-
实际容灾方案
- 多节点高可用:控制面 3 节点 etcd 集群
- 业务多副本:
replicas: 3,跨节点部署 - 节点反亲和,避免同一服务全部跑在一个节点
- 核心服务配置
preStop、健康检查,保证优雅重启不丢请求
面试官:总结一下你的思路?
你:
总结就两句话:
节点故障:先隔离、再驱逐、快速漂移业务恢复;
集群安全:etcd 定时备份 + 多节点高可用 + 多副本容灾。
我在真实项目里都是这么落地和处理故障的。
面试官:证券系统要求7×24小时稳定运行,日常监控你会关注哪些核心指标(服务器、应用、网络)?用过哪些监控工具?出现监控告警,你的处理流程是什么?
你:好的面试官。证券交易系统对稳定性、时延、可用性要求极高,不允许中断、不允许抖动,我在日常运维里会从服务器、应用、网络三个层面盯核心指标,也有成熟的监控工具和告警处理流程。
面试官:先说核心监控指标,你重点关注哪些?
你:
我分成三块:
1. 服务器/操作系统层面
- CPU:使用率、负载、iowait、软中断
- 内存:使用率、缓存、swap、OOM 风险
- 磁盘:使用率、inode、磁盘延迟、磁盘满
- 网络网卡:流量、丢包、错包、端口状态
- 进程:关键进程是否存活、句柄数、线程数
证券系统特别关注 iowait 过高、磁盘满、内存溢出、负载飙高,这些会直接导致交易延迟。
2. 应用层面(K8s + 业务)
- Pod 状态:是否重启、CrashLoopBackOff、NotReady
- 容器资源:CPU/内存 limit、OOM Killed
- 健康探针:存活、就绪、启动探针失败
- 服务可用性:接口响应时间、错误率、QPS
- 中间件:MySQL、Redis、RabbitMQ 连接数、慢查询、队列堆积
3. 网络层面
- 连通性:节点间、Pod 间、Service 访问
- 时延:内网时延、外网出入口时延
- 丢包、重传、TCP 连接数
- DNS 解析是否正常
证券最怕网络抖动、时延突增、丢包、DNS 异常。
面试官:你用过哪些监控工具?
你:
我在项目里实际落地过这套:
- Prometheus + Grafana:核心监控、告警、大盘展示
- AlertManager:告警发送(邮件、企业微信、短信)
- Node Exporter:服务器硬件/系统指标
- cAdvisor:容器指标
- ELK/EFK:日志收集、错误检索
- Loki + Promtail:轻量日志监控
- Zabbix:传统服务器监控
- tcpdump、sar、netstat、ss、dstat:Linux 命令行排查
面试官:出现监控告警,你的处理流程是什么?
你:
我有标准的一线应急处理流程,证券系统必须快:
-
第一时间确认告警真实性 & 影响范围
看哪个指标、哪台机器、哪个服务、是否大面积故障。 -
按优先级恢复业务优先
- 服务不可用:立刻查看 Pod 是否重启、节点是否宕机
- 性能异常:CPU/内存/磁盘/网络先定位瓶颈
- 业务错误:查日志、查接口、查中间件
-
快速止血
- 节点异常:cordon 隔离 → drain 驱逐 → 业务漂移
- Pod 崩溃:重启、扩容、回滚版本
- 资源满:清理磁盘、扩容内存、调优配置
-
日志 & 指标定位根因
用 Grafana 看趋势
用日志查报错
用 Linux 命令查现场:top、free、df -i、netstat、dmesg -
记录、复盘、优化
避免再次发生:调探针、加资源、优化配置、完善告警策略。
面试官:很好,思路非常清晰,符合生产级运维标准。
面试官:开盘前1小时,客户反馈证券交易系统无法登录,多个营业部都有问题。你作为技术支持,第一步会做什么?怎么协调研发、运维,同时跟客户同步进度?
你:面试官您好,这种场景我非常清楚,开盘前属于最高级别的应急场景,我的处理思路非常明确:先止血、再定位、同步要快、分工要清。
面试官:那你第一步做什么?
你:
第一步绝对不是直接去查代码、查日志,而是:
先快速确认故障范围、严重等级,同时立刻启动应急群。
具体就三件事:
- 先自己验证:能不能登录、是不是所有区域都不行、是不是网络问题。
- 立刻判断:是大面积故障还是个别线路问题——多个营业部同时无法登录,基本可以判定是核心服务/入口层故障。
- 马上拉应急群:把研发、运维、DBA、架构师全部拉进来,先定调:P0 级故障,开盘前优先恢复!
一句话总结:
第一步:确认范围 → 定级 → 拉群启动应急。
面试官:那你怎么协调内部团队?
你:
我会按职责立刻分工,不浪费一秒:
-
运维/我本人
- 先查入口:Nginx/网关/Service/Ingress 是否正常
- 查节点、Pod 状态:是否大量重启、NotReady、OOM
- 查监控:CPU、内存、连接数、流量是否突增
- 目标:5分钟内判断是不是基础设施问题
-
后端研发
- 查登录服务日志:报错、异常、连接池满、调用第三方失败
- 查用户认证、会话、Redis、Token 相关服务
- 看是否是刚发布、更新配置引起
-
DBA
- 查用户库、认证库是否正常
- 锁表、慢查询、连接满没满
-
网络/运维
- 查专线、VPN、DNS、负载均衡是否异常
- 多营业部同时异常,优先查统一入口
我在中间做总指挥+推进:
每3分钟同步一次进展,谁没输出就盯谁。
面试官:那你怎么跟客户同步?
你:
对客户沟通我坚持三个原则:不甩锅、不隐瞒、频率稳定、给预期。
-
第一时间回复
“收到,已启动P0最高级应急,正在全面排查,我每5分钟同步一次进度。” -
同步结构固定
- 当前现象:全量/部分无法登录
- 正在排查方向:入口、服务、数据库、网络
- 已做动作:重启、扩容、回滚、切换
- 初步预估时间:给保守时间,不给空话
-
恢复后第一时间告知
并简单说明原因,以及后续避免措施。
绝对不说:
“我们在看”“不知道”“应该快了”这类空话。
面试官:如果排查很久没定位到,你会怎么办?
你:
证券交易系统,开盘前时间比定位根因更重要。
我会直接走止损方案:
- 先回滚到上一个稳定版本
- 切换备用集群/备用入口
- 重启登录服务核心模块
- 临时扩容、切流量
先恢复登录,再慢慢查根因。
这是生产应急的核心逻辑。
面试官:你整体思路很清晰,很符合生产实战。
你:
谢谢面试官。
我的核心逻辑就是三句话:
先定级拉群,再分工恢复,同步透明及时;
开盘前一切以“快速恢复”为第一目标;
对内强协调,对外稳预期。
面试官:你有没有处理过客户投诉的经历?当时是什么情况?怎么解决的?结果如何?
你:有的面试官,我在之前的食品数字化零售项目中,处理过一次比较典型的客户投诉,我给您简单说一下当时的情况和处理过程。
面试官:好,你说。
你:
当时是客户的线下门店高峰期,系统突然卡顿、下单反应很慢,门店店长直接投诉到我们这边,情绪比较急,说影响营业、影响用户体验,要求我们立刻解决。
我当时第一反应是:
先安抚情绪,再快速定位,最后给出明确结果。
面试官:你具体是怎么做的?
你:
我分了四步:
-
先稳住客户情绪
我第一时间电话联系对方,先道歉、先共情,告诉客户:
“我理解现在是营业高峰,系统慢对你们影响很大,我现在全程盯着,5分钟内给您第一个进展。”
先让客户觉得我们重视、靠谱、不推诿。 -
快速拉人排查问题
我立刻拉了应急小群,同步运维、研发一起查:- 先看服务器负载、CPU、内存
- 再看接口响应时间、数据库慢查询
最后发现是高峰期流量突增,数据库连接池打满,导致整体阻塞。
-
先恢复,再优化
我没有先纠结根因,而是先临时扩容连接池、重启相关服务,把系统先拉回正常。
大概 3 分钟左右系统就恢复流畅。 -
给客户一个完整交代
系统恢复后,我主动电话告知客户:- 问题原因
- 已经怎么解决
- 后续我们会做什么优化,避免再发生
客户从一开始很急躁,到最后表示理解、认可。
面试官:最终结果怎么样?
你:
最终系统恢复稳定,客户没有继续投诉,反而因为我们响应快、处理及时、态度负责,后续对我们团队的信任度更高了。
通过这件事我也总结了处理客户问题的核心:
响应快、态度稳、先解决、再解释、闭环到位。
面试官:很好,这个经历很真实,也体现了你的沟通能力和应急能力。