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

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

前往频道在 Telegram

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

显示更多
2 344
订阅者
-224 小时
-57
-2430
帖子存档
Запустите рекламу в телеграм-каналах с Яндекс Директом Перфоманс-реклама теперь в телеграм-каналах ⚡ Яндекс Директ знает, как
Запустите рекламу в телеграм-каналах с Яндекс Директом Перфоманс-реклама теперь в телеграм-каналах ⚡ Яндекс Директ знает, как привлечь целевую аудиторию 💰👌 Попробовать #реклама yandex.ru О рекламодателе

🤔 Что есть иммутабельный объект? Это объект, состояние которого нельзя изменить после его создания. Это означает, что ни одно из свойств объекта не может быть изменено после того, как он был инициализирован. Всякий раз, когда необходимо изменить состояние иммутабельного объекта, вместо изменения текущего объекта создается новый объект с новым состоянием. 🚩ПлюсыБезопасность и предсказуемость Иммутабельные объекты безопасны для использования в многопоточных средах, так как их состояние не может быть изменено после создания, что предотвращает состояние гонки и другие проблемы, связанные с конкурентным доступом. ➕Простота понимания и отладки Так как состояние иммутабельного объекта не изменяется, код, использующий такие объекты, становится более предсказуемым и легче в отладке. ➕Облегчение управления состоянием Иммутабельные объекты упрощают управление состоянием в приложениях, так как можно быть уверенным, что состояние объекта не изменится неожиданным образом. ➕Безопасность при передаче данных Иммутабельные объекты могут безопасно передаваться между различными частями программы или даже между разными системами, так как нет риска, что их состояние будет изменено в процессе передачи.
# Строки являются иммутабельными
s = "hello"
# Любая операция, изменяющая строку, создает новую строку
s = s.upper()
print(s)  # Выведет "HELLO"

# Кортежи также являются иммутабельными
t = (1, 2, 3)
# Попытка изменить элемент кортежа вызовет ошибку
# t[0] = 0  # TypeError: 'tuple' object does not support item assignment
Класс String является иммутабельным. Всякий раз, когда выполняется операция, изменяющая строку, создается новый объект строки.
String s = "hello";
s = s.toUpperCase();
System.out.println(s);  // Выведет "HELLO"
🚩Для создания своих иммутабельных классов в Java можно сделать следующее Сделать класс финальным, чтобы предотвратить наследование. Все поля объявить приватными и финальными. Не предоставлять методов для изменения состояния (сеттеров). Обеспечить, чтобы изменяемые объекты, передаваемые в конструктор, были скопированы.
public final class ImmutablePerson {
    private final String name;
    private final int age;

    public ImmutablePerson(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}
🚩Для создания иммутабельных объектов необходимо соблюдать несколько правил: 🟠Приватные и финальные поля Все поля объекта должны быть объявлены как private и final. 🟠Отсутствие сеттеров Не должны быть предоставлены методы, которые позволяют изменять состояние объекта. 🟠Конструкторы Конструкторы должны устанавливать все поля объекта, инициализируя их значениями, которые не могут быть изменены после создания объекта. 🟠Защита изменяемых объектов Если объект содержит изменяемые поля, такие как массивы или коллекции, они должны быть скопированы или защищены от изменения извне. Ставь 👍 и забирай 📚 Базу знаний

🤔 Как работает связанность? 1. Высокая связность: - Элементы модуля выполняют тесно связанные задачи и фокусируются на одной цели, что делает модуль логически целостным. 2. Низкая связность: - Элементы модуля слабо связаны друг с другом, что может указывать на наличие несвязанных задач в одном модуле. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое SOLID? Это акроним, представляющий пять основных принципов ООП и проектирования, предложенных Робертом Мартином. Эти принципы направлены на повышение гибкости, читаемости, и поддерживаемости кода, а также упрощение его тестирования и рефакторинга. Вот они: 🟠S: Принцип единственной ответственности (Single Responsibility Principle) Каждый класс должен иметь только одну причину для изменения. Этот принцип подчеркивает, что класс должен заниматься только одной задачей или иметь одну область ответственности. 🟠O: Принцип открытости/закрытости (Open/Closed Principle) Сущности программы должны быть открыты для расширения, но закрыты для модификации. Это означает, что можно добавлять новые функциональности без изменения существующего кода. 🟠L: Принцип подстановки Барбары Лисков (Liskov Substitution Principle) Объекты в программе можно заменять их наследниками без изменения свойств программы. Это предполагает, что объекты подклассов должны действовать так же, как объекты суперкласса, от которых они произошли. 🟠I: Принцип разделения интерфейса (Interface Segregation Principle) Клиенты не должны зависеть от интерфейсов, которые они не используют. Этот принцип говорит о том, что лучше иметь много специализированных интерфейсов, чем один универсальный. 🟠D: Принцип инверсии зависимостей (Dependency Inversion Principle) Модули высокого уровня не должны зависеть от модулей низкого уровня. Обе категории должны зависеть от абстракций. Кроме того, абстракции не должны зависеть от деталей; детали должны зависеть от абстракций. Это способствует ослаблению связности компонентов системы. Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое связность? Это мера того, насколько хорошо элементы внутри одного модуля работают вместе. Высокая связность означает, что элементы модуля сосредоточены на выполнении одной задачи, что повышает модульность и упрощает тестирование. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое динамические переменные? Это переменные, имена которых определяются во время выполнения программы. Это позволяет создавать, модифицировать или обращаться к переменным динамически, основываясь на входных данных или условиях выполнения программы. Такой подход может быть полезен в сценариях, где структура данных неизвестна на момент написания кода или когда нужно генерировать переменные на лету в зависимости от контекста выполнения. 🚩PHP Имена переменных могут быть динамически сформированы с использованием переменных переменных
$name = "variable";
$$name = "Hello, World!";

echo $variable; // Выведет "Hello, World!"
Плюсы и минусы Гибкость позволяет создавать более адаптивные и динамические программы, которые могут работать с данными, структура которых заранее неизвестна. Удобство упрощает работу с большим количеством похожих переменных или свойств объекта без необходимости явного объявления каждой переменной. ➖Читаемость кода использование динамических переменных может сделать код менее понятным и труднее для отладки, поскольку не всегда ясно, какие переменные создаются и используются. ➖Управление памятью динамическое создание большого количества переменных может привести к неэффективному использованию памяти и снижению производительности. Ставь 👍 и забирай 📚 Базу знаний

🤔 В чем недостатки асинхронного шифрования? 1. Медлительность: - Алгоритмы асимметричного шифрования (RSA, ECC) работают медленнее, чем симметричные из-за сложных математических операций. 2. Больший размер ключей: - Для обеспечения сопоставимого уровня безопасности ключи асимметричного шифрования значительно больше, что увеличивает нагрузку на хранение и передачу данных. 3. Неэффективность для больших объемов данных: - Обычно используется для шифрования небольших данных (например, ключей симметричного шифрования), а не целых файлов или сообщений. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое вертикальное и масштабирование в БД? Это два метода повышения производительности и пропускной способности баз данных. 🚩Вертикальное масштабирование (Vertical Scaling) Вертикальное масштабирование, также известное как масштабирование "вверх" (scale up), предполагает улучшение производительности базы данных за счет увеличения ресурсов на одном сервере. Это может включать: Добавление большего объема оперативной памяти (RAM), Увеличение мощности процессора (CPU), Увеличение объема хранилища (SSD или HDD), Использование более быстрого сетевого оборудования 🟠Плюсы и минусыПростота реализации Легко выполнить, поскольку не требует изменения архитектуры приложения. ➕Единая точка управления Администрирование базы данных проще, так как все данные находятся на одном сервере. ➖Ограничения оборудования Есть пределы, до которых можно увеличивать ресурсы на одном сервере. ➖Единая точка отказа Если сервер выходит из строя, вся база данных становится недоступной. 🟠Пример Допустим, у вас есть сервер с 16 ГБ оперативной памяти и 4-ядерным процессором. Вертикальное масштабирование может включать замену его на сервер с 64 ГБ оперативной памяти и 16-ядерным процессором. Ставь 👍 и забирай 📚 Базу знаний

🤔 В чем преимущества и недостатки асинхронных вызовов? Преимущества: 1. Не блокируют выполнение других задач. 2. Улучшают производительность при работе с I/O операциями. Недостатки: 1. Усложняют отладку и написание кода. 2. Требуют обработки колбэков или использования async/await. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Зачем нужны паттерны проектирования? Это повторяемые решения типичных задач. Они помогают разработчикам создавать программы, которые легко поддерживать, расширять и модифицировать. Паттерны проектирования упрощают процесс разработки, обеспечивая проверенные способы решения распространенных проблем, что экономит время и силы разработчиков. 🚩Зачем они нужны 🟠Повторяемость и стандартность Паттерны обеспечивают повторяемость решений для часто возникающих задач, что снижает вероятность ошибок и улучшает читабельность кода. 🟠Улучшение коммуникации Использование общепринятых паттернов облегчает коммуникацию между разработчиками. Когда все понимают, что подразумевается под, например, «одиночкой» (singleton), это упрощает обсуждение архитектуры системы. 🟠Повышение качества кода Паттерны проектирования способствуют созданию более структурированного, гибкого и поддерживаемого кода. 🟠Экономия времени и ресурсов Паттерны позволяют не изобретать велосипед, а использовать проверенные решения, что ускоряет процесс разработки. 🚩Как они используются Паттерны проектирования делятся на несколько категорий, каждая из которых решает определенный тип задач: 🟠Порождающие паттерны Эти паттерны касаются создания объектов. Примеры: Singleton, Factory, Builder. 🟠Структурные паттерны Эти паттерны касаются построения структуры больших объектов. Примеры: Adapter, Composite, Decorator. 🟠Поведенческие паттерны Эти паттерны касаются взаимодействия и распределения обязанностей между объектами. Примеры: Observer, Strategy, Command.
class Singleton {
    private static $instance;

