Что такое принципы DRY, SOLID, KISS и YAGNI и почему они важны?
Что проверяют
Не заучил ли кандидат расшифровки, а умеет ли по каждому принципу назвать нарушение из живого кода и цену этого нарушения. На Java-собеседовании это ещё и проверка того, понимает ли человек, зачем в проекте интерфейсы и внедрение зависимостей, а не просто копирует структуру соседнего модуля.
Как отвечать
По одной фразе на принцип, и сразу последствие.
DRY про единственный источник знания, а не про похожие строки: дублируется правило расчёта, а не текст метода. KISS про самое простое решение, которое закрывает требование. YAGNI про отказ от функциональности, которую никто не просил.
SOLID разверните полностью: единственная ответственность (одна причина для изменения класса), открытость для расширения при закрытости для правки, подстановка Лисков (наследник соблюдает контракт предка, не усиливая предусловия и не ослабляя постусловия), разделение интерфейсов (клиент не зависит от того, что не вызывает), инверсия зависимостей (и верхний уровень, и детали зависят от абстракций, а не абстракции от деталей).
Сильный ответ подкрепляется примером нарушения.
List<String> ro = Collections.unmodifiableList(src);
ro.add("x"); // UnsupportedOperationException: контракт List нарушенГде спотыкаются
Сыплют буквами, но не приводят ни одного нарушения. Чаще всего проваливают Лисков: наследник, который бросает исключение на методе интерфейса, выглядит безобидно ровно до момента, когда вызывающий код рассчитывает на контракт.
Понимают DRY как запрет на похожий код. Два места из разных доменов случайно совпали, их склеили общим методом, и следующая правка одного ломает второй. Ошибочная абстракция обходится дороже дублирования, и откатывать её сложнее.
Противопоставляют YAGNI и качество: не пишут тесты и не обрабатывают ошибки, ссылаясь на принцип. Он про лишнюю функциональность, а не про инженерную дисциплину. Обратная крайность такая же частая: фабрика и интерфейс на одну реализацию сразу, на случай второй базы, которой не будет.