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

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

الذهاب إلى القناة على Telegram
2 345
المشتركون
+224 ساعات
-27 أيام
-2430 أيام
أرشيف المشاركات
Поддерживаем и дорабатываем сайты на PHP-фреймворках ✅ Symfony, Laravel, Yii, Zend 👌 Наводим порядок в коде, следим за безоп
Поддерживаем и дорабатываем сайты на PHP-фреймворках ✅ Symfony, Laravel, Yii, Zend 👌 Наводим порядок в коде, следим за безопасностью ⚡ Быстро реагируем на обращения и качественно выполняем задачи ❤️ Гарантия на выполненные работы — 12 мес. Узнать больше #реклама njsoft.dev О рекламодателе

🤔 Что такое медленный запрос? Это запрос, выполнение которого занимает больше времени, чем заданный порог. 1. Причины: отсутствие индексов, сложные объединения, большой объём данных. 2. Оптимизация: использование индексов, анализ плана выполнения (EXPLAIN) и уменьшение объёма данных. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Слово "global" для чего используется? Ключевое слово global используется в PHP для доступа к глобальным переменным внутри функций. 🚩Как работает `global`? Доступ к глобальной переменной внутри функции
$counter = 10; // Глобальная переменная

function increment() {
    global $counter; // Доступ к глобальной переменной
    $counter++;
}

increment();
echo $counter; // ✅ 11
Использование нескольких глобальных переменных
$a = 5;
$b = 10;

function sum() {
    global $a, $b;
    $b = $a + $b; // Меняем глобальную переменную $b
}

sum();
echo $b; // ✅ 15
🟠Альтернативный способ – `$GLOBALS` Можно использовать суперглобальный массив $GLOBALS, который хранит все глобальные переменные.
$x = 3;
$y = 7;

function multiply() {
    $GLOBALS['y'] = $GLOBALS['x'] * $GLOBALS['y'];
}

multiply();
echo $y; // ✅ 21
🚩Когда `global` – плохая идея? Глобальные переменные усложняют отладку (их можно случайно изменить). Функции становятся зависимыми от внешних данных (плохо для тестирования). Лучше передавать переменные через аргументы функции. Альтернативный способ (без global)
function increment($counter) {
    return $counter + 1;
}

$counter = 10;
$counter = increment($counter);
echo $counter; // ✅ 11
Ставь 👍 и забирай 📚 Базу знаний

Курс "Дизайн карточек для WB и Ozon". Бесплатно и с нуля Дизайнер карточек для маркетплейсов — востребованная и доходная проф
Курс "Дизайн карточек для WB и Ozon". Бесплатно и с нуля Дизайнер карточек для маркетплейсов — востребованная и доходная профессия 💰 Научись ей бесплатно! - Бесплатный доступ к курсу - Разбор ДЗ от наставника - Мощные кейсы в портфолио Узнать больше #реклама 16+ yudaevschool24.online О рекламодателе

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

Искусственный интеллект помогает больше продавать Битрикс24 CRM + Ai упрощает работу менеджера. Расшифровывает записи звонков
Искусственный интеллект помогает больше продавать Битрикс24 CRM + Ai упрощает работу менеджера. Расшифровывает записи звонков клиентам и сам заполняет карточку сделки. Менеджер в это время уже звонит следующему клиенту. Попробуйте умную CRM Попробовать #реклама 16+ bitrix24.ru О рекламодателе

🤔 Как работает бинарное дерево? Бинарное дерево – это структура данных, где каждый узел имеет максимум 2 потомка: Левый потомок содержит меньшие значения. Правый потомок содержит большие значения. 🚩Как устроено бинарное дерево? Каждый узел состоит из: Значения (value) – данные в узле. Ссылки на левый (left) и правый (right) потомки (или null, если потомка нет).
       8
      / \
     3   10
    / \    \
   1   6    14
      / \   /
     4   7 13
🚩Основные операции с бинарным деревом 🟠Вставка нового элемента Если дерево пустое → создаём корневой узел. Сравниваем значение с корнем: - Если меньше → идём налево. - Если больше → идём направо. Повторяем, пока не найдём свободное место.
       8
      / \
     3   10
    / \    
   1   6  
      / \  
     4   7  
    /
   5  <-- новый элемент добавляется слева от 6
Код вставки в PHP
class Node {
    public int $value;
    public ?Node $left = null;
    public ?Node $right = null;

    public function __construct(int $value) {
        $this->value = $value;
    }
}

class BinaryTree {
    public ?Node $root = null;

    public function insert(int $value) {
        $this->root = $this->insertRec($this->root, $value);
    }

    private function insertRec(?Node $node, int $value): Node {
        if ($node === null) return new Node($value);
        if ($value < $node->value) $node->left = $this->insertRec($node->left, $value);
        else $node->right = $this->insertRec($node->right, $value);
        return $node;
    }
}

$tree = new BinaryTree();
$tree->insert(8);
$tree->insert(3);
$tree->insert(10);
$tree->insert(6);
$tree->insert(14);
🟠Поиск элемента в дереве Алгоритм: Начинаем с корня. Если value == корень → найдено. Если value < корень → ищем влево. Если value > корень → ищем вправо. 1. 6 < 8 → идём влево к 3. 2. 6 > 3 → идём вправо к 6. 3. Нашли!
public function search(?Node $node, int $value): ?Node {
    if ($node === null || $node->value === $value) return $node;
    return ($value < $node->value)
        ? $this->search($node->left, $value)
        : $this->search($node->right, $value);
}

$foundNode = $tree->search($tree->root, 6);
echo $foundNode ? "Найдено: " . $foundNode->value : "Не найдено";
🟠Удаление элемента из дерева Сложность: 1. Если узел – лист → просто удаляем. 2. Если у узла один потомок → заменяем его потомком. 3. Если два потомка → находим минимальный элемент в правом поддереве и заменяем им удаляемый узел. Пример удаления 3 (у него есть два потомка 1 и 6): 1. Находим минимальный узел в правом поддереве → 4. 2. Заменяем 3 на 4.
       8
      / \
     3   10
    / \    
   1   6  
      / \  
     4   7  
После удаления 3
       8
      / \
     4   10
    / \    
   1   6  
      / \  
     5   7  
Ставь 👍 и забирай 📚 Базу знаний

Рост нагрузки, стоимость инфраструктуры и ожидания пользователей — всё растёт. А что насчет производительности ваших сервисов
Рост нагрузки, стоимость инфраструктуры и ожидания пользователей — всё растёт. А что насчет производительности ваших сервисов? 21–25 апреля пройдет Podlodka PHP Crew — онлайн-конференция, где дают практические советы по реализации оптимизации. Podlodka PHP Crew — это практичные конференции для PHP-разработчиков. Формат — утро и вечер, удобно для жизни и работы. Что в программе: Павел Вирский (Ozon) — расскажет, как подойти к горизонтальному масштабированию PHP-приложений: с чего начать, что точно изменится в архитектуре и какие профиты вы получите от балансировки трафика 🧠 Олег Мифле (Altenar) — покажет, как индексы в БД могут навредить, и что делать, когда “оптимизация” приводит к регрессу производительности 💥 Ярослав Тарасов (Skyeng) — проведёт разбор оптимизации Symfony-приложения через RoadRunner: от архитектуры до конкретных замеров ⚙️ Александр Макаров (Yii, Twindo) — расскажет о низкоуровневой оптимизации PHP: от мелких улучшений до AI, который сам оптимизирует ваш код 🧩 🎯 Всё это — для того, чтобы применить знания сразу. Зарегистрироваться: https://podlodka.io/phpcrew

Запустите рекламу в телеграм-каналах с Яндекс Директом Перфоманс-реклама теперь в телеграм-каналах ⚡ Яндекс Директ знает, как
Запустите рекламу в телеграм-каналах с Яндекс Директом Перфоманс-реклама теперь в телеграм-каналах ⚡ Яндекс Директ знает, как привлечь целевую аудиторию 💰👌 Попробовать #реклама yandex.ru О рекламодателе

🤔 Что будет, если число 3 (int) сложить со строкой "4"? Результат зависит от языка программирования: - В Python или JavaScript строка "4" будет конкатенирована, результат – "34". - В PHP строка "4" преобразуется в число, результат – 7. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Бесплатное льготное обучение: 3 месяца Ищем людей, которые хотят обучиться и работать в IT-сфере из дома В конце обучения вы
Бесплатное льготное обучение: 3 месяца Ищем людей, которые хотят обучиться и работать в IT-сфере из дома В конце обучения вы пройдете стажировку и устроитесь на работу с зп от 150.000 рублей Образование, место жительства, трудовой стаж — не важны! Для старта нужно: — пройти короткий тест — заполнить анкету На что можно рассчитывать, после обучения: ✅ удаленная работа ✅ зп от 150.000 рублей (потолка нет) ✅ стабильная подработка, если не хотите уходить с основной работы ⚡ Осталось всего 47 бесплатных мест. Успейте пройти тест и оставить заявку: Узнать больше #реклама 16+ technolium.ru О рекламодателе

