2019 DevOps 必備面試題——DevOps 理念篇
- 2019 年 10 月 4 日
- 筆記

原文地址: https://medium.com/edureka/devops-interview-questions-e91a4e6ecbf3 原文作者:Saurabh Kulshrestha 翻譯君:CODING 戴維奧普斯

你是一位 DevOps 工程師還是想進入 DevOps 領域的新手?如果是,那麼你已經把握住了未來趨勢。在本文中,我列出了幾十個在僱傭 DevOps 工程師時,面試官可能會問到的問題以供參考。
理解 DevOps 的關鍵點在於它不僅僅是一種技術集合,而是一種思維方式、一種文化。DevOps 需要一種文化轉變——將運維與開發相結合,並需要一個相關聯的技術工具鏈來促進協作變革。由於 DevOps 理念仍處於非常初級的階段,因此 DevOps 的應用以及適應和協作所需的頻寬因團隊而異。但是,你可以開發 DevOps 技能組合,提升自我,成為任何類型的團隊都需要的理想候選人。
成為一名 DevOps 工程師有哪些要求?
在尋找能勝任 DevOps 工程師的人選時,團隊會有一套清晰的技能需求。其中最重要的是:
- 熟悉基礎架構自動化工具,如 Chef,Puppet,Ansible,SaltStack 或 Windows PowerShell DSC。
- 熟練掌握 Ruby,Python,PHP 或 Java 等語言。
- 幫助你跨團隊和角色進行溝通和協作的人際關係技巧。
為了組織下面的問題,我把自己放在了你的位置上,本文中的大多數答案都是以你的角度來寫的——即一個有潛力的 DevOps 專家。
一般的 DevOps 相關面試問題
這類基礎問題是與任何特定 DevOps 階段無關的問題,旨在測試你對 DevOps 的理解程度,而不是關注特定的工具或階段。
Q1.
/ DevOps 和敏捷的根本區別 /
下表中列出了兩者之間的差異。

Q2.
/ DevOps 需要什麼 /
我認為這個答案應該從解釋市場總體趨勢開始。現在許多公司都在通過嘗試向客戶快速發布小的功能點,以取代發布大的功能組。這樣做有許多優點,比如能快速收到客戶回饋、提高軟體品質等,從而大幅提升客戶滿意度。為實現這一目標,公司必須:
- 增加部署頻率
- 降低新版本的故障率
- 縮短交付時間
- 新版本崩潰時更快的平均恢復時間
DevOps 滿足所有這些需求,並有助於實現無縫的軟體交付。你可以舉出像 Etsy、Google 和亞馬遜這樣的公司的例子,這些公司已經採用 DevOps 達到了甚至五年前都無法想像的性能水平。他們每天都在進行數十、數百甚至數千次程式碼部署,同時提供世界級的穩定性、可靠性和安全性。
如果我必須測試你對 DevOps 的了解程度,那麼你應該知道敏捷(Agile)和 DevOps 之間的區別。下一個問題就是針對這一點的。
Q3.
/ DevOps 與敏捷/SDLC 有何不同? /
我建議你按照以下說明進行操作:
敏捷是一套關於如何實現生產即開發軟體的價值觀和原則。舉個例子:如果你有一些想法,並且希望將這些想法轉化為可用的軟體,那麼你可以使用敏捷價值觀和原則作為實現此目的的方法。但是,該軟體可能只適用於開發人員的筆記型電腦電腦或測試環境,你希望以一種安全簡單的方式,快速、輕鬆、可復用地將該軟體移植到生產基礎架構中。要做到這一點,你需要 DevOps 工具和技術。
總而言之,敏捷軟體開發方法側重於軟體的開發,DevOps 則負責以最安全可靠的方式開發和部署軟體。
現在請記住,你在之前的回答中包含了 DevOps 工具,因此請準備好回答一些與此相關的問題。
Q4.
/ 哪些是最頂尖的 DevOps 工具?
你使用過哪些工具? /
下面介紹了一些最受歡迎的 DevOps 工具:
- Git:版本控制系統工具
- Jenkins:持續集成工具
- Selenium:持續測試工具
- Puppet、Chef、Ansible: 配置管理和部署工具
- Nagios:持續監控工具
- Docker:容器化工具
如果有需要你也可以提及其他工具,但請確保在你的回答中包含上述工具。
接下來的回答有兩種可能:
- 如果你掌握上述所有工具,那麼你可以說自己已經使用過所有這些工具來開發高品質的軟體,並能輕鬆、頻繁和可靠地部署這些軟體。
- 如果你只對上述某些工具有經驗,那麼請提及這些工具,並說自己對這些工具有專業性,同時對其餘工具進行一些概述。
Q5.
/ 所有這些工具如何協同工作? /
下面給出了一個通用的邏輯流程,在這個流程中所有內容都將自動進行無縫交付。但是此流程也會因不同組織的不同需求而導致一些差異。
- 開發人員開發程式碼,源程式碼由 Git 等版本控制系統工具管理。
- 開發人員將此程式碼提交到 Git,並且對程式碼所做的任何更改都將提交到此程式碼倉庫。
- Jenkins 通過 Git 插件從倉庫中提取此程式碼,並使用 Ant 或 Maven 等工具構建它。
- 配置管理工具(如 Puppet)部署和提供測試環境,然後 Jenkins 在使用 Selenium 等工具進行測試的測試環境上發布此程式碼。
- 程式碼測試結束後,Jenkins 就會將其發送到生產伺服器上進行部署(甚至生產伺服器也由 Puppet 等工具進行配置和維護)。
- 部署後,Nagios 等工具會進行持續監控。
- Docker 容器提供測試環境來測試構建功能。

