Подборка объединяет вопросы, отмеченные на этапах интервью в ivi. Здесь можно понять структуру технической проверки и заранее повторить связанные темы. В подборке чаще встречаются темы: frontend, python, mobile.
Это зависит от места хранения count. Если count = 0 создаётся внутри каждого вызова декоратора, новая обёртка получит новый счётчик; глобальный или общий объект может сохранить значение.
Transactional Outbox сохраняет бизнес-изменение и запись события в одной транзакции БД, а отдельный процесс доставляет событие в брокер. Так устраняется ненадёжная двойная запись.
Поместите yield в try/finally и вызывайте end() в finally. Это обеспечивает очистку при исчерпании или закрытии начатого генератора, но не гарантирует мгновенное закрытие брошенного генератора.
Для двух и более передач используйте GROUP BY/HAVING, для отсутствующих — NOT EXISTS, для последней передачи — выбор первой строки после сортировки по времени и ID.
Используйте NOT EXISTS для отбора каналов, у которых нет связанной передачи. Имена таблиц и полей ниже условные, поскольку схема в вопросе не приведена.
При ForeignKey tv_channel шаблон может породить N+1: один запрос за передачами и отдельный за каналом каждой записи. Загрузите канал через select_related до обхода.
В обычной CPython-сборке GIL защищает внутреннюю работу с объектами, но ограничивает параллельное исполнение Python-кода потоками. Для CPU-задач используют процессы, нативные расширения или free-threaded сборку.
К атрибуту wrapper.calls можно обращаться после определения функции и внутри её тела, если атрибут уже создан к моменту чтения. Функция — объект, которому можно присваивать атрибуты.
Сначала отберите допустимые блоки, затем ранжируйте их по ожидаемой пользовательской пользе с учётом состава, размера, типа и пересечения фильмов. Среднего score айтемов обычно недостаточно.
Двухуровневый рекомендатель сначала быстро отбирает кандидатов, затем точно ранжирует небольшой набор. Двубашенная модель отдельно кодирует пользователя и объект и часто используется на первом этапе.