Эйч
Эйч
  • Эйч Плюс
  • Все менторы
Задачи/C++-разработчик/Обнаружьте и исправьте дефекты в реализации LRU‑кэша

Обнаружьте и исправьте дефекты в реализации LRU‑кэша

Условие задачи

<p>Найдите недочёты в следующем классе, из‑за которых его нельзя использовать в продакшн‑окружении.</p> <pre><code class="language-cpp"><span class="hljs-keyword">class</span> <span class="hljs-title class_">TLruCache</span> { <span class="hljs-keyword">private</span>: <span class="hljs-type">int</span> maxSize = <span class="hljs-number">0</span>; <span class="hljs-type">int</span> timestamp = <span class="hljs-number">0</span>; unordered_map&lt;<span class="hljs-type">int</span>, <span class="hljs-type">int</span>&gt; lastAccess; unordered_map&lt;<span class="hljs-type">int</span>, <span class="hljs-type">int</span>&gt; storage; set&lt;pair&lt;<span class="hljs-type">int</span>, <span class="hljs-type">int</span>&gt;&gt; orderSet;

<span class="hljs-keyword">public</span>: <span class="hljs-built_in">TLruCache</span>(<span class="hljs-type">int</span> sizeLimit) : <span class="hljs-built_in">maxSize</span>(sizeLimit) {}

<span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">Erase</span><span class="hljs-params">(<span class="hljs-type">int</span> key)</span> </span>{
    <span class="hljs-keyword">if</span> (!storage.<span class="hljs-built_in">count</span>(key)) {
        <span class="hljs-keyword">throw</span> <span class="hljs-built_in">runtime_error</span>(<span class="hljs-string">"key not found"</span>);
    }
    orderSet.<span class="hljs-built_in">erase</span>({lastAccess[key], key});
    lastAccess.<span class="hljs-built_in">erase</span>(key);
    storage.<span class="hljs-built_in">erase</span>(key);
}

<span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">Set</span><span class="hljs-params">(<span class="hljs-type">int</span> key, <span class="hljs-type">int</span> value)</span> </span>{
    <span class="hljs-keyword">if</span> (storage.<span class="hljs-built_in">count</span>(key)) {
        orderSet.<span class="hljs-built_in">erase</span>({lastAccess[key], key});
        storage.<span class="hljs-built_in">erase</span>(key);
        lastAccess.<span class="hljs-built_in">erase</span>(key);
    }
    <span class="hljs-keyword">if</span> (orderSet.<span class="hljs-built_in">size</span>() == maxSize) {
        <span class="hljs-keyword">auto</span> [_, evictKey] = *orderSet.<span class="hljs-built_in">begin</span>();
        <span class="hljs-built_in">Erase</span>(evictKey);
    }
    lastAccess[key] = timestamp++;
    storage[key] = value;
    orderSet.<span class="hljs-built_in">insert</span>({lastAccess[key], key});
}

<span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">Get</span><span class="hljs-params">(<span class="hljs-type">int</span> key)</span> </span>{
    <span class="hljs-keyword">if</span> (!storage.<span class="hljs-built_in">count</span>(key)) {
        <span class="hljs-keyword">throw</span> <span class="hljs-built_in">runtime_error</span>(<span class="hljs-string">"key not found"</span>);
    }
    orderSet.<span class="hljs-built_in">erase</span>({lastAccess[key], key});
    lastAccess[key] = timestamp++;
    orderSet.<span class="hljs-built_in">insert</span>({lastAccess[key], key});
    <span class="hljs-keyword">return</span> storage[key];
}

}; </code></pre>

Компании, где дают эту задачу

ЯндексЯндекс

Профессия

C++-разработчик

Сопроводим до оффера

Умножим шансы на каждом этапе поиска и поможем получить выгодный оффер

Узнать больше

Сервис развития карьеры

Контактыteam@h.careers@hcareers
TelegramVKYouTubeLinkedIn
Сервисы
AI поиск работы newПоиск вакансий newПоиск компаний newКонструктор резюме newВопросы с собеседований newЗадачи с собеседований newГайды к собеседованиям newПроверятор резюме newГенератор сопроводительных new
Поиски себя
Войти в ITКарьерная стратегияПовысить доходПрофориентация
Работа в России
Сопровождение до оффера Найти работу в РоссииРевью портфолиоРевью резюмеТестовое собеседование
Работа за рубежом
Найти работу за границейПомощь в оформлении LinkedInРевью резюме на английскомТестовое собеседование на английском
Навыки
Личный брендОценка навыковРазвитие навыков и компетенций
Поддержка
ВыгораниеОтношения с коллективомОтношения с руководителемСиндром самозванцаСложное увольнение
Для бизнеса
Аудит процессов компанииВыступление на внутреннем мероприятии компанииКонсалтинг бизнеса
Профессии
HRАдминистрированиеАналитикаДизайнИнформационная безопасностьИскусственный интеллектИсследованияКонсалтингКонтентМаркетингМенеджментНаука и образованиеОфисПоддержкаПредпринимательство
Компания
С чем помогаемОтзывы Вопросы и ответыСертификатыВебинарыСтать ментором

Услуги оказывает ООО «Эйч Карьера»
ИНН 9710095807 ОГРН 1227700077340
Адрес: 127006, г. Москва, Старопименовский пер., д. 18, стр. 2, помещ./ком./этаж I/19/2
Платформа принадлежит ООО «Эйч Карьера»

Copyright © 2020-2025 Сервис развития карьеры Эйч. Все права защищены.

Политика конфиденциальностиПользовательское соглашениеОферта