Таймкоды: 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 это часть движка или браузера [...] На стадии расшифровки
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
Очень интересный выпуск, огромная благодарность!!! таких авторов как Мурыч, днём с огнем не сыщешь, а тут целый канал с множеством выпусков, моё признание!
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. Спасибо за выпуск!
Мурич, як я зрозумів є 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 спеки і немає ніякої взаємодії з зовнішнім апі? Це щоб забезпечити коректний порядок виконання коду ?
@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"?
Спасибо вам за весьма познавательное видео! Могли бы рассказать, почему вы никогда не используете команду if(), или может у вас уже есть видео, где вы об этом подробно рассказываете? Очень интересно узнать, что и почему лучше использовать вместо if else. У меня есть предположение касательно тернарного или switch операторов и лучшей читабельности кода, а так же возможно лучшей производительности...
Здравствуйте, спасибо большое за видео! У меня возникло два вопроса: 1. Как связаны между собой task queue / microtask queue и genericJob / promiseJob? Если я правильно поняла, вы в видео мельком упомянули, что из task queue задачи попадают в genericJob, можете немного подробнее, пожалуйста, рассказать об этом 2. Аналогичный вопрос, как связаны между собой очереди и execution context stack? Как задачи из очереди попадают в стек?
Ни х?я ж себе ты задвинул - в начале подумал что за дичь. Но потом втянулся, даже пришлось идти за бутылкой))) И лезть в спецификации чтобы проверить))) Единственное - что-то с микрофоном - слух режет - пипец
Вопросы по event loop задаются на интервью по той причине, что от соискателя требуют выполнение определённых задач, требующих знание работы хост-среды. Когда человека берут на работу фронтом, например, не предполагается, что он будет только лишь запускать v8 из консоли и читать байт-код. Фронтенд-разработчик обычно пишет интерфейсную часть, которая тесно связана с браузером как средством отображения этого интерфейса.
Вы насколько абсолютно правы, настолько же и ошибаетесь. Язык JavaScript не имеет никакого отношения к EventLoop. При этом, самостоятельное знание языка JS бессмысленно - потому, что без знаний о HOST среде, применение знаний JS программиста бессмысленны. Современный JS, для массового его потребителя (изучающего) делится на две большие разницы: это браузер (где EvenLoop выписан согласно стандарту HMTL5) и backEnd илди Node (где EventLoop выписан согласно архитектуре библиотеке libUv). Как следствие, чрезвычайно важно, чтобы программист, который эксплуатирует свои навыки в определенной области, четко мог дифференцировать - где сам JS, а где особенности той области в которой он оказался. Если ты оказался в браузере то там есть EvenLoop солгасно стандарту HTML5. Оказался в ноде, то там EvenLoop другой и он согласно левой патяке создателей LibUv. Оказался в китайском чайнике - а там ВООБЩЕ НЕТ EVEN LOOP. Основная мысль в том, чтобы программист использующий JS как свой основной инструмент для работы, четко диферренцировал - где JS а где оособенности среды.
@@AsForJS собеседование на позицию того же фронта довольно комплексное. Там и HTML, и CSS обсуждается, затрагиваются вопросы тестирования и флоу разработки. Там не только по JS гоняют. Event Loop хоть и не является частью языка, но всё же тесно с ним связан. Тесно связан относительно других тем, в которых разработчик должен разбираться. Посему вопросы по циклу событий часто находятся рядом с вопросами по JS. На моей практике вопросы по хост-среде задавались после блока вопросов, касающихся конкретно языка JS. Вопрос по event loop как раз-таки позволяет определить, насколько соискатель понимает разницу между функционалом самого языка и функционалом хост-среды. Поэтому я искренне не понимаю, почему вопросы о цикле событий на собеседованиях должны вызывать желание воткнуть копью в голову собеседующему.
@@Boortwint Да, он безусловно тесно с ним связан тогда, когда Вы работает с HOST средой которая реализует стандарт HTML5. Так и следует грамотно гооворить об этом: вот тут JavaScript, вот тут EventLoop стандарта HTML5, а вот тут мы рыбу заворачиваем. Копье собеседнику следует воткнуть потому, что собеседник задает эти вопросы, предполагая что это это вопросы относящиеся к JavaScript, но не к особенностями HOST среды где он выполняется. Потому, что люди, которые слушают и проходят такие собеседования, потом еще очень долго думают, что это именно JavaScript и он именно такой, но не то, что он тут вообще никаким боком. Когда Вы на собеседовании, например на должность фронтендера, то у Вас должны спрашивать: 1) как работает JavaScript 2) какие API предоставляет HOST среда вашему JS коду 3) особенности применения этих API для формирования фронтенда Пункты 2 и 3 не имеют НИКАКОГО отношения к JS. Но при этом пункты 2 и 3 создают именно то, почему Вы как фронтендер отличается от бекендера. И еще раз подчеркну - JavaScript тут не причем от слова СОВСЕМ.
@@AsForJS формулировка второго пункта опровергает тот факт, что он не имеет *НИКАКОГО* отношения к JS. Агент, выполняющий код, взаимодействует с хостом. Взаимодействие есть отношение. Вопрос про цикл событий можно задать по-разному. "Расскажите про цикл событий в javascript" - некорректный вопрос, достойный копья. "Расскажите про принцип работы event loop в браузере" - вполне себе адекватный вопрос, который можно и нужно задавать.
Потому говорить надо сначала о том, что: Вы хотите услышать тот ответ который считаете правильным, или тот ответ который отвечает спецификации языка JS Я всегда подчеркиваю - если Вас не взяли в компанию, где не захотели слушать Ваши аргументы, а Вы опираетесь на спецификацию - то возможно это для Вас к лучшему. Потому, что туда, куда Вас возьмут, живут люди, которые знают что они делают. А значит Вы там сможете дорасти до чего-то большего чем раб на галере.
Насколько я понял, под хост средой имеется ввиду - браузер, он как бы является хостом для нашего кода Js, также хост среда(бразуер) предоставляет некие внешние api которые мы можем использовать - например DOM-дерево. Runtime - это этапы жизненного цикла кода, но тут я могу ошибаться, я недавно начал увлекаться этим. Было бы очень круто если бы меня подправил кто по умнее)
5:22 дальше можно не смотреть. Это не просто бесполезное видео, ЭТО ВРЕДНОЕ ВИДЕО, если вы будете на собесах отвечать "копье" про работу можно забыть в принципе )).
Таймкоды:
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 это часть движка или браузера
[...] На стадии расшифровки
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
Очень интересный выпуск, огромная благодарность!!! таких авторов как Мурыч, днём с огнем не сыщешь, а тут целый канал с множеством выпусков, моё признание!
До речі, дуже гарна українська на 1:42:00. Набагато краще ніж на перших стрімах українською. Респект!
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.
Спасибо за выпуск!
Про это дополнительно сделана запись ruclips.net/video/MxL04wXIyBQ/видео.html
Там и обьясняется появление таких уверенных речей про 4мс
смотрим видос и идем клепать формы
сложное сделать сложным особого ума не надо.
сложное сделать простым - это искусство.
Спасибо!
дякую за корисну інфу 🎉 💪🇺🇦
Лайк не глядя.
Мурич, як я зрозумів є 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 спеки і немає ніякої взаємодії з зовнішнім апі? Це щоб забезпечити коректний порядок виконання коду ?
@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"?
Спасибо вам за весьма познавательное видео! Могли бы рассказать, почему вы никогда не используете команду if(), или может у вас уже есть видео, где вы об этом подробно рассказываете? Очень интересно узнать, что и почему лучше использовать вместо if else.
У меня есть предположение касательно тернарного или switch операторов и лучшей читабельности кода, а так же возможно лучшей производительности...
Здравствуйте, спасибо большое за видео! У меня возникло два вопроса:
1. Как связаны между собой task queue / microtask queue и genericJob / promiseJob? Если я правильно поняла, вы в видео мельком упомянули, что из task queue задачи попадают в genericJob, можете немного подробнее, пожалуйста, рассказать об этом
2. Аналогичный вопрос, как связаны между собой очереди и execution context stack? Как задачи из очереди попадают в стек?
02:17:10 - где книжку взять?)
Здравствуйте! Как правильно называются упомянутые уязвимости на 40:45 минуте? Не могу правильно загуглить, чтобы о них подробнее прочитать
Дякую
Все отлично) Но один вопрос - в чем выражается такая нелюбовь к ровным линиям?)) 24:25
По сути работа с промисами это как будто мы напрямую дергаем апи, которое нам предоставляет promiseQueue(microtaskQueue);
👍
Event Loop - интересная тема
Ни х?я ж себе ты задвинул - в начале подумал что за дичь. Но потом втянулся, даже пришлось идти за бутылкой))) И лезть в спецификации чтобы проверить))) Единственное - что-то с микрофоном - слух режет - пипец
43:14 теперь ближе к пониманию почему сейчас браузеры такие прожорливые
Вопросы по event loop задаются на интервью по той причине, что от соискателя требуют выполнение определённых задач, требующих знание работы хост-среды.
Когда человека берут на работу фронтом, например, не предполагается, что он будет только лишь запускать v8 из консоли и читать байт-код. Фронтенд-разработчик обычно пишет интерфейсную часть, которая тесно связана с браузером как средством отображения этого интерфейса.
Вы насколько абсолютно правы, настолько же и ошибаетесь.
Язык JavaScript не имеет никакого отношения к EventLoop. При этом, самостоятельное знание языка JS бессмысленно - потому, что без знаний о HOST среде, применение знаний JS программиста бессмысленны.
Современный JS, для массового его потребителя (изучающего) делится на две большие разницы: это браузер (где EvenLoop выписан согласно стандарту HMTL5) и backEnd илди Node (где EventLoop выписан согласно архитектуре библиотеке libUv).
Как следствие, чрезвычайно важно, чтобы программист, который эксплуатирует свои навыки в определенной области, четко мог дифференцировать - где сам JS, а где особенности той области в которой он оказался.
Если ты оказался в браузере то там есть EvenLoop солгасно стандарту HTML5. Оказался в ноде, то там EvenLoop другой и он согласно левой патяке создателей LibUv. Оказался в китайском чайнике - а там ВООБЩЕ НЕТ EVEN LOOP.
Основная мысль в том, чтобы программист использующий JS как свой основной инструмент для работы, четко диферренцировал - где JS а где оособенности среды.
@@AsForJS собеседование на позицию того же фронта довольно комплексное. Там и HTML, и CSS обсуждается, затрагиваются вопросы тестирования и флоу разработки. Там не только по JS гоняют.
Event Loop хоть и не является частью языка, но всё же тесно с ним связан. Тесно связан относительно других тем, в которых разработчик должен разбираться. Посему вопросы по циклу событий часто находятся рядом с вопросами по JS. На моей практике вопросы по хост-среде задавались после блока вопросов, касающихся конкретно языка JS.
Вопрос по event loop как раз-таки позволяет определить, насколько соискатель понимает разницу между функционалом самого языка и функционалом хост-среды. Поэтому я искренне не понимаю, почему вопросы о цикле событий на собеседованиях должны вызывать желание воткнуть копью в голову собеседующему.
@@Boortwint Да, он безусловно тесно с ним связан тогда, когда Вы работает с HOST средой которая реализует стандарт HTML5. Так и следует грамотно гооворить об этом: вот тут JavaScript, вот тут EventLoop стандарта HTML5, а вот тут мы рыбу заворачиваем.
Копье собеседнику следует воткнуть потому, что собеседник задает эти вопросы, предполагая что это это вопросы относящиеся к JavaScript, но не к особенностями HOST среды где он выполняется.
Потому, что люди, которые слушают и проходят такие собеседования, потом еще очень долго думают, что это именно JavaScript и он именно такой, но не то, что он тут вообще никаким боком.
Когда Вы на собеседовании, например на должность фронтендера, то у Вас должны спрашивать:
1) как работает JavaScript
2) какие API предоставляет HOST среда вашему JS коду
3) особенности применения этих API для формирования фронтенда
Пункты 2 и 3 не имеют НИКАКОГО отношения к JS.
Но при этом пункты 2 и 3 создают именно то, почему Вы как фронтендер отличается от бекендера.
И еще раз подчеркну - JavaScript тут не причем от слова СОВСЕМ.
@@AsForJS формулировка второго пункта опровергает тот факт, что он не имеет *НИКАКОГО* отношения к JS. Агент, выполняющий код, взаимодействует с хостом. Взаимодействие есть отношение.
Вопрос про цикл событий можно задать по-разному.
"Расскажите про цикл событий в javascript" - некорректный вопрос, достойный копья.
"Расскажите про принцип работы event loop в браузере" - вполне себе адекватный вопрос, который можно и нужно задавать.
Карина.jpg
Но за видео пасиб.
Хотелось бы подкаст на тему "Почему typeScript = 💩"
Когда я говорю о "копье" и о том что в JS нет event loop - меня на собеседовании отсеивают :)
Потому говорить надо сначала о том, что:
Вы хотите услышать тот ответ который считаете правильным, или тот ответ который отвечает спецификации языка JS
Я всегда подчеркиваю - если Вас не взяли в компанию, где не захотели слушать Ваши аргументы, а Вы опираетесь на спецификацию - то возможно это для Вас к лучшему.
Потому, что туда, куда Вас возьмут, живут люди, которые знают что они делают. А значит Вы там сможете дорасти до чего-то большего чем раб на галере.
Охренеть))))! Только оставил комент про копье, не думал что кто-то реально будет так отвечать.
Мурыч, что такое хоз среда о которой ты постоянно говоришь?
Host
Насколько я понял, под хост средой имеется ввиду - браузер, он как бы является хостом для нашего кода Js, также хост среда(бразуер) предоставляет некие внешние api которые мы можем использовать - например DOM-дерево. Runtime - это этапы жизненного цикла кода, но тут я могу ошибаться, я недавно начал увлекаться этим. Было бы очень круто если бы меня подправил кто по умнее)
Runtime это движок v8, который крутится в хост среде и исполняет js код.
Это бесценная информация ...
5:22 дальше можно не смотреть. Это не просто бесполезное видео, ЭТО ВРЕДНОЕ ВИДЕО, если вы будете на собесах отвечать "копье" про работу можно забыть в принципе )).
Вам не приходило копьё?😂
Меня так на сеньора взяли 😂