- Spring Boot – Retries
@Retryable with exponential backoff and a @Recover fallback, applied to the Stripe calls in the pizza API. Which exceptions are worth retrying and which just waste time, and the correctness rule underneath all of it: retrying a non-idempotent call is how you charge a customer twice.
- TypeScript – Functions
Parameter and return types, optional and default and rest parameters, and the function type itself — the thing you annotate a callback with. Then overloads, when one signature genuinely cannot describe two call shapes, and why a union return type is usually the better answer than a second overload.
- NestJS – Interceptors
The only part of the pipeline that sees both sides of a request. Wrapping a handler in an RxJS stream, why tap and not map when you are only observing, logging an outcome you cannot get from middleware, and the three ways to bind one — including the provider token that makes globals injectable and testable.
- Python Advanced – Generators & Iterators
Past yield. The iterator protocol written out by hand, generators used as coroutines with send and throw, why contextlib turns one into a context manager, and the itertools functions worth knowing by name.
- Python – File (read/write)
Reading and writing files with `with open(...)`, why the context manager is not optional, reading a large file a line at a time, `pathlib` instead of string paths, and the CSV and JSON modules you will reach for straight afterwards.