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

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

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

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

نمایش بیشتر
2 344
مشترکین
+224 ساعت
-27 روز
-2430 روز
آرشیو پست ها
Бесплатный вебинар "Рынок информационной безопасности" Информационная безопасность в России — растущий, но сложный рынок. Как
Бесплатный вебинар "Рынок информационной безопасности" Информационная безопасность в России — растущий, но сложный рынок. Какие ниши свободны и какие возможности есть у предпринимателей в этой ниши? Узнайте на вебинаре ФРИИ и Солар 8 апреля в 17:00. Обсудим: — Рынок ИБ в России: свободные ниши, тренды и перспективы для бизнеса; — Кейс предпринимателя в кибербезопасности: как запустить стартап с нуля, найти первых клиентов и вырасти до лидера в своей сфере; — Инвестиции: какие финансовые инструменты доступны ИБ-компаниям в России. Опытом поделятся СЕО и основатель Metascan Давид Ордян, директор по венчурным инвестициям ГК «Солар» Владислав Рассказов и управляющий портфелем ФРИИ Илья Королев. Зарегистрируйтесь на сайте и до встречи онлайн! Зарегистрироваться #реклама 16+ invest.iidf.ru О рекламодателе

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

Онлайн-магистратура: Науки о данных и искусственный инт. День открытых дверей 9 апреля в 19:00 мск | Онлайн Эксперты Яндекса
+1
Онлайн-магистратура: Науки о данных и искусственный инт. День открытых дверей 9 апреля в 19:00 мск | Онлайн Эксперты Яндекса и МИФИ расскажут об очной онлайн-магистратуре для карьеры в IT. Всё о поступлении и обучении, выступления экспертов, ответы на вопросы. Выбирайте всё: работу и учёбу, навыки и диплом магистра. Записаться онлайн #реклама 16+ praktikum.yandex.ru О рекламодателе

🤔 Что такое Docker? Это платформа для разработки, доставки и запуска приложений в изолированных контейнерах. Она позволяет упаковывать приложения и все их зависимости в контейнеры, которые могут работать на любой системе, поддерживающей Docker, что делает приложения более переносимыми и независимыми от окружения. 🚩Основные концепции 🟠Контейнеры Контейнеры — это легковесные, автономные, исполняемые пакеты, которые включают в себя все необходимое для запуска приложения: код, библиотеки, зависимости и системные инструменты. Контейнеры изолированы друг от друга и от хоста, что обеспечивает консистентность работы приложения в различных средах. 🟠Образы (Images) Образ Docker — это неизменяемый шаблон, из которого создаются контейнеры. Образы могут базироваться на других образах и содержат все необходимое для запуска приложения. Например, образ может содержать операционную систему, веб-сервер и само приложение. 🟠Dockerfile Dockerfile — это текстовый файл с инструкциями по созданию Docker-образа. Он содержит последовательность команд, которые Docker выполняет для сборки образа.
          # Используем базовый образ
     FROM php:8.0-apache

     # Копируем локальные файлы в контейнер
     COPY src/ /var/www/html/

     # Устанавливаем зависимости
     RUN docker-php-ext-install mysqli
🟠Docker Hub Docker Hub — это облачный сервис для хранения и обмена Docker-образами. Он позволяет публиковать свои образы и загружать образы, созданные другими пользователями. 🚩Плюсы Портативность Контейнеры могут работать на любом сервере, где установлен Docker, что позволяет легко перемещать приложения между различными средами (разработка, тестирование, продакшн). ➕Изоляция Контейнеры изолируют приложения и их зависимости, предотвращая конфликты между различными версиями библиотек и инструментов, используемых на одном сервере. ➕Легковесность Контейнеры используют общие ресурсы ядра хостовой операционной системы, что делает их более легковесными по сравнению с виртуальными машинами. ➕Быстрое развертывание Контейнеры можно запускать и останавливать за считанные секунды, что ускоряет процессы разработки, тестирования и развертывания приложений. Ставь 👍 и забирай 📚 Базу знаний

