The 20 concepts most likely to cost you marks, one question each, with the answer and a one-line shortcut.
Each one maps to a skill in Microsoft's official AI-200 outline, split to match the exam's domain weights:
Every push to the main branch of a GitHub repository must rebuild a container image in Azure. The team has no build servers or self-hosted runners. What should you create?
✓A An ACR task with a source code commit trigger (correct answer)
B A GitHub Actions workflow on a self-hosted runner
C A scheduled az acr import job
D Geo-replication to the region closest to the developers
Shortcut: Rebuild on every git push with no build servers = ACR task with a commit trigger. A self-hosted runner is exactly the infrastructure the team doesn't have, az acr import copies existing images rather than building them, and geo-replication only copies images between regions.
More
An ACR task with a commit trigger watches the repository and runs the build inside Azure Container Registry on every push, so no build infrastructure is needed. A self-hosted runner is exactly the infrastructure the team doesn't have, az acr import copies existing images rather than building them, and geo-replication only copies images between regions.
Your container registry must be reachable only through a private endpoint and replicated to a second Azure region. What is the minimum ACR service tier?
A Basic
B Standard
✓C Premium (correct answer)
D Any tier, as long as the admin user is disabled
Shortcut: Private endpoint or geo-replication in ACR = Premium tier. Basic and Standard differ mainly in included storage and throughput, and disabling the admin user is a security setting available on every tier.
More
Private endpoints and geo-replication are both Premium-only features. Basic and Standard differ mainly in included storage and throughput, and disabling the admin user is a security setting available on every tier.
A Container Apps API must never suffer a cold start, but it should add replicas when HTTP traffic spikes. Which configuration meets both goals?
A Minimum replicas 0 with an HTTP scale rule
✓B Minimum replicas 1 with an HTTP scale rule (correct answer)
C Minimum replicas 0 with a CPU scale rule
D A fixed replica count equal to peak demand
Shortcut: No cold starts in Container Apps = minimum replicas of at least 1. A minimum of zero allows scale to zero, which brings cold starts back, and a fixed peak-sized count pays for idle replicas off-peak.
More
A minimum of one replica keeps an instance warm, so the first request never waits for a container to start, and the HTTP rule adds replicas as concurrent requests grow. A minimum of zero allows scale to zero, which brings cold starts back, and a fixed peak-sized count pays for idle replicas off-peak.
You want to send 10% of production traffic to a new Container Apps revision and give testers a stable URL that always reaches that revision. Which TWO settings should you use?
✓A Multiple revision mode with traffic weights (correct answer)
✓B A revision label (correct answer)
C Single revision mode
D A separate Container Apps environment for the new revision
E Scaling the old revision to zero replicas
Shortcut: Canary = multiple revision mode + traffic weights. Test URL for one revision = label. A label gives a specific revision its own stable URL, so testers can reach it whatever the traffic split.
More
Multiple revision mode keeps several revisions active and splits traffic between them by percentage. A label gives a specific revision its own stable URL, so testers can reach it whatever the traffic split. Single revision mode replaces the old revision outright, and a separate environment or scaling to zero isn't needed.
A pod is in CrashLoopBackOff. Which command shows the output of the container instance that just crashed?
✓Akubectl logs <pod> --previous (correct answer)
Bkubectl get events --watch
Ckubectl top pod <pod>
Dkubectl get endpoints
Shortcut: Why did my container crash? = kubectl logs --previous. Events show scheduling and probe problems but not application output, kubectl top shows CPU and memory use, and endpoints show which pods a Service sends traffic to.
More
kubectl logs --previous prints the logs of the previous, crashed container instance, which is usually where the error is. Events show scheduling and probe problems but not application output, kubectl top shows CPU and memory use, and endpoints show which pods a Service sends traffic to.
Users must always see their own changes immediately, but it's fine if other users see them a moment later. Which Azure Cosmos DB consistency level meets this at the lowest cost?
A Strong
B Bounded staleness
✓C Session (correct answer)
D Eventual
Shortcut: Read your own writes = Session consistency (the default). Strong and Bounded staleness add latency and RU cost this scenario doesn't need, and Eventual doesn't guarantee users see their own writes.
More
Session consistency guarantees read-your-own-writes within a client session and is the default for new accounts. Strong and Bounded staleness add latency and RU cost this scenario doesn't need, and Eventual doesn't guarantee users see their own writes.
You're adding vector similarity search to a new Azure Cosmos DB for NoSQL container. What must you configure for the embedding property?
✓A A vector embedding policy and a vector index in the indexing policy (correct answer)
B A composite index on the embedding property
C A unique key policy on the embedding property
D A change feed processor that calculates distances
Shortcut: Cosmos DB vector search = vector embedding policy + vector index, queried with VectorDistance(). Composite indexes and unique keys don't support similarity search, and the change feed doesn't calculate distances.
More
The vector embedding policy declares the property's path, data type, dimensions and distance function, and a vector index such as DiskANN or quantizedFlat makes VectorDistance() queries fast and cheap. Composite indexes and unique keys don't support similarity search, and the change feed doesn't calculate distances.
A change feed processor must react to new and updated items in a container. What else does it need?
✓A A lease container to store its progress (correct answer)
B A Service Bus queue to store checkpoints
C Strong consistency on the account
D A stored procedure that copies each change
Shortcut: Change feed processor = monitored container + lease container. It doesn't need Service Bus, a particular consistency level or stored procedures. In the default latest-version mode, deletes aren't delivered.
More
The change feed processor keeps its checkpoints and partition leases in a separate lease container, which also lets several instances share the work. It doesn't need Service Bus, a particular consistency level or stored procedures. In the default latest-version mode, deletes aren't delivered.
Which pgvector index type should you create only after the table already holds representative data, because it builds its clusters from the existing rows?
✓A IVFFlat (correct answer)
B HNSW
C B-tree
D GIN
Shortcut: IVFFlat = load the data first, then build the index. HNSW has no training step and can be created before any data is loaded, although building it after a bulk load is still faster.
More
IVFFlat divides vectors into lists based on the rows present when the index is built, so creating it on an empty table gives poor recall. HNSW has no training step and can be created before any data is loaded, although building it after a bulk load is still faster. B-tree and GIN aren't vector indexes.
A serverless app opens thousands of short-lived connections and is exhausting an Azure Database for PostgreSQL flexible server. What's the built-in fix?
✓A Enable the built-in PgBouncer and connect on port 6432 (correct answer)
B Raise max_connections to the highest allowed value
C Add read replicas
D Move the server to the Burstable tier
Shortcut: Too many PostgreSQL connections = built-in PgBouncer on port 6432. Raising max_connections costs memory for every connection, read replicas don't reduce connection churn on the primary, and the Burstable tier has less capacity.
More
Flexible server includes PgBouncer, a connection pooler on port 6432 that shares a small pool of database connections among many clients. Raising max_connections costs memory for every connection, read replicas don't reduce connection churn on the primary, and the Burstable tier has less capacity.
Cached product prices in Azure Managed Redis must expire after five minutes, and must disappear immediately when a price changes. What should you do?
✓A Set a 300-second TTL on each key and delete the key when its price is updated (correct answer)
B Rely on the maxmemory eviction policy
C Refresh the whole cache from a scheduled job every five minutes
D Store prices without a TTL and flush the cache once a day
Shortcut: Fresh Redis data = TTL for expiry + delete the key on update. Eviction only happens under memory pressure, and scheduled refreshes or daily flushes leave stale prices in the cache.
More
A TTL (for example SET with EX 300) removes stale entries automatically, and deleting the key when the price changes invalidates it at once; the next read reloads it from the database (cache-aside). Eviction only happens under memory pressure, and scheduled refreshes or daily flushes leave stale prices in the cache.
A Service Bus message keeps failing. After enough attempts, Service Bus moves it aside so other messages keep flowing. Where does it go, and what sets the limit?
✓A The dead-letter subqueue, after MaxDeliveryCount attempts (correct answer)
B The dead-letter subqueue, as soon as its lock expires once
C A new topic, controlled by duplicate detection
D Nowhere: it is deleted when the lock duration ends
Shortcut: Poison message → dead-letter queue after MaxDeliveryCount (default 10). A single lock expiry just makes the message available again, and duplicate detection only discards repeated sends.
More
Every failed receive raises the message's delivery count, and once it exceeds MaxDeliveryCount (10 by default) Service Bus moves the message to the dead-letter subqueue for inspection. A single lock expiry just makes the message available again, and duplicate detection only discards repeated sends.
An Event Grid subscriber is offline for maintenance. By default, how long does Event Grid keep retrying delivery of an event?
A 30 minutes
✓B Up to 24 hours or 30 attempts (correct answer)
C 7 days
D It doesn't retry
Shortcut: Event Grid retries for 24 hours / 30 attempts by default; add dead-lettering to keep failures. You can lower both limits per subscription, and a dead-letter destination keeps events that still can't be delivered.
More
By default Event Grid retries with an exponential backoff for up to 24 hours or 30 delivery attempts, whichever comes first. You can lower both limits per subscription, and a dead-letter destination keeps events that still can't be delivered.
Millions of IoT readings per second must be ingested, read by several independent consumers, and replayed from earlier points in time. Which service fits?
✓A Azure Event Hubs (correct answer)
B Azure Service Bus queue
C Azure Event Grid
D Azure Storage queue
Shortcut: Streaming + replay + many independent readers = Event Hubs (consumer groups). Service Bus is for transactional messaging, Event Grid for discrete event notifications, and Storage queues for simple work queues.
More
Event Hubs is a partitioned log built for high-throughput streaming: each consumer group reads independently and can rewind to earlier offsets within the retention period. Service Bus is for transactional messaging, Event Grid for discrete event notifications, and Storage queues for simple work queues.
An HTTP-triggered Azure Function must save each request body as a message on a Storage queue with the least code. What should you use?
✓A A queue output binding (correct answer)
B A queue trigger
C The Storage SDK with a connection string in the code
D A timer trigger that polls the HTTP endpoint
Shortcut: Write to another service with no SDK code = output binding. Run when something happens = trigger. A queue trigger starts a function when a message arrives, which is the opposite direction, and SDK code with an embedded connection string is more work and less secure.
More
An output binding writes the function's result to the queue without any SDK code, and the connection comes from app settings. A queue trigger starts a function when a message arrives, which is the opposite direction, and SDK code with an embedded connection string is more work and less secure.
An app's managed identity must read secret values from a Key Vault that uses Azure RBAC. Which role follows least privilege?
✓A Key Vault Secrets User (correct answer)
B Key Vault Reader
C Key Vault Contributor
D Key Vault Secrets Officer
Shortcut: Read secret values = Key Vault Secrets User. Reader = metadata only. Key Vault Reader sees metadata but not values, Key Vault Contributor manages the vault resource but not its data, and Key Vault Secrets Officer can also create and delete secrets.
More
Key Vault Secrets User can read secret contents, which is all the app needs. Key Vault Reader sees metadata but not values, Key Vault Contributor manages the vault resource but not its data, and Key Vault Secrets Officer can also create and delete secrets.
An App Service app should read a database password from Key Vault through an ordinary app setting, with no code changes. What should the app setting's value be?
B The secret's current value, copied from Key Vault
C keyvault://myvault/DbPassword
D The Key Vault resource ID
Shortcut: Key Vault secret in an app setting, no code = @Microsoft.KeyVault(SecretUri=...). The identity needs permission to read secrets, such as the Key Vault Secrets User role. Copying the value breaks rotation, and the other formats aren't valid.
More
A Key Vault reference in the @Microsoft.KeyVault(SecretUri=...) format makes App Service fetch the secret using the app's managed identity and expose it as a normal environment variable. The identity needs permission to read secrets, such as the Key Vault Secrets User role. Copying the value breaks rotation, and the other formats aren't valid.
Several apps load settings from Azure App Configuration. They must pick up changes without restarting, but only once you've finished updating a group of related keys. What should the apps watch?
✓A A sentinel key that you update last, configured to reload all settings when it changes (correct answer)
B Every key individually, refreshed every second
C The versions of secrets in Key Vault
D The App Configuration store's activity log
Shortcut: Apply config changes together = watch one sentinel key and update it last. Watching every key separately costs far more requests and can load a half-finished set of changes.
More
Registering one sentinel key for refresh, with the option to reload everything when it changes, means apps apply a batch of edits together once you update the sentinel. Watching every key separately costs far more requests and can load a half-finished set of changes.
A Python API should send traces, metrics and logs to Application Insights with the least setup code. What should you use?
✓A The Azure Monitor OpenTelemetry Distro, calling configure_azure_monitor() (correct answer)
B A hand-built TracerProvider, span processor and exporter
C The legacy Application Insights SDK with an instrumentation key
D Spans written to a log file and imported into Log Analytics
Shortcut: Python to Application Insights, fastest = configure_azure_monitor() from the OpenTelemetry Distro. Building the pipeline by hand works but takes more code, and the legacy SDK and instrumentation keys are being replaced by OpenTelemetry and connection strings.
More
The Distro (the azure-monitor-opentelemetry package) sets up OpenTelemetry tracing, metrics and logging plus the Azure Monitor exporters in one call, reading the APPLICATIONINSIGHTS_CONNECTION_STRING setting. Building the pipeline by hand works but takes more code, and the legacy SDK and instrumentation keys are being replaced by OpenTelemetry and connection strings.
Which KQL query returns the 95th-percentile request duration for each operation over the last hour?
✓Arequests | where timestamp > ago(1h) | summarize percentile(duration, 95) by operation_Name (correct answer)
Brequests | where timestamp > ago(1h) | project percentile(duration, 95)
Crequests | summarize avg(duration) by operation_Name | where timestamp > ago(1h)
Dtraces | where timestamp > ago(1h) | top 95 by duration
Shortcut: KQL: filter with where first, then summarize <aggregation>() by <column>. project can't aggregate, filtering after summarize fails because timestamp is no longer a column, and top 95 returns 95 rows rather than a percentile.
More
Aggregations such as percentile() belong in summarize, and by operation_Name groups the result per operation. project can't aggregate, filtering after summarize fails because timestamp is no longer a column, and top 95 returns 95 rows rather than a percentile.
Got those? Next:
Skim the 16 practice sets with Priority · Real Exam switched on to target questions that appeared in actual exams.