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

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

الذهاب إلى القناة على Telegram
2 344
المشتركون
+324 ساعات
+27 أيام
-1530 أيام
أرشيف المشاركات
Миграция в облако? Это легко! Собственная инфраструктура устарела или не справляется с нагрузками? Используйте облачные ресур
Миграция в облако? Это легко! Собственная инфраструктура устарела или не справляется с нагрузками? Используйте облачные ресурсы! Эксперты Yandex Cloud помогут перейти в облако быстро, легко и безопасно. ✅ Мы полностью сопровождаем процесс. ✅ От вас — только инженер с доступом к инфраструктуре. ✅ Архитектура под ваши задачи, миграция и поддержка на каждом шагу — всё включено. ⚡Переходите в Yandex Cloud и забудьте о старом железе. А если успеете подать заявку до 31 декабря, мы покроем расходы на инженеров и тестовую инфраструктуру. Подать заявку #реклама 16+ yandex.cloud О рекламодателе

🤔 Что делает final? Ключевое слово final в PHP используется для предотвращения дальнейшего наследования классов или переопределения методов. Оно может применяться к классам и методам. 🚩Применение `final` к классам Когда класс объявляется как final, он не может быть унаследован другим классом. Это означает, что никто не сможет создать подкласс от этого класса.
final class FinalClass {
    public function doSomething() {
        echo "Doing something";
    }
}

// Попытка наследования приведет к ошибке
class ChildClass extends FinalClass {
    // Ошибка: Class ChildClass cannot extend final class FinalClass
}
🚩Когда использовать Когда необходимо гарантировать, что класс не будет изменен через наследование, что может быть важно для обеспечения безопасности или целостности логики программы. Когда класс реализует окончательную логику, которую не нужно изменять. 🚩Применение `final` к методам Когда метод объявляется как final, он не может быть переопределен в наследуемом классе. Это означает, что если класс наследуется, то наследуемый класс не сможет изменить реализацию этого метода.
class BaseClass {
    final public function doSomething() {
        echo "Doing something in base class";
    }
}

class ChildClass extends BaseClass {
    // Попытка переопределения приведет к ошибке
    public function doSomething() {
        // Ошибка: Cannot override final method BaseClass::doSomething()
    }
}
🚩Когда использовать Когда необходимо гарантировать, что метод останется неизменным во всех производных классах, что важно для поддержания определенного поведения или контрактов в системе. Когда метод реализует важную бизнес-логику, которую не следует изменять. 🚩Пример использования `final` в реальном проекте Рассмотрим пример системы управления пользователями, где класс UserManager отвечает за управление пользователями. Допустим, что есть метод, который выполняет важную проверку безопасности, и вы хотите предотвратить его изменение в подклассах:
class UserManager {
    final public function verifyUser($user) {
        // Важная логика проверки пользователя
        if ($user->isValid()) {
            echo "User verified";
        } else {
            echo "User verification failed";
        }
    }

    public function createUser($name) {
        // Логика создания пользователя
        echo "User created: " . $name;
    }
}

class CustomUserManager extends UserManager {
    // Переопределение createUser допустимо
    public function createUser($name) {
        // Кастомная логика создания пользователя
        echo "Custom user created: " . $name;
    }

    // Попытка переопределить verifyUser приведет к ошибке
    public function verifyUser($user) {
        // Ошибка: Cannot override final method UserManager::verifyUser()
    }
}
Ставь 👍 и забирай 📚 Базу знаний

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

Мастер-класс по Python для школьников. Бесплатно! Онлайн-урок от ведущего ИТ ВУЗа страны - Университета Иннополис для ученико
Мастер-класс по Python для школьников. Бесплатно! Онлайн-урок от ведущего ИТ ВУЗа страны - Университета Иннополис для учеников 6-11 классов. 👍Бесплатно! ✅Познакомим с профессией тестировщика. ✅Научим проверять программы, находить баги. ✅На практике отработаем использование инструментов и методов тестирования. ⚡Ваш ребёнок за один час создаст автоматический тест на языке программирования Python и сможет использовать полученные знания в дальнейшем! Для участия важно знание основ программирования на Python. Помогите ребёнку освоить востребованную профессию. Регистрируйтесь! Зарегистрироваться #реклама 16+ progmatica.innopolis.university О рекламодателе