Repost from easyoffer
📅 Осталось 7 дней до конца краудфандинга Мы на финишной прямой! Если ты планировал присоединиться, но ещё не успел, сейчас и
📅 Осталось 7 дней до конца краудфандинга Мы на финишной прямой! Если ты планировал присоединиться, но ещё не успел, сейчас идеальный момент. Вознаграждения за поддержку: 🚀 PRO подписка к easyoffer 2.0 на 1 год по цене месячной подписки. Активировать подписку можно в любой момент, например, когда начнешь искать работу. ➕ Приглашение на закрытое бета-тестирование 👉 Поддержать easyoffer 2.0 Не откладывай на последний момент 📌 Если не получается оплатить через карту РФ — напишите мне @kivaiko, и мы найдём удобный способ

🤔 Как спроектировать базу данных? Проектирование базы данных – это ключевой этап в создании любой системы, где хранятся данные. Если БД спроектирована плохо, это приведёт к медленной работе, избыточности данных и сложным обновлениям. 🟠Определение требований и структуры данных Сначала нужно понять, какие данные будут храниться и как они связаны. Какие объекты будут в системе? (например, пользователи, заказы, товары). Как они связаны друг с другом? (например, один пользователь может делать много заказов). Какие поля нужны в каждой таблице? (например, email, password, created_at). - Какие запросы будут выполняться чаще всего? Пример: интернет-магазин Пользователи (users) Товары (products) Заказы (orders) Связь между заказами и товарами (order_items) 🟠Определение таблиц и связей (ERD – диаграмма) Разделяем данные по таблицам и определяем связи (1-к-1, 1-к-N, N-к-N). Связи между таблицами: 1-к-1 → один профиль = один пользователь (users → user_profiles). 1-к-N → один пользователь = много заказов (users → orders). N-к-N → один заказ = много товаров, и один товар может быть в разных заказах (orders ↔️ products).
Users (id) --- (1:N) --- Orders (id, user_id) --- (N:M) --- Order_Items (order_id, product_id, quantity)
Products (id)
SQL-создание таблиц
CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100),
    email VARCHAR(255) UNIQUE,
    password VARCHAR(255),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE products (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(255),
    price DECIMAL(10,2),
    stock INT
);

CREATE TABLE orders (
    id INT PRIMARY KEY AUTO_INCREMENT,
    user_id INT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);

CREATE TABLE order_items (
    order_id INT,
    product_id INT,
    quantity INT,
    PRIMARY KEY (order_id, product_id),
    FOREIGN KEY (order_id) REFERENCES orders(id) ON DELETE CASCADE,
    FOREIGN KEY (product_id) REFERENCES products(id) ON DELETE CASCADE
);
Ставь 👍 и забирай 📚 Базу знаний

Искусственный интеллект помогает больше продавать Битрикс24 CRM + Ai упрощает работу менеджера. Расшифровывает записи звонков
Искусственный интеллект помогает больше продавать Битрикс24 CRM + Ai упрощает работу менеджера. Расшифровывает записи звонков клиентам и сам заполняет карточку сделки. Менеджер в это время уже звонит следующему клиенту. Попробуйте умную CRM Попробовать #реклама 16+ bitrix24.ru О рекламодателе

