ar
Feedback
PHP | Вопросы собесов

PHP | Вопросы собесов

الذهاب إلى القناة على Telegram
2 360
المشتركون
+124 ساعات
-57 أيام
-1730 أيام
أرشيف المشاركات
Обнулите все свои кредиты и долги по госпрограмме! Долги от 200т.р. Законно по ФЗ127. 0 проигранных дел. Консультация 0₽. Сох
Обнулите все свои кредиты и долги по госпрограмме! Долги от 200т.р. Законно по ФЗ127. 0 проигранных дел. Консультация 0₽. Сохраню ипотеку. Узнать больше Банкротство влечет негативные последствия, в том числе ограничения на получение кредита и повторное банкротство в течение пяти лет. Предварительно обратитесь к своему кредитору и в МФЦ. #реклама spishy-dolg.ru О рекламодателе

🤔 Чем отличается BacktimeTable от Backtime? 1. BacktimeTable может быть структурой данных или таблицей, используемой для хранения промежуточных результатов в задаче обратного отсчёта или обработки данных. 2. Backtime часто означает сам процесс обратного отсчёта или времени ожидания. 3. Различие зависит от контекста: таблица — для хранения, backtime — для логики. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Боевые роботы — тактическая RPG в стиле sci-fi! Присоединяйся к битве роботов — начни свою мех-легенду уже сейчас! Узнать бол
Боевые роботы — тактическая RPG в стиле sci-fi! Присоединяйся к битве роботов — начни свою мех-легенду уже сейчас! Узнать больше #реклама 16+ yandex.ru О рекламодателе

🤔 В чем разница кэширования, кодирования, шифрования? 1. Кэширование: - Сохранение данных для быстрого повторного доступа, уменьшая время загрузки и нагрузку на сервер. - Пример: сохранение веб-страницы в браузере. 2. Кодирование: - Преобразование данных в другой формат для удобства передачи или совместимости. - Пример: Base64 для передачи бинарных данных через текстовые протоколы. 3. Шифрование: - Защита данных с использованием ключей, чтобы их мог прочитать только авторизованный получатель. - Пример: AES или RSA для передачи конфиденциальной информации. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Хочешь начать карьеру в ИТ на оплачиваемой стажировке? Присоединяйся к ИТ-лагерю Т1 для студентов вузов технических и ИТ-спец
Хочешь начать карьеру в ИТ на оплачиваемой стажировке? Присоединяйся к ИТ-лагерю Т1 для студентов вузов технических и ИТ-специальностей. Теперь в обновлённом формате: ещё больше практики, доступ к платформам Т1, а участие — оплачивается и оформляется как стажировка. За 2,5 месяца вместе с проектной командой ты пройдешь полный цикл создания ИТ-продукта: от идеи до разработки прототипа и финальной защиты. Превратить идею в проект помогут мастер-классы, общение с экспертами и погружение в процессы Т1. Направления подготовки: ✅ ручное тестирование; ✅ прикладное администрирование (DevOps); ✅ системный анализ; ✅ фронтенд-разработка (React); ✅ бэкэнд-разработка (Java). Подай заявку до 30 июня! Старт — в июле. Узнать больше #реклама 16+ career.t1.ru О рекламодателе