    private function __construct() {
        // Закрытый конструктор предотвращает создание объекта через new
    }

    public static function getInstance() {
        if (self::$instance === null) {
            self::$instance = new self();
        }
        return self::$instance;
    }

    public function someBusinessLogic() {
        // Некоторая бизнес-логика
    }
}

// Использование Singleton
$singleton = Singleton::getInstance();
$singleton->someBusinessLogic();
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что делают self и static self? указывает на текущий класс, где вызывается метод или свойство. Используется для доступа к статическим методам и свойствам. 1. static: поддерживает позднее статическое связывание, ссылаясь на класс, из которого был вызван метод. 2. Static полезен в случаях, когда нужно учитывать наследование, а self фиксируется на текущем классе. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое поведение copy on right.? Это метод оптимизации памяти, используемый для увеличения эффективности. Когда несколько процессов или потоки обращаются к одному и тому же ресурсу (например, области памяти), создаётся одна копия ресурса, которая используется совместно до момента изменения. Если процесс хочет изменить ресурс, создаётся его собственная копия, чтобы сохранить изоляцию изменений. Пример: массив передаётся функции. Пока он не изменяется, память общая. При изменении создаётся отдельная копия массива. Применяется в PHP для управления объектами, массивами и значениями, особенно после версии PHP 5. Ставь 👍 и забирай 📚 Базу знаний

🤔 Зачем нужны транзакции? 1. Транзакции обеспечивают выполнение операций как одного логического блока, гарантируя их атомарность, целостность, изоляцию и устойчивость (ACID). 2. Они помогают избежать частичного выполнения операций в случае сбоев, например, при записи данных. 3. Используются для обеспечения согласованности в сложных операциях. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

– Помощь с pet-проектом – Составление roadmap – Общая консультация – Проведение код-ревью и mock-собеседования – Помощь с тру
– Помощь с pet-проектом – Составление roadmap – Общая консультация – Проведение код-ревью и mock-собеседования – Помощь с трудоустройством Все это и многое другое может Ментор. Он обеспечит вам необходимый boost, ускорит и упростит вход в IT. 🔥 Здесь размещен список менторов, и многие из них предлагают бесплатную первую консультацию

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

🤔 В чем преимущество 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';
Ставь 👍 и забирай 📚 Базу знаний

🤔 Где делаем фильтрацию данных? 1. Фильтрация выполняется в SQL с помощью WHERE (на уровне строк) и HAVING (после агрегации). 2. Также можно фильтровать данные на уровне кода в языке программирования или в запросах ORM. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

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

🤔 Расскажи про фабрики Это шаблон проектирования, который относится к порождающим шаблонам и используется для создания объектов без необходимости указывать точный класс создаваемого объекта. Основная идея фабрики заключается в том, чтобы делегировать создание объектов специальному классу или методу, что упрощает управление кодом и позволяет добиться большей гибкости и расширяемости. 🚩Зачем нужны фабрики? 🟠Инкапсуляция процесса создания объектов Если создание объекта требует сложной логики или конфигурации, фабрика позволяет скрыть эту сложность от остальной части кода. 🟠Снижение зависимости от конкретных классов Вы используете интерфейсы или абстрактные классы вместо конкретных реализаций. Это упрощает замену одного типа объекта на другой. 🟠Гибкость и расширяемость Фабрики позволяют добавлять новые классы без изменения существующего кода. 🚩Типы фабрик 🟠Простая фабрика (Simple Factory) Это метод, который возвращает объект одного из нескольких возможных классов в зависимости от переданных параметров.
   class ShapeFactory {
       public static function createShape(string $type) {
           return match ($type) {
               'circle' => new Circle(),
               'square' => new Square(),
               default => throw new Exception("Unknown shape type"),
           };
       }
   }

   $circle = ShapeFactory::createShape('circle'); // Возвращает объект Circle
   
🟠Фабричный метод (Factory Method) В этом шаблоне создание объекта делегируется подклассам. Основной класс определяет интерфейс для создания объектов, но сам не знает, какие конкретные классы будут созданы.
   interface Logger {
       public function log(string $message);
   }

   class FileLogger implements Logger {
       public function log(string $message) {
           echo "Logging to a file: $message";
       }
   }

   class DatabaseLogger implements Logger {
       public function log(string $message) {
           echo "Logging to a database: $message";
       }
   }

   abstract class LoggerFactory {
       abstract public function createLogger(): Logger;
   }

   class FileLoggerFactory extends LoggerFactory {
       public function createLogger(): Logger {
           return new FileLogger();
       }
   }

   $factory = new FileLoggerFactory();
   $logger = $factory->createLogger();
   $logger->log("Hello World");
   
🟠Абстрактная фабрика (Abstract Factory) Этот шаблон используется для создания семейств взаимосвязанных объектов.
   interface GUIFactory {
       public function createButton(): Button;
       public function createCheckbox(): Checkbox;
   }

   class WindowsFactory implements GUIFactory {
       public function createButton(): Button {
           return new WindowsButton();
       }
       public function createCheckbox(): Checkbox {
           return new WindowsCheckbox();
       }
   }

   class MacOSFactory implements GUIFactory {
       public function createButton(): Button {
           return new MacOSButton();
       }
       public function createCheckbox(): Checkbox {
           return new MacOSCheckbox();
       }
   }

   $factory = new WindowsFactory();
   $button = $factory->createButton();
   $checkbox = $factory->createCheckbox();
   
🚩Как использовать фабрики? Если вы работаете с приложением, где объекты часто меняются, например, в зависимости от окружения (Windows, MacOS). Когда создание объектов сложное и требует дополнительной логики. Когда нужно уменьшить зависимость между модулями. Ставь 👍 и забирай 📚 Базу знаний

🤔 Что известно об агрегированных функциях? 1. Агрегированные функции в SQL выполняют операции над группами строк, возвращая одно значение. 2. Примеры: COUNT() для подсчёта строк, SUM() для суммы, AVG() для среднего, MAX() и MIN() для нахождения максимума и минимума. 3. Используются вместе с GROUP BY для анализа данных. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний