Зачем две проверки при пакетной обработке

Первая проверка отправляет полные пакеты во время чтения, вторая — последний неполный пакет. Без второй остаток потеряется, если количество элементов не кратно MaxItems.

Короткий ответ

Что ответить на собеседовании

Первая проверка отправляет полные пакеты во время чтения, вторая — последний неполный пакет. Без второй остаток потеряется, если количество элементов не кратно MaxItems.

Подробный разбор

Ответ с пояснениями

Условие

Код копит элементы в buf, отправляет его при len(buf)==MaxItems, а после окончания входа дополнительно проверяет len(buf)>0 и отправляет остаток. Почему одной проверки недостаточно?

Ответ

Первая проверка отправляет полные пакеты во время чтения, вторая — последний неполный пакет. Без второй остаток потеряется, если количество элементов не кратно MaxItems.

Для 23 элементов и лимита 10 нужны пакеты 10, 10 и 3. После отправки сбросьте длину либо выделите новый буфер, учитывая владение данными: асинхронный получатель не должен видеть последующую перезапись того же массива. При нулевом остатке пустой пакет не отправляется.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее