На технических интервью сейчас редко ограничиваются стандартными вопросами — все чаще звучат неочевидные, а иногда и провокационные вопросы, чтобы проверить реальное понимание. Мы спросили у наших экспертов: какие каверзные вопросы запомнились им больше всего?🕵️♂️
⚛️ Frontend (JS / React / TS)
❓ Чему равно typeof null и почему именно так?
Ответ: typeof null возвращает "object". Это официально признанная ошибка в первой реализации JavaScript: значения помечались тегами, и для null ошибочно использовался тег объекта (000). Осталось для совместимости.
❓ В чём разница между Controlled и Uncontrolled компонентами?
Ответ: Controlled — состояние хранится в React (value + onChange). Uncontrolled — состояние в DOM (defaultValue + ref). Controlled удобнее для сложных форм и валидации, uncontrolled — быстрее и проще для простых случаев.
❓ Как работает hoisting (всплытие) для var, let и const?
Ответ: var поднимается полностью и инициализируется undefined. let и const тоже поднимаются, но до объявления находятся в «Temporal Dead Zone» — любое обращение к ним вызывает ReferenceError.
❓ Чем any опаснее unknown в TypeScript?
Ответ: any отключает проверку типов полностью — можно делать любые операции. unknown требует явной проверки типа перед использованием, что безопаснее и помогает отловить ошибки на этапе компиляции.
🐍 Backend (Python / Java)
❓ Что будет, если использовать список [] как аргумент по умолчанию в Python?
Ответ: Список создастся один раз при инициализации функции. При каждом новом вызове Python будет использовать тот же самый объект, накапливая в нем данные от прошлых запусков. Это классическая ловушка «изменяемого аргумента».
❓ Почему String в Java immutable и зачем это нужно?
Ответ: Неизменяемость даёт потокобезопасность, безопасность (используется в classloader, паролях), позволяет использовать строку как ключ в HashMap (hash не меняется) и оптимизировать память через String Pool.
❓ Как в Java 8+ обрабатываются коллизии в HashMap?
Ответ: При коллизии элементы сначала хранятся в связанном списке. Когда в одной корзине больше 8 элементов — список превращается в красно-чёрное дерево. Поиск ускоряется с O(n) до O(log n). При уменьшении дерево снова становится списком.
❓ Почему is и == в Python могут давать разные результаты?
Ответ: is проверяет, один ли это объект в памяти (сравнение по ссылке). == проверяет равенство значений. Поэтому is быстрее, но == обычно то, что нужно для данных.
❓ Какие два класса в Java не наследуются от Object?
Ответ: Никакие. Только у самого Object нет суперкласса.
📊 Аналитика и Базы данных
❓ В чем разница между WHERE и HAVING в SQL?
Ответ: WHERE отсеивает строки до группировки данных. HAVING фильтрует уже сгруппированные результаты.
❓ Что такое user story и acceptance criteria?
Ответ: User story — короткое описание задачи от лица пользователя. «As a [роль], I want [фича], so that [польза]» (As a buyer, I want to buy in one click, so that I don’t fill the form every time). Acceptance criteria — условия, при которых задача считается выполненной (обычно в формате Given-When-Then).
⚙️ DevOps и Тестирование
❓ Почему нельзя использовать тег :latest в проде?
Ответ: :latest не immutable — при каждом pull может прилететь новая версия без изменения манифеста. Результат: невоспроизводимые деплои, сложный откат, проблемы с кэшем и внезапные поломки в проде. Лучше всегда указывать конкретный тег или SHA256.
❓ Чем Selenium WebDriver отличается от старого Selenium RC?
Ответ: RC работал через «костыль» — использовал сервер-посредник и инъекции JavaScript, что было медленно. WebDriver общается с браузером напрямую через нативный протокол, поэтому он быстрее, стабильнее и лучше имитирует действия человека.