優秀DevOps工程師必會的33個面試題
阿新 • • 發佈:2020-03-28
### DevOps面試問題
#### 01 您能告訴我們DevOps和Agile(敏捷)之間的根本區別嗎?
答:儘管DevOps與敏捷方法(這是最流行的SDLC[Software Development Life Cycle]方法之一)有一些相似之處,但兩者在軟體開發方面都是根本不同的方法。以下是兩者之間的各種基本差異:
- `敏捷方法` 敏捷方法適用於敏捷中的開發同時敏捷方法適用於DevOps中的開發和操作。
- `實踐和流程` 敏捷涉及敏捷Scrum和敏捷看板等實踐,而DevOps涉及CD(持續交付),CI(持續整合)和CT(持續測試)等流程。
- `優先順序` 敏捷優先考慮及時性,而DevOps優先考慮及時性和質量。
- `釋出週期` DevOps提供較小的釋出週期並提供即時反饋,而敏捷僅提供較小的釋出週期而沒有立即反饋。
- `反饋源` 敏捷依賴於客戶的反饋,而DevOps涉及到自身(監控工具)的反饋。
- `工作範圍` 對於敏捷,工作範圍僅是敏捷,而對於DevOps,這是敏捷和對自動化的需求。
#### 02 為什麼我們需要DevOps?
答:如今,很多組織或企業正試圖通過一系列的釋出小的特性傳遞給客戶,而不是釋出大的特性集。這樣做有幾個好處,包括更好的軟體質量和快速的客戶反饋,所有這些好處導致更高的客戶滿意度,這是任何產品開發專案的最重要目標。為此,公司需要:
- 增加部署頻率
- 縮短修復時間
- 降低新版本的失敗率
- 萬一新版本崩潰,請有更快的平均恢復時間
DevOps有助於滿足所有這些要求,從而實現無縫的軟體交付。像Amazon,Etsy和Google這樣的成熟組織已採用DevOps方法,從而實現了以前未知的效能水平。通過採用DevOps方法,組織可以在一天之內完成數以萬計的部署。此外,這樣做還可以提供一流的`可靠性`、`安全性`和`穩定性`。
#### 03 使用DevOps有哪些重要的業務和技術優勢?
答:DevOps為該錶帶來了很多業務和技術優勢。下面列出了一些最重要的引數:
- 商業利益:
- 增強的操作環境穩定性
- 更快地交付功能
- 更多時間為產品增值
- 技術優勢:
- 持續交付軟體
- 更快地解決問題
- 較小的複雜問題
#### 04 您能列舉一些最常用的DevOps工具嗎?
答:以下是一些使用最廣泛的DevOps工具的列表:
- Ansible/Puppet/chef/saltstack –配置管理和應用程式部署工具
- Docker –容器化工具
- Git/Gitlab –版本控制系統(VCS)工具
- Jenkins –持續整合(CI)工具
- Nexus - 製品庫管理工具
- Jira –敏捷的團隊協作工具
- wiki -文件管理工具
- Promtheus –連續監控工具
- Selenium/jmeter –連續測試(CT)工具
#### 05 Selenium的用途是什麼?
答:selenium用於DevOps中的連續測試。該工具專門從事功能和迴歸形式的測試。
#### 06 您對DevOps中的Puppet有什麼瞭解?
答:這是一個配置管理工具,用於自動執行管理任務。Puppet利用主從結構,其中兩個實體通過加密通道進行通訊。系統管理員需要執行許多重複性任務,尤其是安裝和配置伺服器。編寫指令碼來自動執行此類任務是一種選擇,但是當基礎結構很大時,執行的操作就會變得繁瑣重複。為此,配置管理是一個不錯的解決方法。
Puppet幫助配置、部署和管理伺服器。這不僅使此類冗餘任務變得更加容易,而且節省了總工作時間的很大一部分。成熟的配置管理工具:
- 持續檢查主機所需的配置是否到位。如果更改了,配置將自動還原
- 為每個主機定義不同的配置
- 對機器進行動態縮放(上下縮放)
- 提供對所有已配置計算機的控制,以便可以將集中更改自動傳播到所有這些計算機
#### 07 您對DevOps的反模式有什麼瞭解?
答:如果其他組織通常採用的DevOps模式在特定環境下不起作用,而組織仍在繼續使用它,則會導致採用反模式。換句話說,反模式是關於DevOps的神話。一些著名的反模式是:
- 一個組織需要有一個單獨的DevOps組
- 敏捷等於DevOps
- DevOps是一個過程
- DevOps是開發驅動的釋出管理
- 由於組織獨特唯一的,因此無法進行DevOps
- 我們不能做DevOps因為我們已經很牛了
- DevOps意味著開發人員管理生產
- DevOps將解決所有問題
- 無法在正在進行的DevOps過渡中包含組織的所有方面
- 在DevOps過渡開始時未定義KPI
- 通過一個新的DevOps團隊來減少與其他組織之間的隔離
#### 08 DevOps有一個叫做CI的東西。它是什麼,目的是什麼?
答:DevOps中的CI代表持續整合。CI是一種開發實踐,開發人員可以在一天內多次將程式碼整合到共享儲存庫中。
- 開發和測試的持續整合提高了軟體的質量,並減少了交付所需的總時間。
- 如果檢查程式碼的團隊成員遇到編譯失敗,則開發人員將終止構建。如果開發人員不將編譯錯誤引入自己的工作空間中,那麼其他的開發成員就無法與共享原始碼儲存庫進行同步。
- 這破壞了協作和共享的開發過程。因此,一旦配置項構建中斷,立即識別並糾正問題就很重要。
- 通常,持續整合(CI)流程包括一組單元、整合和迴歸測試,這些測試在每次編譯成功時執行。如果上述任何一個測試失敗,CI構建就會被認為是不穩定的(這在敏捷sprint中很常見,因為開發正在進行中),並且沒有被破壞。
#### 09 我們經常聽到DevOps向左移動。它是什麼?
答:畫在紙上的傳統軟體開發生命週期有左右兩邊。圖的左側包括設計和開發,而右側包括生產階段,壓力測試和使用者接受度。在DevOps中向左移動僅意味著需要在右側執行儘可能多的任務,即通常在應用程式開發過程的結尾發生,並將其納入DevOps方法的早期階段。有幾種方法可以完成DevOps中的操作,最值得注意的是:
- 在每個敏捷sprint結束時建立可用於生產的檔案(製品檔案)
- 在每個版本中都包含靜態程式碼分析程式
- 正確執行DevOps的級別直接取決於儘可能左移的程度。
#### 10 DevOps中的CAMS代表什麼?
答:首字母縮寫CAMS通常用於描述DevOps方法論的核心信條。它代表:
- 文化 Culture
- 自動化 Automation
- 度量 Measurement
- 分享 Sharing
#### 11 用來評估DevOps成功的幾個KPI是什麼?
答:kpi是關鍵績效指標的簡寫形式。為了度量DevOps過程的成功,可以使用幾個kpi。其中最流行的有:
- 應用效能
- 應用程式的使用和流量
- 自動測試通過率
- 可用性
- 體量的變化
- 客戶的工單
- 缺陷逃逸率
- 部署頻率
- 部署時間
- 錯誤率
- 部署失敗數
- 負載時間
- 平均故障檢測時間(MTTD)
- 平均故障恢復時間(MTTR)
#### 12 您認為實施DevOps自動化的主要好處是什麼?
答:以下是實現DevOps自動化的主要好處:
- 從CD方程式中消除人為錯誤的可能性(核心收益)
- 隨著任務變得更加可預測和可重複,一旦出現問題,就很容易識別和糾正。因此,它產生了更可靠和健壯的系統
- 從CI管道中移除瓶頸。這會導致部署頻率增加和失敗的部署數量減少。它們都是重要的DevOps KPI
#### 13 您對容器瞭解什麼?
答:容器是一種輕量級虛擬化形式,有助於在程序之間提供隔離。容器比chroot重,但比管理程式輕。
#### 14 您對版本控制系統(VCS)有什麼瞭解?定義其用途。
答:版本控制系統或VCS是一種能夠記錄一段時間內對一個檔案或一組檔案所做的更改的系統。Git和Mercurial是兩個最受歡迎的版本控制系統。VCS的重要用途是:
- 檢查導致問題的最後修改是什麼
- 比較隨著時間的變化情況
- 識別誰在什麼時間提出新的問題
- 將一個或多個檔案還原到某個較早的狀態
- 將整個專案還原到以前的狀態
#### 15 Git是流行的DevOps工具。告訴我們您將如何還原已經推送並公開的提交。
答:有兩種方法可以這樣做:
1. 通過建立新的提交來撤消已被推送並公開的提交所做的所有更改。執行以下命令:
```bash
git revert
```
2. 通過修復或刪除新提交中的錯誤檔案,然後將其推送到遠端儲存庫。對檔案進行必要的更改後,使用以下命令將其提交到遠端儲存庫:
```bash
git commit -m "commit message"
```
#### 16 什麼是post mortem meetings?
參考回答:在這個會議上,我們討論出了什麼問題,應該採取什麼步驟,這樣失敗就不會再次發生。事後分析會議並不是要找出問題的癥結所在,而是要防止再次發生類似的工作,和ITIL中的問題管理是相類似的管理方法。並應重新計劃新的設計基礎設施,以便儘可能減少停機時間。如果錯誤我們無法避免,那麼我們應從錯誤中學習,以提交IT整體的質量管理。
#### 17 資產管理和配置管理之間的比較。
答:監視和維護對實體或組有價值的東西的過程稱為資產管理。配置管理是指控制,識別,計劃和驗證服務中的配置項以支援變更管理的過程。
#### 18 您能否陳述和解釋連續測試的各個關鍵要素?
答:持續測試的各種關鍵要素包括:
- 高階分析–用於預測和預測未知的未來事件
- 策略分析–旨在改善測試過程的手段
- 需求可追溯性–指描述需求以及從需求的起源到部署的整個過程的能力
- 風險評估–識別可能造成潛在損害的危害和風險因素的方法或過程
- 服務虛擬化–允許使用虛擬服務代替生產服務。模擬軟體元件以進行簡單測試
- 測試優化–改善整體測試流程
#### 19 請從開發和基礎架構方面說明DevOps的核心運營。
答:DevOps在開發和基礎架構方面的核心運營是:
- 應用程式開發–開發能夠滿足所有客戶要求並提供卓越質量水平的產品
- 程式碼覆蓋率–測量在執行自動測試時執行的程式碼的塊,線或弧的總數
- 程式碼開發–準備產品開發所需的程式碼庫
- 配置–以最佳方式使用產品
- 部署–安裝要由終端使用者使用的軟體
- 編排–安排一些自動化任務
- 打包–釋出準備好部署時所涉及的活動
- 供應–確保基礎設施的更改及時地與需要它的程式碼一起到達
- 單元測試–測試單個單元或元件的方法
#### 20 您對DevOps有什麼瞭解?
您的答案必須簡單明瞭。首先介紹一下DevOps在IT行業中的重要性。討論這種方法如何旨在使開發和運營團隊共同努力,以最小的故障率加速軟體產品的交付。包括DevOps如何成為增值實踐,開發和運維工程師在整個產品或服務生命週期中(從設計階段到部署點)攜手合作。
#### 21 為什麼最近幾年DevOps變得突出?
在談論DevOps的日益普及之前,請討論當前的行業情況。首先,舉例說明Netflix和Facebook等大型公司如何投資DevOps來自動化和加速應用程式部署,以及這如何幫助他們發展業務。以Facebook為例,您將指出Facebook的持續部署和程式碼所有權模型,以及這些模型如何幫助其擴大規模,同時確保體驗質量。在不影響質量,穩定性和安全性的情況下實現了數百行程式碼。
下一個用例應該是Netflix。這家流媒體和點播視訊公司採用完全自動化的流程和系統遵循類似的做法。提及這兩個組織的使用者群:Facebook有20億使用者,而Netflix將線上內容流傳輸給全球超過1億使用者。
這些都是很好的例子,說明DevOps如何幫助組織確保更高的釋出成功率,減少錯誤修復之間的準備時間,通過自動化簡化並持續交付,以及總體上降低人力成本。
#### 22 哪些是最受歡迎的DevOps工具?您是否有使用這些工具的經驗?
較流行的DevOps工具包括:
- selenium
- ansible
- git/gitlab
- jenkins
- docker
#### 23 您是否想要掌握所有這些Devops工具?
徹底描述您有信心的任何工具,其功能以及為什麼要使用它。例如,如果您具有Git方面的專業知識,則可以告訴採訪者Git是一種分散式版本控制系統(VCS)工具,該工具可讓使用者跟蹤檔案更改並在需要時還原為特定更改。討論Git的分散式體系結構如何為開發人員帶來更多優勢,使開發人員可以在本地進行更改,並可以在其本地Git儲存庫中擁有整個專案歷史記錄,以後可以與其他團隊成員共享。
#### 24 什麼是版本控制?為什麼要使用VCS?
定義版本控制,並討論該系統如何記錄對一個或多個檔案所做的任何更改並將其儲存在集中式儲存庫中。VCS工具將幫助您重新呼叫以前的版本並執行以下操作:
- 仔細檢視一段時間內所做的更改,然後檢查哪些有效,哪些無效。
- 將特定檔案或特定專案還原回舊版本。
- 檢查由於特定更改而發生的問題或錯誤
- 使用VCS為開發人員提供了同時處理特定檔案的靈活性,並且所有修改內容以後都可以進行邏輯組合。
#### 25 敏捷和DevOps之間有區別嗎?如果是,請解釋。
作為一名DevOps工程師,對這樣的面試問題充滿期待。首先描述DevOps與敏捷之間明顯的重疊。儘管DevOps的實現始終與敏捷方法保持同步,但是兩者之間存在明顯的差異。敏捷原則與軟體的無縫生產或開發相關。另一方面,DevOps處理開發工作,然後部署軟體,以確保更快的週轉時間,最小的錯誤和可靠性。
#### 26 為什麼配置管理過程和工具很重要?
討論正在開發的每個軟體或測試軟體的多個軟體構建,發行,修訂和版本。繼續說明儲存和維護資料的需求,跟蹤開發構建和簡化的故障排除。不要忘了提到可用於實現這些目標的關鍵CM工具。討論諸如Puppet,Ansible和Chef之類的工具如何在多個伺服器上自動化軟體部署和配置的過程中提供幫助。
#### 27 Chef如何用作CM工具?
chef被認為是行業首選的CM工具之一。例如,Facebook將其基礎架構和後端IT遷移到了Chef平臺。解釋Chef如何通過自動化流程來幫助您避免延遲。這些指令碼是用Ruby編寫的。它可以與基於雲的平臺整合並配置新系統。它提供了許多用於基礎結構開發的庫,這些庫以後可以部署在軟體中。藉助其集中式管理系統,一臺Chef伺服器足以用作部署各種策略的中心。
#### 28 您如何解釋“基礎架構即程式碼”(IaC)的概念?
談論IaC是一個好主意,有時將其稱為可程式設計基礎結構,在該基礎結構中,與其他任何程式碼的感知方式相同。描述傳統的基礎架構管理方法如何退居二線,以及手動配置,過時的工具和自定義指令碼的可靠性如何降低。接下來,重點介紹IaC的好處,以及如何使用IaC更快,更安全,更輕鬆地對IT基礎架構進行更改。包括IaC的其他好處,例如將常規的單元測試和整合測試應用於基礎結構配置,以及維護最新的基礎結構文件。
如果您已經完成了Amazon Web Services(AWS)的認證,並且正在接受諸如AWS認證的DevOps工程師之類的利基角色的面試,那麼您必須準備以下一些AWS DevOps面試問題:
#### 29 AWS在DevOps中的作用是什麼?
在面試中被問到此問題時,請直接說明,AWS是亞馬遜提供的基於雲的服務,可通過無限的計算能力和儲存來確保可擴充套件性。AWS使IT企業能夠開發和交付複雜的產品,並在雲上部署應用程式。其一些關鍵服務包括Amazon CloudFront,Amazon SimpleDB,Amazon Relational Database Service和Amazon Elastic Computer Cloud。討論各種雲平臺,並強調您過去使用雲基礎架構處理過的任何大資料專案。
#### 30 持續整合的成功因素是什麼?
- 維護程式碼庫
- 自動化構建
- 讓構建自我測試
- 每個人每天將程式碼都提交到基線
- 每次提交(到基線)都應該被構建
- 保持快速構建
- 在預釋出環境中進行測試
- 輕鬆獲取最新交付物
- 每個人都可以看到最新版本的結果
- 自動化部署
#### 你如何在我公司實踐DevOps?
參考回答:作為一名DevOps工程師,我會對DevOps專案管理的管理目標、敏捷交付、持續整合進行管理,並從敏捷專案管理新三角《敏捷專案管理》出發,與團隊一起設定目標,實現簡化的ITIL工作流,維護敏捷的DevOps管理範圍,研究和引入新的技術或框架,通過DevOps 流水線,實現從需求轉化為工作流從整體工具鏈進行全域性優化。
#### 配置管理工具在devops中的作用是什麼?
參考回答: 配置管理工具是指支援完成配置項標識、版本控制、變化控制、審計和狀態統計等任務的工具。 自動化的配置管理工具可以幫助DevOps實現持續流水線的技術支援基礎。使用CM工具,可以幫著管理與儲存關於系統、軟體、測試相關的版本和構建及配置資訊,並提供軟體和測試軟體之間的可跟蹤性。成功的DevOps從配置管理開始。
#### DevOps工程師的職責是什麼?
參考回答:DevOps工程師與敏捷開發團隊緊密合作,站在業務價值視角,拉動IT從業務需求到運營交付,確保通過高質量(JKK)的自動化測試,實現持續整合和持續交付等IT技術功能所需的環境。DevOps工程師必須經常與開發保持聯絡(SRE模式、豐田模式、持續交付模式、協作模式),使環境中所有需要的部分都能無縫地工作,實現高質量的增量迭代。可以擴充套件說說相關工具。
![](https://img2020.cnblogs.com/blog/742708/202003/742708-20200328161656477-1384814866.png)
![](https://img2020.cnblogs.com/blog/742708/202003/742708-20200328161704889-18122947