Prerequisite Assessment
18 questions. ~30 minutes. No AWS knowledge is tested.
The purpose is to check whether you have the software engineering foundation this course builds on. If you score poorly, that is not a failure — it points you at a specific section of the Optional Foundation Module.
Answer from memory, writing 1–3 sentences each. Do not look anything up; a wrong answer here is worth more than a googled right one.
Section A — Programming & backend (Q1–Q4)
Q1. In Java, what is the practical difference between a checked and an unchecked exception, and which would you use for "the downstream payment service returned HTTP 503"?
Q2. You have a Spring Boot @RestController method that takes 4 seconds because it calls three downstream services sequentially. Without changing the downstream services, name two ways to reduce the wall-clock latency.
Q3. What does it mean for a service to be stateless? Give one example of state that people accidentally keep in a "stateless" service.
Q4. What is a connection pool, and what happens when every connection in the pool is checked out and a new request arrives?
Section B — Web, HTTP & APIs (Q5–Q8)
Q5. Explain the difference between HTTP 401 and 403, and between 502 and 504.
Q6. Which HTTP methods are idempotent, and why does idempotency matter when a client retries?
Q7. What actually happens between a client and a server during a TLS handshake, at a high level — and what is being proved to whom?
Q8. A client sends POST /orders and the connection times out after 30 seconds. Did the order get created? What should the client do next, and what must the server have done to make that safe?
Section C — Databases (Q9–Q12)
Q9. What is a database index, and name one concrete cost of adding one.
Q10. Explain ACID in one sentence per letter.
Q11. You run SELECT * FROM orders WHERE customer_id = ? ORDER BY created_at DESC LIMIT 20 on a 200-million-row table and it takes 8 seconds. What is your first hypothesis and how would you confirm it?
Q12. What is the difference between a read replica and a standby/failover replica?
Section D — Distributed systems & async (Q13–Q15)
Q13. Describe the difference between synchronous and asynchronous communication between two services, and one thing that gets worse when you switch a call from sync to async.
Q14. Service A calls Service B, which is slow. A's threads are all blocked waiting. What is this failure mode called, and name one technique that limits it.
Q15. What does "at-least-once delivery" mean, and what responsibility does it push onto the consumer?
Section E — Networking (Q16–Q17)
Q16. Walk through what happens, in order, when you type https://api.example.com/health and press Enter. Stop at "the server receives the request."
Q17. What is the difference between a private IP address and a public IP address, and why can't you reach 10.0.3.47 from your laptop?
Section F — Cloud awareness (Q18)
Q18. In your own words, what problem does "the cloud" solve for a company that already owns servers? Name one thing that gets harder after moving to cloud.
Answer key
Expand answers and scoring notes
Q1. Checked = compiler-enforced, must be caught or declared; unchecked extends RuntimeException. For a downstream 503 (a transient, retryable condition the caller can act on) either is defensible, but modern Spring code overwhelmingly uses an unchecked custom exception (e.g. PaymentUnavailableException) mapped to a response via @ControllerAdvice. Looking for: you know the distinction and don't think exceptions are just for bugs.
Q2. (a) Issue the three calls concurrently (CompletableFuture, a TaskExecutor, or reactive composition) since they're independent; (b) cache results that are stable; (c) make the whole thing asynchronous — return 202 Accepted and complete out of band. Looking for: concurrency vs asynchrony are distinguished.
Q3. Stateless = any instance can serve any request; nothing needed to serve request N+1 lives only in the instance that served request N. Accidental state: in-memory sessions, a local HashMap cache assumed to be shared, in-process scheduled jobs, files written to local disk, sticky counters/rate limiters.
Q4. A bounded set of pre-opened DB connections reused across requests. When exhausted, new requests block on acquisition until timeout, then fail. The important insight: pool exhaustion shows up as application latency and errors, not database errors — the database may look completely healthy.
Q5. 401 = not authenticated (no/invalid credentials); 403 = authenticated but not authorized. 502 = the gateway got an invalid/failed response from upstream; 504 = the gateway got no response in time (upstream timeout). This distinction is load-bearing all through Days 4–5 and Day 13.
Q6. GET, HEAD, PUT, DELETE, OPTIONS, TRACE are idempotent by spec; POST and PATCH are not. It matters because a retried non-idempotent request can duplicate an effect (two orders, two charges).
Q7. Client and server agree on a cipher suite; the server presents a certificate chain; the client validates it against a trusted CA and checks the hostname; keys are exchanged (ephemeral DH in TLS 1.3) and a symmetric session key is derived. The server's identity is proved to the client (client identity is proved only with mTLS).
Q8. Unknown — the request may have been fully processed with the response lost. The client should retry; the server must make creation idempotent (idempotency key, conditional write, or dedupe on a natural key) for the retry to be safe. If you got this one, the entire Day 8 idempotency section will land easily.
Q9. An auxiliary data structure (usually a B-tree) making lookups on some column(s) sublinear. Costs: extra storage, slower writes (every insert/update maintains it), and it can be chosen badly by the planner. Looking for: you name the write cost.
Q10. Atomicity — all or nothing. Consistency — the transaction moves the DB between valid states w.r.t. constraints. Isolation — concurrent transactions don't observe each other's partial work (to the degree the isolation level promises). Durability — once committed, it survives a crash.
Q11. Hypothesis: no usable index — likely no composite index on (customer_id, created_at), so the DB filters by customer then sorts a large intermediate result. Confirm with EXPLAIN (ANALYZE) and look for a sequential scan or an explicit sort node.
Q12. A read replica serves read traffic and is asynchronously (usually) behind the primary — it exists for scale, and reading from it can return stale data. A standby exists for availability: it is usually synchronously replicated, serves no traffic, and is promoted on failure. Conflating these two is one of the traps in the Day 6 material.
Q13. Sync: caller blocks, gets the result, and shares the callee's availability and latency. Async: caller hands work off and returns; the result arrives later or never observed directly. What gets worse: end-to-end observability, error surfacing, ordering guarantees, and reasoning about consistency — you've traded coupling for uncertainty.
Q14. Thread-pool exhaustion / cascading failure (a resource-exhaustion cascade). Limited by timeouts, bounded pools, bulkheads, circuit breakers, and load shedding.
Q15. Every message is delivered one or more times; duplicates are normal, not exceptional. The consumer must be idempotent — processing the same message twice must produce the same end state as processing it once.
Q16. DNS resolution (stub resolver → cache → recursive resolver → authoritative) → TCP connect (3-way handshake) to the resolved IP on port 443 → TLS handshake → HTTP request serialized and sent over the encrypted connection. Looking for: DNS and TCP and TLS are three separate things happening in order.
Q17. Private ranges (RFC 1918: 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) are not routable on the public Internet and are reused inside every private network; public addresses are globally unique and routable. You can't reach 10.0.3.47 because no Internet router will forward toward it — you need to be inside that network, or reach it through something that is (a load balancer, a VPN, a bastion). This is the single most load-bearing answer for Day 2.
Q18. Elastic capacity without capital expenditure and procurement lead time; pay-per-use; managed services replacing undifferentiated operational work; global footprint on demand. Harder: cost becomes a variable engineering concern rather than a fixed asset, security becomes identity-centric and easy to get wrong, and you gain a dependency on a provider's failure modes you cannot inspect.
Scoring
Give yourself 1 point for a substantially correct answer, 0.5 for a partial one.
| Score | Verdict | Action |
|---|---|---|
| 15–18 | Ready | Start Day 1 today. Skip the Foundation Module entirely. |
| 11–14 | Ready with gaps | Start Day 1, but read the specific Foundation Module sections covering the questions you missed (mapping below). |
| 7–10 | Do the Foundation Module | 3–5 hours before Day 1. Focus on the two weakest sections. |
| < 7 | Build the foundation first | The course will feel like memorization rather than reasoning. Spend 2–4 weeks on backend fundamentals (a REST service with a real database and a real cache) and return. |
Question → Foundation Module mapping
| Missed | Read |
|---|---|
| Q1–Q4 | Foundation § 5 — Java & Spring Boot refresher |
| Q5–Q8 | Foundation § 1 — HTTP and § 2 — REST & APIs |
| Q9–Q12 | Foundation § 3 — SQL & transactions |
| Q13–Q15 | Foundation § 6 — Sync vs async |
| Q16–Q17 | Foundation § 4 — Networking |
| Q18 | No module needed — Day 1 § 1 covers it from scratch. |
A note on what is not tested
There is deliberately no AWS question in this assessment. Scoring 18/18 while having never opened the AWS Console is exactly the expected profile of the ideal learner.