- Linked Lists
Nodes joined by references. O(1) at the front where an array is O(n), O(n) for random access where an array is O(1) — the trade in both directions. Reversing a list in one pass, Floyd's cycle detection, and why the tail reference matters.
- Angular – Talking to an API with HttpClient
Every real app is mostly API calls. `provideHttpClient()`, typed `get` / `post` / `put` / `delete`, query params and headers, unwrapping observables with the `async` pipe or `toSignal`, the newer `httpResource()` for read-only data, and where to put error handling so it is not repeated in every component.
- Docker – Volumes, Bind Mounts and Keeping Your Data
A container's filesystem dies with it, so a database in a container needs somewhere else to write. Named volumes versus bind mounts, which to use for a database and which for live-reloading source, what `docker compose down -v` throws away, and why a bind-mounted database is measurably slower on a Mac.
- Hasura – Authentication
Hasura does not log anyone in — it verifies a token somebody else issued, and getting that split right is most of the work. JWT mode versus webhook mode, the `x-hasura-*` claims a token has to carry, the admin secret and why it must never reach a browser, and the unauthorized role that decides what a visitor with no token can see. Shown with one JWT secret shared between Hasura and a FastAPI backend — then `AuthConfig` in v3, where the admin secret does not exist at all.
- Spring Boot – Schema Migrations with Liquibase
Let the database schema live in version control. Changelogs, changesets and the checksum that makes editing an applied migration a mistake you only make once. Pairing Liquibase with ddl-auto=validate so drift fails at boot, and the Boot 4 starter you need or Liquibase silently never runs at all.