Войти Регистрация
Код-ревью

17. Автомодерация объявлений

Лёгкая

Java · 28 строк

Перед публикацией объявление проходит автоматические правила. Цена может быть не указана — getPrice() возвращает Long, null значит «договорная». Модератор вызывается из одного потока-консьюмера очереди.

После трёх отказов за стоп-слова пользователя блокируют. Отметьте строки с ошибками.

В работе: Первая линия модерации: правила отсекают очевидное до проверки человеком.

Как проверяем Нажмите на строку с ошибкой и коротко напишите, что не так. Баг засчитан, если отмечена хотя бы одна его строка. Зачёт — найдено не меньше 60 % багов с учётом серьёзности (критичный весит 3, обычный 2, мелкий 1), а лишних отметок не больше, чем багов в коде. Пустые строки, скобки и комментарии лишними не считаем. Ответ один на подход: после него показываем разбор.
строкиnullавтоупаковка

Источник: на задачах Авито: модерация объявлений. Условие пересказано своими словами.

Давали на собеседовании? Ответов пока мало — ваш поможет.
  1. public class AdModerator {
  2. private static final List<String> STOP_WORDS = List.of("закладка", "оружие", "диплом без экзаменов");
  3. private final Map<Long, Integer> rejectCount = new HashMap<>();
  4. public Verdict check(Ad ad) {
  5. if (ad.getCategory() == "Работа" && ad.getSalary() == null) {
  6. return Verdict.reject("Укажите зарплату");
  7. }
  8. String text = ad.getTitle() + " " + ad.getDescription();
  9. for (String word : STOP_WORDS) {
  10. if (text.contains(word)) {
  11. rejectCount.put(ad.getUserId(), rejectCount.get(ad.getUserId()) + 1);
  12. return Verdict.reject("Запрещённый товар");
  13. }
  14. }
  15. if (ad.getPrice() < 0 || ad.getPrice() > 100_000_000) {
  16. return Verdict.reject("Проверьте цену");
  17. }
  18. if (ad.getPhotos().size() > 10) {
  19. return Verdict.reject("Не больше 10 фото");
  20. }
  21. return Verdict.approve();
  22. }
  23. public boolean shouldBan(long userId) {
  24. return rejectCount.get(userId) >= 3;
  25. }
  26. }