🤔 Расскажи про полиморфизм Полиморфизм — это концепция ООП, которая позволяет объектам разных классов обрабатывать одинаковые сообщения или методы по-разному. Полиморфизм позволяет использовать общий интерфейс для взаимодействия с объектами разных типов, не зная их конкретный класс. Он облегчает расширение и поддержку кода, делая его более гибким и удобным для добавления новых классов. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое namespaces Namespaces в PHP — это способ организации кода для предотвращения конфликтов имен между классами, функциями и константами. Использование пространства имен позволяет создать уникальные идентификаторы, чтобы избежать пересечений между именами в крупных проектах или при использовании сторонних библиотек. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое абстрактный класс? Абстрактный класс — это класс, который не может быть создан как объект и служит для того, чтобы задавать общие свойства и методы для классов-наследников. Он может содержать как абстрактные, так и конкретные методы с реализацией. Наследники обязаны реализовать все абстрактные методы родительского класса. Абстрактные классы полезны, когда требуется частичная реализация с обязательной реализацией некоторых методов в дочерних классах. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 В чем отличие адаптера от декоратора? Это структурные паттерны проектирования, которые используются в объектно-ориентированном программировании для решения различных задач по структурированию классов и объектов. Несмотря на то, что оба паттерна оборачивают другие объекты, их цели и способы применения различаются. 🚩Адаптер (Adapter) Преобразовать интерфейс одного класса в интерфейс другого класса, который ожидают клиенты. Адаптер позволяет классам с несовместимыми интерфейсами работать вместе. Адаптер реализует интерфейс, который должен быть представлен клиенту, и перенаправляет вызовы клиента к объекту с другим интерфейсом. Важно, что адаптер изменяет интерфейс взаимодействия, но не добавляет новую функциональность. Вы разрабатываете приложение, которое должно использовать существующую библиотеку классов, интерфейсы которой не совместимы с остальной частью вашего приложения. Создав адаптер для этих классов, вы можете интегрировать библиотеку без изменения её кода или кода приложения. 🚩Декоратор (Decorator) Динамически добавить новую функциональность объекту. В отличие от наследования, декораторы предоставляют гибкий способ расширения функциональности объекта во время выполнения. Декоратор оборачивает исходный объект, предоставляя дополнительное поведение. Он имеет тот же базовый интерфейс, что и оборачиваемый объект, что позволяет использовать декораторы взаимозаменяемо с исходными объектами. Вы разрабатываете систему уведомлений и хотите добавить возможность логирования или шифрования сообщений. Создав декораторы для базового класса отправки сообщений, вы можете легко добавить новую функциональность, обернув базовый объект отправки в один или несколько декораторов. 🚩Отличия 🟠Цель применения Адаптер используется для обеспечения совместимости между различными интерфейсами, позволяя объектам с несовместимыми интерфейсами работать вместе. Декоратор добавляет новую функциональность объектам, не изменяя их интерфейсы. 🟠Изменение интерфейса Адаптер изменяет интерфейс объекта для совместимости с другим интерфейсом. Декоратор не изменяет интерфейс, но добавляет новое поведение, сохраняя при этом оригинальный интерфейс объекта. 🟠Добавление функциональности Декораторы предназначены для добавления новой функциональности объектам. Адаптеры не добавляют новую функциональность; их основная задача — обеспечить работу существующей функциональности через другой интерфейс. Ставь 👍 и забирай 📚 Базу знаний

🤔 В чём преимущество hash-индекса и btree-индекса? 1. Hash-индекс: • Быстрый доступ для равенств (=) и точных запросов. • Не подходит для диапазонных запросов. 2. B-Tree индекс: • Оптимален для диапазонных запросов и сортировки. • Поддерживает равенства и сравнения (<, >). • Медленнее hash-индекса для точного поиска. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое горизонтальное шардирование? Горизонтальное шардирование разделяет данные на отдельные шарды по строкам, распределяя их между несколькими серверами. Это позволяет увеличивать масштаб за счёт добавления новых серверов. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Запустите рекламу в телеграм-каналах через Яндекс Директ Перфоманс-реклама в мессенджере продолжает работать: • Таргетинг по
Запустите рекламу в телеграм-каналах через Яндекс Директ Перфоманс-реклама в мессенджере продолжает работать: • Таргетинг по тематикам и регионам • Умный подбор каналов • Гибкие модели оплаты (CPC и CPV) Яндекс Директ знает, как привлечь целевую аудиторию 💰👌 Попробовать #реклама yandex.ru О рекламодателе

