Forwarded from Библиотека собеса по PHP | вопросы с собеседований
CPU одного ядра — в полку на несколько секунд. PHP-FPM воркеры заканчиваются, сайт встаёт. И всё из-за одного поля формы 👇
📦 Задание
Форма регистрации компании. Поле «теги деятельности» — строка вида php, backend, api. Сделали «надёжную» валидацию регуляркой. Работало месяцами. Потом сайт начал периодически зависать на 5–10 секунд, мониторинг показывает 100% CPU на одном ядре, а APM — что время уходит внутри preg_match. Воспроизводится только на определённых вводах от пользователей.
// src/Validation/TagsValidator.php
class TagsValidator
{
private const PATTERN = '/^([a-zA-Z0-9]+\s*,?\s*)+$/';
public function validate(string $tags): bool
{
return (bool) preg_match(self::PATTERN, $tags);
}
}
🔹 Задачи
— Объяснить механизм катастрофического бэктрекинга на этом паттерне
— Привести пример строки, которая «вешает» движок регулярных выражений
— Переписать проверку
Ставьте → 🔥 если нравится формат. Если нет → 🌚
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍2👏1🌚1
🐳 Работа с Docker CLI
Собрали образ и он весит 2 ГБ, а вы не понимаете, откуда столько? docker history покажет размер каждого слоя — сразу видно, какая инструкция в Dockerfile раздула образ.
🔹 Зачем это нужно
— Каждая инструкция в Dockerfile создаёт слой, и docker history показывает размер каждого.
— Сразу видно, если COPY затянул 800 МБ зависимостей.
— Помогает оптимизировать порядок слоёв для лучшего кэширования.
🔹 Как использовать
— Посмотреть слои:
— Без обрезки команд:
— Только размеры в human-readable:
— Сравнить два образа: запустите history для обоих и сравните слои.
💡 Если видите большой слой от COPY . . — значит, в контекст сборки попали модули, .git или логи. Проверьте dockerignore, это обычно экономит сотни мегабайт.
Собрали образ и он весит 2 ГБ, а вы не понимаете, откуда столько? docker history покажет размер каждого слоя — сразу видно, какая инструкция в Dockerfile раздула образ.
🔹 Зачем это нужно
— Каждая инструкция в Dockerfile создаёт слой, и docker history показывает размер каждого.
— Сразу видно, если COPY затянул 800 МБ зависимостей.
— Помогает оптимизировать порядок слоёв для лучшего кэширования.
🔹 Как использовать
— Посмотреть слои:
docker history my-image— Без обрезки команд:
docker history --no-trunc my-image— Только размеры в human-readable:
docker history --format "{{.Size}}\t{{.CreatedBy}}" my-image— Сравнить два образа: запустите history для обоих и сравните слои.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1👏1
🚀 Уже завтра стартует новый поток курса «ИИ-агенты»!
Мы собрали мощнейший состав преподавателей. Учить вас проектировать архитектуру и собирать продакшн-агентов будут инженеры и исследователи из топовых IT-компаний.
Старт уже завтра!
Сомневаетесь, подойдет ли вам программа и подача? Начните с бесплатного демо-урока!
Всего за 2 часа вы заглянете под капот ИИ-агента, поймете, чем мышление модели отличается от ее ответа, и научите систему чинить собственный код. Это идеальный способ протестировать нашу платформу перед покупкой.
🔗 Пройти демо-урок и занять место на курсе
Мы собрали мощнейший состав преподавателей. Учить вас проектировать архитектуру и собирать продакшн-агентов будут инженеры и исследователи из топовых IT-компаний.
Старт уже завтра!
Сомневаетесь, подойдет ли вам программа и подача? Начните с бесплатного демо-урока!
Всего за 2 часа вы заглянете под капот ИИ-агента, поймете, чем мышление модели отличается от ее ответа, и научите систему чинить собственный код. Это идеальный способ протестировать нашу платформу перед покупкой.
🔗 Пройти демо-урок и занять место на курсе