JS JavaScript  ·  30 вопросов  ·  ~85 мин  ·  ⏱ Таймер 25:00  ·  Сложный  · 

Потоки и буферы Node.js

Профессиональный тест о Buffer, readable/writable streams, обратном давлении и pipeline. Нужно понимать границы UTF-8, режимы потока, событие drain, корректное завершение и последствия смешения разных способов потребления.

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. В тесте 30 вопросов и 85 минут; код лучше читать построчно, не полагаясь на первое впечатление. После завершения откроются общий процент, 6 тематических шкал и объяснение каждого решения.
Вопрос 1 из 30
Почему Buffer.byteLength("🙂") не равен "🙂".length?
JavaScript
console.log("🙂".length);
console.log(Buffer.byteLength("🙂", "utf8"));
Вопрос 2 из 30
Изменится ли исходный buffer после записи в subarray?
JavaScript
const source = Buffer.from([1,2,3]);
const view = source.subarray(0, 2);
view[0] = 9;
console.log(source);
Вопрос 3 из 30
Когда Buffer.allocUnsafe(1024) допустим?
JavaScript
function makeBuffer(source) {
  const buf = Buffer.allocUnsafe(1024);
  source.copy(buf, 0, 0, source.length);
  return buf; // опасно, если source короче 1024
}
Вопрос 4 из 30
Что произойдёт при Buffer.from("ff", "hex")?
Вопрос 5 из 30
Почему buf.toString("utf8") на произвольной границе chunks может дать заменяющий символ?
Вопрос 6 из 30
Что означает push(null) в пользовательской Readable?
JavaScript
class Numbers extends Readable {
  _read() {
    if (this.n > 3) this.push(null);
    else this.push(String(this.n++));
  }
}
Вопрос 7 из 30
Почему смешение on("data") и for await...of опасно?
JavaScript
stream.on("data", chunk => first(chunk));
for await (const chunk of stream) second(chunk);
Вопрос 8 из 30
Что делает добавление data listener?
JavaScript
readable.on("data", chunk => consume(chunk));
Вопрос 9 из 30
Что даёт readable.setEncoding("utf8")?
Вопрос 10 из 30
Зачем objectMode?
Вопрос 11 из 30
Что означает writable.write(chunk) === false?
JavaScript
if (!destination.write(chunk)) {
  await once(destination, "drain");
}
Вопрос 12 из 30
Почему этот цикл может раздувать память?
JavaScript
for (const chunk of chunks) {
  writable.write(chunk);
}
writable.end();
Вопрос 13 из 30
Является ли highWaterMark строгим максимальным объёмом памяти?
JavaScript
const writable = createWriteStream(path, { highWaterMark: 64 * 1024 });
Вопрос 14 из 30
Как pipe обычно помогает с backpressure?
JavaScriptКонвейер потоков
readable.pipe(transform).pipe(writable);
Вопрос 15 из 30
Что такое backpressure в objectMode?
Вопрос 16 из 30
Почему pipeline предпочтительнее цепочки a.pipe(b).pipe(c) для критического кода?
JavaScript
import { pipeline } from "node:stream/promises";
await pipeline(source, gunzip, parser, destination);
Вопрос 17 из 30
Что неверно в _transform?
JavaScript
class Converter extends Transform {
  _transform(chunk, encoding, callback) {
    this.push(convert(chunk));
    callback();
    callback();
  }
}
Вопрос 18 из 30
Как передать преобразованный chunk без this.push?
JavaScript
class Uppercase extends Transform {
  _transform(chunk, encoding, callback) {
    const output = chunk.toString().toUpperCase();
    // Как передать output дальше без this.push?
  }
}
Вопрос 19 из 30
Как отменить pipeline по внешнему решению?
Вопрос 20 из 30
Какой поток выполняет и чтение, и запись, преобразуя chunks?
Вопрос 21 из 30
Почему процесс падает на error у одиночного stream?
JavaScript
const stream = createReadStream("missing.txt");
stream.on("data", consume);
Вопрос 22 из 30
Чем end у Readable отличается от finish у Writable?
JavaScript
readable.on("end", onReadComplete);
writable.on("finish", onWriteComplete);
Вопрос 23 из 30
Что означает ERR_STREAM_PREMATURE_CLOSE?
JavaScript
try {
  await pipeline(source, transform, destination);
} catch (error) {
  console.error(error.code, error.cause);
}
Вопрос 24 из 30
Как проверить backpressure в тесте?
Вопрос 25 из 30
Почему событие close не доказывает успешную обработку всех данных?
Вопрос 26 из 30
Почему data += chunk может стать дорогим на большом тексте?
JavaScript
let data = "";
for await (const chunk of readable) {
  data += chunk;
}
Вопрос 27 из 30
Когда readFile разумнее stream?
Вопрос 28 из 30
Как выбрать highWaterMark?
JavaScript
createReadStream(path, { highWaterMark: measuredChunkSize });
Вопрос 29 из 30
Почему слишком мелкие chunks снижают throughput?
Вопрос 30 из 30
Что важно при fan-out одного потока к двум медленным потребителям?

Ответьте на все 30 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу