Ngân hàng đề — Microsoft Azure DevOps Engineer Expert

Tìm thấy 341 câu.

Câu 251
Note: This question is part of a series of questions that present the same scenario. Each question in the series contains a unique solution that might meet the stated goals. Some question sets might have more than one correct solution, while others might not have a correct solution.

After you answer a question in this section, you will NOT be able to return to it As a result these questions will not appear in the review screen.

You need to use an Azure Pipelines pipeline to build and test an app and test the database of the app. The solution must meet the following requirements.

•The test stages must be run in parallel.
•The Publish_Test_Results stage must always be run.
•The test stages must be run after successful completion of the build stage.
•The Publish_Test_Results stage must be run after completion of all the test stages.

Solution: You include the following elements in the YAML definition of the pipeline.

stages:
  - stage: Build_App
    jobs:
  - stage: Test_App
    dependsOn: [Build_App]
    jobs:
  - stage: Test_Database
    dependsOn: [Build_App]
    jobs:
  - stage: Publish_Test_Results
    dependsOn: 
      - Build_App
      - Test_App
      - Test_Database
    condition: always()
    jobs:


Does this meet the goal?
  1. A Yes
  2. B No
Xem giải thích

🧩 Giải thích nội dung câu hỏi

Câu hỏi thuộc dạng series questions trong kỳ thi chứng chỉ (có thể là AZ-400 hoặc tương tự về Azure DevOps), nơi mỗi câu đưa ra một tình huống và giải pháp YAML cụ thể cho Azure Pipelines (không phải AWS, có thể là nhầm lẫn trong mô tả).

Yêu cầu chính (goals) cần đạt được cho pipeline:
✅ Test stages (Test_App và Test_Database) phải chạy song song (parallel).
✅ Publish_Test_Results stage phải luôn chạy (always run), bất kể kết quả trước đó.
✅ Test stages chỉ chạy sau khi Build stage thành công (successful completion).
✅ Publish_Test_Results phải chạy sau khi tất cả test stages hoàn thành (completion, không yêu cầu thành công).

Giải pháp YAML được đề xuất:
Định nghĩa 4 stages với dependencies và condition như sau:

  • Build_App: stage đầu tiên.
  • Test_App và Test_Database: dependsOn Build_App (chạy sau Build_App).
  • Publish_Test_Results: dependsOn tất cả 3 stages trước, kèm condition: always().

Câu hỏi: Giải pháp này có đạt goals không? (Does this meet the goal?)

(Lưu ý: Kiến thức dựa trên Azure Pipelines YAML schema phiên bản mới nhất 2024-2026, hỗ trợ multi-stage pipelines với parallel execution và conditions – không thay đổi lớn từ 2023).

✅ Đáp án đúng: Yes

Lý do lựa chọn:
Giải pháp YAML hoàn toàn đáp ứng tất cả yêu cầu nhờ cơ chế dependsOn và condition trong Azure Pipelines:

  • Test stages chạy song song: Test_App và Test_Database cùng dependsOn Build_App, không phụ thuộc lẫn nhau → Azure tự động chạy parallel (theo docs: stages with same dependencies run in parallel nếu không chỉ định matrix/strategy).
  • Test stages sau build thành công: dependsOn mặc định yêu cầu dependency succeed (Azure Pipelines chỉ trigger stage tiếp theo nếu prev stages succeed, trừ khi override condition).
  • Publish luôn chạy: condition: always() đảm bảo stage này chạy bất kể (success/fail/canceled).
  • Publish sau tất cả tests: dependsOn cả Build + 2 tests → chờ tất cả complete trước khi chạy.

Hoàn hảo khớp goals! 🛠️

📋 Phân tích tất cả các phương án

  • Yes ✅:
    Đúng vì YAML sử dụng dependsOn chính xác để: (1) Test stages parallel sau build succeed; (2) Publish chờ tất cả + always() đảm bảo chạy mọi lúc. Không vi phạm quy tắc nào của Azure Pipelines (parallel mặc định cho independent deps).

  • No ❌:
    Sai vì giải pháp đúng 100% như phân tích trên. Chọn No sẽ nhầm lẫn về cơ chế: (1) Không phải tests chạy dù build fail (vì dependsOn yêu cầu succeed); (2) Parallel đúng; (3) Always() và multi-dependsOn hoạt động chuẩn. Không có lỗi syntax hay logic.

📘 Tài liệu tham khảo

Kết luận: Đây là giải pháp tối ưu cho Azure DevOps! 🚀

Câu 252
You have an Azure App Service app named App1.

You need to identify when App1 was offline. The solution must minimize administrative effort.

Which troubleshooting category in App Service diagnostics should you use?
  1. A Navigator
  2. B Configuration and Management
  3. C Diagnostic Tools
  4. D Availability and Performance
Xem giải thích

🧩 Phân tích chi tiết nội dung câu hỏi

Câu hỏi tập trung vào Azure App Service (một dịch vụ PaaS của Microsoft Azure để triển khai và quản lý ứng dụng web). Bạn có một ứng dụng tên App1, và nhiệm vụ là xác định thời điểm App1 bị offline (tức là không khả dụng). Giải pháp phải tối thiểu hóa nỗ lực quản trị (minimize administrative effort), nghĩa là sử dụng công cụ sẵn có, không cần script phức tạp hay can thiệp thủ công nhiều.
Cụ thể, câu hỏi yêu cầu chọn danh mục troubleshooting (phân loại chẩn đoán) trong App Service diagnostics (công cụ chẩn đoán tích hợp sẵn trong Azure portal). Đây là tính năng giúp phân tích log, metrics và phát hiện vấn đề tự động, dựa trên phiên bản mới nhất của Azure App Service (cập nhật đến năm 2026, theo tài liệu Azure docs).

