intermediate
Buffers
Работайте с binary data, encodings, typed-array behavior, byte length, file/network payloads и memory ownership.
Buffer — тип бинарных данных фиксированной длины в Node; память вне кучи V8 (с пулом для мелких выделений). Связывает файловый I/O, сокеты, crypto и typed arrays.
const buf = Buffer.from('hello', 'utf8');
console.log(buf.length); // 5 байт, не длина строки для не-ASCII
console.log(buf.toString('hex')); // 68656c6c6f
const view = new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);
Кодировка важна: по умолчанию `utf8`; `base64` и `hex` — для передачи; один символ ≠ один байт. `Buffer.alloc(n)` обнуляет; `Buffer.allocUnsafe(n)` может содержать старые данные — быстрее, но нужно перезаписать перед отдачей наружу.
На интервью: байтовая длина vs длина строки; Buffer vs Uint8Array; почему мутация slice затрагивает родителя без копии.
Типовые ошибки: конкатенация через `+=` со строками; `allocUnsafe` для секретов; `buffer.length` как число символов Unicode.
Компромисс — между простотой, производительностью, безопасностью и эксплуатацией: назовите, что оптимизировали и какую цену приняли.
Чеклист:
- Знайте `from`, `alloc`, `concat`, `subarray` vs `slice`.
- Указывайте encoding в `toString` и `from`.
- Для больших бинарных данных — streams.
- Обнуляйте буферы с чувствительными данными, где возможно.