Библиотека собеса по PHP | вопросы с собеседований
Открыть в Telegram
Вопросы с собеседований по PHP и ответы на них. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/9f3affba Для обратной связи: @proglibrary_feeedback_bot
Больше3 149
Подписчики
-124 часа
-27 дней
-630 день
Архив постов
🤓 «Сначала выучу Python идеально, а потом пойду в ML»
Звучит логично, но на практике — ловушка.
Python огромный: фреймворки, библиотеки, нюансы синтаксиса. Учить «всё сразу» можно бесконечно.
В итоге — месяцы зубрёжки, а до ML руки так и не доходят.
На старте достаточно баз: типы данных, циклы, функции, работа с библиотеками. Всё остальное лучше подтягивать в процессе решения ML-задач.
⚠️ До 1 сентября курсы можно забрать по старым ценам. Это последние выходные, когда:
— ML идёт за 34 000 вместо 44 000 ₽ + Python в подарок,
— два в одном: оплатите курс по математике и получите второй доступ в подарок,
— и главное: можно купить все курсы до подорожания.
👉 ML для старта в Data Science
А для будущих Data Scientist’ов у нас ещё:
— Базовые модели ML и приложения
— Математика для Data Science
— AI-агенты для DS-специалистов (2-й поток скоро)
⏰ Осталось 48 часов!
Обратный отсчёт пошёл: только до воскресенья 23:59 можно купить курс «AI-агенты для DS-специалистов» и начать учиться уже с 15 сентября.
⚡️ Это ваши +3 недели форы, чтобы спокойно разобраться в самых сложных темах и прийти к первому занятию 7 октября уже подготовленным.
👉 Забрать место
Напишите на PHP пример реализации паттерна Singleton.
Как Laravel упрощает тестирование и почему это важно?
Laravel упрощает тестирование благодаря встроенным инструментам и структуре, которые способствуют разработке тестируемого кода, обеспечивая правильную работу приложения и его удобное обслуживание по мере роста. Тестирование важно, потому что оно помогает выявлять ошибки на раннем этапе, гарантирует, что новые функции не нарушат существующую функциональность, и даёт уверенность в том, что код работает, как ожидалось, в продакшене.
1. Инструменты для тестирования и настройка окружения
Тестовое окружение: Laravel включает выделенное тестовое окружение, которое можно настроить отдельно от основного приложения. Это позволяет изолировать тестовые базы данных и гарантирует, что тесты не повлияют на реальные данные.
Транзакции базы данных: Трейт RefreshDatabase в Laravel позволяет откатывать транзакции базы данных после каждого теста, что сохраняет базу данных в чистом состоянии и обеспечивает согласованность тестов.
2. Интеграция с PHPUnit
Интеграция с PHPUnit: Laravel использует PHPUnit как основную тестовую среду, и предоставляет конфигурационный файл phpunit.xml, предварительно настроенный для Laravel-проектов. Это обеспечивает стандартизированное тестирование и широкую поддержку для написания и запуска юнит- и функциональных тестов.
Встроенные утверждения: Laravel предоставляет множество утверждений, которые упрощают проверку состояния приложения, HTTP-ответов и валидации данных.
3. Юнит-тестирование для изолированных компонентов
Архитектура Laravel, поддерживающая внедрение зависимостей и поставщиков сервисов, побуждает к написанию модульного кода, который легко тестировать отдельно.
С помощью библиотеки Mockery Laravel позволяет создавать моки зависимостей, чтобы можно было сосредоточиться на тестировании изолированных частей кода без учета внешних интеграций.
4. Функциональные тесты для интегрированной функциональности
HTTP-тестирование: HTTP-методы Laravel позволяют тестировать маршруты, ответы, отправку форм и API через простой и читаемый синтаксис, такой как $this->get('/route').
Тестирование браузера: С помощью Laravel Dusk можно проводить сквозное тестирование взаимодействия с JavaScript и фронтендом, симулируя действия пользователя в браузере, что идеально для тестирования сложных пользовательских интерфейсов.
5. Вспомогательные инструменты и фабрики
Фабрики моделей: Фабрики Laravel упрощают генерацию тестовых данных без необходимости вручную создавать экземпляры моделей. Это особенно полезно для тестирования базы данных, так как позволяет быстро создавать данные в различных состояниях.
Сидеры и Faker: Laravel также интегрирован с Faker для генерации фальшивых данных и позволяет использовать сидеры для определения начальных состояний базы данных.
Что такое Composer?
Composer — это инструмент для управления зависимостями в PHP-приложениях. Он позволяет легко устанавливать, обновлять и управлять библиотеками и фреймворками, которые используются в проекте.
Основные функции Composer:
Установка зависимостей: Composer позволяет определить необходимые библиотеки и их версии в файле composer.json, а затем установить их с помощью команды composer install.
Обновление зависимостей: После установки библиотек, можно обновить их до последних версий, указанных в файле composer.json, с помощью команды composer update.
Автозагрузка классов: Composer автоматически создает файл автозагрузки, который позволяет использовать классы из установленных зависимостей без необходимости явного подключения файлов.
Автоматическое разрешение зависимостей: Composer управляет разрешением зависимостей, учитывая совместимость версий между различными библиотеками.
Создание собственных пакетов: Composer позволяет создавать собственные пакеты для повторного использования в различных проектах и их публикации в репозитории Packagist для общего использования.
Использование Composer значительно упрощает управление зависимостями в PHP-проектах и помогает поддерживать их актуальность и безопасность.
📢 Какой сетап идеально подойдёт для разработки AI-агента?
Голосуйте за свой вариант и пишите в комментариях, в каком режиме вы реально кодите.
❤️ — 1
👍 — 2
⚡️ — 3
👏 — 4
🔥 — 5
🎉 — 6
😁 — 7
😍 — 8
🤩 — 9
Какой бы сетап ни был, без AI-агентов в 2025 всё равно далеко не уедешь.
👉 Научим, как строить агентов, которые кодят с тобой
Что такое функции soundex() и metaphone() в PHP?
Функция soundex():
Функция soundex() вычисляет звуковой индекс строки.
Soundex — это фонетический алгоритм, который назначает код слову на основе его произношения.
Он применяется преимущественно для поиска слов, которые звучат похоже, но могут быть написаны по-разному.
Функция сокращает слова до четырехсимвольного кода, который представляет его звучание.
Это полезно для задач, таких как поиск имен, которые звучат похоже, но имеют разные написания.
Функция metaphone():
Функция metaphone() вычисляет метафонический ключ строки.
Metaphone — это еще один фонетический алгоритм, но он более продвинут, чем Soundex.
Он преобразует слово в фонетический ключ, состоящий из одной или нескольких букв.
В отличие от Soundex, Metaphone учитывает вариации произношения и более эффективен для английских слов.
❗ Так, владелец макбука. Хватит позировать в кофейне.
Настоящее портфолио — это не стикеры на крышке, а проект с чистым кодом, README и рабочей демкой.
Не знаешь, как такой собрать? Научим. Наш курс «ML для старта в Data Science» — это пошаговый гайд к проекту, за который не стыдно.
ОСТАЛАСЬ НЕДЕЛЯ, чтобы забрать его по старой цене в 44.000 ₽. С 1 сентября — всё.
🎁 И да, при покупке курса ML до 1 сентября — курс по Python получаешь бесплатно.
👉 Апгрейд от «вайба» до «оффера» тут
🚀 Почему стоит выбрать Symfony для разработки?
🔹 Модульность и компоненты — независимые части, которые можно использовать отдельно, ускоряя развитие и повышая гибкость.
🔹 Гибкая настройка — высокий уровень кастомизации, поддержка Dependency Injection для сложных проектов.
🔹 Надежность и поддержка — LTS-версии до 3 лет, стабильность и регулярные обновления для бизнеса.
🔹 Инструменты разработки — Symfony CLI, профайлер, генераторы кода, автоконфигурация — ускоряют работу и отладку.
🔹 Сообщество и документация — большое сообщество, обучающие материалы, рецепты и мероприятия помогают быстро освоить и решать задачи.
🧩 Где используют? — Spotify, BlaBlaCar, Dailymotion, а также компоненты Symfony используют Laravel и другие фреймворки.
Выбирайте Symfony — создавайте масштабируемые, гибкие и надежные проекты!
Пройдите тест, получите скидку на курс «Symfony Framework» и станьте востребованным PHP-разработчиком с передовыми навыками:
https://clc.to/WAyOSA
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Что такое TDD?
TDD (Test-Driven Development) — это методология разработки программного обеспечения, в которой разработка программы начинается с написания тестов, которые определяют желаемое поведение программы. Затем код разрабатывается и изменяется таким образом, чтобы эти тесты проходили успешно.
Процесс TDD обычно состоит из трех шагов, известных как «Красный», «Зеленый» и «Рефакторинг»:
Красный (Red): Сначала пишутся тесты для новой функциональности или для исправления ошибок. Поскольку этот этап выполняется до написания реализации, все тесты должны завершаться неудачей (иметь статус «красный»).
Зеленый (Green): Затем пишется минимальное количество кода, необходимое для прохождения тестов. Цель — сделать все тесты прошедшими (иметь статус «зеленый»).
Рефакторинг (Refactor): После того как все тесты прошли успешно, код можно улучшить, переработав его для улучшения структуры, производительности и т. д., сохраняя при этом поведение программы неизменным. Это позволяет улучшать код без риска нарушения его функциональности.
🏃♀️ Новый поток курса — собери своих AI-агентов
7 октября стартует второй поток курса «AI-агенты для DS-специалистов».
За 5 недель вы научитесь собирать агентов, которые уже сейчас будут помогать бизнесу.
В кружке выше Максим Шаланкин, наш преподаватель, рассказывает подробнее — включай, чтобы не пропустить.
👉 Записаться на курс
Что такое план выполнения запроса и как его узнать?
План выполнения запроса (Query Execution Plan) — это детальный анализ того, как база данных будет выполнять запрос, включая порядок обработки данных, используемые индексы, методы соединения и другие оптимизации запроса. Понимание плана выполнения запроса может помочь оптимизировать производительность запросов, выявляя возможные проблемы и улучшая структуру запроса или индексы.
В разных системах управления базами данных (СУБД) есть различные способы получения плана выполнения запроса. Ниже приведены общие методы для некоторых из них:
MySQL / MariaDB:
Используйте ключевое слово EXPLAIN перед запросом SQL.
PostgreSQL:
Используйте ключевое слово EXPLAIN перед запросом SQL.
Для более подробного анализа используйте ключевое слово EXPLAIN ANALYZE.
SQL Server:
Используйте ключевое слово EXPLAIN перед запросом SQL.
Для более подробного анализа используйте команду SET SHOWPLAN_TEXT ON;, а затем выполните запрос.
SQLite:
Используйте ключевое слово EXPLAIN QUERY PLAN перед запросом SQL.
Oracle:
Используйте инструкцию EXPLAIN PLAN FOR.
Полученный план выполнения запроса может быть сложным для понимания, но он предоставляет ценную информацию о том, как база данных обрабатывает ваш запрос, что может помочь в оптимизации его производительности.
Какова разница между функциями session_unregister() и session_unset()?
В PHP функции
session_unregister() и session_unset() использовались для работы с переменными сессии. Однако начиная с PHP 5.3.0, функция session_unregister() была признана устаревшей, и её использование крайне не рекомендуется. Вместо неё следует использовать unset($_SESSION['имя_переменной']).
session_unregister() (Устарела):
Эта функция использовалась для удаления глобальной переменной из текущей сессии.
Была признана устаревшей в PHP 5.3.0 и удалена в PHP 5.4.0.
Основная причина устаревания связана с тем, что она зависела от устаревшей функциональности register_globals, которая считается уязвимостью безопасности.
session_unset():
Эта функция используется для освобождения всех переменных сессии.
Она не уничтожает саму сессию или сбрасывает сессионную куку; она только очищает данные сессии.
Рекомендуется использовать unset($_SESSION['имя_переменной']) для удаления определённой переменной сессии.
В современной разработке на PHP рекомендуется использовать unset($_SESSION['имя_переменной']) или $_SESSION['имя_переменной'] = null; для удаления конкретных переменных сессии и session_unset() для очистки всех переменных сессии. Использование session_unregister() следует избегать из-за её устаревания и потенциальных проблем с безопасностью, связанных с register_globals.Что вам известно о шаблонах, которые применяются в ORM?
В контексте Object-Relational Mapping (ORM), шаблоны (или паттерны) играют важную роль в проектировании и организации работы с базой данных. Вот несколько распространенных шаблонов, используемых в ORM:
Шаблон ActiveRecord: Этот шаблон описывает объект, который инкапсулирует как данные, так и поведение для работы с этими данными. Обычно каждая запись в базе данных представляется объектом ActiveRecord. Он обеспечивает прямое соответствие между объектами и записями в базе данных.
Шаблон Repository: Repository предоставляет абстракцию для работы с коллекциями объектов. Он предоставляет методы для поиска, сохранения, удаления и запросов к данным. Репозиторий инкапсулирует логику доступа к данным и предоставляет интерфейс для работы с этими данными.
Шаблон Identity Map: Этот шаблон обеспечивает глобальное отображение идентичности объектов в приложении. Он гарантирует, что каждый объект в приложении имеет только один экземпляр в памяти, даже если он загружен из базы данных несколько раз. Это помогает избежать проблем с непоследовательностью данных и улучшает производительность.
Шаблон Unit of Work: Этот шаблон отслеживает изменения, сделанные с объектами в рамках одной транзакции базы данных. Он обеспечивает согласованность данных и управляет коммитом или откатом изменений. Шаблон Unit of Work также может использоваться для оптимизации работы с базой данных, пакетного сохранения изменений и управления транзакциями.
Эти шаблоны предоставляют средства для упрощения работы с базой данных в объектно-ориентированных приложениях, обеспечивая гибкость, производительность и согласованность данных. Их использование позволяет разработчикам эффективно работать с данными и минимизировать повторение кода.
+2
Как вы понимаете Exception flow в контексте PHP?
Exception flow в контексте PHP относится к управлению ошибками и исключениями во время выполнения программы. Когда возникает ошибка или неожиданное условие, которое не может быть обработано нормальным образом, PHP может выбросить исключение (exception).
Процесс обработки исключений в PHP следующий:
Выброс исключения (Throwing an Exception): Когда в коде происходит ошибка или неожиданное событие, программа может создать объект исключения и «бросить» его с помощью ключевого слова throw.
Перехват исключения (Catching an Exception): Для обработки исключений можно использовать блоки try-catch. Код, который может вызывать исключение, помещается в блок try, а блок catch используется для обработки возможного исключения.
Finally: Ключевое слово finally может использоваться вместе с блоками try-catch для выполнения кода в любом случае, независимо от того, возникло исключение или нет.
📅 Сегодня в 19:00 МСК — бесплатный вебинар с Марией Жаровой.
Тема: «Введение в ML: как спрогнозировать стоимость недвижимости».
🔹 Разберём задачу прогноза стоимости недвижимости.
🔹 Покажем пошагово, как собрать первую модель.
🔹 Получите готовые скрипты для старта.
Не зайдёшь — будешь ещё год делать вид, что понимаешь графики в чужих презентациях.
👉 Регистрируйтесь
Какие техники вы используете для оптимизации запросов к базе данных в Laravel?
1. Жадная загрузка (Избегание проблемы N+1)
По умолчанию Laravel использует ленивую загрузку, что может вызвать проблему N+1 запроса. Например, когда выполняется запрос для коллекции записей, а затем для каждой записи делается отдельный запрос к связанным данным. Жадная загрузка помогает избежать этой проблемы, выполняя один запрос для связанных данных.
// Ленивая загрузка (неэффективно)
$posts = Post::all();
foreach ($posts as $post) {
echo $post->user->name;
}
// Жадная загрузка (оптимизировано)
$posts = Post::with('user')->get();
foreach ($posts as $post) {
echo $post->user->name;
}
2. Использование select для ограничения извлекаемых столбцов
Часто нет необходимости извлекать все столбцы таблицы. Используйте метод select, чтобы выбирать только нужные данные.
// Извлечение всех столбцов (неэффективно)
$users = User::all();
// Извлечение только необходимых столбцов (оптимизировано)
$users = User::select('id', 'name', 'email')->get();
3. Чанковка запросов
При работе с большими наборами данных загрузка всего набора может перегрузить память. Используйте чанковку для извлечения данных небольшими порциями.
// Извлечение по 100 записей за раз
User::chunk(100, function ($users) {
foreach ($users as $user) {
// Обработка каждого пользователя
}
});
4. Использование whereIn вместо нескольких запросов
Если вам нужно проверить несколько значений для одного столбца, используйте whereIn, чтобы избежать нескольких отдельных запросов.
// Вместо выполнения нескольких запросов
$users1 = User::where('role_id', 1)->get();
$users2 = User::where('role_id', 2)->get();
// Использование whereIn для одного запроса
$users = User::whereIn('role_id', [1, 2])->get();
6. Индексация столбцов базы данных
Убедитесь, что столбцы, по которым часто выполняются запросы (например, используемые в условиях where), имеют соответствующие индексы в базе данных. Это значительно ускорит выполнение запросов.
Индексы можно создать через миграции Laravel:
Schema::table('users', function (Blueprint $table) {
$table->index('email');
});
7. Избегайте COUNT(*) с Eloquent, если это не нужно
Вместо загрузки всех строк только для их подсчета, используйте функцию count() напрямую.
// Неэффективно: загрузка всех записей для подсчета
$users = User::all()->count();
// Эффективно: использование count напрямую
$userCount = User::count();
8. Кэширование частых запросов
Если одни и те же запросы выполняются часто, рассмотрите возможность кэширования их результатов, чтобы уменьшить нагрузку на базу данных.
// Кэширование результата запроса на 60 минут
$users = Cache::remember('users', 60, function () {
return User::all();
});
9. Использование DB::raw для сложных SQL-запросов
Для сложных запросов или в случаях, когда требуются определенные SQL-оптимизации (например, использование функций или подзапросов), можно использовать
DB::raw.
10. Использование пула подключений к базе данных
Использование пула подключений (connection pooling), где это возможно, позволяет повторно использовать существующие подключения к базе данных вместо открытия новых для каждого запроса. Это может значительно сократить задержки выполнения запросов, хотя это больше относится к настройкам сервера, чем к самому Laravel.Для чего используется функция func_num_args()?
В PHP функция
func_num_args() используется для получения количества аргументов, переданных в функцию. Она часто применяется в случае переменного числа аргументов, когда функция может принимать различное количество параметров.
В примере функция sum() принимает любое количество аргументов и вычисляет их сумму. Внутри функции func_num_args() используется для определения количества переданных аргументов, а func_get_arg($i) — для получения значения каждого аргумента по его индексу ($i). Это позволяет функции динамически обрабатывать разное количество аргументов.
Уже доступно! Исследование Telegram 2025 — ключевые инсайты года 
