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

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

رفتن به کانال در Telegram

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

نمایش بیشتر
2 343
مشترکین
-324 ساعت
-77 روز
-2830 روز
آرشیو پست ها
🤔 Как типы связи реализуются в Laravel? Laravel Eloquent поддерживает следующие связи: - One-to-One — через hasOne / belongsTo. - One-to-Many — через hasMany / belongsTo. - Many-to-Many — через belongsToMany и pivot-таблицы. - Has One Through / Has Many Through — для косвенных связей. - Polymorphic — одна модель может принадлежать разным другим моделям (например, Comment может быть к Post или Video). - Morph To Many — полиморфные связи с множеством объектов. Все связи описываются как методы модели и могут использоваться для ленивой или жадной загрузки (lazy/eager loading). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Где вести задачи и проекты? Конечно, в Битрикс24 Бесплатный онлайн-сервис для бизнеса и совместной работы. Полный комплект дл
Где вести задачи и проекты? Конечно, в Битрикс24 Бесплатный онлайн-сервис для бизнеса и совместной работы. Полный комплект для эффективности вашей команды. Ставьте первую задачу прямо сейчас Начать #реклама 16+ task-24.bitrix24.ru О рекламодателе

🤔 Что если в классе есть публичное свойство, это означает что класс иммутабельный или нет? Нет, наличие публичного свойства в классе не делает его автоматически иммутабельным. 🚩Что такое иммутабельность Означает, что состояние объекта не может измениться после его создания. Все изменения создают новый объект, вместо изменения состояния существующего объекта. 🚩Публичные свойства и иммутабельность Означает, что его можно изменить из любого места, где доступен экземпляр класса. Таким образом, если у класса есть публичное свойство, этот класс не может считаться иммутабельным, поскольку его состояние можно изменять напрямую. 🚩Пример неиммутабельного класса В этом примере свойство name публичное, и его значение может быть изменено после создания объекта, что нарушает иммутабельность.
class Person {
    public $name;

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

$person = new Person("John");
$person->name = "Doe"; // Состояние объекта изменено
🚩Иммутабельный класс Для создания иммутабельного класса свойства должны быть приватными или защищёнными, и изменение этих свойств должно быть невозможным после создания объекта.
class ImmutablePerson {
    private $name;

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

    public function getName() {
        return $this->name;
    }
}

$person = new ImmutablePerson("John");
// $person->name = "Doe"; // Это вызовет ошибку, т.к. свойство приватное
echo $person->getName(); // Выведет: John
Ставь 👍 и забирай 📚 Базу знаний

В турагентство на удаленку требуются стажеры Клиентов предоставим. Можно без опыта и совмещая с основной работой или декретом
В турагентство на удаленку требуются стажеры Клиентов предоставим. Можно без опыта и совмещая с основной работой или декретом. С нас обучение с гарантированной стажировкой. Доход после обучения: от 50 000₽ до 220 000₽. Оплата в процессе обучения зависит от вашей вовлеченности. Задачи: Помогать людям организовывать путешествия: подбор самых выгодных предложений на отдых со скидкой до 50% в новых сервисах бронирования. Условия: ✅ Без опыта — обучение с нуля за 2 месяца, первые выплаты в среднем в течение 2 недель; ✅Удаленная работа или совмещение с офисом (по желанию, зависит от вашего города). Хотите проверить, подойдет ли это вам? Регистрируйтесь на бесплатный вводный урок, на котором узнаете: — как подбирать туры для себя и близких с выгодой до 40% — как получать комиссию 7-10% с каждого тура. Узнать больше #реклама 16+ via-tourism-school.space О рекламодателе

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

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

interface PaymentProcessor {
    public function processPayment($amount);
}
2⃣Реализация сервисов
class FileLogger implements Logger {
    public function log($message) {
        echo "Logging message to a file: $message";
    }
}

class StripePaymentProcessor implements PaymentProcessor {
    public function processPayment($amount) {
        echo "Processing payment of $amount through Stripe";
    }
}
3⃣Реализация Service Locator
class ServiceLocator {
    private $services = [];

    public function register($serviceName, $service) {
        $this->services[$serviceName] = $service;
    }

