Вопросы на собеседовании Senior Node.JS разработчику

Jehy
3 min readJun 1, 2018

Недавно освежал в памяти, что должен знать сениор, и решил составить для себя небольшую шпаргалку. Она не претендует на полноту и объективность, и я буду рад дополнениям и замечаниям. Так же здесь не освещены многие вопросы, которые, как я считаю, очевидны, и их должен знать миддл или даже джуниор разработчик (например, здесь нет ни одного вопроса по системам контроля версий или всяким там асинкам и промисам). Ну и наоборот — некоторые могут показаться избыточными.

Базовые вещи в V8

Как работает Event loop. Как его можно заблокировать. Чем отличаются setImmediate, setTimeout, setInterval, process.nextTick? Действительно ли нода работает в один поток?

Какие сложности в отладке и диагностике могут возникнуть в Highload приложении на Node.JS.

Как устроена память в V8?

Структура памяти, работа Garbage collector, утечки памяти и как с ними бороться.

Архитектура приложений

Плюсы и минусы микросервисов и монолитов. Что такое очереди, и причём тут Node.JS (большой открытый вопрос). Как обеспечить failover в Node.JS.

Шифрование

Когда использовать какие типы хэшей, открытые-закрытые ключи, соль и всё такое.

СУБД

Понятно, что никакой кандидат не работал со всеми возможными СУБД, но имеет смысл поговорить про ту СУБД, с которой он работал. Плюсы, минусы, типы данных, ORM, Query builders, SQL injections, транзакции и так далее. Очень глубокая тема для разговора, если кандидат утверждает, что знает свою СУБД, и интервьювер тоже в ней разбирается.

Загрузка модулей

Как грузятся модули, как правильно это делать, чем отличается exports от module.exports, как может возникнуть циклическая зависимость, что при этом произойдёт, как с этим бороться.

Безопасность Node.JS приложений

Что может повлиять, как оценить, как бороться, что можно добавить в CI.

Многопоточность

Как её сделать в ноде, все способы, плюсы и минусы.

Паттерны проектирования, SOLID, KISS, DRY

Да нет, шучу, ни за что бы не спросил. Чёткий ответ означает или умение учить формулировки, или то, что кандидат это вчера вспоминал. Нечёткий не означает, что кандидат это не чувствует и не применяет.

Тестирование

Как выстрелить себе в ногу на юнит тестах, и что означает 100% покрытие.

Линтинг

Зачем нужен, как внедрять, какие стандарты использовали.

Если разработчик приходит на проект с легаси кодом

Если нужно дописывать и ревьювить легаси код, то имеет смысл задать всякие вопросы про всплытие (хойстинг), различия var, let, const, 3 способа сделать класс и прочие вещи, которые при воспоминаниях о них в 2018 году доставляют боль.

Логирование

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

Код ревью

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

СТОП!

В каких случаях надо заниматься рефакторингом, когда следует катить хотфиксы на продакшн, когда надо приоритизировать костыли.

Воркфлоу

Как кандидат видит идеальный процесс от возникновения и постановки задачи до выкатки её в продакшн.

Бенчмарки

Как писать годные бенчмарки, на что следует обратить внимание, если например, сравниваешь приложение на Go, Node.JS и Java.

Команда

Как работать с локальной и удалённой командой, разрешать конфликты, обучать разработчиков, решать проблемы разных временных поясов, личных желаний разработчиков, быстрых выпусков релизов и так далее. Конечно, бывает Senior, который только пишет код — но в целом от него уже ожидается взаимодействие с другими разработчиками.

Серебряная пуля

Когда не стоит использовать Node.JS, почему, и как это нужно обходить.

Вне работы

Всегда интересно, что делает разработчик в свободное время, участвует ли в open source проектах, где читает новости про свой стек технологий и на какие конференции ходит. При этом стоит воспринимать это исключительно как бонусные баллы, а не потенциально штрафные.

Ты с какого раёна?

Самое полезное, что часто опускается в интервью — это собственно узнать, чем человек занимался раньше. Скорее всего, это расскажет вам больше, чем все остальные вопросы, вместе взятые. Главное — не пропускать это мимо ушей как “стандартную часть” и задавать много вопросов.

Необязательные, но полезные вопросы

Вопросы по теории графов, теории алгоритмов, теории вероятности. С 99% вероятности это никогда не принесёт профита на текущей работе, но вообще является хорошим бонусом.

Так же можно спросить про генераторы. Очень редко вижу их практическое применение, но почему бы нет — если кандидат ответит, то это опять же будет бонусом.

Ещё можно спросить про представление различных структур в памяти V8. Не то чтобы у тебя часто был выбор, но знать полезно.

Подводя итог

Это список вопросов, которые я считаю правильными. Естественно, к нему прикладывается необходимость посмотреть на код, который пишет соискатель. К счастью, у 95% разработчиков есть личный код, который они могут показать. Правда, стоит учитывать, что обычно он несколько ниже той планки, которую сениор ставит себе и команде на официальной работе — но это хотя бы покажем минимум его знаний и умений.

Что же касается решений задач на листочке и в онлайновом редакторе — не буду вступать на эту скользкую почву. Просто скажу, что такой подход меня очень сильно расстраивает, и более корректным я считаю выдавать небольшие и интересные домашние задания.

--

--