PHP | Вопросы собесов
前往频道在 Telegram
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv
显示更多2 344
订阅者
+224 小时
-27 天
-2430 天
帖子存档
Бесплатный вебинар "Рынок информационной безопасности"
Информационная безопасность в России — растущий, но сложный рынок. Какие ниши свободны и какие возможности есть у предпринимателей в этой ниши? Узнайте на вебинаре ФРИИ и Солар 8 апреля в 17:00.
Обсудим:
— Рынок ИБ в России: свободные ниши, тренды и перспективы для бизнеса;
— Кейс предпринимателя в кибербезопасности: как запустить стартап с нуля, найти первых клиентов и вырасти до лидера в своей сфере;
— Инвестиции: какие финансовые инструменты доступны ИБ-компаниям в России.
Опытом поделятся СЕО и основатель Metascan Давид Ордян, директор по венчурным инвестициям ГК «Солар» Владислав Рассказов и управляющий портфелем ФРИИ Илья Королев.
Зарегистрируйтесь на сайте и до встречи онлайн!
Зарегистрироваться
#реклама 16+
invest.iidf.ru
О рекламодателе
🤔 Расскажи про полиморфизм
Полиморфизм — это концепция ООП, которая позволяет объектам разных классов обрабатывать одинаковые сообщения или методы по-разному. Полиморфизм позволяет использовать общий интерфейс для взаимодействия с объектами разных типов, не зная их конкретный класс. Он облегчает расширение и поддержку кода, делая его более гибким и удобным для добавления новых классов.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
+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, 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
+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!
Узнать больше
#реклама 16+
ren.tv
О рекламодателе
现已上线!2025 年 Telegram 研究 — 年度关键洞察 
