Java · 35 строк
Счётчик «добавили в избранное» показывается продавцу в статистике объявления. Программа ниже воспроизводит нагрузку: 10 000 добавлений одного объявления в 8 потоков.
Отметьте строки с ошибками и ответьте, что выведет main.
В работе: Статистика объявления в кабинете продавца.
Как проверяем
Нажмите на строку с ошибкой и коротко напишите, что не так. Баг засчитан, если отмечена хотя бы одна его строка. Зачёт — найдено не меньше 60 % багов с учётом серьёзности (критичный весит 3, обычный 2, мелкий 1), а лишних отметок не больше, чем багов в коде. Пустые строки, скобки и комментарии лишними не считаем. Плюс 2 вопроса про поведение программы — на зачёт не влияют. Ответ один на подход: после него показываем разбор.
Источник: на задачах Авито: избранные объявления. Условие пересказано своими словами.
Давали на собеседовании?
Ответов пока мало — ваш поможет.
import java.util.Map;import java.util.concurrent.ConcurrentHashMap;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.TimeUnit;public class FavoritesCounter {private final Map<Long, Integer> favorites = new ConcurrentHashMap<>();// Пользователь добавил объявление в избранное.public void add(long itemId) {Integer current = favorites.get(itemId);if (current == null) {favorites.put(itemId, 1);} else {favorites.put(itemId, current + 1);}}public int get(long itemId) {return favorites.get(itemId);}public static void main(String[] args) throws InterruptedException {FavoritesCounter c = new FavoritesCounter();ExecutorService pool = Executors.newFixedThreadPool(8);for (int i = 0; i < 10_000; i++) {pool.submit(() -> c.add(42L));}pool.shutdown();pool.awaitTermination(10, TimeUnit.SECONDS);System.out.println(c.get(42L));System.out.println(c.get(43L));}}