Репозиторий для выполнения задания курса Golang Advanced от Rebrain
- Создайте проект с произвольным названием. Данный проект вы можете добавить в свое портфолио, поэтому можете создать проект как на GitHub, так и во внутреннем GitLab.
- В созданном проекте необходимо написать реализацию интерфейса:
И конструктор для вашего кеша вида:
type LRUCache interface { // Добавляет новое значение с ключом в кеш (с наивысшим приоритетом), возвращает true, если все прошло успешно // В случае дублирования ключа вернуть false // В случае превышения размера - вытесняется наименее приоритетный элемент Add(key, value string) bool // Возвращает значение под ключом и флаг его наличия в кеше // В случае наличия в кеше элемента повышает его приоритет Get(key string) (value string, ok bool) // Удаляет элемент из кеша, в случае успеха возврашает true, в случае отсутствия элемента - false Remove(key string) (ok bool)
Где n - количество элементов.NewLRUCache(n int) LRUCache
- Получение элемента должно происходить за время О(1) (т.е. не зависеть от размера кеша) - соответственно в качестве основного хранилища должна использоваться Hash Map.
- Для решения вопроса приоритезации смотрите в сторону таких структур данных, как очереди и связные списки.
- Задание со звездочкой: добиться работы со структурой данных, которую вы использовали для приоритезации, также за константное время.
- Покрыть тестами