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

Профилирование и оптимизация

Здесь мало узнать знакомое ключевое слово. Нужно проследить срок жизни данных, порядок вызовов, обработку ошибок и договор между модулями. Тест содержит 30 вопросов, включая 6 фрагментов кода, и разбирает темы: «Профилирование процессора», «Аллокации», «Копирование строк», «Выбор структуры», «Разбор отказов» и «Восстановление системы».

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: В каждом вопросе выберите один ответ из пяти. На весь тест отведено 85 минут. Код лучше сначала разобрать вручную: правильный вариант должен объяснять механизм, а не только совпадать с одним запуском.
Вопрос 1 из 30
В `ProfileTarget` сначала встречается `for I := 1 to 10000000 do Inc(Total, I mod 17);`, а затем `Writeln(Watch.ElapsedMilliseconds, ' ', Total);`. Какой вывод можно сделать только после чтения обеих строк?
PascalDelphi / Pascal · Профилирование процессора
// Определите реальную гарантию в ProfileTarget.
program ProfileTarget;
uses System.Diagnostics;
var Watch: TStopwatch; I: Integer; Total: Int64;
begin
  Watch := TStopwatch.StartNew;
  for I := 1 to 10000000 do Inc(Total, I mod 17);
  Writeln(Watch.ElapsedMilliseconds, ' ', Total);
end.
Вопрос 2 из 30
Две реализации темы «Аллокации» совпадают на обычном примере. Какое различие всё же меняет их договор? Сопоставьте обычный путь и изменение состояния.
Вопрос 3 из 30
В практическом сценарии по теме «Копирование строк» меняются входные данные и порядок действий. Какой вывод остаётся корректным? Сопоставьте обычный путь и изменение состояния.
Вопрос 4 из 30
Две реализации темы «Выбор структуры» совпадают на обычном примере. Какое различие всё же меняет их договор? Сопоставьте обычный путь и изменение состояния.
Вопрос 5 из 30
В теме «Разбор отказов» есть две независимые границы поведения. Какой внешний договор не смешивает их в одно расплывчатое правило?
Вопрос 6 из 30
Как переменная окружения влияет на следующий запуск `SafeRollback`?
PascalDelphi / Pascal · Восстановление системы
// Проследите фактическое поведение SafeRollback.
program SafeRollback;
uses System.SysUtils;
var UseNewEngine: Boolean;
begin
  UseNewEngine := GetEnvironmentVariable('USE_NEW_ENGINE') = '1';
  try
    if UseNewEngine then Writeln('new') else Writeln('stable');
  except
    Writeln('fallback');
  end;
end.
Вопрос 7 из 30
Обычный пример по теме «Профилирование процессора» проходит, но после изменения состояния возникает дефект. Какое условие объясняет его источник? Сопоставьте обычный путь и изменение состояния.
Вопрос 8 из 30
Реализацию темы «Аллокации» заменяют без изменения интерфейса. Какое наблюдаемое свойство обязано сохраниться? Сопоставьте обычный путь и изменение состояния.
Вопрос 9 из 30
Обычный пример по теме «Копирование строк» проходит, но после изменения состояния возникает дефект. Какое условие объясняет его источник? Сопоставьте обычный путь и изменение состояния.
Вопрос 10 из 30
В теме «Выбор структуры» есть две независимые границы поведения. Какой внешний договор не смешивает их в одно расплывчатое правило?
Вопрос 11 из 30
В `OptimizedCrash` сначала встречается `New(P); P^ := 7; Dispose(P); Result := P^;`, а затем `begin Writeln(ReadAfterFree); end.`. Какое наблюдаемое следствие относится именно к сценарию OptimizedCrash?
PascalDelphi / Pascal · Разбор отказов
// Определите реальную гарантию в OptimizedCrash.
program OptimizedCrash;
{$O+}
type
  PInteger = ^Integer;
function ReadAfterFree: Integer;
var P: PInteger;
begin
  New(P); P^ := 7; Dispose(P); Result := P^;
