PHP Backend | YeaHub – Telegram
PHP Backend | YeaHub
388 subscribers
234 photos
10 videos
427 links
Теория, подготовка к интервью и курсы для PHP разработчиков

YeaHub — это платформа для IT-специалистов, объединяющая обучение, карьерный рост, развитие и сообщество единомышленников.

Платформа: https://yeahub.ru

Для связи: @ruslan_kuyanets
Download Telegram
#Собес #sql #optimization #index
🤔 Как оптимизировать SQL-запрос, выбирающий все посты пользователей с >500 подписчиков (с джойнами и проверкой NULL)?

💬 Кратко:

- Добавить индексы на subscribers_count и user_id.
- Использовать INNER JOIN вместо LEFT JOIN, если NULL не нужны.
- Заменить подзапросы на JOIN.
- Применить покрывающий индекс.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
#podcast #всё
📚 TeachMeSkills IT-школа

Это серия выпусков от "TeachMeSkills Школа программирования"
Речь пойдет об актуальные направления и технологии в IT; перспективы роста начинающих специалистов; холиварные топики из жизни разработчиков.


Перейти к материалу

👉 База вопросов 👉 Новости
#Собес #inheritance #extends #base_class
🤔 Как используется наследование в PHP?

💬 Кратко:

Наследование в PHP позволяет одному классу (подклассу) наследовать методы и свойства другого класса (родительского класса). Это позволяет повторно использовать код и создавать иерархические связи между классами, где подклассы могут расширять или изменять функциональность родительского класса, сохраняя при этом общие черты.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Закон протекающих абстракций и почему он портит вам tail latency

Закон протекающих абстракций говорит о том, что любая удобная обёртка рано или поздно перестаёт скрывать свою сложность.

Tail latency — это когда запрос, обычно делающийся за 200 ms, внезапно занимает 2 s. Такое поведение ухудшает пользовательский опыт - пользователь может не дождаться и уйти. В распределённой системе эффект еще и усиливается: один затупивший вызов тянет за собой всю цепочку

Почему появляются такие задержки? Сеть потеряла пакет, TCP ушёл в backoff, DNS задумался, GC начал собирать мусор не вовремя, прокси сделал лишний ретрай. В обычном коде всё выглядит гладко, но под нагрузкой эти мелочи превращаются в p95/p99 latency

Как бороться с tail latency? Есть ряд паттернов:
- хеджированные запросы - отправляем запрос на несколько нод сразу, и берем ответ от первого
- request coalescing - одинаковый запросы "склеиваем" в один, чтоб не грузить нижние слои системы
- deadline propagation - каждый участок запроса знает сколько у него осталось времени на выполнение
- circuit breakers - если модуль стал отдавать много ошибок, можно отрезать часть запросов от него, чтоб дать ему восстановиться
- latency-aware load balancing - раскидывать нагрузку не round-robin'ом, а в зависимости от состояния нод

Каждый паттерн — отдельная история, но вместе они сильно уменьшают хвосты.

🚀 Пост Guru PHP: @msavin_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес #microservices #monolithic #architecture

🤔 Middle+ PHP Backend-разработчик в компанию Астро волга

Техническое собеседование PHP-разработчика. ЗП от 165к с фокусом на архитектуру веб-приложений, работу с базами данных и брокерами сообщений

💬 Вопросы:

- Как бы вы описали паттерн проектирования Singleton?

- Что такое трейты в PHP?

- Что такое Dockerfile?

- Объясните, что такое обмен (Exchange)?

- Что такое микросервисная архитектура?

👉 Все вопросы из этого собеседования (31)

📣 Хочешь больше собесов?
Подпишись на наш главный канал
#Собес #git_хуки
🤔 Из чего состоят “хуки” в Git?

💬 Кратко:

Хуки в Git — это скрипты, которые выполняются автоматически при определённых действиях в репозитории, таких как коммиты, слияния или пуши. Они находятся в директории .git/hooks и могут быть настроены для выполнения различных задач.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
#Собес #query_builder #request #laravel
🤔 Что такое Query Builder в Laravel?

💬 Кратко:

