BaşlayınÜcretsiz başlayın

LRU önbellek uygulama

Sık sık kullanıcı profil bilgilerini string olarak alan bir web uygulaması geliştiriyorsun. Performansı artırmak için bu profil string'lerini saklayan ve en son hangilerinin daha az kullanıldığını belirleyebilen basit bir önbellek uygulamak istiyorsun.

CacheEntry sınıfı senin için önceden yüklendi.

Bu egzersiz, kursun bir parçasıdır

Java'da Kod Optimizasyonu

Kursa Göz Atın

Egzersiz talimatları

  • get() yönteminde, belirtilen key için cache girdisini al.
  • key alındıktan sonra, erişim zamanını güncelle.
  • Bir girdiyi önbelleğe koyduktan sonra, kapasite aşıldıysa en son en az kullanılan girdiyi kaldır.

Uygulamalı etkileşimli egzersiz

Bu egzersizi bu örnek kodu tamamlayarak deneyin.

public class StringCache {
    private final int capacity = 100;
    private final Map cache = new HashMap<>();
    
    public String get(String key) {
        // Get the entry for the specified key
        CacheEntry entry = ____.get(____);
        if (entry == null) return null;
        // Update its access time
        entry.____();
        return entry.value;
    }
    
    public void put(String key, String value) {
        cache.put(key, new CacheEntry(value));
        if (cache.size() > capacity) {
            // If capacity exceeded, remove least recently used
            ____();
        }
    }

    void removeLeastRecentlyUsed() {
        String lruKey = null;
        long oldest = Long.MAX_VALUE;
        for (Map.Entry e : cache.entrySet()) {
            if (e.getValue().lastAccessed < oldest) {
                oldest = e.getValue().lastAccessed;
                lruKey = e.getKey();
            }
        }
        if (lruKey != null) { cache.remove(lruKey); }
    }

    public static void main(String[] args) {}
}
Kodu Düzenle ve Çalıştır