A low-level design interview asks you to turn a contract into state, operations and invariants. The code still needs to work. These original tasks progress from cache recency and idempotent requests to booking acceptance, subscription lifecycle and guarded state transitions. The last task asks you to keep traversal independent of policy selection.
Before writing a class, name the state that survives an operation and the condition that must remain true afterward. A rejected booking must not enter accepted state. A duplicate request must not apply a second credit. A completed reservation must stay terminal. The tests include sequences that distinguish those designs from implementations that only work for one operation. Use ordinary Java collections and interfaces, then return the requested observable result so the design can be checked directly.