Библиотека собеса по PHP | вопросы с собеседований
3.17K subscribers
183 photos
6 videos
122 links
Вопросы с собеседований по PHP и ответы на них.

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

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

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
Как реализовать паттерн проектирования «Адаптер» на PHP, и какие распространенные случаи его использования?

В PHP вы можете реализовать паттерн «Адаптер», чтобы обеспечить работу несовместимых интерфейсов вместе.

В нашем примере:

Adaptee — класс с несовместимым интерфейсом.
Target — интерфейс, ожидаемый клиентом.
Adapter — класс, который адаптирует Adaptee к интерфейсу Target.

Распространенные случаи использования паттерна Адаптер включают:

🟢Интеграция с легаси-кодом: Когда у вас есть старый код с другим интерфейсом, который нужно использовать в новой системе.
🟢Использование сторонних библиотек: Когда вы хотите использовать стороннюю библиотеку, которая не соответствует требуемому интерфейсу.
🟢Мокирование объектов при тестировании: Когда нужно создать мок-объекты, которые реализуют определенный интерфейс для целей тестирования.
🟢Масштабируемость системы: Когда нужно переключаться между различными реализациями функциональности без изменения кода клиента.
Что такое компоненты Symfony?

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

Компоненты Symfony — это разрозненные библиотеки для PHP-приложений. Тысячи проектов были загружены миллиарды раз и являются основой основных PHP-проектов. Symfony предоставляет компоненты от простых функций, таких как файловая система, до расширенных возможностей, событий, контейнерной технологии и инъекции зависимостей.
Что такое CQRS?

CQRS (Command Query Responsibility Segregation) — это архитектурный паттерн, который предлагает разделить операции записи и чтения данных в приложении на две отдельные ветки. Вместо того, чтобы использовать единый интерфейс для обеих операций, CQRS предлагает использовать различные модели данных для команд и запросов. Это позволяет оптимизировать каждую модель для конкретных задач и улучшить производительность приложения.

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

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

Интересная статья на эту тему
🔥1
Какой шаблонизатор поддерживает Symfony?

Шаблонизатором по умолчанию в Symfony является Twig. Мы также можем использовать обычный PHP-код. Twig — это актуальный и современный шаблонизатор для PHP.

✔️ Преимущества Twig:

Быстрота: Накладные расходы на регулярный PHP-код были сведены к минимуму, так как Twig помогает компилировать шаблоны в простой оптимизированный PHP-код.

Безопасность: Twig как язык шаблонов используется в приложениях, где пользователи могут изменять дизайн шаблона. В нем есть режим «песочницы» для борьбы с недоверенным кодом шаблонов.

Гибкость: Twig позволяет разработчику задавать пользовательские теги и фильтры и создавать свой DSL, что разрешается гибким лексером и парсером twig.
🔥1🥱1
Что такое интерфейсы?

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

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

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

Использование интерфейсов способствует лучшей организации кода, а также повышает его гибкость и переиспользуемость. Они позволяют определить общие методы и стандарты, которые должны быть реализованы в классах, что упрощает сопровождение и расширение программного обеспечения.
🔥1
🎄 С Нового года начну учиться — знакомо?

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

🗓️ 4 декабря стартует экспресс-курс «Математика для Data Science»— всё, что нужно для уверенных ответов на собесах:

→ 2 месяца без воды;
→ обновлённая программа (ноябрь 2025);
→ живые вебинары с экспертами;
→ записи всех занятий;
→ практика на Python + финальный проект с фидбэком.

Формат: 2 месяца интенсива и к началу следующего года ты готов к собесам.

Пока другие будут собираться с мыслями после НГ, ты уже будешь на полпути к офферу мечты.

🎁 Только до 30 ноября:

→ скидка 40% на курс;
→ курс «Базовая математика» в подарок;
→ бесплатный тест уровня математики.

👉🏻 Хочешь на курс → пиши менеджеру
1
Как реализовать очередь сообщений на PHP?

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

1. Установите RabbitMQ: Сначала вам нужно установить сервер RabbitMQ на вашей системе. Вы можете загрузить и установить его с веб-сайта RabbitMQ.

2. Установите расширение PHP AMQP: Затем вам нужно установить расширение PHP AMQP, которое позволяет приложениям на PHP взаимодействовать с RabbitMQ. Вы можете установить его с помощью PECL.

3. Создайте производителя: Это компонент, отвечающий за публикацию сообщений в очередь.

4. Создайте потребителя: Это компонент, отвечающий за потребление сообщений из очереди.

5. Запустите Производителя и Потребителя: Запустите скрипт производителя, чтобы опубликовать сообщение в очередь, затем запустите скрипт потребителя, чтобы потребить сообщение.
🌚2
Как использовать коллекции в Laravel?

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

Создание коллекций: Вы можете создавать коллекции, используя вспомогательную функцию collect, передавая массив или объект, реализующий интерфейс IteratorAggregate:

$collection = collect([1, 2, 3, 4, 5]);


Манипуляция с коллекциями: После того как у вас есть коллекция, вы можете использовать широкий спектр методов для манипуляции данными:
map(): Преобразует каждый элемент в коллекции.
filter(): Фильтрует элементы на основе функции обратного вызова.
reduce(): Сводит коллекцию к единственному значению с использованием функции обратного вызова.
pluck(): Извлекает список конкретных атрибутов из каждого элемента.
sortBy(): Сортирует коллекцию по указанному ключу.
groupBy(): Группирует коллекцию по указанному ключу.
slice(): Извлекает часть коллекции.
И многие другие...

Цепочка методов: Вы можете соединять несколько методов вместе, чтобы выполнять сложные операции в одной строке.
Может ли абстрактный класс содержать частный(private) метод?

Да, в абстрактном классе можно иметь частный конкретный метод.

Этот частный метод будет отображаться ТОЛЬКО этому абстрактному классу. Это означает, что он должен будет использоваться каким-либо другим конкретным методом в абстрактном классе.

Дочерние классы не смогут вызвать его напрямую.
🤖 Раньше в AI мог попасть любой, кто осилил пару туториалов.

Теперь нужны те, кто может объяснить:

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

Все эти навыки требуют понимания того, как и почему работают модели. А это чистая математика.

🔥 Proglib Academy запускает курс «Математика для разработки AI-моделей». Ведут эксперты из SberAI, ВШЭ, Т-Банк, Wildberries.

📝 Что внутри?

→ 2 месяца живых занятий с возможностью задавать вопросы напрямую.
→ Практика на Python. Не теория в вакууме, а применение.
→ 3 домашних задания + финальный проект с детальным разбором.

Старт 4 декабря

Только до конца ноября:
→ Скидка 40%;
→ Курс «Школьная математика» в подарок;
Тест на определение уровня математики.

🎄 Сделай себе подарок на Новый год
Перечислите адаптеры кэша в Symfony.

Адаптеры кэша — это собственно средства кэширования для хранения данных в файловой системе, в базе данных и т.д.

В Symfony есть пять кэш-адаптеров, которые перечислены ниже:

1. Адаптер кэша файловой системы
2. Адаптер кэша массива
3. Адаптер кэша APCu
4. Адаптер кэша файлов PHP
5. Адаптер кэша Redis
Что такое Mock? Где используют и зачем?

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

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

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

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