💻
Orta
Cache Stratejisi Tasarımı
100 puan
·
Java
Bir e-ticaret senaryosu için HashMap tabanlı cache sistemi tasarlayıp implement edin. TTL desteği, cache invalidation ve eviction stratejisi içermelidir.
📋 Talimatlar
Cache Stratejisi Tasarımı
Bu ödevde bir e-ticaret platformu için HashMap tabanlı basit bir cache sistemi tasarlayacaksınız. Cache sisteminiz TTL (Time-To-Live) desteği, otomatik expiration kontrolü ve cache istatistikleri sunmalıdır.
Gereksinimler
SimpleCache<V> sınıfı aşağıdaki metotları içermelidir:
SimpleCache(int maxSize)— Constructor. Maksimum cache boyutunu belirler.void put(String key, V value, long ttlSeconds)— Verilen key ile value'yu cache'e ekler. TTL saniye cinsinden expire süresini belirler. Cache dolu ise (maxSize'a ulaşılmışsa), en eski eklenen entry çıkarılır (FIFO eviction).V get(String key)— Key'e karşılık gelen value'yu döner. Eğer key yoksa veya TTL süresi dolmuşsanulldöner. Süresi dolmuş entry'ler cache'den otomatik silinir.void invalidate(String key)— Belirtilen key'i cache'den siler.void invalidateAll()— Tüm cache'i temizler.String stats()— Cache istatistiklerini döner. Format:size=X, hits=Y, misses=Z
Girdi Formatı
Program stdin'den satır satır komutlar okur:
PUT key value ttl— Cache'e ekle (ttl saniye cinsinden)GET key— Cache'den oku, sonucu yazdır (bulunamazsanull)DELETE key— Cache'den silCLEAR— Tüm cache'i temizleSTATS— İstatistikleri yazdırWAIT seconds— Belirtilen saniye kadar iç saati ilerlet (TTL testleri için)EXIT— Programı sonlandır
Not: Gerçek Thread.sleep kullanmak yerine, iç saat değişkeni tutarak WAIT komutu ile saati ilerletin. Bu sayede testler anlık çalışır.
Çıktı
GETkomutu sonucunda value veyanullyazdırılır.STATSkomutu sonucundasize=X, hits=Y, misses=Zyazdırılır.- Diğer komutlar çıktı üretmez.
Örnek
PUT product:1 Laptop 60
PUT product:2 Phone 30
GET product:1
→ Laptop
STATS
→ size=2, hits=1, misses=0
WAIT 35
GET product:2
→ null
STATS
→ size=1, hits=1, misses=1
🧪 Örnek Test Senaryoları
Girdi
PUT product:1 Laptop 60 PUT product:2 Phone 30 GET product:1 STATS EXIT
Beklenen Çıktı
Laptop size=2, hits=1, misses=0
Girdi
PUT product:1 Laptop 60 PUT product:2 Phone 30 WAIT 35 GET product:2 STATS EXIT
Beklenen Çıktı
null size=1, hits=0, misses=1
Girdi
PUT a Val1 10 PUT b Val2 10 DELETE a GET a GET b STATS EXIT
Beklenen Çıktı
null Val2 size=1, hits=1, misses=1
Girdi
PUT x Data1 100 PUT y Data2 100 CLEAR STATS EXIT
Beklenen Çıktı
size=0, hits=0, misses=0
💡 İpuçları
İpucu 1: LinkedHashMap insertion order korur — FIFO eviction için iterator().next() ile en eski elemanı bulabilirsiniz.
İpucu 2: TTL kontrolü: currentTime >= expireAt ise entry expire olmuştur.
İpucu 3: stats() çağrıldığında expired entry'leri temizleyin ki size doğru olsun.
İpucu 4: put() sırasında aynı key varsa önce silip tekrar ekleyin — insertion order güncellensin.
☕
Main.java
✓ Çözüm yüklendi
puan
Testleri çalıştırmak için kodunuzu gönderin
✅ Tüm testler geçti! Tebrikler!
Beklenen:
Sonuç:
Ln 1, Col 1
·
JAVA
·
UTF-8
Wandbox