#Собес #git_diff
🤔 Как посмотреть, что именно вы изменили в определенном файле git?
💬 Кратко:
Используйте команду
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Как посмотреть, что именно вы изменили в определенном файле git?
💬 Кратко:
Используйте команду
git diff для просмотра изменений. Для конкретного файла:git diff <имя_файла>
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
#documentation #http
📚 Все про HTTP
Тут собрано всё, что нужно знать про самый популярный протокол интернета
✓ Все статус-коды с понятными объяснениями
✓ Методы и заголовки
✓ Подборка инструментов для тестирования HTTP
✓ Чёткая инфа про HTTP/3
Перейти к материалу
👉 База вопросов 👉 Новости
📚 Все про HTTP
Тут собрано всё, что нужно знать про самый популярный протокол интернета
✓ Все статус-коды с понятными объяснениями
✓ Методы и заголовки
✓ Подборка инструментов для тестирования HTTP
✓ Чёткая инфа про HTTP/3
Перейти к материалу
👉 База вопросов 👉 Новости
#Собес #request #response #framework
🤔 Как обрабатывается веб-запрос в фреймворке (Laravel/Yii2) — от Nginx через PHP-FPM до контроллера и возврата JSON-ответа?
💬 Кратко:
Веб-запрос проходит через несколько уровней обработки. Сначала Nginx принимает запрос и передает его PHP-FPM через FastCGI протокол. PHP-FPM запускает PHP-процесс, который загружает фреймворк. Фреймворк анализирует маршрут, находит соответствующий контроллер и выполняет его метод. Контроллер обрабатывает данные и возвращает JSON-ответ, который проходит обратно через всю цепочку к клиенту.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Как обрабатывается веб-запрос в фреймворке (Laravel/Yii2) — от Nginx через PHP-FPM до контроллера и возврата JSON-ответа?
💬 Кратко:
Веб-запрос проходит через несколько уровней обработки. Сначала Nginx принимает запрос и передает его PHP-FPM через FastCGI протокол. PHP-FPM запускает PHP-процесс, который загружает фреймворк. Фреймворк анализирует маршрут, находит соответствующий контроллер и выполняет его метод. Контроллер обрабатывает данные и возвращает JSON-ответ, который проходит обратно через всю цепочку к клиенту.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Оптимизация Docker-образов с помощью dive
Недавно прогнал наш dev-образ через утилиту dive
Судя по результатам, надо образ на диету садить)
На скрине видно что размер образа разожрался больше гига, можем походить по слоям, увидеть сколько каждый весит, куда он добавляет файлы (что довольно любопытно наблюдать)
Так я увидел что примерно половина образа это различные системные библиотеки в
Большой размер образа приводит к тому, что место в registry быстро забивается, кэш слоев хуже переиспользуется, долго пулится в CI/CD
Как можно исправить ситуацию?
- Видно, что в разделе Potential wasted space указано 75 МБ, скорее всего остались артефакты apt, которые можно удалить
- Можно использовать multistage, что чуть улучшит кэширование, и мастхев для продовых образов
🚀 Пост Guru PHP: @msavin_dev
Недавно прогнал наш dev-образ через утилиту dive
Судя по результатам, надо образ на диету садить)
На скрине видно что размер образа разожрался больше гига, можем походить по слоям, увидеть сколько каждый весит, куда он добавляет файлы (что довольно любопытно наблюдать)
Так я увидел что примерно половина образа это различные системные библиотеки в
/usr/bin/lib, например zsh занимает 205МББольшой размер образа приводит к тому, что место в registry быстро забивается, кэш слоев хуже переиспользуется, долго пулится в CI/CD
Как можно исправить ситуацию?
- Видно, что в разделе Potential wasted space указано 75 МБ, скорее всего остались артефакты apt, которые можно удалить
- Можно использовать multistage, что чуть улучшит кэширование, и мастхев для продовых образов
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
#Собес #microservices #monolithic #architecture
🤔 Middle+ PHP Backend-разработчик в компанию Астро волга
Техническое собеседование PHP-разработчика. ЗП от 165к с фокусом на архитектуру веб-приложений, работу с базами данных и брокерами сообщений
💬 Вопросы:
- Что такое DDD и гексагональная архитектура?
- Как реализовать Singleton?
- Какие шаблоны проектирования используете?
- Что такое партиционирование и как оно работает?
- Разница между горизонтальным и вертикальным масштабированием.
👉 Все вопросы из этого собеседования (31)
📣 Хочешь больше собесов?
Подпишись на наш главный канал
🤔 Middle+ PHP Backend-разработчик в компанию Астро волга
Техническое собеседование PHP-разработчика. ЗП от 165к с фокусом на архитектуру веб-приложений, работу с базами данных и брокерами сообщений
💬 Вопросы:
- Что такое DDD и гексагональная архитектура?
- Как реализовать Singleton?
- Какие шаблоны проектирования используете?
- Что такое партиционирование и как оно работает?
- Разница между горизонтальным и вертикальным масштабированием.
👉 Все вопросы из этого собеседования (31)
📣 Хочешь больше собесов?
Подпишись на наш главный канал
#Собес #sql #optimization #index
🤔 Как оптимизировать SQL-запрос, выбирающий все посты пользователей с >500 подписчиков (с джойнами и проверкой NULL)?
💬 Кратко:
- Добавить индексы на
- Использовать
- Заменить подзапросы на
- Применить покрывающий индекс.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Как оптимизировать SQL-запрос, выбирающий все посты пользователей с >500 подписчиков (с джойнами и проверкой NULL)?
💬 Кратко:
- Добавить индексы на
subscribers_count и user_id.- Использовать
INNER JOIN вместо LEFT JOIN, если NULL не нужны.- Заменить подзапросы на
JOIN.- Применить покрывающий индекс.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
#podcast #всё
📚 TeachMeSkills IT-школа
Это серия выпусков от "TeachMeSkills Школа программирования"
Речь пойдет об актуальные направления и технологии в IT; перспективы роста начинающих специалистов; холиварные топики из жизни разработчиков.
Перейти к материалу
👉 База вопросов 👉 Новости
📚 TeachMeSkills IT-школа
Это серия выпусков от "TeachMeSkills Школа программирования"
Речь пойдет об актуальные направления и технологии в IT; перспективы роста начинающих специалистов; холиварные топики из жизни разработчиков.
Перейти к материалу
👉 База вопросов 👉 Новости
#Собес #inheritance #extends #base_class
🤔 Как используется наследование в PHP?
💬 Кратко:
Наследование в PHP позволяет одному классу (подклассу) наследовать методы и свойства другого класса (родительского класса). Это позволяет повторно использовать код и создавать иерархические связи между классами, где подклассы могут расширять или изменять функциональность родительского класса, сохраняя при этом общие черты.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Как используется наследование в 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
Закон протекающих абстракций говорит о том, что любая удобная обёртка рано или поздно перестаёт скрывать свою сложность.
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'ом, а в зависимости от состояния нод
Каждый паттерн — отдельная история, но вместе они сильно уменьшают хвосты.
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
Mikhail Savin
Ментор PHP backend GitHub: https://github.com/savinmikhail
#Собес #microservices #monolithic #architecture
🤔 Middle+ PHP Backend-разработчик в компанию Астро волга
Техническое собеседование PHP-разработчика. ЗП от 165к с фокусом на архитектуру веб-приложений, работу с базами данных и брокерами сообщений
💬 Вопросы:
- Как бы вы описали паттерн проектирования Singleton?
- Что такое трейты в PHP?
- Что такое Dockerfile?
- Объясните, что такое обмен (Exchange)?
- Что такое микросервисная архитектура?
👉 Все вопросы из этого собеседования (31)
📣 Хочешь больше собесов?
Подпишись на наш главный канал
🤔 Middle+ PHP Backend-разработчик в компанию Астро волга
Техническое собеседование PHP-разработчика. ЗП от 165к с фокусом на архитектуру веб-приложений, работу с базами данных и брокерами сообщений
💬 Вопросы:
- Как бы вы описали паттерн проектирования Singleton?
- Что такое трейты в PHP?
- Что такое Dockerfile?
- Объясните, что такое обмен (Exchange)?
- Что такое микросервисная архитектура?
👉 Все вопросы из этого собеседования (31)
📣 Хочешь больше собесов?
Подпишись на наш главный канал
#Собес #git_хуки
🤔 Из чего состоят “хуки” в Git?
💬 Кратко:
Хуки в Git — это скрипты, которые выполняются автоматически при определённых действиях в репозитории, таких как коммиты, слияния или пуши. Они находятся в директории
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Из чего состоят “хуки” в Git?
💬 Кратко:
Хуки в Git — это скрипты, которые выполняются автоматически при определённых действиях в репозитории, таких как коммиты, слияния или пуши. Они находятся в директории
.git/hooks и могут быть настроены для выполнения различных задач.📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
#repository #кибербезопасность
📚 Структурированный 90-дневный план обучения кибербезопасности предназначенный для начинающих специалистов
План обучения, разделённый на ежедневные задания, охватывающие ключевые темы
Перейти к материалу
👉 База вопросов 👉 Новости
📚 Структурированный 90-дневный план обучения кибербезопасности предназначенный для начинающих специалистов
План обучения, разделённый на ежедневные задания, охватывающие ключевые темы
Перейти к материалу
👉 База вопросов 👉 Новости
#Собес #query_builder #request #laravel
🤔 Что такое Query Builder в Laravel?
💬 Кратко:
Query Builder в Laravel — это инструмент, который позволяет строить запросы к базе данных с использованием PHP-кода, избегая необходимости писать SQL-запросы вручную. Он предоставляет удобные методы для создания, выполнения и кэширования запросов.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Что такое 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
Blue-green — это способ выкатывать новую версию без простоя и практически с мгновенным откатом на старую версию если что-то пошло не так
У вас есть два окружения — blue (текущий прод) и green (новая версия).
Вы обновляете green, прогоняете smoke-тесты, а потом просто переключаете трафик на него.
Переключение обычно занимает миллисекунды — достаточно указать load balancer’у новый бэкенд.
При этом мы имеем такую же простую возможность отката, если что-то все таки пошло не так - переключаем трафик на blue и спокойно правим green
Но есть важный нюанс - база данных и любые другие контракты данных должны быть совместимы между соседними версиями.
Обе версии (blue и green) должны уметь работать с одной и той же схемой БД одновременно. То же самое касается схемы кеша, форматов сообщений, протоколов очередей — разве что здесь можно выкрутиться версионированием ключей.
Blue-green не решает все проблемы, но снимает главный страх релизов:
“если что-то поломается, мы вернём всё назад за секунду”.
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
Mikhail Savin
Ментор PHP backend GitHub: https://github.com/savinmikhail
#Собес #design #patterns #strategy
🤔 Какие паттерны проектирования знаете? Где применяли?
💬 Кратко:
Паттерны проектирования - это проверенные решения распространенных проблем в разработке. Адаптер используется для совместимости разных интерфейсов, Фабрика создает объекты без указания точного класса, Стратегия позволяет менять алгоритмы поведения, Observer реализует систему событий. Эти паттерны помогают создавать гибкий, поддерживаемый и масштабируемый код в реальных проектах.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Какие паттерны проектирования знаете? Где применяли?
💬 Кратко:
Паттерны проектирования - это проверенные решения распространенных проблем в разработке. Адаптер используется для совместимости разных интерфейсов, Фабрика создает объекты без указания точного класса, Стратегия позволяет менять алгоритмы поведения, Observer реализует систему событий. Эти паттерны помогают создавать гибкий, поддерживаемый и масштабируемый код в реальных проектах.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
#Собес #inheritance #table #data_hierarchy
🤔 Что такое таблицы с наследованием в PostgreSQL и зачем они нужны?
💬 Кратко:
В PostgreSQL таблицы могут наследовать структуру и данные другой таблицы, что полезно для разделения данных или создания иерархий. Например, можно создать таблицы для разных типов пользователей, которые наследуют общие поля из родительской таблицы.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Что такое таблицы с наследованием в PostgreSQL и зачем они нужны?
💬 Кратко:
В PostgreSQL таблицы могут наследовать структуру и данные другой таблицы, что полезно для разделения данных или создания иерархий. Например, можно создать таблицы для разных типов пользователей, которые наследуют общие поля из родительской таблицы.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
#course #ии-помощник
📚 Курс PHP
Изучите язык программирования PHP в интерактивной онлайн среде. Десятки заданий прямо в браузере с поддержкой ИИ-ассистента
Перейти к материалу
👉 База вопросов 👉 Новости
📚 Курс PHP
Изучите язык программирования PHP в интерактивной онлайн среде. Десятки заданий прямо в браузере с поддержкой ИИ-ассистента
Перейти к материалу
👉 База вопросов 👉 Новости
#Собес #upload #file #form
🤔 Как PHP обрабатывает загрузку файлов?
💬 Кратко:
PHP обрабатывает загрузку файлов через суперглобальный массив
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Как PHP обрабатывает загрузку файлов?
💬 Кратко:
PHP обрабатывает загрузку файлов через суперглобальный массив
$_FILES. Файл отправляется через форму с атрибутом enctype="multipart/form-data", и PHP сохраняет информацию о загружаемом файле в $_FILES, включая имя файла, тип и путь.📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Scale Cube: 3 способа масштабироваться
Когда система перестаёт держать нагрузку, приходит время масштабироваться
Обычно делают так:
- добавили инстансы → стало не лучше
- распилили на микросервисы → стало хуже
Scale Cube модель предлагает 3 оси. Каждая закрывает свой bottleneck:
X - клонирование
Больше одинаковых копий сервиса за балансером.
Помогает, когда упираетесь в CPU/IO на приложении.
Y - разделение ответственности
Делите по функциям: поиск, отчёты, платежи.
Нужно, когда одна часть системы “убивает” остальных и её надо изолировать/масштабировать отдельно.
Z - разделение по данным (sharding/partitioning)
Делите данные по ключу (
Применяется когда потолок - данные: одна БД/таблица, hot keys, локи. Запись и чтение можно масштабировать отдельно
Например, если узкое место - база, то:
- X почти не поможет (вы просто сильнее нагрузите БД)
- микросервисы чаще ухудшат (больше запросов + распределённые транзакции/консистентность)
- а вот Z может дать рост capacity
Выбирать ось надо по bottleneck’у.
Если вы не можете назвать узкое место цифрами - вы не масштабируете, а только усложняете систему.
🚀 Пост Guru PHP: @msavin_dev
Когда система перестаёт держать нагрузку, приходит время масштабироваться
Обычно делают так:
- добавили инстансы → стало не лучше
- распилили на микросервисы → стало хуже
Scale Cube модель предлагает 3 оси. Каждая закрывает свой bottleneck:
X - клонирование
Больше одинаковых копий сервиса за балансером.
Помогает, когда упираетесь в CPU/IO на приложении.
Y - разделение ответственности
Делите по функциям: поиск, отчёты, платежи.
Нужно, когда одна часть системы “убивает” остальных и её надо изолировать/масштабировать отдельно.
Z - разделение по данным (sharding/partitioning)
Делите данные по ключу (
user_id, region).Применяется когда потолок - данные: одна БД/таблица, hot keys, локи. Запись и чтение можно масштабировать отдельно
Например, если узкое место - база, то:
- X почти не поможет (вы просто сильнее нагрузите БД)
- микросервисы чаще ухудшат (больше запросов + распределённые транзакции/консистентность)
- а вот Z может дать рост capacity
Выбирать ось надо по bottleneck’у.
Если вы не можете назвать узкое место цифрами - вы не масштабируете, а только усложняете систему.
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
Mikhail Savin
Ментор PHP backend GitHub: https://github.com/savinmikhail
#Собес #factory #method
🤔 Как работает паттерн «Фабричный метод» и когда его целесообразно использовать?
💬 Кратко:
Фабричный метод определяет интерфейс для создания объектов, но позволяет подклассам решать, какой конкретный объект создавать. Это избавляет клиентский код от явного вызова
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Как работает паттерн «Фабричный метод» и когда его целесообразно использовать?
💬 Кратко:
Фабричный метод определяет интерфейс для создания объектов, но позволяет подклассам решать, какой конкретный объект создавать. Это избавляет клиентский код от явного вызова
new и даёт возможность легко подменять создаваемые типы. Фабрика полезна, когда создание объекта — это не просто new, а включает выбор конкретного класса, логику конфигурации или условия. Паттерн хорошо подходит для расширяемых систем и при работе с разными вариантами объектов одного семейства.📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал