Загрузка данных
Подготовил тест по лекции № 5 «Кэширование и фоновые задачи»: 10 вопросов, по 4 варианта ответа, один правильный. Вопросы проверяют понимание Django, Redis, Celery и практических ситуаций, а не простое запоминание определений.
Лекция 5. Кэширование и фоновые задачи
1. В каком случае кэширование данных наиболее оправданно?
A. Каталог услуг часто просматривают, а обновляется он редко
Пояснение: Повторные обращения к редко изменяемому каталогу позволяют использовать ранее подготовленный результат.
B. Пользователь изменяет пароль в личном кабинете
Пояснение: Изменение пароля требует надёжного сохранения актуального значения, а не использования сохранённого ответа.
C. Сервер сохраняет новую заявку посетителя
Пояснение: Новую заявку необходимо записать в постоянное хранилище; кэш не заменяет сохранение.
D. Администратор изменяет права доступа сотрудника
Пояснение: Права доступа должны проверяться по актуальным данным; использование устаревшего результата опасно.
Правильные ответы: A
Подсказка: Сравните частоту повторных обращений и необходимость немедленно получать новые данные.
2. Список услуг зависит от категории, страницы и языка. Какой ключ кэша подходит для хранения результата?
A. services:list
Пояснение: Такой ключ не различает категории, страницы и языки, поэтому результаты могут смешиваться.
B. services:category=implantation
Пояснение: Категория учитывается, но разные страницы и языки получат одинаковый ключ.
C. services:category=implantation:page=2:lang=ru
Пояснение: Ключ различает все три параметра, влияющие на содержимое результата.
D. services:page=2
Пояснение: Номер страницы не позволяет отличить результаты разных категорий и языков.
Правильные ответы: C
Подсказка: Определите, какие параметры могут изменить возвращаемый список.
3. Администратор изменил цену услуги в базе данных, но посетители продолжают видеть старую цену из кэша. Что необходимо сделать для немедленного обновления?
A. Изменить порядок сортировки услуг
Пояснение: Сортировка не удаляет сохранённую устаревшую цену.
B. Увеличить срок хранения кэша
Пояснение: Увеличение срока хранения продлит возможность показа устаревших данных.
C. Отключить сериализатор услуги
Пояснение: Сериализатор определяет представление данных, но не решает проблему устаревшего кэша.
D. Удалить соответствующий ключ кэша после успешного сохранения изменений
Пояснение: После удаления старого результата следующее обращение сможет получить актуальные данные из базы.
Правильные ответы: D
Подсказка: Подумайте, что произойдёт при следующем чтении, если ранее сохранённый результат больше недоступен.
4. В Django данные личного кабинета разных пользователей сохраняются с одним ключом cache.set('profile', user_data, 600). Какая проблема возможна?
A. Django автоматически удалит пользователей из базы
Пояснение: Запись в кэш не выполняет удаление объектов базы данных.
B. Один пользователь может получить сохранённые данные другого
Пояснение: Общий ключ не разделяет результаты разных пользователей, что создаёт риск раскрытия личной информации.
C. Все данные будут преобразованы в общедоступные файлы
Пояснение: Кэширование не означает автоматическую публикацию содержимого в виде файлов.
D. Срок хранения будет автоматически увеличиваться
Пояснение: Указанный срок хранения не увеличивается из-за совпадения ключей.
Правильные ответы: B
Подсказка: Рассмотрите ситуацию, когда несколько пользователей записывают разные данные под одним именем.
5. Как корректно определить, помогло ли внедрение кэширования?
A. Сравнить время одинаковых запросов при сопоставимой нагрузке и проверить актуальность данных
Пояснение: Оценка должна учитывать и скорость ответа, и правильность возвращаемой информации.
B. Проверить только факт подключения Redis
Пояснение: Подключение Redis не доказывает ускорение сайта.
C. Подсчитать количество созданных ключей кэша
Пояснение: Большое количество ключей само по себе не свидетельствует о пользе кэширования.
D. Сравнить размер исходного кода до и после изменений
Пояснение: Объём кода не позволяет оценить время ответа и актуальность данных.
Правильные ответы: A
Подсказка: Ускорение полезно только тогда, когда пользователь продолжает получать правильный результат.
6. После сохранения заявки сайт должен отправить уведомление сотруднику. Почтовая служба иногда отвечает медленно. Какое решение предпочтительно?
A. Ожидать отправки письма перед сохранением заявки
Пояснение: Медленная почтовая служба будет задерживать главное действие пользователя.
B. Хранить заявку только в Redis до отправки письма
Пояснение: Основные данные обращения необходимо надёжно сохранить в постоянной базе.
C. Сохранить заявку и передать отправку письма фоновому исполнителю
Пояснение: Сохранение обращения остаётся основным действием, а уведомление может выполняться независимо.
D. Отправлять письмо из браузера посетителя
Пояснение: Отправка служебного уведомления должна контролироваться сервером, а не зависеть от браузера.
Правильные ответы: C
Подсказка: Разделите обязательный результат для посетителя и операцию, которую можно завершить позднее.
7. Почему задание Celery, которому нужен ID новой заявки, лучше отправлять после успешного завершения транзакции базы данных?
A. Чтобы увеличить скорость всех SQL-запросов
Пояснение: Время выполнения SQL-запросов само по себе не является причиной такого порядка.
B. Чтобы автоматически отключить повторные выполнения заданий
Пояснение: Завершение транзакции не гарантирует, что задание никогда не будет выполнено повторно.
C. Чтобы заменить проверку данных сериализатором
Пояснение: Проверка входных данных и момент отправки фонового задания решают разные задачи.
D. Чтобы исполнитель не обратился к записи до её фиксации в базе
Пояснение: Если задание начнётся до завершения транзакции, новая запись может быть ещё недоступна другому процессу.
Правильные ответы: D
Подсказка: Представьте два независимых процесса: один сохраняет запись, другой пытается её прочитать.
8. Фоновое задание отправки письма завершилось ошибкой из-за временной недоступности почтового сервера. Как организовать повторные попытки?
A. Повторять отправку бесконечно без задержек
Пояснение: Неограниченные частые повторы создают дополнительную нагрузку и могут бесконечно занимать очередь.
B. Повторять временные ошибки с задержкой и ограничением числа попыток
Пояснение: Ограниченные повторы с увеличивающимися интервалами позволяют пережить временный сбой без бесконечной нагрузки.
C. Повторять любую ошибку, включая неверный адрес получателя
Пояснение: Ошибки постоянного характера обычно требуют исправления данных, а не повторения той же операции.
D. Удалять сохранённую заявку после первой ошибки отправки
Пояснение: Неудачная отправка уведомления не должна уничтожать успешно сохранённое обращение.
Правильные ответы: B
Подсказка: Различайте ошибки, которые могут исчезнуть со временем, и ошибки, требующие изменения данных.
9. Задание Celery было успешно выполнено, но подтверждение завершения потерялось, поэтому система выполнила его повторно. Что помогает избежать повторного бизнес-действия?
A. Проверка уникального идентификатора операции и факта её предыдущего выполнения
Пояснение: Проверка позволяет распознать уже выполненное действие и не создавать дубликат.
B. Увеличение количества исполнителей Celery
Пояснение: Дополнительные исполнители повышают пропускную способность, но не предотвращают повторное выполнение одной операции.
C. Уменьшение срока хранения кэша
Пояснение: Срок кэширования не обеспечивает уникальность выполнения фонового действия.
D. Изменение URL страницы заявки
Пояснение: URL страницы не контролирует повторное выполнение заданий в очереди.
Правильные ответы: A
Подсказка: Подумайте, как система могла бы понять, что действие с определённым идентификатором уже завершено.
10. Сайт должен автоматически формировать ежедневную сводку обращений в установленное время. Какой компонент Celery предназначен для запуска заданий по расписанию?
A. Django Admin
Пояснение: Административная панель предназначена для управления данными и не является планировщиком Celery.
B. Django Serializer
Пояснение: Сериализатор преобразует и проверяет данные, но не запускает периодические задания.
C. Celery Beat
Пояснение: Celery Beat отправляет задания в очередь по расписанию, после чего исполнитель Celery выполняет их.
D. Celery Worker
Пояснение: Worker выполняет полученные задания, но сам по себе не является планировщиком периодического запуска.
Правильные ответы: C
Подсказка: Разделите две роли: создание задания в нужное время и непосредственное выполнение задания.