🤔 Что появилось в версии 7.4 PHP? 🟠Стрелочные функции (Arrow Functions) Являются сокращенным синтаксисом для анонимных функций. Они облегчают написание коротких функций.
$nums = [1, 2, 3, 4, 5];
$squared = array_map(fn($n) => $n * $n, $nums);
print_r($squared); // Выведет: [1, 4, 9, 16, 25]
🟠Типизация свойств класса (Typed Properties) Теперь можно указывать типы свойств в классах, что повышает безопасность и надежность кода.
class User {
    public int $id;
    public string $name;

    public function __construct(int $id, string $name) {
        $this->id = $id;
        $this->name = $name;
    }
}

$user = new User(1, "John");
echo $user->name; // Выведет: John
🟠Оператор null coalescing assignment (??=) Этот оператор упрощает установку значения по умолчанию, если переменная не установлена.
$data['name'] ??= 'Default Name';
echo $data['name']; // Выведет: Default Name
🟠Разрешение функции с переменным числом аргументов (spread operator) в массивы Теперь можно использовать оператор ... для распаковки массивов в функции.
$array1 = [1, 2, 3];
$array2 = [4, 5, 6];
$combined = [...$array1, ...$array2];
print_r($combined); // Выведет: [1, 2, 3, 4, 5, 6]
🟠Weak References (Слабые ссылки) Слабые ссылки позволяют удерживать ссылку на объект без предотвращения его удаления сборщиком мусора.
$obj = new stdClass();
$weakRef = WeakReference::create($obj);

var_dump($weakRef->get()); // Выведет: object(stdClass)#1 (0) {}

unset($obj);

var_dump($weakRef->get()); // Выведет: NULL
🟠Определение массива в константах Теперь можно использовать массивы как константы.
class MyClass {
    public const MY_ARRAY = [1, 2, 3];
}

print_r(MyClass::MY_ARRAY); // Выведет: [1, 2, 3]
🟠Улучшения производительности и устранение устаревших функций PHP 7.4 также включает множество улучшений производительности и удаление устаревших функций и конструкций, что делает язык более эффективным и безопасным. Ставь 👍 и забирай 📚 Базу знаний

🤔 В чем отличие адаптера от декоратора Адаптер и декоратор — это структурные паттерны проектирования, но они решают разные задачи. Адаптер используется для преобразования интерфейса одного класса в интерфейс, который ожидает клиент, чтобы классы с несовместимыми интерфейсами могли работать вместе. Декоратор, наоборот, добавляет новую функциональность к объекту, не изменяя его структуру, позволяя динамически изменять поведение объекта. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Цены на все Серверы онлайн! Удобный конфигуратор! Серверы STSS Flagman✅ Огромный выбор решений 👍 Консультации лучших эксперт
Цены на все Серверы онлайн! Удобный конфигуратор! Серверы STSS Flagman✅ Огромный выбор решений 👍 Консультации лучших экспертов 👌 Непревзойденный сервис ❤️ Получить предложение #реклама stss.ru О рекламодателе

🤔 Какие версии PHP сейчас поддерживаются? 🚩Активная поддержка 🟠PHP 8.3 Эта версия была выпущена 23 ноября 2023 года. Активная поддержка будет продолжаться до 31 декабря 2025 года, а затем будет обеспечиваться поддержка только для критических исправлений безопасности до 31 декабря 2027 года. 🟠PHP 8.2 Выпущена 8 декабря 2022 года. Активная поддержка продолжается до 31 декабря 2024 года, а затем поддержка безопасности до 31 декабря 2026 года. 🚩Поддержка только для безопасности 🟠PHP 8.1 Выпущена 25 ноября 2021 года. Активная поддержка завершилась 25 ноября 2023 года. Поддержка безопасности будет предоставляться до 31 декабря 2025 года. 🟠Версии PHP 8.0 и старше Больше не поддерживаются, что означает, что они не получают ни исправлений ошибок, ни обновлений безопасности. Поэтому рекомендуется обновить свои проекты до одной из поддерживаемых версий. Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое http? HTTP (HyperText Transfer Protocol) — это протокол прикладного уровня, используемый для передачи данных между клиентом и сервером в интернете. Он работает по модели запрос-ответ, где клиент запрашивает ресурсы, а сервер предоставляет их. HTTP является основой для работы веб-приложений. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

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

🤔 Какие микросервисные паттерны знаешь? Микросервисные паттерны представляют собой различные архитектурные подходы и методики, используемые для проектирования и реализации микросервисных систем. 🟠Паттерны разбиения на микросервисы Decomposition by Business Capability (Декомпозиция по бизнес-возможностям). Разбиение системы на микросервисы на основе ключевых бизнес-функций, таких как выставление счетов, управление заказами и т.д. В интернет-магазине можно выделить микросервисы для управления продуктами, обработки заказов и управления пользователями. Decomposition by Subdomain (Декомпозиция по субдоменам). Использование методологии Domain-Driven Design (DDD) для разделения на микросервисы по субдоменам. В банковской системе могут быть субдомены для обработки платежей, управления счетами и управления кредитами. 🟠Паттерны взаимодействия и координации API Gateway (Шлюз API). Шлюз API действует как единая точка входа для всех клиентов, перенаправляя запросы к соответствующим микросервисам. Шлюз API может управлять аутентификацией, маршрутизацией запросов и агрегацией данных из нескольких микросервисов. Service Mesh (Сервисная сетка). Инфраструктурный слой для управления сетевыми взаимодействиями между микросервисами, предоставляющий такие функции, как балансировка нагрузки, наблюдаемость и безопасность. Использование Istio или Linkerd для управления сетевыми взаимодействиями между микросервисами. 🟠Паттерны управления данными Database per Service (База данных на микросервис). Каждый микросервис имеет свою собственную базу данных, что позволяет избежать проблем с общей базой данных. В системе электронной коммерции, микросервис для управления товарами может использовать MongoDB, а микросервис для обработки заказов — PostgreSQL. Event Sourcing (Источники событий). Сохранение состояния системы в виде последовательности событий, что позволяет легко восстанавливать состояние системы. В системе управления заказами, каждое изменение статуса заказа может сохраняться как отдельное событие. CQRS (Command Query Responsibility Segregation). Разделение модели данных на операции чтения и записи, что позволяет оптимизировать производительность и масштабируемость. Использование одной модели для обработки команд (записей) и другой модели для выполнения запросов (чтения). 🟠Паттерны устойчивости и отказоустойчивости Circuit Breaker (Схема размыкания цепи). Предотвращение избыточных попыток связи с неработающими микросервисами путем размыкания цепи после определенного числа неудач. В микросервисе обработки платежей использование схемы размыкания цепи для предотвращения перегрузки системы при сбоях в обработке платежей. Bulkhead (Переборка). Разделение ресурсов на изолированные группы для предотвращения каскадных сбоев. В системе управления заказами ограничение числа одновременных запросов к каждому микросервису для предотвращения перегрузки. 🟠Паттерны мониторинга и управления Health Check (Проверка состояния). Регулярная проверка состояния микросервисов для обеспечения их доступности и работоспособности. Реализация эндпоинта /health для каждого микросервиса, который возвращает статус его состояния. Centralized Logging (Централизованный логирование). Сбор и анализ логов из всех микросервисов в одном месте для упрощения мониторинга и отладки. Использование Elasticsearch, Logstash и Kibana (ELK Stack) для централизованного сбора и анализа логов. Ставь 👍 и забирай 📚 Базу знаний

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

Узнайте подробнее о «Золотой визе» Греции! «Золотая виза» Греции остаётся самой выгодной в Европе: ✅Минимальный порог инвести
Узнайте подробнее о «Золотой визе» Греции! «Золотая виза» Греции остаётся самой выгодной в Европе: ✅Минимальный порог инвестиций 250 000 евро ✅Без проживания ✅Инвестиции с высокой доходностью ✅Поможем разблокировать счета в Европе Узнайте актуальную информацию о программе, получите консультацию экспертов Запись вебинара доступна на сайте! Смотреть #реклама 16+ webinar.tranio.ru О рекламодателе

🤔 Может ли абстрактный класс содержать в себе частный метод и почему? Да, абстрактный класс в PHP может содержать частный (private) метод. Это возможно и иногда даже полезно по нескольким причинам. 🚩Почему это возможно и полезно 🟠Инкапсуляция Частные методы помогают скрыть внутреннюю реализацию абстрактного класса, позволяя использовать эти методы только внутри самого абстрактного класса. Это полезно для организации и упрощения кода, когда некоторые вспомогательные методы не должны быть доступны вне класса или его потомков. 🟠Повторное использование кода Частные методы могут использоваться для разбиения кода на логические блоки, что облегчает его повторное использование внутри класса. Это особенно полезно в больших абстрактных классах, где могут быть несколько сложных операций.
abstract class AbstractClass {
    // Абстрактный метод, который должен быть реализован в подклассах
    abstract protected function doSomething();

    // Пример частного метода
    private function helperMethod() {
        // Внутренняя логика, недоступная подклассам
        return "Helper method result";
    }

    // Публичный метод, использующий частный метод
    public function performTask() {
        echo $this->helperMethod();
        $this->doSomething();
    }
}

class ConcreteClass extends AbstractClass {
    protected function doSomething() {
        echo " Doing something in ConcreteClass";
    }
}

$instance = new ConcreteClass();
$instance->performTask(); // Выведет: Helper method result Doing something in ConcreteClass
🚩Основные моменты 🟠Частные методы в абстрактных классах Доступны только внутри самого абстрактного класса и не могут быть вызваны или переопределены в подклассах. 🟠Инкапсуляция и организация кода Частные методы помогают скрыть детали реализации и улучшить структуру кода. 🟠Повторное использование Вспомогательные методы могут быть использованы для выполнения повторяющихся задач внутри класса. Ставь 👍 и забирай 📚 Базу знаний

🤔 Как происходит процесс раскатки (разворачивания) деплоя? Процесс раскатки включает сборку приложения, загрузку на сервер и настройку среды выполнения. Используются инструменты автоматизации, такие как Ansible, Jenkins или Docker, чтобы минимизировать ручной труд. Также применяются проверки на каждом этапе для предотвращения ошибок. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Попробуйте себя в мобильной разработке и аналитике Студенты, готовы прокачивать навыки программирования вместе с опытными пре
Попробуйте себя в мобильной разработке и аналитике Студенты, готовы прокачивать навыки программирования вместе с опытными преподавателями Т-Банка? Узнайте, как создавать приложения, анализировать данные и автоматизировать рутинные задачи, на одном из онлайн-курсов Т-Образования. Для учебы нужно 2—3 часа в неделю. Подайте заявку сейчас. Подать заявку #реклама 16+ education.tbank.ru О рекламодателе

🤔 Зачем придумали анонимные классы? Анонимные классы в PHP были введены в версии 7.0 и позволяют создавать одноразовые объекты без необходимости предварительного объявления класса. Они имеют несколько преимуществ и предназначены для решения ряда задач в программировании. Вот основные причины и случаи, для которых они были придуманы: 🚩Зачем придумали анонимные классы 🟠Упрощение кода Анонимные классы позволяют создать класс на месте, в том же файле, где он используется, без необходимости его предварительного определения. Это упрощает и сокращает код, особенно для одноразовых задач.
$logger = new class {
public function log($message) {
echo $message;
}
};

$logger->log("Hello, World!"); // Выведет: Hello, World!
🟠Инкапсуляция и уменьшение загрязнения пространства имен Поскольку анонимные классы не имеют имен, они не добавляют новых имен в глобальное пространство имен, что помогает избежать конфликтов имен и делает код более чистым. 🟠Использование одноразовых объектов Анонимные классы удобны, когда нужно создать объект для одноразового использования, например, в тестах, или для передачи в функции или методы.
function handleRequest($handler) {
$handler->process();
}

