Спроектируйте и реализуйте поточно-ориентированный кеш в памяти на Java со следующими функциями [закрыто]JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Спроектируйте и реализуйте поточно-ориентированный кеш в памяти на Java со следующими функциями [закрыто]

Сообщение Anonymous »

Разработать и реализовать потокобезопасный кэш в памяти на Java со следующими функциями:
  • Каждая запись должна иметь время жизни (TTL), после которого срок ее действия автоматически истекает
  • Поддержка put(key, value, ttl) и get(key) операций
  • должен выполняться за время O(1)
  • Несколько потоков должны иметь возможность читать и писать одновременно
  • Просроченные записи должны быть очищены без блокировки обычных операций
  • Используйте ядро Java только (без внешних библиотек)

    Код: Выделить всё

    import java.util.concurrent.*;
    import java.util.*;
    
    public class BrokenTTLCache {
    
    class CacheItem {
    V value;
    long expiryTime;
    
    CacheItem(V value, long expiryTime) {
    this.value = value;
    this.expiryTime = expiryTime;
    }
    }
    
    private final Map cache = new HashMap();
    private final ScheduledExecutorService cleaner =
    Executors.newSingleThreadScheduledExecutor();
    
    public BrokenTTLCache() {
    cleaner.scheduleAtFixedRate(this::cleanUp, 0, 1, TimeUnit.MILLISECONDS);
    }
    
    public void put(K key, V value, long ttlMillis) {
    long expiryTime = System.currentTimeMillis() + ttlMillis;
    cache.put(key, new CacheItem(value, expiryTime));
    }
    
    public V get(K key) {
    CacheItem item = cache.get(key);
    if (System.currentTimeMillis() > item.expiryTime) {
    cache.remove(key);
    return null;
    }
    return item.value;
    }
    
    private void cleanUp() {
    for (K key : cache.keySet()) {
    CacheItem item = cache.get(key);
    if (System.currentTimeMillis() > item.expiryTime) {
    cache.remove(key);
    }
    }
    }
    
    public static void main(String[] args) throws Exception {
    BrokenTTLCache cache = new BrokenTTLCache();
    cache.put("X", "Bug", 1000);
    Thread.sleep(1500);
    System.out.println(cache.get("X"));
    }
    }
    \
    


Подробнее здесь: https://stackoverflow.com/questions/798 ... llowing-fe
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»