DevOps通用及版本控制面试题

转载自   DevOps通用及版本控制面试题

通用DevOps面试问题

此类别将包含与任何特定DevOps阶段无关的问题。这里的问题旨在测试您对DevOps的理解,而不是关注特定工具或阶段。 

问题一:

DevOps和Agile之间的根本区别是什么?
两者之间的差异列于下表中。

 

问题二:

为什么需要DevOps?
据我所知,这个答案应该从解释一般市场趋势开始。公司不是发布大量功能,而是试图通过一系列发布列表来查看是否可以将小功能传输给客户。这具有许多优点,例如来自客户的快速反馈,更好的软件质量等,这反过来导致高的客户满意度。为实现这一目标,公司必须:

  • 增加部署频率

  • 降低新版本的故障率

  • 修复之间缩短的提前期

  • 新版本崩溃时平均恢复时间更快

DevOps满足所有这些要求,有助于实现无缝的软件交付。您可以举出像Etsy,Google和亚马逊这样的公司的例子,在5年前,这些公司已经采用DevOps达到了无法想象的性能水平。他们每天进行数十,数百甚至数千次代码部署,同时提供世界级的稳定性,可靠性和安全性。

问题三:

DevOps与Agile / SDLC有何不同?

Agile是一套关于如何生成即开发软件的价值观和原则。示例:如果您有一些想法,并且希望将这些想法转变为可用的软件,则可以使用Agile的价值观和原则来实现这一点。但是,该软件可能只适用于开发人员的笔记本电脑或测试环境。如果您希望以安全,简单的方式快速,轻松,可重复地将该软件移植到生产基础架构中。那么,您需要DevOps工具和技术。

Agile软件开发方法侧重于软件的开发,但另一方面,DevOps负责开发以及以最安全和最可靠的方式部署软件。

问题四:

最顶级的DevOps工具有哪些?

最受欢迎的DevOps工具如下所述:

  • Git:版本控制系统工具

  • Jenkins:持续集成工具

  • Selenium:连续测试工具

  • Puppet,Chef,Ansible:配置管理和部署工具

  • Nagios:持续监控工具

  • Docker:容器化工具

问题五:

所有这些工具如何协同工作?
下面给出了一个通用的逻辑流程,其中所有内容都自动进行无缝交付 但是,根据要求,此流程可能因组织而异。

1.开发人员开发代码,此源代码由Git等版本控制系统工具管理。

2.开发人员将此代码发送到Git存储库,并且代码中所做的任何更改都将提交到此存储库。

3.Jenkins使用Git插件从存储库中提取此代码,并使用Ant或Maven等工具构建它。

4.配置管理工具,如puppet部署和配置测试环境,然后Jenkins在使用selenium等工具进行测试的测试环境中发布此代码。

5.一旦代码被测试,Jenkins就会将其发送到生产服务器上进行部署(甚至生产服务器也由puppet等工具进行配置和维护)。

6.部署后,Nagios等工具会持续监控。

7.Docker容器提供测试环境以测试构建功能。

 

问题六:

DevOps有哪些优势?

对于这个答案,您可以使用您过去的经验并解释DevOps如何帮助您完成上一份工作。如果您没有任何此类经验,那么您可以提及以下优势。

技术优势:
持续的软件交付
修复不太复杂的问题
更快地解决问题

商业利益:

更快速地传递功能

更稳定的操作环境
有更多时间可以增加价值(而不是修复/维护)

问题七:

DevOps帮助我们实现的最重要的事情是什么?
据我所知,DevOps帮助我们实现的最重要的事情是尽可能快地将更改投入生产,同时最大限度地降低软件质量保证和合规性的风险。这是DevOps的主要目标。

但是,您可以添加DevOps的许多其他积极效果。例如,团队之间更清晰的沟通和更好的工作关系,即Ops团队和开发团队合作共同提供高质量的软件,从而提高客户满意度。

问题八:

DevOps的反模式有哪些?
模式是通常遵循的常见用法。如果其他人普遍采用的模式对您的组织不起作用,并且您继续盲目地遵循它,那么您实际上采用的是反模式。有关于DevOps的谬见。包括下面一些:

DevOps是一个过程
Agile等于DevOps
我们需要一个单独的DevOps组
Devops将解决我们所有的问题
DevOps意味着开发人员管理生产
DevOps是开发驱动的发布管理
DevOps不是开发驱动的。
DevOps不是IT运营驱动的。
我们不能做DevOps - 我们是独一无二的
我们不能做DevOps - 我们遇到了错误的人

版本控制系统(VCS)面试问题

下面让我们看一下关于VCS的面试问题:

问题一:

什么是版本控制?
这可能是您在面试中将面临的最简单的问题。我的建议是首先给出版本控制的定义。它是一个记录文件或文件集随时间变化的系统,以便您以后可以调用特定版本。版本控制系统由一个中央共享存储库组成,队友可以在其中提交对文件或文件集的更改。然后你可以提到版本控制的用途。

版本控制允许您:

将文件还原为以前的状态。
将整个项目还原为以前的状态。
比较一段时间内的变化
查看最后一次修改可能导致问题的内容。
谁在何时引入了一个问题。

问题二:

使用版本控制有什么好处?

我建议你包括版本控制的以下优点:

  1. 使用版本控制系统(VCS),所有团队成员都可以随时在任何文件上自由工作。稍后VCS将允许您将所有更改合并到一个通用版本中。

  2. 所有过去的版本和变体都整齐地打包在VCS中。当您需要它时,您可以随时请求任何版本,您将获得完整项目的快照。

  3. 每次保存项目的新版本时,VCS都要求您提供已更改内容的简短说明。此外,您还可以查看文件内容的确切更改内容。这可以让您知道谁在项目中做了哪些更改。

  4. 像Git这样的分布式VCS允许所有团队成员拥有项目的完整历史记录,因此如果中央服务器出现故障,您可以使用任何团队成员的本地Git存储库。

问题三:

描述您使用的分支策略。
这个问题被要求测试你的分支经验,告诉他们你在以前的工作中如何使用分支以及它的用途是什么,你可以参考以下几点:

功能分支:
功能分支模型保留分支内特定功能的所有更改。通过自动化测试对功能进行全面测试和验证后,分支将合并为主服务器。
任务分支
在此模型中,每个任务都在其自己的分支上实现,任务键包含在分支名称中。很容易看出哪个代码实现了哪个任务,只需在分支名称中查找任务键。

发布分支:
一旦开发分支获得了足够的发布功能,您就可以克隆该分支以形成发布分支。创建此分支将启动下一个发布周期,因此在此之后不能添加任何新功能,只有错误修复,文档生成和其他面向发布的任务才能进入此分支。一旦准备好发布,该版本将合并到主服务器并标记版本号。此外,它应该合并回到开发分支,自发布以来可能已经取得了进展。
最后告诉他们分支策略因组织而异,所以我知道基本的分支操作,如删除,合并,检查分支等。

问题四:

您熟悉哪种VCS工具?

你可以提到你曾经使用过的VCS工具:“我已经研究过Git,它对SVN等其他VCS工具的一个主要优势就是它是一个分布式版本控制系统。” 
分布式VCS工具不一定依靠中央服务器来存储项目文件的所有版本。相反,每个开发人员都“克隆”存储库的副本,并在自己的硬盘上拥有项目的完整历史记录。

问题五:

什么是Git?
我建议您首先解释一下git的体系结构来尝试这个问题,如下图所示。您可以参考下面给出的解释:

Git是一个分布式版本控制系统(DVCS)。它可以跟踪文件的更改,并允许您恢复到任何特定的更改。

与SVN等其他版本控制系统(VCS)相比,其分布式架构具有许多优势,一个主要优点是它不依赖于中央服务器来存储项目文件的所有版本。相反,每个开发人员“克隆”我在下图中使用“本地存储库”显示的存储库副本,并在其硬盘驱动器上具有项目的完整历史记录,以便在出现服务器中断时,只需要恢复所需的全部内容是你队友的本地Git存储库之一。