handleRequest(new class {
public function process() {
echo "Processing request";
}
}); // Выведет: Processing request
🟠Более гибкая реализация интерфейсов и абстрактных классов: Анонимные классы могут реализовывать интерфейсы или наследовать от абстрактных классов, предоставляя быстрый способ создать конкретные реализации на месте.
interface Logger {
public function log($message);
}

$logger = new class implements Logger {
public function log($message) {
echo $message;
}
};

$logger->log("Logging message"); // Выведет: Logging message
🟠Улучшение тестирования В юнит-тестах анонимные классы позволяют быстро создавать мок-объекты (mock objects) для тестирования без необходимости создавать отдельные классы для каждой тестовой ситуации.
class Service {
private $logger;

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

public function execute() {
$this->logger->log("Service executed");
}
}

$mockLogger = new class {
public function log($message) {
echo "Mock: " . $message;
}
};

$service = new Service($mockLogger);
$service->execute(); // Выведет: Mock: Service executed
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое анонимные функции? Анонимные функции — это функции, не имеющие имени, которые часто используются для коротких операций. Они объявляются в момент вызова и передаются как аргументы другим функциям. Например, в Python используются lambda, а в JavaScript — стрелочные функции. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Курс по frontend-разработке с junior до middle Стань специалистом по frontend-разработке с помощью менторов. Оставь заявку! У
Курс по frontend-разработке с junior до middle Стань специалистом по frontend-разработке с помощью менторов. Оставь заявку! Узнать больше #реклама 16+ ykul.ru О рекламодателе

🤔 Как реализована структура в python в сравнении с другими языками? Структура данных может быть реализована несколькими способами, что делает язык гибким и мощным. Для сравнения с другими языками, такими как C++, Java, и PHP, рассмотрим основные способы создания структур данных. 🚩Python Структуры данных обычно реализуются с использованием классов. Класс позволяет объединить данные и методы, которые работают с этими данными, в одну логическую единицу. Пример простой структуры данных с использованием класса:
class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

point = Point(2, 3)
print(point.x, point.y)  # Выведет: 2 3
🚩Namedtuple Python также предоставляет специализированную структуру данных namedtuple из модуля collections, которая позволяет создавать неизменяемые объекты с именованными полями.
from collections import namedtuple

Point = namedtuple('Point', ['x', 'y'])
point = Point(2, 3)
print(point.x, point.y)  # Выведет: 2 3
🚩С++ Структуры данных могут быть реализованы с использованием struct или классов. struct в C++ аналогичен классу, но по умолчанию имеет публичные члены.
struct Point {
    int x;
    int y;
};

Point point = {2, 3};
std::cout << point.x << " " << point.y;  // Выведет: 2 3
🚩Java Структуры данных реализуются исключительно с использованием классов, поскольку Java не имеет понятия структур как отдельной сущности.
public class Point {
    public int x;
    public int y;

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public static void main(String[] args) {
        Point point = new Point(2, 3);
        System.out.println(point.x + " " + point.y);  // Выведет: 2 3
    }
}
🚩PHP Структуры данных также реализуются с помощью классов. PHP 7 добавил поддержку типизированных свойств, что улучшает типизацию данных внутри классов.
class Point {
    public int $x;
    public int $y;

    public function __construct(int $x, int $y) {
        $this->x = $x;
        $this->y = $y;
    }
}

$point = new Point(2, 3);
echo $point->x . " " . $point->y;  // Выведет: 2 3
🚩Основные различия 🟠Python Использует классы и namedtuple для создания структур данных. Динамическая типизация и простота создания классов. 🟠C++ struct и классы, причем struct по умолчанию имеет публичные члены. Статическая типизация и высокая производительность. 🟠Java Только классы для создания структур данных. Статическая типизация и строгая объектно-ориентированная модель. 🟠PHP Использует классы для создания структур данных. Динамическая типизация с поддержкой типизированных свойств начиная с PHP 7. Ставь 👍 и забирай 📚 Базу знаний