🤔 Что считается хорошо написанным Task`ом? Хорошо написанный Task (задача) должен быть понятным, конкретным и выполнимым. Если задача написана размыто, разработчик потратит больше времени на уточнение деталей, а не на саму работу. 🚩Основные принципы хорошего Task'а 🟠Чёткое и понятное название Плохо: Исправить баг (какой баг? где?) Хорошо: Исправить ошибку расчёта скидки при оформлении заказа 🟠Описание должно отвечать на 3 вопроса: Что нужно сделать? (конкретные действия) Зачем это нужно? (какая проблема решается) Как это проверить? (критерии выполнения) 🟠Минимум абстракции, максимум конкретики Плохо: Добавить авторизацию на сайт Хорошо: Добавить авторизацию через Google OAuth 2.0 для пользователей, чтобы они могли входить через Google-аккаунт 🟠Разбивать задачи на подзадачи (если задача сложная) Например, если задача "Реализовать корзину покупок", то лучше разбить её на: Добавление товаров в корзину Расчёт итоговой суммы Удаление товаров из корзины Оформление заказа 🟠Указывать требования (технические детали, ссылки, макеты, API, форматы данных) Если задача связана с API → указываем эндпоинты. Если UI → прикладываем макеты (Figma, Zeplin). Если есть примеры → добавляем скриншоты. 🟠Добавлять критерии выполнения (Definition of Done, DoD) Плохо: Сделать фильтр по цене Хорошо: Фильтр по цене должен работать в диапазоне от 0 до 100 000, быть интерактивным (ползунок), без перезагрузки страницы. Ставь 👍 и забирай 📚 Базу знаний

🤔 По какому принципу объединяются и разделяются методы в интерфейсах? Методы в интерфейсах группируются по роли или контракту, то есть: - Каждый интерфейс должен описывать конкретное поведение (например, Serializable, Renderable). - Принцип разделения интерфейса (Interface Segregation Principle, SOLID) — лучше несколько небольших интерфейсов, чем один громоздкий. - Интерфейс отражает намерение: что объект умеет делать, а не как он это делает. Это упрощает поддержку, повторное использование и тестирование кода. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Структуры данных в программировании какие знаешь? Структуры данных — это способы хранения и организации данных в памяти компьютера. Они помогают эффективно управлять данными и выбирать оптимальные алгоритмы. 🚩Основные структуры данных 🟠Массив (Array) Упорядоченная коллекция элементов, доступ к которым осуществляется по индексу. Когда нужно быстро получать элементы по индексу. Доступ: O(1) Поиск: O(n) Вставка/Удаление: O(n) (из-за необходимости сдвига элементов)
$numbers = [10, 20, 30, 40]; 
echo $numbers[2]; // 30
🟠Связанный список (Linked List) Элементы (узлы) хранят ссылку на следующий (а иногда и на предыдущий) элемент. Когда часто вставляете/удаляете элементы (без затрат на сдвиг). Доступ: O(n) Вставка/Удаление: O(1) (если известен указатель)
class Node {
    public int $data;
    public ?Node $next;

    public function __construct(int $data) {
        $this->data = $data;
        $this->next = null;
    }
}
🟠Стек (Stack) Структура LIFO (Last In, First Out). Элементы добавляются и удаляются только с одного конца. Для обратного прохода, отмены операций, рекурсии. Вставка/Удаление: O(1) Доступ: O(n)
$stack = new SplStack();
$stack->push(1);
$stack->push(2);
echo $stack->pop(); // 2 (удаляется последний добавленный)
🟠Очередь (Queue) Структура FIFO (First In, First Out). Первым зашёл – первым вышел. Когда элементы должны обрабатываться по порядку (например, задачи в принтере). Вставка/Удаление: O(1)
$queue = new SplQueue();
$queue->enqueue(1);
$queue->enqueue(2);
echo $queue->dequeue(); // 1 (удаляется первый добавленный)
🟠Хэш-таблица (Hash Table) / Ассоциативный массив Хранит пары ключ → значение, обеспечивает быстрый доступ по ключу. Когда нужен быстрый поиск и хранение пар ключ-значение. Доступ/Поиск: O(1)
$hashTable = [
    "name" => "Alice",
    "age" => 25
];

echo $hashTable["name"]; // Alice
🟠Дерево (Tree) Иерархическая структура, где каждый узел может иметь несколько дочерних. Когда важны иерархии (например, файловые системы, база данных). Виды Двоичное дерево (Binary Tree) – у каждого узла до 2 детей. Двоичное дерево поиска (BST) – левый потомок меньше, правый больше. B-дерево – используется в базах данных. Trie (Префиксное дерево) – для хранения строк, часто в поисковых движках.
class TreeNode {
    public int $value;
    public ?TreeNode $left = null;
    public ?TreeNode $right = null;

    public function __construct(int $value) {
        $this->value = $value;
    }
}
🟠Граф (Graph) Набор вершин (узлов) и рёбер (связей между узлами). Для моделирования сетей, карт, социальных графов. Типы графов Ориентированный (направленный) / Неориентированный Взвешенный / Невзвешенный Ациклический (DAG)
$graph = [
    "A" => ["B", "C"],
    "B" => ["A", "D", "E"],
    "C" => ["A", "F"],
    "D" => ["B"],
    "E" => ["B", "F"],
    "F" => ["C", "E"]
];
Ставь 👍 и забирай 📚 Базу знаний

Аренда VPS/VDS-сервера. Виртуальные выделенные серверы в дата-центрах уровня Tier III — 7 готовых конфигураций от 200 ₽/мес.
Аренда VPS/VDS-сервера. Виртуальные выделенные серверы в дата-центрах уровня Tier III — 7 готовых конфигураций от 200 ₽/мес. Преимущества аренды: - Выделенные ресурсы без переплаты; - KVM-виртуализация; - Быстрые NVMe SSD; - Соответствие 152-ФЗ, PCI DSS; - Бесплатная защита от DDoS; - Управление через панель, API и Terraform; - Техподдержка 24/7. Запустите сервер за несколько минут! Попробовать #реклама 16+ selectel.ru О рекламодателе

🤔 Что такое traits? Traits — это механизм PHP, который позволяет использовать повторно код в разных классах, без необходимости наследования. Traits содержат методы, которые можно внедрить в классы, что позволяет избегать дублирования кода. Они особенно полезны для разделения функциональности между классами, которые не могут наследоваться напрямую. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Не грузится? Понимаем. Бесплатный мессенджер для вашей компании - Битрикс24. Личные и групповые чаты, видеозвонки, каналы и н
Не грузится? Понимаем. Бесплатный мессенджер для вашей компании - Битрикс24. Личные и групповые чаты, видеозвонки, каналы и нейросеть. Всё привычно и удобно. Начните работать на бесплатном тарифе уже сейчас. Узнать больше #реклама 16+ bitrix24.ru О рекламодателе

🤔 Что делает бэк-слеш перед глобальными функциями? В PHP бэкслеш (\) перед именем функции или класса указывает, что мы обращаемся к глобальному пространству имён. Это важно, если код находится внутри namespace. 🚩Почему это важно? 🟠Пространства имён могут переопределять глобальные функции Если внутри namespace есть функция с таким же именем, то PHP будет искать её внутри пространства имён, а не в глобальном пространстве.
namespace App;

function strlen($str) {
    return "Фейковая длина строки";
}

echo strlen("Hello!"); // Выведет: "Фейковая длина строки"
🟠Бэкслеш заставляет PHP искать функцию в глобальном пространстве Пример использования \ для вызова стандартной функции PHP
namespace App;

function strlen($str) {
    return "Фейковая длина строки";
}

echo \strlen("Hello!"); // Выведет: 6 (из стандартной библиотеки PHP)
🟠Используется для ускорения работы кода PHP не будет искать функцию внутри namespace, а сразу возьмёт глобальную версию. Это немного ускоряет выполнение.
namespace App;

$t1 = microtime(true);
for ($i = 0; $i < 1000000; $i++) {
    time(); // PHP ищет в namespace, потом в глобальном
}
$t2 = microtime(true);
echo "Обычный вызов: " . ($t2 - $t1) . " секунд\n";

$t1 = microtime(true);
for ($i = 0; $i < 1000000; $i++) {
    \time(); // PHP сразу берёт глобальную функцию
}
$t2 = microtime(true);
echo "С бэкслешем: " . ($t2 - $t1) . " секунд\n";
Ставь 👍 и забирай 📚 Базу знаний