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

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

前往频道在 Telegram

Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv

显示更多
2 347
订阅者
+124 小时
-87
-2430
帖子存档
🤔 Что известно про фабрики? Это порождающий паттерн, создающий объекты без явного указания их класса. 1. Simple Factory: один метод создаёт разные объекты. 2. Factory Method: делегирует создание объектов подклассам. 3. Abstract Factory: создаёт семейства связанных объектов. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Чем отличается Require от Includ'а? В PHP есть две схожие конструкции для подключения файлов: require и include. Однако между ними есть важные различия. 🟠Основное различие: Ошибки при отсутствии файла require вызывает фатальную ошибку (Fatal Error), если указанный файл не найден или содержит ошибку. Это приведёт к немедленному завершению выполнения скрипта. include вызывает предупреждение (Warning), но код продолжит выполняться дальше.
require 'somefile.php'; // Если файла нет, скрипт завершится с ошибкой
echo "Этот код не выполнится";
Результат (если файла somefile.php нет):
Fatal error: require(): Failed opening 'somefile.php'...
Пример с include
include 'somefile.php'; // Если файла нет, скрипт выдаст предупреждение, но продолжит выполняться
echo "Этот код выполнится";
Результат (если файла somefile.php нет):
Warning: include(somefile.php): failed to open stream...
Этот код выполнится
🟠Использование и рекомендации require используют, когда файл обязателен для работы скрипта (например, файл с настройками или важными функциями). include используют, когда файл необязателен, и его отсутствие не должно прерывать выполнение (например, дополнительный шаблон страницы). 🟠`require_once` и `include_once` Дополнительно существуют require_once и include_once, которые работают аналогично, но не подключают файл повторно, если он уже был подключён.
require_once 'config.php'; // Подключится только один раз, даже если вызвано несколько раз
Ставь 👍 и забирай 📚 Базу знаний

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

🤔 Какая разница между self и this? self и this используются для ссылки на текущий класс и его экземпляр соответственно, но каждый из них имеет свои особенности и область применения. 🚩this Используется для обращения к текущему объекту класса. Он позволяет получить доступ к нестатическим свойствам и методам объекта. Является ссылкой на вызываемый объект и используется внутри методов объекта для обращения к его свойствам и методам.
class Car {
    public $color = 'red';

    public function getColor() {
        return $this->color; // Используется $this для доступа к свойству текущего объекта
    }
}

$myCar = new Car();
echo $myCar->getColor(); // Выведет 'red'
🚩self Используется для обращения к текущему классу и применяется в основном для доступа к статическим свойствам и методам класса. Ссылается на класс, в котором она была вызвана, и не требует создания экземпляра объекта для доступа к содержимому.
class Car {
    public static $count = 0;

    public function __construct() {
        self::$count++; // Используется self для доступа к статическому свойству
    }

    public static function getTotalCars() {
        return self::$count; // Обращение к статическому методу или свойству
    }
}

$newCar1 = new Car();
$newCar2 = new Car();
echo Car::getTotalCars(); // Выведет '2'
🚩Основные различия 🟠Контекст использования $this используется для доступа к свойствам и методам текущего объекта экземпляра, тогда как self используется для доступа к статическим свойствам и методам класса. 🟠Статический vs Нестатический $this нельзя использовать в статических методах, потому что статические методы могут быть вызваны без создания объекта класса. self, напротив, предназначена для использования в статическом контексте. 🟠Привязка self привязана к классу, в котором она написана, а $this — к объекту, через который вызывается метод. Ставь 👍 и забирай 📚 Базу знаний

🤔 Какие могут быть проблемы от JOIN'а? Объединение таблиц через JOIN может вызвать: - Снижение производительности – если таблицы большие и нет индексов, выполнение запроса может быть долгим. - Дублирование данных – неправильное соединение может привести к множеству дублирующихся строк. - Рост потребления памяти – большие JOIN'ы могут потреблять много оперативной памяти и временных файлов. - Блокировки и конкуренция – если JOIN выполняется на обновляемых данных, могут возникать блокировки записей. - Сложность оптимизации – сложные JOIN'ы труднее индексировать и оптимизировать. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

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

🤔 Что будет если мы цифру 3 int сложим плюсом со строкой 4 что будет? Если в PHP выполнить операцию сложения (+) числа 3 (int) и строки "4" (string), то PHP автоматически приведёт строку "4" к числу, и произойдёт арифметическая операция:
$result = 3 + "4";
echo $result; // 7
🚩Как это работает? PHP видит, что используется оператор +, который применяется только к числам. "4" — это строка, но она содержит только число, поэтому PHP автоматически преобразует её в int. Затем выполняется операция 3 + 4, и результатом будет 7. 🚩Что если строка не является числом? Если строка не является корректным числом, PHP попробует взять из неё число с начала строки. Если в начале строки нет цифр, то строка будет воспринята как 0. Примеры странных случаев
echo 3 + "4abc";  // 7   (строка "4abc" преобразуется в число 4)
echo 3 + "abc4";  // 3   (строка "abc4" преобразуется в 0, т.к. начинается не с цифры)
echo 3 + "0.5";   // 3.5 (строка "0.5" преобразуется в число 0.5)
echo 3 + " ";     // 3   (пробелы преобразуются в 0)
🚩Что если использовать `.` вместо `+`? Если вместо + использовать . (конкатенацию строк), то числа не складываются, а просто соединяются как строки
echo 3 . "4"; // "34" (строка)
Ставь 👍 и забирай 📚 Базу знаний

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

🤔 Что такое SSH-протокол? SSH (Secure Shell) — это сетевой протокол, который используется для безопасного доступа к удаленным компьютерам и управления ими. Он обеспечивает шифрование данных, аутентификацию и целостность передаваемой информации, что делает его предпочтительным средством для удаленного администрирования и передачи файлов. 🚩Основные характеристики и возможности 🟠Безопасность SSH использует криптографические методы для шифрования данных, что защищает передаваемую информацию от перехвата и анализа. Протокол поддерживает различные методы аутентификации, включая использование паролей и публичных/приватных ключей. 🟠Аутентификация Парольная аутентификация: Пользователь вводит свой логин и пароль для доступа к удаленной системе. Аутентификация с помощью ключей: Вместо пароля используется пара ключей (публичный и приватный). Публичный ключ размещается на удаленном сервере, а приватный ключ остается на клиентской машине. 🟠Шифрование данных Шифрует все передаваемые данные, включая пароли, команды и файлы, что предотвращает их перехват и несанкционированный доступ. 🟠Целостность данных Обеспечивает контроль целостности передаваемых данных, используя алгоритмы хеширования, которые обнаруживают любые изменения данных в процессе передачи. 🟠Туннелирование Позволяет создавать зашифрованные туннели для передачи данных других протоколов (например, HTTP, FTP), обеспечивая их безопасность. 🚩Основные компоненты 🟠SSH-клиент Установленное на локальном компьютере, которое используется для установления соединения с удаленным сервером. 🟠SSH-сервер Работающее на удаленной машине, которое принимает и обрабатывает соединения от SSH-клиентов. 🚩Пример 🟠Установка соединения с удаленным сервером: Для подключения к удаленному серверу используется команда ssh в терминале.
ssh username@remote_host   
🟠Копирование файлов через SSH Для копирования файлов с локального компьютера на удаленный сервер или наоборот используется команда scp.
scp localfile.txt username@remote_host:/remote/directory/   
Копирование файлов с удаленного сервера на локальный компьютер
scp username@remote_host:/remote/file.txt /local/directory/   
🟠Использование ключей для аутентификации Генерация пары ключей (публичного и приватного)
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"   
Копирование публичного ключа на удаленный сервер
ssh-copy-id username@remote_host
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое агрегатные функции? Агрегатные функции в SQL и других языках обработки данных (как PHP при работе с базами данных) выполняют вычисление набора значений и возвращают единственное значение. Примеры включают `SUM()`, `AVG()`, `MIN()`, `MAX()`, и `COUNT()`.? Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 В чем принцип работы HashTable? Хеш-таблица – это структура данных, которая хранит пары "ключ → значение" и использует хеш-функцию для быстрого поиска, добавления и удаления данных. 🚩Основная идея Ключ обрабатывается хеш-функцией → превращается в числовой индекс. По индексу данные хранятся в массиве. Быстрое обращение к данным по ключу: O(1) в среднем. 🚩Как это работает? 🟠Хеширование ключа Представим, что у нас есть ключ "apple", и мы храним для него значение 100. Применяем хеш-функцию к "apple"
$hash = hash('md5', 'apple'); 
echo $hash; // 1f3870be274f6c49b3e31a0c6728957f
Это хеш – длинное число, но нам нужно индексировать данные, поэтому мы берем его остаток от деления на размер массива (mod):
$index = hexdec(substr($hash, 0, 8)) % 10; 
echo $index; // Например, 3
🟠Поиск элемента Когда мы ищем apple, алгоритм: Применяет ту же хеш-функцию, получает индекс 3 Ищет значение в ячейке 3 Таким образом, поиск данных по ключу происходит мгновенно – O(1). Коллизия – это когда разные ключи дают один и тот же индекс. Пример: "apple" и "banana" могут попасть в одну ячейку! Решения: Метод цепочек – внутри каждой ячейки храним список значений (например, массив или связанный список). Открытая адресация – если ячейка занята, ищем следующую свободную. 🚩Хеш-таблица в PHP В PHP массивы (array) работают как хеш-таблицы!
$hashTable = [];
$hashTable['apple'] = 100;
$hashTable['banana'] = 200;

echo $hashTable['apple']; // 100
Ставь 👍 и забирай 📚 Базу знаний

🤔 Какие типы объединений есть в таблицах? Типы объединений: INNER JOIN (только совпадающие строки), LEFT JOIN (все строки из левой таблицы), RIGHT JOIN (все строки из правой таблицы), FULL JOIN (объединение всех строк обеих таблиц), CROSS JOIN (декартово произведение), SELF JOIN (объединение таблицы с самой собой). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Какие виды уязвимости знаешь? В веб-разработке существует множество уязвимостей, но самые распространенные SQL-инъекции (SQL Injection) Межсайтовый скриптинг (XSS – Cross-Site Scripting) Межсайтовая подделка запросов (CSRF – Cross-Site Request Forgery) Ошибки аутентификации и управления сессиями Необработанные пользовательские данные Доступ к файлам и директориям (LFI/RFI – Local/Remote File Inclusion) Ошибки конфигурации сервера и утечки данных 🟠SQL-инъекции (SQL Injection) Атака, при которой злоумышленник вставляет вредоносный SQL-код в запрос, получая доступ к БД. Чтение / изменение данных Удаление таблиц Получение паролей пользователей Используем подготовленные запросы (Prepared Statements)
$db = new PDO("mysql:host=localhost;dbname=test", "root", "password");
$stmt = $db->prepare("SELECT * FROM users WHERE email = :email");
$stmt->execute([':email' => $_POST['email']]);
$user = $stmt->fetch();
🟠Межсайтовый скриптинг (XSS – Cross-Site Scripting) Атака, при которой злоумышленник вставляет вредоносный JavaScript в веб-страницу. Кража cookies и сеансов Изменение содержимого страницы Фишинг Очистка данных перед выводом
echo htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8');
🟠Межсайтовая подделка запросов (CSRF – Cross-Site Request Forgery) Злоумышленник заставляет пользователя выполнить нежелательный запрос от его имени (например, перевести деньги). Изменение данных без ведома пользователя Подмена учетных записей Используем CSRF-токены
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
При отправке формы проверяем
if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) {
    die("CSRF атака!");
}
🟠Ошибки аутентификации и управления сессиями Если пароли хранятся неправильно или сессии уязвимы, злоумышленник может перехватить учетную запись пользователя. Кража пароля Перехват сессии Храним пароли с password_hash(), а не в открытом виде:
$hash = password_hash("mypassword", PASSWORD_BCRYPT);
🟠Необработанные пользовательские данные Приложение принимает и использует входные данные без проверки. Возможность загрузки вредоносных файлов Выполнение вредоносного кода Проверяем загружаемые файлы (MIME-тип, расширение) Используем валидацию данных:
$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);
🟠Доступ к файлам и директориям (LFI/RFI) Злоумышленник может загружать и выполнять опасные файлы через параметры в URL. Выполнение кода на сервере Чтение конфиденциальных файлов Запрещаем прямую загрузку файлов:
$whitelist = ['jpg', 'png', 'gif'];
$ext = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);
if (!in_array($ext, $whitelist)) {
    die("Недопустимый файл!");
}
🟠Ошибки конфигурации сервера и утечки данных Если сервер настроен неправильно, можно случайно раскрыть важные данные. Вывод ошибок PHP в браузере Доступ к файлам .env, config.php Отключаем display_errors в php.ini:
display_errors = Off
Защищаем файлы .env через .htaccess
  <Files .env>
      Order allow,deny
      Deny from all
  </Files>
