Библиотека собеса по PHP | вопросы с собеседований
3.19K subscribers
177 photos
5 videos
118 links
Вопросы с собеседований по PHP и ответы на них.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/9f3affba

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
Можно ли компоновать traits в trait?

В PHP, с версии 5.4 и выше, поддерживаются трейты (traits), которые позволяют компоновать поведение в классах без необходимости наследования. Трейты могут использоваться для компоновки поведения внутри других трейтов, что может быть полезным для структурирования и организации кода.

В приведенном примере трейт TraitC использует (use) два других трейта (TraitA и TraitB) и предоставляет дополнительный метод methodC. Класс Example затем использует трейт TraitC, что позволяет ему наследовать все методы из TraitA, TraitB и TraitC.

Таким образом, в PHP можно компоновать трейты внутри других трейтов для организации и переиспользования кода.
👍2🌚1
[Git] Зачем команда git bundle?

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

Основные случаи использования git bundle:

1. Передача репозитория офлайн:

Если репозиторий большой, но доступ к сети отсутствует, можно создать файл с полным содержимым репозитория и передать его через USB-накопитель или другое физическое устройство.

2.Обновление репозитория офлайн:

Если нужно синхронизировать изменения между двумя репозиториями без доступа к сети, можно упаковать изменения в bundle и передать его.

3. Создание резервной копии:

git bundle может использоваться для создания архива репозитория с сохранением всей истории.

4. Доставка изменений:

Это удобный способ передать патчи или ветки, которые можно позже интегрировать в другой репозиторий.

Примеры использования:
Создание полного архива репозитория:

git bundle create my-repo.bundle --all

Здесь флаг --all указывает, что нужно упаковать все ветки и историю.

Упаковка определённой ветки:

git bundle create my-feature.bundle main

Это создаст архив с содержимым только ветки main.

Проверка содержимого bundle:

git bundle verify my-repo.bundle

Проверяет, что файл корректен и пригоден для использования.

Клонирование из bundle:

git clone my-repo.bundle my-new-repo
👍2
Что такое вариативная функция или spread-оператор?

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

Например, вариативная функция может быть объявлена следующим образом(фото 1)

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

Например, spread-оператор можно использовать следующим образом(фото 2)

В этом примере массив $numbers распаковывается с помощью spread-оператора и его элементы передаются в вариативную функцию sum в качестве отдельных аргументов.
2
💡 Задача с собесеседования

Недавно в одном известном всем банке кандидату была предложена задача:

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


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

🎓 Proglib запускает экспресс-курс «Математика для Data Science» — для тех, кто хочет закрыть эти пробелы и понять математику быстро, качественно и без боли.

🔍 На курсе вас ждет:

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

📅 Старт: 6 ноября
Формат: 10 вебинаров и 3 практических проекта
💬 Поддержка: менторы + Telegram-чат
💰 Стоимость: 37 000 ₽ (есть рассрочка)

🔗 Узнать больше и записаться
🥱2
Какова цель функции «array_map» в PHP и как её использовать?

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

В этом примере функция square() применяется к каждому элементу массива $numbers с использованием array_map(), что приводит к созданию нового массива $squaredNumbers, где каждый элемент является квадратом соответствующего элемента исходного массива.
😵‍💫 Устал от бесконечной подготовки к собесам?

Тогда залетай к нам, есть задачка попроще.

Пройди в нашем боте мини-тест по математике и узнай, готов ли ты к Data Science или стоит что-то подтянуть.

📱 Перейти в бота
Концепция окружений в Symfony

В Symfony окружения (environments) — это контексты, в которых работает приложение, позволяя адаптировать его под разные задачи, такие как разработка, тестирование или продакшн.

Типы окружений: Основные — dev (разработка), prod (продакшн), test (тестирование). Можно создавать свои.
Конфигурации: Каждая среда может иметь определенные конфигурационные файлы в каталоге config/, например:
config/packages/dev/ для среды dev.
config/packages/prod/ для среды prod.
config/packages/test/ для тестовой среды.
Эти файлы переопределяют конфигурацию по умолчанию в config/packages/ или config/services.yaml.
Переменные окружения: Переменная APP_ENV указывает, какое окружение используется (dev, prod, test).
Логи и кэш: Для каждого окружения свои директории логов и кэша.
Режим отладки: В dev включены отладка и инструменты разработчика. В prod — отключены для повышения безопасности и производительности.
Зачем нужно: Окружения обеспечивают разделение задач, безопасность и оптимизацию приложения под разные цели.
👍1
🔥 Новый курс «Математика для Data Science»

Записывайтесь до 19.10 и получите бонус-курс «Школьная математика» для быстрого освежения знаний! 🚀

🧠 Эксперты-спикеры на курсе:

▫️ Диана Миронидис — преподаватель ВШЭ, автор Яндекс Практикума;

▫️ Ксения Кондаурова — преподаватель Центрального Университета (Т-Банк);

▫️ Маргарита Бурова — академический руководитель программ Wildberries & Russ.

👉🏻 Не упустите шанс улучшить свои навыки
🌚1👾1
В чем разница между криптографическими функциями md5(), crc32() и sha1() в PHP?

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

md5():

md5() создает хеш-значение размером 128 бит (16 байт).
Широко используется для контрольных сумм и криптографических хеш-функций.
Однако из-за обнаруженных уязвимостей, его больше не рекомендуется использовать для криптографических целей, где требуется надежная защита от коллизий.

crc32():

crc32() генерирует 32-битное (4 байта) контрольное значение циклической избыточности (CRC).
Обычно используется для проверки ошибок в передаче данных.
Не подходит для криптографических целей из-за отсутствия криптографической надежности и высокой вероятности коллизий, особенно для коротких входных данных.

sha1():

sha1() создает хеш-значение размером 160 бит (20 байт).
Более безопасен, чем md5() и crc32(), но также подвержен атакам на коллизии.
В некоторых приложениях все еще используется, но обычно считается менее безопасным, чем более современные алгоритмы хеширования, такие как SHA-256 или SHA-512.
💥 Математика, которая не «для галочки»

Разработали курс «Математика для Data Science» специально для вас — чтобы закрыть все пробелы в математике и уверенно пройти любое собеседование на позицию Data Scientist.

🧠 За 2 месяца ты разберёшь:

➡️ линейную алгебру — работа с векторами и матрицами, их разложения, собственные значения и обратные матрицы;

➡️ мат. анализ — пределы, производные, экстремумы, применение градиентного спуска;

➡️ теорию вероятностей и статистику — случайные величины, распределения, статистические гипотезы, A/B-тесты;

➡️ математику в ML и аналитике — как использовать всё это в алгоритмах, логистической регрессии, методах ближайших соседей, байесовских подходах.

📚 Формат: 10 вебинаров, 3 практических проекта, тесты и чат с менторами.

🔥 При оплате до 19 октября получите курс по базовой математике в подарок.

🔗 Записаться на курс
Для чего используется переменная $_REQUEST?

Переменная $_REQUEST является суперглобальным массивом, который используется для сбора данных из HTML-форм или URL-адресов. Это комбинация массивов $_GET, $_POST и $_COOKIE. Собранные данные могут быть параметрами, переданными через методы HTTP GET или POST.

Вот разбор того, что представляет собой каждый из этих методов:

$_GET: Данные, отправленные через строку запроса URL. Они видны всем и имеют ограничение на объем передаваемых данных.

$_POST: Данные, отправленные через HTTP POST-запрос, обычно из HTML-формы с использованием метода POST. Эти данные не видны в URL-адресе и могут передавать больший объем данных по сравнению с $_GET.

$_COOKIE: Данные, хранящиеся в файлах cookie браузера пользователя.

$_REQUEST позволяет получать доступ к данным независимо от того, как они были отправлены, будь то запрос GET (параметры URL), запрос POST (отправка формы) или cookie. Однако полагаться исключительно на $_REQUEST иногда может привести к проблемам с безопасностью, поскольку он объединяет различные источники пользовательского ввода. Обычно рекомендуется использовать явно $_GET, $_POST или $_COOKIE в зависимости от предполагаемого использования и источника данных, поскольку это обеспечивает большую ясность и безопасность.
Как реализовать шаблон проектирования «Наблюдатель» на PHP, и какие типичные сценарии использования для него существуют?

Шаблон проектирования «Наблюдатель» используется, когда существует зависимость «один ко многим» между объектами, так что при изменении состояния одного объекта все зависимые объекты автоматически уведомляются и обновляются. На PHP этот паттерн можно реализовать, используя интерфейсы и классы.

Типичные сценарии использования для паттерна «Наблюдатель» включают:

Системы обработки событий: Когда происходит событие, такое как клик кнопки или изменение данных, все зарегистрированные наблюдатели (слушатели событий) уведомляются.

Архитектуры MVC: Наблюдатели (представления) подписываются на изменения в модели, автоматически обновляя себя при изменении состояния модели.

Распределенные системы: Компоненты распределенной системы могут нуждаться в уведомлении о изменениях в других компонентах, и паттерн «Наблюдатель» может облегчить эту коммуникацию.

Системы ведения логов и мониторинга: Наблюдатели могут использоваться для отслеживания изменений в состоянии системы и регистрации соответствующей информации.

Контейнеры внедрения зависимостей: Наблюдатели могут использоваться для уведомления зависимых объектов о изменениях в конфигурации или состоянии контейнера.
🧠 Курс «Математика для Data Science»

Математика лежит под капотом не только алгоритмов, но и всего, что мы создаём — от систем рекомендаций до маршрутизации такси.

Но главное, математика понятна, если объяснить её на языке разработки.

📘 Курс «Математика для Data Science»:

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

Сегодня последний день, чтобы получить подарок: курс по базовой математике!

🗓️ Старт курса → 6 ноября

👉 Записаться на курс
Есть ли разница между self и this в PHP?

В PHP ключевое слово self и ключевое слово this в общем контексте имеют разные значения и применяются в разных контекстах.

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

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

static: Появился в PHP 5.3 и решает проблему self, которая всегда ссылается на класс, где определён метод.
static позволяет методу ссылаться на класс, из которого он реально был вызван.

Таким образом, основное различие между self и this в PHP заключается в том, что self используется для работы со статическими свойствами и методами класса, а this используется для работы с нестатическими (экземплярными) свойствами и методами класса.
👍2
Как работает HTTP Kernel в Symfony?

HTTP Kernel (HTTP ядро) в Symfony — это ключевой компонент фреймворка, отвечающий за обработку HTTP-запросов и формирование ответов. Он реализует шаблон проектирования Front Controller и координирует весь жизненный цикл запроса и ответа.

Основной процесс работы HTTP Kernel

1. Получение запроса:
Входной файл (index.php) получает HTTP-запрос и передаёт его в ядро.

2. Маршрутизация:
Ядро использует компонент маршрутизации, чтобы определить, какой маршрут соответствует запросу, и какой контроллер должен быть вызван.

3. Вызов контроллера:
После определения маршрута вызывается соответствующий контроллер, который обрабатывает запрос и возвращает данные.

4. Формирование ответа:
Контроллер возвращает объект ответа, который может быть модифицирован дополнительными обработчиками (например, добавление заголовков).

5. Отправка ответа:
HTTP ядро отправляет готовый ответ обратно клиенту.

6. Постобработка:
После отправки ответа запускаются задачи, которые можно выполнять асинхронно (например, логирование или очистка данных).

Основные компоненты
🔹 Запрос и ответ:
Symfony использует объект запроса, который содержит все данные HTTP-запроса (заголовки, параметры, тело и т.д.), и объект ответа, который формирует конечный HTTP-ответ.

🔹 Маршрутизация:
Компонент маршрутизации сопоставляет URL запроса с маршрутами, указанными в конфигурации, и определяет, какой контроллер и параметры использовать.

🔹 Контроллер:
Контроллер — это метод, который выполняет бизнес-логику, принимает параметры из запроса и возвращает ответ.

🔹 События:
Во время обработки запроса ядро генерирует события, на которые могут подписываться обработчики. Это позволяет изменять запрос, контроллер или ответ на разных этапах обработки.

🔹 Постобработка:
После того как ответ отправлен клиенту, могут выполняться задачи, которые не требуют немедленного завершения (например, отправка логов или очистка кэша).

Этапы обработки запроса
✔️Клиент отправляет HTTP-запрос.
✔️Ядро принимает запрос и вызывает маршрутизацию.
✔️Контроллер выполняет бизнес-логику.
✔️Генерируется HTTP-ответ.
✔️Ответ модифицируется при необходимости (например, добавляются заголовки).
✔️Готовый ответ отправляется клиенту.
✔️Выполняются завершающие задачи.
Какова цель ключевого слова «use» в пространствах имен PHP?

Псевдонимы пространств имен или классов: Позволяет задать более короткие и удобные имена для длинных пространств имен или классов. Это делает код более читаемым и кратким.

Импорт констант: Позволяет импортировать константы, определенные в пространстве имен, с помощью use:

Импорт функций (начиная с PHP 8): В PHP 8 и выше вы также можете импортировать функции из пространства имен в текущее пространство имен, используя use function.

Импорт констант (начиная с PHP 8): Аналогично, в PHP 8 и выше вы можете импортировать константы из пространства имен в текущее пространство имен с помощью use const.

Используя use, вы можете сделать свой код более чистым и поддерживаемым, уменьшая необходимость повторного использования полностью квалифицированных имен в вашем коде.
👍3
🔎 Собес сам себя не пройдет

Ты готов к собеседованию? А если проверю?

Залетай к нам и забирай курсы со скидкой 40%. Только до конца октября можно узнать много нового и отточить навыки.

🎯 Забирай курсы:

🐍 python для разработчиков;
🧮 алгоритмы и структуры данных;
📝 архитектуры и шаблоны проектирования;
🧩 основы IT для новичков.

Не упусти скидку и получи долгожданный оффер!
Что такое cursor в MySQL-процедурах?

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

Основные характеристики курсоров:
Управление строками по одной:
Курсор позволяет работать с каждой строкой из набора результатов, возвращаемого запросом.

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

Временный объект: Курсор существует только в рамках выполнения процедуры и уничтожается по завершении процедуры.

Основные этапы работы с курсорами:
1. Объявление курсора: Определяется запрос, который будет использовать курсор.

DECLARE cursor_name CURSOR FOR
SELECT column1, column2 FROM table_name WHERE condition;

2. Открытие курсора: Подготавливает курсор для работы.

OPEN cursor_name;


3. Чтение данных из курсора (извлечение строки): Используется команда FETCH, чтобы извлечь текущую строку из курсора.

FETCH cursor_name INTO var1, var2;

4. Закрытие курсора: После завершения работы курсор должен быть закрыт.

CLOSE cursor_name;

Важные моменты:
Обработчик ошибок: Используется для обработки ситуации, когда курсор достиг конца набора данных (NOT FOUND).
Эффективность: Курсоры могут быть менее производительными, чем операции над наборами данных, поэтому их следует использовать только при необходимости построчной обработки.
Ограничения: В MySQL курсоры не поддерживают параллельное выполнение и обычно работают медленнее, чем аналогичные механизмы в других СУБД.

Курсоры полезны для задач, требующих пошаговой обработки данных, но по возможности их лучше избегать, используя SQL-запросы, оптимизированные для работы с наборами данных.
1