PrepBro
Профессии
PrepBro
Профессия:

Подготовка

  • Вопросы1563
  • Задачи21

Аналитика

  • hh статистика
  • Анализ резюме

Практика

  • Тестовое собеседование
  • Mock-собеседование
  • Менторы

Поддержка / отзывы

Telegram админа
Профессия:

Подготовка

  • Вопросы1563
  • Задачи21

Аналитика

  • hh статистика
  • Анализ резюме

Практика

  • Тестовое собеседование
  • Mock-собеседование
  • Менторы

Поддержка / отзывы

Telegram админа
Все 24 профессии
Android DeveloperData AnalystSystem Analyst1С DeveloperiOS DeveloperBusiness AnalystJava DeveloperData ScientistQA EngineerQA AutomationPHP BackendC/C++ BackendDevOps EngineerIT Project ManagerFrontend DeveloperNode.js BackendUnity DeveloperC# BackendProduct AnalystFlutter DeveloperPython DeveloperIT Product ManagerGo DeveloperData Engineer

© 2026 PrepBro. Все права защищены.

Telegram-бот

Вопросы по PHP Backend

Что такое непрерывная интеграция и развёртывание в PHP?
1.0 Junior🔥 30💬 1

Что такое непрерывная интеграция и развёртывание (CI/CD) в PHP?

Непрерывная интеграция (Continuous Integration, CI) и непрерывное развёртывание/доставка (Continuous Deployment/Delivery, CD) — это методологии разработки программного обеспечения, направленные на автоматизацию процессов сборки, тестирования и вывода продукта в эксплуатацию. В контексте PHP-проектов они позволяют значительно повысить качество кода, скорость разработки и стабильность приложений.

Непрерывная интеграция (CI) в PHP

CI — это практика частого (обычно ежедневного) автоматического слияния изменений от всех разработчиков в общую ветку репозитория (например, в main или master) и выполнения ряда автоматизированных проверок.

Основные этапы CI для PHP-проекта:

Читать полностью ->
Как работает синтаксис стрелочных функций в PHP?
1.3 Junior🔥 30💬 1

Как работает синтаксис стрелочных функций в PHP?

Стрелочные функции (Arrow Functions) появились в PHP 7.4 и представляют более краткий и удобный синтаксис для создания коротких замыканий (closures). Их главная цель — упростить код, особенно в контексте операций с массивами и обработчиков событий, где часто используются простые функции.

Основные особенности синтаксиса

Синтаксис стрелочных функций отличается от классических анонимных функций следующими ключевыми моментами:

Читать полностью ->
Как реализовать паттерн Фабрика в PHP?
1.0 Junior🔥 30💬 1

Реализация паттерна Фабрика в PHP

Паттерн Фабрика (Factory Pattern) — это порождающий паттерн проектирования, который предоставляет интерфейс для создания объектов в суперклассе, позволяя подклассам изменять тип создаваемых объектов. В PHP он особенно полезен для управления созданием объектов с общим интерфейсом.

Основные типы фабрик в PHP

Существует несколько разновидностей паттерна Фабрика:

  1. Простая фабрика (Simple Factory) — отдельный класс или метод, отвечающий за создание объектов
  2. Фабричный метод (Factory Method) — делегирование создания объектов подклассам
  3. Абстрактная фабрика (Abstract Factory) — создание семейств связанных объектов

Реализация Простой фабрики

Простая фабрика — это отдельный класс, который инкапсулирует логику создания объектов:

<?php

// Интерфейс продукта
interface Notification {
    public function send(string $message): void;
}
Читать полностью ->
Приведи пример основных принципов REST API
1.6 Junior🔥 30💬 2

Основные принципы REST API на примере системы управления книгами

REST (Representational State Transfer) — это архитектурный стиль для построения распределенных систем, основанный на шести фундаментальных принципах. Рассмотрим их на примере API для библиотеки книг.

1. Единообразие интерфейса (Uniform Interface)

Это центральный принцип REST, включающий четыре ограничения:

  • Идентификация ресурсов: Каждый ресурс имеет уникальный URI
GET /api/books/123
GET /api/authors/456
  • Манипуляция ресурсами через представления: Клиент работает с представлением ресурса
PUT /api/books/123
Content-Type: application/json

{
  "title": "Обновленное название",
  "author": "Иван Петров"
}
Читать полностью ->
Для чего нужны ключи в БД?
1.3 Junior🔥 30💬 2

Назначение ключей в базах данных

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

Основные типы ключей и их цели

1. Первичный ключ (Primary Key)

Первичный ключ — это уникальный идентификатор каждой записи в таблице. Его основные задачи:

  • Гарантирует уникальность: Никакие две строки не могут иметь одинаковое значение первичного ключа
  • Обеспечивает целостность сущности: Каждый объект в таблице может быть однозначно идентифицирован
  • Служит точкой ссылки для внешних ключей из других таблиц
  • Автоматически создает кластеризованный индекс (в большинстве СУБД), что физически упорядочивает данные на диске
Читать полностью ->
Что такое SQL-инъекция?
1.0 Junior🔥 30💬 1

SQL-инъекция (SQL Injection)

SQL-инъекция — это уязвимость безопасности, когда атакующий вставляет вредоносный SQL код в параметры приложения, чтобы изменить структуру или логику SQL запроса. Это одна из самых опасных уязвимостей.

Как работает SQL-инъекция

// Уязвимый код (НИКОГДА ТАК НЕ ДЕЛАЙ!)
$email = $_GET['email'];
$query = "SELECT * FROM users WHERE email = '" . $email . "'";
$result = $pdo->query($query);

// Если пользователь введёт:
// email: admin@example.com' OR '1'='1
// Запрос станет:
// SELECT * FROM users WHERE email = 'admin@example.com' OR '1'='1'
// Это вернёт ВСЕ пользователей! Обход безопасности.

// Ещё хуже:
// email: admin@example.com'; DROP TABLE users; --
// Запрос:
// SELECT * FROM users WHERE email = 'admin@example.com'; DROP TABLE users; --'
// Таблица users будет удалена!

Типы SQL-инъекций

Читать полностью ->
Как структурировать PHP-проект?
2.3 Middle🔥 29💬 1

Структура PHP-проекта: современный подход

Структура PHP-проекта определяет его масштабируемость, тестируемость и поддерживаемость. В отличие устаревших подходов с единой папкой src, современные проекты следуют принципам чистой архитектуры и Domain-Driven Design (DDD). Я рекомендую следующую структуру для enterprise-приложений:

1. Ключевые директории проекта

Читать полностью ->
Расскажи про свой опыт работы с тестированием
1.0 Junior🔥 29💬 1

Мой опыт в тестировании PHP-приложений

За более чем 10 лет работы с PHP-бэкендом я выработал комплексный подход к тестированию, который охватывает все уровни — от модульного до приемочного. Я считаю тестирование неотъемлемой частью процесса разработки, а не отдельной фазой. Вот ключевые аспекты моего опыта:

Основные типы тестирования в моей практике

  1. Модульное тестирование (Unit Testing)
    • Пишу тесты с использованием PHPUnit для проверки отдельных компонентов (классов, методов)
    • Следование принципам FIRST (Fast, Isolated, Repeatable, Self-validating, Timely)
    • Использование мок-объектов и стабов для изоляции тестируемого кода
Читать полностью ->
Расскажи про последнее место работы
1.0 Junior🔥 29💬 1

📊 Проект и роль

На последнем месте работы я занимал позицию Senior PHP Backend Developer в продуктовой компании, разрабатывающей высоконагруженную SaaS-платформу для автоматизации бизнес-процессов (B2B сегмент). Моя команда отвечала за ядро системы — модуль обработки и маршрутизации бизнес-событий (event-driven workflow engine), который являлся центральным элементом архитектуры.

🔍 Ключевые обязанности и достижения

  • Разработка и оптимизация ядра системы:
    • Переписал критический модуль асинхронной обработки очередей сообщений (RabbitMQ) с использованием Symfony Messenger, что увеличило пропускную способность на 40% и улучшило мониторинг.
    • Спроектировал и внедрил кеширование многоуровневых конфигураций workflow с использованием Redis (техника cache-aside). Это снизило среднее время отклика API с ~120 мс до ~35 мс для ключевых эндпоинтов.
Читать полностью ->
Приведи пример подзапроса
1.0 Junior🔥 29💬 1

Пример использования подзапроса (subquery) в SQL для PHP Backend

В контексте разработки backend на PHP, понимание и использование подзапросов (subqueries) в SQL критически важно для эффективной работы с базами данных. Подзапрос — это SQL-запрос, вложенный внутри другого запроса (в SELECT, WHERE, FROM, INSERT, UPDATE, DELETE). Он позволяет выполнять сложные операции фильтрации, агрегации и сравнения данных на основе результатов другого запроса.

Типичный пример подзапроса в блоке WHERE

Рассмотрим классический сценарий: выборка пользователей (users) из базы данных, которые совершили хотя бы одну покупку (orders).

-- Подзапрос используется для фильтрации в WHERE
SELECT id, name, email
FROM users
WHERE id IN (
    SELECT user_id
    FROM orders
    WHERE status = 'completed'
);
Читать полностью ->
Для чего нужен инкремент?
1.3 Junior🔥 29💬 1

Назначение и применение инкремента в программировании

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

Основные цели использования инкремента

  1. Управление циклами и итерациями Наиболее частое применение инкремента — организация циклов, где необходимо последовательно перебирать элементы массива, строки или выполнять блок кода определённое количество раз.
   // Пример использования в цикле for
   for ($i = 0; $i < 10; $i++) {
       echo "Итерация номер: " . $i . "\n";
   }
   
   // Перебор элементов массива
   $users = ['Анна', 'Борис', 'Виктор'];
   for ($index = 0; $index < count($users); $index++) {
       echo "Пользователь: " . $users[$index] . "\n";
   }
Читать полностью ->
На каком стеке были прошлые проекты?
1.3 Junior🔥 29💬 1

На каком стеке были прошлые проекты?

В моей карьере я работал с разнообразным стеком технологий, эволюционируя от монолитов к микросервисам. Дам развёрнутый обзор.

Ранние проекты (2012-2016)

Стек 1: классический LAMP

- Linux (Ubuntu 12.04)
- Apache
- MySQL
- PHP 5.3-5.5
- jQuery, Bootstrap для фронта

Это был мой первый опыт. Писал CRM системы, интеграции с 1C, админ-панели. Технология уходит в прошлое, но дала мне фундамент: SQL, HTTP, HTML/CSS.

Стек 2: Zend Framework + MySQL

Backend:
- Zend Framework 1.x (MVC)
- MySQL 5.1
- Memcached для кэша
- jQuery для AJAX
- HTML5/CSS3

Деплой: VPS, SSH, git, rsync

Реализовал несколько e-commerce сайтов. Единая архитектура для всех проектов.

Переходный период (2016-2018)

Стек 3: Laravel + PostgreSQL

Backend:
- Laravel 5.3-5.6
- PostgreSQL 9.6
- Redis для кэша и сессий
- Elasticsearch для поиска
- Message Queue: Laravel Horizon (Redis-based)

Frontend:
- Vue.js 2.x
- Webpack
- Bootstrap 4
Читать полностью ->
Что такое индексы в БД?
1.0 Junior🔥 29💬 1

Индексы в базах данных

Индекс - это структура данных, которая ускоряет поиск и сортировку информации в таблице БД. Это один из самых важных инструментов для оптимизации производительности.

Как работают индексы?

Без индекса (Full Table Scan):        С индексом (B-tree):

Поиск id=1000:                       Поиск id=1000:
Читаем каждую строку:                Быстрый поиск по структуре B-tree:
┌──────┐                              ┌────────┐
│ id 1 │ ❌                            │ 500    │  (разделяет данные)
│ id 2 │ ❌                            /        \
│ id 3 │ ❌                           /          \
...                                  ┌──────┐  ┌──────┐
│id1000│ ✅ Found!                  │1-500 │  │500+ │
                                     │      │  │      │
                                     └──────┘  └──────┘
                                              ↓
                                         Найдено за O(log n)

Типы индексов

Читать полностью ->
Что такое функция?
1.0 Junior🔥 28💬 1

Что такое функция в программировании

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

Основные цели и преимущества функций

Функции в backend PHP-разработке служат нескольким ключевым целям:

Читать полностью ->
Что такое extends?
1.0 Junior🔥 28💬 1

Что такое extends в PHP (и ООП в целом)?

В PHP и объектно-ориентированном программировании (ООП) ключевое слово extends является фундаментальным механизмом, который реализует концепцию наследования (inheritance). Это позволяет одному классу (называемому классом-наследником или подклассом) получить доступ и использовать свойства (поля), методы (функции) и, в определенной степени, поведение другого класса (называемого родительским классом или суперклассом).

Основная цель и принцип работы

Читать полностью ->
Какой тип HTTP-запроса отправляется при переходе на сайт?
1.3 Junior🔥 28💬 2

Основной тип HTTP-запроса при переходе на сайт

При обычном переходе на сайт через адресную строку браузера, по клику на ссылку или через закладку браузер отправляет HTTP-запрос типа GET. Это основной и наиболее распространённый метод, используемый для получения данных с сервера.

Детали запроса GET

  • Назначение: Получение (извлечение) ресурса с сервера. Он считается идемпотентным (повторение запроса не изменяет состояние сервера) и безопасным (не должен изменять данные на сервере).
  • Передача параметров: Параметры передаются в строке запроса (URL) после знака ?.
GET /index.php?page=home&sort=date HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0...
Читать полностью ->
Как справишься с ситуацией когда заказчик недоволен?
1.2 Junior🔥 28💬 1

Стратегия взаимодействия с недовольным заказчиком

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

Первый этап: Активное слушание и анализ

Первым и самым критическим шагом является полное и непредвзятое выслушивание заказчика.

  • Я не прерываю, не предлагаю решения сразу и не защищаю работу в этот момент.
  • Я задаю открытые вопросы для уточнения: "Что именно не соответствует вашим ожиданиям?", "Когда вы заметили проблему?", "Как это влияет на ваш бизнес-процесс?"
  • Я фиксирую все детали, чтобы отделить субъективные впечатления от объективных технических или функциональных проблем.
Читать полностью ->
Как добавить данные в REST API?
1.0 Junior🔥 28💬 2

Как добавить данные в REST API: методы и практика

В REST API добавление данных (создание новых ресурсов) реализуется через метод POST (или иногда PUT для создания с известным идентификатором). Это один из фундаментальных принципов REST: использование HTTP методов для выполнения операций CRUD (Create, Read, Update, Delete).

HTTP метод POST для создания ресурсов

Основной способ — отправка HTTP запроса с методом POST на endpoint коллекции ресурсов. Например, для создания нового пользователя:

POST /api/users
Host: example.com
Content-Type: application/json

{
    "name": "Иван Петров",
    "email": "ivan@example.com",
    "age": 30
}

Ключевые моменты:

  • URL указывает на коллекцию (/api/users), а не на конкретный ресурс.
  • Content-Type определяет формат данных (обычно application/json).
  • Тело запроса содержит данные нового ресурса в формате JSON.

Пример реализации в PHP (с фреймворком)

Читать полностью ->
Как работают сессии и куки в PHP?
1.0 Junior🔥 27💬 2

Механизм работы сессий и куки в PHP

Веб-протокол HTTP по своей природе статистичен — каждый запрос обрабатывается независимо, без сохранения состояния между запросами. Для создания интерактивных веб-приложений необходимы механизмы сохранения данных между запросами. В PHP для этого используются сессии (sessions) и куки (cookies), которые тесно взаимосвязаны, но выполняют разные функции.

Куки (Cookies): хранение на стороне клиента

Куки — это небольшие текстовые данные (обычно до 4 КБ), которые сервер отправляет браузеру, а браузер возвращает их при последующих запросах к тому же домену.

Основные характеристики куки:

  • Хранятся на стороне клиента (в браузере пользователя)
  • Имеют ограниченный срок жизни (expires/max-age)
  • Передаются в HTTP-заголовках каждого запроса
  • Уязвимы для клиентских манипуляций

Работа с куки в PHP:

Читать полностью ->
Как работать с массивами и их функциями?
1.3 Junior🔥 27💬 1

Работа с массивами в PHP: ключевые аспекты и функции

В PHP массивы — это гибкие структуры данных, которые могут выступать как индексированные списки, так и ассоциативные карты (хэш-таблицы). Работа с ними включает создание, модификацию, итерацию и применение встроенных функций.

Типы массивов и создание

PHP поддерживает два основных типа массивов:

  • Индексированные массивы — с числовыми ключами, начинающимися с 0.
  • Ассоциативные массивы — с строковыми ключами, представляющими пары "ключ-значение".

Создать массив можно несколькими способами:

// Явное создание через array() или []
$indexed = array('яблоко', 'банан', 'апельсин');
$assoc = ['name' => 'Иван', 'age' => 30];

// Динамическое добавление элементов
$dynamic = [];
$dynamic[] = 'первый элемент'; // ключ 0
$dynamic['ключ'] = 'значение';

Ключевые функции для работы с массивами

PHP предлагает более 100 встроенных функций для манипуляции массивами. Их можно разделить на категории:

Читать полностью ->
Что такое JWT токены? Как реализовать аутентификацию через JWT в PHP?
2.0 Middle🔥 27💬 1

JWT (JSON Web Tokens) - обзор

JWT (JSON Web Tokens) - это открытый стандарт (RFC 7519) для создания токенов доступа, основанных на JSON. Это компактный, автономный способ безопасной передачи информации между сторонами в виде JSON-объекта. Информация может быть проверена и доверена, поскольку она цифрово подписана с использованием секретного ключа или пары открытый/закрытый ключ.

Структура JWT

JWT состоит из трех частей, разделенных точками:

header.payload.signature
  1. Header (заголовок) - содержит тип токена и алгоритм хеширования
  2. Payload (полезная нагрузка) - содержит утверждения (claims) с данными пользователя
  3. Signature (подпись) - создается путем кодирования header и payload с секретным ключом
// Пример payload
{
  "sub": "1234567890",
  "name": "Иван Иванов",
  "iat": 1516239022,
  "exp": 1516242622
}

Реализация JWT аутентификации в PHP

Читать полностью ->
Что такое WHERE в SQL?
1.0 Junior🔥 27💬 1

Что такое WHERE в SQL?

WHERE — это ключевое слово (предложение) в языке SQL, которое используется для фильтрации записей (строк) в операциях выборки (SELECT), обновления (UPDATE), удаления (DELETE) и некоторых других. Его основная задача — ограничить набор данных, с которыми работает запрос, только теми строками, которые удовлетворяют определённому условию (логическому выражению).

Основная цель и синтаксис

Предложение WHERE всегда следует после указания таблицы (например, после FROM table_name в SELECT). Оно задаёт условие, которое вычисляется для каждой строки. Если условие возвращает TRUE, строка включается в результат или затрагивается операцией. Синтаксис базового запроса:

SELECT column1, column2
FROM table_name
WHERE condition;

Ключевые возможности и операторы

Читать полностью ->
Что вернется если сделать SELECT?
1.3 Junior🔥 27💬 2

Общая концепция выполнения SELECT

Если просто написать оператор SELECT без указания таблицы и условий, результат будет зависеть от конкретной СУБД и контекста выполнения. В большинстве реляционных баз данных простой SELECT без FROM считается невалидным синтаксисом и вызовет ошибку. Однако есть важные исключения и особенности.

Поведение в различных СУБД

MySQL и MariaDB

В MySQL/MariaDB можно выполнить SELECT без FROM для вычисления выражений:

SELECT 1 + 1;
-- Вернет: 2
SELECT NOW(), VERSION();
-- Вернет текущее время и версию СУБД

PostgreSQL

PostgreSQL также поддерживает SELECT без FROM:

SELECT 2 * 3;
-- Вернет: 6

SQLite

SQLite ведет себя аналогично:

SELECT 'Hello' || ' World';
-- Вернет: 'Hello World'

Oracle Database

В Oracle требуется указать FROM, но можно использовать специальную псевдотаблицу DUAL:

SELECT 1 + 1 FROM dual;
-- Вернет: 2
Читать полностью ->
Какими инструментами пользуешься для автоматического тестирования?
1.0 Junior🔥 27💬 3

Инструменты для автоматического тестирования в PHP Backend

Для автоматизации тестирования в проектах на PHP я использую комплексный набор инструментов, охватывающий различные уровни тестирования: unit testing, integration testing, functional testing, и performance testing. Эта стратегия позволяет обеспечить высокое качество кода и надежность приложения.

Основные инструменты и их применение

1. Unit Testing (Модульное тестирование)

Для тестирования отдельных компонентов и классов я преимущественно использую PHPUnit. Это стандартный и наиболее мощный фреймворк для unit-тестирования в PHP-мире.

<?php
namespace App\Tests;

use PHPUnit\Framework\TestCase;
use App\Service\UserValidator;
Читать полностью ->
Какие у тебя сильные стороны?
1.0 Junior🔥 27💬 1

Мои сильные стороны как PHP Backend-Lead разработчика

С 10+ лет опыта работы с экосистемой PHP и веб-разработкой в целом, я сформировал широкий спектр технических и архитектурных компетенций. Мои сильные стороны можно разделить на несколько ключевых категорий.

Глубокое понимание PHP и его экосистемы

Читать полностью ->
Какие инструменты используются для валидации запросов в Laravel?
1.0 Junior🔥 27💬 1

Инструменты валидации запросов в Laravel

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

1. Встроенный валидатор Laravel

Базовый и наиболее часто используемый инструмент - это встроенная система валидации через фасад Validator или метод validate() контроллера.

// В контроллере
public function store(Request $request)
{
    $validated = $request->validate([
        'email' => 'required|email|unique:users,email',
        'password' => 'required|min:8|confirmed',
        'age' => 'required|integer|min:18',
        'terms' => 'accepted'
    ]);
    
    // Данные уже валидированы
    User::create($validated);
}

2. Form Request Validation

Для сложной валидации я использую Form Request - специальные классы, которые инкапсулируют логику валидации.

Читать полностью ->
Какие знаешь средства для выбора по идентификатору либо значению в базе данных?
1.3 Junior🔥 27💬 1

Средства выбора данных по идентификатору или значению в базах данных

Выбор данных по идентификатору или значению — одна из фундаментальных операций при работе с базами данных. В контексте PHP Backend-разработки я разделяю средства на несколько категорий: язык запросов SQL, ORM-библиотеки, построители запросов и специализированные инструменты.

1. Чистый SQL (наиболее прямой способ)

Для выборки по идентификатору или значению используются операторы SELECT с условием WHERE.

-- Выбор по идентификатору (обычно PRIMARY KEY)
SELECT * FROM users WHERE id = 42;

-- Выбор по значению поля
SELECT * FROM products WHERE category = 'electronics' AND price > 1000;

-- Выбор с использованием IN для нескольких значений
SELECT * FROM orders WHERE status_id IN (1, 3, 5);
Читать полностью ->
Какие методы позволяют избежать SQL-инъекций?
2.0 Middle🔥 27💬 1

Методы защиты от SQL-инъекций в PHP

SQL-инъекция — это одна из наиболее опасных и распространённых уязвимостей веб-приложений, когда злоумышленник может внедрить произвольный SQL-код в запросы к базе данных. Для защиты в PHP существует несколько надёжных подходов, которые следует применять комплексно.

1. Использование подготовленных выражений (Prepared Statements)

Это наиболее эффективный и рекомендуемый метод. Суть в том, что SQL-запрос и данные отправляются в СУБД раздельно, что исключает интерпретацию данных как части команды.

С PDO (PHP Data Objects)

// Создание подключения
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'password');
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); // Важно отключить эмуляцию

// Подготовка запроса с плейсхолдерами
$stmt = $pdo->prepare('SELECT * FROM users WHERE email = :email AND status = :status');
Читать полностью ->
Как дебажишь код?
1.0 Junior🔥 27💬 3

Отладка (Debugging) PHP-кода: мой подход как Senior Backend Developer

Отладка — это системный процесс поиска и устранения ошибок. В PHP я использую многоуровневую стратегию, сочетающую инструментарий, методологию и проактивные практики.

Основные инструменты и их применение

1. Xdebug — основной инструмент промышленной отладки

Это расширение PHP, которое интегрируется с IDE. Моя стандартная настройка в php.ini:

zend_extension=xdebug.so
xdebug.mode=develop,debug
xdebug.start_with_request=yes
xdebug.client_port=9003
xdebug.discover_client_host=true
xdebug.idekey=PHPSTORM

Ключевые возможности Xdebug:

  • Пошаговое выполнение (Step Into, Step Over, Step Out) через точки останова
  • Инспекция переменных в реальном времени с просмотром сложных структур
  • Трассировка стека вызовов (stack trace) с параметрами функций
  • Профилирование для поиска узких мест производительности
Читать полностью ->
Для чего нужен кэш?
1.0 Junior🔥 27💬 1

🚀 Для чего нужен кэш в Backend-разработке (PHP)?

Кэш — это временное хранилище часто используемых данных, которое позволяет значительно ускорить работу приложения, снизить нагрузку на основные системы (базы данных, внешние API) и улучшить пользовательский опыт. В контексте PHP Backend кэширование решает ключевую проблему: избыточные вычисления или повторяющиеся запросы к медленным источникам данных.


🔍 Основные цели кэширования

1. Повышение производительности

Кэш хранит данные в быстродоступных носителях (оперативная память, SSD), что сокращает время отклика. Например:

  • Результаты тяжелых SQL-запросов.
  • Сгенерированные HTML-страницы (полностью или фрагментами).
  • Данные от внешних API (курсы валют, погода).

Пример кэширования запроса к БД в PHP с использованием Redis:

<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$cacheKey = 'top_products_2024';
Читать полностью ->
В чем разница между composer.json и composer.lock?
1.0 Junior🔥 27💬 2

Различие между composer.json и composer.lock

Основное различие между composer.json и composer.lock заключается в их ролях в управлении зависимостями PHP-проекта. composer.json — это декларативный файл, где вы определяете, какие зависимости нужны проекту, а composer.lock — это фиксационный файл, который точно фиксирует установленные версии всех зависимостей, обеспечивая воспроизводимость сборки.


composer.json — Файл объявления зависимостей

composer.json — это файл конфигурации, создаваемый разработчиком, в котором указываются требования к проекту. Он определяет:

  • Какие пакеты и библиотеки необходимы для работы проекта.
  • Допустимые версии этих пакетов (с использованием семантического версионирования).
  • Дополнительные настройки, такие как автозагрузка, скрипты для событий Composer, репозитории и метаданные проекта.

В composer.json вы можете указать зависимости в секциях require (для production) и require-dev (для разработки). Пример:

Читать полностью ->
Что значит буква S в SOLID?
1.0 Junior🔥 27💬 1

Что значит буква S в SOLID?

Буква S в SOLID обозначает Single Responsibility Principle (Принцип единственной ответственности). Это один из самых важных и часто использующихся принципов чистого кода.

Определение

SRP гласит: Класс должен иметь одну и только одну причину для изменения. Другими словами, класс должен отвечать за одну область функциональности.

Каждый класс должен иметь одну зону ответственности и полностью инкапсулировать эту ответственность.

Плохой пример (нарушение SRP)

Читать полностью ->
Как организовать транзакции в Laravel/PHP? Когда они нужны?
2.0 Middle🔥 26💬 1

Транзакции в Laravel/PHP: организация и практическое применение

Транзакции — это механизм обеспечения атомарности операций с базой данных, при котором группа запросов выполняется как единое целое. В Laravel работа с транзакциями организована через компонент Database Query Builder и Eloquent ORM, предоставляя несколько удобных подходов.

Основные методы организации транзакций в Laravel

1. Ручное управление через DB фасад

use Illuminate\Support\Facades\DB;

try {
    DB::beginTransaction();
    
    // Выполняем несколько операций с базой данных
    $user = User::create(['name' => 'John', 'email' => 'john@example.com']);
    $profile = Profile::create(['user_id' => $user->id, 'bio' => 'Developer']);
    $order = Order::create(['user_id' => $user->id, 'amount' => 100]);
    
    DB::commit();
    
} catch (\Exception $e) {
    DB::rollBack();
    throw $e;
}

2. Автоматическое управление через метод transaction()

Читать полностью ->
Является ли RESTful протоколом?
1.2 Junior🔥 26💬 1

Является ли REST архитектурным стилем или протоколом?

REST (Representational State Transfer) — это не протокол, а архитектурный стиль (архитектурный подход или набор принципов) для построения распределенных систем, в частности веб-сервисов. Это принципиально важное различие, которое часто становится причиной путаницы. REST определяет правила, ограничения и рекомендации по проектированию, а не низкоуровневые детали обмена сообщениями, такие как форматы фреймов или коды ошибок, что характерно для протоколов (например, HTTP, FTP, SMTP).

Читать полностью ->
Какой вклад внес в прошлый проект?
1.0 Junior🔥 26💬 3

Вклад в прошлый проект (Микросервисная платформа для обработки финансовых транзакций)

В качестве Lead Backend Developer в проекте по созданию высоконагруженной микросервисной платформы для обработки платежей (до 10k транзакций/сек), мой вклад охватывал архитектурные решения, разработку ключевых компонентов, оптимизацию и внедрение процессов.

Архитектура и ключевые компоненты

Основной задачей было переход от монолита к микросервисной архитектуре с четким разделением ответственности. Я отвечал за:

  • Разработку ядра системы (Transaction Processing Service) на PHP 8.1 с использованием Symfony 6.
  • Реализацию асинхронной обработки через интеграцию с RabbitMQ. Это позволило отделить прием запроса от его сложной обработки (валидация, проверка рисков, списание средств).
Читать полностью ->
Как работает чистый SQL-запрос?
1.0 Junior🔥 26💬 1

Как работает чистый SQL-запрос?

Чистый SQL-запрос — это команда, отправленная напрямую к серверу базы данных (например, MySQL, PostgreSQL) без использования промежуточных абстракций ORM (Object-Relational Mapping) или конструкторов запросов. Его выполнение — это последовательный процесс взаимодействия клиентского приложения (например, PHP-скрипта) и сервера БД.

Механизм выполнения SQL-запроса

Процесс можно разделить на следующие этапы:

1. Формирование и отправка запроса

На уровне приложения (например, в PHP) запрос формируется как строка и передается через драйвер базы данных (например, PDO или mysqli).

// Пример на PHP с использованием PDO
$sql = "SELECT id, name FROM users WHERE email = :email";
$stmt = $pdo->prepare($sql);
$stmt->execute(['email' => 'user@example.com']);
Читать полностью ->
Что такое http?
1.0 Junior🔥 26💬 2

Что такое HTTP

