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

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

Ir al canal en Telegram

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

Mostrar más
2 342
Suscriptores
-224 horas
-67 días
-2530 días
Archivo de publicaciones
🤔 Зачем нужны паттерны проектирования? Это повторяемые решения типичных задач. Они помогают разработчикам создавать программы, которые легко поддерживать, расширять и модифицировать. Паттерны проектирования упрощают процесс разработки, обеспечивая проверенные способы решения распространенных проблем, что экономит время и силы разработчиков. 🚩Зачем они нужны 🟠Повторяемость и стандартность Паттерны обеспечивают повторяемость решений для часто возникающих задач, что снижает вероятность ошибок и улучшает читабельность кода. 🟠Улучшение коммуникации Использование общепринятых паттернов облегчает коммуникацию между разработчиками. Когда все понимают, что подразумевается под, например, «одиночкой» (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. Поддерживает каскадность, позволяя переопределять стили с учетом приоритетов. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что знаешь про нормальные формы в БД? Нормальные формы (Normal Forms, NF) в базах данных — это правила, которые помогают организовать данные так, чтобы избежать избыточности и аномалий при обновлении, удалении и вставке. 🚩Основные нормальные формы 🟠Первая нормальная форма (1NF) убирает повторяющиеся группы и делает все столбцы атомарными. Что нужно сделать? Каждое поле должно содержать только одно значение. В таблице нет повторяющихся строк. 🟠Вторая нормальная форма (2NF) убирает зависимости от части составного ключа. Что нужно сделать? Данные, которые зависят не от всего первичного ключа, вынести в отдельные таблицы. Должна быть уже в 1NF. 🟠Третья нормальная форма (3NF) убирает транзитивные зависимости. Что нужно сделать? Данные должны зависеть только от первичного ключа и не зависеть от других неключевых полей. Должна быть уже в 2NF. 🚩Дополнительные нормальные формы 🟠Бойса-Кодда (BCNF) более строгая версия 3NF, исключает случаи, когда таблица имеет несколько потенциальных ключей, но один из них влияет на другой. 🟠Четвёртая нормальная форма (4NF) убирает многозначные зависимости (например, если студент изучает несколько предметов, но предметы никак не связаны друг с другом). 🟠Пятая нормальная форма (5NF) разбиение таблицы на подтаблицы для минимизации избыточности данных. Ставь 👍 и забирай 📚 Базу знаний

🤔 В чем преимущество фасада? Фасад (Facade) упрощает взаимодействие с подсистемой, предоставляя единый интерфейс. Это снижает сложность кода, улучшает читаемость и изоляцию компонентов, упрощая замену и тестирование подсистем. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Какой принцип из SOLID позволяет соблюдать добавочные преобразования в работе? Принцип подстановки Барбары Лисков (Liskov Substitution Principle, LSP), который является одной из пяти основных концепций SOLID — набора принципов объектно-ориентированного дизайна, предназначенных для создания более понятного, гибкого и поддерживаемого программного обеспечения. 🚩Принцип подстановки Барбары Лисков (LSP) Утверждает, что объекты класса-наследника должны быть способны заменить объекты класса-предка, не нарушая корректность работы программы. Этот принцип расширяет идею подтипов, предполагая, что подклассы должны быть взаимозаменяемы с их базовыми классами. 🚩Основные аспекты 🟠Взаимозаменяемость объекты подкласса можно использовать вместо объектов их суперкласса без изменения желаемого результата работы программы. 🟠Сохранение поведения подклассы не должны изменять поведение, заданное их базовыми классами, особенно те аспекты, которые клиенты класса ожидают.
class Vehicle {
    protected $speed = 0;

    public function accelerate($increase) {
        $this->speed += $increase;
        return $this->speed;
    }
}

class Car extends Vehicle {
    public function accelerate($increase) {
        $this->speed += $increase * 2; // Ускоряемся быстрее, но логика сохраняется
        return $this->speed;
    }
}

class Bicycle extends Vehicle {
    public function accelerate($increase) {
        $this->speed += $increase / 2; // Ускоряемся медленнее, но логика сохраняется
        return $this->speed;
    }
}
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое namespaces Namespaces в PHP — это способ организации кода для предотвращения конфликтов имен между классами, функциями и константами. Использование пространства имен позволяет создать уникальные идентификаторы, чтобы избежать пересечений между именами в крупных проектах или при использовании сторонних библиотек. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 В чем разница между вертикальным и горизонтальным масштабированием? Масштабирование (scaling) — это процесс увеличения мощности системы, чтобы она справлялась с увеличенной нагрузкой. В программировании и серверной архитектуре есть два типа масштабирования: Вертикальное масштабирование (Vertical Scaling, Scale-Up) Горизонтальное масштабирование (Horizontal Scaling, Scale-Out) 🚩Вертикальное масштабирование (Vertical Scaling) - Улучшение одного сервера: больше оперативной памяти (RAM), мощнее процессор (CPU), быстрее диск (SSD/NVMe). - Приложение остаётся на одном сервере, просто он становится мощнее. 🚩Горизонтальное масштабирование (Horizontal Scaling) - Добавляются новые серверы, работающие параллельно. - Нагрузка распределяется между несколькими машинами. - Используются балансировщики нагрузки (Nginx, HAProxy, AWS ELB). Ставь 👍 и забирай 📚 Базу знаний

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

🤔 Как сделать так, чтобы сессии не хранились в файле? Для хранения сессий не в файлах в PHP, можно использовать другие механизмы хранения, такие как базы данных, кэш-сервисы (например, Redis или Memcached) или специализированные хранилища. 🚩Хранение сессий в базе данных 1⃣Создайте таблицу для хранения сессий:
CREATE TABLE sessions (
    id VARCHAR(255) PRIMARY KEY,
    data TEXT,
    last_access TIMESTAMP
);
2⃣Создайте обработчики сессий: Создайте класс для обработки сессий, реализующий интерфейс SessionHandlerInterface.
class DBSessionHandler implements SessionHandlerInterface {
    private $pdo;

    public function __construct(PDO $pdo) {
        $this->pdo = $pdo;
    }

    public function open($savePath, $sessionName) {
        return true;
    }

    public function close() {
        return true;
    }

    public function read($id) {
        $stmt = $this->pdo->prepare("SELECT data FROM sessions WHERE id = :id");
        $stmt->bindParam(':id', $id);
        $stmt->execute();
        $session = $stmt->fetch(PDO::FETCH_ASSOC);
        return $session ? $session['data'] : '';
    }

    public function write($id, $data) {
        $stmt = $this->pdo->prepare("REPLACE INTO sessions (id, data, last_access) VALUES (:id, :data, NOW())");
        $stmt->bindParam(':id', $id);
        $stmt->bindParam(':data', $data);
        return $stmt->execute();
    }

    public function destroy($id) {
        $stmt = $this->pdo->prepare("DELETE FROM sessions WHERE id = :id");
        $stmt->bindParam(':id', $id);
        return $stmt->execute();
    }

    public function gc($maxlifetime) {
        $stmt = $this->pdo->prepare("DELETE FROM sessions WHERE last_access < NOW() - INTERVAL :maxlifetime SECOND");
        $stmt->bindParam(':maxlifetime', $maxlifetime, PDO::PARAM_INT);
        return $stmt->execute();
    }
}
3⃣Инициализация сессий:
$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'username', 'password');
$handler = new DBSessionHandler($pdo);
session_set_save_handler($handler, true);
session_start();
🚩Хранение сессий в Redis 1⃣Установите расширение `phpredis`Для Ubuntu:
sudo apt-get install php-redis
2⃣Используйте Redis для хранения сессий: Настройте PHP для использования Redis в качестве хранилища сессий, добавив настройки в файл php.ini или в коде.
session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379"
Ставь 👍 и забирай 📚 Базу знаний

Реклама для бизнеса любого уровня в Яндекс Директе Создайте эффективную рекламную кампанию с алгоритмами Яндекс Директа 👌 На
Реклама для бизнеса любого уровня в Яндекс Директе Создайте эффективную рекламную кампанию с алгоритмами Яндекс Директа 👌 Начните прямо сейчас ⚡ Зарегистрироваться #реклама direct.yandex.ru О рекламодателе

🤔 С помощью чего можно отследить скорость выполнения запроса? 1. Встроенный механизм Laravel — Query Log через DB::enableQueryLog() и DB::getQueryLog(). 2. Использование инструментов профилирования, таких как Laravel Debugbar или Telescope. 3. Внешние инструменты, например, New Relic или Xdebug. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Имеет ли значение регистр заголовка? Значение регистра заголовков может варьироваться в зависимости от конкретного контекста или системы разметки, в которой используются заголовки. Рассмотрим несколько примеров, чтобы понять, как различные системы относятся к регистру заголовков. 🚩HTML Регистр заголовков не имеет значения. Теги HTML не чувствительны к регистру, поэтому <H1>Заголовок</H1> и <h1>Заголовок</h1> будут интерпретироваться одинаково.
<h1>Заголовок</h1>
<H1>Заголовок</H1>
🚩Markdown Регистр заголовков также не имеет значения для самой разметки, но обычно принято использовать заглавные буквы для первых букв слов в заголовках, чтобы улучшить читаемость.
# Заголовок
# заголовок
🚩LaTeX Регистр заголовков тоже не имеет значения с точки зрения разметки, но стандартной практикой является использование заглавных букв в начале каждого важного слова для улучшения читаемости.
\section{Заголовок}
\section{заголовок}
🚩Wiki-разметка (например, MediaWiki) Регистр заголовков не влияет на разметку, но для консистентности и лучшей читаемости заголовки часто оформляют с заглавными буквами
= Заголовок =
= заголовок =
🚩Языки программирования Как таковые не используются, но комментарии-заголовки могут быть оформлены по-разному. Регистр здесь также не имеет значения для компилятора или интерпретатора, но для людей, читающих код, использование заглавных букв может сделать заголовки более заметными
# ЗАГОЛОВОК УРОВНЯ 1
# заголовок уровня 1
Оба варианта являются допустимыми комментариями
// ЗАГОЛОВОК УРОВНЯ 1
// заголовок уровня 1
Ставь 👍 и забирай 📚 Базу знаний

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

🤔 Структуры данных в программировании какие знаешь? Структуры данных — это способы хранения и организации данных в памяти компьютера. Они помогают эффективно управлять данными и выбирать оптимальные алгоритмы. 🚩Основные структуры данных 🟠Массив (Array) Упорядоченная коллекция элементов, доступ к которым осуществляется по индексу. Когда нужно быстро получать элементы по индексу. Доступ: O(1) Поиск: O(n) Вставка/Удаление: O(n) (из-за необходимости сдвига элементов)
$numbers = [10, 20, 30, 40]; 
echo $numbers[2]; // 30
🟠Связанный список (Linked List) Элементы (узлы) хранят ссылку на следующий (а иногда и на предыдущий) элемент. Когда часто вставляете/удаляете элементы (без затрат на сдвиг). Доступ: O(n) Вставка/Удаление: O(1) (если известен указатель)
class Node {
    public int $data;
    public ?Node $next;

    public function __construct(int $data) {
        $this->data = $data;
        $this->next = null;
    }
}
🟠Стек (Stack) Структура LIFO (Last In, First Out). Элементы добавляются и удаляются только с одного конца. Для обратного прохода, отмены операций, рекурсии. Вставка/Удаление: O(1) Доступ: O(n)
$stack = new SplStack();
$stack->push(1);
$stack->push(2);
echo $stack->pop(); // 2 (удаляется последний добавленный)
🟠Очередь (Queue) Структура FIFO (First In, First Out). Первым зашёл – первым вышел. Когда элементы должны обрабатываться по порядку (например, задачи в принтере). Вставка/Удаление: O(1)
$queue = new SplQueue();
$queue->enqueue(1);
$queue->enqueue(2);
echo $queue->dequeue(); // 1 (удаляется первый добавленный)
🟠Хэш-таблица (Hash Table) / Ассоциативный массив Хранит пары ключ → значение, обеспечивает быстрый доступ по ключу. Когда нужен быстрый поиск и хранение пар ключ-значение. Доступ/Поиск: O(1)
$hashTable = [
    "name" => "Alice",
    "age" => 25
];

echo $hashTable["name"]; // Alice
🟠Дерево (Tree) Иерархическая структура, где каждый узел может иметь несколько дочерних. Когда важны иерархии (например, файловые системы, база данных). Виды Двоичное дерево (Binary Tree) – у каждого узла до 2 детей. Двоичное дерево поиска (BST) – левый потомок меньше, правый больше. B-дерево – используется в базах данных. Trie (Префиксное дерево) – для хранения строк, часто в поисковых движках.
class TreeNode {
    public int $value;
    public ?TreeNode $left = null;
    public ?TreeNode $right = null;

    public function __construct(int $value) {
        $this->value = $value;
    }
}
🟠Граф (Graph) Набор вершин (узлов) и рёбер (связей между узлами). Для моделирования сетей, карт, социальных графов. Типы графов Ориентированный (направленный) / Неориентированный Взвешенный / Невзвешенный Ациклический (DAG)
$graph = [
    "A" => ["B", "C"],
    "B" => ["A", "D", "E"],
    "C" => ["A", "F"],
    "D" => ["B"],
    "E" => ["B", "F"],
    "F" => ["C", "E"]
];
Ставь 👍 и забирай 📚 Базу знаний

🤔 В чем различие между where и having? WHERE используется для фильтрации строк до применения агрегатных функций и группировки данных, тогда как HAVING применяется после группировки для фильтрации результатов агрегатных функций. WHERE работает с отдельными записями, а HAVING — с агрегированными группами. Оба оператора часто применяются вместе для многоуровневой фильтрации данных. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 В чем отличие адаптера от декоратора? Это структурные паттерны проектирования, которые используются в объектно-ориентированном программировании для решения различных задач по структурированию классов и объектов. Несмотря на то, что оба паттерна оборачивают другие объекты, их цели и способы применения различаются. 🚩Адаптер (Adapter) Преобразовать интерфейс одного класса в интерфейс другого класса, который ожидают клиенты. Адаптер позволяет классам с несовместимыми интерфейсами работать вместе. Адаптер реализует интерфейс, который должен быть представлен клиенту, и перенаправляет вызовы клиента к объекту с другим интерфейсом. Важно, что адаптер изменяет интерфейс взаимодействия, но не добавляет новую функциональность. Вы разрабатываете приложение, которое должно использовать существующую библиотеку классов, интерфейсы которой не совместимы с остальной частью вашего приложения. Создав адаптер для этих классов, вы можете интегрировать библиотеку без изменения её кода или кода приложения. 🚩Декоратор (Decorator) Динамически добавить новую функциональность объекту. В отличие от наследования, декораторы предоставляют гибкий способ расширения функциональности объекта во время выполнения. Декоратор оборачивает исходный объект, предоставляя дополнительное поведение. Он имеет тот же базовый интерфейс, что и оборачиваемый объект, что позволяет использовать декораторы взаимозаменяемо с исходными объектами. Вы разрабатываете систему уведомлений и хотите добавить возможность логирования или шифрования сообщений. Создав декораторы для базового класса отправки сообщений, вы можете легко добавить новую функциональность, обернув базовый объект отправки в один или несколько декораторов. 🚩Отличия 🟠Цель применения Адаптер используется для обеспечения совместимости между различными интерфейсами, позволяя объектам с несовместимыми интерфейсами работать вместе. Декоратор добавляет новую функциональность объектам, не изменяя их интерфейсы. 🟠Изменение интерфейса Адаптер изменяет интерфейс объекта для совместимости с другим интерфейсом. Декоратор не изменяет интерфейс, но добавляет новое поведение, сохраняя при этом оригинальный интерфейс объекта. 🟠Добавление функциональности Декораторы предназначены для добавления новой функциональности объектам. Адаптеры не добавляют новую функциональность; их основная задача — обеспечить работу существующей функциональности через другой интерфейс. Ставь 👍 и забирай 📚 Базу знаний

🤔 В чем преимущества асинхронного шифрования? 1. Безопасность: открытый ключ можно свободно распространять, закрытый ключ остаётся приватным. 2. Удобство обмена: не требуется передавать секретный ключ для шифрования. 3. Поддержка цифровой подписи: позволяет проверять подлинность отправителя. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

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

🤔 Что такое абстрактный класс? Абстрактный класс — это класс в ООП, который не может быть инстанциирован напрямую, то есть нельзя создать объект абстрактного класса используя оператор new. Они предназначены для того, чтобы служить базой для других классов, которые должны реализовать определенные методы, заданные в нем. Обеспечение общего определения класса, которое может быть использовано в качестве основы для создания производных классов. Производные классы должны реализовать все абстрактные методы абстрактного родительского класса, но при этом они могут также иметь дополнительные методы и свойства или переопределять существующие.
abstract class Животное {
    public function ест() {
        echo "Это животное ест";
    }

    abstract public function издаетЗвук();
}

class Собака extends Животное {
    public function издаетЗвук() {
        echo "Гав";
    }
}

// $животное = new Животное(); // Ошибка: нельзя инстанциировать абстрактный класс
$собака = new Собака();
$собака->ест(); // Вывод: Это животное ест
$собака->издаетЗвук(); // Вывод: Гав
Ставь 👍 и забирай 📚 Базу знаний

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