end;
begin Writeln(ReadAfterFree); end.
Вопрос 12 из 30
В практическом сценарии по теме «Восстановление системы» меняются входные данные и порядок действий. Какой вывод остаётся корректным? Сопоставьте обычный путь и изменение состояния.
Вопрос 13 из 30
Правка по теме «Профилирование процессора» должна сохранить полезное поведение и убрать риск на соседнем сценарии. Какое требование она обязана выполнить?
Вопрос 14 из 30
Какой сценарий по теме «Аллокации» отличит исправную реализацию от версии со скрытым дефектом? Сопоставьте обычный путь и изменение состояния.
Вопрос 15 из 30
В теме «Копирование строк» есть две независимые границы поведения. Какой внешний договор не смешивает их в одно расплывчатое правило?
Вопрос 16 из 30
Две версии `StructureChoice` сохраняют порядок `for I := 1 to 100000 do` → `if List.IndexOf(I) >= 0 then Map[I] := I;`. Какое свойство останется общим для обеих?
PascalDelphi / Pascal · Выбор структуры
// Сравнивайте стоимость операций на созданных и заполненных структурах.
program StructureChoice;
{$APPTYPE CONSOLE}
uses System.Generics.Collections;
var
  List: TList<Integer>;
  Map: TDictionary<Integer, Integer>;
  I: Integer;
begin
  List := TList<Integer>.Create;
  Map := TDictionary<Integer, Integer>.Create;
  try
    for I := 1 to 1000 do
      List.Add(I * 2);
    for I := 1 to 100000 do
      if List.IndexOf(I) >= 0 then
        Map.AddOrSetValue(I, I);
    Writeln(Map.Count);
  finally
    Map.Free;
    List.Free;
  end;
end.
Вопрос 17 из 30
Реализацию темы «Разбор отказов» заменяют без изменения интерфейса. Какое наблюдаемое свойство обязано сохраниться? Сопоставьте обычный путь и изменение состояния.
Вопрос 18 из 30
Обычный пример по теме «Восстановление системы» проходит, но после изменения состояния возникает дефект. Какое условие объясняет его источник? Сопоставьте обычный путь и изменение состояния.
Вопрос 19 из 30
Какое свойство темы «Профилирование процессора» становится решающим на граничном входе или при другом порядке действий? Сопоставьте обычный путь и изменение состояния.
Вопрос 20 из 30
Для темы «Аллокации» обычный путь и граничный путь дают разные риски. Какой вывод учитывает оба, не подменяя один другим?
Вопрос 21 из 30
Какой граничный результат следует ожидать в `StringBuilding`, когда после `for I := 1 to 50000 do` выполняется `Writeln(Length(S));`?
PascalDelphi / Pascal · Копирование строк
// Определите реальную гарантию в StringBuilding.
program StringBuilding;
uses System.SysUtils;
var I: Integer; S: string;
begin
  S := '';
  for I := 1 to 50000 do
    S := S + IntToStr(I) + ',';
  Writeln(Length(S));
end.
Вопрос 22 из 30
Правка по теме «Выбор структуры» должна сохранить полезное поведение и убрать риск на соседнем сценарии. Какое требование она обязана выполнить?
Вопрос 23 из 30
Модуль, использующий тему «Разбор отказов», передают другой команде. Какую ответственность нужно закрепить во внешнем договоре? Сопоставьте обычный путь и изменение состояния.
Вопрос 24 из 30
Правка по теме «Восстановление системы» должна сохранить полезное поведение и убрать риск на соседнем сценарии. Какое требование она обязана выполнить?
Вопрос 25 из 30
В теме «Профилирование процессора» есть две независимые границы поведения. Какой внешний договор не смешивает их в одно расплывчатое правило?
Вопрос 26 из 30
Какое наблюдение должен зафиксировать тест именно для последовательности `for I := 1 to 100000 do` → `try Temp.Add(I); finally Temp.Free; end;` в `AllocationHotspot`?
PascalDelphi / Pascal · Аллокации
// Отделите правило языка от удачного запуска AllocationHotspot.
program AllocationHotspot;
uses System.Generics.Collections;
var I: Integer; Temp: TList<Integer>;
begin
  for I := 1 to 100000 do
  begin
    Temp := TList<Integer>.Create;
    try Temp.Add(I); finally Temp.Free; end;
  end;
end.
Вопрос 27 из 30
Модуль, использующий тему «Копирование строк», передают другой команде. Какую ответственность нужно закрепить во внешнем договоре? Сопоставьте обычный путь и изменение состояния.
Вопрос 28 из 30
Какое свойство темы «Выбор структуры» становится решающим на граничном входе или при другом порядке действий? Сопоставьте обычный путь и изменение состояния.
Вопрос 29 из 30
Модуль, использующий тему «Разбор отказов», передают другой команде. Какую ответственность нужно закрепить во внешнем договоре? Сопоставьте обычный путь и изменение состояния. Рассмотрите вариант, где меняется состояние, но внешний интерфейс остаётся прежним.
Вопрос 30 из 30
В теме «Восстановление системы» есть две независимые границы поведения. Какой внешний договор не смешивает их в одно расплывчатое правило?

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

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

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

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