Linux面试题——面试指南
【摘要】 linux面试指南
面试指南
1. 你平时在公司主要做什么?
- 解答:
- 负责服务器的日常维护和监控,确保系统稳定运行。
- 使用自动化工具(如 Ansible、Jenkins)进行配置管理和持续部署。
- 排查系统故障,优化性能(如 CPU、内存、磁盘、网络)。
- 管理数据库(如 MySQL、Redis)的备份、恢复和性能优化。
- 部署和维护负载均衡(如 Nginx、LVS、HAProxy)和高可用架构。
- 编写脚本(如 Shell、Python)实现自动化任务。
- 配合开发团队完成项目上线和运维支持。
2. 你们原来公司的网站架构是怎么样的?
- 解答:
- 前端:使用 Nginx 或 CDN 做静态资源分发。
- 负载均衡:使用 LVS 或 HAProxy 做四层负载均衡,Nginx 做七层负载均衡。
- 应用层:部署多台应用服务器(如 Tomcat、Django),通过负载均衡分发请求。
- 缓存层:使用 Redis 或 Memcached 缓存热点数据。
- 数据库层:MySQL 主从复制,读写分离,定期备份。
- 监控与日志:使用 Prometheus、Zabbix 监控系统,ELK 收集和分析日志。
- 高可用:使用 Keepalived 实现 VIP 高可用,数据库和缓存层实现集群。
3. 你对哪一块比较熟练或者精通?
- 解答:
- 负载均衡与高可用:熟悉 LVS、Nginx、HAProxy 的配置和优化。
- 自动化运维:熟练使用 Ansible、Jenkins 实现自动化部署和配置管理。
- 数据库管理:精通 MySQL 的备份、恢复、性能优化和高可用架构。
- 脚本编写:熟练编写 Shell 和 Python 脚本,实现自动化任务。
- 监控与日志:熟悉 Prometheus、Zabbix、ELK 的使用和配置。
4. 介绍一下负载均衡?
- 解答:
- 定义:负载均衡是将请求分发到多个服务器,以提高系统的并发处理能力和可用性。
- 类型:
- 四层负载均衡:基于 IP 和端口(如 LVS、HAProxy)。
- 七层负载均衡:基于应用层协议(如 HTTP、HTTPS,Nginx)。
- 作用:
- 提高系统性能。
- 实现高可用。
- 动态扩展服务器。
5. LVS 内部原理?
- 解答:
- LVS(Linux Virtual Server)是基于 Linux 内核的四层负载均衡技术。
- 原理:
- 通过 IPVS(IP Virtual Server)模块实现请求转发。
- 客户端请求到达 LVS,LVS 根据调度算法将请求转发到后端真实服务器。
- 特点:
- 高性能,工作在内核态。
- 支持多种调度算法(如轮询、加权轮询、最小连接)。
6. Nginx、LVS、HAProxy 三个有什么区别?
- 解答:
- Nginx:
- 七层负载均衡,支持 HTTP、HTTPS。
- 配置灵活,支持反向代理、缓存、SSL 终端。
- LVS:
- 四层负载均衡,基于 IP 和端口。
- 高性能,工作在内核态。
- HAProxy:
- 支持四层和七层负载均衡。
- 高可用性和健康检查功能强大。
- Nginx:
7. LVS 主要 3 种工作模式原理
- 解答:
- NAT 模式:
- LVS 修改请求和响应的 IP 地址。
- 后端服务器的网关必须指向 LVS。
- DR 模式(Direct Routing):
- LVS 只修改请求的 MAC 地址,响应直接返回客户端。
- 高性能,后端服务器需要配置 VIP。
- TUN 模式(IP Tunneling):
- 通过 IP 隧道将请求转发到后端服务器。
- 后端服务器可以跨网络。
- NAT 模式:
8. LVS 工作原理,算法,工作模式
- 解答:
- 工作原理:通过 IPVS 模块将请求转发到后端服务器。
- 调度算法:
- 轮询(Round Robin)
- 加权轮询(Weighted Round Robin)
- 最小连接(Least Connections)
- 加权最小连接(Weighted Least Connections)
- 工作模式:NAT、DR、TUN。
9. MySQL 用的哪个版本,你们的数据库怎么备份,什么时间备份,备份数据量多大
- 解答:
- 版本:MySQL 5.7 或 8.0。
- 备份方式:
- 逻辑备份:
mysqldump
。 - 物理备份:
xtrabackup
。 - 主从复制:实时同步数据。
- 逻辑备份:
- 备份时间:凌晨 2 点,业务低峰期。
- 备份数据量:根据业务规模,可能是几十 GB 到几 TB。
10. Memcached 工作原理(内存管理机制)
- 解答:
- 工作原理:Memcached 是一个分布式内存缓存系统,通过键值对存储数据。
- 内存管理:
- 使用 Slab Allocation 机制管理内存。
- 将内存划分为多个 Slab Class,每个 Slab Class 包含多个 Chunk。
- 数据根据大小分配到合适的 Chunk 中。
11. Nginx 状态码 499 是什么意思
- 解答:
- 499:客户端主动关闭连接。
- 可能原因:
- 客户端请求超时。
- 服务器响应过慢。
12. Nginx 状态码 502 错误可能的原因有哪些
- 解答:
- 502 Bad Gateway:Nginx 作为反向代理时,后端服务器返回无效响应。
- 可能原因:
- 后端服务崩溃或未启动。
- 后端服务响应超时。
- 网络连接问题。
13. 状态码 200、500、502、304 分别表示什么意思
- 解答:
- 200:请求成功。
- 500:服务器内部错误。
- 502:网关错误,后端服务器返回无效响应。
- 304:资源未修改,客户端可以使用缓存。
以上是这些面试题的详细解答,结合实际经验回答会更加分!
以下是针对这些面试题的详细解答:
14. 维护网站过程中遇到的问题,处理过什么故障?(状态码:413、504 的意思)
- 解答:
- 常见问题:
- 服务器负载过高:通过优化代码、增加服务器、使用缓存解决。
- 数据库性能瓶颈:通过索引优化、读写分离、分库分表解决。
- 网络故障:通过排查网络配置、使用 CDN 解决。
- 状态码:
- 413:请求实体过大,通常是因为上传文件超过服务器限制。解决方法:调整 Nginx 的
client_max_body_size
参数。 - 504:网关超时,通常是因为后端服务器响应超时。解决方法:检查后端服务是否正常,增加超时时间。
- 413:请求实体过大,通常是因为上传文件超过服务器限制。解决方法:调整 Nginx 的
- 常见问题:
15. FTP 主动和被动的区别(指的是服务器端的主动和被动)
- 解答:
- 主动模式(PORT):
- 客户端打开一个随机端口,服务器主动连接到客户端的端口。
- 问题:客户端防火墙可能阻止服务器连接。
- 被动模式(PASV):
- 服务器打开一个随机端口,客户端连接到服务器的端口。
- 更适用于客户端有防火墙的情况。
- 主动模式(PORT):
16. Apache 两种工作模式区别及优化
- 解答:
- Prefork 模式:
- 多进程模型,每个请求由一个独立的进程处理。
- 适合稳定性要求高的场景,但内存消耗较大。
- Worker 模式:
- 多进程多线程模型,每个进程可以处理多个线程。
- 适合高并发场景,内存消耗较少。
- 优化:
- 调整
MaxClients
、KeepAlive
、Timeout
等参数。 - 使用缓存模块(如 mod_cache)和压缩模块(如 mod_deflate)。
- 调整
- Prefork 模式:
17. MySQL 主从原理?如果主库不同步报错了怎么恢复?
- 解答:
- 主从原理:
- 主库将写操作记录到二进制日志(binlog)。
- 从库通过 I/O 线程读取主库的 binlog,写入中继日志(relay log)。
- 从库通过 SQL 线程执行 relay log 中的 SQL 语句。
- 主从不同步恢复:
- 检查错误日志,定位问题。
- 如果数据不一致,可以重新同步:
- 停止从库:
STOP SLAVE;
- 备份主库数据并导入从库。
- 重新配置主从关系:
CHANGE MASTER TO ...
- 启动从库:
START SLAVE;
- 停止从库:
- 主从原理:
18. 如何备份大数据 MySQL 数据文件,MySQL 都优化哪些?
- 解答:
- 备份大数据:
- 使用
mysqldump
分表备份。 - 使用
xtrabackup
进行物理备份。 - 使用主从复制实时同步数据。
- 使用
- 优化:
- 索引优化:添加合适的索引,避免全表扫描。
- 查询优化:避免复杂查询,使用 EXPLAIN 分析查询计划。
- 配置优化:调整
innodb_buffer_pool_size
、query_cache_size
等参数。 - 分库分表:解决单表数据量过大的问题。
- 备份大数据:
19. 你在上家公司用的什么监控软件(Zabbix)?都监控些什么?怎么增加模板?
- 解答:
- 监控软件:Zabbix。
- 监控内容:
- 服务器:CPU、内存、磁盘、网络。
- 服务:Nginx、MySQL、Redis。
- 日志:错误日志、访问日志。
- 增加模板:
- 在 Zabbix Web 界面创建模板。
- 添加监控项(Items)、触发器(Triggers)、图形(Graphs)。
- 将模板关联到主机。
20. Nagios、Cacti 维护过吗,平时都监控什么?
- 解答:
- Nagios:
- 监控服务器状态、服务状态、网络状态。
- 配置告警通知。
- Cacti:
- 监控网络流量、系统性能。
- 使用 SNMP 获取数据,生成图形化报表。
- Nagios:
21. 一台 Web 服务器应该监控哪些指标
- 解答:
- 系统指标:CPU、内存、磁盘、网络。
- 服务指标:Nginx/Apache 的连接数、请求数、响应时间。
- 日志指标:错误日志、访问日志。
- 安全指标:登录失败次数、异常访问。
22. Zabbix 监控数据库监控哪些参数
- 解答:
- MySQL:
- 连接数:
Threads_connected
。 - 查询性能:
Queries_per_second
。 - 慢查询:
Slow_queries
。 - 锁等待:
Innodb_row_lock_waits
。
- 连接数:
- Redis:
- 内存使用:
used_memory
。 - 连接数:
connected_clients
。 - 命中率:
keyspace_hits
。
- 内存使用:
- MySQL:
23. Zabbix 有哪些监控项
- 解答:
- 系统:CPU、内存、磁盘、网络。
- 服务:Nginx、MySQL、Redis。
- 日志:错误日志、访问日志。
- 自定义:业务指标、API 响应时间。
24. 监控一台服务器时,你觉得应该监控服务器的哪些资源
- 解答:
- CPU 使用率。
- 内存使用率。
- 磁盘 I/O 和空间。
- 网络流量。
- 服务状态(如 Nginx、MySQL)。
25. 你们监控的时候日志平台会监控吗?
- 解答:
- 会监控日志平台,使用 ELK(Elasticsearch、Logstash、Kibana)收集和分析日志。
- 监控错误日志、访问日志,设置告警规则。
26. 你们会监控数据库的性能吗,会定标准吗?有实际遇到过吗,如何解决?
- 解答:
- 会监控数据库性能,标准包括:
- 查询响应时间。
- 连接数。
- 慢查询数量。
- 实际案例:
- 问题:慢查询导致数据库性能下降。
- 解决:优化 SQL 语句,添加索引。
- 会监控数据库性能,标准包括:
27. 写 Shell 脚本监控 MySQL 主从的思路
-
解答:
#!/bin/bash SLAVE_STATUS=$(mysql -u root -p密码 -e "SHOW SLAVE STATUS\G") IO_RUNNING=$(echo "$SLAVE_STATUS" | grep "Slave_IO_Running" | awk '{print $2}') SQL_RUNNING=$(echo "$SLAVE_STATUS" | grep "Slave_SQL_Running" | awk '{print $2}') if [ "$IO_RUNNING" != "Yes" ] || [ "$SQL_RUNNING" != "Yes" ]; then echo "MySQL 主从同步异常!" # 发送告警邮件或通知 else echo "MySQL 主从同步正常。" fi
28. 写 Shell 脚本监控所有 IP 是否存活的思路
-
解答:
#!/bin/bash for ip in 192.168.1.{1..254}; do ping -c 1 -W 1 $ip &> /dev/null if [ $? -eq 0 ]; then echo "$ip 存活" else echo "$ip 不存活" fi done
29. 公司出口带宽?每天网站 PV?UV?
- 解答:
- 出口带宽:根据公司实际情况回答(如 100Mbps)。
- PV:页面浏览量(如 100 万/天)。
- UV:独立访客数(如 10 万/天)。
30. 你们公司的网站出口带宽是多少?网站访问量是多少?是怎么计算的?
- 解答:
- 出口带宽:根据公司实际情况回答。
- 访问量:通过 Nginx 日志分析工具(如 AWStats、GoAccess)计算 PV 和 UV。
31. 你们公司是什么架构?都有哪些网上业务?详细说一下?
- 解答:
- 架构:前端 Nginx + 后端 Tomcat + 数据库 MySQL + 缓存 Redis。
- 业务:电商平台、在线支付、用户管理系统等。
- 详细:根据公司实际情况描述业务模块和技术栈。
32. 你们公司备份策略是什么?数据量多大?备份周期?备份工具?备份方式?是否做数据恢复备份演练?
-
备份策略:采用全量备份+增量备份的混合策略。
-
数据量:视业务规模而定,TB级或PB级数据存储。
-
备份周期
:
- 业务数据:每天增量备份,每周全量备份。
- 配置文件与代码仓库:每日自动备份,并实时同步至异地存储。
-
备份工具
:
- 使用 rsync、Bacula、Veeam 进行数据备份。
- 使用 MySQL/MongoDB 内置备份工具(如 mysqldump、XtraBackup)。
-
备份方式
:
- 本地备份(本地磁盘/RAID 保护)。
- 远程备份(异地机房/云存储,如 AWS S3、阿里云 OSS)。
-
数据恢复演练
:
- 每季度进行一次数据恢复测试,确保备份可用性。
- 灾备中心支持秒级切换,确保业务连续性。
33. 你在工作中是怎么做日志分析的?例如:访问日志、错误日志等
-
访问日志分析
:
- 使用 ELK(Elasticsearch + Logstash + Kibana) 或 Grafana + Loki 进行实时日志采集和可视化分析。
- 分析用户访问行为(PV、UV)、请求频率、API 响应时间等,优化系统性能。
-
错误日志分析
:
- 使用 Prometheus + Alertmanager 监控异常情况,结合 Sentry 进行应用级错误日志监控。
- 统计错误类型(HTTP 500、数据库异常、权限错误等),并做预警。
-
自动化日志清理
:
- 采用 logrotate 定期清理过期日志,减少存储压力。
34. 你们公司日志多久清理一次?
- Nginx/Apache 访问日志:保留 30 天,过期自动清理。
- 服务器系统日志(syslog):保留 60-90 天,自动归档存储。
- 重要应用日志:长时间存储(1 年+),并定期备份到冷存储。
35. 你们公司运维部门有多少人?多少服务器?基本优化项目?
(可根据公司规模调整)
-
运维团队规模:10~20 人,包括系统运维、安全运维、数据库运维、SRE。
-
服务器数量:数百台,混合使用 物理服务器+云服务器。
-
基本优化项目
:
- 性能优化:Nginx 负载均衡、Redis 缓存优化、数据库索引优化。
- 自动化运维:使用 Ansible/SaltStack 进行批量管理,Kubernetes 容器编排。
- 安全防护:WAF 防火墙、DDoS 防护、漏洞扫描。
36. 你在上家公司针对防攻击、扩容、容灾等问题是怎么制定和优化解决方案的?
-
防攻击
:
- 部署 WAF(Web 应用防火墙),拦截 SQL 注入、XSS 攻击。
- 使用 Fail2ban 限制异常 IP 访问。
- 配置 DDoS 防护(CDN+流量清洗)。
-
扩容方案
:
- 采用 微服务架构,通过 Kubernetes 动态扩展实例。
- 结合 Redis/Memcached 缓存,减少数据库压力。
- 使用 Nginx+Consul 进行动态服务发现和负载均衡。
-
容灾策略
:
- 业务层面采用 主从+分片+读写分离 数据架构。
- 服务器跨机房部署,支持异地灾备,RTO<5 分钟。
37. 你们公司如何自动化代码上线?
-
采用
CI/CD(Jenkins/GitLab CI/Github Actions)
自动化部署流程:
- 代码提交:开发人员 push 代码到 Git 仓库。
- 自动构建:Jenkins/GitLab CI 触发构建,执行单元测试。
- 镜像发布:构建成功后,Docker 镜像推送到私有仓库。
- 自动部署:Kubernetes 通过 Helm 自动更新容器。
- 灰度发布:采用 Canary 发布,先在小部分用户测试,确保稳定后全量发布。
38. 你们公司都有哪些应用集群?
- Web 服务器集群(Nginx/Apache + Load Balancer)
- 数据库集群(MySQL 主从复制 + 读写分离)
- 缓存集群(Redis 哨兵模式 / Memcached)
- 消息队列集群(Kafka/RabbitMQ)
- Kubernetes 容器集群(微服务架构)
39. 你们公司用的是物理服务器还是云服务?
- 混合架构:
- 核心业务 运行在 物理服务器,确保高性能和数据安全。
- 弹性业务 部署在 云服务(阿里云、AWS),灵活扩展。
- 数据库 采用 云数据库(RDS)+ 物理机主库 的方式,兼顾稳定性与性能。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)