💡 Инструкция: В каждом вопросе выберите один ответ из пяти. На весь тест отведено 85 минут. Код лучше сначала разобрать вручную: правильный вариант должен объяснять механизм, а не только совпадать с одним запуском.
Вопрос 5 из 30
В теме «Проверка корректности» есть две независимые границы поведения. Какой внешний договор не смешивает их в одно расплывчатое правило?
Первую границу заменяют предположением «Контрольная сумма не нужна, если длина тела совпала с заголовком», сохраняя только вторую.
Во внешний договор включают только второе свойство: проверяют статус, тип содержимого, длину или контрольную сумму и предметную схему до использования данных; первое считают внутренней деталью.
Внешний договор должен раздельно учитывать, что успешный транспорт ещё не означает корректный ответ, и что проверяют статус, тип содержимого, длину или контрольную сумму и предметную схему до использования данных.
Обе границы заменяют предположениями «Контрольная сумма не нужна, если длина тела совпала с заголовком» и «Контрольная сумма не нужна, если длина тела совпала с заголовком».
Во внешний договор включают только первое свойство: успешный транспорт ещё не означает корректный ответ; второе оставляют неявным.
Вопрос 6 из 30
Какое условие необходимо, чтобы повтор `POST` в `RetryPolicy` не создавал второй платёж?
Pascal Delphi / Pascal · Устойчивость к сбоям Копировать
// Проследите фактическое поведение RetryPolicy.
program RetryPolicy;
uses System.Net.HttpClient, System.Classes, System.SysUtils;
procedure SendPayment(Client: THTTPClient; const IdempotencyKey: string);
var
Attempt: Integer;
Payload: TStringStream;
begin
Payload := TStringStream.Create('{"amount":100}', TEncoding.UTF8);
try
for Attempt := 1 to 3 do
try
Payload.Position := 0;
Client.CustomHeaders['Idempotency-Key'] := IdempotencyKey;
Client.Post('https://example.com/payments', Payload);
Exit;
except
if Attempt = 3 then raise;
Sleep(Attempt * 500);
end;
finally
Payload.Free;
end;
end;
begin end.
Задержка между попытками сама предотвращает повторный побочный эффект на сервере.
Любое исключение от `Post` означает, что сервер не начал обработку, поэтому запрос можно повторять.
Сервер должен поддерживать этот ключ идемпотентности, а повторять следует только ошибки, признанные временными политикой клиента.
HTTP-клиент сравнивает тела повторных `POST` и автоматически удаляет дубли.
Для каждой попытки нужен новый ключ, иначе сервер отклонит повтор как ошибку протокола.