DevOps常见面试题笔记整理:问题和答案解析

2021年12月12日20:01:51 发表评论 1,990 次浏览

什么是 DevOps?

DevOps 代表开发和运营。它是一种软件工程实践,专注于将开发团队和运营团队聚集在一起,以实现项目在每个阶段的自动化。这种方法有助于轻松实现项目服务管理的自动化,以帮助实现运营级别的目标并提高对生产环境中使用的技术堆栈的理解。

这种实践方式与敏捷方法论有关,主要侧重于团队沟通、资源管理和团队合作。遵循这种结构的主要好处是开发速度和解决生产环境级别的问题、应用程序的稳定性以及背后涉及的创新。

开发运营工具

DevOps 是一种旨在提高产品开发的生产力和质量的方法。该方法中使用的主要工具是:

  • 版本控制系统工具。例如:git。
  • 持续集成工具。例如:Jenkins
  • 持续测试工具。例如:Selenium
  • 配置管理和部署工具。例如:Puppet、Chef、Ansible
  • 持续监控工具。例如:Nagios
  • 容器化工具。例如:Docker

据报道,采用这种方法的组织在一天内完成了几乎数千次部署,从而提高了可靠性、稳定性和安全性,并提高了客户满意度。自信地完成你的下一次技术面试!参加免费模拟面试,获得即时的⚡️反馈和推荐💡参加免费模拟面试

面向新生的DevOps常见面试题有哪些

1. 谁是 DevOps 工程师?

DevOps面试题解析:一个DevOps的工程师是谁与这两款软件开发人员和IT人员的工作,以确保顺利代码版本的人。他们通常是对部署和运营领域产生兴趣的开发人员或对编码产生热情以转向开发方面的系统管理员。

简而言之,DevOps 工程师是了解 SDLC(软件开发生命周期)和用于开发 CI/CD 管道的自动化工具的人。

2. DevOps常见面试题和答案合集:为什么 DevOps 成名?

这些天来,产品的市场窗口急剧减少。我们几乎每天都会看到新产品。这为消费者提供了无数的选择,但代价是市场竞争激烈。组织无法承受在差距之后发布大功能。他们倾向于定期向客户发布小功能,这样他们的产品就不会在竞争的海洋中迷失。

客户满意现在是组织的座右铭,也已成为任何产品成功的目标。为了实现这一点,企业需要做到以下几点:

  • 频繁的功能部署
  • 减少错误修复之间的时间
  • 降低发布失败率
  • 在发布失败的情况下更快的恢复时间。
  • 为了实现以上几点,从而实现无缝的产品交付,DevOps 文化充当了一个非常有用的工具。由于这些优势,亚马逊和谷歌等跨国公司采用了这种方法,从而提高了业绩。

3. SSH 有什么用?

SSH 代表 Secure Shell,是一种管理协议,允许用户通过 Internet 访问和控制远程服务器以使用命令行工作。

SSH 是先前已知的 Telnet 的安全加密版本,该版本未加密且不安全。这确保了与远程服务器的通信以加密形式进行。

SSH 还具有用于远程用户身份验证、客户端和主机之间的输入通信以及将输出发送回客户端的机制。

4. 什么是配置管理?

配置管理 (CM) 基本上是一种系统地处理更改的实践,以使系统在一段时间内不会失去其完整性。这涉及某些政策、技术、程序和工具,用于评估变更提案、管理它们、跟踪它们的进度以及为其维护适当的文档。

CM 有助于为鉴赏的设计和开发提供管理和技术指导。

下图简要介绍了 CM 的全部内容:

5. 在 DevOps 中进行配置管理的重要性是什么?

配置管理 (CM) 可帮助团队将耗时且乏味的任务自动化,从而提高组织的绩效和敏捷性。

它还有助于通过在项目的各个阶段/发布期间采用设计精简、广泛的文档、控制和变更实施等手段来实现一致性和改进产品开发过程。

6. CAMS 在 DevOps 中代表什么?

CAMS 代表文化、自动化、测量和共享。它代表了 DevOps 的核心行为。

7. 什么是持续集成 (CI)?

持续集成 (CI) 是一种软件开发实践,可确保开发人员在完成该功能的工作后将其代码集成到共享存储库中。每个集成都通过自动构建过程进行验证,该过程允许团队在很早的阶段检测其代码中的问题,而不是在部署后发现它们。

基于以上流程,我们可以对CI流程有一个简要的概述。

  • 开发人员定期将代码签出到他们的本地工作区并处理分配给他们的功能。
  • 一旦他们完成工作,代码就会被提交并推送到远程共享存储库,该存储库通过使用有效的版本控制工具(如 git)进行处理。
  • CI 服务器会跟踪对共享存储库所做的更改,并在检测到更改后立即提取更改。
  • 然后 CI 服务器触发代码的构建并运行单元和集成测试用例(如果已设置)。
  • 团队被告知构建结果。如果构建失败,团队必须尽早解决问题,然后重复该过程。

8. 为什么需要持续集成?

通过将持续集成用于开发和测试,我们发现软件质量得到了提高,交付软件功能所需的时间也大大减少了。

这也允许开发团队在初始阶段检测和修复错误,因为对共享存储库的每次提交都是自动构建的,并针对单元和集成测试用例运行。

9. 什么是连续测试 (CT)?

DevOps常见面试题有哪些?持续测试 (CT) 是 DevOps 的那个阶段,它涉及运行自动化测试用例的过程,作为自动化软件交付管道的一部分,其唯一目的是获得关于与自动化构建相关的业务风险的质量和验证的即时反馈开发人员开发的代码。

使用这个阶段将帮助团队持续测试每个构建(一旦开发的代码被推送),从而让开发团队有机会获得关于他们工作的即时反馈,并确保这些问题不会在后期阶段出现SDLC 循环。

由于缺乏手动干预步骤来重建项目并在每次进行更改时运行自动化测试用例,这样做将大大加快开发人员开发项目所遵循的工作流程。

10. 三个重要的 DevOps KPI 是什么?

DevOps 的几个 KPI 如下:

  • 减少从故障中恢复所需的平均时间。
  • 增加部署发生的部署频率。
  • 降低失败部署的百分比。

中级面试题

11. 解释 DevOps 方法的不同阶段。

DevOps面试题解析:DevOps 主要有 6 个阶段,它们是:

规划:

这是 DevOps 生命周期的第一阶段,涉及对项目的透彻理解以最终开发最佳产品。如果正确完成,此阶段会提供开发和运营阶段所需的各种输入。该阶段还有助于组织明确项目开发和管理过程。

Google Apps、Asana、Microsoft 团队等工具用于此目的。

发展:

规划阶段之后是开发阶段,该阶段通过开发系统基础设施、通过编写代码开发功能、然后定义测试用例和自动化过程来构建项目。开发人员将他们的代码存储在称为远程存储库的代码管理器中,该存储库允许查看、修改和版本控制代码,从而有助于团队协作。

使用 git 等工具、eclipse、IntelliJ 等 IDE 以及 Node、Java 等技术堆栈。

持续集成(CI):

此阶段允许代码验证、构建和测试的自动化。这可确保正确进行更改而不会出现开发环境错误,并且还允许在初始阶段识别错误。

这里使用了 Jenkins、circleCI 等工具。

部署:

DevOps 通过使用工具和脚本来帮助部署自动化过程,其最终目标是通过功能激活实现过程自动化。在这里,云服务可以作为一种力量,帮助从有限的基础设施管理升级到具有无限资源潜力的成本优化管理。

使用 Microsoft Azure、Amazon Web Services、Heroku 等工具。

操作:

由于基础设施的动态变化,这个阶段通常发生在产品/软件的整个生命周期中。这为团队提供了提高产品可用性、可扩展性和有效转换的机会。

这个阶段常用的工具有 Loggly、BlueJeans、Appdynamics 等。

监控:

监控是 DevOps 方法的一个永久性阶段。此阶段用于监控和分析信息以了解软件应用程序的状态。

常用工具如 Nagios、Splunk 等。
 

12. DevOps 与敏捷方法有什么不同?

DevOps 是一种实践或文化,它允许开发团队和运营团队协作以实现成功的产品开发。这涉及利用诸如持续开发、集成、测试、部署和监控 SDLC 周期之类的实践。

