如何准备 DevOps 和 SRE 面试?
注:以下内容仅代表个人观点。
注2:本文最新版本位于我的GitHub项目中。
你应该具备的技能
Linux
每个 DevOps 工程师都应该对至少一种操作系统有深入的了解,如果可以选择的话,我会说它肯定是 Linux,因为我相信这是至少 90% 的 DevOps 职位发布的要求。
通常,接下来的问题是“我的知识面应该有多广?” 在所有 DevOps 技能中,我认为除了编程之外,这应该是你最强的技能。熟悉操作系统进程、调试工具、文件系统、网络……了解你的操作系统,理解它的工作原理,以及如何管理问题等等。
不久前,我在这里创建了一个 Linux 资源列表。那里有一些不错的网站,你可以利用它们来了解更多关于 Linux 的知识。
编码
我个人认为,任何 DevOps 工程师都应该至少在一定程度上了解编程。掌握这项技能,你可以自动化手动流程,改进你目前使用的一些开源工具,或者构建新的工具和项目,为现有问题提供解决方案。懂得编程=强大的力量。
说到面试,你会发现知识水平很大程度上取决于你面试的公司或职位。有些公司只要求你能够编写简单的脚本,而有些则要求你深入研究常见的算法、数据结构等。这通常从职位要求或电话面试中就能看出。
练习这项技能的最好方法是进行一些实际的编码 - 脚本、在线挑战、CLI 工具、Web 应用程序......只是代码:)
另外,以下内容可能对大多数人来说都很清楚,但我们仍然需要澄清一下:当有机会选择任何语言来回答编码任务/问题时,请选择您有经验的语言!有些候选人喜欢选择他们认为公司正在使用的语言,这是一个巨大的错误,因为无论你使用过哪种语言,给出正确的答案总比给出错误的答案要好 :)
我推荐以下用于练习编码的网站:
建筑与设计
这也是 DevOps 的一个重要方面。你应该能够描述如何设计不同的系统、工作流程和架构。此外,规模也是其中的一个重要方面。一个可能适用于十几台主机或 X 量数据的设计,不一定适用于更大规模。
以下是一些供您探索的想法:
- 如何设计和实现用于验证 PR 的 CI 管道(或管道)、运行多种不同类型的测试、打包项目并将其部署到某个地方
- 如何设计和实现安全的 ELK 架构,该架构将从 10,000 个应用程序获取日志并最终将数据显示给用户
- 微服务设计现在也相当流行
我建议你看一下以下 GitHub 项目,因为它们确实深入研究了系统设计:
工具
有些面试会关注特定的工具或技术。具体是哪些工具呢?这主要取决于你在简历中提到的内容,以及招聘启事中提到的、公司实际使用的工具。以下是一些我认为每个人都应该知道如何回答的关于自己熟悉的工具的问题:
- 这个工具能做什么?它能让我们实现哪些没有它就无法实现的功能?
- 与同领域、同用途的其他工具相比,它有哪些优势?为什么你选择使用它?
- 它是如何工作的?
- 如何使用它?
让我们深入了解实际的准备步骤
场景 || 挑战 || 任务
这是如今 DevOps 职位面试中非常常见的一种方式。面试官会给候选人一项任务,该任务代表 DevOps 工程师的常见工作或常识,候选人有几个小时甚至几天的时间来完成这项任务。
这是一个很棒的面试准备方法,我建议在正式面试前尝试一下。怎么做呢?从招聘信息中提取要求,并将其转化为场景。我们来看一个例子:
“CI/CD 知识” -> 场景:为项目创建 CI/CD 管道。
这时,有人会问:“那是什么项目呢?” 答案是:GitHub 呢?它只有 9125912851285192 个项目……而且可以免费为其中任何一个项目设置 CI(这也是学习如何与他人合作的好方法 :))。
我们转换一下场景:
“配置服务器的经验”->场景:配置服务器(使其更有趣:创建 Web 服务器)。
最后一个例子:
“脚本编写经验” -> 场景:编写脚本。不要浪费太多时间思考“我应该写什么脚本?”。只需将你正在手动执行的操作自动化,甚至可以实现你自己版本的常用小工具。
启动你自己的 DevOps 项目
启动 DevOps 项目是一个好主意,因为:
- 它会让你练习编码
- 你可以把它添加到你的简历中并与面试官讨论
- 取决于规模和复杂程度,它可以教你一些关于设计的一般知识
- 取决于采用情况,它可以教你如何管理开源项目
我也是,别想太多你的项目该做什么。直接去做就行了 :)
面试问题示例
列出一份关于不同主题/领域(例如技术、公司、职位等)的面试问题示例清单,并尝试回答。
看看你是否能流畅、详细地回答这些问题。
我在这里收集了“几个”问题
更好的办法是,请一位好朋友/同事向你提问一些问题。你的自我认知可能会阻碍你客观地自我评估你的知识:)
联网
对于参加技术聚会和会议的人来说,这是一个很好的机会,可以与其他公司的人聊聊他们的面试过程。但不要一开始就说出来,这可能会很尴尬。至少先打个招呼…… (:
这样做可以让你获得很多信息,了解一些公司面试时会遇到什么情况,或者如何更好地准备。
了解你的简历
这听起来可能无关紧要,但关键在于:准备好回答任何与简历中任何一项相关的问题。
有时,求职者会被问到与职位无关的技能或技能,这让他们感到很惊讶。但事实很简单:如果你在简历中提到了某件事,那么就应该向你询问。
了解公司
熟悉你面试的公司。以下是一些建议:
- 公司是做什么的?
- 它有哪些产品?
- 为什么它的产品独一无二(或比其他产品更好)?这也是一个值得思考的问题。
图书
根据我的经验,很多候选人都没有这样做,但这是深入研究操作系统、虚拟化、规模、分布式系统等主题的最佳方法之一。
在大多数情况下,你不读书也能做得很好,但对于 AAA 面试(最难级别),你会想要读一些书,总的来说,如果你想成为更好的 DevOps 工程师,书籍(还有文章、博客文章)是一种很好的方式 :)
考虑从非 DevOps 职位开始
虽然这不是准备步骤,但你应该知道,将 DevOps 作为第一个职位可能颇具挑战性。这并非不可能,但由于 DevOps 涵盖了众多不同的实践、工具等等,对于一个人来说,尝试将其作为第一个职位可能颇具挑战性,甚至令人不知所措。
成为 DevOps 工程师的一种可能途径是从一个实际不同(但相关)的职位开始,然后在 1-2 年或更长时间后从那里转职。
一些想法:
- 系统管理员——这很完美,因为每个 DevOps 工程师都应该对操作系统有扎实的了解,而系统管理员也了解他们的操作系统:)
- 软件开发人员/工程师 - DevOps 应该具备编码技能,并且该职位在大多数情况下将提供超出所需知识水平的知识
- QA 工程师 - 这是一个比较棘手的问题,因为在我看来,QA 工程师与 DevOps 工程师的领域/技能重叠较少。当然,DevOps 工程师应该具备一些测试方面的知识,但通常情况下,他们扎实的技能/背景似乎主要由系统内部知识和编码技能构成。
DevOps 面试会遇到哪些问题?
DevOps 面试可能千差万别。有些面试官会问设计问题,有些会侧重于编程,还有一些会问一些简短的技术问题,甚至有些面试官只会浏览你的简历并讨论你的过往经验。
您可以采取以下几种措施来减少这种体验带来的困扰:
- 你可以(而且应该)问问HR(有时甚至是团队负责人)面试流程是怎样的。有些人甚至会很友善地告诉你如何准备。
- 通常,招聘启事会给出关于重点是什么以及你在准备过程中应该关注什么的提示,所以请仔细阅读。
- 很多网站都有不同公司(尤其是大企业)的面试过程的记录或总结。
别忘了自己也是一名面试官
有些人倾向于将面试视为“确定候选人是否合格”的单行道,但实际上,候选人还应该确定
他/她面试的公司是否适合他/她。
- 我在乎团队规模吗?更具体地说,我在乎的是独自一人还是成为一个更大团队的一员?
- 我关心工作与生活的平衡吗?
- 我是否关心个人成长以及如何实际实现个人成长?
- 我是否关心了解我作为该职位所承担的职责是什么?
如果你愿意,你也应该扮演面试官的角色:)
最后一件事
祝你好运:)
鏂囩珷鏉ユ簮锛�https://dev.to/abregman/how-to-prepare-for-devops-sre-interviews-enj