PHP | Вопросы собесов
Ir al canal en Telegram
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv
Mostrar más2 343
Suscriptores
-324 horas
-77 días
-2830 días
Archivo de publicaciones
📺 Уникальная база IT собеседований
456+ реальных собеседований на программиста, тестировщика, аналитика и прочие IT профы.
Есть собесы от ведущих компаний: Сбер, Яндекс, ВТБ, Тинькофф, Озон, Wildberries и т.д.
🎯 Переходи по ссылке и присоединяйся к базе, чтобы прокачать свои шансы на успешное трудоустройство!
Легендарная 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 Р на учебу в бакалавриате Центрального университета.
Подробнее о гранте:
– Покрывает до 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-х ваших близких.
Кинопоиск и Яндекс Книги тоже в подписке.
Попробуйте бесплатно❤️
Попробовать
#реклама 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
Ставь 👍 и забирай 📚 Базу знаний+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)?
Это интеграционная архитектура, которая связывает разные сервисы и системы, обеспечивая обмен данными между ними.
Ключевые аспекты:
- Централизованное управление обменом сообщениями.
- Упрощение интеграции систем с разными форматами данных.
- Гибкость – можно легко добавлять и удалять сервисы.
- Масштабируемость – упрощает распределение нагрузки между сервисами.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
¡Ya disponible! Investigación de Telegram 2025 — los principales insights del año 
