💡 JavaScript собеседование: вопросы по асинхронному программированию

Поделиться
HTML-код
  • Опубликовано: 29 сен 2024
  • 🚀 Фрагмент семинара из курсов Node.js 2024 и Async 2024:
    👉 Вопросов на собесы по асинхронному программированию: github.com/tsh...
    👉 Вопросов на собесы по ноде: github.com/tsh...
    👉 Node.js 2024 описание курса: github.com/How...
    👉 Открытый курс по Node.js: github.com/How...
    👉 Описание курса Async 2024: github.com/How...
    👉 Старый курс по асинхронности: github.com/How...
    👉 Оглавление всех открытых лекций: github.com/How...
    👉 Github автора: github.com/tsh...

Комментарии • 18

  • @andreekzz
    @andreekzz 13 дней назад

    Тимур, смотрю с огромным удовольствием уже лет 5. Спасибо большое! Заразительные знания

  • @тимур_атмосферный
    @тимур_атмосферный 3 месяца назад +1

    JavaScrip в названии ... Опечатка или великий заложенный смысл?

  • @artem_travlo
    @artem_travlo Месяц назад

    спасибо❤

  • @yankov2206
    @yankov2206 3 месяца назад +3

    А где посмотреть первые 50? ((

    • @antergonza6476
      @antergonza6476 3 месяца назад

      Под видео ссылка

    • @TimurShemsedinov
      @TimurShemsedinov  3 месяца назад +2

      @@antergonza6476 а разбор на курсе мы делали на той неделе

  • @АндрійЖуков-ь8р
    @АндрійЖуков-ь8р 3 месяца назад +1

    что вы обозначаете "контрактом"?

    • @TimurShemsedinov
      @TimurShemsedinov  3 месяца назад +2

      Контракт, это то, интерфейс в виде тайпинга или спецификации, например jsdoc или .d.ts + поведение, т.е. это не только имена и типы, но и то, что невозможно описать типами, т.е. асинхронный аспект или последовательность вызовов или изменений. Пример: Promise, shared arrays, fetch. У меня есть отдельная лекция ruclips.net/video/K5_kSUvbGEQ/видео.html

  • @dmitrykomkov8480
    @dmitrykomkov8480 3 месяца назад

    Воркеры не являются частью исполняемой программы JS, поэтому нет никакой смеси с многопоточностью. Это однопоточное приложение со своей спецификой отложенного исполнения кода, который мы по привычке называем асинхронным. Тут даже нет классической схемы асинхронного запуска кода, только вызов WebAPI и эмуляция через колбеки.
    Я прошел собеседование, учитель?

    • @TimurShemsedinov
      @TimurShemsedinov  3 месяца назад +3

      Вы про воркеры в тред-пуле или воркер-треды? Какие признаки бы можно было предъявить, чтобы они были частью исполняемой js-прогоаммы? Кстати очень неточный термин, исполняемая js-программа, что это?

    • @demimurych1
      @demimurych1 Месяц назад +1

      Следуя Вашей логике, Go тоже однопоточный.

  • @tonyslark6370
    @tonyslark6370 3 месяца назад

    Привет, Тимур, очень уважаю тебя как эксперта в JS. У меня к тебе нетривиальные задачки. Был на собеседовании Node.js разработчика на 120к, и не смог ответить на 3 из 4 вопросов.
    Код первого вопроса:
    const arr = [5, 12, 16, 23]
    console.log(arr[4]) //Вывод 20
    console.log(arr[Variable]) //Вывод 20
    Надо добавить что-то после arr (менять массив нельзя), чтобы консоль логи отрабатывали корректно и выводили 20 при таком обращении к массиву. Variable в коде не определяется.
    Второй вопрос такой:
    Мы посылаем 1000 долгих запросов на сервер, 500 из них ещё не вернули ответ. И мы переодически убиваем процесс Node.js через kill(9). Нужно, чтобы эти 500 незавершенных запросов отправили на клиент ошибку status: 400. Я предложил использовать gateway сервис и через него перенаправлять запрос к процессу, либо попробовать через nginx(или подобную технологию) отдавать статус код. Такой вариант собеседующему сильно не понравился.
    Найти какой-либо ответ на это я найти не смог. Может ты или кто другой подскажет, какой ответ от меня ожидали?

    • @4alexvlasov
      @4alexvlasov 2 месяца назад +3

      const arr = [5, 12, 16, 23];
      // Создаем прокси для массива
      const handler = {
      get: function(target, prop) {
      if (prop == 4 || prop == 'Variable') {
      return 20;
      }
      return target[prop];
      }
      };
      const proxyArr = new Proxy(arr, handler);
      console.log(proxyArr[4]); // Вывод: 20
      console.log(proxyArr['Variable']); // Вывод: 20

    • @demimurych1
      @demimurych1 Месяц назад

      *Часть с индексом arr[4] имеет два решения:*
      1) Proxy. (Комментарием выше есть пример)
      2) Использование прототипов:
      Reflect.setPrototypeOf(arr, {4: 20});
      arr[4]; // 20
      *Часть с Variable имеет два решения:*
      1) через Proxy
      2) поскольку в условии задачи не определен "use strict" то мы можем использовать with для изменения контекста, подставив вместо оригинального - обьект с проперти Variable. Если к этому добавить решения для Arr[4] то будет это выглядеть вот так
      Reflect.setPrototypeOf(arr, {4: 20});
      with ({Variable:4}) {
      arr[Variable]
      }
      *Задание с kill*
      Это задание странно пахнет по следующим причинам:
      kill -9 это сигнал который само приложение к которому применяется этот сигнал, перехватить его не может.
      Потому, либо ожидают решение на основе какого-то фееричного костыля, либо задача специально сделана так, чтобы соискатель ответил - при отправке 9 сигнала или SIGKILL в POSIX системах, процесс не может отследить этот сигнал, а значит задача общего решения не имеет.