DevOps 工程师面试问题(持续更新)
DevOps 工程师面试问题
DevOps是一种高度技术化的业务方法,它将软件开发置于业务运营的核心,以支持对技术日益增长的需求。
DevOps将把一个拥有单一技能的工程师转变成一个拥有多种技能的工程师,包括Coding、Infrastructure、配置管理、测试、构建和发布。
因为它不局限于任何特定的技术,所以在DevOps环境中工作的人们不断地使用、集成和自动化不同的技术。
围绕着DevOps的理念,新的工作角色正在出现。其中一些是:DevOps Architect、Automation Testing Engineer、Delivery Manager、Security Engineer、Integration Specialist、Release Manager、Programmer Manager等等。
在本文中我们来看看DevOps工程师面试中的常见问题。
一名合格的DevOps工程师将同时具备硬技能和软技能
- 技术技能:DevOps工程师应该能够监督软件开发的各个方面。应聘者必须充分了解公司在该职位上出类拔萃所使用的所有相关工具和语言。
- 分析能力:分析能力可以帮助DevOps工程师理解复杂的情况,识别潜在的问题并开发有效的解决方案。对于DevOps工程师来说,这是一项至关重要的技能,因为它对于软件开发的故障排除过程非常重要。
- 解决问题:这项技能包括寻找创造性的方法来解决DevOps专业人士可能遇到的问题。这个专业人员扮演的最关键的角色之一是识别操作中的问题,并与开发人员合作创建解决方案。解决问题的技能帮助DevOps工程师快速确定解决方案,以确保公司的运营部门能够尽快恢复工作。
- 沟通:在许多职业中,包括DevOps,能够清楚地与他人进行口头和文本沟通是一项基本技能。DevOps工程师需要很强的沟通技巧,以便在公司的开发和运营部门之间交换信息。
- 时间管理:这项技能使个人能够确定责任的轻重缓急,并计划最有效的方式来完成任务,以确保他们首先完成最重要的任务。DevOps管理者通常有很多职责,因此有必要正确地划分它们的优先级。
关于DevOps背景和经验的问题
以下问题有助于面试官了解您在DevOps方面的知识和经验:
- 你最喜欢DevOps的方法论是什么?
- 应用DevOps方法有哪些缺点?
- 你是否接受过DevOps的教育/培训吗?
- 请告诉我们你说经历过得一个DevOps项目成功的经验?
- 你有过DevOps项目失败的经历吗?为什么不成功?
- 你能用什么语言编写代码?
- 你有多少年的DevOps经验?
- 你在DevOps的最大优势是什么?
- 你有过哪些DevOps工具的使用经验?
- 描述您在DevOps中最具挑战性的经验。
深度问题
- 提供一个DevOps项目并解释它们。
- 说出敏捷和DevOps之间的区别?
- 提供一个实际的DevOps项目案例。
- 什么是基础设施代码(IaC)
- 定义反模式。
- 在DevOps开发过程中,您应用了哪些分支策略?
- 基本的git命令有哪些?
常见的DevOps工程师面试问题
- 什么是DevOps?
- 根据您的经验,DevOps有哪些优点?
- DevOps中的版本控制是什么?
- 为什么在DevOps中使用版本控制?
- 什么是持续集成?
- 为什么DevOps业务要努力实现持续集成?
Q1. DevOps & Agile之前的区别?
总结如下表格:
Features | DevOps | Agile |
---|---|---|
Agility | Agility in both Development & Operations | Agility in only Development |
Processes/ Practices | Involves processes such as CI, CD, CT, etc. | Involves practices such as Agile Scrum, Agile Kanban, etc. |
Key Focus Area | Timeliness & quality have equal priority | Timeliness is the main priority |
Release Cycles/ Development Sprints | Smaller release cycles with immediate feedback | Smaller release cycles |
Source of Feedback | Feedback is from self (Monitoring tools) | Feedback is from customers |
Scope of Work | Agility & need for Automation | Agility only |
DevOps vs Agile
Q2. DevOps的5大核心原则是什么?
- 敏捷
- 协作(跨部门、跨组织协作)
- 持续(持续集成、持续部署、持续交付)
- 系统化(组织、技术、流程)
- 自动化(能自动化的就要自动化,或者说自动化一切)
Q3. DevOps平台通常具备的核心特性有哪些?
- 完整的DevOps平台至少提供统一的工作台,支持部门的协同工作;
- 打通工具链,做到自动化和自助化;
- 实现研发过程的度量,建立组织基线数据;
- 无缝支持多种环境公有云、私有云,常见的容器、VM;
- 运行期提供应用高可靠、伸缩漂移等能力;
如果团队要自主掌握庞大的工具需要大规模的团队,而使用统一的工作台可以简化整个工具的使用。
基于容器云的DevOps平台主要分为三层:
- 基础设施层:包括IaaS,CaaS,我们分别是基于Kubernetes、Docker实现,上层有一层不同环境的适配,可以无缝对接私有云、公有云、混合云;
- 基础服务层:包括服务管理与调度的基础能力,如注册中心,编排,伸缩漂移;还有一堆具体的企业级或互联网式的云服务;
- DevOps层:提供支撑全生命周期的多个领域系统更多的是工作流程(需求、设计、开发、测试、发布等)的串接,看板等文化的体现。
具备一键发布能力,通过DevOps平台,可以一键从源代码获得可访问的环境(自动根据应用的部署编排,实现了自动化的编译、集成、打包、部署、启动等)。
实施DevOps后的改变,首先团队变得更自治,成为使命型组织;沟通协作更顺畅;实现了开发人员的自助化服务;开发运维机器人提供更多的辅助功能。
Q4. DevOps 需要什么?
在我看来,这个答案应该从解释市场的总体趋势开始。软件产品没有发布大的特性集,而是试图从小的特性是否可以通过一系列的发布提供给客户。
这有许多优点,如客户的快速反馈,更好的软件质量等,从而导致高客户满意度。
为此,软件企业必须:
- 增加部署频率
- 降低新版本的失败率
- 缩短修复之间的交付周期
- 在新版本崩溃时平均恢复时间更快
DevOps满足所有这些需求,并帮助实现无缝的软件交付。你可以举一些公司的例子,他们每天都要执行数十、数百甚至数千个代码部署,同时提供世界级的稳定性、可靠性和安全性。
Q5. DevOps与Agile/SDLC有何不同?
我建议你按照下面的解释去做:
敏捷是一套关于如何生产即开发软件的价值观和原则。例如:如果您有一些想法,并且希望将这些想法转化为可运行的软件,那么您可以使用敏捷价值观和原则来实现这一点。
但是,该软件可能只在开发人员的笔记本电脑或测试环境中工作。您需要一种快速、轻松、可重复地将软件以安全、简单的方式移动到生产基础架构中的方法。为此,您需要DevOps工具和技术。
你可以这样总结:敏捷软件开发方法论关注于软件的开发,而DevOps则负责以最安全、最可靠的方式开发和部署软件。
Q6. 你知道哪些DevOps的工具?你用过哪些工具?
最流行的DevOps工具如下:
- Git : Version Control System tool
- Jenkins : Continuous Integration tool
- Selenium : Continuous Testing tool
- Puppet, Chef, Ansible : Configuration Management and Deployment tools
- Nagios : Continuous Monitoring tool
- Docker : Containerization tool
你也可以提到任何其他工具,但一定要包括上述工具在你的答案。
答案的第二部分有两种可能性:
如果你有使用以上所有工具的经验,那么你可以说我使用了所有这些工具来开发高质量的软件,并轻松、频繁、可靠地部署这些软件。
如果你只对上面的一些工具有经验,那么就提到那些工具,说我对这些工具有专门知识,并对其余的工具有一个概述。
Q7. 所有这些工具是如何协同工作的?
下面给出了一个通用的逻辑流程,其中所有内容都实现了自动化,以实现无缝交付。但是,根据要求,这种流程可能因组织而异。
- 开发人员开发代码,这些源代码由Git等版本控制系统工具管理。
- 开发人员将此代码发送到Git存储库,对代码所做的任何更改都将提交到此存储库。
- Jenkins使用Git插件从存储库中提取这些代码,并使用Ant或Maven等工具进行构建。
- 配置管理工具,如puppet deploys&provisions测试环境,然后Jenkins在使用selenium等工具进行测试的测试环境中发布此代码。
- 测试完代码后,Jenkins将其发送到生产服务器上进行部署(甚至生产服务器也由puppet之类的工具进行配置和维护)。
- 部署之后,它会被Nagios之类的工具持续监控。
- Docker容器提供测试环境来测试构建特性。
Q8. DevOps的优点是什么?
对于这个答案,您可以使用您过去的经验,并解释DevOps如何在您以前的工作中帮助您。
如果你没有任何这样的经验,那么你可以提到以下优点:
技术优势:
- 持续软件交付
- 不太复杂的问题需要解决
- 更快地解决问题
商业利益:
- 更快地交付功能
- 更稳定的操作环境
- 更多时间用于增值(而不是修复/维护)
Q9. DevOps帮助我们实现的最重要的事情是什么?
据我所知,DevOps帮助我们实现的最重要的事情是尽快将更改投入生产,同时将软件质量保证和法规遵从性方面的风险降到最低。这是DevOps的主要目标。
但是,您可以添加DevOps的许多其他积极影响。例如,团队之间更清晰的沟通和更好的工作关系,即Ops团队和Dev团队共同协作,提供高质量的软件,从而提高客户满意度。
Q10. 解释你对过去合作过的组织的软件开发和技术操作的理解和专业知识。
对于这个答案,分享你过去的经验,并试着解释一下你在以前的工作中有多灵活。您可以参考以下示例:
DevOps工程师几乎总是在一个全天候的关键业务在线环境中工作。
我能够适应随叫随到的工作,并且能够承担实时、实时的系统责任。
我成功地自动化了支持连续软件部署的过程。
我有使用公共/私有云、Chef或Puppet等工具、Python和PHP等工具编写脚本和实现自动化的经验,还有敏捷方面的背景。
Q11. DevOps的反模式是什么?
一个模式是通常遵循的常用用法。如果其他人通常采用的模式对您的组织不起作用,并且您继续盲目地遵循它,那么您实际上是在采用反模式。
关于DevOps有很多神话。其中包括:
- DevOps is a process
- Agile equals DevOps?
- We need a separate DevOps group
- Devops will solve all our problems
- DevOps means Developers Managing Production
- DevOps is Development-driven release management
- DevOps is not development driven.
- DevOps is not IT Operations driven.
- We can’t do DevOps – We’re Unique
- We can’t do DevOps – We’ve got the wrong people
Q12. 什么是持续集成?
我建议您首先给出连续集成(CI)的一个小定义。这是一种开发实践,要求开发人员每天多次将代码集成到共享存储库中。然后,每个Check in都由一个自动化的Build进行验证,从而允许团队尽早发现问题。
我建议你解释一下你在以前的工作中是如何实施的。
Q13. 为什么需要开发和测试的持续集成?
对于这个答案,您应该关注持续集成的需求。我的建议是在你的回答中提到以下解释:
开发和测试的持续集成通过在完成所有开发之后取代传统的测试实践,提高了软件的质量,减少了交付所需的时间。它使开发团队能够很容易地在早期发现和定位问题,因为开发人员每天需要将代码集成到共享存储库中好几次(更频繁)。然后自动测试每个签入。
Q14. 持续集成的成功因素是什么?
这里您必须提到持续集成的需求。你可以在回答中包括以下几点:
- 维护代码存储库(Maintain a code repository)
- 自动化构建(Automate the build)
- 进行构建自检(Make the build self-testing)
- 每个人每天都致力于基线(Everyone commits to the baseline every day)
- 每个提交(到基线)都应该构建(Every commit (to baseline) should be built)
- 保持快速构建(eep the build fast)
- 在生产环境的克隆中测试(Test in a clone of the production environment)
- 使获得最新可交付成果变得容易(Make it easy to get the latest deliverables)
- 每个人都可以看到最新版本的结果(Everyone can see the results of the latest build)
- 自动化部署(Automate deployment)
Q15. 解释如何将Jenkins从一台服务器移动或复制到另一台服务器?
我将通过将作业目录从旧服务器复制到新服务器来完成此任务。有多种方法可以做到这一点;我在下面提到了这些方法:
你可以:
只需复制相应的作业目录,即可将作业从一个Jenkins安装移动到另一个安装。
通过用不同的名称克隆作业目录来复制现有作业。
通过重命名目录重命名现有作业。请注意,如果更改作业名称,则需要更改尝试调用重命名作业的任何其他作业。
Q16. 解释如何在Jenkins中创建备份和复制文件?
这个问题的答案很直接。要创建备份,只需定期备份Jenkins的主目录。
它包含所有生成作业配置、从属节点配置和生成历史记录。
要创建Jenkins安装程序的备份,只需复制此目录。
也可以复制作业目录以克隆或复制作业或重命名目录。
Q17. 解释一下你如何安排Jenkins的Job?
我对这个问题的回答将首先提到如何创建Jenkins的Job。转到Jenkins首页,选择“new job”,然后选择“build a free style软件项目”。
然后你就可以了解这个自由式工作的要素:
- 可选的SCM,例如源代码所在的CVS或Subversion。
- 控制Jenkins何时执行构建的可选触发器。
- 某种构建脚本,在实际工作发生的地方执行构建(ant、maven、shell脚本、批处理文件等)。
- 从构建中收集信息的可选步骤,例如归档工件和/或记录javadoc和测试结果。
- 将构建结果通知其他人/系统的可选步骤,如发送电子邮件、IMs、更新问题跟踪程序等。
Q18. 提到Jenkins中一些有用的插件。
下面,我提到了一些重要的插件:
- Maven 2项目(Maven 2 Project)
- 亚马逊EC2(Amazon EC2)
- HTML发布者(HTML Publisher)
- 复制工件(Copy artifact)
- 加入(Join)
- 绿球(Green Balls)
这些插件,我觉得是最有用的插件。如果你想包含上面没有提到的任何其他插件,你也可以添加它们。但是,请确保您首先提到上述插件,然后添加自己的插件。
Q19. 你要怎么保护Jenkins?
我保护Jenkins的方法如下所述。如果您有其他方法,请在下面的评论部分提及:
- 确保全球安全处于开启状态。
- 确保Jenkins通过适当的插件与我公司的用户目录集成。
- 确保启用了矩阵/项目矩阵来微调访问。
- 使用自定义版本控制脚本在Jenkins中自动设置权限/特权的过程。
- 限制对Jenkins数据/文件夹的物理访问。
- 定期对同一系统运行安全审计。
Jenkins是DevOps中广泛使用的许多流行工具之一。
Q20. 如何在DevOps生命周期中自动化测试?
我提到了一个通用流程,您可以在下面参考:
在DevOps中,开发人员需要将源代码中所做的所有更改提交到一个共享存储库。
像Jenkins这样的持续集成工具将在每次对代码进行更改时从这个共享存储库中提取代码,并将其部署到Selenium等工具所做的持续测试中,如下图所示。
通过这种方式,代码中的任何更改都会被不断地测试,这与传统方法不同
Q21. 为什么持续测试对DevOps很重要?
您可以这样回答这个问题:“持续测试允许立即测试代码中所做的任何更改。这避免了将“大爆炸”测试留到周期结束时产生的问题,例如发布延迟和质量问题。
通过这种方式,持续测试有助于更频繁和高质量的发布。”
Q22. 持续测试工具的关键要素是什么?
持续测试的关键要素是:
- 风险评估:它包括风险缓解任务、技术债务、质量评估和测试覆盖优化,以确保构建准备好进入下一阶段。
- 策略分析:它确保所有流程与组织不断发展的业务保持一致,并满足法规遵从性需求。
- 需求可追溯性:确保满足真实需求,不需要返工。对象评估用于确定哪些需求处于风险中、按预期工作或需要进一步验证。
- 高级分析:它在诸如静态代码分析、变更影响分析和范围评估/优先级划分等领域使用自动化,以首先防止缺陷,并在每次迭代中完成更多的工作。
- 测试优化:它确保测试产生准确的结果并提供可操作的结果。包括测试数据管理、测试优化管理和测试维护
- 服务虚拟化:它确保访问真实世界的测试环境。服务可视化允许访问所需测试阶段的虚拟形式,减少了测试环境设置和可用性的浪费时间。
Q23. 您对哪种测试工具比较满意?该工具的优点是什么?
这里提到您使用过的测试工具,并据此确定您的答案。我在下面提到了一个例子:
我一直致力于Selenium ,以确保高品质和更频繁的释放。
Selenium 的一些优点是:
- 它是免费和开源的
- 它拥有庞大的用户群和帮助社区
- 它具有跨浏览器兼容性(Firefox、chrome、Internet Explorer、Safari等)
- 它具有良好的平台兼容性(Windows、Mac OS、Linux等)
- 它支持多种编程语言(Java、C#、Ruby、Python、Pearl等)
- 它有新的和定期的存储库(repository)开发
- 它支持分布式测试
问题:成功实施持续集成的因素有哪些?
问题:什么是持续测试?
回答:持续测试是DevOps中的另一个关键因素。DevOps工程师可能负责自己的测试,或者与QA、测试人员和UX开发人员一起管理团队。
无论哪种方式,都必须具备持续测试的知识。通过清楚地定义术语来展示它。
持续测试是一个过程,在这个过程中,测试是自动化的,以便快速有效地进行。这是DevOps文化转变的关键因素。
问题:为什么公司使用自动化测试来执行持续测试?
回答:自动化是DevOps中的一个重要因素。
自动化测试有助于减少可重复的手工测试,通过自动化测试可以节省大量的测试时间和资源,消除人为错误的可能性,降低测试成本。
问题:什么是持续交付(Continuous Delivery)?
持续交付是一个过程,在这个过程中,代码更改将自动生成、测试并准备发布到生产环境。
DevOps 工程师面试问题(持续更新)相关推荐
- 机器学习算法工程师面试集锦(更新中)
机器学习算法工程师面试集锦(更新中) 面试问题汇总 常用的损失函数 介绍交叉验证 特征选择方法 机器学习项目的一般步骤 经验风险最小化与结构风险最小化 训练决策树时的参数是什么 在决策树的节点处分割标 ...
- JAVA面试大全(持续更新中...)
本文旨在收集Java面试过程中出现的问题,力求全面,仅作学习交流,欢迎补充,持续更新中-,部分段落选取自网上,部分引用文章已标注,部分已记不清了,如侵权,联系本人 Java基础 1.面向对象的概述 面 ...
- 我在深圳面试汇总(--持续更新中)
第一家:拓保软件有限公司(福田区)(无笔试) 1.statement与preparestatement的区别! 2.你用过哪些设计模式? 3.hibernate与ibatis的区别? 4.对sprin ...
- 万能的 JS(万字、基础、原理、面试、持续更新。。。)
万能的 JS 心无杂念,行路也将势如破竹. 万能的 JS JS(JavaScript 轻量级动态脚本语言) 面向对象思想: 作用域 预解释 (变量提声) 浏览器天生自带 JS 中内存的分类 JS 数据 ...
- java高级面试视频,持续更新~
Java高级工程师面试:Java中反射机制的理解!反射机制的使用原理深入理解Java中的反射反射的概念反射的原理反射的主要用途反射的运用获得Class对象判断是否是某个类的实例创建实例获取方法获取构造 ...
- 计算机基础面试(持续更新中)
一.计算机网络 TCP/UDP TCP/IP即传输控制协议,是面向连接的协议,发送数据前要先建立连接,TCP提供可靠的服务,也就是说,通过TCP连接传输的数据不会丢失,没有重复,并且按顺序到达.(类似 ...
- 2021React面试精选——持续更新
目录 React的请求应该放在哪个⽣命周期中 jsx的本质是什么 React组件通信如何实现 React最新的⽣命周期是怎样的 setState到底是异步还是同步 React中keys的作用是什么 受 ...
- 嵌入式面试总结(持续更新)
文章目录 1. 字符串数组打印(指针的步长) 1.1 指针变量+1 1.2 字符串数组的步长 1.3 跨行加⭐⭐⭐⭐⭐ 例子[1] 例子[2] 2.大端小端 3.异步IO和同步IO区别 4.变量a的不 ...
- Java开发面试(持续更新)
文章目录 一.集合 1.数组和集合的区别 2.List.Set.Map的区别 二.Vue 1.Vue常用的组件有哪些 三.数据库 1.多表查询 2.事务 四.框架 1.SpringBoot常用的注解 ...
最新文章
- php函数get_magic_quotes_gpc详解
- GNU make manual 翻译(五十一)
- IE6,IE7,FF等浏览器不兼容原因及解决办法(转)
- 基于STM32的SPI基本介绍
- AB1601GPIO不支持较高频率的脉冲中断
- swift:创建表格UITableView
- 罗斯蒙特电磁流量计8723说明书_罗斯蒙特8700系列电磁流量计和传感器的几种类型!...
- Excel 宏编码实现,指定列的字符串截取
- jquery-1.10.2.min.map是什么,怎么用?
- android shell 批量打包,Android执行shell命令打包
- .Net Core中使用ref和SpanT提高程序性能
- 1.node.js 概述
- Grid Search 网格搜索 介绍
- 论文阅读:Dual Reader-Parser on Hybrid Textual and Tabular Evidence for Open Domain Question Answering
- doc 问卷调查模板表_问卷调查表格式范本.doc
- Mysql 启动命令详解
- 史上最全零基础学习java干货!千万别错过!
- 我的MBTI职业性格测试
- CCF关于举办2019年NOI教师培训(首师附中)的通知
- Git推送错误: failed to push some refs to ‘git@gitee.com:XXXXXX’