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

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

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

Легендарная AIшница 3.0! Бесплатный онлайн-практикум 3 сезон масштабного онлайн-практикума про нейросети для бизнеса. 3 дня,
Легендарная AIшница 3.0! Бесплатный онлайн-практикум 3 сезон масштабного онлайн-практикума про нейросети для бизнеса. 3 дня, в программе применение ИИ в продажах, маркетинге, HR и других бизнес-процессов Спикеры: Александр Горный, Сергей Нотевский, Павел Лебедев Регистрируйтесь бесплатно! Узнать больше #реклама 16+ ai-practicum.bitrix24.events О рекламодателе

🤔 В чем разница кэширования, кодирования, шифрования? 🚩Кэширование – для быстродействия Кэширование – это временное хранение данных, чтобы избежать повторных вычислений или загрузок. Пример кэширования (PHP + Redis)
$cacheKey = "user_123";
$cachedData = $redis->get($cacheKey);

if ($cachedData === false) {
    $user = getUserFromDatabase(123);
    $redis->set($cacheKey, json_encode($user), 3600); // Кэшируем на 1 час
} else {
    $user = json_decode($cachedData, true);
}
🚩Кодирование – для совместимости Кодирование (Encoding) – это преобразование данных в другой формат, чтобы их можно было передавать или хранить. Пример кодирования в Base64 (PHP)
$original = "Hello, World!";
$encoded = base64_encode($original);
echo $encoded; // ✅ "SGVsbG8sIFdvcmxkIQ=="

$decoded = base64_decode($encoded);
echo $decoded; // ✅ "Hello, World!"
🚩Шифрование – для безопасности Шифрование (Encryption) – это преобразование данных в секретный формат с помощью ключа, чтобы их нельзя было прочитать без расшифровки. Пример шифрования AES-256 (PHP + OpenSSL)
$key = "supersecretkey123456"; // Должен быть длинным!
$data = "Пароль123";

$encrypted = openssl_encrypt($data, "AES-256-CBC", $key, 0, "1234567812345678");
echo $encrypted; // 🔐 Зашифрованный текст

$decrypted = openssl_decrypt($encrypted, "AES-256-CBC", $key, 0, "1234567812345678");
echo $decrypted; // ✅ "Пароль123"
Ставь 👍 и забирай 📚 Базу знаний

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

🤔 Как устроен типичный тест на opening point? Тест на Opening Point проверяет, корректно ли открывается доступ к ресурсу. Он может включать: - Авторизацию – доступ пользователя после входа. - Перенаправления – корректный редирект при попытке входа. - Доступность URL – проверка HTTP-ответа (например, 200 OK). - Безопасность – отсутствие утечек при открытии ресурса. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 В чем преимущества асинхронного шифрования? Асинхронное шифрование (асимметричная криптография) использует пару ключей: Открытый (public key) – используется для шифрования данных. Закрытый (private key) – используется для расшифровки данных. Этот метод отличается от симметричного шифрования, где один и тот же ключ используется и для шифрования, и для дешифровки. 🟠Безопасный обмен ключами - В симметричном шифровании нужно передать секретный ключ, что создаёт риск его перехвата. - В асимметричном шифровании передаётся только открытый ключ, а закрытый ключ никогда не покидает владельца. 🟠Цифровая подпись – гарантия подлинности данных - Можно подписывать данные закрытым ключом, а затем любой человек может проверить их подлинность с помощью открытого ключа.
$data = "Важное сообщение";
$privateKey = openssl_pkey_get_private(file_get_contents("private.pem"));
$publicKey = openssl_pkey_get_public(file_get_contents("public.pem"));

// Создаём подпись
openssl_sign($data, $signature, $privateKey, OPENSSL_ALGO_SHA256);

// Проверяем подпись
$valid = openssl_verify($data, $signature, $publicKey, OPENSSL_ALGO_SHA256);

