Design an in-memory caching library (store objects vs string keys), cache eviction policy should be dynamically injectable (i.e, midway, you should be able to change it from least frequently accessed to say least recently access, etc). Focus was on how modular, extensible and elegant the provided solution was. Key area was on how the library behaves in a multithreaded env, if you know enough tricks on how you can avoid race conditions and avoid blocking queues, you should be fine. You could sacrifice some aspects for others if it made the system more efficient.