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

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

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

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
В чем различие между шаблонами проектирования «Фабрика» и «Абстрактная фабрика»?

Паттерн «Фабрика»:

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

Паттерн «Абстрактная фабрика»:


Паттерн «Абстрактная фабрика» также является порождающим паттерном проектирования, но он сосредоточен на предоставлении интерфейса для создания семейств связанных или зависимых объектов без указания их конкретных классов.
Он определяет абстрактный класс (или интерфейс), который объявляет методы для создания абстрактных объектов-продуктов. Затем подклассы реализуют эти методы для создания конкретных объектов-продуктов, принадлежащих к определенному семейству.
В PHP паттерн «Абстрактная фабрика» обычно включает несколько связанных фабричных классов (конкретных фабрик), каждый из которых ответственен за создание семейств связанных объектов (продуктов).
2👍2
🎲 Знаешь, что хуже всего на собесе?

Когда задают простой вопрос, а ты не можешь ответить.

🤔 Это ощущение, когда понимаешь:
«Блин, я это знаю... вроде... сейчас...»


От «я знаю...» до «сейчас объясню!» всего один курс.

Алгоритмы и структуры данных — от Big O до задач криптографии.

Python для разработчиков — пиши чистый и эффективный код.

Архитектуры и шаблоны — строй системы, которые масштабируются.

Основы IT — всё необходимое для входа в профессию.

Выбирай любой и забирай со скидкой 40% только до конца октября.

🔗 Выбрать курс
Что такое ссылки?

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

1️⃣Ссылки в PHP:
В PHP ссылки (references) — это специальный тип переменных, который позволяет создавать два (или более) разных имени для одной и той же переменной. Использование ссылок в PHP может быть полезным для передачи аргументов функции по ссылке, что позволяет изменять исходные значения переменных внутри функции.

2️⃣Ссылки на объекты:
В PHP также можно использовать ссылки на объекты. При работе с объектами, ссылки могут использоваться для создания нескольких имён, ссылающихся на один и тот же экземпляр объекта.
Какие основные операции с использованием ссылок?

✔️Присвоение переменной ссылки на другую переменную

✔️Передача аргументов функции по ссылке

✔️Возвращение значения по ссылке из функции

✔️Создание ссылки на элемент массива

✔️Ссылки на объекты

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

Закрой все вкладки со словами «MacBook», «купить ноутбук», «ноут в рассрочку». Потому что у нас есть решение лучше.

🔥 Proglib разыгрывает MacBook Pro 14. Формула простая: покупаешь любой курс до 15 ноября → учишься 2 недели → пишешь куратору #розыгрыш

Пока у тебя открыто 147 вкладок с ценами, кто-то уже прокачивает скилы и может забрать приз.

👉🏻 Выбрать курс для участия
Что такое OWASP?

OWASP — это акроним, расшифровывающийся как Open Web Application Security Project.

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

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

Знание OWASP и умение применять его рекомендации является важным для php-разработчика, так как помогает защитить веб-приложения от распространенных уязвимостей, таких как инъекции SQL, межсайтовый скриптинг (XSS), утечка конфиденциальной информации и другие.
Расскажите про MVC

Реализация архитектуры Model-View-Controller (MVC) в приложении на PHP включает организацию кода в три основных компонента: Модель (Model), Представление (View) и Контроллер (Controller). Каждый компонент имеет свои собственные обязанности, что помогает разделить задачи и сделать код более поддерживаемым и масштабируемым.

Вот краткий обзор каждого компонента и способов их реализации в приложении на PHP:

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

Представление (View): Представление отвечает за отображение данных пользователю. Оно генерирует HTML-вывод, который пользователь видит в своем браузере. В PHP представления обычно реализуются как отдельные шаблонные файлы, содержащие HTML вместе с заполнителями для динамического контента. Вы можете использовать операторы include или require PHP для включения этих шаблонов в ваши действия контроллера.

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

Преимущества использования архитектуры MVC в PHP-приложениях включают в себя:

Разделение забот (Separation of Concerns): MVC разделяет логику представления (view) от бизнес-логики (model) и обработки ввода пользователя (controller), что делает кодовую базу более понятной, поддерживаемой и обновляемой.

Модульность и повторное использование кода (Modularity and Reusability): Компоненты в MVC слабо связаны, что позволяет легче повторно использовать и модифицировать код. Например, вы можете повторно использовать тот же класс модели в разных контроллерах или представлениях.

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

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

Улучшение совместной работы (Improved Collaboration): MVC способствует четкому разделению забот, что упрощает совместную работу разработчиков над различными частями приложения, не мешая друг другу.
Расскажите об автоматических анализаторах кода PHP (roundcube т.д.).

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

Один из популярных автоматических анализаторов кода для PHP — это PHP_CodeSniffer. Он предоставляет возможности статического анализа, проверки соответствия кода стандартам оформления (например, PSR-1, PSR-2) и поиска потенциальных проблемных мест. PHP_CodeSniffer позволяет создавать собственные наборы правил и настраивать их под конкретные потребности проекта.