DevOps 试图缩小开发人员和运营团队之间的差距,以有效地发布产品。

敏捷只不过是一种软件开发方法,它通过反馈的方式让客户参与进来,专注于软件功能的增量、迭代和快速发布。这种方法消除了客户和开发人员的需求理解之间的差距。

13. 持续部署和持续交付的区别?

下面给出了持续部署和持续交付之间的主要区别:

持续部署持续交付
部署到生产环境是完全自动化的,不需要人工/人工干预。在此过程中,需要在经理的批准下进行一定量的手动干预才能部署到生产环境。
在这里,应用程序按照自动指令集运行,不需要批准。在这里,应用程序的工作取决于团队的决定。

14. 你对 DevOps 的反模式有什么看法?

模式是最常被大量实体遵循的东西。如果一种模式被一个组织采用,只是因为其他人在没有衡量组织的要求的情况下遵循它,那么它就成为一种反模式。同样,围绕 DevOps 存在多种可能导致反模式的神话,它们是:

  • DevOps 是一个过程,而不是一种文化。
  • DevOps 就是敏捷。
  • 应该有一个单独的 DevOps 组。
  • DevOps 解决了所有问题。
  • DevOps 等同于运行生产环境的开发人员。
  • DevOps 遵循开发驱动的管理
  • DevOps 不太关注开发。
  • 由于我们是一个独特的组织,我们不随波逐流,因此我们不会实施 DevOps。
  • 我们没有合适的人员,因此我们无法实施 DevOps 文化。

15. 你能告诉我一些关于 Memcached 的事情吗?

Memcached 是一个开源、免费的内存对象缓存系统,具有高性能、分布式和通用性。它主要用于通过减少数据库负载来加速动态 Web 应用程序。

Memcached 可用于以下情况:

  • 在 Facebook 等社交网络域中缓存配置文件。
  • 内容聚合域中的网页缓存。
  • 广告定位域中的配置文件跟踪。
  • 电子商务、游戏和娱乐领域的会话缓存。
  • 基于位置的服务领域中的数据库查询优化和扩展。

Memcached 的好处:

  • 使用 Memcached 通过减少对数据库的命中和减少 I/O 访问来加速应用程序进程。
  • 它有助于确定更频繁地遵循哪些步骤,并有助于决定要缓存的内容。

使用 Memcached 的一些缺点是:

  • 如果发生故障,数据将丢失,因为它既不是持久数据存储也不是数据库。
  • 它不是特定于应用程序的缓存。
  • 无法缓存大对象。

16. 版本控制系统中使用的各种分支策略是什么?

DevOps常见面试题有哪些?分支是 git 等版本控制系统中一个非常重要的概念,它有助于团队协作。一些最常用的分支类型是:

特征分支

  • 这种分支类型可确保在分支中维护项目的特定功能。
  • 一旦功能完全验证,分支就会合并到主分支中。

任务分支

  • 在这里,每个任务都维护在自己的分支中,任务键是分支名称。
  • 将分支名称命名为任务名称可以很容易地识别哪个任务覆盖在哪个分支中。

发布分支

  • 一旦完成了一组用于发布的功能,就完成了这种类型的分支,它们可以被克隆到一个称为发布分支的分支中。任何其他功能都不会添加到此分支。
  • 在发布分支中仅完成错误修复、文档和与发布相关的活动。
  • 一旦一切准备就绪,发布就会合并到主分支中,并用发布版本号进行标记。
  • 这些更改还需要推送到开发分支,该分支会随着新功能的开发而进展。

遵循的分支策略因公司而异,具体取决于他们的要求和策略。

17. 你能否列出某些用于衡量 DevOps 成功与否的 KPI?

KPI 代表关键绩效指标。用于衡量 DevOps 成功与否的一些流行 KPI 是:

  • 应用程序使用情况、性能和流量
  • 自动化测试用例通过百分比。
  • 应用程序可用性
  • 更改卷请求
  • 客户票
  • 成功部署频率和时间
  • 错误/失败率
  • 失败的部署
  • 检测时间 (MTTD)
  • 恢复时间 (MTTR)

