- Сколько потоков в NodeJS.
- Чем параллелизм отличается от асинхронности?
- Можно ли получить рейс кондишн при ассинхронности? Напиши пример кода.
- Что такое стримы, зачем они нужны? Какие бывают?
- Что такое back pressure?
- Для чего нужен модуль cluster, какую проблему он решает
- Каую проблему решают async hooks
- Как бороться с блокировками event loop?
- Как работает сборщик мусора? О чем говорит слабая гипотеза о поколениях?
- Что скажешь об middleware паттернах в express, какие есть достоинства и недостатки
Что такое DI, за счет чего он реализован в фреймворках типа NestJS
Задачи на код
import fs from 'fs';
const stream = fs.createReadStream('./sample.txt');
stream.on('data', () => console.log(1));
setTimeout(() => console.log(2));
for (let i = 0; i < 1000000; i++) { // 10s
/*code*/
}
console.log(3);
// What order of messages are expected to be printed to the console? Why?
const fs = require('fs').promises;
function write(){
return fs.mkdir('./tmp').then(function(){
fs.writeFile('./tmp/foo.txt', 'Hello World');
}).catch((err) => {
/// handle error
console.log(err);
});
}
write();
function x() {
queueMicrotask(x);
}
x();
Promise.reject("a")
.catch((p) => p + "b")
.catch((p) => p + "c")
.then((p) => p + "d")
.finally((p) => p + "e")
.then((p) => console.log(p));
Как защищаться от SQL injection Что такое XSS? Как защищаться? Что такое CSRF? Как можно защищаться?
- Кто должен определять нефункциональные требования?
- Что такое аттрибут качества, с какими из них ты сталкивался в реальной жизни?
- Что такое внешние и внутренние нефункциональные требования?
- Что если продукт менеджер просит оптимизировать все аттрибуты качества
- Столпы обсервабилити
- Что такое OpenTelemetry, зачем нужен, из чего состоит
Представьте, что у вас есть высоконагруженное приложение, которое начинает тормозить при увеличении числа пользователей. Как вы будете диагностировать проблему? Примерный ответ: Сначала я соберу метрики с помощью системы мониторинга, например, Prometheus, чтобы проверить использование CPU, памяти и дисков, а также время отклика API. Затем проанализирую логи через ELK Stack, чтобы найти ошибки или узкие места. Далее использую APM-инструмент, например, New Relic, для профилирования запросов и выявления медленных эндпоинтов. Если проблема в базе данных, проверю планы выполнения запросов (EXPLAIN в PostgreSQL) и наличие индексов. Например, в одном случае я обнаружил, что N+1 запросы к базе тормозили API, и решил проблему с помощью eager loading. Если нагрузка растет из-за пикового трафика, рассмотрю кэширование (Redis) или масштабирование (Kubernetes). Нагрузочное тестирование с Gatling поможет подтвердить гипотезы. После внедрения изменений я отслеживаю метрики, чтобы убедиться в решении проблемы.