🤔 Что такое динамическая типизация Динамическая типизация — это свойство языка программирования, где тип переменной определяется во время выполнения, а не во время компиляции. Это позволяет использовать одну переменную для хранения данных разных типов, упрощая код, но также увеличивая вероятность ошибок, так как проверки типов происходят в процессе выполнения. Языки с динамической типизацией, такие как Python и JavaScript, предлагают большую гибкость, но требуют внимательности при работе с типами. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Как посчитать функцию если внутри неё много различных действий? Сложность функции можно оценить с помощью Big O (O-нотация) – это способ понять, как увеличивается время работы функции при росте входных данных. 🚩Определение сложности по Big O Константные операции (+, -, *, /, if, return) считаются за O(1). Циклы (for, while) увеличивают сложность** (например, for на N итераций → O(N)). Вложенные циклы (for внутри for) дают O(N²). Рекурсия учитывается как глубина рекурсии. 🚩Примеры расчёта сложности Простая функция (O(1)) – не зависит от входных данных
function addNumbers($a, $b) {
    return $a + $b;
}
Линейная сложность O(N) (цикл)
function printNumbers($n) {
    for ($i = 0; $i < $n; $i++) {
        echo $i;
    }
}
Квадратичная сложность O(N²) (вложенные циклы)
function printPairs($n) {
    for ($i = 0; $i < $n; $i++) {
        for ($j = 0; $j < $n; $j++) {
            echo "($i, $j) ";
        }
    }
}
Логарифмическая сложность O(log N) (деление пополам, бинарный поиск)
function binarySearch($arr, $target) {
    $left = 0;
    $right = count($arr) - 1;

    while ($left <= $right) {
        $mid = floor(($left + $right) / 2);
        
        if ($arr[$mid] == $target) {
            return $mid;
        } elseif ($arr[$mid] < $target) {
            $left = $mid + 1;
        } else {
            $right = $mid - 1;
        }
    }
    return -1;
}
Факториальная сложность O(N!) (перебор всех вариантов)
function factorial($n) {
    if ($n == 1) return 1;
    return $n * factorial($n - 1);
}
🚩Как считать сложность функции с разными действиями? Если в функции разные действия, считаем их отдельно и берём наибольшую сложность.
function complexFunction($n) {
    // O(1)
    $sum = 0;

    // O(N)
    for ($i = 0; $i < $n; $i++) {
        $sum += $i;
    }

    // O(N²)
    for ($i = 0; $i < $n; $i++) {
        for ($j = 0; $j < $n; $j++) {
            echo "Hello";
        }
    }

    return $sum;
}
Ставь 👍 и забирай 📚 Базу знаний

Суперблендер BORK заменит кухонный арсенал Профессиональный стационарный блендер с мощностью 2400 Вт справится с измельчением овощей, ягод, а также орехов и льда. Вы легко и быстро приготовите смузи, суп-пюре и вкусные десерты для всей семьи. Модель объединила сразу 2 решения: стационарную чашу объемом 2 л и съемный стакан объемом 0,7 л, который удобно брать с собой. 12 скоростей позволяют смешивать продукты любой консистенции. 5 автопрограмм помогут быстро приготовить смузи, замороженные десерты, крем-суп и ледяную крошку. Блендер оснащен умной системой охлаждения: она активируется только при повышении температуры, а не работает постоянно. Приобретайте в бутиках, на сайте и в приложении BORK. Заказать #реклама 16+ bork.ru О рекламодателе

🤔 Есть ли какое-то различие между одинарными и двойными кавычками? - В большинстве языков программирования разницы нет. - В PHP двойные кавычки позволяют интерполировать переменные, а одинарные – нет. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Современное образование в Moscow Business School Moscow Business School — это учебный центр, в котором каждый может повысить профессиональные навыки. С 2007 года мы обучаем по авторским курсам и программам МВА, создаем тренинги и проводим тимбилдинги ⚡ О НАС:⚡ --> Ведущая бизнес-школа России с более чем 15-летним опытом --> Источник новых знаний, смыслов и компетенций --> 800+ образовательных программ обучения --> Современные онлайн и оффлайн курсы --> Команда из 700+ управленцев, менеджеров, тренеров и практиков --> 40+ программ MBA и Executive MBA с уникальной российской экспертизой --> ТОПовые направления повышения квалификации --> 20 000 слушателей ежегодно Узнать больше #реклама mbschool.ru О рекламодателе

📺 Уникальная база IT собеседований 456+ реальных собеседований на программиста, тестировщика, аналитика и прочие IT профы. Е
📺 Уникальная база IT собеседований 456+ реальных собеседований на программиста, тестировщика, аналитика и прочие IT профы. Есть собесы от ведущих компаний: Сбер, Яндекс, ВТБ, Тинькофф, Озон, Wildberries и т.д. 🎯 Переходи по ссылке и присоединяйся к базе, чтобы прокачать свои шансы на успешное трудоустройство!