Q6.
/ DevOps 有哪些優勢? /
對於這個答案,你可以利用你過去的經驗,解釋 DevOps 是如何幫助你完成之前的工作。如果沒有任何此類經驗,那麼你可以提及以下優勢。
技術優勢:
持續的軟體交付
修復不太複雜的問題
更快地解決問題
商業優勢:
更快速地提供新功能
更穩定的操作環境
更多可用於提升價值的時間(而不是修復/維護)
Q7.
/ DevOps 幫助我們實現的
最重要的事情是什麼? /
據我所知,DevOps 幫助我們實現的最重要的事是儘可能快地將更改投入生產,同時最大限度地保證軟體品質和合規性。這是 DevOps 的主要目標。
你也可以提及 DevOps 的許多其他積極影響,例如團隊之間更清晰的溝通和更好的工作關係——即運維團隊和開發團隊共同合作,通過提供高品質的軟體提升客戶滿意度。
Q8.
/ 用一個工業/現實生活中的使用案例
來解釋 DevOps /
有許多行業正在應用 DevOps,所以你可以舉出任意案例,也可以參考下面的例子:
Etsy 是一個 P2P 電商網站,專註於手工或古董物品,以及獨特的工廠製造的物品。Etsy 在緩慢且痛苦的網站更新中掙扎,這些更新經常導致網站崩潰,影響了數百萬通過在線市場銷售商品的 Etsy 用戶的使用,並且很有可能將商品推向競爭對手。
在新技術管理團隊的幫助下,Etsy 從每周進行兩次四小時全站點部署的瀑布模型,轉變為更敏捷的模式。如今它擁有完全自動化的部署管道,據報道,其持續交付實踐每天可以進行 50 多次更少中斷的部署。
Q9.
/ 解釋與分享在之前的工作中,
你在軟體開發和技術運維方面的理解和專業知識 /
這個回答主要是分享你過去的工作經驗,並試著解釋你在以前工作中的靈活性。可以參考以下示例:
DevOps 工程師幾乎總在業務關鍵在線環境中全天候工作。我能夠適應隨叫隨到的工作,並且承擔生產系統的維護責任;我成功自動化了支援持續軟體部署的流程;我有使用公有/私有雲、Chef 或 Puppet 等工具、使用 Python 和 PHP 等工具編寫腳本和實現自動化方面的經驗,並且具有敏捷相關的背景。
Q10.
/ DevOps 的反模式有哪些? /
一般來說通常你的研發組織中遵循了某種模式,但如果其他人普遍採用的模式對你的組織不起作用,並且你繼續盲目地遵循它,那麼你實際上是在採用反模式。一些關於 DevOps 的錯誤認知包括:
- DevOps 是一個過程
- 敏捷就是 DevOps?
- 我們需要一個單獨的 DevOps 小組
- Devops 將解決我們所有的問題
- DevOps 意味著由開發人員來管理生產
- DevOps 是開發驅動的發布管理
- DevOps 不是開發驅動的
- DevOps 不是 IT 業務驅動的
- 我們不能應用 DevOps – 我們比較特別
- 我們不能應用 DevOps – 我們找錯人了