Ставь 👍 и забирай 📚 Базу знаний

🤔 Какую проблему решают фабрика и фабричный метод? Фабрика и фабричный метод решают проблему создания объектов в программе, отделяя процесс их создания от бизнес-логики. Это помогает сделать код более гибким, давая возможность изменять способ создания объектов без изменения основного кода. Эти паттерны используются для улучшения тестируемости, расширяемости и поддерживаемости программы. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Для чего нужен Синглтон паттерн? 🟠Контроль над созданием объекта Иногда требуется, чтобы у определенного класса был только один экземпляр в течение жизненного цикла программы. Это может быть связано с тем, что данный объект использует значительные ресурсы или имеет состояние, которое должно быть уникальным. 🟠Глобальная точка доступа Синглтон предоставляет простой способ доступа к объекту из любой точки программы. Это упрощает управление состоянием приложения, поскольку все части программы могут взаимодействовать с одним и тем же экземпляром объекта. 🚩Как используется? 1⃣Закрытие конструктора Конструктор объявляется закрытым (private), чтобы предотвратить создание объекта напрямую через оператор new. 2⃣Закрытие клонирования Метод клонирования (magic method __clone()) тоже объявляется закрытым, чтобы запретить клонирование объекта. 3⃣Закрытие десериализации Метод десериализации (magic method __wakeup()) также объявляется закрытым, чтобы предотвратить восстановление объекта из строки. 4⃣Статический метод для получения экземпляра Создается статический метод, который проверяет, существует ли уже экземпляр объекта. Если нет, то создается новый; если да, то возвращается существующий. Пример
class Singleton {
    // Статическое свойство для хранения единственного экземпляра
    private static $instance;

    // Закрытый конструктор для предотвращения создания объекта через new
    private function __construct() {}

    // Запрет клонирования объекта
    private function __clone() {}

    // Запрет десериализации объекта
    private function __wakeup() {}

    // Метод для получения единственного экземпляра
    public static function getInstance() {
        if (self::$instance === null) {
            self::$instance = new self();
        }
        return self::$instance;
    }

    // Пример метода
    public function sayHello() {
        echo "Hello, Singleton!";
    }
}

// Использование синглтона
$singleton = Singleton::getInstance();
$singleton->sayHello(); // Выведет "Hello, Singleton!"
🟠Контролируемое создание Конструктор закрыт, поэтому экземпляр можно создать только внутри класса через метод getInstance(). 🟠Глобальная доступность Поскольку метод getInstance() статический, он доступен в любом месте кода, что делает доступ к экземпляру глобальным. 🟠Один экземпляр Проверка в методе getInstance() гарантирует, что будет создан только один экземпляр класса. Ставь 👍 и забирай 📚 Базу знаний