✅ Đáp án đúng: Availability and Performance

Lý do lựa chọn:
Danh mục Availability and Performance cung cấp các công cụ chuyên biệt để theo dõi tính khả dụng (availability) của ứng dụng, bao gồm detection tự động downtime (thời gian offline), metrics về uptime/downtime, response time, và failed requests. Nó sử dụng dữ liệu từ Application Insights hoặc metrics Azure Monitor để hiển thị timeline chính xác khi app bị offline, mà không cần cấu hình thêm – hoàn toàn tối thiểu hóa nỗ lực quản trị. Đây là lựa chọn tối ưu theo best practices Azure (phiên bản 2026 vẫn giữ nguyên).

📋 Giải thích tất cả các phương án

  • ❌ [SAI] Navigator
    Navigator chỉ là công cụ điều hướng (navigation hub) trong App Service diagnostics, giúp browse qua các danh mục khác nhau. Nó không cung cấp phân tích cụ thể về downtime hay metrics offline, chỉ dùng để tìm kiếm nhanh chứ không giải quyết trực tiếp vấn đề. Sử dụng nó sẽ tăng nỗ lực vì phải chuyển sang danh mục khác.

  • ❌ [SAI] Configuration and Management
    Danh mục này tập trung vào cấu hình và quản lý (như scaling, slots, app settings, SSL). Nó không liên quan đến theo dõi thời gian offline, mà chỉ kiểm tra config có gây vấn đề không. Không có tool phát hiện downtime tự động, dẫn đến nỗ lực cao hơn (phải log thủ công).

  • ❌ [SAI] Diagnostic Tools
    Đây là công cụ chẩn đoán chung (như log stream, Kudu console, quota alerts). Nó hữu ích cho debug runtime nhưng không chuyên sâu về availability metrics hay timeline offline. Bạn phải tự phân tích log lớn, không minimize effort như yêu cầu.

  • ✅ [ĐÚNG] Availability and Performance
    Như đã giải thích ở trên: Chuyên biệt cho downtime detection, hiển thị biểu đồ thời gian thực với ít nỗ lực nhất (chỉ click vào danh mục là có insight). Hoàn hảo cho yêu cầu.

📘 Tài liệu tham khảo

Câu 253
Your company develops an app for iOS. All users of the app have devices that are members of a private distribution group in Microsoft Visual Studio App Center.
You plan to distribute a new release of the app.
You need to identify which certificate file you require to distribute the new release from App Center.
Which file type should you upload to App Center?
  1. A .cer
  2. B .pfx
  3. C .p12
  4. D .pvk
Xem giải thích

🧩 Phân tích chi tiết câu hỏi trắc nghiệm

📖 Nội dung câu hỏi:
Câu hỏi tập trung vào quy trình phân phối (distribute) một bản phát hành mới của ứng dụng iOS qua Microsoft Visual Studio App Center. Cụ thể:

  • Công ty đang phát triển app cho iOS.
  • Tất cả thiết bị của người dùng đều là thành viên của một private distribution group trong App Center (nhóm phân phối riêng tư, thường dùng cho testing nội bộ hoặc beta testing).
  • Bạn cần xác định loại certificate file phải upload lên App Center để phân phối bản release mới.
    Mục tiêu là chọn đúng định dạng file chứng chỉ (certificate) phù hợp cho iOS code signing và distribution trong App Center. Đây là bước quan trọng để App Center có thể ký (sign) và phân phối app IPA một cách an toàn, tuân thủ yêu cầu của Apple.
    Lưu ý: Quy trình này liên quan đến Distribution Certificate từ Apple Developer Portal, không phải Development Certificate. App Center sử dụng certificate này để rebuild và distribute app cho nhóm private.