Еще одним популярным инструментом является PHPStan. Он предоставляет статический анализ кода на основе аннотаций типов, что позволяет обнаруживать потенциальные ошибки и проблемы на этапе разработки. PHPStan также может помочь в улучшении производительности и читаемости кода.

Для проектов с открытым исходным кодом, таких как Roundcube (веб-почтовый клиент), часто используются автоматические анализаторы кода для поддержания высокого качества кодовой базы и улучшения безопасности. Эти инструменты помогают разработчикам быстро находить и исправлять проблемы, уменьшая риск возникновения ошибок и улучшая общее качество программного обеспечения.
👍1
⚡️ Механизм запущен, часики тикают

Прямо сейчас кто-то уже купил курс со скидкой 40%, открыл первый урок и уже на пути к MacBook Pro 14.

А ты всё ещё читаешь этот пост...

Дедлайны не ждут:

31 октября — скидка 40% сгорает
15 ноября — розыгрыш MacBook

🎯 Правила участия:

→ купить любой курс до 31 октября
→ отучиться 2 недели
→ написать #розыгрыш куратору

🕊️ Не упусти свой шанс
Расскажите о SSH-протоколе

SSH (Secure Shell) — это протокол сетевой службы, который используется для безопасной передачи данных через незащищенную сеть. Он обеспечивает шифрование данных, аутентификацию и защиту от атак типа «прослушивание» (sniffing) и подмены данных (spoofing).

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

Cуществует несколько способов взаимодействия с SSH:

PHP расширение SSH2: PHP SSH2 extension предоставляет интерфейс для работы с SSH. Оно позволяет устанавливать SSH-соединения, выполнение команд, передачу файлов и другие операции. Для использования этого расширения необходимо установить его на сервере.

Библиотеки PHP для SSH: Существуют сторонние библиотеки PHP, такие как phpseclib, которые предоставляют альтернативные способы работы с SSH без необходимости установки дополнительных расширений PHP. Phpseclib, например, предоставляет классы для работы с SSH, SFTP и другими криптографическими протоколами.

Использование внешних инструментов: Вы также можете использовать внешние инструменты, такие как OpenSSH, с помощью функций PHP для выполнения команд на сервере. Например, функция exec() или shell_exec() позволяют выполнить команду на сервере, включая команды SSH.

Важно помнить о безопасности при работе с SSH в PHP. Необходимо обеспечить безопасное хранение учетных данных для доступа к серверу (лучше всего использовать ключи SSH вместо паролей) и обеспечить проверку вводимых данных для предотвращения атак вроде внедрения кода (code injection). Кроме того, следует ограничить возможности выполнения команд на сервере, чтобы избежать потенциальных угроз безопасности.
Какие есть типы индексов в бд?

Использование индексов в базах данных подразумевает их создание, просмотр и удаление для оптимизации запросов. Индексы ускоряют операции чтения (SELECT), но могут замедлить операции записи (INSERT, UPDATE, DELETE).

Общий синтаксис создания индекса выглядит следующим образом:

CREATE INDEX имя_индексаON имя_таблицы (столбец1 [ASC|DESC], столбец2 [ASC|DESC]);


Вот основные типы индексов:

1. Кластерные индексы (Clustered Index)
🔸 Упорядочивают данные в таблице в соответствии с индексом.
🔸 Каждая таблица может иметь только один кластерный индекс, так как физический порядок строк определяется им.
🔸 Пример: Первичный ключ часто создается как кластерный индекс.

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

🔹 Быстрый доступ к данным в диапазонных запросах.
🔹 Эффективно при выборке упорядоченных данных.

Недостатки:

🔹 Медленные операции вставки, обновления и удаления, так как данные переносятся для сохранения порядка.

2. Некластерные индексы (Non-Clustered Index)
🔸 Содержат указатели на фактические строки данных.
🔸 Таблица может иметь несколько некластерных индексов.
🔸 Пример: Индексация столбца, который часто используется в условиях WHERE.

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

🔹 Быстрый доступ к конкретным значениям.
🔹 Может использоваться для оптимизации запросов с различными столбцами.

Недостатки:

🔹 Дополнительное использование дискового пространства.
🔹 Замедление операций вставки, обновления и удаления.

3. Уникальные индексы (Unique Index)
🔸 Обеспечивают уникальность значений в одном или нескольких столбцах.
🔸 Пример: Индекс на email-адрес в таблице пользователей.

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

🔹 Поддерживает целостность данных.
🔹 Повышает производительность запросов.

Недостатки:

🔹 Невозможно хранить дублирующиеся значения.

4. Составные индексы (Composite Index)
🔸 Создаются на основе нескольких столбцов.
🔸 Пример: Индекс на столбцы (lastname, firstname).

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

🔹 Улучшает производительность запросов, где используются все или часть индекса.

Недостатки:

🔹 Требует внимательного проектирования, чтобы учитывать порядок столбцов.

5. Полнотекстовые индексы (Full-Text Index)
🔸 Используются для поиска текстовых данных, таких как документы или длинные текстовые поля.
🔸 Пример: Полнотекстовый поиск по колонке description в таблице товаров.

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

