ch
Feedback

不要被骗子欺骗!Telemetrio 会找到并标记这些频道 👉 如果想查看标记,请订阅

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

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

前往频道在 Telegram

Вопросы с собеседований по PHP и ответы на них. По рекламе: @tproger_sales_bot Учиться у нас: clc.to/5JWKxA Для обратной связи: @proglibrary_feeedback_bot

显示更多
3 072
订阅者
无数据24 小时
-107 天
-1930 天
吸引订阅者
10月 '26
十月 '26
+19
在2个频道中
九月 '26
+24
在0个频道中
Get PRO
八月 '26
+14
在1个频道中
Get PRO
七月 '26
+21
在2个频道中
Get PRO
六月 '26
+25
在2个频道中
Get PRO
五月 '26
+34
在2个频道中
Get PRO
四月 '26
+41
在2个频道中
Get PRO
三月 '26
+48
在2个频道中
Get PRO
二月 '26
+49
在1个频道中
Get PRO
一月 '26
+48
在1个频道中
Get PRO
十二月 '25
+28
在0个频道中
Get PRO
十一月 '25
+31
在0个频道中
Get PRO
十月 '25
+26
在0个频道中
Get PRO
九月 '25
+12
在0个频道中
Get PRO
八月 '25
+11
在2个频道中
Get PRO
七月 '25
+20
在0个频道中
Get PRO
六月 '25
+42
在1个频道中
Get PRO
五月 '25
+45
在0个频道中
Get PRO
四月 '25
+52
在1个频道中
Get PRO
三月 '25
+124
在52个频道中
Get PRO
二月 '25
+73
在31个频道中
Get PRO
一月 '25
+114
在35个频道中
Get PRO
十二月 '24
+94
在35个频道中
Get PRO
十一月 '24
+169
在37个频道中
Get PRO
十月 '24
+156
在35个频道中
Get PRO
九月 '24
+152
在35个频道中
Get PRO
八月 '24
+209
在35个频道中
Get PRO
七月 '24
+146
在35个频道中
Get PRO
六月 '24
+242
在30个频道中
Get PRO
五月 '24
+129
在35个频道中
Get PRO
四月 '24
+1 082
在36个频道中
Get PRO
三月 '24
+303
在30个频道中
Get PRO
二月 '24
+254
在32个频道中
Get PRO
一月 '24
+216
在25个频道中
Get PRO
十二月 '23
+102
在25个频道中
Get PRO
十一月 '23
+1 306
在4个频道中
日期
订阅者增长
提及
频道
26 十月0
25 十月+1
24 十月0
23 十月0
22 十月+1
21 十月+1
20 十月+1
19 十月0
18 十月0
17 十月+1
16 十月0
15 十月+3
14 十月0
13 十月+3
12 十月0
11 十月+2
10 十月0
09 十月+1
08 十月0
07 十月+1
06 十月0
05 十月+2
04 十月0
03 十月+1
02 十月+1
01 十月0
频道帖子
❓ Почему переименование параметра может сломать вызовы с именованными аргументами? Ответ: Потому что с PHP 8 имя параметра используется при связывании именованного аргумента с параметром функции. Допустим, есть функция findUser(int $userId), а клиент вызывает findUser(userId: 42). Если переименовать параметр в $id, позиционный вызов findUser(42) продолжит работать. Но прежний именованный вызов завершится ошибкой Unknown named parameter $userId, если функция не принимает этот аргумент через вариативный параметр. Порядок и тип параметра при этом могли вообще не измениться. Ломается именно обращение по старому имени. Это касается и переопределения методов: язык может разрешать другие имена параметров в реализации, но именованный вызов будет зависеть от фактически выбранного метода. Поэтому имена параметров публичного API стоит учитывать при оценке обратной совместимости, а не считать их исключительно внутренней деталью. Подробнее в документации PHP 🐸 Библиотека собеса по PHP

