面试DevOps团队时可能会被到问哪些问题?
Posted 架构头条
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试DevOps团队时可能会被到问哪些问题?相关的知识,希望对你有一定的参考价值。
Hi 各位,
我们打算给我们的小团队新招一名 DevOps 成员,有什么好的问题/代码挑战可以帮我们过滤掉不合适的候选人?
任务细节:
我们的开发设置需求跟这个类似 (https://magento.stackexchange.com/questions/52991/managing-magento-composer-deployment/53330#53330),但使用 deployer 而不是 Capsitrano。
理想情况下,将 deployer 添加到我们已经使用的 docker-image 中,并且预装了很多有用的工具。
一些简单但关键的问题,例如这个简单的 CSS 问题:
以下 CSS 行之间有什么区别?
T1 T2 {};
T1, T2 {};
T1 > T2 {};
T1 + T2 {};
这个问题帮助筛掉了许多所谓的前端大师。在招 DevOps 成员的时候也一样。
重要提示:示例问题不适用于 DevOps 候选人,这只是我们用来面试前端候选人的问题。我们在寻找面试 DevOps 岗位的问题。
由于 Linux 知识对执行任务很重要,我们也打算问一些类似于“常见的 10 大 Linux 面试题“(https://www.youtube.com/watch?v=l0QGLMwR-lY)这样的问题。
回复 1:
你对候选人的要求陈述看起来非常直接。这些要求都是针对你的环境的特定技术 / 范例。这会限制搜索范围并且会给你带来麻烦。你需要面试候选人的适应能力和学习能力,需要学习如何找到能够在技术之间轻松切换并理解底层概念的人,而不是只知道具体细节的人。
回复层主:
正是如此。
当我面试 DevOps 成员时,这就是我关注的内容(技术内容很少)。我也喜欢问开放式问题,让面试者谈论从事的工作,而不是技术琐事。当你问他们从事的工作时,你可以了解到他们对自己所做的事情的理解程度。如果他们的工作做的不好,就只能在很浅的层面上谈论项目。如果他们可以详细讨论堆栈的多个层次,那么你就知道他们有学习堆栈的能力,可以与其他团队成员进行交流,并考虑系统如何交互。
在谈论以前的工作时,他们对团队 / 人员的工作有多了解?如果我得到很多诸如“我不知道它是如何工作的,那是别人的责任”这样的回答,就可以判定他们不是好的 DevOps 候选人。与一起工作的其他团队 / 人员沟通以了解他们是如何互动的。
让他们谈论已经完成的一些项目,看看他们对每个部分从上到下的工作方式知道多少。如果他们只理解项目的一小部分,那么他们不是一个好的 DevOps 候选人。对整个堆栈(从基础架构,代码到部署和配置)谈论的越深入,候选人越强大。这是问题 1 的延伸。
描述可能由配置漂移引起的问题以及避免它的方法。什么是不可变基础设施?
为一个简单的项目创建一个 CI / CD 管道(技术自选)。他们可以使用 travis,gitlab,jenkins(只需要看 Jenkinsfile 而不是托管的 Jenkins 实例)等。
使用 docker-compose 构建和启动一个完整的堆栈应用程序(用至少两种不同的编程语言,一个数据库和一个负载均衡器)。至少使用两个有两个不同私有 IP 范围的网络。如果想要一点额外的挑战,让他们说说加密 / 解密 screts 的方法。
回层主:
如果我得到很多诸如“我不知道它如何工作的,那是别人的责任”这样的回答,就可以判定他们不是好的 DevOps 候选人。
我不同意这个观点。在一个真正的大公司中,不可能知道所有事情,有些事情就是应该由别人来处理。
我的意思是,假设你在一家公司的 DevOps 团队工作,有人问你内部数据中心的冷却系统是如何工作的。
你会不会回答“我不知道它是如何工作的,这是别人的责任”?
回复 2:
回层主:
我是一个系统管理员,在很多招聘进来的工程师上班的第一天我就通过这个问题送走了他们……我同意你的观点。
回层主:
是他们无心发了你私钥还是他们不知道你在问什么?
回楼上:
两种情况都有。你还有可能收到公共 ADN 私钥。我甚至收到过 gpk 密钥。
最糟的是要求发送 howto 的。这些人缺乏这项工作中最重要的能力:使用搜索引擎。
回楼上:
确实如楼上所说,但更多的时候显然是缺乏 PuTTY 以外的任何 ssh 经验。就像,我会正确地得到密钥,但它仍然是.ppk 格式,他们不了解它们之间的差异(或者这是多么容易修复)。
通常,当他们弄清楚一件以前从来没做过的事情时已经过去了 20 分钟。对于 DevOps 这种在 Unix 类后端工具上投入巨大的职位,这样的候选人明显没希望。
回复 3:
一个完整的表单如下,但还要就此问一些具体问题。基本的 Unix 工具集和函数技能是任何 DevOps 岗位人员必备的,还有了解进程和线程之间的区别。
ls, cd, mv, find, env, strings, man, nc, telnet, ssh, openssl, gzip, rsync, tar, /bin/sh, traceroute
DNS,HTTP,SSL(TLS)
对至少一个 sql 数据库引擎 / 特性的基本理解
一些实际的脚本:bash,python,甚至 perl 或 ruby
能调试 socket 连接吗?
特别是对 DevOps:必备经验包括 awscli 经验,了解 IAM 规则集,Hashicorp 工具和一些配置编排(通常会问 Ansible,Puppet 等)。
回复 4:
再强调一次... Devops 不是一个角色或一组技术,它是一种理念。
问一下他们解决问题的方法,然后就可以更进一步问一些技术问题。
真正做 DevOps 的人不会怕任何技术或熟练度,但必须有在不同环境下为不同人即决问题的意识。
如果我是面试官我会问这些问题:
当我们即将发布 app 新版本时,有 4 个开发人员要在最终发布到生产环境之前做人工测试。这样版本发布就会变得很慢。告诉我你怎么改善这个问题。
我们需要在应用程序服务器上部署热修补。这是一个 Tomcat 服务器内的 warfile 文件(打个比方,这并不重要)。告诉我如何在停机/不停机的情况下去做,以及分析每种方法的利弊。
我们的应用程序在每次发布新版本后速度都会变慢,我们应该做些什么检查来分析原因?如果遇到其中一个问题,你如何解决?
版本控制系统是什么?你知道 / 使用过哪些版本控制系统?什么是 pull request?如何防止合并冲突?
基础设施即代码(IaC) 是什么?它的优点是什么?说出使用 IAC 的一些产品(OSS 或商业产品)。
什么是持续集成,持续交付和持续部署?其中会使用到的技术 / 产品 / 方法有哪些?
什么是管道?为什么需要管道?
谈谈虚拟机和容器之间的差异。
如果候选人知道这些概念,你可以接着问如在 jenkins 中执行 X 或者在 git 中执行 Y 或者在 kubernetes 中执行 Z.
回层主:
说的好。
Devops 不是一个角色或一组技术,它是一种理念。
明白了,所有团队都应该参与其中,我们需要具备良好系统管理和 docker 技能的人,这样开发人员就不需要管这部分的流程了。
层主回复:
是的,所有的团队都应该参与其中。做 DevOps 的人是技术推动者和帮手,因此需要了解人员,他们的工作,数据流,触发什么流程以及如何交付软件,然后围绕工具和自动化为各种人员提供更轻松便捷的东西。
始终遵循以下经验法则:人员,流程和技术。
重要的是开发者应该知道 DevOps 做了什么,为什么这么做。你希望公司各部门之间能展开合作,共享知识并相互帮助。 做 DevOps 的人只是让他们的生活更轻松的中心人物。
回复层主:
当我们即将发布 app 新版本时,有 4 个开发人员要在最终发布到生产环境之前做人工测试。这个版本发布就会变得很慢。告诉我你怎么改善这个问题。
Docker。
我们需要在应用程序服务器上部署热修补。这是一个 Tomcat 服务器内的 warfile 文件(打个比方,这并不重要)。告诉我如何在停机/不停机的情况下去做,以及分析每种方法的利弊。
Docker。
版本控制系统是什么?你知道 / 使用过哪些版本控制系统?什么是 pull request?如何防止合并冲突?
git 管理的 Dockerfile
基础设施即代码(IaC) 是什么?它的优点是什么?说出使用 IAC 的一些产品(OSS 或商业产品)。
gitlab 中的 Dockerfile
什么是持续集成,持续交付和持续部署?其中会使用到的技术 / 产品 / 方法有哪些?
Kubernetes 与 gitlab 集成
谈谈虚拟机和容器之间的差异。
一个是 Docker,另一个不是。
我赢了吗? (显然 /s)
(注意后面的 /s)
回复 5:
问题似乎非常具体。我从来没有编辑或使用过任何 CSS。我的大部分工作都是通过 ansile 或 cloudformation 实现自动化。
回层主:
这是前端开发人员面试问题,不是 DevOps 面试问题。
如果有人在 DevOps 面试中问我 CSS 问题,我直接走人。
回复 6:
如果我是 DevOps 面试官我会问:
解释以下从开发到生产环境部署变更的过程。
你会如何自动缩放一个应用程序?
ingress 和 egress 流量可能涉及哪些成本?
架构在云中运行的服务时应该如何设计?
JSON,yaml 和 XML 有什么区别? 每个写出一个例子。
什么是 CI / CD? 在做 CI/CD 时可以选择哪些工具?
解释对象存储和传统文件系统之间的差异。
回复 7:
我上个月刚刚面试了 DevOps 岗位,面试涉及到代码。 我被要求使用 Java 实现具有 SNI 支持的反向代理。 可以使用高级库来(例如 Undertow,Embedded Jetty 等)或更低级的 XNIO 等。我认为这是一种很好的方法,可以检验我的代码质量是否良好,以及对 SSL 等 DevOps 概念的基本理解。
回层主:
使用 Java 实现
如果我在 DevOps 面试中看到这个直接拍屁股走人。他们是想要一个做运维的开发,而不是要去做自动化。
回层主:
SSL 不是 DevOps 的概念。SSL 是一项已使用了 20 多年的安全协议。
层主回复:
当然,但我无法想象一个做 DevOps 的人不知道 SSL。
回层主:
你是认真的?我怀疑 Java 开发都不能轻松完成,更不要说大多数做 DevOps 的人了。他们应该问如何在 AWS 上保护 Java 应用程序。
谢谢你们所有的好建议。 很多人提到了开放式 / 宏观性问题的重要性。
我收集了一些好的问题:
讲述一下你拯救生产环境的经历。你是如何发现问题的? 是怎么解决这个问题的?你做了什么来确保这种问题不再发生?
你曾经参与过的最糟糕的项目是什么? 这个项目最后是成功还是失败了?你在这个项目中负责的是什么工作?哪里出了问题?如果重做这个项目你会怎么做?
绘制出你当前运行的系统。对你绘制出的这个架构你怎么评价?
你在面试 DevOps 岗位时遇到过什么问题?如果你是面试官你又会问什么问题?
活动推荐
目前运维的方法有很多痛点,无论是异常检测,故障发现,瓶颈分析,自愈等工作都需要有大量的人工参与。随着公司越做越大,运维的场景也将会变得越来越复杂。那么仅仅依靠人工经验的运维工作将会变得捉襟见肘,所以就必然会走向基于机器学习算法的智能运维(AIOps)。来 ArchSummit 全球架构师峰会上,和我们一起关注 AIOps 的现状和未来发展。
以上是关于面试DevOps团队时可能会被到问哪些问题?的主要内容,如果未能解决你的问题,请参考以下文章