Языки программирования

Вопросы на собеседовании: JavaScript

24 урока · 6 разделов · бесплатно, без регистрации

Этот курс — подготовка к собеседованию по JavaScript в формате «вопрос — чёткий ответ — запускаемое доказательство». Каждый урок разбирает реальный вопрос, который задают на интервью: от типов и приведения до событийного цикла, замыканий и this. Ответы краткие и точные, а к каждому прилагается пример, который вы можете запустить прямо в браузере и убедиться в поведении сами. Особый упор сделан на три главные темы собеседований: Event Loop, замыкания и контекст this.

Курс «Вопросы на собеседовании: JavaScript» состоит из 6 разделов и 24 уроков: Типы и приведение, Область видимости и замыкания, this, контекст и прототипы, Асинхронность, Функции и работа с данными и Каверзы и практика. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.

Программа курса

  1. 1 Типы и приведение

    1. Какие типы данных есть в JavaScript? Примитивы и объекты

      Разбор частого вопроса собеседования: сколько типов в JavaScript, чем примитивы отличаются от объектов и почему это важно при копировании.

    2. Чем == отличается от === ? Каверзные случаи приведения

      Разбор различий == и === в JavaScript: как работает приведение типов при нестрогом сравнении и почему [] == ![] возвращает true.

    3. typeof, null vs undefined, NaN — что отвечать

      Чем null отличается от undefined, почему typeof null === object и как правильно проверять NaN — частые вопросы на собеседовании по JavaScript.

    4. Truthy/falsy и сравнение объектов: почему {} !== {}

      Какие значения в JavaScript ложные (falsy), как они ведут себя в условиях и почему два одинаковых на вид объекта не равны через ===.

  2. 2 Область видимости и замыкания

    1. var, let и const — в чём разница? Block scope и TDZ

      Различия var, let и const на собеседовании: область видимости, переназначение, временная мёртвая зона (TDZ) и почему const не делает объект неизменяемым.

    2. Что такое hoisting (поднятие)?

      Hoisting в JavaScript простыми словами: как поднимаются объявления var и функций, чем function declaration отличается от function expression.

    3. Что такое замыкание (closure)? Объясните на примере

      Замыкания в JavaScript простым языком: функция запоминает переменные окружения. Классические задачи — счётчик и приватные данные.

    4. Замыкание в цикле: классическая задача с var и let

      Почему цикл с var и setTimeout печатает одно число, как это исправить через let или IIFE — разбор самой популярной задачи на замыкания.

  3. 3 this, контекст и прототипы

    1. Как определяется this? Четыре правила

      Главный вопрос про контекст в JavaScript: четыре правила определения this — обычный вызов, метод объекта, new и явная привязка call/apply/bind.

    2. call, apply и bind — в чём разница?

      Как явно задать this через call, apply и bind: чем отличаются методы, как передавать аргументы и зачем нужно bind для коллбэков.

    3. Стрелочные функции и this: главное отличие

      Почему стрелочные функции не имеют своего this и берут его из окружения — и как это спасает в коллбэках и методах.

    4. Прототипное наследование и классы: как устроена цепочка

      Как работает прототипное наследование в JavaScript: __proto__, prototype, цепочка прототипов и почему class — это синтаксический сахар над прототипами.

  4. 4 Асинхронность

    1. Событийный цикл (Event Loop): порядок выполнения

      Как работает событийный цикл в JavaScript: call stack, микрозадачи и макрозадачи, почему Promise выполняется раньше setTimeout.

    2. От колбэков к промисам: then, catch, finally

      Чем плохи колбэки и callback hell, как Promise решает проблему, состояния промиса и методы then/catch/finally на запускаемых примерах.

    3. async/await: синхронный вид асинхронного кода

      Как async/await упрощает работу с промисами, как ловить ошибки через try/catch и в каком порядке выполняется код с await.

    4. Почему JS однопоточный, но неблокирующий? Promise.all и race

      Как однопоточный JavaScript остаётся неблокирующим благодаря событийному циклу, и чем отличаются Promise.all, race, allSettled и any.

  5. 5 Функции и работа с данными

    1. Функции высшего порядка и колбэки

      Что такое функции высшего порядка в JavaScript: принимают или возвращают функции. Колбэки, замыкание аргументов и практические примеры.

    2. map, filter, reduce, find — методы массивов

      Главные методы массивов JavaScript на собеседовании: map преобразует, filter отбирает, reduce сворачивает, find ищет — с запускаемыми примерами.

    3. Деструктуризация, spread и rest

      Деструктуризация массивов и объектов, оператор spread для копирования и слияния, rest-параметры — частые вопросы и приёмы на собеседовании по JavaScript.

    4. Иммутабельность, каррирование и композиция

      Что такое иммутабельность данных в JavaScript, зачем она нужна, и краткий разбор каррирования и композиции функций с примерами.

  6. 6 Каверзы и практика

    1. «Что выведет?» — разбор каверзных задач

      Подборка задач «что выведет» с собеседований по JavaScript: hoisting, замыкание в цикле и порядок промисов — с пошаговым объяснением.

    2. Поверхностное и глубокое копирование объектов

      Разница между поверхностным и глубоким копированием в JavaScript: почему spread копирует только верхний уровень и как сделать глубокую копию.

    3. Debounce и throttle: идея и реализация

      Зачем нужны debounce и throttle, чем они отличаются и как их реализовать через замыкание и setTimeout — частая практическая задача на собеседовании.

    4. Мини-задачи и вопросы про производительность и память

      Частые мини-задачи с собеседований (уникальные значения, переворот строки) и что отвечать про производительность, утечки памяти и сборщик мусора в JavaScript.