Coffee Machine
Core entities: Ingredient, Recipe (ingredient → quantity ka map), Inventory, aur Machine ke N outlets. Recipe ko DATA rakho, CODE nahi — nayi coffee add karna ek map entry honi chahiye, nayi class nahi.
Asli test CONCURRENCY ka hai: N outlets ek saath ek hi inventory se ingredients uthaate hain. Ingredient check aur deduct ATOMIC hone chahiye, warna dono outlets "doodh hai" dekh lenge aur ek ko aadhi coffee milegi. Ek hi lock lo poore ingredient set par — nahi to deadlock ka risk hai.
class Inventory {
private final Map<String, Integer> stock = new HashMap<>();
// Poore set par EK hi lock — warna do outlets deadlock kar sakte hain
synchronized boolean consume(Map<String, Integer> needed) {
for (var e : needed.entrySet())
if (stock.getOrDefault(e.getKey(), 0) < e.getValue()) return false;
needed.forEach((k, v) -> stock.merge(k, -v, Integer::sum));
return true;
}
}- Recipe ko data rakho (ingredient→quantity map), nayi class mat banao
- Check aur deduct atomic — warna aadhi coffee ban jaayegi
- Per-ingredient locks deadlock la sakte hain; single lock defend karo
Sabse badi galti hai har coffee ke liye alag class banana — Espresso, Latte, Cappuccino. Ye Open-Closed todta hai: nayi coffee = naya code deploy.
Sahi approach: Recipe ek DATA structure hai — naam plus ingredient→quantity ka map. Nayi coffee add karna config ya DB entry hai, code change nahi. Interviewer ko ye difference turant dikhta hai.
record Recipe(String name, Map<String, Integer> ingredients, Money price) {}
// Config se load — nayi coffee ke liye deploy nahi chahiye
Recipe latte = new Recipe("Latte",
Map.of("coffee", 30, "milk", 150, "sugar", 10), Money.of(80));N outlets ka matlab hai N coffee ek saath ban sakti hain — agar ingredients hain. ExecutorService with N threads natural fit hai. Har outlet inventory se atomically consume karta hai; consume fail hua to "ingredient not available" message.
Low-stock indicator bhi mention karo: koi ingredient threshold se neeche jaaye to alert. Ye chhota feature real machines mein hota hai aur socha hua design dikhata hai.