Практические задачи

12 вопросов

1 Как предотвратить одновременный запуск скрипта?

Файловая блокировка (flock) при старте; advisory lock в Redis или БД по ключу (например, имя скрипта). Один процесс держит lock на время выполнения. При падении - таймаут или очистка lock по PID.

Открыть отдельно →
2 Как организовать выполнение отложенных задач (cron)?

Cron для периодичности; скрипт должен быть идемпотентным и ограниченным по времени. Очереди (RabbitMQ, Redis, Laravel Queue) для отложенных задач с точным временем. Мониторинг пропущенных запусков и алерты.

Открыть отдельно →
3 Обработка большого файла?

Чтение потоком (stream), по строкам или чанками. Не загружать файл в память целиком. Для CSV - fgetcsv в цикле. Параллельная обработка чанков при необходимости (разбиение по смещениям или по строкам).

Открыть отдельно →
4 Диагностика медленной страницы?

Профилирование (Xdebug, Blackfire); логирование времени по этапам; анализ slow query log БД; проверка N+1; кеш и сеть. Метрики и трейсинг в проде. Поиск узкого места по цепочке запрос-БД-кеш-внешние API.

Открыть отдельно →
5 Реализация rate limiting?

Счетчик запросов по ключу (IP, user_id) в Redis с TTL (окно) или скользящее окно. При превышении - 429. Алгоритмы: фиксированное окно, token bucket. В PHP - middleware с обращением к Redis. Распределенная реализация - один Redis или согласованный ключ.

Открыть отдельно →
6 Обработка платежей безопасно?

Не хранить полные данные карт; использовать токенизацию провайдера (Stripe, и др.). Идемпотентность запросов (idempotency key). Webhook с проверкой подписи. Логирование для аудита без чувствительных данных. Соответствие PCI DSS при хранении.

Открыть отдельно →
7 Как обнаружить ошибки в проде?

Централизованное логирование и мониторинг (Sentry, Rollbar, ELK). Алерты по уровню и частоте. Трейсинг запросов. Health checks и метрики. Резервное логирование в файл при недоступности сервиса.

Открыть отдельно →
8 Массовое обновление в БД?

Батчами (LIMIT + цикл), чтобы не блокировать таблицу и не исчерпывать память. Транзакции на батч. При возможности - один запрос с временной таблицей или bulk update. Индексы и мониторинг блокировок.

Открыть отдельно →
9 Интернационализация (i18n)?

Вынос строк в словари по локали; подстановка при выводе. Форматы дат, чисел, валют по локали. В PHP - gettext, или массивы/файлы переводов. Хранение контента в БД по языку. Определение языка из заголовка или профиля.

Открыть отдельно →
10 Как подобрать число воркеров очереди?

Зависит от типа задачи (I/O или CPU). Для I/O - больше воркеров (порядок числа ядер или выше). Для CPU-bound - по числу ядер. Нагрузочное тестирование; мониторинг длины очереди и времени обработки. Автоскейлинг по метрикам.

Открыть отдельно →
11 Поведение при недоступности брокера сообщений?

Retry с backoff при подключении; очередь запросов в приложении или локальный буфер (с риском потери при падении). Circuit breaker для избежания каскадных сбоев. Алерты и мониторинг. Graceful degradation - отложить не критичные задачи.

Открыть отдельно →
12 Lock vs семафор?

Lock (mutex) - один владелец; эксклюзивный доступ к ресурсу. Семафор - ограничение числа одновременных доступов (N слотов). Семафор для ограничения параллелизма (например, не более 5 одновременных запросов к API).

Открыть отдельно →
🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.