💡 JavaScript собеседование: вопросы по асинхронному программированию
Vložit
- čas přidán 27. 06. 2024
- 🚀 Фрагмент семинара из курсов Node.js 2024 и Async 2024:
👉 Вопросов на собесы по асинхронному программированию: github.com/tshemsedinov/Async...
👉 Вопросов на собесы по ноде: github.com/tshemsedinov/NodeJ...
👉 Node.js 2024 описание курса: github.com/HowProgrammingWork...
👉 Открытый курс по Node.js: github.com/HowProgrammingWork...
👉 Описание курса Async 2024: github.com/HowProgrammingWork...
👉 Старый курс по асинхронности: github.com/HowProgrammingWork...
👉 Оглавление всех открытых лекций: github.com/HowProgrammingWork...
👉 Github автора: github.com/tshemsedinov
Привет, Тимур, очень уважаю тебя как эксперта в 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(или подобную технологию) отдавать статус код. Такой вариант собеседующему сильно не понравился.
Найти какой-либо ответ на это я найти не смог. Может ты или кто другой подскажет, какой ответ от меня ожидали?
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
А где посмотреть первые 50? ((
Под видео ссылка
@@antergonza6476 а разбор на курсе мы делали на той неделе
что вы обозначаете "контрактом"?
Контракт, это то, интерфейс в виде тайпинга или спецификации, например jsdoc или .d.ts + поведение, т.е. это не только имена и типы, но и то, что невозможно описать типами, т.е. асинхронный аспект или последовательность вызовов или изменений. Пример: Promise, shared arrays, fetch. У меня есть отдельная лекция czcams.com/video/K5_kSUvbGEQ/video.html
Воркеры не являются частью исполняемой программы JS, поэтому нет никакой смеси с многопоточностью. Это однопоточное приложение со своей спецификой отложенного исполнения кода, который мы по привычке называем асинхронным. Тут даже нет классической схемы асинхронного запуска кода, только вызов WebAPI и эмуляция через колбеки.
Я прошел собеседование, учитель?
Вы про воркеры в тред-пуле или воркер-треды? Какие признаки бы можно было предъявить, чтобы они были частью исполняемой js-прогоаммы? Кстати очень неточный термин, исполняемая js-программа, что это?
JavaScrip в названии ... Опечатка или великий заложенный смысл?
Поправил, спасибо