Query Builder в Laravel — это инструмент, который позволяет строить запросы к базе данных с использованием PHP-кода, избегая необходимости писать SQL-запросы вручную. Он предоставляет удобные методы для создания, выполнения и кэширования запросов.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🔥1
Blue-Green Deployment

Blue-green — это способ выкатывать новую версию без простоя и практически с мгновенным откатом на старую версию если что-то пошло не так

У вас есть два окружения — blue (текущий прод) и green (новая версия).
Вы обновляете green, прогоняете smoke-тесты, а потом просто переключаете трафик на него.
Переключение обычно занимает миллисекунды — достаточно указать load balancer’у новый бэкенд.
При этом мы имеем такую же простую возможность отката, если что-то все таки пошло не так - переключаем трафик на blue и спокойно правим green

Но есть важный нюанс - база данных и любые другие контракты данных должны быть совместимы между соседними версиями.
Обе версии (blue и green) должны уметь работать с одной и той же схемой БД одновременно. То же самое касается схемы кеша, форматов сообщений, протоколов очередей — разве что здесь можно выкрутиться версионированием ключей.

Blue-green не решает все проблемы, но снимает главный страх релизов:
“если что-то поломается, мы вернём всё назад за секунду”.

🚀 Пост Guru PHP: @msavin_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес #design #patterns #strategy
🤔 Какие паттерны проектирования знаете? Где применяли?

💬 Кратко:

Паттерны проектирования - это проверенные решения распространенных проблем в разработке. Адаптер используется для совместимости разных интерфейсов, Фабрика создает объекты без указания точного класса, Стратегия позволяет менять алгоритмы поведения, Observer реализует систему событий. Эти паттерны помогают создавать гибкий, поддерживаемый и масштабируемый код в реальных проектах.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
#Собес #inheritance #table #data_hierarchy
🤔 Что такое таблицы с наследованием в PostgreSQL и зачем они нужны?

💬 Кратко:

В PostgreSQL таблицы могут наследовать структуру и данные другой таблицы, что полезно для разделения данных или создания иерархий. Например, можно создать таблицы для разных типов пользователей, которые наследуют общие поля из родительской таблицы.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
#course #ии-помощник
📚 Курс PHP

Изучите язык программирования PHP в интерактивной онлайн среде. Десятки заданий прямо в браузере с поддержкой ИИ-ассистента

Перейти к материалу

👉 База вопросов 👉 Новости
#Собес #upload #file #form
🤔 Как PHP обрабатывает загрузку файлов?

💬 Кратко:

PHP обрабатывает загрузку файлов через суперглобальный массив $_FILES. Файл отправляется через форму с атрибутом enctype="multipart/form-data", и PHP сохраняет информацию о загружаемом файле в $_FILES, включая имя файла, тип и путь.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Scale Cube: 3 способа масштабироваться

Когда система перестаёт держать нагрузку, приходит время масштабироваться
Обычно делают так:

- добавили инстансы → стало не лучше
- распилили на микросервисы → стало хуже

Scale Cube модель предлагает 3 оси. Каждая закрывает свой bottleneck:

X - клонирование
Больше одинаковых копий сервиса за балансером.
Помогает, когда упираетесь в CPU/IO на приложении.

Y - разделение ответственности
Делите по функциям: поиск, отчёты, платежи.
Нужно, когда одна часть системы “убивает” остальных и её надо изолировать/масштабировать отдельно.

Z - разделение по данным (sharding/partitioning)
Делите данные по ключу (user_id, region).
Применяется когда потолок - данные: одна БД/таблица, hot keys, локи. Запись и чтение можно масштабировать отдельно

Например, если узкое место - база, то:

- X почти не поможет (вы просто сильнее нагрузите БД)
- микросервисы чаще ухудшат (больше запросов + распределённые транзакции/консистентность)
- а вот Z может дать рост capacity

Выбирать ось надо по bottleneck’у.
Если вы не можете назвать узкое место цифрами - вы не масштабируете, а только усложняете систему.

🚀 Пост Guru PHP: @msavin_dev
Please open Telegram to view this post
VIEW IN TELEGRAM