🔹 Оптимизирован для поиска ключевых слов или фраз.

Недостатки:

🔹 Поддерживается не всеми СУБД.
🔹 Может занимать значительное место.

6. Битмап-индексы (Bitmap Index)
🔸 Представляют данные в виде битовых карт.
🔸 Чаще всего используются в столбцах с низкой кардинальностью (небольшим количеством уникальных значений).

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

🔹 Эффективны для аналитических запросов и запросов с большими объемами данных.

Недостатки:

🔹 Не подходят для таблиц с частыми изменениями данных.

7. XML/JSON Индексы
🔸 Оптимизируют поиск в данных, хранящихся в XML или JSON-форматах.

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

🔹 Ускоряют сложные запросы по вложенным структурам.

Недостатки:

🔹 Занимают дополнительное пространство.
🔹 Ограниченная поддержка в некоторых СУБД.

8. Пространственные индексы (Spatial Index)
🔸 Используются для работы с географическими и пространственными данными.
🔸 Пример: Индексация координат в базе данных геоинформационных систем.

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

🔹 Эффективны для запросов, связанных с расстояниями, полигонами и геометрией.

9. Хэш-индексы (Hash Index)
🔸 Используют хэш-функции для индексирования данных.
🔸 Пример: Подходит для равенства (например, WHERE column = value).

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

🔹 Очень быстрые запросы на точное совпадение.

Недостатки:

🔹 Не поддерживают диапазонные запросы.
Halloween Special — последний день магии! 👻

Успевай сегодня купить курсы со скидкой 40%!

А также участвуй в розыгрыше MacBook Pro 14 💻

После полуночи останется только тыква 🎃

🔮 Открой портал и выбери курс
Есть ли разница между одинарными и двойными кавычками?

Да, есть

Двойные кавычки: Внутри двойных кавычек PHP разбирает переменные и экранирует специальные символы, такие как новая строка (\n) или символы управления (например, \t для табуляции).

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

Поэтому, в тех случаях когда в вашей строке заведомо не используются специальные символы и переменные следует использовать именно одинарные, так как это повышает скорость выполнения, поскольку избавляет PHP от необходимости парсить строку
3😢1🥱1
Что означает одиночное наследование в PHP?

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

В PHP одиночное наследование применяется самим языком. Когда класс расширяет другой класс с использованием ключевого слова extends, устанавливается отношение родитель-потомок, и дочерний класс наследует все неприватные свойства и методы родительского класса.

В целом, можно сказать, что для компенсации отсутствия множественного наследования в PHP используются интерфейсы и трейты.
Какие HTTP-методы знаете?

Веб-протокол HTTP (Hypertext Transfer Protocol) определяет различные методы запросов, которые клиенты могут отправлять серверу для выполнения определенных операций. Некоторые из наиболее распространенных HTTP-методов:

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

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

PUT: Заменить все текущие представления ресурса данными запроса. Используется для создания или обновления ресурса на сервере.

DELETE: Удалить указанный ресурс с сервера.

PATCH: Изменить часть ресурса на сервере. Используется для частичного обновления ресурса.

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

OPTIONS: Получить информацию о возможностях сервера относительно ресурса или сервера в целом. Это может включать доступные методы, поддерживаемые заголовки и другую метаинформацию.

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

CONNECT: Используется для установки виртуального соединения с сервером, обеспечивая прозрачное шифрование SSL через промежуточный узел.
👍4
Как использовать компонент Symfony Console для создания пользовательской команды?

Чтобы создать пользовательскую команду в компоненте Symfony's Console, вам сначала нужно создать новый PHP-класс, который расширяет класс Command. Этот класс должен быть расположен в каталоге bundle. В этом классе настройте имя команды, аргументы и опции в методе configure(). Реализуйте логику команды в методе execute().

После создания команды зарегистрируйте ее как сервис, пометив console.command в файле конфигурации сервисов. Теперь вы можете запускать команду из консоли, используя ее имя, заданное в $defaultName.
📕Делаем тонкие контроллеры на Symfony. Валидация - PHP-разработчикам; Junior/Middle разработчикам, строящим API на Symfony; начинающим специалистам в асинхронной архитектуре

На открытом уроке 5 ноября в 20:00 мск мы разберёмся в принципах и методах разработки тонких контроллеров:

📗 На вебинаре:
1. Получите практические примеры построения эффективной архитектуры приложения.
2. Познакомитесь с базовыми механизмами валидации.

📘 В результате на практике изучите и освоите создание собственных constraint, а также сможете централизованно обрабатывать ошибки с помощью EventDispatcher/EventListener.

👉 Регистрация на урок и подробности о курсе Symfony Framework: https://otus.pw/gd2Ua/

Все участники открытого урока получат скидку на курс "Symfony Framework"

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Как можно получить свойства изображения в PHP?

getimagesize() — используется для получения размера изображения.
exif_imagetype() — используется для получения типа изображения.
imagesx() — используется для получения ширины изображения.
imagesy() — используется для получения высоты изображения.
👍1