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

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

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

Для обратной связи: @proglibrary_feeedback_bot
加入频道
Что такое антипатерны? Приведите несколько примеров

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

1. Analytical paralysis
Аналитический паралич — считается классическим организационным антипаттерном. Его суть заключается в чрезмерном анализировании ситуации при планировании, так что решение или действие не предпринимаются, по сути парализуя разработку. Зачастую это случается в тех случаях, когда цель состоит в достижении совершенства и полной завершенности периода анализа. Этот антипаттерн характеризуется хождением по кругу (такой себе замкнутый цикл), пересмотром и созданием детальных моделей, что в свою очередь мешает рабочему процессу.

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

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

3.Magic numbers
Магическое числа — это антипаттерн, который затрагивает разнородные константы и переменные в программе без пояснения их цели, смысла. То есть, как правило нет адекватного имени или на крайний случай, комментария, поясняющего, что и зачем. Также как и спагетти код, является одним из наиболее распространённых антипаттернов.

Человек, который не является автором данного кода, с трудом может или вовсе не может объяснить, что это и как оно работает (да и сам автор со временем не сможет). В итоге при изменении этого числа или его удалении код магически перестает работать вовсе.
Какой overhead у persistent соединений в PDO?

Использование постоянных соединений в PDO (через PDO::ATTR_PERSISTENT => true) может снизить накладные расходы на установку соединений с базой данных, особенно если соединение требует значительных ресурсов. Однако этот подход имеет свои особенности и потенциальные недостатки.

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

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

⚠️ Возможные недостатки
Ограничения на количество соединений: Каждый процесс может удерживать своё постоянное соединение, что может привести к превышению лимита соединений на сервере базы данных.
Состояние соединения: Если скрипт завершился с ошибкой или не освободил ресурсы (например, блокировки или транзакции), следующее использование этого соединения может столкнуться с проблемами.
Совместимость с драйверами: Некоторые драйверы, такие как ODBC, могут не поддерживать постоянные соединения должным образом, что может привести к нестабильной работе.

Рекомендации по использованию
Оцените необходимость: Используйте постоянные соединения, если установка соединения с базой данных является узким местом в производительности.
Мониторинг: Следите за количеством активных соединений и состоянием базы данных, чтобы избежать превышения лимитов и других проблем.
Очистка ресурсов: Убедитесь, что скрипты корректно завершают транзакции и освобождают ресурсы перед завершением работы.
Тестирование: Проведите нагрузочное тестирование с включёнными и отключёнными постоянными соединениями, чтобы определить оптимальный вариант для вашего приложения.
Таким образом, постоянные соединения в PDO могут быть полезны для повышения производительности, но требуют внимательного подхода и мониторинга для предотвращения потенциальных проблем.
Какие различия между первичным и уникальным ключами?

«Первичный ключ» (Primary Key) и «уникальный ключ» (Unique Key) — это оба типа ограничений баз данных, используемых для обеспечения уникальности значений в столбцах таблиц. Однако существуют определенные различия в их использовании и семантике:

Уникальность:

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

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

NULL-значения:

Первичный ключ: Не может содержать NULL-значений. Все значения первичного ключа должны быть заполнены.

Уникальный ключ: Может содержать одно NULL-значение. Если столбец с уникальным ключом разрешает NULL, то однако может быть только одна строка с NULL в этом столбце.

Число ключей:

Первичный ключ: В таблице может быть только один первичный ключ.

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

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

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

Уникальный ключ: Используется для обеспечения уникальности значений, но не обязательно для идентификации каждой строки. Может использоваться, например, для уникальных номеров телефонов или электронных адресов в таблице клиентов.
Как вы используете систему событий в Laravel?

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

В этом примере мы создали событие UserRegistered и слушатель SendWelcomeEmail. Когда пользователь регистрируется, мы можем отправить событие UserRegistered, а слушатель SendWelcomeEmail обработает это событие, отправив новому пользователю приветственное письмо.
Что такое миграции?

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

Основные концепции миграций в PHP включают:

1️⃣Создание миграции: Разработчик определяет, какие изменения нужно внести в базу данных, и записывает их в виде миграции. Это может быть создание новой таблицы, добавление/удаление столбца и т.д.

2️⃣Применение миграции: При необходимости разработчик применяет миграции к базе данных. Это приводит к выполнению всех определенных в миграциях SQL-запросов, изменяющих структуру базы данных.

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

Примеры PHP-фреймворков и инструментов, предоставляющих возможности для работы с миграциями, включают Laravel (через механизм миграций Laravel), Symfony (Doctrine Migrations), Phinx и другие. В этих фреймворках миграции часто реализуются в виде кода на PHP, обеспечивая удобство в создании и управлении изменениями в базе данных.
Как очистить кэш Symfony?

Для очистки кэша в Symfony можно использовать команду «cache:pool:clear».

С помощью этой команды вы можете удалить все данные из директории хранилища проекта. В Symfony поставляются три стандартных очистителя кэша:

app_clearer, system_clearer и global_clearer.