Дарим подписку на Яндекс Музыку Ответьте на 1 вопрос и Яндекс Музыка ваша для вас и 3-х ваших близких. Кинопоиск и Яндекс Книги тоже в подписке. Попробуйте бесплатно❤️ Попробовать #реклама 18+ music.yandex.ru О рекламодателе Реклама на Яндексе

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

Обучение на Data Protection Officer (DPO) ⚡Обучение по защите персональных данных от практиков из Comply, ALUMNI Partners, Oz
Обучение на Data Protection Officer (DPO) ⚡Обучение по защите персональных данных от практиков из Comply, ALUMNI Partners, Ozon, VK и др ✨ На курсе вы узнаете: » Узнаете все про работу с персональными данными » 152-ФЗ и трансграничную передачу данных 🎓Программа: » Управление рисками » Проверка регулятора » Составление документов Скидка до конца недели! Оставьте заявку сейчас и станьте ближе к успешной карьере юриста! ❤️ Узнать больше #реклама 16+ mosdigitals.ru О рекламодателе

🤔 В чем отличие self от static? В PHP ключевые слова self и static используются для обращения к статическим свойствам и методам класса, но они имеют разные семантические значения и способы работы, особенно в контексте наследования. 🚩Основные отличия 🟠`self`: self используется для обращения к текущему классу, в котором определён метод или свойство. Это означает, что вызов self всегда относится к классу, в котором он был написан, даже если метод был вызван из класса-наследника. При использовании self, позднее статическое связывание (late static binding) не применяется. 🟠`static`: static также используется для обращения к текущему классу, но в отличие от self, он поддерживает позднее статическое связывание. Это означает, что вызов static будет относиться к классу, из которого вызван метод, даже если он был унаследован. 🚩Примеры использования В этом примере self::who() в методе test всегда вызывает метод who класса Base, даже если метод test вызывается из класса Child.
class Base {
    public static function who() {
        echo __CLASS__;
    }
    
    public static function test() {
        self::who();
    }
}

class Child extends Base {
    public static function who() {
        echo __CLASS__;
    }
}

Child::test(); // Выведет "Base"
В этом примере static::who() в методе test вызывает метод who класса Child, потому что static поддерживает позднее статическое связывание.
class Base {
    public static function who() {
        echo __CLASS__;
    }
    
    public static function test() {
        static::who();
    }
}

class Child extends Base {
    public static function who() {
        echo __CLASS__;
    }
}

Child::test(); // Выведет "Child"
🚩Плюсы Инкапсуляция и Полиморфизм: self позволяет явно указать, что должно быть использовано определенное поведение текущего класса, независимо от наследников. static обеспечивает более гибкое и полиморфное поведение, позволяя классам-наследникам переопределять методы и свойства, которые будут использоваться при вызове из базового класса. ➕Понятность кода: Использование self может сделать код более читаемым и предсказуемым, когда не требуется учитывать поведение наследников. Использование static делает код более гибким и расширяемым, что полезно в иерархии классов. Ставь 👍 и забирай 📚 Базу знаний

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

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

Repost from easyoffer
Я боялся, что провалю собеседование. Так появился easyoffer Когда я только начинал искать первую работу программистом, меня п
+2
Я боялся, что провалю собеседование. Так появился easyoffer Когда я только начинал искать первую работу программистом, меня пугала мысль, что я просто не смогу ответить на вопросы на собеседовании. Типа… ты потратил месяцы на то, чтобы учиться, писал pet-проекты, собирал резюме, рассылаешь отклики — и всё может закончиться на одном-единственном вопросе, на который ты не знаешь ответ. Я реально боялся. Я смотрел видео mock-собеседований на YouTube, останавливал каждое, выписывал вопросы в Notion. Потом вручную писал к ним ответы. И потом ещё по нескольку раз перечитывал. Такой вот "тренажёр" на коленке. 📎 (там на картинке — один из моих реальных списков в Notion, ставь 🔥 если тоже так делал) В какой-то момент я посчитал — у меня уже было выписано больше 500 вопросов. Я почувствовал ужас. Потому что невозможно всё это зазубрить. А что, если спросят как раз тот, к которому я не успел подготовиться?.. Тогда и пришла идея А что если понять, какие из вопросов встречаются чаще всего? Чтобы не учить всё подряд, а сфокусироваться на главном. Так родился easyoffer. Сначала — просто как пет-проект, чтобы показать в резюме и подготовиться к собесам. А потом оказалось, что он реально помогает людям. За первые месяцы его посетили сотни тысяч человек. И я понял: это больше, чем просто пет-проект. Сейчас я делаю EasyOffer 2.0 И уже не один, а вместе с вами. В новой версии будут: – вопросы из реальных собесов, с фильтрацией по грейду, компании, типу интервью – тренажёр с карточками (по принципу интервальных повторений — как в Anki) – база задач с интервью – тренажёр «реальное собеседование», чтобы отрепетировать как в жизни Каждая фича упрощает и сокращает время на подготовку. Все эти штуки я бы мечтал иметь, когда сам готовился к собеседованиям. Я делаю всё на свои деньги. Никаких инвесторов. Только вы и я. Если вы хотите помочь — сейчас самое важное время. Краудфандинг уже стартовал. Благодаря нему я смогу привлечь больше людей для разработки, сбору и обработки собеседований. Все, кто поддержат проект до релиза, получат: 🚀 1 год PRO-доступа по цене месячной подписки. Его можно активировать в любое время, например когда начнете готовится к собесам. ➕ Доступ к закрытому бета-тесту Поддержать 👉 https://planeta.ru/campaigns/easyoffer Спасибо, что верите в этот проект 🙌

🤔 Что такое Entity? Entity (Сущность) – это объект, который представляет данные в системе, чаще всего в базах данных или доменной модели приложения. 🚩Где используется Entity? 🟠В базах данных (ORM, Doctrine, Eloquent) В ORM (Object-Relational Mapping) сущность – это объект, который соответствует таблице в БД.
class User extends Model {
    protected $table = 'users'; // Таблица в БД
}
🟠В доменной модели (DDD – Domain-Driven Design) В DDD Entity – это объект, у которого есть уникальный идентификатор и состояние.
class Order {
    private int $id;
    private float $total;
    
    public function __construct(int $id, float $total) {
        $this->id = $id;
        $this->total = $total;
    }

    public function getId(): int {
        return $this->id;
    }

    public function getTotal(): float {
        return $this->total;
    }
}
Ставь 👍 и забирай 📚 Базу знаний

Онлайн-магистратура с IT специальностями от Яндекса Совместно с ИТМО, МИФИ, МФТИ. Онлайн-магистратура с актуальными программами и гибким графиком обучения. Получите высокооплачиваемую IT профессию, официальный диплом и практические знания. Господдержка оплаты. Совмещение с работой! Узнать больше #реклама 16+ practicum.yandex.ru О рекламодателе

🤔Что такое Service Locator? Это паттерн проектирования, предоставляющий объект (локатор), который отвечает за предоставление зависимостей (сервисов) в приложении. • Он хранит ссылки на зависимости и позволяет получить их по запросу. • Недостаток: сложнее отслеживать зависимости и тестировать код, так как локатор создаёт скрытые связи. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 По какому принципу будешь выбирать архитектуру? Это сложный и ответственный процесс, который зависит от множества факторов. Принятие правильного решения требует анализа требований, условий и ограничений проекта. Основные принципы, по которым выбирается архитектура, включают следующие: 🚩Принципы выбор 🟠Требования к проекту Функциональные требования: Какие функции должно выполнять приложение? Нефункциональные требования: Производительность, масштабируемость, надежность, безопасность и т.д. 🟠Объем и сложность проекта Размер команды: Количество разработчиков, их опыт и навыки. Сложность бизнес-логики: Насколько сложны процессы и операции, которые будет выполнять система. 🟠Масштабируемость и производительность Нагрузка: Ожидаемое количество пользователей, объем данных и частота операций. Горизонтальная и вертикальная масштабируемость: Возможность добавления новых серверов или улучшения существующих для обработки увеличивающейся нагрузки. 🟠Надежность и отказоустойчивость Требования к доступности: Время безотказной работы и допустимые уровни простоя. Механизмы резервирования и восстановления: Способы обеспечения бесперебойной работы при сбоях. 🟠Безопасность Конфиденциальность данных: Как будет обеспечиваться защита данных от несанкционированного доступа. Целостность данных: Меры для предотвращения и обнаружения изменений данных. 🟠Управляемость и поддержка Обслуживаемость: Легкость управления, мониторинга и обновления системы. Документирование: Наличие подробной документации для поддержки и развития. 🟠Интеграция с другими системами Совместимость: Как система будет взаимодействовать с другими приложениями и сервисами. Стандарты и протоколы: Используемые стандарты для обеспечения совместимости и взаимодействия. 🟠Стоимость и сроки Бюджет: Стоимость разработки, развертывания и поддержки системы. Временные ограничения: Сроки выполнения проекта и время на разработку. 🚩Примеры выбора 🟠Monolithic Architecture (Монолитная архитектура) Небольшие или средние проекты с низкой сложностью. Ограниченные требования к масштабируемости. Ограниченные ресурсы и сроки разработки. Простое веб-приложение для управления контентом (CMS), где все компоненты (база данных, интерфейс пользователя, логика приложения) развернуты на одном сервере. 🟠Microservices Architecture (Микросервисная архитектура) Большие и сложные проекты с высокой нагрузкой. Требуется высокая масштабируемость и отказоустойчивость. Разделение разработки на независимые команды. Электронная коммерция, где отдельные микросервисы управляют различными аспектами системы, такими как управление продуктами, корзина, платежи, учетные записи пользователей и т.д. 🟠Event-Driven Architecture (Событийно-ориентированная архитектура) Системы, которые должны реагировать на события в реальном времени. Высокая гибкость и адаптивность к изменяющимся условиям. Финансовая торговая платформа, где события от биржи передаются и обрабатываются различными сервисами в реальном времени для выполнения сделок и анализа данных. 🟠Serverless Architecture (Безсерверная архитектура) Приложения с переменной нагрузкой. Минимизация операционных расходов и управление серверной инфраструктурой. Ставь 👍 и забирай 📚 Базу знаний

🤔 Как устроен Git? Это распределенная система контроля версий (VCS), которая позволяет отслеживать изменения в коде, работать в командах и управлять версиями проекта. Основные компоненты: 1. Рабочая директория (Working Directory) – файлы, с которыми работает разработчик. 2. Index (Staging Area) – подготовленная зона перед коммитом. 3. Локальный репозиторий (Local Repository) – база данных версий на локальном устройстве. 4. Удаленный репозиторий (Remote Repository) – центральное хранилище проекта (GitHub, GitLab, Bitbucket). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Как сделать так, чтобы приложение разворачивалось быстрее в 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
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое в мире PHP PSR и RFC? PSR (PHP Standards Recommendations) — это набор стандартов и рекомендаций для написания кода в PHP, таких как PSR-1, PSR-2 для стиля кода, PSR-4 для автозагрузки классов. RFC (Request for Comments) — это предложения по улучшению PHP, которые обсуждаются и принимаются сообществом, формируя новые возможности и изменения в языке. Оба механизма способствуют стандартизации и улучшению качества кода в PHP-сообществе. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что содержит инкапсуляция кроме сокрытия данных? Инкапсуляция — это не только скрытие данных, но и ограничение доступа к внутренним деталям объекта + защита логики от внешнего вмешательства. 🚩Основные аспекты инкапсуляции Сокрытие данных (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
Ставь 👍 и забирай 📚 Базу знаний

Премьера! «Момент в истории» 10 апреля в 22:00 на РЕН ТВ 12 апреля 1961 года. Первый полёт человека в космос! ⚡Как Гагарин чу
Премьера! «Момент в истории» 10 апреля в 22:00 на РЕН ТВ 12 апреля 1961 года. Первый полёт человека в космос! ⚡Как Гагарин чуть не задохнулся во время спуска? И почему его капсула приземлилась отдельно? 📅Расскажем всю правду в новой программе на РЕН ТВ. Смотрите «Момент в истории» 10 апреля в 22:00! Узнать больше #реклама 16+ ren.tv О рекламодателе