    public function get($serviceName) {
        if (!isset($this->services[$serviceName])) {
            throw new Exception("Service not found: " . $serviceName);
        }
        return $this->services[$serviceName];
    }
}
4⃣Регистрация и использование сервисов
$serviceLocator = new ServiceLocator();

// Регистрация сервисов
$serviceLocator->register('logger', new FileLogger());
$serviceLocator->register('paymentProcessor', new StripePaymentProcessor());

// Использование сервисов
$logger = $serviceLocator->get('logger');
$logger->log("This is a log message."); // Вывод: Logging message to a file: This is a log message.

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

🤔 Зачем нужны паттерны проектирования? Паттерны проектирования решают типичные задачи разработки, предоставляя проверенные временем решения. Они повышают читаемость, повторное использование и масштабируемость кода. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

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

🤔 Что такое списочный тип? Списочный тип данных, также известный как список, представляет собой структуру данных, которая хранит упорядоченные коллекции элементов. Списки позволяют хранить наборы элементов, доступ к которым можно получить по индексу. Они широко используются в программировании благодаря своей гибкости и удобству. 🚩Особенности 🟠Упорядоченность Элементы в списке хранятся в определенном порядке, и этот порядок сохраняется. Каждый элемент имеет индекс, по которому к нему можно обратиться. 🟠Изменяемость Списки обычно являются изменяемыми структурами данных, что означает, что вы можете добавлять, удалять или изменять элементы после создания списка. 🟠Гетерогенность В списке могут храниться элементы различных типов данных (например, числа, строки, объекты). 🚩Примеры списочных типов в различных языках программирования Python
  my_list = [1, 2, 3, 'a', 'b', 'c']
  my_list.append(4)  # Добавление элемента
  print(my_list[2])  # Доступ к элементу по индексу (вывод: 3)
  
Java
  import java.util.ArrayList;
  
  ArrayList<Object> myList = new ArrayList<>();
  myList.add(1);
  myList.add("hello");
  System.out.println(myList.get(1));  // Доступ к элементу по индексу (вывод: hello)
  
PHP
  $myList = array(1, 2, 3, 'a', 'b', 'c');
  array_push($myList, 4);  // Добавление элемента
  echo $myList[2];  // Доступ к элементу по индексу (вывод: 3)
  
🚩ПлюсыГибкость Списки позволяют легко добавлять, удалять и изменять элементы. ➕Удобство использования Простейшие операции над списками, такие как добавление или удаление элементов, обычно реализуются стандартными методами или функциями. ➕Поддержка индексов Доступ к элементам по индексу позволяет эффективно манипулировать данными. Ставь 👍 и забирай 📚 Базу знаний

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

🖼️ Ищем PHP разработчиков. Релокейт, удалёнка, платим много! Специально для Вас, собираем лучшие вакансии по PHP с прямыми к
🖼️ Ищем PHP разработчиков. Релокейт, удалёнка, платим много! Специально для Вас, собираем лучшие вакансии по PHP с прямыми контактами в Telegram на канале @it_match_php. Подпишись чтобы не упустить свой шанс получить лучший оффер! 🔗 Посмотреть вакансии

🤔 Как сделать так, чтобы приложение разворачивалось быстрее в Docker`е? При развёртывании приложения в Docker важно минимизировать время сборки и оптимизировать слои контейнера. 🟠Использовать `.dockerignore` Не копировать лишние файлы в контейнер (например, node_modules, .git, vendor, .env).
.git
node_modules
vendor
.env
*.log
🟠Оптимизировать `Dockerfile` (Меньше слоёв, кэширование) Плохо (лишние слои, без кэширования)
FROM php:8.2-cli

WORKDIR /app

COPY . .      # Копирует ВСЕ файлы (долго и некэшируемо)
RUN composer install
RUN npm install
RUN npm run build
Хорошо (разделение слоёв, кэширование)
FROM php:8.2-cli

WORKDIR /app

COPY composer.json composer.lock ./
RUN composer install --no-dev --prefer-dist # Используем кэширование слоёв

COPY package.json package-lock.json ./
RUN npm install --only=production && npm cache clean --force

COPY . . # Копируем код ПОСЛЕ установки зависимостей (чтобы кэширование работало)
RUN npm run build
🟠Использовать `multi-stage builds` (если контейнер весит много) Позволяет уменьшить размер конечного образа, убрав ненужные файлы и инструменты.
# 1-й этап: сборка зависимостей (Node.js)
FROM node:18 as frontend
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm install
COPY . .
RUN npm run build

# 2-й этап: финальный образ
FROM php:8.2-cli
WORKDIR /app
COPY --from=frontend /app/dist /app/public # Берём только готовые файлы
COPY . .
CMD ["php", "artisan", "serve", "--host=0.0.0.0"]
🟠Использовать `docker build --cache-from` Позволяет использовать кеш из предыдущих сборок.
docker build --cache-from=myapp:latest -t myapp .
🟠Оптимизировать `docker-compose` (если используется) Перенести volume для vendor и node_modules на хост, чтобы не скачивать их в контейнере.
services:
  app:
    build: .
    volumes:
      - .:/app
      - /app/vendor  # Чтобы composer install не запускался каждый раз
      - /app/node_modules # Чтобы npm install не замедлял перезапуск
🟠Использовать `Alpine Linux` (если важен размер образа) Alpine – лёгкая версия Linux (~5 MB), подходит для PHP, Nginx, Node.js.
FROM php:8.2-fpm-alpine
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое Low Coupling и High Cohesion? • Low Coupling (низкая связанность): уменьшение зависимости между модулями, чтобы изменения в одном модуле минимально затрагивали другие. • High Cohesion (высокая связность): логически связанные функции и данные группируются в одном модуле, делая его функционально независимым. Совмещение этих принципов упрощает сопровождение и тестирование кода. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Какая разница между self и this? self и this используются для ссылки на текущий класс и его экземпляр соответственно, но каждый из них имеет свои особенности и область применения. 🚩this Используется для обращения к текущему объекту класса. Он позволяет получить доступ к нестатическим свойствам и методам объекта. Является ссылкой на вызываемый объект и используется внутри методов объекта для обращения к его свойствам и методам.
class Car {
    public $color = 'red';

    public function getColor() {
        return $this->color; // Используется $this для доступа к свойству текущего объекта
    }
}

$myCar = new Car();
echo $myCar->getColor(); // Выведет 'red'
🚩self Используется для обращения к текущему классу и применяется в основном для доступа к статическим свойствам и методам класса. Ссылается на класс, в котором она была вызвана, и не требует создания экземпляра объекта для доступа к содержимому.
class Car {
    public static $count = 0;

    public function __construct() {
        self::$count++; // Используется self для доступа к статическому свойству
    }

    public static function getTotalCars() {
        return self::$count; // Обращение к статическому методу или свойству
    }
}

$newCar1 = new Car();
$newCar2 = new Car();
echo Car::getTotalCars(); // Выведет '2'
🚩Основные различия 🟠Контекст использования $this используется для доступа к свойствам и методам текущего объекта экземпляра, тогда как self используется для доступа к статическим свойствам и методам класса. 🟠Статический vs Нестатический $this нельзя использовать в статических методах, потому что статические методы могут быть вызваны без создания объекта класса. self, напротив, предназначена для использования в статическом контексте. 🟠Привязка self привязана к классу, в котором она написана, а $this — к объекту, через который вызывается метод. Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое DI Container? Это инструмент для управления зависимостями приложения. • Он автоматически создаёт объекты и предоставляет их другим компонентам, решая, какие зависимости инъектировать. • Контейнер упрощает реализацию DI, улучшает модульность и тестируемость приложения. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Открыть бизнес? Конечно, со Сбером! За 0₽ любой тариф расчётно-кассового обслуживания на месяц, выбирайте тот, который больше
Открыть бизнес? Конечно, со Сбером! За 0₽ любой тариф расчётно-кассового обслуживания на месяц, выбирайте тот, который больше всего подойдёт вашему делу. А также: ✅ бесплатные сервисы для ведения бизнеса: бухгалтерия для ИП, юрподдержка, электронный документооборот, отчётность в госорганы и многое другое. Всё, чтобы вам было удобно! ✅ специальные условия для тех, кто ведёт бизнес на маркетплейсах: безлимитные переводы на счета физлиц без комиссии. Откройте счёт онлайн или в любом нашем офисе. Узнать больше Финансовые услуги оказывает: ПАО Сбербанк. #реклама sberbank.com О рекламодателе

🤔 В чем недостатки асинхронного шифрования? Асинхронное шифрование (или шифрование с открытым ключом, например, RSA, ECC) использует два ключа: Открытый ключ (Public Key) – для шифрования Закрытый ключ (Private Key) – для расшифровки 🚩Основные недостатки асинхронного шифрования 🟠Медленнее, чем симметричное шифрование Шифрование и расшифровка занимают больше времени, потому что алгоритмы (например, RSA) используют сложные математические операции (экспоненцирование и факторизацию). AES (симметричное) в 100–1000 раз быстрее, чем RSA. 🟠Длина ключа больше → больше ресурсов Чтобы обеспечить безопасность, RSA требует очень длинных ключей (2048+ бит). Чем длиннее ключ, тем больше памяти и CPU требуется для вычислений. 🟠Уязвимость к квантовым атакам Квантовые компьютеры смогут быстро взломать RSA и ECC с помощью алгоритма Шора. AES-256 останется безопасным, но RSA-2048 можно будет взломать за несколько часов или минут. 🟠Усложнённое управление ключами Нужно генерировать, хранить и передавать пары ключей. Закрытый ключ нельзя потерять – иначе данные невозможно расшифровать. Если злоумышленник завладеет закрытым ключом, он сможет расшифровать всю информацию. 🟠Атаки MITM и проблемы доверия Открытый ключ может быть подменён злоумышленником (атака "человек посередине" – MITM). Если хакер подменит публичный ключ, он сможет расшифровать данные. Ставь 👍 и забирай 📚 Базу знаний

Как списать долги? Бесплатно через МФЦ! Долги от 200 000₽. Поможем бесплатно списать долг и расторгнуть все кредитные договор
Как списать долги? Бесплатно через МФЦ! Долги от 200 000₽. Поможем бесплатно списать долг и расторгнуть все кредитные договоры! Узнать больше #реклама нет-кредит.рф О рекламодателе

🤔 Что делать, если у двух trait'ов один и тот же метод? 1. Если два trait содержат методы с одинаковыми именами, необходимо явно указать, какой метод использовать, с помощью use TraitName::methodName. 2. В сложных случаях можно переопределить метод в классе для явной реализации. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое инкапсуляция? Инкапсуляция — это один из основных принципов ООП. Она представляет собой механизм, позволяющий скрыть внутренние детали объекта и предоставлять доступ к данным и методам объекта только через определенные интерфейсы. Это помогает защитить данные от некорректного использования и обеспечивает контроль над изменением состояния объекта. 🚩Основные аспекты 🟠Сокрытие данных Инкапсуляция позволяет скрыть внутреннее состояние объекта от внешнего мира. Данные объекта становятся доступными только через методы, предоставленные самим объектом. 🟠Контроль доступа Внутренние данные и методы объекта могут быть объявлены как приватные (private) или защищенные (protected), что предотвращает их прямой доступ из кода вне объекта. Публичные методы (public) используются для взаимодействия с объектом. 🟠Целостность данных Поскольку доступ к данным осуществляется через методы, можно контролировать и проверять изменения состояния объекта, что помогает поддерживать его целостность и корректность.
class User {
    // Приватные свойства
    private $name;
    private $email;

    // Конструктор для инициализации свойств
    public function __construct($name, $email) {
        $this->setName($name);
        $this->setEmail($email);
    }

    // Публичный метод для получения имени
    public function getName() {
        return $this->name;
    }

    // Публичный метод для установки имени
    public function setName($name) {
        if (!empty($name)) {
            $this->name = $name;
        } else {
            throw new Exception("Name cannot be empty");
        }
    }

    // Публичный метод для получения email
    public function getEmail() {
        return $this->email;
    }

    // Публичный метод для установки email
    public function setEmail($email) {
        if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
            $this->email = $email;
        } else {
            throw new Exception("Invalid email address");
        }
    }
}

// Создание объекта пользователя
$user = new User("John Doe", "john.doe@example.com");

// Получение и изменение данных через публичные методы
echo $user->getName(); // John Doe
$user->setEmail("new.email@example.com");
echo $user->getEmail(); // new.email@example.com

// Прямой доступ к приватным свойствам вызовет ошибку
// $user->name = "Jane"; // Ошибка
Ставь 👍 и забирай 📚 Базу знаний