✅ Đáp án đúng: .p12
Lý do lựa chọn: Theo tài liệu chính thức của Microsoft App Center (cập nhật đến phiên bản mới nhất năm 2025-2026, trước khi dịch vụ chính thức deprecated vào cuối 2025), để phân phối app iOS qua private distribution groups, bạn phải upload Distribution Certificate dưới định dạng .p12 (PKCS#12). File .p12 chứa cả private key và public certificate, được bảo vệ bằng password, giúp App Center ký app một cách tự động. Đây là định dạng chuẩn được Apple và App Center hỗ trợ trực tiếp cho iOS distribution builds. Không dùng .p12 sẽ dẫn đến lỗi code signing khi distribute.

🛠️ Giải thích tất cả các phương án (đúng và sai)

  • ❌ .cer
    Sai vì file .cer chỉ chứa public certificate (DER-encoded), không bao gồm private key. App Center yêu cầu private key để ký app iOS, nên .cer chỉ dùng để export/import certificate công khai (ví dụ: vào Keychain), không đủ cho distribution. Upload .cer sẽ báo lỗi "missing private key".

  • ❌ .pfx
    Sai vì mặc dù .pfx cũng là định dạng PKCS#12 (tương tự .p12, chứa cả certificate và private key), nhưng App Center chỉ chấp nhận .p12 cho iOS distribution. .pfx phổ biến hơn trên Windows, nhưng docs App Center chỉ rõ ".p12 file" cho iOS code signing. Sử dụng .pfx có thể gây lỗi compatibility hoặc không được hỗ trợ đầy đủ.

  • ✅ .p12
    Đúng như đã giải thích ở trên. Đây là định dạng chuẩn từ Apple (export từ Keychain Access trên macOS), chứa đầy đủ certificate + private key + intermediates. App Center hướng dẫn export chính xác từ Apple Developer Portal và upload .p12 với password.

  • ❌ .pvk
    Sai vì .pvk là file private key riêng lẻ (Private Key format, thường dùng trên Windows cho IIS hoặc cũ). Không chứa certificate đầy đủ, và App Center không hỗ trợ .pvk cho iOS. Thường kết hợp với .cer (.spc + .pvk), nhưng không phù hợp cho mobile distribution.

📘 Tài liệu tham khảo (cập nhật mới nhất đến 2026)

  • Microsoft Docs - App Center iOS Distribution: Upload certificates to App Center → Rõ ràng chỉ định ".p12 distribution certificate".
  • App Center Code Signing Guide: Code signing for iOS (phiên bản archive 2025).
  • Apple Developer: Export Distribution Certificate → Hướng dẫn export .p12.
  • Lưu ý cập nhật: App Center chính thức end-of-life từ 01/11/2025, khuyến nghị migrate sang GitHub Actions hoặc Azure Pipelines, nhưng quy trình certificate vẫn giữ nguyên đến thời điểm đó (theo thông báo Microsoft 2024-2026).

Hy vọng phân tích này giúp bạn nắm vững quy trình! 🚀 Nếu cần ví dụ code hoặc migrate sang Azure DevOps, hãy hỏi thêm nhé!

Câu 254
You manage source code control and versioning by using GitHub.

A large file is committed to a repository accidentally.

You need to reduce the size of the repository. The solution must remove the file from the repository.

What should you use?
  1. A bfg
  2. B lfs
  3. C gvfs
  4. D init
Xem giải thích

🧩 Phân tích chi tiết nội dung câu hỏi

Câu hỏi tập trung vào việc quản lý mã nguồn và phiên bản hóa bằng GitHub (một nền tảng phổ biến cho Git repositories). Tình huống cụ thể: Một file lớn (large file) đã bị commit nhầm vào repository, dẫn đến kích thước repo tăng vọt. Yêu cầu giải pháp phải giảm kích thước repository và loại bỏ hoàn toàn file đó khỏi repository (bao gồm cả lịch sử commit, không chỉ từ working directory).

📌 Mục tiêu chính: Không chỉ xóa file khỏi branch hiện tại mà còn dọn dẹp lịch sử Git (Git history) để repo thực sự nhỏ gọn hơn, vì Git lưu trữ toàn bộ lịch sử file. Đây là vấn đề phổ biến với các repo lớn trên GitHub, đặc biệt khi xử lý binary files hoặc dữ liệu lớn. Giải pháp cần là công cụ chuyên dụng cho Git cleanup, cập nhật theo best practices GitHub đến năm 2026 (hỗ trợ Git 2.45+ và GitHub Actions).

✅ Đáp án đúng: bfg

Lý do chọn đáp án đúng:
🛠️ BFG Repo-Cleaner là công cụ dòng lệnh chuyên dụng để dọn dẹp repo Git một cách nhanh chóng và hiệu quả, đặc biệt loại bỏ các large files khỏi toàn bộ lịch sử commit (reflog, tags, branches). Nó nhanh hơn git filter-branch (công cụ Git gốc cũ kỹ) gấp nhiều lần nhờ sử dụng JVM và thuật toán tối ưu.

  • Quy trình: Clone repo mirror (git clone --mirror), chạy bfg --delete-files largefile.zip repo.git, sau đó git reflog expire --expire=now --all && git gc --prune=now --aggressive.
  • Kết quả: Repo size giảm đáng kể, file bị xóa vĩnh viễn.
  • Cập nhật 2026: Vẫn là recommended tool trên GitHub docs cho cleanup large files (tương thích GitHub Enterprise 3.15+).
    📘 Nguồn tham khảo: BFG Repo-Cleaner GitHub, GitHub Docs: Removing files from history.

📋 Giải thích tất cả các phương án (đúng/sai)

Dưới đây là phân tích chi tiết từng lựa chọn, giữ nguyên nội dung gốc bằng tiếng Anh. Tôi đánh dấu ✅ đúng hoặc ❌ sai, kèm lý do cụ thể:

  • bfg ✅ ĐÚNG
    🧹 Như đã giải thích ở trên, BFG là lựa chọn tối ưu để xóa large files khỏi history Git, giảm size repo ngay lập tức mà không làm mất dữ liệu khác. Hiệu suất cao với repo lớn (hàng GB), an toàn hơn filter-branch vì ít lỗi edge-case. Đây là standard solution cho GitHub.

  • lfs ❌ SAI
    🚫 Git Large File Storage (LFS) dùng để quản lý large files bằng cách thay thế nội dung file bằng pointer nhỏ gọn, lưu file thật trên server LFS (như GitHub LFS). Nó không xóa file khỏi history mà chỉ optimize storage cho tương lai. Nếu file đã commit nhầm, LFS chỉ giúp tránh vấn đề tiếp theo, không giảm size repo hiện tại.
    📌 Cập nhật 2026: Git LFS 3.5+ hỗ trợ better quotas trên GitHub, nhưng không dành cho cleanup history.

  • gvfs ❌ SAI
    🚫 Git Virtual File System (GVFS) là công cụ của Microsoft (nay là Scalar trong VFS for Git) để xử lý repo cực lớn (terabyte-scale) bằng virtual file system, chỉ tải metadata/on-demand files. Nó không xóa file nào khỏi repo, chỉ cải thiện performance checkout/clone. Không giải quyết vấn đề large file đã commit.
    📌 Cập nhật 2026: Đã deprecated GVFS, thay bằng Scalar (Git 2.44+), nhưng vẫn không phải tool cleanup.

  • init ❌ SAI
    🚫 git init chỉ khởi tạo một repo Git mới (tạo thư mục .git rỗng). Hoàn toàn không liên quan đến việc xóa file hoặc giảm size repo hiện tại, vì nó không chạm vào repo cũ. Nếu dùng, bạn phải migrate thủ công – rất rườm rà và mất history. Không phải giải pháp chuyên dụng.

🏆 Kết luận & Best Practices

  • Giải pháp tổng thể: Sử dụng BFG kết hợp git push --force (cẩn thận với team collab) hoặc GitHub's Support portal cho force-push protected branches.
  • Lời khuyên từ Azure DevOps Expert (tương đương GitHub): Trong Azure Repos, dùng tương tự BFG hoặc tf git clean; migrate sang GitHub nếu cần LFS quota cao hơn. Tránh commit large files bằng .gitignore + pre-commit hooks.
    📘 Nguồn bổ sung: GitHub Large Files Guide, Pro Git Book 2nd Ed - Rewriting History.
Câu 255
You manage projects by using Azure Boards.

You have a current work item name itemA that is dependant on a work item named itemB.

You need to define the dependency for itemA.

What should you do in the web portal for Azure DevOps?
  1. A Add a Parent link to the user story of itemA.
  2. B From Backlogs, open the context menu, select Add link, and then select itemA. Set Link type to References and add the ID of itemB.
  3. C From itemA, open the Links tab, and then select Add link. Set Link type to References and add the ID of itemB.
  4. D From itemA, open the Links tab, and then select Add link. Set Link type to Successor and add the ID of itemB.
Xem giải thích

🧩 Phân tích chi tiết câu hỏi

Câu hỏi gốc:
You manage projects by using Azure Boards.
You have a current work item name itemA that is dependant on a work item named itemB.
You need to define the dependency for itemA.
What should you do in the web portal for Azure DevOps?

✅ Giải thích nội dung câu hỏi:
Câu hỏi tập trung vào việc quản lý dependencies (phụ thuộc) giữa các work items trong Azure Boards (một phần của Azure DevOps). Cụ thể:

  • Bạn đang quản lý dự án qua Azure Boards.
  • Có work item itemA phụ thuộc vào (depends on) work item itemB, nghĩa là itemB phải hoàn thành trước thì itemA mới có thể bắt đầu (itemB là predecessor, itemA là successor).
  • Nhiệm vụ: Định nghĩa dependency này trong web portal của Azure DevOps (giao diện web.azure.devops.com).
    Đây là tình huống phổ biến trong agile/Scrum, nơi dependencies giúp visualize backlog và critical path trong Boards/Kanban. Azure DevOps hỗ trợ Links tab để tạo các loại liên kết như Parent-Child, Related, hoặc Predecessor-Successor cho dependencies (theo phiên bản mới nhất Azure DevOps Services 2024-2026, không thay đổi cơ bản).

🛠️ Đáp án đúng:
From itemA, open the Links tab, and then select Add link. Set Link type to Successor and add the ID of itemB.

✅ Lý do chọn đáp án đúng:

  • Trong Azure Boards, để định nghĩa dependency "itemA depends on itemB" (itemA là successor), bạn mở itemA (work item sau), vào Links tab, chọn Add link, tìm/search ID của itemB (predecessor), và đặt Link type = Successor.
  • Điều này tạo liên kết hai chiều: Từ itemA nhìn itemB là Predecessor, từ itemB nhìn itemA là Successor. Giúp tự động visualize trong Backlogs, Delivery Plans, và báo cáo critical path.
  • Đây là quy trình chuẩn theo docs Microsoft, đảm bảo dependency được track chính xác mà không ảnh hưởng hierarchy (Parent-Child).

📋 Giải thích tất cả các phương án (đúng/sai)

  • ❌ Add a Parent link to the user story of itemA.
    Sai vì Parent link dùng cho hierarchy (cấu trúc cha-con, như Epic > Feature > User Story), không phải dependency ngang hàng. Nếu dùng Parent, itemB sẽ thành "cha" của itemA, làm thay đổi cấu trúc backlog và không track thứ tự thực hiện đúng (dependencies là peer-to-peer, không phải containment).

  • ❌ From Backlogs, open the context menu, select Add link, and then select itemA. Set Link type to References and add the ID of itemB.
    Sai vì: (1) Từ Backlogs view, context menu chỉ hỗ trợ Parent/Child hoặc Related cơ bản, không phải Successor/Predecessor đầy đủ. (2) Link type = References chỉ là liên kết chung (related work), không chỉ rõ dependency/sequence, nên không visualize critical path hay block itemA cho đến khi itemB done.

  • ❌ From itemA, open the Links tab, and then select Add link. Set Link type to References and add the ID of itemB.
    Sai vì Link type = References chỉ tạo liên kết "related" mơ hồ, không định nghĩa dependency thứ tự (predecessor-successor). Kết quả: Không tự động filter/block trong queries, boards, hoặc plans; chỉ là note liên kết thông thường.

  • ✅ From itemA, open the Links tab, and then select Add link. Set Link type to Successor and add the ID of itemB.
    Đúng hoàn toàn như giải thích trên. Quy trình chính xác từ work item chi tiết (Details view), đảm bảo dependency được sync hai chiều và hỗ trợ advanced features như Dependencies board.

📘 Tài liệu tham khảo (cập nhật mới nhất đến 2026)

Hy vọng phân tích này giúp bạn nắm vững Azure Boards! 🚀 Nếu cần demo thực tế, hãy hỏi thêm.

Câu 256
Note: This question is part of a series of questions that present the same scenario. Each question in the series contains a unique solution that might meet the stated goals. Some question sets might have more than one correct solution, while others might not have a correct solution.
After you answer a question in this section, you will NOT be able to return to it. As a result, these questions will not appear in the review screen.
Your company has a project in Azure DevOps for a new web application.
You need to ensure that when code is checked in, a build runs automatically.
Solution: From the Pre-deployment conditions settings of the release pipeline, you select After stage.
Does this meet the goal?
  1. A Yes
  2. B No
Xem giải thích

🧩 Phân tích chi tiết nội dung câu hỏi

Câu hỏi này thuộc dạng case study (phân tích tình huống) trong kỳ thi chứng chỉ Azure DevOps, thường xuất hiện trong các bộ câu hỏi liên tiếp với cùng một scenario.
Tình huống (Scenario): Công ty bạn có một project trong Azure DevOps dành cho ứng dụng web mới.
Mục tiêu (Goal): Đảm bảo rằng mỗi khi code được check-in (commit và push vào repository), một build sẽ chạy tự động (tức là kích hoạt Continuous Integration - CI).
Giải pháp đề xuất (Solution): Từ phần Pre-deployment conditions trong release pipeline, chọn tùy chọn After stage.
Câu hỏi chính: Giải pháp này có đạt được mục tiêu không? (Does this meet the goal?)

📘 Lưu ý quan trọng từ câu hỏi: Đây là câu hỏi một chiều (không quay lại được), và có thể có nhiều hoặc không có giải pháp đúng trong series. Chủ đề tập trung vào pipelines trong Azure DevOps (build và release), không liên quan trực tiếp đến AWS như mô tả ban đầu (có thể là nhầm lẫn).

✅ Đáp án đúng và lý do lựa chọn

Đáp án đúng: No
Lý do: Giải pháp này không đạt mục tiêu vì nó chỉ cấu hình điều kiện kích hoạt release pipeline (triển khai) sau một stage cụ thể trong release, chứ không liên quan đến việc trigger build tự động khi check-in code. Để đạt CI (build tự động), cần cấu hình CI trigger trong build pipeline (YAML hoặc classic), ví dụ: trigger: - main hoặc triggers trên branch cụ thể. Pre-deployment conditions chỉ dùng cho release gates/approvals, không ảnh hưởng đến build từ code commit. (Kiến thức cập nhật Azure DevOps 2024-2026: Không thay đổi cơ bản ở phiên bản mới nhất).

🛠️ Giải thích tất cả các phương án

  • Yes ❌
    Sai vì: Chọn "Yes" ngụ ý giải pháp đạt mục tiêu, nhưng Pre-deployment conditions > After stage chỉ kiểm soát thứ tự stage trong release pipeline (ví dụ: release sau stage "QA" thành công). Nó không trigger build pipeline từ code check-in. Đây là nhầm lẫn giữa build (CI) và release (CD). Nếu dùng, build vẫn phải trigger thủ công hoặc CI riêng, không tự động từ commit.

  • No ✅
    Đúng vì: Giải pháp không meet the goal do không giải quyết tự động hóa build từ check-in. Thay vào đó, cần:

    1. Tạo build pipeline với CI trigger (tự động chạy khi push code).
    2. Hoặc dùng PR triggers cho pull requests.
      Pre-deployment conditions thuộc release, chỉ dùng cho deployment approvals/gates (như manual approval sau stage), không kết nối với source control events. Trong Azure DevOps mới nhất (2026), build triggers vẫn dựa trên YAML trigger: hoặc classic triggers.

📘 Tài liệu tham khảo

Hy vọng phân tích này giúp bạn ôn thi hiệu quả! 🚀 Nếu cần ví dụ YAML config CI, hãy hỏi thêm.

Câu 257 Chọn nhiều đáp án
You have a project in Azure DevOps.
You plan to deploy a self-hosted agent by using an unattended configuration script.
Which two values should you define in the configuration script? Each correct answer presents part of the solution.
NOTE: Each correct selection is worth one point.
  1. A authorization credentials
  2. B the project name
  3. C the deployment group name
  4. D the organization URL
  5. E the agent pool name
Xem giải thích

🧩 Phân tích chi tiết nội dung câu hỏi

Câu hỏi tập trung vào quy trình triển khai (deploy) một self-hosted agent trong Azure DevOps bằng cách sử dụng unattended configuration script (script cấu hình tự động không cần tương tác thủ công).

  • Bối cảnh: Bạn đang làm việc với một project trong Azure DevOps. Self-hosted agent là agent chạy trên máy chủ tự quản lý (không phải Microsoft-hosted), thường dùng cho các pipeline CI/CD cần tùy chỉnh môi trường.
  • Yêu cầu cụ thể: Script cấu hình tự động cần define (xác định) hai giá trị chính để agent có thể kết nối và đăng ký với Azure DevOps organization. Đây là câu hỏi trắc nghiệm multi-select (chọn nhiều), mỗi lựa chọn đúng chiếm 1 điểm.
  • Mục tiêu: Xác định hai giá trị bắt buộc trong script để quá trình config diễn ra mượt mà, đảm bảo agent authenticate và join đúng organization/pool.
  • Phiên bản cập nhật: Dựa trên tài liệu Azure DevOps mới nhất (tính đến 2026), script config agent sử dụng công cụ config.sh (Linux/Mac) hoặc config.cmd (Windows), với các tham số cốt lõi như --url và --auth (theo docs Azure DevOps Pipelines Agents - Self-hosted).

📘 Tài liệu tham khảo:

✅ Đáp án đúng và lý do lựa chọn

Hai đáp án đúng là:

  • authorization credentials
  • the organization URL

Lý do lựa chọn 🛠️:

  • Đây là hai tham số bắt buộc trong script unattended config để agent có thể xác thực (authenticate) và kết nối với Azure DevOps organization.
    • --url: Chỉ định URL của organization (ví dụ: https://dev.azure.com/myorg), giúp agent biết nơi đăng ký.
    • --auth PAT hoặc credentials: Cung cấp Personal Access Token (PAT) hoặc authorization token để agent đăng ký mà không cần input thủ công.
  • Không có hai giá trị này, script sẽ thất bại ngay từ bước kết nối, dẫn đến agent không hoạt động. Các giá trị khác chỉ là tùy chọn hoặc dùng ở ngữ cảnh khác (như pool/deployment group).

📋 Giải thích tất cả các phương án (đúng/sai)

Dưới đây là phân tích từng lựa chọn một cách chi tiết, giữ nguyên văn bản gốc bằng tiếng Anh. Mỗi phương án được đánh giá dựa trên script config unattended chuẩn của Azure DevOps:

  • ✅ authorization credentials
    Đúng 🏆: Đây là giá trị bắt buộc (tham số --auth hoặc --token), thường là PAT với scopes như Agent Pools (Read & Manage). Không có credentials, agent không thể authenticate và join organization, dẫn đến lỗi "Unauthorized".

  • ❌ the project name
    Sai 🚫: Project name không được yêu cầu trong script config agent unattended. Agent đăng ký ở mức organization hoặc agent pool, không phải project cụ thể. Project chỉ liên quan khi chạy pipeline, không phải lúc config agent.

  • ❌ the deployment group name
    Sai 🚫: Deployment group name chỉ dùng khi config agent vào deployment group (tham số tùy chọn --deploymentgroup). Câu hỏi không đề cập deployment group, mà tập trung config agent cơ bản (pool-level), nên không bắt buộc.

  • ✅ the organization URL
    Đúng 🏆: Giá trị bắt buộc (tham số --url), ví dụ https://dev.azure.com/{organization}. Đây là điểm kết nối đầu tiên, giúp script biết organization nào để agent join. Thiếu nó, script không chạy được.

  • ❌ the agent pool name
    Sai 🚫: Agent pool name là tùy chọn (tham số --pool), mặc định agent join pool "Default". Không bắt buộc define trong script unattended cơ bản, trừ khi chỉ định pool cụ thể.

Tóm tắt nhanh 🎯: Script unattended chuẩn: ./config.sh --unattended --url https://dev.azure.com/org --auth PAT --pool MyPool (chỉ --url và --auth là cốt lõi). Các lựa chọn sai thường nhầm lẫn với config nâng cao hoặc interactive mode!

Câu 258
You have an Azure subscription that contains an Azure Kubernetes Service (AKS) instance named AKS1.

You collect and analyze metrics for AKS1 by using the Azure Monitor managed service for Prometheus.

You need to analyze the performance of AKS1.

Which query language should you use?
  1. A PL/SQL
  2. B PromQL
  3. C SparkQL
  4. D KQL
Xem giải thích

🧩 Phân tích chi tiết nội dung câu hỏi

Câu hỏi này thuộc lĩnh vực Azure Kubernetes Service (AKS) và giám sát hiệu suất (monitoring) trong Microsoft Azure. Cụ thể:

  • Bạn đang quản lý một Azure subscription chứa một instance AKS tên là AKS1.
  • Metrics (chỉ số đo lường) của AKS1 được thu thập và phân tích bằng Azure Monitor managed service for Prometheus – đây là dịch vụ quản lý của Azure dành cho Prometheus, giúp giám sát các metrics thời gian thực (time-series metrics) trong môi trường Kubernetes.
  • Yêu cầu chính: Phân tích hiệu suất (performance) của AKS1, nghĩa là bạn cần viết query để truy vấn và phân tích dữ liệu metrics như CPU, memory, pod status, network traffic, v.v.
  • Vấn đề cốt lõi: Xác định ngôn ngữ query (query language) phù hợp để thực hiện việc này trong Azure Monitor for Prometheus.

Dịch vụ này dựa trên Prometheus open-source, nên ngôn ngữ query chuẩn là PromQL. Đây là kiến thức cập nhật đến năm 2026, theo tài liệu chính thức của Azure (Azure Monitor managed Prometheus vẫn sử dụng PromQL làm ngôn ngữ chính thức cho metrics querying, không thay đổi trong các bản cập nhật gần nhất như năm 2024-2026).

📘 Tài liệu tham khảo:

✅ Đáp án đúng: PromQL

Lý do lựa chọn:

  • Azure Monitor managed service for Prometheus được thiết kế để tương thích hoàn toàn với Prometheus, và ngôn ngữ query duy nhất được hỗ trợ chính thức cho việc phân tích metrics là PromQL (Prometheus Query Language).
  • PromQL cho phép viết các query mạnh mẽ để phân tích performance như rate(http_requests_total[5m]), kube_pod_status_phase{phase="Running"}, giúp visualize dữ liệu trên Grafana hoặc Azure portal.
  • 🛠️ Đây là lựa chọn tối ưu, hiệu quả và chuẩn hóa cho AKS monitoring, tránh phải migrate sang các công cụ khác.

🧩 Giải thích chi tiết tất cả các phương án

  • PL/SQL ❌
    Sai vì PL/SQL là ngôn ngữ lập trình thủ tục của Oracle Database, dùng cho stored procedures và SQL queries trong môi trường relational database. Không liên quan đến metrics time-series hay Prometheus trong Azure/AKS. Sử dụng PL/SQL ở đây sẽ không thể query metrics của AKS1.

  • PromQL ✅
    Đúng vì đây chính là Prometheus Query Language – ngôn ngữ query native của Prometheus, được Azure Monitor managed service hỗ trợ đầy đủ. Nó chuyên dụng cho việc phân tích performance metrics của Kubernetes (như CPU/memory usage, node/pod health), với syntax linh hoạt như selectors, aggregations, và functions thời gian thực. Hoàn hảo cho yêu cầu của câu hỏi.

  • SparkQL ❌
    Sai vì SparkQL không phải là ngôn ngữ query chuẩn (có thể ám chỉ Spark SQL trong Apache Spark, dùng cho big data processing). Spark phù hợp cho batch/streaming analytics trên dữ liệu lớn, nhưng không dùng cho real-time metrics querying trong Prometheus/AKS. Azure có Azure Synapse hoặc Databricks cho Spark, không phải Azure Monitor for Prometheus.

  • KQL ❌
    Sai vì KQL (Kusto Query Language) là ngôn ngữ của Azure Data Explorer và Azure Monitor Logs (Log Analytics), dùng cho log data querying (như search hoặc summarize). Không hỗ trợ Prometheus metrics time-series; Azure tách biệt logs (KQL) và metrics (PromQL) rõ ràng trong AKS monitoring.

Câu 259
You have a project in Azure DevOps named App Project that is used to develop an app named App1. App1Project has an Azure Boards team dashboard that is used to monitor the progress of App1 and track work items.

You need to track how long it takes to close a work item once work for the item has commenced.

Which type of widget should you add to the dashboard?
  1. A sprint burndown
  2. B velocity
  3. C lead time
  4. D cycle time
Xem giải thích

🧩 Phân tích chi tiết nội dung câu hỏi

Câu hỏi tập trung vào Azure DevOps Boards trong dự án có tên "App Project" dùng để phát triển ứng dụng "App1". Dashboard của team đang được sử dụng để theo dõi tiến độ và quản lý work items (các mục công việc như task, bug, story).

Yêu cầu cụ thể: Theo dõi thời gian để đóng (close) một work item sau khi công việc cho item đó đã bắt đầu (commenced). Nghĩa là đo lường khoảng thời gian từ lúc bắt đầu thực hiện công việc (ví dụ: chuyển trạng thái sang "In Progress" hoặc "Doing") đến khi hoàn thành và đóng item (chuyển sang "Done" hoặc "Closed").

📘 Bối cảnh: Trong Azure DevOps (phiên bản mới nhất 2024-2026), các widget trên dashboard giúp visualize metrics từ Azure Boards. Widget phù hợp phải đo cycle time – thời gian thực tế làm việc, không bao gồm thời gian chờ đợi trước khi bắt đầu.

✅ Đáp án đúng: cycle time

Lý do lựa chọn:
Widget cycle time chính xác đo lường thời gian chu kỳ của work item, từ lúc công việc bắt đầu (state changed to "Doing" hoặc tương đương, tùy process template như Agile/Scrum) đến khi hoàn thành (state "Done"). Điều này khớp hoàn hảo với yêu cầu "track how long it takes to close a work item once work for the item has commenced" – không tính thời gian chờ đợi trước đó.

🛠️ Cách sử dụng: Thêm widget "Cycle Time" từ marketplace hoặc built-in widgets, configure cho team/project, hiển thị biểu đồ trung bình/thống kê theo iteration hoặc query cụ thể. Dữ liệu dựa trên Analytics service của Azure DevOps (OData queries).

📘 Tài liệu tham khảo:

📋 Giải thích tất cả các phương án (đúng và sai)

  • ❌ sprint burndown
    Phương án này SAI vì widget "Sprint Burndown" chỉ theo dõi lượng công việc còn lại (remaining work/effort) trong một sprint cụ thể, hiển thị đường cong burn-down theo ngày. Nó không đo thời gian đóng work item sau khi bắt đầu, mà tập trung vào tiến độ sprint tổng thể (scope creep, incomplete work). Không phù hợp với yêu cầu cá nhân hóa cho từng work item.

  • ❌ velocity
    Phương án này SAI vì widget "Velocity" đo tốc độ hoàn thành story points qua các sprint (planned vs. completed), giúp dự báo capacity tương lai. Nó là metric cấp team/sprint, không track thời gian cụ thể từ bắt đầu đến đóng cho từng work item riêng lẻ.

  • ❌ lead time
    Phương án này SAI vì "Lead Time" (thường dùng widget "Lead Time" hoặc custom query) đo tổng thời gian từ lúc tạo work item đến khi hoàn thành, bao gồm cả thời gian chờ đợi (queue/waiting before starting). Yêu cầu chỉ tập trung "sau khi công việc đã bắt đầu (commenced)", nên lead time quá rộng, không chính xác.

  • ✅ cycle time
    Phương án này ĐÚNG như đã giải thích ở trên: Đo chính xác thời gian làm việc thực tế (từ "Doing" đến "Done"), giúp cải thiện hiệu suất dev process. Hỗ trợ filter theo team, area path, loại work item trong Azure DevOps phiên bản mới nhất.

🧩 Lưu ý bổ sung: Để triển khai, đảm bảo enable Analytics trên project (free tier hỗ trợ). Nếu dùng Basic process, cycle time dựa trên custom states; với Agile/Scrum/CMMI thì tự động. Test trên dashboard để validate metrics!

Câu 260
Note: This question is part of a series of questions that present the same scenario. Each question in the series contains a unique solution that might meet the stated goals. Some question sets might have more than one correct solution, while others might not have a correct solution.
After you answer a question in this section, you will NOT be able to return to it. As a result, these questions will not appear in the review screen.
Your company has a project in Azure DevOps for a new web application.
You need to ensure that when code is checked in, a build runs automatically.
Solution: From the Pre-deployment conditions settings of the release pipeline, you select Batch changes while a build is in progress.
Does this meet the goal?
  1. A Yes
  2. B No
Xem giải thích

🧩 Phân tích chi tiết nội dung câu hỏi

Câu hỏi thuộc dạng series questions trong kỳ thi chứng chỉ (có thể là AZ-400 hoặc tương tự), nơi mỗi câu trình bày một tình huống giống nhau nhưng giải pháp khác nhau. Tình huống chính: Công ty bạn có dự án trong Azure DevOps cho một ứng dụng web mới. Mục tiêu (goal): Đảm bảo rằng khi code được check-in (commit vào repository), một build sẽ chạy tự động (tức là kích hoạt Continuous Integration - CI).

Giải pháp được đề xuất: Trong release pipeline, tại phần Pre-deployment conditions settings, chọn tùy chọn Batch changes while a build is in progress.

Câu hỏi cụ thể: Giải pháp này có đạt được mục tiêu không? (Does this meet the goal?).
📌 Lưu ý từ câu hỏi: Sau khi trả lời, không thể quay lại; đây không phải review screen.

🛠️ Bối cảnh kỹ thuật (cập nhật đến 2026): Trong Azure DevOps (phiên bản mới nhất 2024-2026), để trigger build tự động khi check-in code, cần cấu hình CI trigger trong pipeline (build pipeline) – ví dụ: YAML pipeline với trigger hoặc classic build pipeline với Continuous Integration trigger trên branch (như main/master). Release pipeline chỉ dùng cho Continuous Deployment (CD), không trigger build.

✅ Đáp án đúng: No

Lý do chọn đáp án đúng 🏆:
Giải pháp này KHÔNG đạt mục tiêu vì nó chỉ ảnh hưởng đến release pipeline, cụ thể là tùy chọn Batch changes while a build is in progress trong Pre-deployment conditions. Tùy chọn này dùng để gom nhóm (batch) các deployment changes trong khi một build đang chạy, nhằm tránh deploy liên tục và tiết kiệm tài nguyên (prevents parallel deployments). Nó không liên quan đến việc trigger build tự động từ check-in code. Để đạt CI, phải cấu hình trigger ở build pipeline, không phải release. Đây là giải pháp sai hoàn toàn cho goal CI.

📋 Giải thích tất cả các phương án

  • Yes ❌ SAI:
    Phương án này sai vì giả định giải pháp đạt goal, nhưng thực tế Pre-deployment conditions chỉ kiểm soát deployment behavior trong release pipeline (batch changes để tránh conflict deploy). Nó không trigger build từ check-in code. Nếu chọn Yes, bạn sẽ nhầm lẫn giữa CI (build) và CD (release). Trong Azure DevOps 2026, docs xác nhận CI trigger nằm ở build pipeline settings, không phải release.

  • No ✅ ĐÚNG:
    Phương án này đúng vì giải pháp không meet the goal. Build tự động cần CI trigger (path filters, branch filters) ở build pipeline (YAML: trigger: - main hoặc classic: Triggers tab). Release pipeline chỉ deploy artifact từ build, và "Batch changes" chỉ optimize deployment queue, không khởi tạo build. Giải pháp đúng thực tế: Vào Pipelines > Builds > Edit > Triggers > Enable Continuous Integration.

📘 Tài liệu tham khảo (cập nhật mới nhất 2026)

💡 Tip cho kỳ thi: Luôn phân biệt build pipeline (CI) vs release pipeline (CD). Giải pháp đúng cho goal này: Triggers tab trong build pipeline! 🚀