You are given a small in-memory cache implementation.
Across the interview, you will fix recency tracking, enforce eviction when the
cache exceeds capacity, add dynamic resizing, and finally implement an atomic
get_or_put API for concurrent callers.
The starter cache stores values correctly, but it does not update recency
on reads. As a result, recently accessed keys may still be evicted as if
they were stale.
Fix the bug without changing the public interface.
test_get_refreshes_recently_used_key