编译整理|TesterHome社区
作者|Shivam Arora
以下为作者观点:
DevOps 是当今科技界最热门的流行语之一,尽管它不仅仅是一种流行语。它是开发和运营团队之间的协作,他们共同努力以更快、更高效地交付产品。在过去几年中,DevOps 工程师的职位空缺大幅增加。谷歌、Facebook 和亚马逊、ByteDance等跨国公司经常有多个 DevOps 工程师专家的空缺职位。然而,就业市场竞争激烈,DevOps 工程师面试中提出的问题可能涵盖许多具有挑战性的主题。
以下是一些最常见的 DevOps 面试问题和答案,它们可以帮助你为行业中的 DevOps 职位做准备。
什么是 DevOps?
为了提高软件开发、交付和部署的效率和质量,一组称为 DevOps 的活动和方法将软件开发 (Dev) 与信息技术操作 (Ops) 结合在一起。
DevOps 的主要目标是促进开发和运营团队之间的团队合作,以便他们能够在整个软件开发生命周期中轻松协作。此外,自动化、持续集成、交付和部署可用于加速和减少软件开发过程中的错误。
DevOps 还强调监控和反馈,使开发和运营团队能够尽早发现问题并主动处理。使用 DevOps 方法,企业可以通过实现更快的发布周期、更高质量的软件和增强的团队合作来提高敏捷性、竞争力和整体生产力。
什么是 DevOps 工程师?
使用 DevOps 方法和实践开发、部署和维护软件系统的专家被称为 DevOps 工程师。
DevOps 工程师与 IT 运营团队、软件开发人员和其他利益相关者密切合作,以确保有效交付软件产品。为了提高软件开发的效率和质量,他们负责实施自动化、持续集成和持续交付/部署 (CI/CD) 实践。他们还负责查找和解决整个开发过程中出现的问题。
DevOps 工程师通常拥有丰富的 IT 运营、系统管理、软件开发、脚本编写、自动化和云计算技能背景。除了源代码管理系统、构建和部署工具、虚拟化和容器技术以及监控和日志记录工具外,他们还擅长使用各种工具和技术。
DevOps 工程师需要精通技术和人际交往技能、团队合作和解决问题的技巧。此外,他们还必须能够与来自各个背景和学科的同事进行成功互动和协作,因为他们与企业内的多个团队密切合作。
成为DevOps工程师需要什么要求?
根据业务和个人职能,成为 DevOps 工程师的标准可能有所不同。但是,通常需要或推荐一些特定的基本技能和认证。它们包括以下内容:
优秀的技术背景:DevOps 工程师应精通 IT 运营、系统管理和软件开发。可能需要拥有计算机科学背景、信息技术或类似学科的学位,以及相关经验和认证。
具有 DevOps 工具和方法的经验:DevOps 工程师应该具有各种 DevOps 技术和流程的经验,包括版本控制系统、构建和部署自动化、容器化、云计算以及监控和日志记录工具。
脚本和自动化技能:DevOps 工程师应该具备强大的脚本技能,并熟练使用 Bash、Python 或 PowerShell 等工具来自动化任务和流程。
云计算经验:DevOps 工程师应该具有使用 Amazon Web Services (AWS)、Microsoft Azure 或 Google Cloud Platform (GCP) 等云平台的经验。
软技能:DevOps 工程师应该是有效的沟通者,能够与不同部门的团队合作,并具备强大的解决问题和分析能力。
认证:一些组织可能要求 DevOps 工程师持有相关认证,例如认证 DevOps 工程师 (CDE)、认证 Kubernetes 管理员 (CKA) 或 AWS 认证 DevOps 工程师 - 专业版。
现在让我们从一些常见的 DevOps 面试问题和答案开始。
常见DevOps面试问题
1.你对DevOps了解多少?
答案必须简单明了。首先解释 DevOps 在IT 行业中日益增长的重要性。讨论这种方法如何协同开发和运营团队的努力,以将失败率降至最低,从而加速软件产品的交付。包括 DevOps 如何成为一种增值实践,开发和运营工程师在整个产品或服务生命周期中携手合作,从设计阶段到部署点。
2. DevOps 与敏捷方法有何不同?
DevOps 是一种允许开发和运营团队协同工作的文化。这导致软件在整个生命周期内持续开发、测试、集成、部署和监控。
敏捷是一种软件开发方法,侧重于迭代、增量、小型和快速发布软件,并听取客户反馈。它解决了客户和开发人员之间的差距和冲突。
DevOps 解决了开发人员和 IT 运营之间的差距和冲突。
3. 哪些 DevOps 工具最受欢迎?
最受欢迎的DevOps 工具包括:
Selenium
Puppet
Chef
Git
Jenkins
Ansible
Docker
4.DevOps 有哪些不同阶段?
DevOps 生命周期的各个阶段如下:
计划:首先,应该针对需要开发的应用程序类型制定一个计划。大致了解开发过程总是一个好主意。
代码:应用程序根据最终用户要求进行编码。
构建:将前面步骤形成的各种代码整合起来,构建应用程序。
测试:这是应用程序开发中最关键的一步。测试应用程序,必要时重建。
集成:将来自不同程序员的多个代码集成为一个。
部署:将代码部署到云环境中以供进一步使用。确保任何新的更改不会影响高流量网站的运行。
操作:如果需要,对代码执行操作。
监控:监控应用程序性能。进行更改以满足最终用户的要求。
上图表示了DevOps的生命周期
5. 提及 DevOps 的一些核心优势。
DevOps 的核心优势如下:
技术优势:
持续软件交付
处理不太复杂的问题
尽早发现并更快纠正缺陷
商业利益:
更快地交付功能
稳定的操作环境
改善团队之间的沟通和协作
6. 你将如何处理需要实施 DevOps 的项目?
在具体项目中,可以采用以下标准方法实现 DevOps:
第1阶段
对现有流程和实施情况进行大约两到三周的评估,以确定需要改进的领域,以便团队可以创建实施路线图。
第2阶段
创建概念验证 (PoC)。一旦被接受和批准,团队就可以开始实际实施和推出项目计划。
第3阶段
该项目现已准备好通过版本控制/集成/测试/部署/交付和监控逐步实施 DevOps。
通过遵循版本控制、集成、测试、部署、交付和监控的正确步骤,该项目现在已经准备好实施 DevOps。
7.持续交付和持续部署有什么区别?
8. 配置管理在 DevOps 中扮演什么角色?
支持对多个系统的管理和更改。
标准化资源配置,从而管理IT基础设施。
它有助于管理多台服务器并维护整个基础设施的完整性。
9. 持续监控如何帮助您维护整个系统架构?
DevOps 中的持续监控是检测、识别和报告系统整个基础设施中任何故障或威胁的过程。
确保所有服务、应用程序和资源在服务器上正常运行。
监控服务器的状态并确定应用程序是否正常运行。
实现持续审计、交易检查和受控监控。
10.AWS 在 DevOps 中扮演什么角色?
AWS 在 DevOps 中扮演着以下角色:
灵活的服务:提供即用型、灵活的服务,无需安装或设置软件。
专为扩展而构建:您可以使用 AWS 服务管理单个实例或扩展到数千个实例。
自动化:AWS 可让您自动化任务和流程,让您有更多时间进行创新
安全:使用 AWS Identity and Access Management (IAM),您可以设置用户权限和策略。
庞大的合作伙伴生态系统:AWS 支持庞大的合作伙伴生态系统,这些合作伙伴可以与 AWS 服务集成并进行扩展。
11. 说出三个重要的 DevOps KPI。
这三个重要的KPI如下:
平均故障恢复时间:这是从故障中恢复所需的平均时间。
部署频率:部署发生的频率。
部署失败百分比:部署失败的次数。
12. 解释与配置管理相关的术语“基础设施即代码”(IaC)。
编写代码来管理配置、部署和自动配置。
使用机器可读的定义文件而不是物理硬件配置来管理数据中心。
确保您的所有服务器和其他基础设施组件都得到一致且轻松的配置。
管理云计算环境,也称为基础设施即服务 (IaaS)。
13.如何使用 AWS 实现 IaC?
首先讨论将命令写入脚本文件并在部署之前在单独的环境中测试它们的古老机制,以及这种方法如何被 IaC 取代。与为其他服务编写的代码类似,在 AWS 的帮助下,IaC 允许开发人员使用 JSON 或 YAML 等格式以描述性的方式编写、测试和维护基础设施实体。这使得基础设施变更的开发更加容易,部署速度更快。
14.为什么 DevOps 在过去几年中变得如此突出?
在谈论 DevOps 日益普及之前,先讨论一下当前的行业情况。首先举几个例子,说明Netflix 和 Facebook等大公司如何投资 DevOps 来自动化和加速应用程序部署,以及这如何帮助他们发展业务。以 Facebook 为例,您可以指出 Facebook 的持续部署和代码所有权模型,以及这些模型如何帮助它扩大规模,同时确保体验质量。数百行代码的实现不会影响质量、稳定性和安全性。
再比如Netflix,这家流媒体和点播视频公司采用完全自动化的流程和系统,遵循类似的做法。提及这两个组织的用户群:Facebook 拥有 20 亿用户,而 Netflix 向全球超过 1 亿用户提供在线内容。
这些都是很好的例子,说明 DevOps 如何帮助组织确保更高的发布成功率、减少错误修复之间的前置时间、通过自动化简化和持续交付、以及总体降低人力成本。
我们现在将研究下一组 DevOps 面试问题,其中包括 - Git、Selenium、Jenkins。
15. DevOps 和 Agile 之间的根本区别是什么?
Agile 和 DevOps 之间的主要区别总结如下:
16.DevOps 的反模式是什么?
模式是组织通常遵循的常见做法。当组织继续盲目遵循他人采用但对他们不起作用的模式时,就会形成反模式。关于 DevOps 的一些误解包括:
无法执行 DevOps → 人员不合适
DevOps ⇒ 生产管理由开发人员完成
解决组织所有问题的解决方案⇒DevOps
DevOps == 流程
DevOps == 敏捷
无法执行 DevOps → 组织是唯一的
需要为 DevOps 设立一个单独的小组
17.使用版本控制有什么好处?
使用版本控制的好处如下:
所有团队成员都可以随时使用版本控制系统 (VCS) 处理任何文件。之后,VCS 将允许团队将所有修改整合到一个版本中。
每次我们保存项目的新版本时,VCS 都会要求提供更改内容的简要摘要。我们还可以检查文件内容中修改了哪些内容。这样,我们就可以看到谁对项目做了哪些更改。
在 VCS 中,所有以前的变体和版本都已妥善保存。我们可以随时请求任何版本,并且可以轻松检索整个项目的快照。
分布式 VCS(例如 Git)可让所有团队成员检索项目的完整历史记录。这样,即使主服务器在任何时间点发生故障,开发人员或其他利益相关者也可以使用任何团队成员的本地 Git 存储库。
18. 描述你使用过的分支策略。
为了测试我们对分支目的的了解以及我们在过去的工作中使用分支的经验,通常会问这个问题。
以下主题可以帮助回答这个 DevOps 面试问题:
发布分支 - 一旦开发分支具有足够的功能可供发布,我们就可以克隆该分支以创建发布分支。此分支将启动下一个发布周期,因此在此之后无法贡献任何新功能。可以贡献的内容包括文档生成、错误修复和其他与发布相关的任务。一旦发布准备好发布,就会合并到主分支中并赋予版本号。它还应该合并回开发分支,该分支可能自初始发布以来就已发展起来。
功能分支 - 此分支模型维护分支中包含的特定功能的所有修改。一旦使用自动化测试对该功能进行了全面测试和批准,分支就会合并到主分支中。
任务分支 - 在这个分支模型中,每个任务都在其各自的分支中实现。任务键在分支名称中提及。我们只需查看分支名称中的任务键即可发现哪个代码实现了哪个任务。
19.你能解释一下 DevOps 中的“左移以减少失败”概念吗?
左移是 DevOps 的一个理念,旨在提高安全性、性能和其他因素。让我们举个例子:如果我们查看 DevOps 中的所有流程,我们可以说安全性是在部署步骤之前测试的。我们可以通过使用左移方法在左侧的开发阶段添加安全性。[将在图中描述] 我们可以与所有阶段集成,包括开发之前和测试期间,而不仅仅是开发。这很可能通过在早期阶段检测故障来提高安全级别。
20.什么是蓝/绿部署模式?
这是通常用于减少停机时间的持续部署方法。流量从一个实例转移到另一个实例。为了包含新版本的代码,我们必须用新版本的代码替换旧代码。
新版本存在于绿色环境中,旧版本存在于蓝色环境中。对上一个版本进行更改后,我们需要从旧版本中创建一个新实例来执行该实例的较新版本。
21.什么是持续测试?
持续测试是软件交付流程中自动测试的运行,旨在对最新版本中存在的业务风险提供即时反馈。为了防止软件交付生命周期中步骤切换出现问题,并让开发团队能够立即收到反馈,每个版本都以这种方式持续测试。这可以显著提高开发人员的工作效率,因为它消除了每次更新和项目重建后重新运行所有测试的需要。
22.什么是自动化测试?
测试自动化或手动测试 自动化是将手动程序自动化以测试应用程序或系统的过程。自动化测试需要使用独立的测试工具,这些工具允许您开发无需人工交互即可重复运行的测试脚本。
23.自动化测试有什么好处?
自动化测试的一些优点是:
有助于节省金钱和时间。
可以轻松实现无人值守执行。
可以轻松测试巨大的测试矩阵。
已启用并行执行。
减少人为错误,从而提高准确性。
支持重复执行测试任务。
24. 如何在 DevOps 生命周期中实现自动化测试?
开发人员有义务将所有源代码更改提交到共享的 DevOps 存储库。
每次代码发生变化时,类似 Jenkins 的持续集成工具就会从这个公共存储库中抓取它,并将其部署以进行持续测试,这项工作由 Selenium 之类的工具完成。
25.为什么持续测试对于 DevOps 很重要?
任何代码修改都可以通过持续测试立即进行测试。这可以避免因大规模测试延迟到周期结束时而可能出现的质量问题和发布延迟等问题。通过这种方式,持续测试可以实现高质量和更频繁的发布。
26. 持续测试工具的关键要素是什么?
持续测试的关键要素是:
测试优化:它保证测试产生可靠的结果和可操作的信息。测试数据管理、测试优化管理和测试维护就是方面的例子。
高级分析:为了避免问题的发生并在每次迭代中取得更多成果,它在范围评估/优先级排序、变化影响分析和静态代码分析等领域采用自动化。
政策分析:保证所有流程符合组织不断变化的业务需求,并满足所有合规性要求。
风险评估:涵盖测试覆盖率优化、技术债务、风险缓解职责和质量评估,以确保构建准备好进入下一阶段。
服务虚拟化:确保真实世界的测试场景可用。服务可视化提供对所需测试阶段的虚拟表示,确保其可用性并减少设置测试环境所花费的时间。
需求可追溯性:保证无需返工,并满足实际标准。为了确定哪些需求需要额外验证、处于危险之中以及是否按预期执行,可以使用对象评估。
DevOps源代码管理面试题:Git
27. 解释集中式和分布式版本控制系统(VCS)之间的区别。
集中版本控制系统
所有文件版本都存储在中央服务器上
没有开发人员在本地系统上拥有所有文件的副本
如果中央服务器崩溃,项目的所有数据都将丢失
集散控制系统
每个开发人员的系统上都有所有版本代码的副本
使团队成员能够离线工作,并且不依赖单一位置进行备份
没有任何威胁,即使服务器崩溃
28. 将任何存储库从 GitHub 下载到您的计算机的 git 命令是什么?
从 GitHub 下载任何存储库到您的计算机的git 命令是git clone。
29. 如何使用 Git 将文件从本地系统推送到 GitHub 存储库?
首先,将本地存储库连接到远程存储库:
git remote add origin [复制的网址]
// 例如:git remote add origin https://github.com/Simplilearn-github/test.git
第二步,将文件推送到远程存储库:
git push origin master
30. 裸仓库与初始化 Git 仓库的标准方式有何不同?
使用标准方法:
git init
使用 git init 创建工作目录
创建一个 .git 子文件夹,其中包含所有与 git 相关的修订历史记录
使用bare way
git init——bare
它不包含任何工作或签出的源文件副本
Bare存储库将 git 修订历史记录存储在存储库的根文件夹中,而不是 .git 子文件夹中
31. 下列哪个 CLI 命令可用于重命名文件?
git 目录
git mv
git rm -r
以上都不是
正确答案是 B) git mv
32. 恢复已经推送并公开的提交的流程是什么?
有两种方法可以还原提交:
1.在新的提交中删除或修复错误文件并将其推送到远程存储库。然后使用以下命令将其提交到远程存储库:
git commit –m "提交消息"
2.创建一个新的提交,撤消错误提交中所做的所有更改。使用以下命令:
git revert <commit id>
例如:git revert 56de0938f
33. 解释一下 git fetch 和 git pull 之间的区别。
34. 什么是 Git stash?
使用当前分支的开发人员想要切换到另一个分支来处理其他工作,但开发人员不想提交对您未完成工作的更改。此问题的解决方案是 Git stash。Git stash 会获取您修改过的跟踪文件,并将其保存在未完成更改的堆栈中,您可以随时重新应用这些更改。
35. 解释一下 Git 中的分支概念。
假设你正在开发一款应用程序,并且想要为该应用程序添加新功能。您可以创建一个新分支,然后在该分支上构建新功能。
默认情况下,你总是在 master 分支上工作
分支上的圆圈代表该分支上进行的各种提交
完成所有更改后,可以将其与主分支合并
36.Git Merge 和 Git Rebase 有什么区别?
假设你正在专用分支中开发新功能,而另一位团队成员使用新提交更新主分支。您可以使用以下两个函数:
Git 合并
要将新的提交合并到您的功能分支,请使用 Git merge。
每次需要合并更改时都会创建一个额外的合并提交
但是,它会污染你的功能分支历史
Git 变基
作为合并的替代方法,您可以将功能分支重新定位到主分支上。
整合主分支中的所有新提交
它为原始分支中的每个提交创建新的提交并重写项目历史记录
37. 如何找到在特定提交中已更改的文件列表?
获取特定提交中已更改的文件列表的命令是:
git diff-tree –r {提交哈希}
例如:git diff-tree –r 87e673f21b
-r 标志指示命令列出单个文件
提交哈希将列出该提交中更改或添加的所有文件
38. Git 中的合并冲突是什么?如何解决?
当你合并分支时存在提交竞争,这时就会发生Git 合并冲突, Git 需要你的帮助来决定在最终合并中要合并哪些更改。
手动编辑冲突的文件以选择要在最终合并中保留的更改。
使用 GitHub 冲突编辑器解决
这是在竞争行更改后导致合并冲突时发生的。例如,当人们对 Git 存储库中不同分支上的同一文件的同一行进行不同更改时,可能会发生这种情况。
使用冲突编辑器解决合并冲突:
在存储库名称下,单击“拉取请求”。
在“拉取请求”下拉菜单中,点击您想要解决的合并冲突的拉取请求
在拉取请求的底部附近,单击“解决冲突”。
决定是否只保留您自己分支的更改、其他分支的更改,或者进行全新的更改(可能包含两个分支的更改)。
删除冲突标记 <<<<<<<、=======、>>>>>>> 并在最终合并时进行所需的更改。
如果您的文件中存在多个合并冲突,请向下滚动到下一组冲突标记并重复步骤四和五来解决合并冲突。
解决文件中的所有冲突后,单击“标记为已解决”。
如果有多个文件存在冲突,请在页面左侧的“冲突文件”下选择下一个要编辑的文件,然后重复步骤四到七,直到解决了所有拉取请求的合并冲突。
解决合并冲突后,点击提交合并。这会将整个基础分支合并到您的头分支中。
要合并您的拉取请求,请单击合并拉取请求。
使用命令行解决合并冲突。
打开 Git Bash。
导航到包含合并冲突的本地 Git 存储库。
生成合并冲突影响的文件列表。在此示例中,文件 styleguide.md 存在合并冲突。
打开任何文本编辑器,例如 Sublime Text 或 Atom,然后导航到存在合并冲突的文件。
要查看文件中合并冲突的开始,请在文件中搜索冲突标记“<<<<<<<”。打开它,您将在“<<<<<<< HEAD”行之后看到来自基础分支的更改。
接下来,您将看到“=======”,它将您的更改与其他分支中的更改分开,后面跟着“>>>>>>> BRANCH-NAME”。
决定是否只保留您自己分支的更改、其他分支的更改,或者进行全新的更改(可能包含两个分支的更改)。
删除冲突标记“<<<<<<<”、“========”、“>>>>>>>”并在最后的合并中进行所需的更改。
在此示例中,两个更改均已纳入最终合并:
添加或暂存您的更改。
提交你的更改并附加评论。
现在,你可以在命令行上合并分支,或者将更改推送到 GitHub 上的远程存储库并在拉取请求中合并更改。
39. 什么是 Git bisect?如何使用它来确定(回归)错误的来源?
Git bisect 是一个使用二分搜索来定位触发错误的提交的工具。
Git bisect 命令 -
git bisect <子命令> <选项>
git bisect 命令用于使用二分搜索算法来查找项目中执行提交时的错误。
发生错误的提交称为“坏”提交,而发生错误之前的提交称为“好”提交。我们将此信息传递给 git bisect 工具,它会在两个端点之间随机选择一个提交,并提示该提交是“好”提交还是“坏”提交。该过程持续进行,直到范围缩小并找到导致确切更改的确切提交。
40. 解释一些基本的 Git 命令。
下表总结了一些基本的 Git 命令:
持续集成的 DevOps 面试问题:Jenkins
41.解释一下Jenkins的主从架构。
每次提交代码时,Jenkins master 都会从远程 GitHub 存储库拉取代码。
它将工作负载分配给所有 Jenkins 从属服务器。
根据Jenkins主服务器的请求,从服务器执行、构建、测试并生成测试报告。
42.什么是Jenkinsfile?
Jenkinsfile 包含 Jenkins 管道的定义,并已签入源代码控制存储库。它是一个文本文件。
它允许在管道上进行代码审查和迭代。
它允许对管道进行审计跟踪。
管道具有单一真实来源,可供查看和编辑。
43. 下列哪个命令从命令行运行 Jenkins?
java –jar Jenkins.war
java –war Jenkins.jar
java –jar Jenkins.jar
java –war Jenkins.war
正确答案是 A)java –jar Jenkins.war
44.Jenkins 管道的关键方面有哪些概念?
管道:CD 管道的用户定义模型。管道的代码定义了整个构建过程,包括构建、测试和交付应用程序
节点:Jenkins 环境的一部分,能够执行管道的机器
步骤:告诉 Jenkins 在特定时间点做什么的单个任务
阶段:定义整个管道(构建、测试、部署阶段)执行的概念上不同的任务子集
45. Maven 中哪个文件用于定义依赖关系?
构建文件
pom.xml
依赖项.xml
版本.xml
正确答案是B)pom.xml
46. 解释 Jenkins 中的两种类型的管道及其语法。
Jenkins提供了两种开发管道代码的方式:脚本化和声明式。
脚本化管道:它基于 Groovy 脚本作为其领域特定语言。一个或多个节点块在整个管道中执行核心工作。
句法:
在任何可用代理上执行管道或其任何阶段
定义构建阶段
执行与建筑阶段相关的步骤
定义测试阶段
执行与测试阶段相关的步骤
定义部署阶段
执行与部署阶段相关的步骤
声明式管道:它提供了一种简单友好的语法来定义管道。这里,管道块定义了整个管道中完成的工作。
句法:
在任何可用代理上执行管道或其任何阶段
定义构建阶段
执行与建筑阶段相关的步骤
定义测试阶段
执行与测试阶段相关的步骤
定义部署阶段
执行与部署阶段相关的步骤
47. 如何在Jenkins中创建备份和复制文件?
为了创建备份文件,请定期备份您的 JENKINS_HOME 目录。
为了创建 Jenkins 设置的备份,请复制 JENKINS_HOME 目录。您还可以复制作业目录以克隆或复制作业或重命名目录。
48. 如何将 Jenkins 从一台服务器复制到另一台服务器?
通过复制相应的作业目录将作业从一个 Jenkins 安装移动到另一个。
通过克隆具有不同名称的作业目录来创建现有作业的副本。
通过重命名目录来重命名现有作业。
49. 说出 Jenkins 用于验证用户的三种安全机制。
Jenkins 使用内部数据库来存储用户数据和凭证。
Jenkins 可以使用轻量级目录访问协议 (LDAP) 服务器来验证用户。
Jenkins 可以配置为采用已部署的应用程序服务器使用的身份验证机制。
50. 如何部署核心插件的自定义版本?
部署核心插件自定义版本的步骤:
将 .hpi 文件复制到 $JENKINS_HOME/plugins
删除插件的开发目录
创建一个名为 <plugin>.hpi.pinned 的空文件
重新启动 Jenkins 并使用自定义的核心插件版本
51. 如果管理用户将自己锁定在管理控制台之外,如何暂时关闭 Jenkins 安全性?
当启用安全性时,配置文件包含一个名为 useSecurity 的XML元素,该元素将设置为 true。
通过将此设置更改为 false,下次重新启动 Jenkins 时将禁用安全性。
52. 在 Jenkins 中可以通过哪些方式安排/运行构建?
通过源代码管理提交。
在其他构建完成后。
计划在指定时间运行。
手动构建请求。
53. 可以使用哪些命令来手动重启 Jenkins?
手动重启 Jenkins 的两种方法:
(Jenkins_url)/restart // 强制重启而不等待构建完成
(Jenkins_url)/safeRestart // 允许所有正在运行的构建在重新启动之前完成
54.解释一下如何设置 Jenkins 作业?
要创建 Jenkins Job,我们转到 Jenkins 主页,选择 New Job 选项,然后选择 Build a free style software project。
这种自由式工作的要素是:
用于控制 Jenkins 构建时间的可选触发器。
从构建中收集数据的可选步骤,例如收集 javadoc、测试结果和/或存档工件。
实际执行工作的构建脚本(ant、maven、shell 脚本、批处理文件等)。
可选的源代码管理系统 (SCM),如 Subversion 或 CVS。
DevOps 持续测试面试问题:Selenium
55. 硒有哪些不同的成分?
Selenium 具有以下组成部分:
Selenium 集成开发环境 (IDE)
它有一个简单的框架,应该用于原型设计。
它有一个易于安装的 Firefox 插件。
硒遥控器(RC)
开发人员使用任何编程语言(Java、PHP、Perl、C# 等)编写代码的测试框架。
Selenium WebDriver
采用更好的方法来自动化浏览器活动。
它不依赖于 JavaScript。
Selenium Grid
与 Selenium RC 配合使用并使用浏览器在不同节点上运行测试。
56.Selenium WebDriver 中有哪些不同的异常?
异常是在程序执行过程中发生的事件,会破坏程序指令的正常流程。Selenium 有以下异常:
TimeoutException:当执行操作的命令未在规定的时间内完成时抛出。
NoSuchElementException:当网页上找不到具有特定属性的元素时抛出。
ElementNotVisibleException:当元素存在于文档对象模型 (DOM) 中但不可见时,会抛出此异常。例如:使用 type=“hidden”在HTML中定义的隐藏元素。
SessionNotFoundException:WebDriver 在退出浏览器后立即执行操作。
57.Selenium 可以在 Android 浏览器上测试应用程序吗?
Selenium 能够使用 Android 驱动程序在 Android 浏览器上测试应用程序。您可以使用 Selendroid 或 Appium 框架在 Android 浏览器中测试原生应用或 Web 应用。以下是示例代码:
58.Selenium 支持哪些不同的测试类型?
功能:这是一种黑盒测试,其中测试用例基于软件规范。
回归:此测试有助于在修改后在代码的不同功能和非功能区域中 发现新的错误、回归等。
负载测试:此测试旨在监控设备在负载下的反应。它用于研究系统在特定条件下的行为。
59. 如何访问 Web 元素的文本?
Get 命令用于检索指定 Web 元素的文本。该命令不返回任何参数,但返回字符串值。
用于:
消息验证
标签
网页上显示的错误
句法:
字符串文本 = driver.findElement(By.id(“text”)).getText();
60. 如何使用 Selenium 处理键盘和鼠标操作?
可以使用高级用户交互 API 处理键盘和鼠标事件。高级用户交互 API 包含操作和操作类。
以下哪个选项不是 WebElement 方法?
getText()
size()
getTagName()
sendKeys()
正确答案是 B) size()
61. 什么时候使用 findElement() 和 findElements()?
findElement()
它查找当前网页中与指定定位器值匹配的第一个元素。
句法:
WebElement元素
=driver.findElements(By.xpath(“//div[@id='example']//ul//li”));
findElements()
它查找当前网页中与指定定位器值匹配的所有元素。
句法:
列表元素列表=driver.findElements(By.xpath(“//div[@id='example']//ul//li”));
62. WebDriver 中的 driver.close() 和 driver.quit() 是什么?
这是在 Selenium WebDriver 中关闭浏览器会话的两种不同方法:
driver.close():用于关闭当前焦点所在的浏览器窗口。在这种情况下,只有一个浏览器打开。
driver.quit():它关闭所有浏览器窗口并使用 driver.dispose 方法结束 WebDriver 会话。
63. 如何使用 Selenium 提交表单?
以下代码行将允许您使用 Selenium 提交表单:
WebElement el = 驱动程序.findElement(By.id(“ElementID”));
el.提交();
64.Selenium 支持哪些测试类型?
Selenium 主要支持两种类型的测试:
功能测试:对软件功能点或特性进行单独测试。
回归测试:无论何时修复错误,产品都会被重新测试,这称为回归测试。
65. 什么是 Selenium IDE?
Selenium 集成开发环境 (IDE) 是一个一体化的 Selenium 脚本开发环境。它可用于调试、修改和记录测试,也可作为 Firefox 扩展使用。Selenium IDE 附带整个 Selenium Core,使我们能够在进行测试的确切环境中快速轻松地重放和记录测试。
无论我们喜欢哪种测试风格,Selenium IDE 都是构建 Selenium 测试的最佳环境,因为它能够快速移动指令并具有自动完成支持。
66. Selenium 中的 Assert 和 Verify 命令有什么区别?
Selenium 中的 Verify 和 Assert 命令的区别如下:
验证命令确定提供的条件是否为真。无论条件是否为真,程序执行都不会停止,即所有测试步骤都将完成,验证失败不会停止执行。
assert 命令确定条件是真还是假。要知道提供的元素是否在页面上,我们执行以下操作。如果条件为真,程序控制将执行下一个测试步骤。但是,如果条件为假,则不会运行进一步的测试,并且执行将停止。
67.如何使用 WebDriver 启动浏览器?
要使用 WebDriver 启动浏览器,请遵循以下语法:
WebDriver 驱动程序 = 新的 InternetExplorerDriver();
WebDriver 驱动程序 = 新的 ChromeDriver();
WebDriver 驱动程序 = 新的 FirefoxDriver();
68. 资产管理和配置管理有什么区别?
配置管理和资产管理之间的区别是:
配置管理的 DevOps 面试问题:Chef、Puppet、Ansible
69. 为什么 Chef 中使用 SSL 证书?
Chef 服务器和客户端之间使用 SSL 证书来确保每个节点都能访问正确的数据。
每个节点都有一对私钥和公钥。公钥存储在 Chef 服务器上。
当 SSL 证书发送到服务器时,它将包含节点的私钥。
服务器将其与公钥进行比较以识别节点并允许节点访问所需的数据。
70. 您将使用下列哪个命令来在系统启动时停止或禁用“httpd”服务?
#systemctl 禁用 httpd.service
#系统禁用httpd.service
# 系统禁用 httpd
#systemctl 禁用 httpd.service
正确答案是 A)# systemctl disable httpd.service
71. Chef 中的测试厨房是什么?
Test Kitchen 是 Chef 中的一个命令行工具,它可以启动一个实例并在其上测试食谱,然后将其部署到实际节点上。
以下是最常用的厨房命令:
72. chef-apply 和 chef-client 有何不同?
chef-apply 在客户端系统上运行。
chef-apply 在客户端系统上应用命令中提到的配方。
$ chef-apply recipe_name.rb
chef-client 也在客户端系统上运行。
chef-client 将服务器运行列表中的所有食谱应用到客户端系统。
$ knife chef-client
73. 签署请求的证书的命令是什么?
对于 Puppet 版本 2.7:
# puppetca –sign hostname-of-agent
示例:
# puppetca –sign ChefAgent
# puppetca sign hostname-of-agent
示例:
# puppetca sign ChefAgent
对于 Puppet 版本 2.7:
# puppetca –sign hostname-of-agent
示例:
# puppetca –sign ChefAgent
# puppetca sign hostname-of-agent
示例:
# puppetca sign ChefAgent
74. 您使用哪些开源或社区工具来使 Puppet 更加强大?
使用Jira跟踪配置的变化,并通过内部程序进行进一步的维护。
版本控制需要 Git 和 Puppet 的代码管理器应用程序的支持。
这些变化也通过 Jenkin 的持续集成管道传递。
75.Puppet 中有哪些资源?
资源是任何配置管理工具的基本单位。
这些是节点的功能,例如其软件包或服务。
资源声明以目录形式书写,描述了对资源执行的操作。
当目录被执行时,它会将节点设置为所需状态。
76.Puppet 中的类是什么?
类是清单中的命名块,用于配置节点的各种功能,例如服务、文件和包。
这些类被添加到节点的目录中,并且只有在明确调用时才会执行。
类 apache (字符串 $version = 'latest') {
包裹{
‘httpd’:确保 => $version,
之前 => 文件['/etc/httpd.conf'],}
77. 什么是 Ansible 角色?
Ansible角色是嵌入在playbook中的独立任务、变量、文件和模板块。
78. 什么时候应该使用'{{ }}'?
始终对变量使用 {{}},除非您有条件语句,例如“when: …”。这是因为条件语句是通过 Jinja 运行的,它会解析表达式。
例如:
echo “这将打印 {{foo}} 的值”
何时:foo 被定义
使用括号可以更容易地区分字符串和未定义的变量。
这还确保 Ansible 不会将该行识别为字典声明dictionary declaration。
79. 使内容可重复使用/可重新分发的最佳方法是什么?
有三种方法可以使内容在 Ansible 中可重复使用或可重新分发:
角色用于管理剧本中的任务。它们可以通过 Ansible Galaxy 轻松共享。
“include” 用于将子模块或其他文件添加到剧本中。这意味着一次编写的代码可以添加到多个剧本中。
“import” 是“include”的改进,它确保文件只被添加一次。当一行以递归方式运行时,这很有用。
80.Ansible 与 Puppet 有何不同?
关于容器化的 DevOps 面试问题
81.解释一下Docker的架构。
Docker使用客户端-服务器架构。
Docker Client 是运行命令的服务。该命令使用 REST API 进行翻译并发送到 Docker Daemon(服务器)。
Docker Daemon接受请求并与操作系统交互,构建Docker 镜像并运行Docker 容器。
Docker 镜像是用于创建容器的指令模板。
Docker容器是将一个应用程序及其依赖项打包在一起的可执行文件。
Docker 注册中心是一种在用户之间托管和分发 Docker 镜像的服务。
82.Docker 相对于虚拟机有哪些优势?
83. 我们如何与不同的节点共享Docker容器?
可以使用 Docker Swarm在不同的节点上共享 Docker 容器。
Docker Swarm 是一种工具,允许 IT 管理员和开发人员在 Docker 平台内创建和管理 Swarm 节点集群。
一个 Swarm 由两种类型的节点组成:管理节点和工作节点。
84.创建Docker Swarm的命令有哪些?
创建一个要运行管理节点的集群。Docker
swarm init --advertise-addr <MANAGER-IP>
一旦在管理器节点上创建了群,您就可以将工作节点添加到群中。
当节点初始化为管理器时,它会立即创建一个令牌。为了创建工作节点,应在工作节点的主机上执行以下命令(令牌)。docker
swarm join \ --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \ 192.168.99.100:2377
85. 如何使用单一服务运行多个容器?
可以使用 Docker Compose 将多个容器作为单个服务运行。
在这里,每个容器都独立运行,但可以相互交互。
所有 Docker Compose 文件都是 YAML 文件。
86. Dockerfile 用于什么?
Dockerfile 用于使用 build 命令创建 Docker 镜像。
有了 Docker 镜像,任何用户都可以运行代码来创建 Docker 容器。
一旦构建了 Docker 镜像,它就会被上传到 Docker 注册表中。
从 Docker 注册表中,用户可以随时获取 Docker 镜像并构建新的容器。
87. 解释一下Docker镜像和Docker容器之间的区别。
88. 除了 YAML,您还可以使用什么作为构建 Docker Compose 的替代文件?
要构建 Docker Composer,用户可以使用 JSON 文件而不是 YAML。如果用户想要使用 JSON 文件,他/她应该指定文件名,如下所示:
Docker-compose -f Docker-compose.json 启动
89.如何创建Docker容器?
任务:创建 MySQL Docker 容器
用户可以构建 Docker 镜像或从 Docker Hub 中提取现有的 Docker 镜像(如 MySQL)。
现在,Docker 从现有的 Docker 镜像中创建一个新的容器 MySQL。同时,读写文件系统的容器层也在镜像层之上创建。
创建Docker容器的命令:Docker run -t –i MySQL
列出正在运行的容器的命令:Docker ps
90. 注册中心和存储库有什么区别?
91.支持Docker的云平台有哪些?
以下是运行Docker的云平台:
亚马逊网络服务
微软 Azure
谷歌云平台
Rackspace
92.Docker 中的 reveal 和 exposed 命令有什么用途?
expose
Expose是Dockerfile中使用的指令。
它用于公开 Docker 网络内的端口。
它是在构建镜像和运行容器时使用的文档指令。
Expose 是Docker 中使用的命令。
例如:公开 8080
publish
发布用于 Docker 运行命令。
它可以在Docker 环境之外使用。
它用于将主机端口映射到正在运行的容器端口。
--publish 或 –p 是 Docker 中使用的命令。
例如:docker run –d –p 0.0.0.80:80
现在,让我们看一下有关持续监控的 DevOps 面试问题。
有关持续监控的DevOps面试问题
93. Nagios 如何帮助持续监控系统、应用程序和服务?
Nagios 支持服务器监控,并能够检查服务器是否得到充分利用或是否需要解决任何任务失败。
验证服务器和服务的状态
检查基础设施的健康状况
检查应用程序是否正常运行以及 Web 服务器是否可访问
94. Nagios 如何帮助持续监控系统、应用程序和服务?
95.Nagios 的 Nagios 远程插件执行器(NPRE)是什么意思?
Nagios 远程插件执行器 (NPRE) 可让您在 Linux/Unix 计算机上执行 Nagios 插件。您可以监控远程计算机指标(磁盘使用情况、CPU 负载等)
驻留在本地监控机器上的 check_npre 插件
在远程 Linux/Unix 机器上运行的 NPRE 守护进程
96. Nagios 用于监控目的的端口号是什么?
通常Nagios使用以下端口号进行监控:
97. Nagios 中的主动和被动检查是什么?
Nagios 能够通过两种方式监控主机和服务:
积极
主动检查由 Nagios 进程启动
定期进行主动检查
被动地
被动检查通过外部应用程序/流程启动和执行
被动检查结果提交给 Nagios 进行处理
98. Nagios 中的主动和被动检查是什么?
主动检查:
Nagios 守护进程中的检查逻辑启动主动检查。
Nagios 将执行一个插件并传递需要检查的信息。
然后,插件将检查主机或服务的运行状态,并将结果报告回 Nagios 守护程序。
它将处理主机或服务检查的结果并发送通知。
被动检查:
在被动检查中,外部应用程序检查主机或服务的状态。
它将检查结果写入外部命令文件。
Nagios 读取外部命令文件并将所有被动检查的结果放入队列以供稍后处理。
Nagios 可能会根据检查结果信息发出通知、日志警报等。
99. 解释 Nagios 中的主要配置文件及其位置。
主配置文件由几个影响 Nagios 运行方式的指令组成。Nagios 进程和 CGI 读取配置文件。
示例主配置文件将被放入您的设置目录中:
/usr/local/Nagios/etc/resource.cfg
100.什么是 Nagios 网络分析仪?
深入了解所有网络流量来源和安全威胁。
提供了网络流量和带宽数据的中央视图。
它允许系统管理员收集有关网络健康状况的高级信息。
能够在中断、异常行为和威胁影响关键业务流程之前主动解决它们。
101. 使用 Nagios 进行 HTTP 和 SSL 证书监控有哪些好处?
HTTP 证书监控
提高服务器、服务和应用程序的可用性。
快速检测网络中断和协议故障。
启用 Web 事务和 Web 服务器性能监控。
SSL 证书监控
提高了网站可用性。
频繁的应用程序可用性。
它提供了更高的安全性。
102. 解释使用 Nagios 实现的虚拟化。
Nagios 可以在不同的虚拟化平台上运行,如 VMware、Microsoft Visual PC、Xen、Amazon EC2 等。
提供监控不同平台上各种指标的能力
确保快速检测服务和应用程序故障
能够监控以下指标:
CPU 使用率
Memory
联网
虚拟机状态
减少管理开销
103. 说出影响 Nagios 中递归和继承的三个变量。
名称:可以在其他对象定义中引用的模板名称,以便它可以继承该对象的属性/变量。
使用:在这里,您可以指定模板对象的名称
想要继承属性/变量。
register:该变量表示对象定义是否
应该在 Nagios 上注册。
定义一些对象类型{
特定于对象的变量...
名称 模板名称
使用模板名称
注册 [0/1]
}
104.为什么说Nagios是面向对象的?
使用对象配置格式,您可以创建从其他对象定义继承属性的对象定义。因此,Nagios 被称为面向对象的。
对象类型:
服务
主办方
命令
时间段
105. 解释一下 Nagios 中的状态跟踪是什么。
状态跟踪用于 Nagios 中的记录目的。
当对特定主机或服务启用跟踪时,Nagios 将非常仔细地监视该主机或服务。
它将记录检查结果输出中看到的任何变化。
这有助于分析日志文件。
版本控制系统面试题
以下是一些与版本控制系统相关的常见面试问题和答案:
106. 什么是版本控制系统(VCS)?
VCS是一种软件工具,可让开发人员管理软件项目源代码的更改。它使开发人员能够跟踪和管理不同版本的代码文件、与他人协作以及在必要时恢复到早期版本。
107. 使用 VCS 有什么好处?
使用 VCS 有几个好处,包括:
能够跟踪代码随时间的变化
与其他开发人员合作并共享代码的能力
必要时可恢复到早期版本的代码
能够分支代码并同时处理不同的功能或修复
合并来自其他分支或贡献者的更改的能力
增强对代码更改和部署的信心和控制力
108. VCS 有哪些类型?
VCS 主要有两种类型:集中式和分布式。
集中式 VCS:集中式 VCS 有一个中央存储库,用于存储代码文件的所有版本。开发人员从中央存储库中签出文件,进行更改,然后将更改提交回仓库。
分布式 VCS:分布式 VCS 允许开发人员创建代码更改的本地存储库。开发人员可以在本地处理代码更改,将更改提交到本地存储,然后将更改推送到中央存储库或从其他贡献者那里提取更改。
109.Git 和 SVN 有什么区别?
Git 和 SVN 都是流行的 VCS 工具,但它们有一些关键的区别:
Git 是一个分布式 VCS,而 SVN 是一个集中式 VCS。
Git 更加灵活,可以更轻松地分支和合并代码更改。
SVN对处理二进制文件有更好的支持。
Git 通常被认为比 SVN 更快。
虚拟化面试问题
110. 什么是虚拟化?
虚拟化是一种允许多个操作系统或应用程序在单个物理服务器或计算机上运行的技术。它创建 CPU、内存和存储等硬件资源的虚拟实例,这些资源可以分配给不同的虚拟机。
111. 虚拟化有什么好处?
虚拟化有多种好处,包括:
降低硬件成本
提高效率和资源利用率
提高可扩展性和灵活性
提高应用程序的可靠性和可用性
简化 IT 基础设施的管理
112. 虚拟化有哪些不同类型?
虚拟化有多种类型,包括:
服务器虚拟化:在单个物理服务器上运行多个操作系统。
网络虚拟化:创建独立于物理网络基础设施运行的虚拟网络。
存储虚拟化:将物理存储资源组合成单个虚拟存储池。
桌面虚拟化:在一台物理机上运行多个桌面环境。
113. 什么是虚拟机管理程序?
虚拟机管理程序是一层软件,它允许多台虚拟机共享一台物理服务器或计算机,从而实现虚拟化。它管理硬件资源分配给每台虚拟机,并将每台虚拟机与其他虚拟机隔离。
114.什么是虚拟化,它如何与 DevOps 相连?
虚拟化是创建某些东西(例如服务器、存储设备或网络)的虚拟版本。在DevOps中,虚拟化允许团队创建和管理可用于开发、测试和部署的虚拟环境。这有助于提高效率、降低成本并实现更大的灵活性和可扩展性。
115. 在 DevOps 中使用虚拟化有哪些好处?
虚拟化在 DevOps 环境中提供了多种好处,包括:
提高效率:虚拟化可以更快地创建、部署和管理开发和测试环境。
更高的可扩展性:虚拟化使团队能够根据需要快速扩大或缩小其基础设施,而无需额外的物理硬件。
提高灵活性:虚拟化允许创建可轻松修改和调整以满足不断变化的需求的自定义环境。
降低成本:虚拟化可以帮助降低硬件成本并提高资源利用率,从而降低整体基础设施成本。
116. DevOps 中使用了哪些标准虚拟化技术?
DevOps 中通常使用几种虚拟化技术,包括:
虚拟机 (VM):VM 是使用虚拟化软件(例如 VMware 或 VirtualBox)创建的,可以在单个物理机上创建操作系统的多个虚拟实例。
容器:容器是使用 Docker 或 Kubernetes 等容器化软件创建的轻量级、可移植的虚拟环境。容器支持创建可在不同系统之间轻松共享和部署的自定义应用程序环境。
云计算:Amazon Web Services (AWS)、Microsoft Azure 和 Google Cloud Platform (GCP) 等云计算提供商提供虚拟化基础设施和服务,可使用 DevOps 工具和实践轻松管理和扩展。
好了,这些是在参加面试时可能会遇到的一些最常见的 DevOps 面试问题。作为 DevOps 工程师,深入了解流程、工具和相关技术至关重要,这些 DevOps 面试问题和答案将帮助你了解其中一些方面。此外,你还必须对现有的产品、服务和系统有全面的了解。
2.原生鸿蒙,真正独立!部分应用只有基础功能,原因是必须进行大量稳定性测试?
3.招聘|美团--高级测试开发工程师(客户端&服务端方向),base北京