DevOps面試問題總結1
DevOps是一組過程、方法與系統的統稱,用於促進開發(應用程式/軟體工程)、技術運營和質量保障(QA)部門之間的溝通、協作與整合。下面為大家分享DevOps系列的面試問題
持續整合問題
問題一:持續整合是什麼意思?
我將建議您通過給出持續整合(CI)的小定義來開始這個答案。這是一種開發實踐,要求開發人員每天多次將程式碼整合到共享儲存庫中。然後通過自動構建驗證每個簽入,允許團隊儘早發現問題。 我建議您解釋一下如何在以前的工作中實施它。您可以參考下面給出的示例:
在上圖中:
開發人員將程式碼簽入其私有工作區。 完成後,他們將更改提交到共享儲存庫(版本控制儲存庫)。 CI伺服器監視儲存庫並在發生更改時檢出更改。 然後,CI伺服器將提取這些更改並構建系統,並執行單元和整合測試。 CI伺服器現在將通知團隊成功構建。 如果構建或測試失敗,CI伺服器將向團隊發出警報。 該團隊將盡早解決問題。 這個過程不斷重複。
問題二:為什麼需要開發和測試的持續整合?
對於這個問題,您應該關注持續整合的需求。我的建議是在你的答案中提到以下解釋: 開發和測試的持續整合通過在完成所有開發之後替換傳統的測試實踐來提高軟體質量,並減少交付時間。它允許開發團隊儘早檢測和定位問題,因為開發人員需要每天多次(更頻繁地)將程式碼整合到共享儲存庫中。然後自動測試每個登記入住。
問題三:持續整合的成功因素是什麼?
在這裡,您必須提到持續整合的要求。您可以在答案中包含以下幾點:
維護程式碼儲存庫 自動化構建 使構建自我測試 每個人每天承諾到基線 應該構建每個提交(到基線) 保持快速構建 在生產環境的克隆中進行測試 讓您輕鬆獲得最新的可交付成果 每個人都可以看到最新版本的結果
問題四:解釋如何將Jenkins從一臺伺服器移動或複製到另一臺伺服器?
我將通過將jobs目錄從舊伺服器複製到新伺服器來完成此任務。有多種方法可以做到這一點; 你可以:
只需複製相應的作業目錄,即可將作業從一個Jenkins安裝移動到另一個。 通過使用其他名稱克隆作業目錄來製作現有作業的副本。 通過重新命名目錄來重新命名現有作業。請注意,如果更改作業名稱,則需要更改嘗試呼叫重新命名作業的任何其他作業。
問題五:解釋如何在Jenkins中建立備份和複製檔案?
要建立備份,您需要做的就是定期備份JENKINS_HOME目錄。這包含所有構建作業配置,從屬節點配置和構建歷史記錄。要建立Jenkins設定的備份,只需複製此目錄即可。您還可以複製作業目錄以克隆或複製作業或重新命名目錄。
問題六:解釋如何設定Jenkins工作?
首先提一下如何建立Jenkins的工作。轉到Jenkins首頁,選擇“New Job”,然後選擇“Build a free-style software project”。 然後你可以告訴這個自由式工作的元素:
可選的SCM,例如原始碼所在的CVS或Subversion。 用於控制Jenkins何時執行構建的可選觸發器。 某種構建指令碼,用於執行實際工作的構建(ant,maven,shell指令碼,批處理檔案等)。 從構建中收集資訊的可選步驟,例如歸檔工件和/或記錄javadoc和測試結果。 使用構建結果通知其他人/系統的可選步驟,例如傳送電子郵件,IM,更新問題跟蹤器等。
問題七:你如何保護Jenkins?
我保證Jenkins的方式如下所述。如果您有任何其他方式,請在下面的評論部分中提及:
確保Jenkins與我公司的使用者目錄與適當的外掛整合。 確保啟用矩陣/專案矩陣以微調訪問。 使用自定義版本控制指令碼自動化在Jenkins中設定許可權/特權的過程。 限制對Jenkins資料/資料夾的物理訪問。 定期對其進行安全稽核。
持續測試面試問題
問題一:什麼是連續測試?
我將建議您遵循下面提到的解釋: 持續測試是執行自動化測試的過程,作為軟體交付管道的一部分,以獲得與最新構建相關的業務風險的即時反饋。通過這種方式,每個構建都會持續測試,允許開發團隊獲得快速反饋,以便他們可以防止這些問題進入軟體交付生命週期的下一階段。這大大加快了開發人員的工作流程,因為無需手動重建專案並在進行更改後重新執行所有測試。
問題二:什麼是自動化測試?
自動化測試或測試自動化是自動化手動過程以測試被測應用程式/系統的過程。 自動化測試涉及使用單獨的測試工具,使您可以建立可以重複執行的測試指令碼,而不需要任何手動干預。
問題三:自動化測試有哪些好處?
我列舉了自動化測試的一些優點。在您的答案中包含這些內容,您可以新增自己的經驗,瞭解Continuous Testing如何提供幫助:
支援執行重複的測試用例 有助於測試大型測試矩陣 啟用並行執行 鼓勵無人看管的執行 提高準確性,從而減少人為產生的錯誤 節省時間和金錢
問題四:如何在DevOps生命週期中自動化測試?
我在下面提到了一個通用流程,您可以參考: 在DevOps中,開發人員需要將原始碼中的所有更改提交到共享儲存庫。像Jenkins這樣的持續整合工具每次在程式碼中進行更改時都會從此共享儲存庫中提取程式碼,並將其部署到Selenium等工具進行的連續測試中,如下圖所示。 通過這種方式,與傳統方法不同,程式碼中的任何更改都會不斷進行測試。
問題五:為什麼持續測試對DevOps很重要?
您可以通過說“連續測試允許立即測試程式碼中的任何更改來回答這個問題。這避免了在週期結束時進行“大爆炸”測試所產生的問題,例如釋出延遲和質量問題。通過這種方式,持續測試可以促進更頻繁和更好的質量釋出。
問題六:連續測試工具的關鍵要素是什麼?
連續測試的關鍵要素是:
風險評估:它涵蓋風險緩解任務,技術債務,質量評估和測試覆蓋範圍優化,以確保構建準備好向下一階段發展。
策略分析:確保所有流程符合組織不斷髮展的業務和合規性要求。
可追溯性:確保滿足真正的要求,不需要返工。物件評估用於確定哪些需求存在風險,按預期工作或需要進一步驗證。
高階分析:它在靜態程式碼分析,變更影響分析和範圍評估/優先順序劃分等領域使用自動化,以便首先防止缺陷並在每次迭代中完成更多工。
測試優化:它確保測試產生準確的結果並提供可操作的結果。方面包括測試資料管理,測試優化管理和測試維護
服務虛擬化:它確保訪問真實的測試環境。服務視覺化使您能夠訪問所需測試階段的虛擬表單,從而縮短測試環境設定和可用性的浪費時間。
問題七:您熟悉哪種測試工具以及該工具的優點是什麼?
這裡提到您使用的測試工具,並相應地構建您的答案。我在下面提到了一個例子: 我曾在Selenium上工作以確保高質量和更頻繁的釋出。
Selenium的一些優點是:
它是免費和開源的 它擁有龐大的使用者群和幫助社群 它具有跨瀏覽器相容性(Firefox,Chrome,Internet Explorer,Safari等) 它具有出色的平臺相容性(Windows,Mac OS,Linux等) 它支援多種程式語言(Java,C#,Ruby,Python,Pearl等) 它有新的和定期的儲存庫開發 它支援分散式測試
問題八:Selenium支援哪些測試型別?
Selenium支援兩種型別的測試:
-
迴歸測試:它是在修復錯誤的區域周圍重新測試產品的行為。
-
功能測試:它指的是單獨測試軟體功能(功能點)。
問題九:什麼是Selenium IDE?
我的建議是通過定義Selenium IDE來開始這個答案。它是Selenium指令碼的整合開發環境。它作為Firefox擴充套件實現,允許您記錄,編輯和除錯測試。Selenium IDE包含整個Selenium Core,允許您在他們將執行的實際環境中輕鬆快速地記錄和回放測試。 現在,您的答案中包含一些優勢。憑藉自動完成支援和快速移動命令的能力,無論您喜歡何種型別的測試,Selenium IDE都是建立Selenium測試的理想環境。
問題十:Selenium中的Assert和Verify命令有什麼區別?
下面提到了Assert和Verify命令之間的區別:
斷言命令檢查給定條件是真還是假。假設我們斷言給定元素是否存在於網頁上。如果條件為真,則程式控制將執行下一個測試步驟。但是,如果條件為false,則執行將停止,並且不會執行進一步的測試。 Verify命令還會檢查給定條件是true還是false。無論條件是真還是假,程式執行都不會停止,即驗證期間的任何故障都不會停止執行,並且所有測試步驟都將被執行。
配置管理面試問題
問題一:配置管理流程的目標是什麼?
配置管理(CM)的目的是通過使開發或部署過程可控和可重複,確保產品或系統在其整個生命週期中的完整性,從而建立更高質量的產品或系統。 CM流程允許有序管理系統資訊和系統更改,以便:
修改能力, 提高效能, 可靠性或可維護性, 延長壽命, 降低成本, 降低風險 責任或正確的缺陷。
問題二:資產和配置項有什麼區別?
我認為,你應該首先解釋資產。它具有財務價值以及附加的折舊率。IT資產只是它的一個子集。任何具有成本的組織和組織都將其用於資產價值計算和稅收計算中的相關收益屬於資產管理,此類專案稱為資產。 另一方面,配置項可能有也可能沒有分配給它的財務值。它不會有任何與之相關的折舊。因此,它的生命不依賴於其財務價值,而是取決於該專案對該組織過時的時間。
然後,您可以舉例說明兩者之間的相似性和差異:
-
1)相似性: 伺服器 - 它既是資產又是CI。
-
2)差異: 構建 - 這是一種資產,但不是CI。
問題三:IAC如何適用於DevOps方法?它實現了什麼目的?
作為程式碼的基礎架構(IAC)是一種IT基礎架構,運營團隊可以使用它來自動管理和通過程式碼進行配置,而不是使用手動過程。 更快部署的公司會將軟體等基礎設施視為可以使用DevOps工具和流程管理的程式碼。利用這些工具,您可以更輕鬆,快速,安全,可靠地更改基礎架構
問題四:Puppet,Chef,SaltStack和Ansible中哪一個是最好的配置管理(CM)工具?為什麼?
這取決於組織的需求,因此在所有這些工具上提到幾點:
Puppet是最古老,最成熟的CM工具。Puppet是一個基於Ruby的配置管理工具,雖然它有一些免費功能,但Puppet很棒的大部分內容僅在付費版本中可用。不需要大量額外功能的組織會發現Puppet很有用,但那些需要更多自定義的組織可能需要升級到付費版本。
Chef是用Ruby編寫的,因此可以由熟悉該語言的人定製。它還包括免費功能,如果需要,還可以從開源升級到企業級。最重要的是,它是一個非常靈活的產品。
Ansible是一個非常安全的選項,因為它使用Secure Shell。它是一個簡單的工具,但除了配置管理之外,它還提供了許多其他服務。它非常容易學習,因此非常適合那些沒有專職IT人員但仍需要配置管理工具的人。
SaltStack是基於python的開源CM工具,適用於大型企業,但其學習曲線相當低。
問題十二:什麼是Chef?
通過定義Chef來開始這個答案。它是一個功能強大的自動化平臺,可將基礎架構轉換為程式碼 Chef是一個工具,您可以編寫用於自動化流程的指令碼。 現在您可以解釋Chef的架構,它包括:
-
Chef Server:Chef Server是基礎架構配置資料的中央儲存。Chef Server儲存配置節點所需的資料並提供搜尋,這是一個功能強大的工具,允許您根據資料動態驅動節點配置。
-
Chef Node: Node是使用Chef-client配置的任何主機。Chef-client在您的節點上執行,與Chef Server聯絡以獲取配置節點所需的資訊。由於Node是執行Chef-client軟體的機器,因此節點有時被稱為“客戶端”。
-
Chef Workstation: Chef Workstation是您用來修改cookbook和其他配置資料的主機。
題十三:Chef中的資源是什麼?
我的建議是首先定義資源。資源代表一個基礎架構及其所需的狀態,例如應安裝的軟體包,應執行的服務或應生成的檔案。 您應該解釋資源的功能,包括以下幾點:
描述配置項的所需狀態。 宣告將該專案置於所需狀態所需的步驟。 指定資源型別,例如包,模板或服務。 根據需要列出其他詳細資訊(也稱為資源屬性)。 分組為配方,描述工作配置。
問題十四:Chef的recipe是什麼意思?
對於這個答案,我建議你使用上面提到的流程:首先定義recipe。Recipe是描述特定配置或策略的資源集合。配方描述了配置系統部分所需的一切。 定義之後,通過包括以下幾點來解釋食譜的功能:
安裝和配置軟體元件。 管理檔案。 部署應用程式。 執行其他食譜。
問題十五:Cookbook與Chef中的recipe有何不同?
對此的答案非常直接。您可以簡單地說,recipe是資源的集合,主要配置軟體包或某些基礎設施。Cookbook將recipe和其他資訊整合在一起,比單獨使用recipe更易於管理。
持續監控面試問題
問題一:為什麼需要持續監控?
建議您採用下面提到的流程:
持續監控可以及時發現問題或缺陷,並採取快速糾正措施,有助於降低組織的費用。
持續監控提供解決方案,解決三個操作規程,稱為:
-
持續審計
-
連續控制監測
-
持續交易檢查
問題二:什麼是Nagios?
您可以通過首先提到Nagios是監控工具之一來回答這個問題。它用於DevOps文化中的系統,應用程式,服務和業務流程等的連續監視。
如果發生故障,Nagios可以向技術人員發出問題警報,允許他們在中斷影響業務流程,終端使用者或客戶之前開始修復流程。使用Nagios,您無需解釋為什麼不可見的基礎架構中斷會影響您組織的底線。 現在,一旦定義了Nagios,您就可以提到使用Nagios可以實現的各種功能。 通過使用Nagios,您可以:
-
在過時的系統導致故障之前規劃基礎架構升級。
-
在出現問題的第一個跡象時應答問題。
-
檢測到問題時自動修復問題。
-
協調技術團隊的迴應。
-
確保您的組織的SLA得到滿足。
-
確保IT基礎架構中斷對組織的底線影響最小。
-
監控整個基礎架構和業務流程。
這就完成了這個問題的答案。可以根據討論的方向新增諸如優點等的進一步細節。
容器化和虛擬化面試問題
問題一:什麼是容器?
我的建議是首先解釋容器化的必要性,容器用於提供從開發人員的膝上型電腦到測試環境,從登臺環境到生產的一致計算環境。 現在給出容器的定義,一個容器由一個完整的執行時環境組成:一個應用程式,以及它所有的依賴項,庫和其他二進位制檔案,以及執行它所需的配置檔案,捆綁到一個包中。容納應用程式平臺及其依賴項消除了作業系統分發和底層基礎架構的差異。
問題二:容器化相比虛擬化有哪些優勢?
以下是容器化優於虛擬化的優勢:
容器提供實時配置和可擴充套件性,但VM提供緩慢的配置 與VM相比,容器是輕量級的 與容器相比,VM的效能有限 與VM相比,容器具有更好的資源利用率
問題三:什麼是Docker映象?
我建議你使用下面提到的流程: Docker映象是Docker容器的來源。換句話說,Docker映象用於建立容器。使用build命令建立映像,並且在使用run啟動時它們將生成容器。影象儲存在Docker登錄檔中,例如registry.hub.docker.com,因為它們可能變得非常大,影象被設計為由其他影象層組成,允許在通過網路傳輸影象時傳送最少量的資料。 提示:請注意Dockerhub以回答有關預先可用影象的問題。
問題四:什麼是Docker容器?
這是一個非常重要的問題,所以請確保不要偏離主題。我建議您遵循下面提到的格式: Docker容器包括應用程式及其所有依賴項,但與其他容器共享核心,作為主機作業系統上使用者空間中的獨立程序執行。Docker容器不依賴於任何特定的基礎架構:它們可以在任何計算機,任何基礎架構和任何雲中執行。 現在解釋如何建立Docker容器,可以通過建立Docker映像然後執行它來建立Docker容器,也可以使用Dockerhub上存在的Docker映像。 Docker容器基本上是Docker映象的執行時例項。
問題五:什麼是Docker hub?
Docker hub是一個基於雲的登錄檔服務,允許您連結到程式碼儲存庫,構建映像並測試它們,儲存手動推送的映像以及指向Docker雲的連結,以便您可以將映像部署到主機。它為整個開發流程中的容器映像發現,分發和變更管理,使用者和團隊協作以及工作流自動化提供了集中資源。
問題六:Docker與其他容器技術有何不同?
我認為,您的答案應該包含以下幾點:Docker容器易於在雲中部署。與其他技術相比,它可以在相同的硬體上執行更多應用程式,使開發人員可以輕鬆快速建立,可立即執行的容器化應用程式,並使管理和部署應用程式變得更加容易。您甚至可以與您的應用程式共享容器。 如果你還有一些要點可以新增,你可以這樣做,但要確保上面的解釋在你的答案中。
問題七:什麼是Docker Swarm?
你應該通過解釋Docker Swarn來開始這個答案。它是Docker的本機群集,它將Docker主機池轉變為單個虛擬Docker主機。Docker Swarm提供標準的Docker API,任何已經與Docker守護程序通訊的工具都可以使用Swarm透明地擴充套件到多個主機。 我還建議您新增一些支援的工具:
Dokku Docker Compose Docker Machine Jenkins
問題八:Dockerfile用於什麼?
我認為,應該從解釋Dockerfile的使用開始。Docker可以通過讀取Dockerfile中的指令自動構建影象。 現在我建議你給出一個Dockerfle的小定義。Dockerfile是一個文字文件,其中包含使用者可以在命令列上呼叫以組合影象的所有命令。使用docker構建使用者可以建立一個連續執行多個命令列指令的自動構建。
問題九:我可以在Docker中使用json而不是yaml作為我的compose檔案嗎?
你可以使用json而不是yaml作為你的compose檔案,使用帶有compose的json檔案,指定用於例如的檔名:
docker-compose -f docker-compose.json up
問題十:Docker容器可以擴充套件多遠?
像谷歌和Twitter這樣的大型網路部署,以及像Heroku和dotCloud這樣的平臺提供商都執行在容器技術上,並行執行數十萬甚至數百萬個容器。
問題十一:當Docker容器退出時,我會丟失資料嗎?
當Dcoker容器退出時,不會丟失資料。在您明確刪除容器之前,應用程式寫入磁碟的任何資料都會保留在其容器中。即使容器停止,容器的檔案系統仍然存在。
其它問題
問題一:HTTP如何工作?
與大多數其他協議一樣,HTTP協議在客戶端和伺服器模型中工作。用於發起請求的Web瀏覽器被稱為客戶端,並且響應該請求的Web伺服器軟體被稱為伺服器。全球資訊網聯盟和網際網路工程任務組是HTTP協議標準化的兩個重要方面。HTTP允許在中間體(例如閘道器,代理或隧道)的幫助下改進其請求和響應。使用HTTP協議可以請求的資源可以使用稱為URL(統一資源定位符)的特定型別的URI(統一資源識別符號)來獲得。TCP(傳輸控制協議)用於建立到HTTP使用的應用層埠80的連線。
問題二:如何使軟體可部署?
編寫軟體系統安裝和重新配置指令碼的能力對於控制和自動化更改至關重要。儘管新軟體的實現趨勢越來越明顯,但舊系統和產品的假設是變化很少且很少,因此難以實現自動化變更。作為一個認識到需要以自動化方式公開配置和設定的專業人士,我將使用控制反轉(IoC)和依賴注入,指令碼安裝,測試工具,關注點分離,命令列工具等概念,和基礎設施作為程式碼。
問題你三:DevOps做的最重要的事情是什麼?
DevOps幫助做的最重要的事情是儘可能快地將更改投入生產,同時最大限度地降低軟體質量保證和合規性的風險。這是DevOps的主要目標。但是,DevOps還有許多其他積極的副作用。例如,更清晰的溝通和團隊之間更好的工作關係,從而創造一個壓力較小的工作環境。
問題五:什麼是雙因素身份驗證?
雙因素身份驗證是一種安全過程,其中使用者從不同類別的憑證中提供兩種識別方法; 一個通常是物理令牌,例如卡,另一個通常是記憶的,例如安全碼。
問題六:NoSQL資料庫相比RDBMS有哪些優勢?
優點是: 不太需要ETL 支援非結構化文字 能夠隨時間處理變化 功能廣度 能夠水平擴充套件 支援多種資料結構 供應商的選擇
問題九:您將如何準備遷移?
回答提示:這個問題評估了您對實際專案的體驗,以及它們帶來的所有尷尬和複雜性。在您的答案中包括切換,彩排,回滾和前滾,DNS解決方案,功能切換,逐個抽象和自動化等術語。在很少或根本沒有現有技術的情況下開發綠地系統總是比處理遺留元件和配置更容易。作為候選人,如果您意識到任何有趣的軟體系統實際上將在不斷的遷移中,您將看起來適合該角色。
問題十:如何確保可追溯性?
回答提示:此問題探討了您對指標,日誌記錄,交易行程和報告的態度。您應該能夠確定該度量標準,監視和日誌記錄需要成為軟體系統的核心部分,如果沒有它們,軟體基本上無法顯示維護和診斷。在你的答案中包括SysLog,Splunk,錯誤跟蹤,Nagios,SCOM,Avicode等詞。
問題十一:您遇到了哪些問題,以及如何以符合團隊目標的方式解決這些問題?
回答提示:這個問題的目的是找出你能在工作中處理壓力和不合格的程度。談談你的領導技能,以處理和激勵團隊一起解決問題。談論CI,釋出管理和其他工具,以保持跨學科專案的正常進行。
問題十二:您成為DevOps工程師需要做哪些特殊培訓或教育?
回答提示:DevOps更像是一種思維模式或哲學,而不是技能組合。與DevOps Engineers相關的典型技術技能是Linux系統管理,指令碼編寫以及使用Jenkins和Chef等眾多持續整合或配置管理工具之一的經驗。這一切歸結為,無論你擁有什麼技能,重要的是,有能力快速學習新技能以滿足需求。這一切都與模式識別有關,並且能夠將您的經驗與當前需求相結合。熟練掌握Windows和Linux系統管理,指令碼開發,理解結構化程式設計和麵向物件設計,以及建立和使用RESTful API的經驗需要一個很長的路要走。