【面试准备】运维工程师(中间件/数据库)

面试目标:

在这里插入图片描述

岗位职责分析:

1、 负责系统日常维护巡检,包括数据库及服务器存储空间日常检查空间清理。
2、 复杂系统部署、调试,快速定位排查问题;
3、善于沟通,与客户单独沟通具体需求,并提出解决方案;

以下是对这个运维工程师职位描述主要工作内容的分析:

  1. 系统日常维护与巡检

    • 这部分工作主要是确保系统的稳定运行。包括定期检查数据库和服务器的存储空间,及时清理不必要的数据以释放空间,防止因存储空间不足导致系统故障。这需要对系统的存储使用情况有清晰的了解,并掌握有效的清理策略和工具。
    • 日常巡检还可能涉及检查系统的各项性能指标,如服务器的 CPU 使用率、内存使用率、网络带宽等,以及数据库的连接数、查询性能等,以便提前发现潜在问题并采取预防措施。
  2. 系统部署、调试与问题排查

    • 负责系统的部署工作,这需要熟悉系统的安装、配置流程,以及相关的环境依赖和参数设置。
    • 能够快速定位和排查问题是关键能力,当系统出现故障或异常时,需要运用各种技术手段,如查看系统日志、使用监控工具、进行性能测试等,迅速找出问题的根源,并采取有效的解决措施。这要求具备扎实的技术功底和丰富的故障处理经验。
  3. 客户沟通与需求解决

    • 能够与客户进行有效的沟通,理解客户对于系统的具体需求。这需要良好的沟通技巧和倾听能力,能够将技术术语转化为客户容易理解的语言,并准确获取客户的意图。
    • 根据客户需求提出合理的解决方案,这需要综合考虑技术可行性、成本效益和客户满意度等因素。同时,能够向客户清晰地解释方案的优势和可能的风险,以获得客户的认可和支持。

总体来说,这个职位既要求扎实的技术能力,包括系统维护、部署和问题排查等方面,也需要良好的沟通能力,以满足客户需求并提供优质的服务。

技能要求:

