version: 1.0
title: "Техническое интервью для Golang разработчика"
description: "Вопросы для оценки навыков Golang и общих компетенций"
before_starting:
  - "Представьтесь и расскажите о себе"
  - "Рассказать про план собеседования"
  - "Рассказать про запись экрана"
  - "Рассказать, что буду писать заметки для HR"
  - "Рассказать, что нет цели завалить, а только узнать уровень знаний"
  - "Спросить кратко про опыт работы"

topics:
  - name: "Базовые навыки Computer Science"
    questions:
      - question: "Какие алгоритмы и структуры данных знаете?"
        hints:
          - text: "Уточнить про алгоритмы сортировки и поиска, quicksort, binary search"
            help:
              - "quicksort - это алгоритм сортировки, который использует стратегию разделяй и властвуй"
              - "binary search - это алгоритм поиска, который использует стратегию деления пополам"
          - text: "Уточнить про структуры данных, хеш-таблицы, деревья, графы, кучи, связанные списки"
          - text: "Спросить про Big O Notation, уточнить понимание"
            help:
              - "O(n), O(log n), O(1)"
        max_score: 5
        time: 120
      - question: "Что такое динамическое программирование? Приведите пример."
        hints:
          - text: "Спросить про алгоритмы, например Фибоначчи"
            help:
              - "Метод решения сложных задач путём разбиения их на более простые подзадачи."
        max_score: 8
        time: 120
      - question: "Какие принципы ООП знаете?"
        hints:
          - text: "Уточнить понимание принципов ООП"
            help:
              - "инкапсуляции, полиморфизма, наследования, инверсии зависимостей"
          - text: "Обсудить преимущества и недостатки использования принципов ООП"
          - text: "Спросить про SOLID"
            help:
              - "Single Responsibility Principle (SRP)"
              - "Open/Closed Principle (OCP)"
              - "Liskov Substitution Principle (LSP)"
              - "Interface Segregation Principle (ISP)"
              - "Dependency Inversion Principle (DIP)"
        max_score: 8
        time: 120
      - question: "Какие протоколы вы знаете?"
        hints:
          - text: "Спросить про HTTP, преимущества, недостатки"
            help:
              - "POST /path HTTP/1.1"
              - "GET, POST, PUT, DELETE, OPTIONS, HEAD, PATCH, CONNECT, TRACE"
          - text: "Спросить про TCP/IP, слои протокола и их функции (TCP, UDP, IP)"
            help:
              - "TCP - надежный потоковый протокол"
              - "UDP - ненадежный датаграммный протокол"
              - "IP - сетевой протокол для маршрутизации пакетов"
              - "Socket - абстракция для обмена данными между приложениями"
              - "Пакет - единица данных, передаваемая по сети"
          - text: "Спросить про DNS"
          - text: "Спросить про SSL/TLS"
          - text: "Спросить про WebSocket"
          - text: "Спросить про REST"
          - text: "Спросить про GraphQL"
          - text: "Спросить про HTTP"
          - text: "Спросить как работает DNS"
          - text: "Спросить как работает WebSocket"
        max_score: 5
        time: 240

  - name: "Технические навыки - Golang"
    questions:
      - question: "Какие особенности Golang делают его подходящим для бэкенд-разработки?"
        hints:
          - text: "статическую типизацию, что позволяет обнаруживать ошибки на этапе компиляции"
          - text: "встроенные инструменты для работы с сетью и асинхронностью"
          - text: "простой и эффективный синтаксис"
        max_score: 9
        time: 120
      - question: "Расскажите про типы в Golang"
        hints:
          - text: "Спросить про примитивные типы"
            help:
              - "bool, string, int, float64, complex128"
          - text: "Спросить про сложные типы"
            help:
              - "array, slice, map, struct, func, chan, interface"
          - text: "Уточнить понимание работы с числами и строками"
        max_score: 5
        time: 120
      - question: "Как передаются данные в функции?"
        hints:
          - text: "Уточнить понимание работы с примитивными типами"
          - text: "Спросить про передачу слайсов и мап"
        max_score: 8
        time: 120
      - question: "Когда используется new, а когда make?"
        hints:
          - text: "Уточнить какое главное отличие"
            help:
              - "new - выделяет память для типа и возвращает указатель на нулевое значение этого типа, можно использовать для получения указателя на нулевое значение типа."
              - "make - выделяет память и инициализирует сложные типы данных: slice, map и channel. Возвращает сам тип (не указатель)."
        max_score: 9
        time: 120
      - question: "Как работает defer?"
        hints:
          - text: "Уточнить где можно использовать"
            help:
              - "откладывает выполнение функции до окончания текущей функции"
              - "может использоваться для закрытия файлов, баз данных и т.д."
          - text: "Спросить про область видимости"
        max_score: 9
        time: 120
      - question: "Что такое channels и как они используются для синхронизации?"
        hints:
          - text: "Буферизированные, Небуферизированные"
            help:
              - "блокирует отправку/получение до готовности"
          - text: "Использование select для мультиплексирования каналов"
          - text: "Спросить про отправку в закрытый канал"
            help:
              - "будет вызвана паника (send on closed channel)"
          - text: "Спросить про получение из закрытого канала"
            help:
              - "eсли есть данные вернет их, если нету то zero value, можно проверить через _, ok := chan"
          - text: "Спросить про закрытие закрытого канала"
            help:
              - "будет вызвана паника (close of closed channel)"
          - text: "Задачка. Есть не буфферизированный канал и никто не читает, что будет?"
            help:
              - "будет паника: all goroutines are asleep - deadlock!"
        max_score: 10
        time: 240
      - question: "Как select выбирает case, если несколько каналов готовы?  Как работает select с channels?"
        hints:
          - text: "выбирает случайный канал из тех, что готовы"
          - text: "работает с каналами, которые готовы к чтению или записи"
        max_score: 10
        time: 120
      - question: "Что такое mutex?"
        hints:
          - text: "mutex - это механизм синхронизации доступа к общим ресурсам"
          - text: "mutex - это блокировка, которая позволяет только одному потоку (goroutine) выполнить критическую секцию кода"
        max_score: 10
        time: 120
      - question: "Копирование мьютекса, какие последствия?"
        hints:
          - text: "не допускается, так как это может привести к неопределенному поведению."
          - text: "может привести к ошибкам при доступе к общему ресурсу."
        max_score: 10
        time: 120
      - question: "Какой тип мьютекса лучше использовать для большого количества чтения и малого количества записи?"
        hints:
          - text: "для чтения и записи лучше использовать RWMutex."
        max_score: 10
        time: 120
      - question: "Когда лучше использовать channels или mutex?"
        hints:
          - text: "channels подходят для передачи данных между горутинами"
          - text: "mutex подходят для синхронизации доступа к общим ресурсам"
        max_score: 10
        time: 120
      - question: "Как работают goroutines и чем они отличаются от потоков?"
        hints:
          - text: "Спросить про планировщик"
            help:
              - "goroutines - это легковесные потоки, управляемые рантаймом; стек ~2 КБ; планир. рантаймом, могут выполнятся на одном потоке (M:N модель, горутины → потоки ОС)"
              - "go использует модель M:N, где: M — это горутины (goroutines).  N — это потоки ОС (OS threads)."
              - "работа планировщика (Scheduler): локальная очередь (обычно 256 горутин); глобальная очередь: используется для балансировки нагрузки между процессорами (P);"
              - "netpoller - это компонент, который позволяет goroutines ожидать событий ввода-вывода (I/O) без блокировки основного потока выполнения."
          - text: "Спросить про work-stealing"
            help:
              - 'Work-stealing: Если и локальная, и глобальная очереди пусты, P может "украсть" горутины из очереди другого P'
          - text: "Спросить про потоки ОС"
            help:
              - "Потоки ОС (операционной системы) — это минимальные единицы выполнения, которые планируются и управляются ядром операционной системы. Они являются частью процесса и позволяют выполнять несколько задач параллельно или псевдопараллельно (на многопроцессорных системах — действительно параллельно)."
        max_score: 10
        time: 240
      - question: "Что такое data race condition и как его избежать?"
        hints:
          - text: "Data Race condition — это ситуация, когда два или более горутин одновременно изменяют общую переменную или ресурс. Чтобы избежать data race condition, можно использовать синхронизацию, например, мьютексы (mutex) или каналы (channels)."
        max_score: 10
        time: 120
      - question: "Как отлаживать deadlocks и утечки памяти?"
        hints:
          - text: "Deadlock — это ситуация, когда два или более горутин блокируют друг друга."
          - text: "Memory leak — это ситуация, когда память не освобождается после использования."
          - text: "Для отладки deadlocks и утечек памяти можно использовать инструменты, такие как pprof и go tool trace."
        max_score: 10
        time: 120
      - question: "Чем отличается slice от array?"
        hints:
          - text: "Спросить про slice, что это и как он работает"
            help:
              - "slice - это динамический массив, который может изменять размер во время выполнения программы."
              - "array - это статический массив, который имеет фиксированный размер и не может изменяться во время выполнения программы."
          - text: "Спросить про append"
            help:
              - "релокация slice происходит, когда размер slice достигает его максимального размера и необходимо выделить новый блок памяти для хранения элементов."
              - "append добавляет элемент в конец"
          - text: "Спросить про изменение элемента в под-слайсе (slicing)"
            help:
              - "Если изменить элемент в под-слайсе, то изменится элемент в исходном слайсе, так как они ссылаются на один массив."
          - text: "Спросить по утечки памяти при slicing"
            help:
              - "Использовать функцию copy для создания копии слайса, чтобы избежать ссылки на один массив."
        max_score: 10
        time: 120
      - question: "Что такое и как работают map в Go?"
        hints:
          - text: "Спросить про типы в ключах"
            help:
              - "ключи должны сравнимыми типами (нельзя struct, slice, map, func). Можно interface{} пока он сравниваемый тип."
          - text: "Спросить про хеш-таблицу в Go."
          - text: "Спросить про новую реализацию хеш-таблицы(SwissTable) в Go."
          - text: "Спросить про рехеширование"
            help:
              - "Рехеширование происходит, когда количество элементов в map превышает его размер (больше 6.5 в среднем)."
              - "При рехешировании все элементы пересчитываются и заносятся в новый массив с новым размером. Это происходит постепенно."
          - text: "Спросить про конкурентный доступ"
            help:
              - "map в Go не является потокобезопасной структурой данных."
              - "для безопасного доступа к map в нескольких горутинах необходимо использовать мьютекс или другие механизмы синхронизации."
          - text: "Спросить про порядок итерации по map"
            help:
              - "неупорядоченного хранения элементов."
          - text: "Спросить про указатель на адрес жлемента в map"
            help:
              - "go запрещает брать адрес элемента map. Причина в том, что Go динамически перераспределяет память для map."
              - "когда в map добавляются новые элементы, он может перераспределить бакеты в памяти, и старые адреса станут невалидными."
        max_score: 10
        time: 120
      - question: "Что такое interface и зачем он нужен?"
        hints:
          - text: "Interface - это тип данных, который определяет набор методов, которые должны быть реализованы в типе данных."
          - text: "Интерфейсы позволяют создавать абстрактные типы данных, которые могут быть реализованы в разных типах данных."
          - text: "Спросить про пустой интерфейс"
          - text: "Спросить про вызов методов на nil-указателях в интерфейсах"
            help:
              - "Да, можно вызывать методы на nil-указателях в интерфейсах."
              - "Если интерфейс содержит методы, которые могут быть вызваны на nil-указателях, то nil-указатель будет считаться реализованным интерфейсом."
              - 'Позволяет реализовать "нулевое поведение" (nil-object pattern).'
        max_score: 10
        time: 120
      - question: "Что такое context и для чего он нужен?"
        hints:
          - text: "Для передачи сигнала отмены, дедлайна и других значения без необходимости изменения сигнатур всех функций при работе с горутинами, сетевыми запросами и базами данных."
          - text: "Спросить про отличие context.Background() от context.TODO()"
            help:
              - "context.Background() используется для создания корневого контекста, который не содержит никаких значений и не может быть отменен."
              - "context.TODO() используется для создания контекста, который не содержит никаких значений и не может быть отменен, но может быть использован для временного решения, пока не будет определено правильное значение контекста."
          - text: "Спросить, что можно передавать"
            help:
              - "Не стоит передавать struct, контекст предназначен для передачи метаданных, а не для конфигурации."
          - text: "Спросить почему нельзя передавать context в полях структур"
            help:
              - "Контексты живут ограниченное время, поэтому их нельзя хранить в полях структуры."
        max_score: 8
        time: 60
      - question: "Задача: Реализовать функцию которая преобразует древовидную структуру в плоский map"
        max_score: 10
        time: 600
        live_coding: true
        live_coding_content: >
          Реализуйте функцию `FlattenTree(root map[string]any) (map[string]any, error)`, которая преобразует древовидную структуру в плоский map, где ключами являются пути через точку (dot notation), а значениями — листовые значения дерева.
          Дерево представлено как вложенные map или структуры, где:
            1. Листовые значения: `string`, `int`, `float64`, `bool`, `nil`
            2. Внутренние узлы: `map[string]any`

            // Вход:
            //
            // tree := map[string]interface{}{
            //     "a": map[string]interface{}{
            //         "b": map[string]interface{}{
            //             "c": 42,
            //             "d": "hello",
            //         },
            //         "e": []interface{}{1, 2, 3},
            //     },
            //     "f": true,
            // }
            //
            // Выход:
            // map[string]interface{}{
            //     "a.b.c": 42,
            //     "a.b.d": "hello",
            //     "a.e":   []interface{}{1, 2, 3},
            //     "f":     true,
            // }

  - name: "Архитектура и проектирование"
    questions:
      - question: "Как вы организуете структуру проекта?"
        hints:
          - text: "Спросить про подход Clean Architecture"
        max_score: 5
        time: 120
      - question: "Как обеспечить отказоустойчивость и балансировку нагрузки?"
        hints:
          - text: "Round Robin"
          - text: "IP Hash"
          - text: "Least Connections"
          - text: "Weighted"
          - text: "Репликация данных master-slave."
          - text: "Ограничение RPS (запросов в секунду) для защиты от перегрузки."
        max_score: 10
        time: 120
      - question: "Что такое CAP теорема?"
        hints:
          - text: "(C)Согласованность, (A)Доступность, (P)Устойчивость к разделению (работает даже если разрыв связи); CA, CP, AP;"
        max_score: 10
        time: 120
      - question: "Как вы подходите к код-ревью и рефакторингу?"
        hints:
          - text: "Использование инструментов для анализа кода"
          - text: "Код должен быть понятен без комментариев, преждевременная оптимизация"
          - text: "Алгоритмы оптимальны, есть unit- и integration-тесты"
          - text: "Санитизация входных данных"
        max_score: 8
        time: 60

  - name: "Базы данных"
    questions:
      - question: "Какие типы баз данных существуют?"
        hints:
          - text: "Реляционные (SQL), неотношения (NoSQL), документоориентированные (MongoDB), графовые (Neo4j), ключ-значение (Redis)."
        max_score: 8
        time: 120
      - question: "Когда выбрать NoSQL, а когда реляционную БД?"
        hints:
          - text: "MongoDB: неструктурированные данные, быстрое развитие схемы, большие объемы."
          - text: "SQL: сложные транзакции, строгая целостность данных."
        max_score: 8
        time: 120
      - question: "Что такое индексы?"
        hints:
          - text: "Cтруктуры данных, которые ускоряют поиск, сортировку и фильтрацию записей в базах данных."
          - text: "БД использует индекс для быстрого перехода к нужным данным."
        max_score: 8
        time: 60
      - question: "Что такое транзакции?"
        hints:
          - text: "Группа операций, выполняемых как единое целое, переводит базу данных из одного согласованного состояния в другое согласованное состояние."
          - text: "Она либо завершается полностью (и изменения сохраняются), либо откатывается (и данные возвращаются в исходное состояние)."
          - text: "Транзакции обеспечивают целостность данных в условиях параллельного доступа и сбоев."
        max_score: 10
        time: 120
      - question: "Что такое ACID?"
        hints:
          - text: "A(Атомарность): Транзакция выполняется полностью или не выполняется вообще."
          - text: "C(Согласованность): Транзакция переводит базу из одного согласованного состояния в другое."
          - text: "I(Изолированность): Транзакции выполняются изолированно друг от друга."
          - text: "D(Долговечность): После завершения транзакции изменения сохраняются даже при сбое."
        max_score: 8
        time: 120
      - question: "Феномены при параллельном выполнении транзакций"
        hints:
          - text: "Потерянное обновление (lost update). "
            help:
              - " Когда разные транзакции одновременно изменяют одни и те же данные, то после фиксации изменений может оказаться, что одна транзакция перезаписала данные, обновленные и зафиксированные другой транзакцией."
          - text: "«Грязное» чтение (dirty read)."
            help:
              - "Транзакция читает данные, измененные параллельной транзакцией, которая еще не завершилась. Если эта параллельная транзакция в итоге будет отменена, тогда окажется, что первая транзакция прочитала данные, которых нет в системе."
          - text: "Неповторяющееся чтение (non-repeatable read)."
            help:
              - "Неповторяющееся чтение (non-repeatable read). При повторном чтении тех же самых данных в рамках одной транзакции оказывается, что другая транзакция успела изменить и зафиксировать эти данные. В результате тот же самый запрос выдает другой результат."
          - text: "Фантомное чтение (phantom read)."
            help:
              - "Транзакция повторно выбирает множество строк в соответствии с одним и тем же критерием. В интервале времени между выполнением этих выборок другая транзакция добавляет новые строки и успешно фиксирует изменения. В результате при выполнении повторной выборки в первой транзакции может быть получено другое множество строк."
          - text: "Аномалия сериализации (serialization anomaly)"
            help:
              - "Результат успешной фиксации группы транзакций, выполняющихся параллельно, не совпадает с результатом ни одного из возможных вариантов упорядочения этих транзакций, если бы они выполнялись последовательно."
        max_score: 10
        time: 240
      - question: "Что такое шардинг и репликация?"
        hints:
          - text: "Репликация — копирование данных на несколько серверов для отказоустойчивости."
          - text: "Шардинг — горизонтальное разделение данных по серверам."
        max_score: 10
        time: 120
      - question: "Как оптимизировать медленный запрос?"
        hints:
          - text: "Использовать EXPLAIN ANALYZE для анализа."
          - text: "Добавить индексы на часто используемые столбцы."
          - text: "Переписать запрос (например, избегать SELECT *)."
        max_score: 8
        time: 120
      - question: "Как выбрать уникальные значения из столбца?"
        hints:
          - text: "Использовать DISTINCT."
          - text: "Использовать GROUP BY."
        max_score: 5
        time: 60
      - question: "Как отсортировать результаты запроса?"
        hints:
          - text: "Использовать ORDER BY."
        max_score: 5
        time: 60
      - question: "В чем разница между WHERE и HAVING?"
        hints:
          - text: "WHERE применяется к каждой строке, а HAVING к группам."
          - text: "WHERE используется для фильтрации строк, а HAVING для фильтрации групп."
        max_score: 5
        time: 60
      - question: "Какие агрегатные функции вы знаете?"
        hints:
          - text: "COUNT, SUM, AVG, MAX, MIN."
        max_score: 5
        time: 60
      - question: "Как работает GROUP BY?"
        hints:
          - text: "GROUP BY группирует строки по заданному столбцу."
          - text: "GROUP BY используется для агрегации данных."
          - text: "GROUP BY позволяет выполнять агрегатные функции на группах данных."
        max_score: 7
        time: 120
      - question: "Какие типы JOIN вы знаете?"
        hints:
          - text: "INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN (объединение всех таблиц, если нет значения то NULL), CROSS JOIN (декартово произведение)."
        max_score: 5
        time: 60

  - name: "База данных PostgreSQL"
    questions:
      - question: "Что такое PostgreSQL?"
        hints:
          - text: "Объектно-реляционная СУБД с поддержкой SQL"
        max_score: 5
        time: 60
      - question: "Какие типы индексов поддерживает PostgreSQL?"
        hints:
          - text: "Попросить перечислить типы индексов"
            help:
              - "B-tree, Hash, GiST, SP-GiST, GIN, BRIN"
          - text: "Спросить когда какие использовать"
            help:
              - "GIN - для индексации массивов и текстовых полей"
              - "B-tree - для индексации числовых полей и полей с текстовыми значениями, которые могут быть отсортированы"
              - "Hash - для индексации полей с уникальными значениями"
              - "GiST - для индексации геометрических данных"
              - "SP-GiST - для индексации пространственных данных"
              - "BRIN - для индексации больших таблиц с низкой кардинальностью"
        max_score: 10
        time: 120
      - question: "Реализация транзакций в PostgreSQL"
        hints:
          - text: "Спросить про Multiversion Concurrency Control, MVCC"
            help:
              - "Отсутствие блокировок: операции чтения не блокируются операциями записи; операции записи не блокируются операциями чтения;"
              - "Каждый SQL-оператор видит согласованное состояние базы данных на определённый момент времени, как будто делается её снимок."
              - "Для обеспечения изоляции транзакций создаются отдельные версии строк, которые изменяются параллельными транзакциями. Каждая транзакция работает со своей версией данных."
              - "Этот механизм требует больше ресурсов — дискового пространства и оперативной памяти — для хранения множества версий строк."
        max_score: 10
        time: 120
      - question: "Какие уровни изоляции транзакций поддерживает PostgreSQL?"
        hints:
          - text: "Спросить про READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE, выяснить на сколько глубоко понимает"
            help:
              - "READ UNCOMMITTED(не поддерживается, работает как READ COMMITTED)"
              - "READ COMMITTED (по умолчанию, чтение только зафиксированных данных, это когда транзакция не видит изменений, внесенных другими транзакциями)"
              - "REPEATABLE READ (чтение только зафиксированных данных)"
              - "SERIALIZABLE (самый строгий уровень изоляции)"
        max_score: 10
        time: 120
      - question: "Задача. Есть две транзакции, выполняющиеся параллельно, уровень изоляции READ COMMITTED. В первой транзакции увеличим значение атрибута balance для пользователя на 100 рублей, а во второй транзакции на 200 рублей. Какой будет результат?"
        hints:
          - text: "Команда UPDATE во второй транзакции будет заблокирована до завершения первой транзакции."
        max_score: 10
        time: 240
      - question: "Что такое оконные функции?"
        hints:
          - text: "Попросить рассказать как работают"
            help:
              - "Оконные функции позволяют выполнять агрегатные функции на окнах данных."
          - text: "Попросить привести пример"
            help:
              - "SELECT name, salary, AVG(salary) OVER (PARTITION BY department) AS avg_salary FROM employees."
          - text: "Какие оконные функции знаете"
            help:
              - "ROW_NUMBER, RANK, DENSE_RANK, NTILE."
        max_score: 9
        time: 120
      - question: "Как оптимизировать запрос с LIKE?"
        hints:
          - text: "Использовать LIKE 'prefix%'(индексируется). Избегать LIKE '%suffix'(не индексируется)."
          - text: "Для сложных поисков - полнотекстовый поиск."
          - text: "Использовать LIMIT для ограничения количества строк."
        max_score: 9
        time: 120

  - name: "База данных MongoDB"
    questions:
      - question: "Что такое MongoDB?"
        hints:
          - text: "Спросить про NoSQL"
            help:
              - "NoSQL - это не только MongoDB, но и другие базы данных, такие как Cassandra, CouchDB и Redis."
          - text: "Какие особенности у MongoDB"
            help:
              - "Поддержка JSON, масштабируемость, горизонтальное разделение"
        max_score: 5
        time: 60
      - question: "Какие типы индексов поддерживает MongoDB?"
        hints:
          - text: "hashed, text, 2dsphere (для геоданных на сфере), 2d (для плоских координат), по одному полю, по нескольким полям, составной, уникальный, TTL"
        max_score: 8
        time: 120
      - question: "Что такое документ и коллекция в MongoDB?"
        max_score: 5
        time: 60
      - question: "Как создать базу данных в MongoDB?"
        max_score: 3
        time: 60
      - question: "Как выполнить агрегацию данных?"
        hints:
          - text: 'Через pipeline агрегации: db.orders.aggregate([{ $match: { status: "completed" } },{ $group: { _id: "$customer", total: { $sum: "$amount" } } }])'
        max_score: 6
        time: 120
      - question: "Как обеспечить атомарность операций?"
        hints:
          - text: "Через транзакции"
          - text: "Через атомарные операторы: $inc и т.д."
        max_score: 8
        time: 120
      - question: "Что такое Write Concern и Read Concern?"
        hints:
          - text: "Write Concern — настройка подтверждения записи на сервере"
          - text: "Read Concern — настройка подтверждения чтения на сервере"
          - text: "Существуют различные уровни подтверждения для записи и чтения: majority linearizable, available, local"
        max_score: 10
        time: 120

# Настройки интервью
settings:
  default_score: 5
  score_step: 1
  min_score: 1
  max_score: 10
  default_question_time: 120