18. DevOps常见面试题和答案合集:DevOps 中的 CBD 是什么?

CBD 代表基于组件的开发。这是进行产品开发的一种独特方式。在这里,开发人员不断寻找现有的定义明确、经过测试和验证的代码组件,从而减轻开发人员从头开始开发的负担。

19. 什么是弹性测试?

弹性测试是一个软件过程,用于测试应用程序在不受控制和混乱的情况下的行为。它还确保在遇到故障后不会丢失数据和功能。

20. 你能区分持续测试和自动化测试吗?

DevOps面试题解析:持续测试和自动化测试的区别如下:

持续测试自动化测试
这是执行所有自动化测试用例的过程,并作为交付过程的一部分完成。这是一个通过帮助开发人员创建无需人工干预即可多次运行的测试用例来取代手动测试的过程。
此过程侧重于与尽早发布软件相关的业务风险。此过程通过一组通过/失败点作为参考,帮助开发人员了解他们开发的功能是否没有错误。

21. 你能谈谈 DevOps 管道吗?

一般来说,管道是一组由软件工程团队定义并遵循的自动化任务/流程。DevOps 管道是一种管道,它允许 DevOps 工程师和软件开发人员以轻松的方式高效可靠地编译、构建和部署软件代码到生产环境。

下图显示了用于部署的有效 DevOps 管道的示例。

流程如下:

  • 开发人员致力于完成一项功能。
  • 开发人员将他的代码部署到测试环境中。
  • 测试人员致力于验证该功能。业务团队也可以进行干预并提供反馈。
  • 开发人员以持续协作的方式处理测试和业务反馈。
  • 然后将代码发布到生产中并再次验证。

22. 告诉我有关 DevOps 中 Ansible 工作的一些信息

它是一种 DevOps 开源自动化工具,有助于以更快的方式实现应用程序开发和部署过程的现代化。由于理解、使用和采用它的简单性,它已经广受欢迎,这在很大程度上帮助了全球的人们以协作方式工作。

Ansible开发商操作质量保证业务/客户
挑战开发人员倾向于将大量时间集中在工具上而不是交付结果上。运营团队需要统一的技术,不同的技能组可以轻松使用这些技术。质量保证团队需要跟踪功能中已更改的内容以及更改时间。客户担心尽快将产品推向市场。
需要开发人员需要响应新功能/错误并根据需求扩展工作量。运营团队需要一个中央管理工具来监控不同的系统及其工作负载。质量保证团队需要专注于尽可能降低无缺陷产品的人为错误风险。客户需要为其产品在市场上创造竞争优势。
Ansible 如何提供帮助?帮助开发人员在早期发现错误,并帮助他们以可靠的方式执行更快的部署。帮助运营团队减少跟踪 IT 人员的工作并减少部署所需的时间。此外,Ansible 帮助他们执行自动修补。帮助 QA 团队建立不受环境影响的自动化测试用例,以获得更可靠和准确的结果。帮助定义相同的安全基线,并帮助他们减轻遵循传统文档的负担。帮助业务团队确保 IT 团队走在正确的轨道上。还可以帮助他们优化项目创新和制定战略所需的时间。帮助团队以有效的方式协作。

23. Ansible 是如何工作的?

Ansible 有两种类型的服务器,分类为:

  • 控制机器
  • 节点

为此,Ansible 安装在控制机器上,通过使用 SSH 管理节点。节点的位置将在控制机器的清单中指定和配置。

Ansible 不需要在远程节点服务器上进行任何安装,因为它是无代理的。因此,在管理任何远程节点时不需要执行后台进程。

Ansible 可以从单个控制系统管理大量节点,我通过 SSH 连接使用 Ansible Playbooks。Playbook 是 YAML 格式,能够执行多项任务。

24. AWS 如何为 DevOps 做出贡献?

AWS 代表亚马逊网络服务,它是著名的云提供商。AWS 通过提供以下优势来帮助 DevOps:

  • 灵活的资源: AWS 提供随时可用的灵活资源供使用。
  • 扩展性:通过利用无限的存储和计算能力,可以在 AWS 上部署数千台机器。
  • 自动化:使用 AWS 提供的各种服务可以自动化许多任务。
  • 安全性: AWS 是安全的,使用身份和访问管理 (IAM) 下提供的各种安全选项,可以保护应用程序部署和构建。

25. 使用 DevOps 方法开发项目的准备方法是什么?

该项目可以通过使用 DevOps 按照以下阶段进行开发:

  • 第 1 阶段:计划:通过对现有流程进行彻底评估以确定改进领域和盲点,计划并提出实施路线图。
  • 第 2 阶段:PoC:提出概念证明 (PoC),只是为了了解所涉及的复杂性。一旦 PoC 获得批准,项目的实际实施工作将开始。
  • 第 3 阶段:遵循 DevOps:一旦项目准备好实施,就可以通过利用其阶段(如版本控制、持续集成、持续测试、持续部署、持续交付和持续监控)来遵循实际的 DevOps 文化。

高级DevOps常见面试题和答案合集

26. 你能解释一下 DevOps 中“左移减少失败”的概念吗?

为了理解这意味着什么,我们首先需要知道传统的 SDLC 循环是如何工作的。在传统周期中,有两个主要方面——

  • 周期的左侧包括规划、设计和开发阶段
  • 周期的右侧包括压力测试、生产阶段和用户验收。

在 DevOps 中,左移只是意味着将通常在应用程序开发过程结束时发生的任务尽可能多地转移到应用程序开发的早期阶段。从下图中我们可以看出,如果遵循左移操作,那么在应用程序开发后期遇到错误的机会将大大减少,因为它在早期阶段本身就已经被识别和解决了。

在 DevOps 中完成左移最流行的方法是:

  • 在创建部署和测试用例自动化的同时与开发团队并肩工作。这是实现左移的第一步,也是显而易见的一步。这样做是因为众所周知的事实,即在生产环境中收到通知的故障并不经常更早地出现。这些故障可以直接与:
    • 开发团队在开发功能时使用的不同部署程序。
    • 生产部署过程有时往往与开发过程不同。工具可能存在差异,有时该过程也可能是手动的。
  • 开发团队和运营团队都希望通过利用云和模式功能来开发和维护标准的部署程序。这有助于让人们相信生产部署会成功。
  • 使用模式功能来避免所使用的不同环境中的配置级别不一致。这将需要开发团队和运营团队共同开发一个标准流程,指导开发人员在开发环境中测试他们的应用程序,就像他们在生产环境中测试一样。

27. 你知道 DevOps 中的事后总结会议吗?

事后会议是安排讨论在实施 DevOps 方法时是否出现某些问题的会议。进行此会议时,预计团队必须确定需要采取的步骤,以避免将来出现故障。

28. Linux 操作系统中 sudo 背后的概念是什么?

Sudo 代表“超级用户 do”,其中超级用户是 Linux 的 root 用户。它是一个用于基于 Linux/Unix 的系统的程序,它允许具有超级用户角色的用户在其根级别使用某些系统命令。

29.你能解释一下Jenkins的架构吗?

Jenkins 遵循主从架构。只要对代码做出承诺,master 就会从 GitHub 存储库中提取最新的代码。主请求从执行构建、测试和运行等操作并生成测试用例报告。这个工作量以统一的方式分配给所有的slave。

Jenkins 还使用多个从站,因为一旦代码提交完成,可能需要为不同的环境运行不同的测试用例套件。

30. 你能解释一下“基础设施即代码”(IaC)的概念吗?

DevOps面试题解析:顾名思义,IaC 主要依赖于与任何代码相同的感知基础设施,这就是为什么它通常被称为“可编程基础设施”。它只是提供了通过使用配置文件来定义和管理 IT 基础架构的方法。

由于与管理基础设施的传统方式相关的局限性,这个概念变得突出。传统上,基础设施是手动管理的,专职人员必须物理设置服务器。只有在这一步完成后,应用程序才会被部署。手动配置和设置经常容易出现人为错误和不一致。

这还涉及雇用和管理从网络工程师到硬件技术人员等多个人员以管理基础设施任务的成本增加。传统方法的主要问题是降低了可扩展性和应用程序可用性,这会影响请求处理的速度。手动配置也很耗时,如果应用程序的用户使用量突然激增,管理员会拼命工作以确保系统可用于大负载。这会影响应用程序的可用性。

IaC解决了以上所有问题。IaC 可以通过两种方法实现:

  • 命令式方法:这种方法“发出命令”并定义了一系列指令,可以帮助系统达到最终输出。
  • 声明式方法:这种方法首先“声明”期望的结果,基于该结果构建基础设施以达到最终结果。

31. DevOps常见面试题有哪些?什么是“结对编程”?

结对编程是一种工程实践,其中两个程序员在同一个系统、相同的设计和相同的代码上工作。他们遵循“极限编程”的规则。在这里,一名程序员被称为“驱动程序”,而另一名则充当“观察员”,持续监控项目进度以发现任何进一步的问题。

32. 什么是蓝/绿部署模式?

蓝绿模式是一种持续部署、应用程序发布模式,它侧重于逐渐将用户流量从软件或服务的先前工作版本转移到几乎相同的新版本——两个版本都在生产中运行。

蓝色环境表示应用程序的旧版本,而绿色环境表示新版本。

生产流量将逐渐从蓝色环境转移到绿色环境,一旦完全转移,蓝色环境将保持暂停,以防万一需要回滚。

View post on imgur.com

在这种模式中,团队必须确保两个相同的生产环境,但在给定的时间点只有一个是 LIVE。由于蓝色环境更稳定,所以LIVE通常是蓝色环境。

33. 什么是狗桩效应?如何预防?

它也被称为缓存踩踏,当采用缓存策略的大型并行计算系统承受非常高的负载时会发生这种情况。它被称为当缓存过期(或失效)并且多个请求同时命中网站时发生的事件。防止 dogpiling 的最常见方法是在缓存中实现信号量锁。当该系统中的缓存到期时,第一个获取锁的进程将向缓存生成新值。

34. 配置 git 存储库以便在任何提交之前运行代码完整性检查需要采取哪些步骤?如果健全性测试失败,你如何防止它再次发生?

健全性测试,也称为烟雾测试,是一个用于确定进行测试是否合理的过程。
Git 存储库提供了一个称为 pre-commit 的钩子,它在提交发生之前被触发。利用这个钩子可以编写一个简单的脚本来实现冒烟测试。

该脚本可用于运行其他工具,如 linter,并对将提交到存储库中的更改执行健全性检查。

以下代码段是一个此类脚本的示例:

#!/bin/sh
files=$(git diff –cached –name-only –diff-filter=ACM | grep ‘.py$’)
if [ -z files ]; then
exit 0
fi
unfmtd=$(pyfmt -l $files)
if [ -z unfmtd ]; then
exit 0
fi
echo “Some .py files are not properly fmt’d”
exit 1

上面的脚本通过使用 python 格式化工具 pyfmt 检查要提交的任何 .py 文件是否正确格式化。如果文件格式不正确,则脚本会通过退出状态 1 来阻止将更改提交到存储库。
 

35. 如何确保每次通过 git push 存储库获得新提交时都会运行脚本?

根据必须准确触发脚本的时间,可以通过三种方式在目标存储库上设置脚本以执行。这些手段被称为钩子,它们分为三种类型:

  • Pre-receive hook:在推送提交时更新引用之前调用此挂钩。此挂钩可用于确保运行与执行开发策略相关的脚本。
  • 更新钩子:此钩子在实际进行任何更新之前触发脚本运行。对于已推送到存储库的每个提交,都会调用此挂钩一次。
  • Post-receive hook:此挂钩有助于在目标存储库接受更新或更改后触发脚本。此挂钩非常适合配置部署脚本、任何基于持续集成的脚本或向团队发送电子邮件通知流程等。

DevOps常见面试题和答案合集结论

DevOps 是一种文化转变实践,它已经并将继续以巨大的方式帮助许多企业和组织。它通过为持续开发和持续集成创建一条平稳的路径,有助于弥合开发人员(不断需要变更)和运营(不断抵制变更)团队的目标和优先级之间的冲突。由于对 DevOps 实践的需求不断增加,成为 DevOps 工程师有巨大的好处。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: