Bắt đầu ngayBắt đầu miễn phí

Triển khai bộ nhớ đệm LRU

Bạn đang phát triển một ứng dụng web thường xuyên truy xuất thông tin hồ sơ người dùng dưới dạng chuỗi. Để cải thiện hiệu năng, bạn muốn triển khai một bộ nhớ đệm đơn giản lưu các chuỗi hồ sơ này và có thể xác định mục nào ít được sử dụng gần đây nhất.

Lớp CacheEntry đã được nạp sẵn cho bạn.

Bài tập này là một phần của khóa học

Tối ưu hóa mã trong Java

Xem khóa học

Hướng dẫn bài tập

  • Trong phương thức get(), lấy mục trong cache tương ứng với key được chỉ định.
  • Sau khi lấy key, cập nhật thời điểm truy cập của nó.
  • Sau khi đưa một mục vào cache, nếu đã vượt quá dung lượng, hãy xóa mục ít được sử dụng gần đây nhất.

Bài tập tương tác thực hành trực tiếp

Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.

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) {}
}
Chỉnh sửa và Chạy Mã