echo $valid ? "Подпись верна" : "Подпись недействительна";
🟠Возможность шифрования без предварительного контакта - В симметричном шифровании обе стороны должны сначала договориться о ключе. - В асимметричном шифровании можно просто использовать открытый ключ получателя без предварительного обмена секретами. 🟠Используется в SSL/TLS для безопасного соединения - Когда вы заходите на сайт с https://, браузер использует асимметричное шифрование для установки защищённого соединения с сервером. - После этого браузер и сервер могут использовать симметричное шифрование (быстрее), но начальный обмен ключами происходит безопасно. 🚩Как это работает? 1. Браузер запрашивает у сервера его открытый ключ. 2. Шифрует случайный симметричный ключ и отправляет его серверу. 3. Сервер расшифровывает его закрытым ключом и использует для дальнейшей защиты соединения. Ставь 👍 и забирай 📚 Базу знаний

🤔 Где можно столкнуться с динамической типизацией? Динамическая типизация характерна для языков, таких как Python, JavaScript, PHP. Например, переменная может быть сначала числом, а затем строкой. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Получи грант на обучение в Центральном университете Несгораемый грант до 2 800 000 Р на учебу в бакалавриате Центрального уни
Получи грант на обучение в Центральном университете Несгораемый грант до 2 800 000 Р на учебу в бакалавриате Центрального университета. Подробнее о гранте: – Покрывает до 100% стоимости обучения – Выдается на все 4 года обучения в вузе – Сумма гранта не уменьшается, а может увеличиться за дополнительные достижения и успехи в учебе. Для учеников 10-х и 11-х классов. Участвуй в отборе! Подать заявку #реклама apply.centraluniversity.ru О рекламодателе

🤔 Чем отличается 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'; // Подключится только один раз, даже если вызвано несколько раз
Ставь 👍 и забирай 📚 Базу знаний

Дарим подписку на Яндекс Музыку Ответьте на 1 вопрос и Яндекс Музыка ваша для вас и 3-х ваших близких. Кинопоиск и Яндекс Кни
Дарим подписку на Яндекс Музыку Ответьте на 1 вопрос и Яндекс Музыка ваша для вас и 3-х ваших близких. Кинопоиск и Яндекс Книги тоже в подписке. Попробуйте бесплатно❤️ Попробовать #реклама 18+ music.yandex.ru О рекламодателе Реклама на Яндексе

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

🤔 Как расшифровывается Rest? REST расшифровывается как REpresentational State Transfer (Представленческая передача состояния). Это архитектурный стиль для создания сетевых приложений, который определяет набор ограничений и принципов для проектирования и взаимодействия с веб-службами. 🚩Основные принципы 🟠Клиент-серверная архитектура (Client-Server) Клиент и сервер разделены. Клиенты запрашивают ресурсы, а серверы предоставляют их. Это разделение позволяет независимое развитие клиента и сервера. 🟠Отсутствие состояния (Stateless) Каждое взаимодействие между клиентом и сервером не зависит от предыдущих взаимодействий. Вся необходимая информация для выполнения запроса должна быть включена в сам запрос. 🟠Кешируемость (Cacheable) Ответы могут быть кешируемыми. Это улучшает производительность, снижая необходимость повторных обращений к серверу для получения одних и тех же данных. 🟠Единообразный интерфейс (Uniform Interface) Определяет единообразный способ взаимодействия с ресурсами, независимо от конкретного клиента или сервера. Включает четыре подпринципа: Идентификация ресурсов: Каждый ресурс имеет уникальный идентификатор (обычно URL). Манипуляция ресурсами через представления: Клиенты взаимодействуют с ресурсами, используя их представления (например, JSON, XML). Самоописываемые сообщения: Сообщения содержат всю необходимую информацию для обработки запроса или ответа. Гипермедиа как движок приложения (HATEOAS): Клиенты получают информацию о доступных действиях через гиперссылки в ответах сервера. 🟠Слои (Layered System) Архитектура может быть многослойной, где каждый слой имеет свои обязанности и скрывает сложность соседних слоев. 🟠Код по требованию (Code on Demand, необязательный) Сервер может передавать исполняемый код клиенту для выполнения. Например, JavaScript для выполнения на стороне клиента. 🚩Пример REST GET: Получить ресурс. POST: Создать новый ресурс. PUT: Обновить существующий ресурс. DELETE: Удалить ресурс. 🚩Пример API 1⃣Получить список пользователей
GET /users
Ответ
      [
       {"id": 1, "name": "Alice"},
       {"id": 2, "name": "Bob"}
   ]
2⃣Получить пользователя по ID
GET /users/1
Ответ
      {"id": 1, "name": "Alice"}
   
3️⃣Создать нового пользователя
POST /users
Тело запроса
{"name": "Charlie"}
Ответ
{"id": 3, "name": "Charlie"}
4⃣Обновить информацию о пользователе
PUT /users/1   
Тело запроса
{"name": "Alice Smith"}
5⃣Удалить пользователя
DELETE /users/1
Ставь 👍 и забирай 📚 Базу знаний

Легендарная AIшница 3.0! Бесплатный онлайн-практикум 3 сезон масштабного онлайн-практикума про нейросети для бизнеса. 3 дня, в программе применение ИИ в продажах, маркетинге, HR и других бизнес-процессов Спикеры: Александр Горный, Сергей Нотевский, Павел Лебедев Регистрируйтесь бесплатно! Узнать больше #реклама 16+ ai-practicum.bitrix24.events О рекламодателе

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

🤔 Что содержит инкапсуляция кроме сокрытия данных? Инкапсуляция — это не только скрытие данных, но и ограничение доступа к внутренним деталям объекта + защита логики от внешнего вмешательства. 🚩Основные аспекты инкапсуляции Сокрытие данных (private, protected). Контроль доступа через геттеры и сеттеры. Защита объекта от некорректных данных. Чёткое API для работы с объектом. Разделение ответственности внутри класса. 🟠Сокрытие данных (`private`, `protected`) Скрываем внутренние переменные, чтобы их нельзя было изменить напрямую.
class User {
    private string $password; // Прямой доступ запрещён

    public function __construct(string $password) {
        $this->password = $password;
    }
}

$user = new User("123456");
// echo $user->password; // ❌ Ошибка! Доступ запрещён
🟠Контроль доступа через геттеры и сеттеры Предоставляем доступ к данным через методы (контролируем поведение).
class User {
    private string $password;

    public function __construct(string $password) {
        $this->setPassword($password);
    }

    public function getPassword(): string {
        return "Секретный пароль скрыт"; // Никогда не выдаём оригинал
    }

    public function setPassword(string $password) {
        if (strlen($password) < 6) {
            throw new Exception("Пароль слишком короткий!");
        }
        $this->password = password_hash($password, PASSWORD_DEFAULT);
    }
}

$user = new User("securePass");
// echo $user->password; // ❌ Ошибка! Доступ запрещён
echo $user->getPassword(); // ✅ "Секретный пароль скрыт"
🟠Защита объекта от некорректных данных Инкапсуляция позволяет проверять данные перед их сохранением.
class Product {
    private float $price;

    public function setPrice(float $price) {
        if ($price < 0) {
            throw new Exception("Цена не может быть отрицательной!");
        }
        $this->price = $price;
    }
}
🟠Чёткое API для работы с объектом Инкапсуляция создаёт удобный интерфейс для работы с классом.
class Order {
    private array $items = [];

    public function addItem(string $item) {
        $this->items[] = $item;
    }

    public function getItems(): array {
        return $this->items;
    }
}

$order = new Order();
$order->addItem("Телефон");
print_r($order->getItems()); // ✅ ["Телефон"]
🟠Разделение ответственности внутри класса Инкапсуляция помогает отделить внутреннюю логику от интерфейса.
class BankAccount {
    private float $balance = 0;

    private function logTransaction(float $amount) {
        echo "Транзакция: $amount\n";
    }

    public function deposit(float $amount) {
        $this->balance += $amount;
        $this->logTransaction($amount);
    }

    public function getBalance(): float {
        return $this->balance;
    }
}

$account = new BankAccount();
$account->deposit(100);
echo $account->getBalance(); // ✅ 100
Ставь 👍 и забирай 📚 Базу знаний

6 мастхэв инструментов для совместной работы в Битрикс24 Читайте подробнее в карточках. Регистрируйтесь сейчас, чтобы забрать
+7
6 мастхэв инструментов для совместной работы в Битрикс24 Читайте подробнее в карточках. Регистрируйтесь сейчас, чтобы забрать их все себе бесплатно😊 Зарегистрироваться #реклама 16+ office-online.bitrix24.ru О рекламодателе

