PHP | Вопросы собесов
Відкрити в Telegram
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv
Показати більше2 342
Підписники
-224 години
-67 днів
-2530 день
Архів дописів
🤔 В чем преимущество hash индекс и btree индекс?
Hash-индексы и B-Tree-индексы являются двумя типами индексов, используемыми для ускорения операций поиска в базах данных. Оба типа имеют свои преимущества и недостатки в зависимости от конкретных сценариев использования.
🚩Hash-индексы
➕Быстрый доступ по точному совпадению
Hash-индексы обеспечивают очень быстрый доступ к данным при выполнении точных поисков (например,
SELECT * FROM table WHERE column = 'value'). Время поиска практически константное (O(1)), что делает такие запросы очень эффективными.
➕Простота реализации
Hash-индексы просты в реализации и не требуют сложных структур данных для управления.
🚩B-Tree-индексы
➕Поддержка диапазонных запросов
B-Tree-индексы поддерживают операции поиска по диапазону и сортировку (например, BETWEEN, >, <, ORDER BY). Данные в B-Tree отсортированы, что делает такие запросы возможными и эффективными.
➕Сбалансированность
B-Tree автоматически поддерживает балансировку, что обеспечивает стабильную производительность для всех операций (поиск, вставка, удаление).
➕Универсальность
B-Tree-индексы поддерживают широкий спектр операций и типов данных, включая текстовые данные, даты и числа.
🟠Hash-индекс
Подходит для сценариев, где часто выполняются точные запросы равенства, например, поиск пользователя по уникальному идентификатору или email.
CREATE INDEX idx_email_hash ON users USING HASH (email);
SELECT * FROM users WHERE email = 'example@example.com';
🟠B-Tree-индекс
Подходит для сценариев, где часто выполняются диапазонные запросы, сортировка или комбинированные условия.
CREATE INDEX idx_name_btree ON users (name);
SELECT * FROM users WHERE name BETWEEN 'A' AND 'M';
Ставь 👍 и забирай 📚 Базу знаний🤔 Что такое в мире PHP PSR и RFC?
PSR (PHP Standards Recommendations) — это набор стандартов и рекомендаций для написания кода в PHP, таких как PSR-1, PSR-2 для стиля кода, PSR-4 для автозагрузки классов. RFC (Request for Comments) — это предложения по улучшению PHP, которые обсуждаются и принимаются сообществом, формируя новые возможности и изменения в языке. Оба механизма способствуют стандартизации и улучшению качества кода в PHP-сообществе.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Какие бывают массивы в PHP?
Это гибкая структура данных, которая может использоваться для хранения набора значений.
🟠Индексные массивы
Это массивы, в которых элементы индексируются числовыми индексами. Индексы начинаются с 0.
$fruits = ["apple", "banana", "cherry"];
echo $fruits[0]; // apple
🟠Ассоциативные массивы
В ассоциативных массивах индексы (или ключи) являются строками. Они позволяют хранить данные в формате "ключ => значение".
$user = [
"name" => "Alice",
"age" => 25,
"email" => "alice@example.com"
];
echo $user["name"]; // Alice
🟠Многомерные массивы
Это массивы, которые содержат другие массивы в качестве элементов. Они могут быть как индексными, так и ассоциативными.
$matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
echo $matrix[1][2]; // 6
Пример (ассоциативный многомерный массив)
$users = [
[
"name" => "Alice",
"email" => "alice@example.com"
],
[
"name" => "Bob",
"email" => "bob@example.com"
]
];
echo $users[0]["email"]; // alice@example.com
🟠Массивы смешанного типа
Это массивы, которые содержат одновременно числовые индексы и строковые ключи.
$mixedArray = [
0 => "apple",
"color" => "red",
1 => "banana",
"size" => "large"
];
echo $mixedArray[1]; // banana
echo $mixedArray["color"]; // red
🚩Особенности массивов в PHP
В PHP массивы реализованы как хэш-таблицы, поэтому они поддерживают как числовые, так и строковые индексы.
Вы можете работать с массивами с помощью множества встроенных функций, например:
count() — возвращает количество элементов в массиве.
array_keys() — возвращает все ключи массива.
array_values() — возвращает все значения массива.
$colors = ["red", "green", "blue"];
echo count($colors); // 3
Ставь 👍 и забирай 📚 Базу знаний🤔 Зачем нужен Git?
1. Контроль версий – отслеживание изменений в коде и возможность отката.
2. Совместная работа – позволяет нескольким разработчикам работать над одним проектом без конфликтов.
3. Безопасность кода – сохраняет историю изменений, предотвращая потерю данных.
4. Быстрая разработка – поддерживает ветки (branches) для параллельной работы над фичами.
5. Интеграция с CI/CD – автоматизирует тестирование и деплой.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Почему магические методы называются магическими?
Магические методы в PHP называются так, потому что они автоматически вызываются в определённых ситуациях, без явного вызова в коде.
🚩Примеры магических методов и их "магия"
🟠`__construct()` – вызывается при создании объекта
Магия: вызывается автоматически, когда создаётся объект.
class User {
public function __construct() {
echo "Создан новый пользователь!";
}
}
$user = new User(); // ✅ Выведет "Создан новый пользователь!"
🟠`__toString()` – вызывается при попытке вывести объект как строку
Магия: PHP сам вызывает этот метод, если echo или print пытаются вывести объект.
class Car {
public function __toString() {
return "Это машина!";
}
}
$car = new Car();
echo $car; // ✅ Выведет "Это машина!"
🟠`__get()` и `__set()` – перехватывают доступ к несуществующим свойствам
Магия: вызываются, если пытаемся получить или установить значение для несуществующего свойства.
class Person {
private array $data = [];
public function __get($name) {
return $this->data[$name] ?? "Нет такого свойства";
}
public function __set($name, $value) {
$this->data[$name] = $value;
}
}
$p = new Person();
$p->age = 30; // ❌ age не объявлен, но __set() сохранит его!
echo $p->age; // ✅ Выведет 30, хотя свойства age нет
🟠`__call()` – вызывается при вызове несуществующего метода
Магия: PHP автоматически вызывает __call(), если метод не найден.
class Robot {
public function __call($name, $arguments) {
return "Метод '$name' не существует!";
}
}
$r = new Robot();
echo $r->walk(); // ✅ Выведет "Метод 'walk' не существует!"
Ставь 👍 и забирай 📚 Базу знаний🤔 Что такое динамическая типизация
Динамическая типизация — это свойство языка программирования, где тип переменной определяется во время выполнения, а не во время компиляции. Это позволяет использовать одну переменную для хранения данных разных типов, упрощая код, но также увеличивая вероятность ошибок, так как проверки типов происходят в процессе выполнения. Языки с динамической типизацией, такие как Python и JavaScript, предлагают большую гибкость, но требуют внимательности при работе с типами.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 По какому принципу бы старались разделять модули, если находились бы не на уровне классов, а выше?
Если говорить о разделении модулей на более высоком уровне, чем классы, то мы ориентируемся на архитектурные принципы. Основной подход — разделение ответственности (Separation of Concerns, SoC).
🚩Основные принципы разделения модулей
🟠SRP (Single Responsibility Principle, Принцип единственной ответственности)
- Каждый модуль решает только одну задачу.
- Например, отдельно: модуль аутентификации, модуль работы с БД, модуль обработки заказов.
🟠MVC (Model-View-Controller)
- Разделение приложения на модель (логика данных), представление (интерфейс), контроллер (управление логикой).
- Например, в Laravel:
-
Models/ — работа с данными
- Views/ — шаблоны
- Controllers/ — обработка запросов
🟠Чистая архитектура (Clean Architecture, Hexagonal, Onion)
- Модули делятся на уровни, где:
- Центральная часть — доменная логика (независимая от фреймворка).
- Внешние слои — адаптеры, API, базы данных.
- Код становится гибким и легко тестируемым.
🟠DDD (Domain-Driven Design, Предметно-ориентированное проектирование)
- Разделение по бизнес-контексту (Bounded Contexts).
- Например, в интернет-магазине:
- Модуль заказов (Orders)
- Модуль оплаты (Payments)
- Модуль пользователей (Users)
🟠Микросервисная архитектура
- Разделение системы на отдельные сервисы, которые общаются через API.
- Например:
- auth-service (регистрация, вход)
- order-service (работа с заказами)
- payment-service (оплата)
- Удобно при высокой нагрузке и масштабировании.
Ставь 👍 и забирай 📚 Базу знаний🖼️ Ищем PHP разработчиков. Релокейт, удалёнка, платим много!
Специально для Вас, собираем лучшие вакансии, только с прямыми контактами в Telegram!
🖼️ PHP 👩💻 Java
👩💻 C# 👩💻 Python
👣 Go 👩💻 Node.js
👩💻 DevOps 🤖 ML & DS
🖥 SQL 🔎 QA
👩💻 UX/UI 👩💻 Frontend
👩💻 Mobile 📋 Analyst
💼 1C 👩💻 IT HR
Подпишись чтобы не упустить свой шанс получить лучший оффер!
🤔 Что такое Entity?
Это объект, представляющий конкретную сущность в системе или домене. Обычно он имеет уникальный идентификатор и может изменяться в течение своего жизненного цикла.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 На что накладывает условие WHERE?
В SQL (и, соответственно, в PHP при работе с базами данных) оператор
WHERE накладывает условия на строки, которые должны быть выбраны, обновлены или удалены в запросах SELECT, UPDATE, DELETE.
🚩Где используется `WHERE`?
WHERE применяется в следующих SQL-запросах:
SELECT – фильтрует строки, которые будут выбраны из таблицы.
UPDATE – определяет, какие строки следует обновить.
DELETE – указывает, какие строки нужно удалить.
🚩Примеры использования
SELECT – выборка данных с условием
$sql = "SELECT * FROM users WHERE age > 18";
UPDATE – обновление с условием
$sql = "UPDATE users SET status = 'active' WHERE last_login > '2024-01-01'";
DELETE – удаление с условием
$sql = "DELETE FROM users WHERE is_deleted = 1";
Ставь 👍 и забирай 📚 Базу знаний🤔 Что такое агрегатные функции?
Агрегатные функции в SQL и других языках обработки данных (как PHP при работе с базами данных) выполняют вычисление набора значений и возвращают единственное значение. Примеры включают `SUM()`, `AVG()`, `MIN()`, `MAX()`, и `COUNT()`.?
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Какие виды уязвимости знаешь?
В веб-разработке существует множество уязвимостей, но самые распространенные
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>
Ставь 👍 и забирай 📚 Базу знанийИИ в Битрикс24 умеет предсказывать повторные продажи
ИИ-помощник сам найдёт «горячих» клиентов, создаст сделки, предложит, что продавать и как.
Менеджеру остаётся нажать «позвонить».
⚡Никакой магии. Только данные и алгоритмы.
Ваш отдел продаж работает проактивно.
И растёт выручка — без лишнего бюджета.
Попробовать
#реклама 16+
bitrix24.ru
О рекламодателе
🤔 Что такое middleware?
Middleware в PHP — это компонент, который обрабатывает HTTP-запросы и ответы на пути между сервером и конечной точкой. Каждый middleware может модифицировать запрос, ответ или остановить выполнение цепочки, отправив ответ напрямую. Они используются для выполнения задач, таких как аутентификация, логирование, обработка ошибок и кэширование. Middleware широко применяется в современных фреймворках, таких как Laravel, для разделения логики обработки запросов.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 В чем принцип работы 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
Ставь 👍 и забирай 📚 Базу знаний🤔 Что такое SOLID?
SOLID — это набор из пяти принципов объектно-ориентированного проектирования, направленных на создание более устойчивого и поддерживаемого кода. Эти принципы включают: Single Responsibility (одна ответственность), Open/Closed (открытость для расширения, закрытость для изменений), Liskov Substitution (замещение Лисков), Interface Segregation (разделение интерфейсов) и Dependency Inversion (инверсия зависимостей). Применение SOLID помогает избежать чрезмерной сложности и делает код более гибким. Эти принципы часто используются для улучшения архитектуры приложений.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Что есть кроме микросервисной и монолитной архитектуры?
Помимо монолитной и микросервисной архитектуры, существуют другие подходы к построению программных систем. Каждый из них решает свои задачи и подходит для разных типов проектов.
🚩Service-Oriented Architecture (SOA) – Сервисно-ориентированная архитектура
- Это переходный вариант между монолитом и микросервисами.
- В SOA приложение делится на крупные сервисы (например, "Платежи", "Пользователи", "Заказы").
- Все сервисы взаимодействуют через ESB (Enterprise Service Bus) – специальный слой для связи между сервисами.
Для крупных корпоративных систем, где много интеграций.
Когда нужна централизованная логика взаимодействия сервисов.
🚩Serverless (Бессерверная архитектура)
- Код выполняется в облаке, а не на собственных серверах.
- Программист пишет функции (FaaS – Function as a Service), которые выполняются по запросу.
- Серверы управляются автоматически (AWS Lambda, Google Cloud Functions).
Когда нужно автоматическое масштабирование (например, обработка миллионов событий).
Для маленьких ивентовых задач (обработка файлов, уведомления, API-эндпоинты).
🚩Event-Driven Architecture (EDA) – Событийно-ориентированная архитектура
- Компоненты системы не вызывают друг друга напрямую, а общаются через события.
- Используется*message broker (Kafka, RabbitMQ, Redis Pub/Sub) для передачи данных.
В нагруженных системах, где много событий (банковские системы, биржи).
Когда нужна гибкость и асинхронность.
Ставь 👍 и забирай 📚 Базу знаний
🤔 Что такое замыкание?
Это функция, которая «захватывает» переменные из внешней области видимости, в которой она была создана.
1. Оно позволяет использовать внешние переменные даже после завершения их контекста.
2. Замыкания полезны для сохранения состояния и создания функций с заранее заданными параметрами.
3. Пример: функция, возвращающая другую функцию, которая использует переменные из замыкающего контекста.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Зачем нужны паттерны проектирования?
Это повторяемые решения типичных задач. Они помогают разработчикам создавать программы, которые легко поддерживать, расширять и модифицировать. Паттерны проектирования упрощают процесс разработки, обеспечивая проверенные способы решения распространенных проблем, что экономит время и силы разработчиков.
🚩Зачем они нужны
🟠Повторяемость и стандартность
Паттерны обеспечивают повторяемость решений для часто возникающих задач, что снижает вероятность ошибок и улучшает читабельность кода.
🟠Улучшение коммуникации
Использование общепринятых паттернов облегчает коммуникацию между разработчиками. Когда все понимают, что подразумевается под, например, «одиночкой» (singleton), это упрощает обсуждение архитектуры системы.
🟠Повышение качества кода
Паттерны проектирования способствуют созданию более структурированного, гибкого и поддерживаемого кода.
🟠Экономия времени и ресурсов
Паттерны позволяют не изобретать велосипед, а использовать проверенные решения, что ускоряет процесс разработки.
🚩Как они используются
Паттерны проектирования делятся на несколько категорий, каждая из которых решает определенный тип задач:
🟠Порождающие паттерны
Эти паттерны касаются создания объектов. Примеры: Singleton, Factory, Builder.
🟠Структурные паттерны
Эти паттерны касаются построения структуры больших объектов. Примеры: Adapter, Composite, Decorator.
🟠Поведенческие паттерны
Эти паттерны касаются взаимодействия и распределения обязанностей между объектами. Примеры: Observer, Strategy, Command.
class Singleton {
private static $instance;
private function __construct() {
// Закрытый конструктор предотвращает создание объекта через new
}
public static function getInstance() {
if (self::$instance === null) {
self::$instance = new self();
}
return self::$instance;
}
public function someBusinessLogic() {
// Некоторая бизнес-логика
}
}
// Использование Singleton
$singleton = Singleton::getInstance();
$singleton->someBusinessLogic();
Ставь 👍 и забирай 📚 Базу знаний🤔 Что такое CSS?
Это язык, используемый для описания внешнего вида и стилей веб-страниц:
1. Определяет цвет, шрифты, расположение элементов и другие визуальные свойства.
2. Работает совместно с HTML, отделяя структуру документа от его оформления.
3. Поддерживает каскадность, позволяя переопределять стили с учетом приоритетов.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Вже доступно! Дослідження Telegram за 2025 — головні інсайти року 
