这是您为DevOps热点准备的面试准备。
那么,为什么他们要雇用您呢?
在过去的十年中,DevOps成为一种新的技术文化和职业,将软件开发所需的快速迭代与基础架构运营团队的坚如磐石的稳定性相结合。对于系统管理员,运营工程师以及其他拥有强大系统和软件背景的人员来说,过渡到DevOps的时间可能比现在更好。截至2019年8月,仅在美国,目前就有超过50,000个 LinkedIn DevOps工作岗位。
假设您已经了解了基础知识,并准备开始寻找工作。您如何评价DevOps面试?DevOps工程师必须既是优秀的软件开发人员,又是基础架构专家,因此,他们应该知道Linux基础架构,网络,算法和DevOps工具(例如Terraform,Docker和Kubernetes)。范围从标准软件工程师编码问题到有关系统设计,再到Linux调试和DevOps工具的问题等等。
这是一个令人生畏的清单,但请不要害怕!在Insight上,DevOps奖学金将许多具有可转让技能的个人的职业推向了人们所期望的行业DevOps职位。这是我们为他们准备面试的方式。
介绍
动机是一个好的开始,但是您需要纪律才能有效地做好准备。我编写了这本指南,以帮助您制定有规律的面试准备程序。面试真的很烂-这是随机的,可能会让您对自己感到难过。在此过程中,不可控制的事情太多了,但是您可以控制自己的准备方式。
在这里有很多值得一试的东西,所以不要指望能够一次学习所有东西。也许有一天您会选择一个主题来关注。也许您将连续一个星期专注于另一个主题。不过,通常来说,您应该每天习惯性地进行两到三项活动,轮流讨论不同的主题,以使您的思想保持新鲜和投入。这些类别按重要性顺序列出:
- Linux基础
- 数据结构与算法
- 系统设计
- 解析
- DevOps工具
首先,要建立广泛而浅薄的知识基础,这样一来,以循环方式首先在各个主题之间实现负载平衡是一件好事。这将扩大您的DevOps空间的概念框架,以便您可以更轻松地将新信息放入上下文中。每个类别中的活动也按重要性顺序或多或少地排名。某些活动适合日常实践,例如CodeSignal问题或OverTheWire挑战。其他人则适合深入学习。
如果您想快点走,那就一个人走。但是,如果您想走得更远,那就一起走吧。与您的同龄人一起创建一个学习小组。互相追究责任。每周或每天签到和信息共享会话。在这段时间里,您会感到无动力,请记住,做某事总比什么都不做好。在您动力十足的那段时间里,请记住,睡眠和运动对您的成功至为重要。这些活动是人生下一阶段的垫脚石,但请记住让自己着迷于每块石头的形状。
Linux基础
作为一名DevOps工程师,你应该对Linux了如指掌。从内核到网络再到命令行命令,有关Linux的任何问题都是公平的游戏。
示例问题
- Linux计算机加电时发生的步骤顺序是什么?
- 当您在浏览器中键入google.com并导致网页返回给您时,会发生什么情况?如果没有出现网页怎么办?如何调试问题?
- 您如何检查文件系统是否空间不足?如何打印最大文件列表?如何删除所有大于1 GB的.mov文件?
活动
- 通读Linux命令行书
- 通过OverTheWire战争游戏进行工作。这些是通过精心设计的Linux系统进行的有趣的寻宝游戏,旨在教您一些基本概念。至少通过强盗等级。如果遇到困难,请不要担心Google解决方案。我强烈建议您随时随地在GitHub中记录进度。
- 只需使用vimtutor命令来学习vim。它是有史以来最好的编辑器,请勿让任何人说服您。
- 考虑购买课程以获取Linux基础知识认证(Linux +,RedHat等)。的确,一磅的认证比一盎司的经验没有价值,但是,如果您经验不足,那么认证可以帮助填补您的知识空白,并证明您具有基本的了解。
参考
- 最好参考手册Linux命令是tldr.sh。我强烈建议您下载tl; dr移动应用程序以快速参考。这在电话采访中帮助了我,我当时根本不知道该怎么做。
- devhints.io是各种备忘单的重要来源。
- 它看上去并不浮华,但是Advanced Bash脚本指南是个巨大的财产库。
数据结构与算法
请记住,DevOps是开发 +运营,因此您应该知道如何编码。选择一种您选择的语言(不是Bash-如果您不太喜欢,我建议使用Python)并练习,练习,练习。这不仅仅是寻找最佳解决方案-您必须与面试官清楚地交流问题的参数,传达您的思考过程,并计算不同算法的时间和空间复杂度。
示例问题
- 从列表中删除所有重复项。
- 在包含除一个以外的所有可能IP的文件中找到丢失的IP。
- 对二叉树的所有节点进行排序。
活动
- 可汗学院有一个非常好的数据结构和算法入门。它使用Javascript,但不要反对它。该课程是与汤姆·科门(Tom Cormen)合作完成的,汤姆·科门(Tom Cormen)是一本有关数据结构和算法的权威著作,绝对值得拥有。
- LeetCode拥有大量的问题库,这些问题库与真实的面试问题非常接近。实际上,许多公司都会直接问您LeetCode问题!每种算法至少要回答10个简单和中等问题。当您解决了100个问题后,您就可以开始感到准备好了,并且实际上可以解决这些问题而无需查找任何内容。
- 每天在CodeSignal上完成面试准备材料。我建议使用Python,但您可以使用任何语言。将代码复制并粘贴到文件中,并使用GitHub对其进行版本控制。每天,仔细阅读您昨天做的代码,并详细记录下来。编写代码比阅读旧代码并记住发生的事情要容易。一两天后重新访问旧代码将迫使您综合所学的概念。
- 通过CodeSignal的Python Arcade进行工作。这是对所有重要的标准Python库的很好的浏览。有些练习确实没有达到目标,但总体而言,这是一个不错的播放列表。
- 研究动态规划,有向无环图,拓扑排序。
- 每个人都需要一点SQL。无需花费大量时间,但是您应该在Mode Analytics上注册一个免费帐户,并利用其使用真实公共数据库的出色互动SQL教程。
- 随着您对编码技能的适应程度提高,请使用Pramp进行现场技术面试。这是重要的组成部分。像练习技术电话屏幕一样,您没有比技术电话屏幕更充分的准备。
- 请记住,唯一有价值的知识是您可以在白板或实时编码上在面试官面前展示的内容。如果您倾向于在高压情况下停滞不前,那么您就远非唯一的人了-请确保与同伴一起做很多练习。
参考
- LearnXinYminutes是一个很棒的示例驱动的Python备忘单
- Python备忘单:最好的Python备忘单,尽管它很简洁
- Hitchhiker的Python指南:最佳的Python文档。
- 我的脚本GitHub存储库中有很多示例文件,这些文件经过了详细记录,尽管实际上是无组织的!
系统设计
系统设计面试可测试您的整体思维,架构复杂基础架构的能力以及沟通技巧。确保采用自上而下的设计方法,并具有清晰的基础结构图和DevOps注意事项。
示例问题
- 设计一个基于微博消息的社交网络,如Twitter。您将如何确保不同地区的高可用性?
活动
- 消除系统设计入门知识。一个有趣的事情是选择一个主题,然后请朋友选择另一个主题,然后花2个小时研究您的主题,然后再花一两个小时进行分享。轮流扮演面试官和受访者的角色。
- 阅读Google SRE图书。这是现代DevOps必读的书。
解析
系统管理员经常分析系统输出和日志,以获得系统见解和调试问题。使用grep,awk和sed之类的工具进行命令行解析是DevOps工具库的一项重要技能。
示例问题
- 给定一个Apache Web服务器日志,每天有多少个请求?哪些IP是最常访问的访客?最需要哪些页面和图像?
活动
- 通过Insight的解析研讨会资料中的练习进行练习。专注于awk。本章材料不错,是练习是最重要的部分。
参考
- LearnXinYminutes:另一个出色的示例驱动参考-这次是awk。
- Regexr:最佳正则表达式参考。
DevOps工具
Docker,Terraform和Kubernetes是必不可少的DevOps工具,并且彻底学习它们不会出错。您还应该知道至少一种CI/CD工具,例如Jenkins。强烈建议您至少在三大云之一上学习这些工具:AWS,GCP或Azure。
示例问题:
- 使用Terraform将Docker应用程序部署到新的AWS EC2实例上。
活动
- 您需要学习Kubernetes。为了学习Kubernetes,您需要了解容器化和Docker。
- 通过Docker初学者实验
- 通过Docker课堂进行游戏
- Kubernetes(概念:容器编排)
- 阅读Kubernetes概念
- 通过Kubernetes基础教程学习
- 若要进行更深入的潜水,请完成Katacoda课程
- 通过一两个入门性的Jenkins教程来学习有关CI / CD的更多信息(概念:部署管道作为代码)。老实说,我对Jenkins知之甚少,所以我不了解更好的资源。
- 使用Vagrant声明性地定义VM,然后使用VirtualBox或Packer将该VM导出为OVA文件(概念:不可变的基础结构,配置为代码)。
- Terraform(概念:基础架构作为代码)
- 阅读Terragrunt的Terraform综合指南
- 通过Terraform教程进行工作
- Ansible(概念:配置为代码)
- 观看介绍视频
- 对于一些动手实验,我认为Linux Academy可能是最好的选择(不是免费的)
- 进行Honeycomb Quickstart,以提供一种监视/跟踪工具(概念:全栈跟踪)
- 完成Consul教程(概念:服务发现)。
- 完成Vault教程(概念:企业级机密管理)
- 玩Linkerd(概念:服务网格)
- Apache Kafka(概念:容错,高吞吐量事件流)
- 适用于Apache Kafka的无耻插件— 在该网站上免费找到Confluent培训课程,以获取有关Kafka基础知识的不错的视频集
- 查看操作培训仓库,以建立自己的本地docker-组成Kafka集群,并开始使用Kafka
参考
- Ansible:用户指南。
- 想在Kubernetes中做一些特定的事情吗?检查文档的“ 任务”部分。有许多特定于任务的指南。
- Docker的“demo”(https://docs.docker.com/samples/)页面提供了完整应用程序的良好示例以及一些实用的教程。我喜欢[Django + Postgres](https://docs.docker.com/compose/django/)示例。
其他具有高价值物品
活动
- 定期收听《软件工程日报》(https://softwareengineeringdaily.com/)播客。到目前为止,这是保持DevOps世界脉搏的最佳方法。建议您安装该应用程序,以便您可以轻松搜索旧剧集,以深入了解正在研究的技术和概念。在“ DevOps工具”部分中,我为每个工具背后的概念提供了关键字。您可以使用这些关键字在SEdaily中搜索相关的播客。
- 阅读有关看板(https://www.atlassian.com/agile/kanban/boards)的知识,并使用它们来增强您的注意力和生产力。GitHub有一个简单的看板,您可以使用它来保持生产力。我个人也喜欢[子弹式日记](https://www.youtube.com/watch?v=fm15cmYU0IM)和[Pomodoro方法](https://en.wikipedia.org/wiki/Pomodoro_Technique)。
- 深入了解一些您喜欢的工具的技术细节。从文档开始。配对并分享技术深层次的收获。
- 考虑为Linux Academy或acloudguru课程付费以获得AWS,GCP或Azure认证。
参考
- Digital Ocean有很棒的教程。当我使用Google时,我倾向于首先尝试“
site:digitalocean.com”。当您第一次学习手动安装某些东西时,这特别有用。