Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про Java: Spring Boot, code review, Java, best practices, anti-patterns

Какие проблемы можно найти в коде при code review сервиса на Java Spring?

Вопрос проверяет умение находить типичные ошибки и антипаттерны в коде Java Spring приложения во время code review, что критически важно для поддержания качества, безопасности и производительности сервиса.

Короткий ответ

При code review сервиса на Java Spring нужно обращать внимание на несколько ключевых аспектов. Во-первых, это архитектурные проблемы, такие как нарушение слоистой архитектуры или слишком большие классы. Во-вторых, проблемы с безопасностью, например, отсутствие валидации входных данных или уязвимости внедрения. Также важны производительность (N+1 запросы, отсутствие кэширования) и корректность работы с транзакциями. Наконец, стоит проверять соответствие код-стайлу, качество тестов и обработку исключений.

Длинный ответ

Архитектурные проблемы и нарушение принципов

Одна из частых проблем — смешивание ответственности слоёв. Например, бизнес-логика в контроллере или запросы к БД прямо из сервиса, минуя репозиторий. Это нарушает принцип единственной ответственности (SRP) и усложняет тестирование. Стоит искать слишком большие классы (God Object) и методы, которые нужно разбить.

Проблемы безопасности

Spring предоставляет много инструментов, но их нужно правильно использовать. Критически важно проверять:

  • Валидацию входных данных (@Valid, Bean Validation).
  • Защиту от внедрения SQL (использование JPA или PreparedStatement).
  • Настройки CORS и CSRF-защиты.
  • Правильное хэширование паролей (использование PasswordEncoder).
  • Проверку прав доступа (@PreAuthorize) на всех защищённых endpoint.

Производительность и работа с данными

Типичные ошибки, влияющие на производительность:

  • Проблема N+1 запроса в JPA/Hibernate при ленивой загрузке коллекций.
  • Отсутствие пагинации для больших списков.
  • Некорректное или отсутствующее кэширование (@Cacheable).
  • Создание лишних объектов в циклах или частых операциях.

Работа с транзакциями и исключениями

Нужно проверять, правильно ли объявлены транзакции (@Transactional). Например, транзакция только на чтение для операций select или правильный уровень изоляции. Обработка исключений должна быть централизована через @ControllerAdvice, а не разбросана по коду. Исключения из репозиториев должны преобразовываться в понятные пользовательские или системные ошибки.

Качество кода и тестирование

Следует обращать внимание на код-стайл, именование, отсутствие закомментированного кода ("мертвого кода"). Важно наличие модульных и интеграционных тестов, их покрытие и осмысленность. Внедрение зависимостей должно быть через конструктор (а не через @Autowired поля), что упрощает тестирование.

// Плохой пример: бизнес-логика в контроллере и отсутствие валидации
@RestController
public class BadController {
    @Autowired
    private UserRepository repo; // Внедрение в поле

    @PostMapping("/user")
    public User createUser(@RequestBody User user) {
        // Нет валидации!
        // Прямой вызов репозитория с логикой
        if (repo.findByEmail(user.getEmail()) != null) {
            throw new RuntimeException("Email exists"); // Неспецифичное исключение
        }
        return repo.save(user);
    }
}

// Улучшенный вариант
@RestController
@RequiredArgsConstructor // Внедрение через конструктор
public class GoodController {
    private final UserService userService;

    @PostMapping("/user")
    public ResponseEntity createUser(@Valid @RequestBody CreateUserRequest request) {
        UserDto created = userService.createUser(request);
        return ResponseEntity.status(HttpStatus.CREATED).body(created);
    }
}
// Сервис и валидация вынесены, используется DTO.

Вывод: Code review в Spring проекте — это не только поиск багов, но и контроль за архитектурой, безопасностью и долгосрочной поддерживаемостью кода. Особое внимание стоит уделять типичным для фреймворка проблемам, таким как транзакционность и работа с JPA.

Уровень

  • Рейтинг:

    4

  • Сложность:

    6

Навыки

  • Java

    Java

  • Spring

    Spring

Ключевые слова

#Spring Boot

#code review

#Java

#best practices

#anti-patterns

Подпишись на Java Developer в телеграм