还有一个中央云存储库,开发人员可以在其中提交更改并与其他团队成员共享,如图所示,所有协作者都在提交更改“远程存储库”。 

 

问题六:

在Git中,您如何还原已经推送并公开的提交?
此问题可以有两个答案,因此请确保包含两个答案,因为根据具体情况可以使用以下任何选项:

在新提交中删除或修复错误文件,并将其推送到远程存储库。这是修复错误的最自然方式。对文件进行必要的更改后,将其提交到远程存储库,使用

git commit -m “commit message”

创建一个新的提交,撤消在错误提交中所做的所有更改。为此,我将使用命令

git revert <错误提交的名称>

问题七:

你如何将N次提交压缩成一次提交?

将N个提交压缩成单个提交有两种选择。在您的答案中包括以下两个选项:
如果要从头开始编写新的提交消息,请使用以下命令

git reset –soft HEAD~N &&
git commit

如果你想用现有提交消息的串联开始编辑新的提交消息,那么你需要提取这些消息并将它们传递给Git commit,我将使

git reset –soft HEAD~N &&
git commit –edit -m”$(git log –format=%B –reverse .HEAD@{N})”

问题八:

什么是Git bisect?你怎么用它来确定(回归)bug的来源?
我建议你先给出一个Git bisect的小定义,Git bisect用于查找使用二进制搜索引入bug的提交。Git bisect的命令是

git bisect <子命令> <选项>

现在你已经提到了上面的命令,解释一下这个命令会做什么,这个命令使用二进制搜索算法来查找项目历史中的哪个提交引入了一个bug。您可以通过首先告诉它已知包含该错误的“错误”提交以及在引入错误之前已知的“良好”提交来使用它。然后Git bisect在这两个端点之间选择一个提交,并询问您所选的提交是“好”还是“坏”。它继续缩小范围,直到找到引入更改的确切提交。

问题九:

什么是Git rebase以及它如何在合并之前用于解决功能分支中的冲突?

根据我的说法,您应该首先说git rebase是一个命令,它将另一个分支合并到您当前正在工作的分支中,并将所有位于重新分支之前的本地提交移到该历史记录的顶部。

现在,一旦您为一个示例定义了Git rebase时间,以显示如何在合并之前使用它来解决功能分支中的冲突,如果从master创建了一个功能分支,从那时起主分支已收到新的提交,Git rebase可用于将要素分支移动到主要提示。

该命令有效地将重放在master的tip处的功能分支中所做的更改,从而允许在该过程中解决冲突。完成后,这将允许功能分支相对容易地合并到主服务器中,有时作为简单的快进操作。

问题十:

如何配置Git存储库以在提交之前运行代码健全性检查工具,并在测试失败时阻止它们?

我建议你先做一个简单的检查,完整性测试或烟雾测试,确定继续测试是否合理可行。

现在解释如何实现这一点,可以通过与存储库的预提交hook相关的简单脚本来完成。即使在您需要输入提交消息之前,也会在提交之前触发预提交hook。在此脚本中,可以运行其他工具,例如linters,并对提交到存储库中的更改执行完整性检查。

最后给出一个例子,你可以参考下面的脚本:

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

如果需要通过标准Go源代码格式化工具gofmt传递任何即将提交的.go文件。可以通过非零状态退出,使脚本有效地阻止将提交应用于存储库。

问题十一:

如何找到特定提交中已更改的文件列表?

对于这个问题,答案不仅仅只是告诉命令,解释这个命令究竟会做什么。
你可以这么说,为了获得在特定提交中更改的列表文件使用命令

git diff-tree -r {hash}

给定提交哈希,这将列出在该提交中更改或添加的所有文件。-r标志使命令列表单个文件,而不是仅将它们折叠到根目录名称中。

你也可以包括下面提到的点,虽然它是完全可选的,但有助于给面试官留下深刻的印象。

输出还将包含一些额外的信息,可以通过包含两个标志来轻松抑制:

git diff-tree –no-commit-id –name-only -r {hash}

这里-no-commit-id将禁止提交哈希值出现在输出中,而-name-only只会打印文件名而不是它们的路径。

问题十二:

每次存储库通过推送接收新提交时,如何设置脚本运行?

每次存储库通过push接收新提交时,有三种方法可以配置脚本运行,需要根据需要触发脚本的时间来定义预接收,更新或后接收hook。

将提交提交到目标存储库时,将调用目标存储库中的预接收hook。绑定到此hook的任何脚本都将在更新任何引用之前执行。这是一个有用的hook,用于运行有助于实施开发策略的脚本。

Update hook以类似于预接收hook的方式工作,并且在实际进行任何更新之前也会触发。但是,对于已推送到目标存储库的每个提交,都会调用一次update hook。

最后,在将更新接受到目标存储库后,将调用存储库中的post-receive hook。这是配置简单部署脚本,调用一些持续集成系统,向存储库维护人员发送通知电子邮件等的理想场所。

hook是每个Git存储库的本地存储,并且没有版本化。脚本可以在“.git”目录内的hooks目录中创建,也可以在别处创建,并且可以在目录中放置这些脚本的链接。

问题十三:

如果分支已经合并为主分支,你怎么知道Git?

我建议你包括下面提到的命令:

git branch -merged     //列出已合并到当前分支的分支。
git branch -no-merged  //列出了尚未合并的分支。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/325972.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信和支付宝支付模式详解及实现(.Net标准库)

支付基本上是很多产品都必须的一个模块&#xff0c;大家最熟悉的应该就是微信和支付宝支付了&#xff0c;不过更多的可能还是停留在直接sdk的调用上&#xff0c;甚至和业务系统高度耦合&#xff0c;网上也存在各种解决方案&#xff0c;但大多形式各异&#xff0c;东拼西凑而成。…

.NET遇上Docker - 使用Docker Compose组织Ngnix和.NETCore运行

本文工具准备&#xff1a; Docker for WindowsVisual Studio 2015 与 Visual Studio Tools for Docker或 Visual Studio 2017 需要在安装时选择“容器开发支持”&#xff0c;如图&#xff1a; Docker的思想是将不同的应用放在不同的容器中分开运行&#xff0c;如运行.NetCore …

为什么大公司一定要使用DevOps

转载自 为什么大公司一定要使用DevOps 0 DevOps的意图 究竟什么是DevOps? 要想回答这个问题&#xff0c;首先要明确DevOps这个过程参与的人员是谁&#xff1f;即开发团队和IT运维团队&#xff01;那么&#xff0c;DevOps的意图是什么呢&#xff1f;即在两个团队之间&#…

怎样访问Springboot项目中static中的资源

第一步 成功启动 第二步 输入 协议://ip:端口/资源的名字 eg http://localhost:8080/06-demo-point.html

asp.net core源码飘香:Logging组件

简介&#xff1a; 作为基础组件&#xff0c;日志组件被其他组件和中间件所使用&#xff0c;它提供了一个统一的编程模型&#xff0c;即不需要知道日志最终记录到哪里去&#xff0c;只需要调用它即可。 使用方法很简单&#xff0c;通过依赖注入ILogFactory&#xff08;CreateL…

互联网账户系统如何设计

转载自 互联网账户系统如何设计 在很多互联网公司业务发展的早期&#xff0c;业务模式比较单一的情况下&#xff0c;涉及用户账户资金交易相关的逻辑也比较简单&#xff0c;但是随着公司业务模式的不断创新及类型的多元化发展&#xff0c;会渐渐发现现有系统账户逻辑越来越雍…

数组(ArrayList)底层怎样扩容

ArrayList维护了数组transient Object[] elementData; 初始化 数组需要扩容时

Visual Basic 15语言新特性

对于C#的两个重要特性元组和Ref返回值&#xff0c;Visual Basic 15提供了对等的实现。这两个特性都是“不完全的”&#xff0c;但已经可以提供足够的变通方案&#xff0c;让VB应用程序可以消费使用了这些特性的C#库。 元组 在VB中&#xff0c;从单个函数调用直接返回多个值是…

Struts2面试问题

转载自 Struts2面试问题 1.什么是Struts2&#xff1f; Apache Struts2是一个用Java构建Web应用程序的开源框架。Struts2基于OpenSymphony WebWork框架。它从Struts1中得到了很大的改进&#xff0c;使其更加灵活&#xff0c;易于使用和扩展。Struts2的核心组件是Action&…

谷歌工程师文化中的几个核心原则

转载自 谷歌工程师文化中的几个核心原则 每周&#xff0c;一组谷歌员工都会在厕所的墙壁上粘贴一页来分享本周的测试小建议。有时这页纸会讨论依赖注入&#xff0c;并提供一个简单的示例展示如何用不同语言使用它&#xff1b;有时它可能会分享如何安装一个用于测量团队代码库…

初探CSRF在ASP.NET Core中的处理方式

前言 前几天&#xff0c;有个朋友问我关于AntiForgeryToken问题&#xff0c;由于对这一块的理解也并不深入&#xff0c;所以就去研究了一番&#xff0c;梳理了一下。 在梳理之前&#xff0c;还需要简单了解一下背景知识。 AntiForgeryToken 可以说是处理/预防CSRF的一种处理…

HBase体系架构说明

HBase体系架构说明&#xff01; client&#xff1a;两种—-Hbase shell 命令行接口 JavaAPI client访问Region不能直接访问&#xff0c;首先client需要先连接到zookeeper&#xff0c;zookeeper管理HMaster&#xff0c;说明&#xff0c;hdfs集群&#xff0c;在没有zookeepe…

asp.net core 编译mvc,routing,security源代码进行本地调试

因为各种原因&#xff0c;需要查看asp.net core mvc的源代码来理解运行机制等等&#xff0c;虽说源代码查看已经能很好的理解了。但是能够直接调试还是最直观的。所有就有了本次尝试。因调试设置源代码调试太辍笔&#xff0c;所以不用这个方法&#xff0c;转而使用编译源代码的…

并查集判断是否有环存在

题目描述 思路分析 代码实现 package com.atguigu.disjointSet;public class djset {public static int VERTICES6;public static void initialise(int parent[]){int i;for (i 0; i < VERTICES; i) {parent[i]-1;}}public static int find_root(int x,int parent[]){int …

Visual Studio 2017更新,侧重于提高稳定性

Microsoft已对其旗舰开发软件产品Visual Studio 2017&#xff08;VS2017&#xff09;的安装程序和设置引擎做了全新设计&#xff0c;意在能快速地部署更新到VS2017。VS2017的第一个命名版本更新在VS2017首发的一个月后就可用&#xff0c;这充分体现了这一全新设计的优势所在。 …

阅读器关闭时尝试调用Read无效时的解决方法

今天在写asp .netmvc的项目时&#xff0c;发现了个困扰我很久的问题&#xff0c;经过仔细研究终于解决了。 问题如下&#xff1a; 首先来看一下原来有问题的代码&#xff1a; public static SqlDataReader Excutereader(string sql,params SqlParameter [] param) {using (SqlC…

.NET或将引入类型类和扩展

类型类是另外一项正被考虑引入.NET未来版本的特性。在提案“外观和扩展&#xff08;Shapes and Extensions&#xff09;”中&#xff0c;该特性被称为外观&#xff0c;它们将大幅提升.NET泛型的能力。Mads Torgersen这样描述类型类&#xff1a; 接口抽象的是作为类型实例的对象…

成为更优秀的程序员:退后一步看问题

转载自 成为更优秀的程序员&#xff1a;退后一步看问题 一天&#xff0c;在工作中… Bug #3890 来自客户&#xff1a; 有个程序出现了错误&#xff0c;程序提示说“SpeedCalculator::compute()里出现了除零情况”。 请尽快修复&#xff01; 你打开SpeedCalculator.php&#…

深夜福利, 小试linuxkit

前言 今天小编的朋友圈被DockerCon和linuxkit刷屏了&#xff0c;再不出来写点linuxkit的东东恐怕就要跟不上时代了。小编翻阅了N多的有关linuxkit的文章&#xff0c;发现绝大多数都是英文的讲解&#xff0c;小编本着对读者负责的态度决定先将linuxkit的文章翻译成中文&#xff…