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

Поділитися
Вставка
  • Опубліковано 17 лис 2024

КОМЕНТАРІ • 19

  • @andreekzz
    @andreekzz 2 місяці тому

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

  • @tonyslark6370
    @tonyslark6370 4 місяці тому +1

    Привет, Тимур, очень уважаю тебя как эксперта в 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 4 місяці тому +4

      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 3 місяці тому +2

      *Часть с индексом 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 системах, процесс не может отследить этот сигнал, а значит задача общего решения не имеет.

  • @artem_travlo
    @artem_travlo 2 місяці тому

    спасибо❤

  • @yankov2206
    @yankov2206 4 місяці тому +3

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

    • @antergonza6476
      @antergonza6476 4 місяці тому

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

    • @TimurShemsedinov
      @TimurShemsedinov  4 місяці тому +2

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

  • @АндрійЖуков-ь8р
    @АндрійЖуков-ь8р 4 місяці тому +1

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

    • @TimurShemsedinov
      @TimurShemsedinov  4 місяці тому +2

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

  • @dmitrykomkov8480
    @dmitrykomkov8480 4 місяці тому

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

    • @TimurShemsedinov
      @TimurShemsedinov  4 місяці тому +3

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

    • @demimurych1
      @demimurych1 3 місяці тому +1

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

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

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

  • @Сергей-у3к8й
    @Сергей-у3к8й Місяць тому

    Сам вопросы написал, сам на них ответил)). А чё так можно* Ты же понимаешь что они сейчас начнут дёргать эти вопросы на собесы, без всякой валидации твоих ответов?