以下是对这个岗位技能要求的分析:

  1. 系统与网络相关技能

    • 熟悉 Linux 系统表明需要对 Linux 的命令行操作、文件系统管理、用户权限设置等方面有深入了解。

    • 熟练编写 Shell 脚本有助于实现系统管理任务的自动化,提高工作效率。

    • 了解 TCP/IP 和 HTTP 协议是排查网络问题的基础,能够对网络连接故障、数据包传输异常等进行诊断和解决。
      在网上搜罗几个系统与网络相关面试题:

        1. 在 Linux 系统中,可以使用以下命令查看当前系统的 CPU 使用率和内存使用情况:
            - `top`命令:可以实时显示系统的资源使用情况,包括 CPU 使用率、内存使用等。
            - `vmstat`命令:提供关于虚拟内存、进程、CPU 活动等的统计信息。
            - `free -h`命令:以人类可读的格式显示内存的使用情况。
      
        2. TCP 三次握手的过程如下:
            - 第一次握手:客户端向服务器发送一个带有 SYN 标志的数据包,表示请求建立连接。客户端进入 SYN_SENT 状态。
            - 第二次握手:服务器收到客户端的 SYN 数据包后,向客户端发送一个带有 SYN 和 ACK 标志的数据包,表示确认收到请求并同意建立连接。服务器进入 SYN_RCVD 状态。
           - 第三次握手:客户端收到服务器的 SYN + ACK 数据包后,向服务器发送一个带有 ACK 标志的数据包,表示确认收到服务器的回复。客户端和服务器进入 ESTABLISHED 状态,连接建立成功。
            每个步骤的作用:
            - 第一次握手:客户端向服务器发起连接请求,让服务器知道有客户端想要建立连接。
            - 第二次握手:服务器确认收到客户端的请求,并向客户端表明自己愿意建立连接,同时也让客户端知道服务器已经收到请求。
            - 第三次握手:客户端确认收到服务器的同意信息,确保双方都准备好进行数据传输。
      
        3. 遇到无法访问某个网站的网络连接故障,可以采取以下命令行工具进行排查:
            - `ping`命令:用于测试与目标主机的网络连通性。
            - `traceroute`命令:跟踪数据包从本地到目标主机所经过的路由路径。
            - `nslookup`命令:查询域名对应的 IP 地址,检查 DNS 解析是否正常。
            - `telnet`命令:测试与目标主机的特定端口的连接情况。
      
        4. 编写 Shell 脚本的经验示例:
            - 例如,编写一个自动备份重要文件的脚本,每天定时将指定目录下的文件备份到另一个位置,并删除一定天数前的旧备份。
            - 或者编写一个监控系统资源使用情况的脚本,当 CPU 使用率或内存使用率超过一定阈值时发送警报邮件。
      
        5. 在处理 HTTP 协议相关问题时的经历:
            - 比如遇到 404 错误码,可能是请求的页面不存在,需要检查 URL 是否正确或者服务器端的资源配置。
            - 对于 500 内部服务器错误,可能是服务器端代码出现异常,需要查看服务器日志进行排查。
            - 遇到 301/302 重定向错误,需要确认重定向的目标地址是否正确,以及是否符合预期的业务逻辑。
      
        6. 如何在 Linux 系统中设置定时任务来自动执行某个脚本或命令
        在 Linux 系统中设置定时任务可以使用 `crontab` 命令。
        编辑用户的 `crontab` 文件(使用 `crontab -e` 命令),按照特定的格式添加任务,
        例如:`* * * * * /path/to/script.sh` 表示每分钟执行一次指定的脚本。
        			`0 2 * * * /path/to/script.sh` 表示天凌晨两点执行一次指定的脚本。
        			从左到右分别表示:分钟(0 - 59)、小时(0 - 23)、日(1 - 31)、月(1 - 12)、星期(0 - 6,0 表示星期日)
      
        8. 当网络出现延迟较高的情况,可以从以下方面进行分析和解决:
            - 检查网络设备(如路由器、交换机)的负载和性能,是否存在拥塞。
            - 查看网络拓扑,是否存在环路或单点故障。
            - 分析网络流量,是否有某个应用或主机占用了大量带宽。
            - 检查网络连接的物理线路,是否存在损坏或干扰。
            - 排查服务器或客户端的网络配置是否正确,如 IP 地址、子网掩码、网关等。
      
        9. 查看系统的网络连接状态可以使用以下命令:
           - `netstat -an` 命令:显示所有的网络连接和端口监听情况。
            - `ss` 命令:提供更详细和高效的网络套接字信息。
      
        10. 对于一个新的 Linux 服务器,初始的网络配置包括:
            - 设置 IP 地址、子网掩码、网关和 DNS 服务器。
            - 启用或禁用网络接口。
           - 配置防火墙规则,开放必要的端口。
            - 可能需要设置静态路由或启用动态路由协议(如 OSPF、BGP 等),如果服务器处于复杂的网络环境中。
      
        11. 监控 Linux 系统的网络流量可以使用以下工具和方法:
            - `iftop` 工具:实时显示网络接口的流量情况。
            - `nethogs` 工具:按进程查看网络流量使用情况。
            - 使用 `iptables` 或 `firewalld` 结合日志功能,记录网络流量的相关信息。
            - 利用系统的性能监控工具(如 `sar` )来获取网络流量的统计数据。
      
  2. 中间件相关技能

    • 熟练使用 Nginx、Tomcat、Apisix、Keepalive 等中间件进行部署和实现负载均衡,意味着要掌握这些中间件的安装配置、性能调优以及根据业务需求进行合理的资源分配。

    • 具备日志定位及排查能力可以帮助快速发现系统运行中的问题,通过分析日志中的信息找到故障的线索。
      整理一些面试问题如下:
      以下是上述中间件相关面试问题的参考答案:

        1. 在使用 Nginx 进行反向代理配置时,处理多个后端服务器的负载均衡可以通过以下几种方式:
            - 使用轮询策略,将请求依次分配到各个后端服务器。
            - 基于权重,为性能较好的服务器分配更高的权重,以接收更多请求。
            - 根据 IP 哈希,确保来自同一 IP 的请求始终发送到同一台后端服务器。
      
        2. 在 Tomcat 中配置虚拟主机的步骤如下:
            - 在 `server.xml` 文件中,在 `<Engine>` 标签内添加 `<Host>` 标签。
            - 为 `<Host>` 标签设置 `name` 属性指定虚拟主机的域名。
            - 设置 `appBase` 属性指定应用的部署目录。
      
        3. 当 Apisix 出现性能瓶颈时,可以采取以下措施来优化性能:
            - 调整配置参数,如线程数、缓冲区大小等。
            - 优化路由规则,减少不必要的匹配和计算。
            - 启用缓存策略,减少重复计算和数据获取。
            - 检查插件的使用,去除不必要或性能消耗大的插件。
      
        4. 在 Keepalive 中设置健康检查机制,确保后端服务器的可用性,可以这样做:
            - 通过配置 `HTTP_GET` 或 `TCP_CHECK` 等方式指定检查的 URL 或端口。
            - 设置检查的间隔时间和超时时间。
            - 根据检查结果,自动将不健康的服务器从负载均衡池中移除。
      
        5. 在生产环境中部署 Nginx 时遇到的问题及解决方法的示例:
            - 问题:Nginx 出现高并发下的性能下降。
            解决方法:优化 Nginx 的配置参数,如增加工作进程数、调整连接超时时间等。
            - 问题:SSL 证书配置错误导致无法建立安全连接。
            解决方法:仔细检查证书的安装和配置,确保证书链完整、密钥匹配。
      
        6. 在 Tomcat 中,调整线程池参数以提高并发处理能力的方法:
            - 增加 `maxThreads` 值,即最大并发处理线程数。
            - 调整 `minSpareThreads` 和 `maxSpareThreads` ,以优化空闲线程的数量。
      
        7. 对于 Redis 缓存穿透问题,可以采取以下解决方案:
            - 对不存在的 key 进行缓存空值,但设置较短的过期时间。
           - 使用布隆过滤器,在查询缓存前先进行过滤,避免对不存在的 key 进行数据库查询。
      
        8. Minio 存储桶的概念是用于存储对象的逻辑容器。创建和管理它们的方法:
            - 通过 Minio 的 API 或控制台创建存储桶。
            - 可以设置存储桶的访问权限,如公开读、私有等。
            - 对存储桶进行删除、重命名等操作。
      
        9. 监控 PostgreSQL 数据库的性能指标,如查询执行时间、锁等待等,可以通过以下方式:
            - 使用 `pg_stat_statements` 扩展来获取查询的执行统计信息,包括执行时间。
            - 查看系统视图 `pg_locks` 了解锁等待情况。
            - 利用数据库自带的监控工具如 `pg_stat_activity` 查看当前活动的会话和其执行的查询。
      
        10. 假设需要将一个现有的应用从 Tomcat 迁移到 Apisix,会考虑以下因素并采取以下步骤:
            考虑因素:
            - 应用的架构和功能是否与 Apisix 兼容。
            - 流量模式和负载需求。
            - 配置和管理方式的差异。
            步骤:
            - 分析应用在 Tomcat 中的配置和部署方式。
            - 按照 Apisix 的规范重新配置路由、插件等。
            - 进行充分的测试,包括功能测试、性能测试和压力测试。
            - 逐步切换流量,进行灰度发布和监控。 
      
  3. 数据库与存储相关技能

    • 熟练掌握 MySQL、Redis、Minio、PostgreSQL 等中间件的操作、部署及优化维护,需要了解这些数据库和存储系统的架构、数据存储方式、查询优化、备份恢复等方面的知识和技能。

    • 能够根据业务的负载和数据量进行合理的优化,以保证系统的性能和稳定性。
      整理一些面试问题如下:
      以下是几个数据库与存储相关技能的面试问题及参考答案:

        1. 在 MySQL 中优化查询语句性能的方法包括:
            - 确保表结构设计合理,建立适当的索引。
            - 避免在查询中使用不必要的函数和子查询。
            - 对大表进行分页查询,避免一次性获取大量数据。
            - 分析查询计划,根据实际情况调整优化。
      
        2. Redis 数据持久化的两种方式及其优缺点:
            - RDB(Redis Database):优点是恢复数据速度快,适合大规模数据的恢复;缺点是可能会丢失数据,因为它是定时保存。
            - AOF(Append Only File):优点是数据更安全,最多丢失一秒的数据;缺点是文件较大,恢复速度相对较慢。
      
        3. 当 Minio 存储中的数据丢失时,可以采取以下措施进行恢复:
           - 检查是否有可用的备份,并从备份中恢复数据。
           - 如果启用了纠删码,利用剩余的有效数据块和校验块来恢复丢失的数据。
      
        4. 在 PostgreSQL 中创建索引来提高查询效率的方法:
            - 使用 `CREATE INDEX` 语句,指定要索引的列。
            - 对于经常用于查询、连接、排序的列创建索引。
      
        5. 处理 MySQL 数据库死锁的经历及解决方法:
            - 经历:在一个高并发的业务场景中,多个事务同时操作相同的数据资源,导致死锁发生。
            - 解决方法:首先通过数据库的死锁检测机制获取死锁信息,然后选择其中一个事务进行回滚,释放其持有的锁资源,以解除死锁状态。
      
        6. 在 Redis 中实现分布式锁的方法:
           - 使用 `SETNX` 命令结合 `EXPIRE` 命令来设置一个带有超时时间的键,获取锁成功后在业务处理完成后删除键来释放锁。
      
        7. 对于高并发读操作场景优化 Minio 性能的方法:
          - 增加缓存层,减少对存储的直接访问。
          - 优化网络配置,提高数据传输速度。
          - 采用分布式 Minio 部署,分担负载。
      
        8. 监控 MySQL 数据库主从复制状态的方法:
            - 使用 `SHOW SLAVE STATUS` 命令查看复制的相关状态信息。
            - 通过监控工具如 `Percona Monitoring and Management` 来实时监测主从复制的健康状况。
      
        9. PostgreSQL 中的事务隔离级别及其应用场景:
           - 读未提交(Read Uncommitted):最低隔离级别,可能会出现脏读、不可重复读和幻读,一般不使用。
           - 读已提交(Read Committed):默认级别,避免脏读,但可能出现不可重复读和幻读,适用于大多数一般应用。
          - 可重复读(Repeatable Read):避免脏读和不可重复读,但可能出现幻读,适用于对数据一致性要求较高的场景。
          - 串行化(Serializable):最高隔离级别,避免脏读、不可重复读和幻读,适用于对数据一致性要求非常严格的场景,如金融交易。
      
        10. 假设 Redis 内存使用达到上限的解决策略:
            - 清理过期键和不常使用的键。
            - 采用数据压缩技术。
           - 增加 Redis 实例或扩展内存。
            - 将部分数据迁移到其他存储介质。
      
  4. 沟通技能

    • 较强的沟通技巧对于理解客户需求、与团队成员协作以及向非技术人员解释技术问题都非常重要。能够清晰、准确地表达自己的想法,倾听他人的意见,并有效地协调各方资源以解决问题。

可恶,这好多东西我都不会,四处搜集信息写在这儿也记不住,咋办哦,等面试路上用手机端csdn临阵磨枪吧,重点背一背中间件优化和数据库优化吧,可以和面试官多扯一扯,而且也不用太深入去说具体技术;还有日志相关的问题排查,就这样吧。

  • 41
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值