55个常见的DevOps面试问题和答案[2023]
DevOps(开发与运维)越来越成为构建和部署应用程序的流行方式,这导致了对DevOps专业人员的需求增加。
本文将介绍一些最常见的DevOps面试问题及其答案。使用这些问题作为核心学习内容,可以提高你被雇佣的机会,或者如果你是一名招聘人员,它们可以帮助你进行招聘过程。
常见的DevOps面试问题和答案
什么是DevOps?
DevOps是开发和运维的简称。这种软件工程实践将开发和运维团队汇集在一起,自动化项目的每个阶段。DevOps团队专注于协作、沟通和整合。
DevOps是一种旨在改进软件开发生命周期中的工作的方法。DevOps过程被描绘为一个无限循环,包括规划、编码、构建、测试、发布、部署、运营和优化等阶段。
DevOps在规划、开发、交付和运营等阶段影响应用程序的生命周期。每个阶段都依赖于其他阶段,这些阶段不是特定于某个角色的。在真正的DevOps文化中,每个角色都在某种程度上参与到每个阶段中。
DevOps方法论中有哪些不同阶段?
- 持续开发。 这是规划和编码阶段。
- 持续集成。 这是开发团队集成不同组件并确保代码不会出错的阶段。
- 持续测试。 这是预定和自动化测试的阶段。
- 持续部署。 这个阶段确保开发过程无缝,不会影响整个应用程序的性能。
- 持续监控。 该阶段确保应用程序的整体效力。
- 持续反馈。 根据最终用户报告的问题和性能进行分析。
- 持续运营。 允许开发人员构建更好的产品版本并快速发现问题。
DevOps的好处有哪些?
采用DevOps方法论的团队往往能更快地完成项目。这样可以避免沟通错误,促进快速实施改进和其他必要的变更。DevOps方法鼓励开发和运维团队之间更大程度的合作,使他们的目标更加一致。以下是一些好处的总结:
- 改进沟通
- 团队协作和凝聚力
- 改善合作
- 更快交付质量产品
- 减少复杂性和快速解决问题
- 更大的可扩展性和灵活性添加新代码
- 更稳定的运行环境
- 更多自动化
- 降低成本和资源利用
- 通过集成和自动化工具加速部署
一些DevOps工具的名称
- 持续集成工具,如Jenkins
- Version Control等版本控制工具
- 构建工具,如Maven
- Configuration Management Tools等配置管理工具
- 容器平台,如Docker
一些DevOps关键绩效指标的名称
- 部署频率
- 变更量
- 部署时间
- 失败部署率
- 发现时间
- 缺陷逃逸率
什么是CI/CD,它有哪些好处?
持续集成(CI)
CI结合了工具和实践,使高质量、快速交付软件变得更加容易。这样可以消除瓶颈,并避免在发布阶段遇到技术问题。
持续交付(CD)
这种做法可以自动化代码更改的交付,确保代码能够快速补充到生产环境中,并确保应用程序的正确功能。
持续部署(CD)
与持续交付不同,这种做法的目标是在部署软件到生产环境时不需要人工干预。发布新的或更改的代码到生产环境是自动化的。
CI/CD 贯穿整个应用程序生命周期的实施DevOps。这些做法通过简化和自动化不同阶段的软件开发过程来提高生产力。
什么是微服务架构,与传统架构有何不同?
编写软件的传统方法是单体架构。这意味着一个应用程序的所有功能被集中在一个单一的代码块中。在出现错误或需要更新时,会分析控制整个产品的代码。
这会导致停止甚至崩溃,并对代码的保护构成巨大危险。对于客户来说,这意味着损失和麻烦。
在微服务架构中,一个应用程序的功能表示为一个独立开发和集成的服务。这些组件是独立的,但协同工作以执行相关的任务。
通过这种方式,每个独立的服务在不干扰其他服务的情况下运行,这也适用于故障情况。如果一个功能出现故障,可以进行调整而不会影响整个应用程序的运行。
微服务的出现使得DevOps变得更加agile和高效,加速端到端的开发并使应用程序更具可伸缩性。
DevOps与敏捷的区别
DevOps是一种鼓励所有参与软件开发和维护的团队成员进行协作的文化。
敏捷是一种开发方法论,旨在使团队更具生产力,并根据不断变化的需求进行发布。
什么是基础设施即代码?
基础设施即代码是一种定义计算和网络基础设施的方法,使用源代码管理技术,并像任何软件系统一样对待。
这些代码可以保留在源代码控制中,以便进行审计和可重复构建,符合测试实践和持续交付的完整纪律。
Infrastructure as code基于以下几项实践:
- 使用定义文件
- 自文档化的系统和流程
- 对所有元素进行版本控制
- 持续测试系统和流程
- 进行小而频繁的更改
- 持续保持服务的可用性
AWS在DevOps中的角色是什么?
AWS提供了一组灵活的服务,帮助企业可靠、快速地开发应用程序。AWS服务简化了代码部署、提供和简化基础设施、自动化软件发布流程以及监控基础设施性能。
SSH的用途是什么?
SSH(Secure Shell)是一种允许不同计算机之间建立安全连接的协议。SSH具有不同的用途,例如提供强大的身份验证、强大的加密、保持连接完整性、强大的连接和安全性。
什么是DevOps流水线?
DevOps流水线是在发布新软件之前经历的几个步骤的过程。它可以应用于项目的所有阶段,从集成和测试到交付和部署。一般而言,它经过以下阶段和团队:
- 产品愿景:定义产品的特性;
- 开发团队:迭代和增量开发;
- 运营领域:实施和维护稳定的环境;
- 监控和反馈:力求为客户生成价值并使用产品。
配置管理是什么?
这是一个系统工程过程,旨在在系统/产品的整个生命周期中建立和维护系统/产品的性能、功能和物理属性的一致性。
什么是持续测试?
这是在开发过程中预定和自动化测试应用程序。
什么是Git?
这是一个开源免费的源代码管理工具。该工具旨在处理小型和大型项目。
提到一些基本的Git命令
- Git clone
git clone
- Git branch
git branch
- Git checkout
git checkout
- Git add
git add
- Git commit
git commit -m "commit message"
- Git push
git push
- Git pull
git pull
解释Git merge和Git rebase之间的区别
Git merge命令允许开发人员合并不同的Git分支,同时保留各自分支的提交日志。
Git rebase命令允许开发人员将一个分支的更改集成到另一个分支中,完成后日志将被改变。
解释Git fetch和Git pull之间的区别
Git fetch告诉Git从原始位置检索/检查最新的元数据。然而,它不进行任何文件传输,仅仅是检查操作。
Git pull从远程仓库检查并获取更改到本地项目。
什么是合并冲突?
当您将两个具有竞争提交的分支合并时,会发生合并冲突。合并冲突通常发生在不同的开发人员更改相同的代码行或文件时。
什么是版本控制,有哪些不同类型?
版本控制(源代码控制)是跟踪和管理软件代码的变化过程。
这些是不同类型的版本控制:
- 集中式 – 在服务器上有一个“中央”源代码副本,并且所有更改都提交到“中央”副本。Subversion(SVN)和Perforce是集中式版本控制的示例。
- 分布式(DVCS) – 没有中央服务器来存储项目的所有文件。Git和Mercurial是分布式版本控制的示例。
使用版本控制的好处有哪些?
- 帮助开发人员保持效率和敏捷性
- 提供对项目/文件的每个更改的完整日志
- 提高可追溯性
- 帮助管理合并和分支
- 促进协作
什么是分支?
分支是指创建主存储库的单独/新版本。分支允许您在不影响主分支的情况下工作在项目的各个部分。
分支策略有哪些?
分支策略是软件开发团队在编写、合并和部署代码时采用的方法论。这种方法确保在将错误和错误合并到主项目之前,在分支阶段修复它们。
解释DevOps中使用的几种测试类型
单元测试
它们单独测试特定的代码片段。单元测试不能连接到数据库,使用文件系统,与外部系统通信,或与系统组件交互。它们可以快速运行,并且如果更改破坏了现有功能,您可以快速获得反馈。
组件测试
他们测试大型功能组合,以便能够识别此类问题。它们通常较慢,需要更复杂的配置和更多的I/O连接到数据库、文件系统或其他系统。
部署测试
此类测试验证部署是否成功,换句话说,验证您的应用程序是否正确安装、配置、可以访问所需的任何服务并做出响应。
除此之外,还有利用性和可用性测试。要了解更多有关测试的信息,请查看关于的文章。
什么是自动化测试,以及如何在DevOps中进行自动化测试?
自动化测试是一种自动审查和验证代码的技术。自动化测试是为了检查功能(业务逻辑)、代码风格和用户体验是否符合质量标准。
自动化测试使用工具如Selenium和进行。
什么是构建自动化,有哪些构建自动化工具?
构建自动化工具指定软件应该如何构建(需要执行哪些步骤以及顺序)以及需要哪些依赖关系(构建成功需要哪些其他软件)。
一些工具更适用于特定编程语言的项目,例如Maven和Apache的Ant,虽然这些技术可以用于其他语言,但主要用于Java项目。其他工具,如Hudson或Jenkins,则可以更广泛地用于各种项目。
什么是Jenkinsfile?
Jenkinsfile是一个包含Jenkinsfile定义的文本文件,将其存入源代码控制存储库。它的一些用途包括:为流水线提供审计跟踪,允许对流水线进行代码审查和迭代,并在流水线中提供单一的真实来源。
解释Jenkins的架构
Jenkins具有主-从架构。这意味着有许多“从属”为一个“主”工作。Jenkins分布式构建可以在不同环境中运行相同的测试,并在主节点上收集和合并结果以进行监视。
Jenkins的顶级插件有哪些?
- Jenkins的蓝海插件
- Jenkins的邮件插件
- Jenkins的Git插件
- Jenkins的插件
- Jenkins的Docker插件
- Jenkins的Maven集成插件
- Jenkins的Kubernetes插件
- Jenkins的SonarQube插件
- Jenkins的Amazon EC2插件
什么是Selenium IDE?
Selenium IDE是一种记录浏览器交互的测试用例的工具。您可以设置断点,在Selenium集成开发环境中出现错误时检查和暂停变量。
Selenium的不同组件有哪些?
- Selenium IDE
- Selenium RC
- Selenium Grid
Selenium的不同测试类型有哪些?
- 端到端测试
- 系统测试
- 性能测试
- 兼容性测试
Selenium的不同异常有哪些?
- ElementNotSelectableException
- NoAlertPresentException
- InvalidSelectorException
- NoSuchSessionException
- StaleElementReferenceException
- NoSuchWindowException
- NoSuchFrameException
- NoSuchElementException
- TimeoutException
- ElementNotVisibleException
driver.close()和driver.quit()在WebDriver中有什么区别?
driver.close()
命令关闭当前焦点的浏览器窗口。如果只有一个浏览器打开,则关闭整个浏览器会话。
driver.quit()
命令关闭整个浏览器会话,包括浏览器弹出窗口、选项卡和窗口。
什么是Dockerfile?
Nagios uses a combination of monitoring tools, plugins, and services to collect data about the various components of the IT infrastructure. It can monitor things like network services, host resources, system metrics, and application performance.
When an issue or problem is detected, Nagios can send notifications to system administrators via email, SMS, or other means. It can also perform automated actions, such as restarting services or running scripts, to resolve the issue.
Nagios provides a web interface where administrators can view the current status of their infrastructure, configure monitoring settings, and access reports and graphs of historical data.
Overall, Nagios helps organizations proactively monitor their IT systems and ensure the availability, performance, and reliability of their business processes.
- 监控。IT员工配置Nagios以监控网络协议、系统指标、应用程序、网络基础设施、服务和服务器。
- 警报。当关键组件发生故障时,Nagios会发送警报。警报可以通过短信、自定义代码或电子邮件发送。
- 响应。IT团队会确认警报并采取行动。
- 报告。生成提供历史通知、故障、警报响应和事件的报告,以供以后查看。
- 维护。计划维护时间防止在维护期间发送警报。
列举一些Nagios中的插件
- 官方Nagios插件 – 由官方团队开发和维护
- 自定义插件 – 由个人/企业编写以满足个人需求
- 社区插件 – 由Nagios社区成员开发
解释Nagios中的虚拟化
Nagios可以监视各种虚拟化平台上的各种指标。Nagios可以在诸如Xen、Amazon EC2、VMware和Microsoft Virtual PC等虚拟化平台上运行。
Nagios如何帮助监控?
Nagios使用像NRPE、check_mk或SNMP这样的代理程序收集服务器上的统计信息,并在指标超过预定义阈值时发送警报。
Nagios用于监控的端口号是多少?
SNMP,端口号161和162
什么是Nagios网络分析器?
Nagios网络分析器是一款sflow数据分析软件,允许用户在干扰业务运作之前主动解决异常行为、故障和安全威胁。这款商业级工具提供了对网络流量和IT基础设施的深入洞察。
影响Nagios中继承和递归的变量
- Name – 可以继承对象变量/属性的模板名称。
- Use – 指定要从中继承变量/属性的模板对象的名称。
- Register 指示是否应将模板对象的名称“注册”到Nagios中。
Puppet是什么?
Puppet是一种用于软件配置和部署的开源工具。
Puppet清单是什么?
Puppet清单是一个包含Puppet配置语言的文件,用于描述资源应如何配置。
Puppet代码是什么?
Puppet代码是一种声明性代码,意味着您使用系统的期望状态来描述它,而不是描述达到该状态所需的步骤。
Chef是什么?
Chef是一种配置管理工具,可将基础架构转换为代码。该工具专注于编写代码,而不是手动过程。
Chef如何工作?
Chef的工作从系统管理员或开发人员定义要自动化的任务开始。然后,使用各种工具(如Test Kitchen、ChefSpec和Foodcritic)捕获和测试烹饪书和菜谱(用特定领域语言编写的小程序)。如果烹饪书和菜谱按预期工作,它们将使用knife和chef命令行工具部署到Chef服务器上。Chef部署过程包括Chef服务器、工作站和节点。您可以从超过3000个烹饪书模板中选择,并根据需要自定义它们。然后,Chef将处理其余的工作。
告诉我们一下您管理DevOps项目的经验
DevOps技能不仅仅涉及技术知识,还需要管理技能,这些技能通常在经理、项目主管和项目经理中找到。
了解如何管理和支持变革,提供一个便利的通道,以便将新版本的代码转移到操作方面,评估和监控各种平台和工具以衡量性能,并分析和共享结果以改进未来的交付等是至关重要的。
以方法论的方式来解决复杂问题,并解释您在解决基础设施工作的过程中的经验。您打算如何改进基础设施的运行?您计划如何与前台、中台和后台开发人员合作?您掌握哪些监控工具?此外,考虑分享您在团队内解决冲突的经验。
总结
根据Glassdoor的数据,美国的DevOps工程师的平均薪资为每年104281美元。尽管DevOps是一个新的职业,但我们现在可以看到更多公司在招聘这个职位,并发布各种课程来装备专业人士具备必要的技能。以上是您在DevOps面试中可能会遇到的一些问题。
您还可以探索一些好的在线课程来learn DevOps。
资料来源:Titus Kamunya。