Библиотека собеса по PHP | вопросы с собеседований
3.38K subscribers
139 photos
2 videos
70 links
Вопросы с собеседований по PHP и ответы на них.

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

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

Работать у нас: https://job.proglib.io/

Наши каналы: https://yangx.top/proglibrary/9197
加入频道
Что такое пространства имен в PHP и как их использовать?

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

Как использовать пространства имен в PHP:

1. Определение пространства имен:

Пространство имен определяется с использованием ключевого слова namespace, за которым следует имя пространства имен. Это объявление должно быть первым оператором в файле PHP перед любым другим кодом.

2. Использование элементов в пространстве имен:

После определения пространства имен вы можете помещать классы, функции, интерфейсы или константы в это пространство имен.

3. Доступ к элементам в пространстве имен:

Для доступа к элементам внутри пространства имен можно использовать их полностью квалифицированные имена (включая пространство имен) или импортировать пространство имен с использованием ключевого слова use.

4. Использование псевдонимов:

Также можно определить псевдонимы для пространств имен или отдельных элементов, чтобы упростить их использование, особенно если имена пространств довольно длинные.
Какие способы оптимизации производительности баз данных знаете?

Существует несколько основных способов оптимизации баз данных:

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

Оптимизация запросов: Напишите запросы таким образом, чтобы они были эффективными. Используйте инструкции JOIN, WHERE и GROUP BY там, где это необходимо, чтобы снизить объем возвращаемых данных.

Кэширование: Используйте кэширование результатов запросов там, где это возможно. Например, результаты запросов к базе данных могут быть кэшированы в Redis или Memcached.

Ограничение объема данных: Загружайте только те данные, которые действительно нужны. Используйте LIMIT и OFFSET при запросах, чтобы извлекать только необходимое количество записей.

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

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

Масштабирование базы данных: При необходимости масштабируйте базу данных горизонтально или вертикально. Горизонтальное масштабирование (шардинг) позволяет распределить данные по нескольким серверам, а вертикальное масштабирование (разделение на таблицы) позволяет распределить данные по разным таблицам или базам данных.

Мониторинг и профилирование: Регулярно отслеживайте производительность запросов и операций базы данных с помощью инструментов мониторинга и профилирования. Это позволяет идентифицировать узкие места и проводить дальнейшую оптимизацию.
Какие версии PHP до сих пор поддерживаются?

На данный момент поддерживаются лишь версии вышедшие после 8.0.

8.1: Выходят лишь обновления безопасности. Это будет продолжаться до 31 декабря 2025 года.

8.2, 8.3: Релиз, который активно поддерживается. Сообщаемые ошибки и проблемы безопасности исправляются, и выпускаются регулярные точечные выпуски.

Актуальную информацию всегда можно узнать на официальном сайте
Как обеспечить безопасность приложения на PHP от атак SQL-инъекций?

Обеспечение безопасности приложения на PHP от атак SQL-инъекций включает в себя реализацию нескольких практик для снижения риска вредоносных попыток SQL-инъекций.

Вот руководство, как это сделать:

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

Использование хранимых процедур: Если ваша база данных поддерживает хранимые процедуры, используйте их, так как они могут предотвратить SQL-инъекции, разделяя логику SQL от пользовательского ввода.

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

Экранирование: Если вам необходимо объединять пользовательский ввод в SQL-запросах (что следует избегать всякий раз, когда это возможно), убедитесь, что вы правильно экранируете специальные символы, используя функции, такие как mysqli_real_escape_string() или PDO::quote().

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

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

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

Внедрение брандмауэров для веб-приложений (WAF): Рассмотрите возможность использования WAF для выявления и блокировки потенциальных атак SQL-инъекций на сетевом уровне, прежде чем они достигнут вашего приложения.

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

Аудиты безопасности и тестирование: Регулярно проводите аудиты безопасности и тестирование на проникновение вашего приложения на PHP, чтобы выявить и устранить любые уязвимости, включая уязвимости SQL-инъекций.
Вакансии «Библиотеки программиста» — ждем вас в команде!

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

Подробности тут

Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴

Ждем ваших откликов 👾
Что такое идемпотентность метода? Какие HTTP-методы являются идемпотентными для REST?

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

В контексте REST-архитектуры, следующие HTTP-методы являются идемпотентными:

1. GET: Получение информации с сервера. Повторный запрос GET не должен иметь никакого влияния на состояние сервера.
2. HEAD: Аналогично методу GET, но без тела ответа. Повторный запрос HEAD также не должен иметь никакого влияния на состояние сервера.
3. PUT: Обновление (или создание) ресурса на сервере. Если запросы PUT повторяются с теми же параметрами, они должны иметь такое же состояние ресурса после каждого выполнения.
4. DELETE: Удаление ресурса на сервере. Повторное выполнение DELETE с теми же параметрами должно иметь то же состояние.

Эти методы идемпотентны, потому что их повторная отправка не изменяет состояние сервера или ресурсов. Это важно для однозначной и предсказуемой работы сервера и клиента при обработке запросов.
[Git] Какой командой отправить изменения в удаленный репозиторий?

Чтобы отправить изменения в удалённый репозиторий, используется команда:

git push


Полный синтаксис:
git push <remote> <branch>


<remote> — имя удалённого репозитория (например, origin).

<branch> — имя ветки, в которую нужно отправить изменения (например, main или master).

Примечания:

Если вы работаете с новым репозиторием или веткой, может потребоваться задать удалённую ветку для отслеживания:
git push --set-upstream origin <branch>
Чем отличается require от require-dev?

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

require-dev: Этот раздел определяет зависимости, необходимые исключительно для разработки и тестирования вашего приложения. Обычно это инструменты для тестирования (например, PHPUnit), фиктивные данные для тестирования (например, Faker), инструменты для отладки (например, Xdebug) и т. д. Эти зависимости не включаются в окружение продакшена (production environment), чтобы уменьшить размер и сложность установки.

Когда вы устанавливаете пакет с помощью Composer, по умолчанию устанавливаются зависимости из обоих разделов require и require-dev. Однако при использовании опции --no-dev в команде composer install или composer update, Composer устанавливает только зависимости из раздела require, пропуская require-dev. Это особенно полезно при развертывании приложения в продакшен окружении, когда не нужны инструменты и зависимости, предназначенные только для разработки.
Куда делась 6 версия PHP?

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

11 марта 2010 команда разработчиков приняла решение об отмене выпуска PHP 6 в текущем его виде. В результате транк с PHP 6 был перенесён в бранч, а в транке образовалась новая версия — 5.4, в которую разработчики перенесли все наработки из PHP 6, кроме юникода.
Какие знаете принципы ООП?

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

Наследование. Возможность создания новых классов на основе существующих. Это позволяет повторно использовать код и уменьшает дублирование.

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

Абстракция. Сокрытие сложных реализаций за простыми интерфейсами. Это помогает уменьшить сложность кода и сделать его более понятным.
Что такое Symfony Flex?

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

Основные особенности Symfony Flex:

🔸Автоматическое управление зависимостями:
При установке пакета с помощью Composer, Symfony Flex автоматически настраивает приложение для работы с этим пакетом.
Например, при установке Doctrine ORM бандла Flex создаёт необходимые файлы и добавляет стандартные настройки.

🔸Система рецептов:

Symfony Flex использует рецепты — шаблоны конфигураций, предоставляемые сообществом и Symfony, которые описывают, как интегрировать пакет в проект.
Рецепты могут включать файлы конфигурации, структуру каталогов и скрипты, чтобы пакет сразу заработал.

🔸Улучшенный рабочий процесс:

Команды Flex, такие как composer require, composer remove и composer update, делают больше, чем просто управление зависимостями: они также автоматически обновляют конфигурации и настройки окружения.

🔸Настраиваемость и расширяемость:

Вы можете создавать собственные рецепты или использовать рецепты от Symfony Recipe Server, созданные сообществом.

🔸Минимальный и чистый код:

С Flex приложения Symfony начинают с минимального набора компонентов и включают только то, что необходимо, уменьшая избыточность и сложность.

🔸Поддержка сокращений и алиасов:

Symfony Flex позволяет использовать алиасы для пакетов, делая команды короче и понятнее.
Например, вместо composer require symfony/console можно просто написать composer require console.

🔸Поддержка переменных окружения и Dotenv:

Flex интегрируется с компонентом Symfony Dotenv, упрощая работу с переменными окружения.
Черные скидки на курсы в Академии!

-40% до конца ноября

🔥 В честь Черной пятницы до 30 ноября запускаем распродажу на все курсы proglib.academy и дарим промокод на сумму 10 000 на технику в магазине DigitalRazor (отправим вам по запросу)

