PHP | Вопросы собесов
Відкрити в Telegram
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv
Показати більше2 342
Підписники
-224 години
-67 днів
-2530 день
Архів дописів
🤔 Для чего нужен Синглтон паттерн?
🟠Контроль над созданием объекта
Иногда требуется, чтобы у определенного класса был только один экземпляр в течение жизненного цикла программы. Это может быть связано с тем, что данный объект использует значительные ресурсы или имеет состояние, которое должно быть уникальным.
🟠Глобальная точка доступа
Синглтон предоставляет простой способ доступа к объекту из любой точки программы. Это упрощает управление состоянием приложения, поскольку все части программы могут взаимодействовать с одним и тем же экземпляром объекта.
🚩Как используется?
1⃣Закрытие конструктора
Конструктор объявляется закрытым (private), чтобы предотвратить создание объекта напрямую через оператор
new.
2⃣Закрытие клонирования
Метод клонирования (magic method __clone()) тоже объявляется закрытым, чтобы запретить клонирование объекта.
3⃣Закрытие десериализации
Метод десериализации (magic method __wakeup()) также объявляется закрытым, чтобы предотвратить восстановление объекта из строки.
4⃣Статический метод для получения экземпляра
Создается статический метод, который проверяет, существует ли уже экземпляр объекта. Если нет, то создается новый; если да, то возвращается существующий.
Пример
class Singleton {
// Статическое свойство для хранения единственного экземпляра
private static $instance;
// Закрытый конструктор для предотвращения создания объекта через new
private function __construct() {}
// Запрет клонирования объекта
private function __clone() {}
// Запрет десериализации объекта
private function __wakeup() {}
// Метод для получения единственного экземпляра
public static function getInstance() {
if (self::$instance === null) {
self::$instance = new self();
}
return self::$instance;
}
// Пример метода
public function sayHello() {
echo "Hello, Singleton!";
}
}
// Использование синглтона
$singleton = Singleton::getInstance();
$singleton->sayHello(); // Выведет "Hello, Singleton!"
🟠Контролируемое создание
Конструктор закрыт, поэтому экземпляр можно создать только внутри класса через метод getInstance().
🟠Глобальная доступность
Поскольку метод getInstance() статический, он доступен в любом месте кода, что делает доступ к экземпляру глобальным.
🟠Один экземпляр
Проверка в методе getInstance() гарантирует, что будет создан только один экземпляр класса.
Ставь 👍 и забирай 📚 Базу знаний4 дня духовных практик для вашего старта в новую жизнь
На связи Дарья Мэджик - психолог, педагог, Мастер Учитель 8 направлений Рейки.
Приглашаю вас на бесплатный марафон Рейки, где вы пройдете тотальную перезагрузку на уровне мышления, тела и энергетики.
Марафон поможет вам:
✅ познакомиться с методикой самопознания, которую практикуют 5 млн людей
✅ оценить точку А, в которой сейчас находитесь, чтобы увидеть пути решения проблем
✅ повысить уровень энергии, зарядиться мотивацией и положительными эмоциями
✅ через точки роста посмотреть на 5 сфер: внутренний мир, здоровье, отношения, финансы и желания
✅ получить план действий для создания благополучия в жизни с помощью Рейки
За 4 дня мы выполним 10 практик, которые помогут сделать 1й шаг к ресурсному состоянию, денежному изобилию и счастливой жизни.
До встречи!
Зарегистрироваться
#реклама 16+
garmoniyasreiki.ru
О рекламодателе
🤔Что такое Service Locator?
Это паттерн проектирования, предоставляющий объект (локатор), который отвечает за предоставление зависимостей (сервисов) в приложении.
• Он хранит ссылки на зависимости и позволяет получить их по запросу.
• Недостаток: сложнее отслеживать зависимости и тестировать код, так как локатор создаёт скрытые связи.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Для чего нужна рефлексия?
Рефлексия (Reflection) – это механизм анализа классов, методов, свойств и других структур во время выполнения. Она позволяет получать информацию о коде и даже изменять его динамически.
🚩Когда полезна рефлексия?
🟠Фреймворки и DI-контейнеры
- Используется для автоматического внедрения зависимостей (Dependency Injection, DI).
- Например, Laravel использует рефлексию в
Container для автоматического создания объектов.
class Database {
public function connect() {
return "Подключение к базе данных";
}
}
class UserService {
private $db;
public function __construct(Database $db) {
$this->db = $db;
}
public function getUser() {
return "Пользователь найден";
}
}
function resolve($class) {
$reflector = new ReflectionClass($class);
$constructor = $reflector->getConstructor();
if (!$constructor) {
return new $class;
}
$params = $constructor->getParameters();
$dependencies = [];
foreach ($params as $param) {
$type = $param->getType();
if ($type) {
$dependencies[] = resolve($type->getName());
}
}
return $reflector->newInstanceArgs($dependencies);
}
$service = resolve(UserService::class);
echo $service->getUser(); // "Пользователь найден"
🟠Декораторы, аннотации и атрибуты
- В PHP 8 появились атрибуты (аннотации), и рефлексия помогает их читать.
- Используется в Symfony, Doctrine для работы с ORM.
#[Attribute]
class Route {
public function __construct(public string $path) {}
}
class Controller {
#[Route('/home')]
public function home() {
return "Домашняя страница";
}
}
$reflection = new ReflectionMethod(Controller::class, 'home');
$attributes = $reflection->getAttributes(Route::class);
$route = $attributes[0]->newInstance();
echo $route->path; // "/home"
🟠Автоматическая генерация документации
- Реально использовать для автоматического создания Swagger/OpenAPI.
- Можно извлекать PHPDoc-комментарии и на их основе генерировать документацию.
class Example {
/**
* Возвращает приветствие
* @return string
*/
public function sayHello() {
return "Привет!";
}
}
$reflection = new ReflectionMethod(Example::class, 'sayHello');
echo $reflection->getDocComment();
Ставь 👍 и забирай 📚 Базу знаний🤔 Что из себя представляет http-запрос?
HTTP-запрос — это сообщение, которое клиент отправляет серверу для выполнения определённой операции, например получения данных (GET) или их отправки (POST). Запрос содержит метод, URL, заголовки и тело запроса (если необходимо). Ответ сервера включает статус выполнения, заголовки и данные (если применимо).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Что такое абстрактный класс?
Абстрактный класс — это класс в ООП, который не может быть инстанциирован напрямую, то есть нельзя создать объект абстрактного класса используя оператор
new. Они предназначены для того, чтобы служить базой для других классов, которые должны реализовать определенные методы, заданные в нем. Обеспечение общего определения класса, которое может быть использовано в качестве основы для создания производных классов. Производные классы должны реализовать все абстрактные методы абстрактного родительского класса, но при этом они могут также иметь дополнительные методы и свойства или переопределять существующие.
abstract class Животное {
public function ест() {
echo "Это животное ест";
}
abstract public function издаетЗвук();
}
class Собака extends Животное {
public function издаетЗвук() {
echo "Гав";
}
}
// $животное = new Животное(); // Ошибка: нельзя инстанциировать абстрактный класс
$собака = new Собака();
$собака->ест(); // Вывод: Это животное ест
$собака->издаетЗвук(); // Вывод: Гав
Ставь 👍 и забирай 📚 Базу знаний🤔 Какие типизации существуют?
1. Динамическая типизация: PHP автоматически определяет тип переменной на основе её значения.
2. Явная типизация: начиная с PHP 7, можно указывать типы аргументов и возвращаемых значений функций (int, string, array и т.д.).
3. Слабая типизация: PHP преобразует типы данных автоматически при необходимости.
4. Строгая типизация: включает строгую проверку типов через директиву declare.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Зачем придумали анонимные классы?
Анонимные классы в 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
Ставь 👍 и забирай 📚 Базу знаний⚡️ В сети начали массово сливать курсы и книги известных онлайн школ по айти
Вот отсортированная база с тонной материала (постепенно пополняется):
(363 видео, 87 книги) — Python
(415 видео, 68 книги) — Frontend
(143 видео, 33 книги) — ИБ/Хакинг
(352 видео, 89 книги) — С/С++/C#
(343 видео, 87 книги) — Java/QA
(176 видео, 32 книги) — Git/Linux
(174 видео, 91 книги) — DevOps
(167 видео, 53 книги) — PHP/1С
(227 видео, 83 книги) — SQL/БД
(114 видео, 77 книги) — Сисадмин
(107 видео, 43 книги) — BA/SA
(181 видео, 32 книги) — Go/Rust
(167 видео, 43 книги) — Kotlin/Swift
(112 видео, 24 книги) — Flutter
(137 видео, 93 книги) — DS/ML
(113 видео, 82 книги) — GameDev
(183 видео, 37 книги) — Дизайн
(136 видео, 33 книги) — PM/HR
Скачивать ничего не нужно — все выложили в Telegram
🤔 Что такое HTTP?
HTTP (HyperText Transfer Protocol) — это протокол передачи гипертекста, используемый для обмена данными между веб-браузером и сервером. HTTP определяет методы (GET, POST, DELETE и др.), которые управляют отправкой и получением данных через Интернет.?
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Что такое инкапсуляция?
Инкапсуляция — это один из основных принципов ООП. Она представляет собой механизм, позволяющий скрыть внутренние детали объекта и предоставлять доступ к данным и методам объекта только через определенные интерфейсы. Это помогает защитить данные от некорректного использования и обеспечивает контроль над изменением состояния объекта.
🚩Основные аспекты
🟠Сокрытие данных
Инкапсуляция позволяет скрыть внутреннее состояние объекта от внешнего мира. Данные объекта становятся доступными только через методы, предоставленные самим объектом.
🟠Контроль доступа
Внутренние данные и методы объекта могут быть объявлены как приватные (
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"; // Ошибка
Ставь 👍 и забирай 📚 Базу знанийСоздай свой бот-тренажер в Telegram уже сегодня!
Конструктор учебных тренажеров в формате Телеграм-бота без программирования будет полезен каждому, кто занимается обучением.
В платформе Репетирум вы можете создать любую структуру из заданий, просто вкладывая папки друг в друга - как на компьютере. Ваш ученик будет видеть свой прогресс по заданиям, а вы сможете отслеживать статистику по всему процессу обучения в вашем тренажере.
7 дней бесплатно без ограничений, а после - 10% скидка по промокоду TGBOOST10 на любой платеж до конца декабря!
Попробовать
#реклама 16+
repetirum.ru
О рекламодателе
🤔 В чем отличие адаптера от декоратора
Адаптер и декоратор — это структурные паттерны проектирования, но они решают разные задачи. Адаптер используется для преобразования интерфейса одного класса в интерфейс, который ожидает клиент, чтобы классы с несовместимыми интерфейсами могли работать вместе. Декоратор, наоборот, добавляет новую функциональность к объекту, не изменяя его структуру, позволяя динамически изменять поведение объекта.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 В чем преимущество hash индекс и btree индекс?
Hash-индексы и B-Tree-индексы являются двумя типами индексов, используемыми для ускорения операций поиска в базах данных. Оба типа имеют свои преимущества и недостатки в зависимости от конкретных сценариев использования.
🚩Hash-индексы
➕Быстрый доступ по точному совпадению
Hash-индексы обеспечивают очень быстрый доступ к данным при выполнении точных поисков (например,
SELECT * FROM table WHERE column = 'value'). Время поиска практически константное (O(1)), что делает такие запросы очень эффективными.
➕Простота реализации
Hash-индексы просты в реализации и не требуют сложных структур данных для управления.
🚩B-Tree-индексы
➕Поддержка диапазонных запросов
B-Tree-индексы поддерживают операции поиска по диапазону и сортировку (например, BETWEEN, >, <, ORDER BY). Данные в B-Tree отсортированы, что делает такие запросы возможными и эффективными.
➕Сбалансированность
B-Tree автоматически поддерживает балансировку, что обеспечивает стабильную производительность для всех операций (поиск, вставка, удаление).
➕Универсальность
B-Tree-индексы поддерживают широкий спектр операций и типов данных, включая текстовые данные, даты и числа.
🟠Hash-индекс
Подходит для сценариев, где часто выполняются точные запросы равенства, например, поиск пользователя по уникальному идентификатору или email.
CREATE INDEX idx_email_hash ON users USING HASH (email);
SELECT * FROM users WHERE email = 'example@example.com';
🟠B-Tree-индекс
Подходит для сценариев, где часто выполняются диапазонные запросы, сортировка или комбинированные условия.
CREATE INDEX idx_name_btree ON users (name);
SELECT * FROM users WHERE name BETWEEN 'A' AND 'M';
Ставь 👍 и забирай 📚 Базу знаний🤔 Что известно про наследование?
Это механизм объектно-ориентированного программирования, позволяющий создавать классы на основе других классов. Позволяет повторно использовать код, добавлять или переопределять функциональность.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Почему магические методы называются магическими?
Магические методы в PHP называются так, потому что они автоматически вызываются в определённых ситуациях, без явного вызова в коде.
🚩Примеры магических методов и их "магия"
🟠`__construct()` – вызывается при создании объекта
Магия: вызывается автоматически, когда создаётся объект.
class User {
public function __construct() {
echo "Создан новый пользователь!";
}
}
$user = new User(); // ✅ Выведет "Создан новый пользователь!"
🟠`__toString()` – вызывается при попытке вывести объект как строку
Магия: PHP сам вызывает этот метод, если echo или print пытаются вывести объект.
class Car {
public function __toString() {
return "Это машина!";
}
}
$car = new Car();
echo $car; // ✅ Выведет "Это машина!"
🟠`__get()` и `__set()` – перехватывают доступ к несуществующим свойствам
Магия: вызываются, если пытаемся получить или установить значение для несуществующего свойства.
class Person {
private array $data = [];
public function __get($name) {
return $this->data[$name] ?? "Нет такого свойства";
}
public function __set($name, $value) {
$this->data[$name] = $value;
}
}
$p = new Person();
$p->age = 30; // ❌ age не объявлен, но __set() сохранит его!
echo $p->age; // ✅ Выведет 30, хотя свойства age нет
🟠`__call()` – вызывается при вызове несуществующего метода
Магия: PHP автоматически вызывает __call(), если метод не найден.
class Robot {
public function __call($name, $arguments) {
return "Метод '$name' не существует!";
}
}
$r = new Robot();
echo $r->walk(); // ✅ Выведет "Метод 'walk' не существует!"
Ставь 👍 и забирай 📚 Базу знаний🤔 Что такое списочный тип?
Это структура данных, представляющая упорядоченный набор элементов, где каждый элемент связан с предыдущим и следующим.
1. Пример — связанный список (linked list), где каждый узел содержит значение и ссылку на следующий узел.
2. Такие типы обеспечивают удобное добавление и удаление элементов, но имеют медленный доступ по индексу (O(n)).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Repost from easyoffer
База 1000+ реальных собеседований теперь встроена в easyoffer
Смотрите, как другие кандидаты отвечают на вопросы, решают задачи и проходят этапы на реальных собеседованиях от топовых компаний. Подготовьтесь к своему собеседованию с двойной уверенностью.
Напоминаем, что сегодня последний день Чёрной Пятницы
👉 Забрать PRO со скидкой 70%: https://easyoffer.ru/
🤔 Что делают self и static?
В PHP
self и static используются внутри классов для обращения к их свойствам и методам, но работают по-разному. Давайте разберёмся в их назначении и отличиях.
🚩self
Используется для обращения к собственным методам и свойствам класса. Оно не учитывает наследование и всегда ссылается на тот класс, в котором написано.
class A {
public static function who() {
echo "Я класс A\n";
}
public static function call() {
self::who(); // Вызываем метод who() внутри того же класса
}
}
class B extends A {
public static function who() {
echo "Я класс B\n";
}
}
B::call(); // Выведет: "Я класс A", а не "Я класс B"
🚩static
Работает динамически, учитывает класс, из которого вызван метод. Это полезно в наследовании.
class A {
public static function who() {
echo "Я класс A\n";
}
public static function call() {
static::who(); // Используем static вместо self
}
}
class B extends A {
public static function who() {
echo "Я класс B\n";
}
}
B::call(); // Выведет: "Я класс B"
Ставь 👍 и забирай 📚 Базу знаний🤔 В чем разница кэширования, кодирования, шифрования?
1. Кэширование:
- Сохранение данных для быстрого повторного доступа, уменьшая время загрузки и нагрузку на сервер.
- Пример: сохранение веб-страницы в браузере.
2. Кодирование:
- Преобразование данных в другой формат для удобства передачи или совместимости.
- Пример: Base64 для передачи бинарных данных через текстовые протоколы.
3. Шифрование:
- Защита данных с использованием ключей, чтобы их мог прочитать только авторизованный получатель.
- Пример: AES или RSA для передачи конфиденциальной информации.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Вже доступно! Дослідження Telegram за 2025 — головні інсайти року 