🤔 Какие типизации существуют? 1. Динамическая типизация: PHP автоматически определяет тип переменной на основе её значения. 2. Явная типизация: начиная с PHP 7, можно указывать типы аргументов и возвращаемых значений функций (int, string, array и т.д.). 3. Слабая типизация: PHP преобразует типы данных автоматически при необходимости. 4. Строгая типизация: включает строгую проверку типов через директиву declare. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое di container? Это специальный инструмент или объект в программировании, который управляет созданием и внедрением зависимостей в объекты. Этот контейнер автоматически решает, какие зависимости требуются объекту, и предоставляет их при создании объекта, тем самым упрощая управление зависимостями в приложении. 🚩Зачем нужен DI-контейнер 🟠Автоматизация управления зависимостями DI-контейнер автоматически создает и внедряет зависимости, избавляя от необходимости вручную передавать их в объекты. 🟠Гибкость и модульность Позволяет легко заменять реализации зависимостей, не изменяя код, который их использует. 🟠Упрощение тестирования Обеспечивает легкую замену зависимостей на моки или заглушки для тестирования. 🟠Улучшение структуры кода Разделяет создание объектов и их использование, способствуя более чистой архитектуре. 🚩Как используется DI-контейнер DI-контейнеры предоставляют различные методы для регистрации зависимостей и их последующего получения. Ниже приведен пример реализации простого DI-контейнера. 1⃣Создание интерфейсов и реализаций зависимостей
interface Logger {
    public function log($message);
}

class FileLogger implements Logger {
    public function log($message) {
        echo "Logging message to a file: $message";
    }
}

interface PaymentProcessor {
    public function processPayment($amount);
}

class StripePaymentProcessor implements PaymentProcessor {
    public function processPayment($amount) {
        echo "Processing payment of $amount through Stripe";
    }
}
2⃣Реализация DI-контейнера
class DIContainer {
    private $bindings = [];

    public function bind($abstract, $concrete) {
        $this->bindings[$abstract] = $concrete;
    }

    public function resolve($abstract) {
        if (!isset($this->bindings[$abstract])) {
            throw new Exception("No binding found for $abstract");
        }

        $concrete = $this->bindings[$abstract];

        // Если $concrete является замыканием, вызываем его
        if ($concrete instanceof Closure) {
            return $concrete($this);
        }

        // Создаем новый объект конкретного класса
        return new $concrete;
    }
}
3⃣Регистрация зависимостей и их использование
$container = new DIContainer();

// Регистрация зависимостей
$container->bind(Logger::class, FileLogger::class);
$container->bind(PaymentProcessor::class, function($container) {
    return new StripePaymentProcessor();
});

// Получение зависимостей
$logger = $container->resolve(Logger::class);
$logger->log("This is a log message."); // Вывод: Logging message to a file: This is a log message.

$paymentProcessor = $container->resolve(PaymentProcessor::class);
$paymentProcessor->processPayment(100); // Вывод: Processing payment of 100 through Stripe
🚩Плюсы и минусыАвтоматизация Снижает необходимость ручного создания и передачи зависимостей. ➕Гибкость Легко изменять конкретные реализации зависимостей. ➕Тестируемость Упрощает замену зависимостей на моки для тестирования. ➕Чистота кода Упрощает код, делая его более модульным и читаемым. ➖Сложность настройки Могут потребоваться значительные усилия для первоначальной настройки DI-контейнера. ➖Производительность В некоторых случаях может снижать производительность из-за необходимости разрешения зависимостей. Ставь 👍 и забирай 📚 Базу знаний

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

🤔 В чем заключается Enterprise Service Bus (ESB)? Это интеграционная архитектура, которая связывает разные сервисы и системы, обеспечивая обмен данными между ними. Ключевые аспекты: - Централизованное управление обменом сообщениями. - Упрощение интеграции систем с разными форматами данных. - Гибкость – можно легко добавлять и удалять сервисы. - Масштабируемость – упрощает распределение нагрузки между сервисами. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний