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

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

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

Для связи: @ruslan_kuyanets
Download Telegram
#Собес #interface #abstraction #contract
🤔 Какова цель использования интерфейсов в PHP?

💬 Кратко:

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

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

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
1🔥1
mlocati/php-extension-installer

Полезная утилита, которая решает вечную боль сборки PHP-образов.
Позволяет ставить расширения одной строчкой, без apt, apk и docker-php-ext-install.


FROM php:8.3-fpm

# Подтягиваем готовый установщик расширений из образа mlocati
COPY --from=mlocati/php-extension-installer /usr/bin/install-php-extensions /usr/local/bin/

# Одной командой ставим всё нужное
RUN set -eux; \
install-php-extensions \
intl \
pdo_pgsql \
opcache \
gd \
redis \
xdebug


Работает с Alpine и с Debian.
Сам подтягивает системные зависимости, поддерживает PECL-пакеты и умеет кэшировать слои.

По сути — "composer install" для PHP-расширений.
https://github.com/mlocati/docker-php-extension-installer

Сравни, как было бы без него:


FROM php:8.3-fpm

# Системные зависимости для intl, pdo_pgsql, gd
RUN set -eux; \
apt-get update; \
apt-get install -y --no-install-recommends \
libicu-dev \
libpq-dev \
libjpeg-dev \
libpng-dev \
libwebp-dev \
libfreetype6-dev \
pkg-config \
git \
ca-certificates; \
rm -rf /var/lib/apt/lists/*

# Конфигурация и сборка расширений из исходников
RUN set -eux; \
docker-php-ext-install -j"$(nproc)" \
gd \
intl \
pdo_pgsql \
opcache

# PECL-расширения
RUN set -eux; \
pecl install redis; \
pecl install xdebug; \
docker-php-ext-enable redis xdebug


🚀 Пост Guru PHP: @msavin_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1🔥1
#Собес #route #web #api
🤔 Какие файлы маршрутов по умолчанию существуют в Laravel?

💬 Кратко:

В Laravel по умолчанию существуют четыре файла маршрутов: web.php для веб-маршрутов, api.php для API-маршрутов, console.php для команд консоли и channel.php для каналов вещания событий.

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

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
1
#book #памятка
📚 Памятка PHP/GoLang разработчику для подготовки к собеседованиям

Это методичка(краткий справочник) по темам, знание которых может понадобиться при собеседовании на бэкендера (с уклоном в Golang/PHP) и на работе.

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

👉 База вопросов 👉 Новости
1
#Собес #phpunit #unit #test
🤔 Как написать юнит-тесты в PHP?

💬 Кратко:

В PHP юнит-тесты пишутся с использованием PHPUnit, который позволяет проверять корректность работы кода. Для создания тестов необходимо создать класс с методами, проверяющими функциональность программы, и использовать различные утверждения для проверки результатов. PHPUnit поддерживает создание фиктивных объектов и наборов данных для тестирования различных сценариев.

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

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
1
#Собес #transaction #deadlock #database
🤔 Как предотвратить взаимоблокировки в базе данных?

💬 Кратко:

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

- Всегда обращаться к ресурсам базы данных в одном порядке.
- Сокращать время выполнения транзакций, чтобы уменьшить вероятность конфликта.
- Использовать таймауты для автоматического завершения зависших транзакций.
- Регулярно анализировать производительность базы данных и оптимизировать запросы, добавляя индексы и избегая сложных блокировок.

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

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
PHP-FPM status page

PHP-FPM может сам показать живую статистику по пулам и воркерам. Для этого нужно посетить страницу /fpm-status

Пример вывода:

pool: www
process manager: dynamic
listen queue: 0
idle processes: 3
active processes: 2
max children reached: 0


Что это значит по-человечески:

* listen queue — сколько запросов ждут воркера. 0 — отлично.
* idle processes — свободные воркеры. Если всегда 0 — не хватает процессов.
* active processes — кто-то реально что-то делает.
* max children reached > 0 — пул упирался в лимит pm.max_children.
* slow requests > 0 — смотри slowlog, код тормозит.

Как включить

В www.conf (или другом пуле):

pm.status_path = /fpm-status
ping.path = /ping
ping.response = pong


В nginx добавь:

location = /fpm-status {
include fastcgi_params;
fastcgi_pass unix:/run/php/php-fpm.sock;
allow 127.0.0.1; deny all;
}


Перезапусти FPM и nginx, затем:

curl http://127.0.0.1/fpm-status


Можно и ?full — покажет все процессы с PID, временем работы и запросом. Также можно менять формат вывода статистики
А /ping пригодится для health-check.

📘 Документация: https://www.php.net/manual/en/fpm.status.php

🚀 Пост Guru PHP: @msavin_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
2🔥2
#Собес #transaction #pdo #mysql
🤔 Как выполнять транзакции в PHP с MySQL?

💬 Кратко:

Транзакции позволяют выполнять несколько запросов к базе данных как единое целое. Если один из запросов завершится неудачей, можно откатить изменения. В PHP транзакции реализуются через MySQLi или PDO, с использованием методов beginTransaction, commit и rollBack.

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

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
👍2
#Собес #ipsec #layer_3 #encryption
🤔 На каком уровне работает IPsec?

💬 Кратко:

IPsec работает на 3-м уровне модели OSI (сетевом уровне). Он обеспечивает защиту данных на уровне IP-пакетов с использованием методов шифрования и аутентификации.

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

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

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


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

👉 База вопросов 👉 Новости
#Собес #debugging #xdebug #logging
🤔 Как отлаживать PHP-приложение?

💬 Кратко:

Для отладки можно использовать встроенные функции PHP, такие как var_dump() и error_reporting(), а также более сложные инструменты вроде Xdebug для работы с точками останова и трассировками. Логирование ошибок и профилирование кода также играют ключевую роль.

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

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

💬 Кратко:

Сервис-провайдеры в Laravel — это центральное место для конфигурации приложения и его сервисов. Они используются для регистрации и инстанцирования зависимостей и выполнения действий при старте приложения. Провайдеры содержат два ключевых метода: register для регистрации сервисов и boot для выполнения кода после того, как все сервисы будут зарегистрированы.

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

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
#Собес #docker #entrypoint #caching
🤔 Какие типовые проблемы возникают при работе с Docker?

💬 Кратко:

Типичные проблемы — большие образы, утечки ресурсов, ошибки в Dockerfile, проблемы с кэшированием, конфликт портов, неправильная работа томов и зависимость от окружения. Также нередко возникают сложности с безопасностью.

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

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
1
#course #курсы #тренажер
📚 Code Basics — старт в IT с нуля

Code Basics — бесплатная образовательная платформа для тех, кто хочет начать путь в IT. Проект создан командой и сообществом Хекслета, чтобы помочь новичкам понять принципы программирования, а не просто запомнить детали. В основе обучения — практический тренажёр, который помогает освоить базу и почувствовать логику кода.

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

👉 База вопросов 👉 Новости
#Собес #authentication #password #hash
🤔 Как реализовать аутентификацию в PHP?

💬 Кратко:

Для реализации аутентификации в PHP обычно используется проверка имени пользователя и пароля. Пароли должны храниться в базе данных в зашифрованном виде (например, с использованием bcrypt). При успешной аутентификации создаётся сессия для отслеживания состояния пользователя. Важно использовать HTTPS для защиты данных, а также предусмотреть дополнительные методы безопасности, такие как двухфакторная аутентификация.

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

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Функция array_column может доставать не только колонки массива, как казалось бы, но и свойства объектов:


enum Status: string {
case Active = 'active';
case Inactive = 'inactive';
case Pending = 'pending';
}

// What does self::cases() return?
var_dump(Status::cases());
// array(3) {
// [0]=> enum(Status::Active) // <- These are OBJECTS
// [1]=> enum(Status::Inactive) // <- Not arrays
// [2]=> enum(Status::Pending)
// }

// Each case object has public readonly properties:
$case = Status::Active;
echo $case->value; // "active" (string - the backing value)

// array_column can extract these properties!
$values = array_column(Status::cases(), 'value');
var_dump($values);
// array(3) {
// [0]=> string(6) "active"
// [1]=> string(8) "inactive"
// [2]=> string(7) "pending"
// }


А вы знали про такое?

🚀 Пост Guru PHP: @msavin_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
#Собес #postgres #sql #php

🤔 Middle PHP разработчик в Анлимитед Продакшн

Техническое собеседование. Вилка: от 165к. Собеседование с фокусом на архитектуру веб-приложений, принципы SOLID, работу с базами данных PostgreSQL и понимание основ безопасности API.

💬 Вопросы:

- Алгоритмы агрегации данных — как работает GROUP BY под капотом (на примере CSV-файла без БД)?

- Как обеспечить уникальность необязательного поля (например, рабочего телефона) с учётом NULL-значений?

- Что кэшировать, а что нет? Инвалидация кэша при изменении данных.

- Стратегии кэширования тяжёлых вычислений (например, поиска товаров с фильтрами) — cache-aside, проблема cold start.

- Как работает идемпотентность под капотом — где и как хранятся ключи, с чем сравнивается запрос?

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

📣 Хочешь больше собесов?
Подпишись на наш главный канал
#Собес #git_diff
🤔 Как посмотреть, что именно вы изменили в определенном файле git?

💬 Кратко:

Используйте команду git diff для просмотра изменений. Для конкретного файла:
git diff <имя_файла>


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

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
#documentation #http
📚 Все про HTTP

Тут собрано всё, что нужно знать про самый популярный протокол интернета

✓ Все статус-коды с понятными объяснениями
✓ Методы и заголовки
✓ Подборка инструментов для тестирования HTTP
✓ Чёткая инфа про HTTP/3

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

👉 База вопросов 👉 Новости
#Собес #request #response #framework
🤔 Как обрабатывается веб-запрос в фреймворке (Laravel/Yii2) — от Nginx через PHP-FPM до контроллера и возврата JSON-ответа?

💬 Кратко:

Веб-запрос проходит через несколько уровней обработки. Сначала Nginx принимает запрос и передает его PHP-FPM через FastCGI протокол. PHP-FPM запускает PHP-процесс, который загружает фреймворк. Фреймворк анализирует маршрут, находит соответствующий контроллер и выполняет его метод. Контроллер обрабатывает данные и возвращает JSON-ответ, который проходит обратно через всю цепочку к клиенту.

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

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Оптимизация Docker-образов с помощью dive

Недавно прогнал наш dev-образ через утилиту dive
Судя по результатам, надо образ на диету садить)

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

Так я увидел что примерно половина образа это различные системные библиотеки в /usr/bin/lib, например zsh занимает 205МБ

Большой размер образа приводит к тому, что место в registry быстро забивается, кэш слоев хуже переиспользуется, долго пулится в CI/CD

Как можно исправить ситуацию?

- Видно, что в разделе Potential wasted space указано 75 МБ, скорее всего остались артефакты apt, которые можно удалить

- Можно использовать multistage, что чуть улучшит кэширование, и мастхев для продовых образов

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