Как мыслить при написании кода
Что проверяют
Есть ли у вас рабочий процесс, а не набор лозунгов про SOLID. Интервьюер хочет услышать, с чего вы начинаете, как принимаете решения по ходу и как понимаете, что закончили. Следом почти всегда просят показать это на задаче или на последнем коде, который вы переписывали.
Как отвечать
Опишите свой порядок действий и привяжите его к Java:
- сначала задача, потом код: входы, выходы, крайние случаи. Что будет с
null, пустой коллекцией, дубликатами, огромным объёмом, параллельным вызовом; - простое рабочее решение: сначала очевидный вариант, который проходит тесты, потом улучшения. Преждевременные абстракции обходятся дороже, чем кажется;
- код для читателя: имена по смыслу, короткие методы, неизменяемость по умолчанию (
final,record,List.of),Optionalкак тип возврата, а не поля. Стрим там, где он читается легче цикла, и цикл там, где стрим превращается в головоломку; - ошибки как часть дизайна: где исключение, где пустой результат, что увидит вызывающий код и что попадёт в лог;
- тесты как проверка мысли: тест на крайний случай пишется до того, как вы поверили в код. Если класс трудно протестировать, это сигнал о лишних зависимостях;
- оценка: сложность алгоритма, лишние запросы в базу, аллокации в горячем цикле. Мерить профилировщиком или JMH, а не на глаз.
Каждый пункт подкрепите своим примером: «вынес расчёт тарифа из контроллера в отдельный сервис, и на него появились быстрые юнит-тесты без поднятия контекста Spring». Если коммерческого опыта мало, берите учебный проект или задачу с лайвкодинга и честно расскажите, что поменяли бы сейчас.
Где спотыкаются
Перечисляют SOLID, KISS и DRY без единого примера. Это звучит как пересказ статьи, а не как собственный подход.
Называют Singleton хорошим паттерном по умолчанию. В Spring бины и так одиночки, а ручной Singleton со статическим полем прячет глобальное состояние и мешает тестам.
На лайвкодинге пишут молча. Именно здесь интервьюер смотрит, как вы думаете, поэтому проговаривайте допущения, крайние случаи и то, что оставляете на потом.