ar
Feedback
Библиотека собеса по PHP | вопросы с собеседований

Библиотека собеса по PHP | вопросы с собеседований

الذهاب إلى القناة على Telegram

Вопросы с собеседований по PHP и ответы на них. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/9f3affba Для обратной связи: @proglibrary_feeedback_bot

إظهار المزيد
3 149
المشتركون
-124 ساعات
-27 أيام
-630 أيام
أرشيف المشاركات
🤓 «Сначала выучу Python идеально, а потом пойду в ML» Звучит логично, но на практике — ловушка. Python огромный: фреймворки,
🤓 «Сначала выучу Python идеально, а потом пойду в ML» Звучит логично, но на практике — ловушка. Python огромный: фреймворки, библиотеки, нюансы синтаксиса. Учить «всё сразу» можно бесконечно. В итоге — месяцы зубрёжки, а до ML руки так и не доходят. На старте достаточно баз: типы данных, циклы, функции, работа с библиотеками. Всё остальное лучше подтягивать в процессе решения ML-задач. ⚠️ До 1 сентября курсы можно забрать по старым ценам. Это последние выходные, когда: — ML идёт за 34 000 вместо 44 000 ₽ + Python в подарок, два в одном: оплатите курс по математике и получите второй доступ в подарок, — и главное: можно купить все курсы до подорожания. 👉 ML для старта в Data Science А для будущих Data Scientist’ов у нас ещё: — Базовые модели ML и приложенияМатематика для Data ScienceAI-агенты для DS-специалистов (2-й поток скоро)

⏰ Осталось 48 часов! Обратный отсчёт пошёл: только до воскресенья 23:59 можно купить курс «AI-агенты для DS-специалистов» и н
Осталось 48 часов! Обратный отсчёт пошёл: только до воскресенья 23:59 можно купить курс «AI-агенты для DS-специалистов» и начать учиться уже с 15 сентября. ⚡️ Это ваши +3 недели форы, чтобы спокойно разобраться в самых сложных темах и прийти к первому занятию 7 октября уже подготовленным. 👉 Забрать место

Напишите на PHP пример реализации паттерна Singleton.
Напишите на 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-агента? Голосуйте за свой вариант и пишите в комментариях, в каком режиме
📢 Какой сетап идеально подойдёт для разработки AI-агента? Голосуйте за свой вариант и пишите в комментариях, в каком режиме вы реально кодите. ❤️ — 1 👍 — 2 ⚡️ — 3 👏 — 4 🔥 — 5 🎉 — 6 😁 — 7 😍 — 8 🤩 — 9 Какой бы сетап ни был, без AI-агентов в 2025 всё равно далеко не уедешь. 👉 Научим, как строить агентов, которые кодят с тобой

Что такое функции soundex() и metaphone() в PHP? Функция soundex(): Функция soundex() вычисляет звуковой индекс строки. Sound
Что такое функции soundex() и metaphone() в PHP? Функция soundex(): Функция soundex() вычисляет звуковой индекс строки. Soundex — это фонетический алгоритм, который назначает код слову на основе его произношения. Он применяется преимущественно для поиска слов, которые звучат похоже, но могут быть написаны по-разному. Функция сокращает слова до четырехсимвольного кода, который представляет его звучание. Это полезно для задач, таких как поиск имен, которые звучат похоже, но имеют разные написания. Функция metaphone(): Функция metaphone() вычисляет метафонический ключ строки. Metaphone — это еще один фонетический алгоритм, но он более продвинут, чем Soundex. Он преобразует слово в фонетический ключ, состоящий из одной или нескольких букв. В отличие от Soundex, Metaphone учитывает вариации произношения и более эффективен для английских слов.

❗ Так, владелец макбука. Хватит позировать в кофейне. Настоящее портфолио — это не стикеры на крышке, а проект с чистым кодом, README и рабочей демкой. Не знаешь, как такой собрать? Научим. Наш курс «ML для старта в Data Science» — это пошаговый гайд к проекту, за который не стыдно. ОСТАЛАСЬ НЕДЕЛЯ, чтобы забрать его по старой цене в 44.000 ₽. С 1 сентября — всё. 🎁 И да, при покупке курса ML до 1 сентябрякурс по Python получаешь бесплатно. 👉 Апгрейд от «вайба» до «оффера» тут

🚀 Почему стоит выбрать Symfony для разработки? 🔹 Модульность и компоненты — независимые части, которые можно использовать о
🚀 Почему стоит выбрать 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 также может использоваться для оптимизации работы с базой данных, пакетного сохранения изменений и управления транзакциями. Эти шаблоны предоставляют средства для упрощения работы с базой данных в объектно-ориентированных приложениях, обеспечивая гибкость, производительность и согласованность данных. Их использование позволяет разработчикам эффективно работать с данными и минимизировать повторение кода.

Как вы понимаете Exception flow в контексте PHP? Exception flow в контексте PHP относится к управлению ошибками и исключениям
+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() используется для получения количества аргументов
Для чего используется функция func_num_args()? В PHP функция func_num_args() используется для получения количества аргументов, переданных в функцию. Она часто применяется в случае переменного числа аргументов, когда функция может принимать различное количество параметров. В примере функция sum() принимает любое количество аргументов и вычисляет их сумму. Внутри функции func_num_args() используется для определения количества переданных аргументов, а func_get_arg($i) — для получения значения каждого аргумента по его индексу ($i). Это позволяет функции динамически обрабатывать разное количество аргументов.