原文地址: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 - 我們找錯人了
點擊使用 CODING,體驗 DevOps 全工具鏈敏捷研發