⎡msk⎦⎡sobes: 07⎦ JavaScript собеседования: Event Loop и вся правда о нем

Поделиться
HTML-код
  • Опубликовано: 9 ноя 2024

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

  • @AsForJS
    @AsForJS  Год назад +6

    Таймкоды:
    00:00:00 Музыка
    00:03:00 Приветствия
    00:05:00 Начал по сути Event Loop
    00:07:30 Самый универсальный ответ о вопросах про Event Loop
    00:10:00 Подробная расшифровка ответа
    00:38:00 Что в Task Queue может выполняться не по порядку
    00:56:00 Ответы на вопросы
    00:57:39 Пример ответного вопроса ломающего собеседование
    00:59:21 Вероятности выполнения (я перепутал их местами)
    01:02:00 Многопоточность и Event Loop
    01:04:40 JS синхронный или асинхронный
    01:09:09 Смотрите отражение монитора в очках
    01:16:49 Что такое Job и что такое Realm
    01:21:25 Task Queue как Set
    01:22:10 Почему console.log вызывается раньше setTimeout
    01:33:40 Event Loop это часть движка или браузера
    [...] На стадии расшифровки

    • @dakaktakto
      @dakaktakto Год назад +2

      1:36:33 схема HOST, Runtime и вызов API
      1:47:16 setTimeout Node vs setTimeout Browser
      1:51:30 технология апплетов и Java
      1:57:20 что думаешь про Deno и Bun
      2:04:28 почему не уважаешь TypeScript
      2:07:07 в JS не существует примитивных типов
      2:12:40 снова TypeScript
      2:13:55 снова про типы данных и собеседования
      2:19:00 детство Шелдона и что Мурыч разрабатывал в 12 лет
      2:26:15 немного про Call Stack

  • @leetcode24
    @leetcode24 Год назад +11

    Очень интересный выпуск, огромная благодарность!!! таких авторов как Мурыч, днём с огнем не сыщешь, а тут целый канал с множеством выпусков, моё признание!

  • @Volodymyr-y1c
    @Volodymyr-y1c 11 месяцев назад +4

    До речі, дуже гарна українська на 1:42:00. Набагато краще ніж на перших стрімах українською. Респект!

  • @cath_kb
    @cath_kb Год назад +7

    51:48 Согласно спецификации HTML (Living Standard, раздел 8.6 Timers -> The timer initialization steps) преобразование задержки в 4ms указано для случая с nesting level, а не для любого таймера:
    4. If timeout is less than 0, then set timeout to 0.
    5. If nesting level is greater than 5, and timeout is less than 4, then set timeout to 4.
    Спасибо за выпуск!

    • @AsForJS
      @AsForJS  Год назад +2

      Про это дополнительно сделана запись ruclips.net/video/MxL04wXIyBQ/видео.html
      Там и обьясняется появление таких уверенных речей про 4мс

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

    смотрим видос и идем клепать формы

  • @petermashine1483
    @petermashine1483 9 месяцев назад +1

    сложное сделать сложным особого ума не надо.
    сложное сделать простым - это искусство.
    Спасибо!

  • @morghull_
    @morghull_ Год назад +5

    дякую за корисну інфу 🎉 💪🇺🇦

  • @kirillzaytsev8105
    @kirillzaytsev8105 10 месяцев назад +1

    Лайк не глядя.

  • @Volodymyr-y1c
    @Volodymyr-y1c 11 месяцев назад +1

    Мурич, як я зрозумів є 4 черги: дві у хост середовищі (browser: task queue, mictotask queue) і дві у самому рантаймі (v8: job queue, promise queue). Хост середовище відповідно до специфікації пушить задачі із своїх черг в черги рантайму. В самому джаваскрипті (без використання АПІ хост середовища), як ти сказав, не можливо якимось чином покласти задачу в TASK queue хоста. Але чи є можливість покласти щось в JOB queue або PROMISE queue без використання зовнішнього апі і цих зовнішніх черг? Наприклад, чому в Promise.resolve().then(callback) потрібно спочатку класти щось в MICROTASK queue, якщо Promise це частина ecma спеки і немає ніякої взаємодії з зовнішнім апі? Це щоб забезпечити коректний порядок виконання коду ?

  • @johngalt9494
    @johngalt9494 2 месяца назад

    @AsForJS
    1) 53:00 - 53:10 - Почему вы сказали, что "Task Queue" (Макротаски) является отражением "Generic Jobs", если "Task Queue" - это не только только про "AtomicsAPI", а "Generic Jobs" - это только про "AtomicsAPI" ?
    2) 22:20 - 22:55 - Кажется вы перепутали "execution context stack" и "GenericJobQueue" ? Разве не в "execution context stack" хост среда помещает функцию на выполнение ?
    3) 25:40 - Почему вы сказали что "Task queue" работает по по логике стека: "То которое находится выше всех - то я и возьму", разве она "обычно" работает не по принципу очереди: "первым зашёл - первым вашел", т.е. тот, кто зашёл последним, последним и выйдет ?
    4) 2:27:20 - 2:27:50 - Почему вы сказали, что функция (job) ставится в "Generic job queue", если на самом деле он хост среда ставит его в "execution context stack"?

  • @nikitalevcovich4843
    @nikitalevcovich4843 10 месяцев назад

    Спасибо вам за весьма познавательное видео! Могли бы рассказать, почему вы никогда не используете команду if(), или может у вас уже есть видео, где вы об этом подробно рассказываете? Очень интересно узнать, что и почему лучше использовать вместо if else.
    У меня есть предположение касательно тернарного или switch операторов и лучшей читабельности кода, а так же возможно лучшей производительности...

  • @adilyakalimullina8922
    @adilyakalimullina8922 8 месяцев назад

    Здравствуйте, спасибо большое за видео! У меня возникло два вопроса:
    1. Как связаны между собой task queue / microtask queue и genericJob / promiseJob? Если я правильно поняла, вы в видео мельком упомянули, что из task queue задачи попадают в genericJob, можете немного подробнее, пожалуйста, рассказать об этом
    2. Аналогичный вопрос, как связаны между собой очереди и execution context stack? Как задачи из очереди попадают в стек?

  • @7iomka
    @7iomka 10 месяцев назад +1

    02:17:10 - где книжку взять?)

  • @sv946
    @sv946 9 месяцев назад

    Здравствуйте! Как правильно называются упомянутые уязвимости на 40:45 минуте? Не могу правильно загуглить, чтобы о них подробнее прочитать

  • @darkamin21
    @darkamin21 Год назад +4

    Дякую

  • @JavaScriptAdept
    @JavaScriptAdept Год назад

    Все отлично) Но один вопрос - в чем выражается такая нелюбовь к ровным линиям?)) 24:25

  • @frstnmlstnm-it1mf
    @frstnmlstnm-it1mf 16 дней назад

    По сути работа с промисами это как будто мы напрямую дергаем апи, которое нам предоставляет promiseQueue(microtaskQueue);

  • @dencelman
    @dencelman 9 месяцев назад

    👍

  • @theoty-js
    @theoty-js Год назад +4

    Event Loop - интересная тема

  • @zloyleva
    @zloyleva 2 месяца назад

    Ни х?я ж себе ты задвинул - в начале подумал что за дичь. Но потом втянулся, даже пришлось идти за бутылкой))) И лезть в спецификации чтобы проверить))) Единственное - что-то с микрофоном - слух режет - пипец

  • @СергейБит
    @СергейБит 11 месяцев назад

    43:14 теперь ближе к пониманию почему сейчас браузеры такие прожорливые

  • @Boortwint
    @Boortwint 10 месяцев назад

    Вопросы по event loop задаются на интервью по той причине, что от соискателя требуют выполнение определённых задач, требующих знание работы хост-среды.
    Когда человека берут на работу фронтом, например, не предполагается, что он будет только лишь запускать v8 из консоли и читать байт-код. Фронтенд-разработчик обычно пишет интерфейсную часть, которая тесно связана с браузером как средством отображения этого интерфейса.

    • @AsForJS
      @AsForJS  10 месяцев назад

      Вы насколько абсолютно правы, настолько же и ошибаетесь.
      Язык JavaScript не имеет никакого отношения к EventLoop. При этом, самостоятельное знание языка JS бессмысленно - потому, что без знаний о HOST среде, применение знаний JS программиста бессмысленны.
      Современный JS, для массового его потребителя (изучающего) делится на две большие разницы: это браузер (где EvenLoop выписан согласно стандарту HMTL5) и backEnd илди Node (где EventLoop выписан согласно архитектуре библиотеке libUv).
      Как следствие, чрезвычайно важно, чтобы программист, который эксплуатирует свои навыки в определенной области, четко мог дифференцировать - где сам JS, а где особенности той области в которой он оказался.
      Если ты оказался в браузере то там есть EvenLoop солгасно стандарту HTML5. Оказался в ноде, то там EvenLoop другой и он согласно левой патяке создателей LibUv. Оказался в китайском чайнике - а там ВООБЩЕ НЕТ EVEN LOOP.
      Основная мысль в том, чтобы программист использующий JS как свой основной инструмент для работы, четко диферренцировал - где JS а где оособенности среды.

    • @Boortwint
      @Boortwint 10 месяцев назад

      ​@@AsForJS собеседование на позицию того же фронта довольно комплексное. Там и HTML, и CSS обсуждается, затрагиваются вопросы тестирования и флоу разработки. Там не только по JS гоняют.
      Event Loop хоть и не является частью языка, но всё же тесно с ним связан. Тесно связан относительно других тем, в которых разработчик должен разбираться. Посему вопросы по циклу событий часто находятся рядом с вопросами по JS. На моей практике вопросы по хост-среде задавались после блока вопросов, касающихся конкретно языка JS.
      Вопрос по event loop как раз-таки позволяет определить, насколько соискатель понимает разницу между функционалом самого языка и функционалом хост-среды. Поэтому я искренне не понимаю, почему вопросы о цикле событий на собеседованиях должны вызывать желание воткнуть копью в голову собеседующему.

    • @AsForJS
      @AsForJS  10 месяцев назад

      ​@@Boortwint Да, он безусловно тесно с ним связан тогда, когда Вы работает с HOST средой которая реализует стандарт HTML5. Так и следует грамотно гооворить об этом: вот тут JavaScript, вот тут EventLoop стандарта HTML5, а вот тут мы рыбу заворачиваем.
      Копье собеседнику следует воткнуть потому, что собеседник задает эти вопросы, предполагая что это это вопросы относящиеся к JavaScript, но не к особенностями HOST среды где он выполняется.
      Потому, что люди, которые слушают и проходят такие собеседования, потом еще очень долго думают, что это именно JavaScript и он именно такой, но не то, что он тут вообще никаким боком.
      Когда Вы на собеседовании, например на должность фронтендера, то у Вас должны спрашивать:
      1) как работает JavaScript
      2) какие API предоставляет HOST среда вашему JS коду
      3) особенности применения этих API для формирования фронтенда
      Пункты 2 и 3 не имеют НИКАКОГО отношения к JS.
      Но при этом пункты 2 и 3 создают именно то, почему Вы как фронтендер отличается от бекендера.
      И еще раз подчеркну - JavaScript тут не причем от слова СОВСЕМ.

    • @Boortwint
      @Boortwint 10 месяцев назад +1

      @@AsForJS формулировка второго пункта опровергает тот факт, что он не имеет *НИКАКОГО* отношения к JS. Агент, выполняющий код, взаимодействует с хостом. Взаимодействие есть отношение.
      Вопрос про цикл событий можно задать по-разному.
      "Расскажите про цикл событий в javascript" - некорректный вопрос, достойный копья.
      "Расскажите про принцип работы event loop в браузере" - вполне себе адекватный вопрос, который можно и нужно задавать.

  • @audiodrocher
    @audiodrocher 7 месяцев назад

    Карина.jpg
    Но за видео пасиб.

  • @klapperbein6632
    @klapperbein6632 6 месяцев назад

    Хотелось бы подкаст на тему "Почему typeScript = 💩"

  • @macgera
    @macgera 10 месяцев назад

    Когда я говорю о "копье" и о том что в JS нет event loop - меня на собеседовании отсеивают :)

    • @AsForJS
      @AsForJS  10 месяцев назад +2

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

    • @ВладимирВлад-н8в
      @ВладимирВлад-н8в 10 месяцев назад

      Охренеть))))! Только оставил комент про копье, не думал что кто-то реально будет так отвечать.

  • @diggerdog001
    @diggerdog001 Год назад

    Мурыч, что такое хоз среда о которой ты постоянно говоришь?

    • @ИгорьНово
      @ИгорьНово 11 месяцев назад +1

      Host

    • @klapperbein6632
      @klapperbein6632 10 месяцев назад +1

      Насколько я понял, под хост средой имеется ввиду - браузер, он как бы является хостом для нашего кода Js, также хост среда(бразуер) предоставляет некие внешние api которые мы можем использовать - например DOM-дерево. Runtime - это этапы жизненного цикла кода, но тут я могу ошибаться, я недавно начал увлекаться этим. Было бы очень круто если бы меня подправил кто по умнее)

    • @frstnmlstnm-it1mf
      @frstnmlstnm-it1mf 16 дней назад

      Runtime это движок v8, который крутится в хост среде и исполняет js код.

  • @SERGIUS_ORIGINAL
    @SERGIUS_ORIGINAL Год назад +1

    Это бесценная информация ...

  • @ВладимирВлад-н8в
    @ВладимирВлад-н8в 10 месяцев назад

    5:22 дальше можно не смотреть. Это не просто бесполезное видео, ЭТО ВРЕДНОЕ ВИДЕО, если вы будете на собесах отвечать "копье" про работу можно забыть в принципе )).

  • @Phoenix_coding
    @Phoenix_coding Год назад +6

    Вам не приходило копьё?😂

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

      Меня так на сеньора взяли 😂