IT-магистратура ИТМО, МИФИ в партнёрстве с Яндексом Освойте высокооплачиваемую IT-профессию. Актуальные программы ИТМО и МФТИ
IT-магистратура ИТМО, МИФИ в партнёрстве с Яндексом Освойте высокооплачиваемую IT-профессию. Актуальные программы ИТМО и МФТИ 2026 года, диплом гособразца, много практики от Яндекса. Гибкий график, обучение полностью онлайн, господдержка оплаты, отсрочка от армии Узнать больше #реклама 16+ practicum.yandex.ru О рекламодателе

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

🤔 В чем недостатки асинхронного шифрования? Асинхронное шифрование (или шифрование с открытым ключом, например, RSA, ECC) использует два ключа: Открытый ключ (Public Key) – для шифрования Закрытый ключ (Private Key) – для расшифровки 🚩Основные недостатки асинхронного шифрования 🟠Медленнее, чем симметричное шифрование Шифрование и расшифровка занимают больше времени, потому что алгоритмы (например, RSA) используют сложные математические операции (экспоненцирование и факторизацию). AES (симметричное) в 100–1000 раз быстрее, чем RSA. 🟠Длина ключа больше → больше ресурсов Чтобы обеспечить безопасность, RSA требует очень длинных ключей (2048+ бит). Чем длиннее ключ, тем больше памяти и CPU требуется для вычислений. 🟠Уязвимость к квантовым атакам Квантовые компьютеры смогут быстро взломать RSA и ECC с помощью алгоритма Шора. AES-256 останется безопасным, но RSA-2048 можно будет взломать за несколько часов или минут. 🟠Усложнённое управление ключами Нужно генерировать, хранить и передавать пары ключей. Закрытый ключ нельзя потерять – иначе данные невозможно расшифровать. Если злоумышленник завладеет закрытым ключом, он сможет расшифровать всю информацию. 🟠Атаки MITM и проблемы доверия Открытый ключ может быть подменён злоумышленником (атака "человек посередине" – MITM). Если хакер подменит публичный ключ, он сможет расшифровать данные. Ставь 👍 и забирай 📚 Базу знаний

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

🤔 Что такое SOLID? Это акроним, представляющий пять основных принципов ООП и проектирования, предложенных Робертом Мартином. Эти принципы направлены на повышение гибкости, читаемости, и поддерживаемости кода, а также упрощение его тестирования и рефакторинга. Вот они: 🟠S: Принцип единственной ответственности (Single Responsibility Principle) Каждый класс должен иметь только одну причину для изменения. Этот принцип подчеркивает, что класс должен заниматься только одной задачей или иметь одну область ответственности. 🟠O: Принцип открытости/закрытости (Open/Closed Principle) Сущности программы должны быть открыты для расширения, но закрыты для модификации. Это означает, что можно добавлять новые функциональности без изменения существующего кода. 🟠L: Принцип подстановки Барбары Лисков (Liskov Substitution Principle) Объекты в программе можно заменять их наследниками без изменения свойств программы. Это предполагает, что объекты подклассов должны действовать так же, как объекты суперкласса, от которых они произошли. 🟠I: Принцип разделения интерфейса (Interface Segregation Principle) Клиенты не должны зависеть от интерфейсов, которые они не используют. Этот принцип говорит о том, что лучше иметь много специализированных интерфейсов, чем один универсальный. 🟠D: Принцип инверсии зависимостей (Dependency Inversion Principle) Модули высокого уровня не должны зависеть от модулей низкого уровня. Обе категории должны зависеть от абстракций. Кроме того, абстракции не должны зависеть от деталей; детали должны зависеть от абстракций. Это способствует ослаблению связности компонентов системы. Ставь 👍 и забирай 📚 Базу знаний