🎁 Анонс новогоднего сюрприза!

🎄 Те, кто успеет приобрести курсы с 27 ноября по 27 декабря, получат шанс выиграть крутой новогодний подарок.
Что это будет, пока держим в секрете – следите за новостями на нашем канале!

Почему стоит выбрать нас?

⚫️ Опытные преподаватели
Вас будут обучать доценты ВМК МГУ по математике, а алгоритмы расскажет разработчик из Яндекса и преподаватель МФТИ и НИУ ВШЭ.

⚫️ Бессрочный доступ ко всем курсам
Проходите обучение в удобном для вас темпе, без давления жестких сроков.

⚫️ Поддержка преподавателей
Не останетесь одни — вам всегда помогут разобраться с трудными темами и ответят на любые вопросы через чат и платформу Coreapp.

👉 Не уверены, подойдет ли вам курс? Начните с бесплатных вводных занятий и познакомьтесь с преподавателями и форматом обучения –

Ждем вас на обучении! 🙌
Что такое анонимная функция в PHP и как её использовать?

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

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

Работа с курсором:
Объявление: Курсор связывается с SQL-запросом, определяющим выборку данных.
Открытие: Выполняется запрос, и результат становится доступным для обработки.
Чтение строк: Курсор используется для последовательного извлечения строк результата запроса.
Закрытие: После обработки всех строк курсор закрывается, освобождая ресурсы.

Типы курсоров (в зависимости от базы данных):

Статические курсоры: Результат фиксируется в момент открытия курсора. Изменения в базовых данных не отражаются в выборке.
Динамические курсоры: Результаты выборки обновляются в реальном времени при изменении базовых данных.
Курсоры только для чтения: Позволяют только просматривать данные.
Прокручиваемые курсоры: Позволяют перемещаться по строкам выборки произвольным образом (например, вперёд, назад).
This media is not supported in your browser
VIEW IN TELEGRAM
⚡️ Напоминаем: у нас можно (и нужно) купить рекламу

→ Более 60 телеграм-каналов по всем направлениям IT
→ Почти 1,2 миллиона аудитории
→ Собственное медиа и сайт с DAU 25 000 — можем усилить продвижение
→ Классные email-рассылки
→ И, конечно же, крутые контент-менеджеры, которые сделают нативную интеграцию/придумают виральный пост/реализуют любые контентные предпочтения

Для заказа пишите сюда: @proglib_adv
🤔🎄🎁 Какой подарок вы бы хотели на Новый год?

Да, начинать готовиться к Новому году никогда не рано 😉

#интерактив
Как реализовать постраничное отображение (пагинацию) на чистом PHP?

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

В данном примере используется MySQL база данных, и вы можете адаптировать код под свою собственную среду данных. Ключевой момент — это использование оффсета и лимита в SQL-запросе для выборки нужных записей, а также отображение ссылок на страницы для навигации.
🎉 Розыгрыш от Proglib Academy и DigitalRazor!

С 27 ноября по 27 декабря у вас есть шанс не только прокачать свои навыки, но и выиграть ПК при покупке любого курса Академии!

🎁 Призы для участников акции:

Игровой ПК DigitalRazor ProGaming
VIP-пакет курса Proglib Academy

💡 Как принять участие?
Купите любой курс Proglib Academy с 27 ноября по 27 декабря и получите шанс выиграть мощный ПК.

Приобретите технику DigitalRazor — участвуйте в розыгрыше VIP курса.

📅 Вместе с DigitalRazor мы создали спецпредложение -50% на курсы до 30 ноября, чтобы вы могли начать обучение на более выгодных условиях.

Выбрать курс
Какова цель функции «spl_autoload_register» в PHP?

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

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

Как это работает:

1️⃣Вы определяете одну или несколько функций автозагрузки, которые сопоставляют имена классов с путями к файлам.
2️⃣Регистрируете эти функции автозагрузки с помощью spl_autoload_register.
3️⃣Когда класс создается или ссылается, и его определение еще не загружено, PHP вызывает зарегистрированные функции автозагрузки через spl_autoload_register, чтобы попытаться загрузить определение класса.
4️⃣Этот процесс позволяет более организованной и эффективной загрузке классов в приложениях PHP, уменьшая необходимость вручную включать файлы классов.