2
📌 Один курс — хорошее вложение в себя. Два по той же цене — ещё лучше. В Proglib Academy действует акция: покупаешь один кур
📌 Один курс — хорошее вложение в себя. Два по той же цене — ещё лучше. В Proglib Academy действует акция: покупаешь один курс, а второй получаешь в подарок. Например, можно совместить два направления по работе с ИИ: 💥 ИИ для разработчиков — применение нейросетей в повседневной разработке: работа с кодом, тестирование и ревью. 💥 Разработка ИИ-агентов — архитектура агентов и создание собственных AI-решений. 📍 Разница в цене — почти 50 тысяч рублей. Можно освоить больше, не выходя за рамки запланированного бюджета. А если тебе интереснее Python, алгоритмы, backend или DevOps — выбирай другую пару курсов из каталога. Акция действует до 31 октября включительно ⏳ ⏮️ Пора прокачать свой стек
347
3
❓ Почему try вокруг создания генератора может не поймать исключение из его тела? Ответ: Потому что вызов функции-генератора создаёт объект Generator, а выполнение её тела начинается при запуске или обходе генератора. Представьте, что функция содержит проверку файла, затем yield. Вы обернули только получение генератора в try, а foreach разместили после catch. Если проверка файла выбросит исключение при начале обхода, этот catch его уже не перехватит. Даже код, записанный до первого yield, относится к отложенному выполнению тела генератора. Чтобы обработать его исключения, нужно охватить try и ту часть программы, которая запускает или продолжает обход. Но не все ошибки откладываются. Вычисление аргументов и проверка их типов происходят при вызове и могут завершиться ошибкой сразу. Если проверку нужно выполнить именно в момент вызова, можно вынести её в обычную функцию-обёртку, которая после проверки вернёт генератор. Подробнее в документации PHP 🐸 Библиотека собеса по PHP
385
4
❓ Перехватит ли catch (Exception) ошибку TypeError? Ответ: Нет. TypeError не наследуется от Exception — он наследуется от Error. В PHP 7 и новее Exception и Error образуют две отдельные ветки, которые реализуют общий интерфейс Throwable. Поэтому catch (Exception $e) перехватит исключения из ветки Exception, но пропустит TypeError. Если обработчику действительно нужно принимать обе категории, используют catch (Throwable $e). Если требуется обработать только ошибку типов, можно явно указать catch (TypeError $e). Например, строгая проверка аргумента обнаружила несовместимый тип. Обработчик Exception не сработает, а обработчик TypeError или Throwable — сработает. При этом Throwable не превращает любой сбой процесса в перехватываемое исключение. И перехват ошибки типов не означает, что её стоит скрыть: часто она указывает на дефект программы, который нужно исправить. Подробнее в документации PHP 🐸 Библиотека собеса по PHP
419
5
❓ Почему callable можно использовать для параметра, но нельзя для типа свойства? Ответ: Потому что PHP не поддерживает callable как тип свойства. Объявление public callable $handler недопустимо, хотя параметр функции с типом callable разрешён. Одна из причин ограничения — возможность вызова зависит от контекста доступа. Например, массив с объектом и именем его private-метода может быть вызываемым внутри класса, но недоступным для вызова снаружи. Поэтому недостаточно однажды проверить значение при записи в свойство и считать, что оно будет вызываемым в любом месте программы. Для хранения обработчика можно использовать свойство типа Closure. Переданный callable при необходимости преобразуют через Closure::fromCallable(). Полученное замыкание сохраняет возможность вызова с учётом контекста, в котором оно было создано. С PHP 8.1 доступен и синтаксис создания вызываемого объекта первого класса, например $object->method(...). Правила видимости при его создании всё равно действуют. Подробнее в документации PHP 🐸 Библиотека собеса по PHP
455
6
😎 Выбираешь один курс, второй получаешь бесплатно. Баг? Нет, акция! До 31 октября в Proglib Academy можно выбрать два курса
😎 Выбираешь один курс, второй получаешь бесплатно. Баг? Нет, акция! До 31 октября в Proglib Academy можно выбрать два курса и заплатить только за один. Например, можно совместить: 💥 ИИ для разработчиков — применение нейросетей в повседневной разработке: работа с кодом, тестирование и ревью. 💥 Разработка ИИ-агентов — архитектура агентов и создание собственных AI-решений. Вместе курсы стоят 108 000 ₽, но по акции оба обойдутся в 59 000 ₽. Экономия — 49 000 ₽ 🔥 Интересуют Python и ИИ или алгоритмы и архитектура? Можно выбрать любые два курса из каталога. Акция действует до 31 октября включительно ⏳ ⏬ Собрать свой учебный билд
475
7
❓ В каком файле strict_types определяет проверку аргументов функции? Ответ: Для проверки скалярных аргументов обычного прямого вызова важен файл, из которого вызывают функцию. Допустим, функция sum(int $value) объявлена в файле с declare(strict_types=1). Если вызвать sum('42') из другого файла без строгого режима, числовая строка может быть преобразована в int. Одного strict_types рядом с объявлением недостаточно, чтобы сделать все внешние вызовы строгими. Если же strict_types включён в вызывающем файле, такая строка приведёт к TypeError. При этом int разрешено передавать в параметр float даже в строгом режиме. Для возвращаемого значения правило другое: режим определяется файлом, где объявлена функция. Строгая типизация не заменяет проверку входных данных и не меняет правила операторов сравнения. Здесь речь именно о проверке объявленных скалярных типов. Подробнее в документации PHP 🐸 Библиотека собеса по PHP
524
8
SensitiveParameter скрывает пароль во всех логах? Параметр функции помечен атрибутом SensitiveParameter. Внутри функция записала его значение в прикладной лог, затем выбросила исключение. Что атрибут скроет? Ответ: Значение аргумента в stack trace, но не самостоятельную запись в прикладной лог. В трассировке оно представлено SensitiveParameterValue. В проверенном примере значение demo-secret осталось в файле лога. Атрибут появился в PHP 8.2, он не шифрует переменную и не очищает все места, куда код её передал. Если выводите аргументы исключения, отдельно проверяйте настройку zend.exception_ignore_args. Назначение SensitiveParameter
736
9
👀 Как вы смотрите видео? Разбираете урок, слушаете интервью фоном или начинаете на телефоне, а продолжаете на большом экране? Хотим узнать, что делает просмотр удобным для вас. Вспомните последнее видео — ролик, урок, фильм или серию сериала — и расскажите о своём опыте. Если детали не запомнились, можно так и ответить. 🕰️ Опрос займёт около 3 минут. В результатах сможете сравнить свои привычки с ответами других участников. А разработчики и инженеры видеоплатформы расскажут, что происходит по ту сторону экрана, пока вы смотрите видео. 🔗 Поделиться опытом 🐸 Библиотека программиста
625
10
Почему modify не изменил DateTimeImmutable? Объект хранит 2026-10-15 в UTC. Вызвали modify('+1 day'), но возвращённое значение не сохранили. Какая дата останется в исходном объекте? Ответ: 2026-10-15. Метод возвращает новый объект, исходный DateTimeImmutable не меняется. Если сохранить результат вызова, новый объект будет содержать 2026-10-16. Это отличается от изменяемого DateTime: одинаковое название метода не означает одинаковую семантику изменения. Передача исходного объекта в другую функцию сама по себе не заменит ссылку на новый результат. Контракт DateTimeImmutable
848
11
❓ Расскажите о паттерне Bridge Bridge — это структурный паттерн, который разделяет абстракцию и реализацию так, чтобы они могли изменяться независимо друг от друга. Простыми словами: вместо одной толстой иерархии наследования вы разбиваете её на две независимые — «что делать» и «как делать» — и связываете их композицией. ▪️ Когда использовать — Есть две ортогональные оси изменения (тип × реализация) — Хотите избежать «взрыва» подклассов — Нужно переключать реализацию в runtime ▪️ Bridge vs Strategy — Strategy: меняет один алгоритм внутри объекта — Bridge: разделяет целые иерархии абстракции и реализации ▪️ Минус Усложняет код, если оси изменения всего одна — тогда достаточно обычного полиморфизма.
560
12
😭 Как не потратить недельный лимит AI-кодинга за три дня? Разберём на вебинаре, как тратить меньше на AI-агентов — без потер
😭 Как не потратить недельный лимит AI-кодинга за три дня? Разберём на вебинаре, как тратить меньше на AI-агентов — без потери качества кода. 🔘 Поговорим о том: — когда дорогая модель действительно нужна, а когда хватит дешёвой; — сколько стоит один прогон и куда уходят токены; — какие задачи можно отдавать субагентам; — как настроить маршрутизацию моделей; — что проверять в AI-коде перед merge. ✏️ Покажем всё на конкретных цифрах и вживую: сравним расходы до и после. ⬇️ 18 сентября, 19:00 МСК ⬇️ 1,5 часа · бесплатно ⬇️ Арсений Харланов и Олег Лайок 💬 Пишите в комментариях, где упираетесь в лимиты и на что уходят деньги. Самые залайканные вопросы разберём на вебинаре. 🔗 Зарегистрироваться на вебинар⁠
501
13
Какова разница между «cookie» и «session»? В PHP «cookie» и «session» — это механизмы управления состоянием в веб-приложениях, но они служат немного разным целям: Cookie: Куки — это небольшие фрагменты данных, которые отправляются с веб-сервера на веб-браузер пользователя и хранятся локально на компьютере пользователя. Куки обычно используются для хранения информации, специфичной для пользователя, такой как учетные данные для входа, предпочтения или элементы корзины покупок. Они часто используются для отслеживания поведения пользователя и персонализации пользовательского опыта. У куки может быть время истечения, после которого они автоматически удаляются из браузера пользователя. Session: Сессия — это способ хранения информации о пользователе на протяжении нескольких страниц или запросов в рамках одного посещения веб-сайта. В отличие от куки, которые хранятся на компьютере пользователя, данные сессии хранятся на сервере. Сессии обычно используются для поддержания аутентификации пользователя и для хранения временной информации, связанной с взаимодействием пользователя с веб-сайтом. Сессии часто реализуются с помощью уникального идентификатора, называемого идентификатором сессии, который передается между сервером и клиентом для ассоциирования последующих запросов с той же сессией.
582
14
👅 Самое сложное — выбрать не курс, а направление Сегодня хочется разобраться в AI-агентах. Через пару недель появляется зада
👅 Самое сложное — выбрать не курс, а направление Сегодня хочется разобраться в AI-агентах. Через пару недель появляется задача, где нужны алгоритмы. Потом понимаешь, что неплохо бы освежить Python или математику для Data Science. 🔜 Именно поэтому подписка на обучение многим оказывается удобнее отдельных курсов. Можно спокойно переключаться между темами, когда меняются задачи, а не покупать новую программу каждый раз. В подписку Proglib Academy входят все основные направления — AI, ML, Python, алгоритмы, математика для DS и другие курсы, а ещё закрытый видеохаб с вебинарами практиков. Начать можно с пробного месяца. Если решите остаться, его стоимость зачтётся при оформлении подписки 😎 🔗 Узнать подробнее 🏃‍♀️ Proglib Academy
481
15
Один доступ вместо вечного выбора между «нужно для работы» и «давно хотелось изучить» 👇
535
16
❓ Объясни разницу между Gate и Policy в Laravel? Оба инструмента для авторизации, но с разной областью применения. Gate — простые одиночные проверки, не привязанные к модели: // Определяем в AuthServiceProvider Gate::define('access-admin-panel', function (User $user) { return $user->is_admin; }); // Проверяем if (Gate::allows('access-admin-panel')) { ... } // или в контроллере $this->authorize('access-admin-panel'); Policy — класс с набором правил для конкретной модели: // php artisan make:policy PostPolicy --model=Post class PostPolicy { public function update(User $user, Post $post): bool { return $user->id === $post->user_id; } public function delete(User $user, Post $post): bool { return $user->id === $post->user_id || $user->is_admin; } } // Использование $this->authorize('update', $post); Правило выбора — Нет модели → Gate — Есть модель, несколько действий → Policy
765
17
❓ Использует ли Laravel Symfony? Да, Laravel широко использует компоненты фреймворка Symfony. Laravel, популярный PHP-фреймворк, использует несколько компонентов Symfony, чтобы предоставить надежную и богатую функциями основу для создания веб-приложений. Некоторые из компонентов Symfony, используемых в Laravel, включают: HTTP Foundation: этот компонент используется для обработки HTTP-запросов и ответов. Консоль (Console): командный интерфейс Artisan в Laravel построен с использованием компонента консоли Symfony. Диспетчер событий (Event Dispatcher): система обработки событий в Laravel работает на основе компонента диспетчера событий Symfony. Файловая система (Filesystem): компонент файловой системы Symfony используется для операций с файлами. Внедрение зависимостей (Dependency Injection): Laravel использует контейнер внедрения зависимостей Symfony для управления зависимостями.
781
18
🎯 У разработчика, DevOps-инженера и техлида разные причины задуматься о системной работе с AI-агентами Но цель одна: перейти
🎯 У разработчика, DevOps-инженера и техлида разные причины задуматься о системной работе с AI-агентами Но цель одна: перейти от случайных удачных запусков к управляемому процессу на реальном проекте — с понятными правилами, ревью, контролем расходов и безопасности ✔️ На курсе «ИИ для разработчиков» участники выстраивают такой процесс на практике: подключают инструменты, задают границы для агента и учатся понимать, где ему можно доверять работу, а где требуется проверка. ⚡️ Предзапись на осенний поток уже открыта 🏃‍♀️ Proglib Academy
512
19
Разработчику нужен стабильный результат, DevOps — контроль инфраструктуры, техлиду — правила для всей команды. Собрали это в одном посте 👇
598
20
❓ Что такое Idempotency в контексте HTTP и очередей? Как обеспечить? Идемпотентность — повторный вызов с теми же параметрами даёт тот же результат без дополнительных побочных эффектов. HTTP методы: GET, HEAD, PUT, DELETE — идемпотентны по спецификации. POST — нет. Для POST-запросов применяется Idempotency Key: клиент генерирует UUID и передаёт в заголовке. Сервер кэширует результат под этим ключом. При повторном запросе возвращает закэшированный ответ, не выполняя операцию повторно. В очередях: воркер может упасть после обработки задачи, но до подтверждения (ack). Брокер переотправит задачу. Обработчик должен быть идемпотентным — повторная обработка одной и той же задачи не должна создавать дублей. Техники обеспечения идемпотентности: — Хранить processed_ids и проверять перед обработкой — Использовать INSERT IGNORE / ON DUPLICATE KEY в MySQL — Использовать upsert (INSERT ... ON CONFLICT DO NOTHING в PostgreSQL) — Проверять состояние перед изменением ("уже оплачен — пропустить") Идемпотентность — обязательное требование для любого обработчика в распределённой системе с at-least-once delivery.
640