HTTP (HyperText Transfer Protocol) — это протокол прикладного уровня для передачи гипертекстовых документов, прежде всего, в формате HTML. Это фундаментальный протокол, лежащий в основе взаимодействия в Всемирной паутине (World Wide Web). Он работает по модели «клиент-сервер»: клиент (чаще всего веб-браузер) отправляет запрос, а сервер возвращает ответ.

Основные характеристики и принципы работы

  • Текстовый протокол: Запросы и ответы состоят из читаемого текста, что облегчает отладку.
  • Работает поверх TCP/IP: Обычно использует порт 80 (для HTTP) или 443 (для HTTPS).
  • Не сохраняет состояние (Stateless): Каждый запрос обрабатывается сервером независимо от предыдущих. Для поддержания сессии используются дополнительные механизмы (куки, сессии на стороне сервера).
  • Использует методы (HTTP-методы): Определяют тип операции, которую клиент хочет выполнить с ресурсом.

Ключевые компоненты HTTP-сообщения

Читать полностью ->
Почему не всегда применяются индексы?
2.0 Middle🔥 26💬 1

Почему не всегда применяются индексы в SQL-запросах?

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

1. Неоптимальная структура запроса

Индексы применяются только тогда, когда оптимизатор СУБД считает их использование выгодным. Некоторые конструкции запросов делают индексы бесполезными:

-- Пример: использование функций или выражений над индексированным полем
SELECT * FROM users WHERE YEAR(created_at) = 2023;
-- Индекс по created_at не будет использоваться, так как применяется функция YEAR()

-- Решение: переписать запрос
SELECT * FROM users 
WHERE created_at >= '2023-01-01' AND created_at < '2024-01-01';
Читать полностью ->
Какие основные строковые функции есть в PHP?
1.3 Junior🔥 25💬 1

Основные строковые функции в PHP

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

1. Функции для получения информации о строке

Эти функции позволяют анализировать строку без её изменения.

Читать полностью ->
Какие типы JOIN существуют в SQL? Объясните разницу между INNER, LEFT, RIGHT и FULL JOIN.?
1.3 Junior🔥 25💬 1

Типы JOIN в SQL

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

INNER JOIN (Внутреннее соединение)

INNER JOIN возвращает только те записи, для которых есть совпадения в обеих таблицах. Это самый распространенный тип соединения.

SELECT *
FROM таблица_A
INNER JOIN таблица_B
ON таблица_A.id = таблица_B.id_внешний;
  • Логика: Возвращает строки, где ключ связи существует и в таблице А, и в таблице Б.
  • Визуальная аналогия: Пересечение двух множеств (Venn diagram).
  • Если совпадения нет, строка не попадает в результат.
  • Используется, когда нужны данные, гарантированно присутствующие в обеих таблицах (например, заказы с информацией о клиентах).
Читать полностью ->
Что такое Cookie и зачем они используются? Что нельзя хранить в Cookie и почему?
1.3 Junior🔥 25💬 2

Что такое Cookie

Cookie (куки) — это небольшие текстовые данные (до 4 КБ), которые сервер отправляет браузеру пользователя, и которые браузер автоматически возвращает обратно на сервер при каждом последующем запросе. Они являются фундаментальным механизмом для поддержания сессионного состояния в изначально статусном протоколе HTTP.

В контексте PHP работа с куками осуществляется через суперглобальный массив $_COOKIE (для чтения) и функцию setcookie() (для установки):

// Установка куки с именем "user", значением "John" и сроком жизни 1 час
setcookie("user", "John", time() + 3600, "/", "example.com", true, true);

// Чтение значения куки
if (isset($_COOKIE['user'])) {
    echo "Привет, " . htmlspecialchars($_COOKIE['user']);
}

Зачем используются Cookie

Основные цели использования куки:

Читать полностью ->
Какие принципы ООП вы знаете? Объясните инкапсуляцию, наследование и полиморфизм.?
2.0 Middle🔥 25💬 1

Основные принципы ООП

Объектно-ориентированное программирование (ООП) основано на четырех фундаментальных принципах, которые создают гибкую, поддерживаемую и расширяемую архитектуру кода:

  1. Инкапсуляция (Encapsulation)
  2. Наследование (Inheritance)
  3. Полиморфизм (Polymorphism)
  4. Абстракция (Abstraction)

В PHP эти принципы реализуются через классы, объекты, модификаторы доступа и интерфейсы.

Подробное объяснение ключевых принципов

Инкапсуляция

Инкапсуляция — это механизм сокрытия внутренней реализации объекта и объединения данных с методами, которые работают с этими данными. Основная цель — защита внутреннего состояния объекта от некорректного использования.

Ключевые аспекты инкапсуляции в PHP:

  • Использование модификаторов доступа: public, protected, private
  • Предоставление контролируемого доступа через методы-геттеры и сеттеры
  • Сокрытие сложности реализации от пользователя класса
Читать полностью ->
Что такое single responsibility?
2.0 Middle🔥 25💬 1

Принцип единственной ответственности (Single Responsibility Principle)

Принцип единственной ответственности (SRP) — это первый и фундаментальный принцип SOLID, который гласит: "Каждый класс, модуль или функция должны иметь одну и только одну причину для изменения". Другими словами, класс должен быть ответственен лишь за одну конкретную задачу или аспект функциональности.

Суть принципа

SRP направлен на борьбу со "зловонным кодом" (code smell) под названием "Божественный объект" (God Object) — антипаттерном, когда один класс выполняет множество несвязанных задач. Такой код становится:

  • Сложным для понимания (нарушает принцип "разделения ответственности")
  • Трудным для тестирования (требует множество моков и сложных сценариев)
  • Хрупким (изменение в одной части может сломать другие)
  • Проблемным для повторного использования (привязан к множеству контекстов)

Практическая реализация на PHP

Рассмотрим нарушение SRP и его исправление.

Читать полностью ->
По каким критериям выбираешь работу?
1.8 Middle🔥 25💬 1

Критерии выбора работы для PHP Backend разработчика

Выбор новой работы для меня — это комплексный процесс, где технические, профессиональные и личные факторы должны быть тщательно взвешены. После 10+ лет в разработке я сформировал четкие критерии, которые позволяют оценить не только текущую позицию, но и долгосрочную перспективу.

1. Технологический стек и архитектурные подходы

Это фундаментальный критерий. Я анализирую, насколько проект соответствует современным стандартам PHP разработки.

Читать полностью ->
Какую использовал систему версий?
1.0 Junior🔥 25💬 3

Системы версий и управление кодом в PHP Backend

В профессиональной PHP backend разработке я использовал преимущественно Git как систему контроля версий, но также имел опыт работы с SVN (Subversion) в legacy проектах и некоторыми инструментами CI/CD, которые интегрируются с системами версий.

Git как основная система

Git является стандартом в современной разработке благодаря своей гибкости, скорости и поддержке распределенной работы. В PHP проектах я применял его следующим образом:

  • Рабочая структура: Использовал стандартный подход с ветками main/master для релизов, develop для разработки и feature-ветками для отдельных задач.
# Пример создания feature ветки и коммита
git checkout -b feature/user-auth
git add .
git commit -m "Implement JWT authentication middleware"
git push origin feature/user-auth
Читать полностью ->
На что обращаешь внимание во время code review?
2.0 Middle🔥 25💬 1

Принципы и фокус code review

Во время code review я рассматриваю процесс не как поиск ошибок, а как коллаборативное улучшение кода и передачу знаний. Моё внимание распределяется по нескольким ключевым направлениям.

1. Корректность и функциональность

Первичная проверка — выполняет ли код свою задачу без ошибок и edge cases.

  • Логика алгоритмов: Проверяю корректность, особенно в условиях цикла и ветвления.
  • Обработка ошибок и исключений: Есть ли try-catch блоки для операций, которые могут завершиться неудачей (работа с файлами, API, БД)? Не подавляются ли исключения без веской причины?
  • Пограничные случаи: Как код ведёт себя с пустыми массивами, null значениями, нулевыми или отрицательными числами? Учтены ли все варианты из требований?
// Плохо: Нет проверки на пустоту
$total = array_sum($userIds);
Читать полностью ->
Какие знаешь архитектурные паттерны?
2.0 Middle🔥 25💬 2

Архитектурные паттерны в PHP Backend разработке

Архитектурные паттерны — это высокоуровневые шаблоны организации кода, которые определяют структуру приложения, взаимодействие компонентов и распределение ответственности. В отличие от шаблонов проектирования (design patterns), они решают проблемы на уровне всей системы. Вот ключевые архитектурные паттерны, которые я применял в PHP разработке:

1. Слоистая архитектура (Layered Architecture)

Наиболее распространённый подход в веб-разработке, где приложение разделяется на горизонтальные слои с чёткими обязанностями.

// Пример структуры в Laravel (упрощённо)
// Presentation Layer (Controllers)
class UserController {
    public function store(UserRequest $request, UserService $service) {
        $user = $service->create($request->validated());
        return response()->json($user, 201);
    }
}
Читать полностью ->
Как происходила коммуникация в команде?
1.0 Junior🔥 25💬 1

Как организовывалась коммуникация в команде

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

Основные инструменты и каналы коммуникации

Читать полностью ->
Как работает валидация в Laravel?
2.0 Middle🔥 25💬 2

🛡️ Как работает валидация в Laravel

Валидация в Laravel — это мощный и гибкий механизм проверки входящих данных, который следует философии «соглашения конфигурации» (convention over configuration). Ядро системы построено вокруг класса Illuminate\Validation\Validator, но разработчики чаще работают с высокоуровневыми абстракциями.

🔍 Основные подходы к валидации

Laravel предлагает несколько способов валидации, каждый из которых подходит для разных сценариев:

1. Валидация в контроллерах (наиболее распространенный способ)

Метод validate() доступен в контроллерах через трейт ValidatesRequests:

use Illuminate\Http\Request;
Читать полностью ->
Для чего нужны JOIN?
1.0 Junior🔥 25💬 2

Для чего нужны JOIN в SQL?

JOIN — это ключевая операция в SQL, предназначенная для объединения данных из двух или более таблиц в рамках одного запроса. В контексте backend-разработки на PHP (особенно при работе с базами данных), понимание JOIN необходимо для эффективного построения запросов, получения связанных данных и обеспечения целостности информации в приложении.

Основная цель и философия

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

Читать полностью ->