PHP | Вопросы собесов
2.3K subscribers
35 photos
1.54K links
Сайт: https://easyoffer.ru/
Все каналы: t.me/+xGeAw6ckJ4liYzQy

Контакт для рекламы: @sendme_ads
Download Telegram
🤔 Что такое CQRS?

Это архитектурный паттерн, который разделяет операции чтения и записи на разные модели данных. Это улучшает производительность, масштабируемость и упрощает поддержку.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 В чём суть абстрактного класса?

Абстрактный класс и в ООП в целом — это специальный тип класса, который не может быть инстанциирован напрямую. Это означает, что вы не можете создать объект абстрактного класса используя оператор new напрямую. Суть его заключается в том, чтобы служить основой для других классов, от которых будут создаваться объекты.

abstract class ТранспортноеCредство {
protected $скорость;

public function установитьСкорость($скорость) {
$this->скорость = $скорость;
}

abstract public function двигаться();
}

class Автомобиль extends ТранспортноеCредство {
public function двигаться() {
echo "Движется на скорости: " . $this->скорость . " км/ч";
}
}

// $транспорт = new ТранспортноеCредство(); // Ошибка: не может быть инстанциирован
$автомобиль = new Автомобиль();
$автомобиль->установитьСкорость(60);
$автомобиль->двигаться();


Ставь 👍 и забирай 📚 Базу знаний
🤔 В чем разница кэширования, кодирования, шифрования?

1. Кэширование:
- Сохранение данных для быстрого повторного доступа, уменьшая время загрузки и нагрузку на сервер.
- Пример: сохранение веб-страницы в браузере.
2. Кодирование:
- Преобразование данных в другой формат для удобства передачи или совместимости.
- Пример: Base64 для передачи бинарных данных через текстовые протоколы.
3. Шифрование:
- Защита данных с использованием ключей, чтобы их мог прочитать только авторизованный получатель.
- Пример: AES или RSA для передачи конфиденциальной информации.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 По какому принципу будешь выбирать архитектуру?

Это сложный и ответственный процесс, который зависит от множества факторов. Принятие правильного решения требует анализа требований, условий и ограничений проекта. Основные принципы, по которым выбирается архитектура, включают следующие:

🚩Принципы выбор

🟠Требования к проекту
Функциональные требования: Какие функции должно выполнять приложение?
Нефункциональные требования: Производительность, масштабируемость, надежность, безопасность и т.д.

🟠Объем и сложность проекта
Размер команды: Количество разработчиков, их опыт и навыки.
Сложность бизнес-логики: Насколько сложны процессы и операции, которые будет выполнять система.

🟠Масштабируемость и производительность
Нагрузка: Ожидаемое количество пользователей, объем данных и частота операций.
Горизонтальная и вертикальная масштабируемость: Возможность добавления новых серверов или улучшения существующих для обработки увеличивающейся нагрузки.

🟠Надежность и отказоустойчивость
Требования к доступности: Время безотказной работы и допустимые уровни простоя.
Механизмы резервирования и восстановления: Способы обеспечения бесперебойной работы при сбоях.

🟠Безопасность
Конфиденциальность данных: Как будет обеспечиваться защита данных от несанкционированного доступа.
Целостность данных: Меры для предотвращения и обнаружения изменений данных.

🟠Управляемость и поддержка
Обслуживаемость: Легкость управления, мониторинга и обновления системы.
Документирование: Наличие подробной документации для поддержки и развития.

🟠Интеграция с другими системами
Совместимость: Как система будет взаимодействовать с другими приложениями и сервисами.
Стандарты и протоколы: Используемые стандарты для обеспечения совместимости и взаимодействия.

🟠Стоимость и сроки
Бюджет: Стоимость разработки, развертывания и поддержки системы.
Временные ограничения: Сроки выполнения проекта и время на разработку.

🚩Примеры выбора

🟠Monolithic Architecture (Монолитная архитектура)

Небольшие или средние проекты с низкой сложностью.
Ограниченные требования к масштабируемости.
Ограниченные ресурсы и сроки разработки.
Простое веб-приложение для управления контентом (CMS), где все компоненты (база данных, интерфейс пользователя, логика приложения) развернуты на одном сервере.

🟠Microservices Architecture (Микросервисная архитектура)
Большие и сложные проекты с высокой нагрузкой.
Требуется высокая масштабируемость и отказоустойчивость.
Разделение разработки на независимые команды.
Электронная коммерция, где отдельные микросервисы управляют различными аспектами системы, такими как управление продуктами, корзина, платежи, учетные записи пользователей и т.д.

🟠Event-Driven Architecture (Событийно-ориентированная архитектура)
Системы, которые должны реагировать на события в реальном времени.
Высокая гибкость и адаптивность к изменяющимся условиям.
Финансовая торговая платформа, где события от биржи передаются и обрабатываются различными сервисами в реальном времени для выполнения сделок и анализа данных.

🟠Serverless Architecture (Безсерверная архитектура)
Приложения с переменной нагрузкой.
Минимизация операционных расходов и управление серверной инфраструктурой.

Ставь 👍 и забирай 📚 Базу знаний
🤔 Что такое агрегатные функции?

Агрегатные функции в SQL и других языках обработки данных (как PHP при работе с базами данных) выполняют вычисление набора значений и возвращают единственное значение. Примеры включают `SUM()`, `AVG()`, `MIN()`, `MAX()`, и `COUNT()`.?

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Что такое агрегатные функции?

Агрегатные функции в контексте управления базами данных и SQL — это специальные функции, которые выполняют вычисление над набором значений и возвращают единственный результат. Они часто используются для выполнения математических, статистических и других операций с данными в запросах для анализа и обобщения информации из множества записей.

🚩Основные агрегатные функции

🟠COUNT()
Подсчитывает количество элементов в наборе. Эта функция может использоваться для подсчета количества строк в таблице или количества строк, соответствующих определенным критериям.
Пример: SELECT COUNT(*) FROM users; — подсчитывает количество всех строк в таблице users.

🟠SUM()
Суммирует числовые значения столбца. Используется для получения общей суммы числовых данных.
Пример: SELECT SUM(salary) FROM employees; — считает общую сумму зарплат всех сотрудников.

🟠AVG()
Вычисляет среднее значение числовых данных. Эта функция полезна для нахождения среднего значения определенного столбца.
Пример: SELECT AVG(price) FROM products; — рассчитывает среднюю цену продукта.

🟠MIN() и MAX()
Возвращают минимальное и максимальное значения в столбце соответственно. Эти функции используются для нахождения наименьших и наибольших значений.
Пример: SELECT MIN(age), MAX(age) FROM users; — находит минимальный и максимальный возраст среди пользователей.

🟠GROUP_CONCAT() (в MySQL) / STRING_AGG() (в PostgreSQL
)
Склеивают строки из столбца, объединяя их в одну строку с разделителем. Пример (MySQL): SELECT GROUP_CONCAT(username SEPARATOR ', ') FROM users WHERE city = 'New York'; — объединяет имена пользователей из Нью-Йорка через запятую.

Ставь 👍 и забирай 📚 Базу знаний
🤔 Чем отличается BacktimeTable от Backtime?

1. BacktimeTable может быть структурой данных или таблицей, используемой для хранения промежуточных результатов в задаче обратного отсчёта или обработки данных.
2. Backtime часто означает сам процесс обратного отсчёта или времени ожидания.
3. Различие зависит от контекста: таблица — для хранения, backtime — для логики.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Чем HTTP первой версии отличается от второй?

HTTP/1.1 и HTTP/2 — это две версии протокола передачи гипертекста (HTTP), которые имеют ряд ключевых отличий. Каждая версия протокола внесла значительные улучшения в эффективность, производительность и возможности веб-коммуникации.

🚩HTTP/1.1


🟠Постоянные соединения
По умолчанию соединения остаются открытыми после завершения запроса, что позволяет отправлять несколько запросов по одному соединению и уменьшает нагрузку на сеть и серверы.

🟠Кэширование
Введены более сложные механизмы кэширования с использованием заголовков ETag, If-Modified-Since, что улучшает управление кэшем и эффективность передачи данных.

🟠Коды состояния HTTP
Добавлены новые коды состояния для более точного представления различных сценариев веб-взаимодействия.

🟠Чанковая передача данных
Поддержка передачи данных в частях (chunks), что позволяет динамически генерировать содержимое и отправлять его по мере готовности.

🟠Хосты и виртуальные хосты
Поддержка заголовка Host, позволяющего размещать несколько доменов на одном IP-адресе.

🚩HTTP/2

🟠Бинарный протокол
В отличие от текстового HTTP/1.1, HTTP/2 использует бинарный формат, который упрощает и ускоряет его разбор.

🟠Мультиплексирование
Одно соединение теперь может одновременно передавать несколько потоков данных, что устраняет проблему "заголовочного блока" и значительно повышает производительность.

🟠Управление потоками
HTTP/2 позволяет приоритизировать запросы, что улучшает загрузку ресурсов на странице.

🟠Сжатие заголовков
В HTTP/2 используется сжатие заголовков HPACK для уменьшения накладных расходов, связанных с метаданными HTTP.

🟠Server Push
Серверы могут активно отправлять ресурсы клиенту до того, как клиент явно запросит их, что улучшает время загрузки страниц.

Ставь 👍 и забирай 📚 Базу знаний
👍2
🤔 Как работает динамическая типизация?

Динамическая типизация позволяет переменной менять тип во время выполнения программы. Тип определяется автоматически на основе присвоенного значения.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Какое отличие у протоколов tcp и udp?

Это два основных транспортных протокола в интернете. Они имеют разные характеристики и используются для различных целей.

🚩Основные отличия

🟠Надежность
TCP: Обеспечивает надежную передачу данных. Он использует механизмы установления соединения, подтверждение получения (ACK), контроль потерь пакетов, повторную передачу потерянных пакетов и контроль потока. Это гарантирует, что данные будут доставлены корректно и в правильном порядке.
UDP: Не обеспечивает надежную передачу данных. Нет подтверждений получения, нет повторной передачи потерянных пакетов и нет контроля потока. Это делает передачу менее надежной, но более быстрой и с меньшими накладными расходами.

🟠Установление соединения
TCP: Перед началом передачи данных устанавливается соединение с помощью процедуры "трехстороннего рукопожатия" (three-way handshake). Это означает, что обе стороны сначала обмениваются сигналами SYN и ACK для установления соединения.
UDP: Не требует установления соединения. Пакеты (датаграммы) просто отправляются к получателю без предварительного установления соединения.

🟠Порядок доставки
TCP: Обеспечивает доставку данных в правильном порядке. Если пакеты приходят в неправильном порядке, TCP собирает их в правильном порядке перед передачей приложению.
UDP: Не гарантирует порядок доставки. Пакеты могут приходить в произвольном порядке, и приложение должно обрабатывать их соответствующим образом, если это необходимо.

🟠Пропускная способность и задержки
TCP: Из-за механизмов контроля потока и подтверждений имеет большие накладные расходы и, следовательно, может быть медленнее. Это особенно заметно на сетях с высокой задержкой или потерей пакетов.
UDP: Из-за отсутствия контроля потока и подтверждений имеет меньшие накладные расходы, что может привести к меньшим задержкам и большей пропускной способности. Подходит для приложений, где важна скорость, а не надежность.

🟠Применение
TCP: Используется для приложений, где важна надежность и порядок передачи данных, таких как веб-браузеры (HTTP/HTTPS), электронная почта (SMTP, IMAP, POP3), файловые передачи (FTP), удаленный доступ (SSH).
UDP: Используется для приложений, где важна скорость и где потеря некоторых пакетов не критична, таких как потоковое видео и аудио (VoIP, IPTV), онлайн-игры, службы доменных имен (DNS).

🚩Примеры использования

TCP
HTTP/HTTPS: Веб-серфинг
SMTP: Отправка электронной почты
IMAP/POP3: Получение электронной почты
FTP: Передача файлов
SSH: Безопасный удаленный доступ


UDP
DNS: Запросы доменных имен
VoIP: Передача голоса через IP
IPTV: Потоковое видео
Онлайн-игры: Быстрая передача данных игровой логики
NTP: Синхронизация времени


Ставь 👍 и забирай 📚 Базу знаний
🤔 Есть ли какое-то различие между одинарными и двойными кавычками?

- В большинстве языков программирования разницы нет.
- В PHP двойные кавычки позволяют интерполировать переменные, а одинарные – нет.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Что такое составной индекс?

Составной индекс (Composite Index) – это индекс, который создаётся сразу на несколько колонок таблицы.

🚩Как работает составной индекс?

🟠Пример без индекса (медленный поиск)
Допустим, у нас есть таблица orders
CREATE TABLE orders (
id INT PRIMARY KEY,
user_id INT,
status VARCHAR(50),
created_at DATETIME
);


И мы выполняем поиск по user_id и status
SELECT * FROM orders WHERE user_id = 5 AND status = 'paid';


Создаём составной индекс (ускоряем поиск)
CREATE INDEX idx_user_status ON orders(user_id, status);


Как SQL использует составной индекс? (Правило слева направо)
Важный момент: составной индекс работает слева направо.
SELECT * FROM orders WHERE user_id = 5 AND status = 'paid'; -- ✅ Использует индекс
SELECT * FROM orders WHERE user_id = 5; -- ✅ Использует индекс (user_id - первый в индексе)


НЕ работает
SELECT * FROM orders WHERE status = 'paid'; -- ❌ Индекс не используется (user_id пропущен)


Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 В чем отличие адаптера от декоратора

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

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍3
🤔 Какие протоколы ты знаешь?

Протоколы в сетевых системах обеспечивают правила передачи данных. Они работают на разных уровнях модели OSI и TCP/IP. Вот основные виды протоколов:

🚩Основные виды протоколов

🟠Физический и канальный уровни
Ethernet: Передача данных по проводным сетям.
Wi-Fi (IEEE 802.11): Беспроводная передача данных.
PPP (Point-to-Point Protocol): Соединение между двумя узлами.
HDLC (High-Level Data Link Control): Передача данных на канальном уровне.

🟠Сетевой уровень
IP (Internet Protocol): Основной протокол для передачи данных в интернете (IPv4 и IPv6).
ICMP (Internet Control Message Protocol): Передача сообщений об ошибках и контроля.

🟠Транспортный уровень
TCP (Transmission Control Protocol): Надежная передача данных.
UDP (User Datagram Protocol): Быстрая, но ненадежная передача данных.

🟠Сеансовый и представительный уровни
SSL/TLS (Secure Sockets Layer / Transport Layer Security): Обеспечение безопасности передачи данных.
NetBIOS: Работа сетевых приложений в локальных сетях.

🟠Прикладной уровень
HTTP/HTTPS (HyperText Transfer Protocol / Secure): Передача веб-страниц.
FTP (File Transfer Protocol): Передача файлов.
SMTP (Simple Mail Transfer Protocol): Передача электронной почты.
POP3/IMAP: Получение электронной почты.
DNS (Domain Name System): Преобразование доменных имен в IP-адреса.
SSH (Secure Shell): Безопасное удаленное управление серверами.
SNMP (Simple Network Management Protocol): Управление сетевыми устройствами.
LDAP (Lightweight Directory Access Protocol): Доступ и управление каталогами.
DHCP (Dynamic Host Configuration Protocol): Динамическое назначение IP-адресов.

🟠Специализированные протоколы
VoIP (Voice over IP): Передача голосовых данных (SIP, RTP).
MQTT (Message Queuing Telemetry Transport): Обмен сообщениями в IoT.
CoAP (Constrained Application Protocol): Работа с ограниченными устройствами в IoT.

Ставь 👍 и забирай 📚 Базу знаний
Завтра последний день!

Успей купить пожизненный easyoffer PRO - по цене 1 года

Покупаешь один раз — пользуешься всю жизнь.

👉 Акция до 31 марта: https://easyoffer.ru/pro
🤔 Какие типы объединений есть в таблицах?

Типы объединений: INNER JOIN (только совпадающие строки), LEFT JOIN (все строки из левой таблицы), RIGHT JOIN (все строки из правой таблицы), FULL JOIN (объединение всех строк обеих таблиц), CROSS JOIN (декартово произведение), SELF JOIN (объединение таблицы с самой собой).


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Зачем использовать Rest , если есть Soup?

SOAP (Simple Object Access Protocol) и REST (Representational State Transfer) – это два подхода для обмена данными между клиентом и сервером (API).

SOAP появился раньше, но REST стал более популярным, потому что он проще, быстрее и гибче.

🚩Почему REST лучше в большинстве случаев?

🟠REST проще и легче
SOAP использует сложные XML-сообщения с заголовками и схемами, что делает запросы более громоздкими.
REST использует JSON или XML, что делает его быстрее и удобнее.
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<getUser>
<id>123</id>
</getUser>
</soap:Body>
</soap:Envelope>


Пример запроса в REST (короче и проще)
GET /users/123 HTTP/1.1
Host: api.example.com


🟠REST быстрее и легче для веба
SOAP требует больше ресурсов, потому что использует XML + сложные заголовки.
REST работает по HTTP и использует JSON, который легче парсится в браузере и мобильных приложениях.

🟠REST лучше интегрируется с веб-технологиями
SOAP требует специальных библиотек (WSDL, WS-Security).
REST использует обычные HTTP-методы:
- GET – получить данные
- POST – создать
- PUT – обновить
- DELETE – удалить

🟠REST масштабируемый и кроссплатформенный
REST легко работает с JavaScript, мобильными приложениями (iOS, Android), браузерами и фронтендом.
SOAP чаще используется в корпоративных системах (банки, госструктуры), но хуже подходит для современных веб-приложений.

Ставь 👍 и забирай 📚 Базу знаний
👍2
🤔 Какую проблему решают фабрика и фабричный метод?

Фабрика и фабричный метод решают проблему создания объектов в программе, отделяя процесс их создания от бизнес-логики. Это помогает сделать код более гибким, давая возможность изменять способ создания объектов без изменения основного кода. Эти паттерны используются для улучшения тестируемости, расширяемости и поддерживаемости программы.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Что есть кроме микросервисной и монолитной архитектуры?

Помимо монолитной и микросервисной архитектуры, существуют другие подходы к построению программных систем. Каждый из них решает свои задачи и подходит для разных типов проектов.

🚩Service-Oriented Architecture (SOA) – Сервисно-ориентированная архитектура

- Это переходный вариант между монолитом и микросервисами.
- В SOA приложение делится на крупные сервисы (например, "Платежи", "Пользователи", "Заказы").
- Все сервисы взаимодействуют через ESB (Enterprise Service Bus) – специальный слой для связи между сервисами.
Для крупных корпоративных систем, где много интеграций.
Когда нужна централизованная логика взаимодействия сервисов.

🚩Serverless (Бессерверная архитектура)

- Код выполняется в облаке, а не на собственных серверах.
- Программист пишет функции (FaaS – Function as a Service), которые выполняются по запросу.
- Серверы управляются автоматически (AWS Lambda, Google Cloud Functions).
Когда нужно автоматическое масштабирование (например, обработка миллионов событий).
Для маленьких ивентовых задач (обработка файлов, уведомления, API-эндпоинты).

🚩Event-Driven Architecture (EDA) – Событийно-ориентированная архитектура

- Компоненты системы не вызывают друг друга напрямую, а общаются через события.
- Используется*message broker (Kafka, RabbitMQ, Redis Pub/Sub) для передачи данных.
В нагруженных системах, где много событий (банковские системы, биржи).
Когда нужна гибкость и асинхронность.

Ставь 👍 и забирай 📚 Базу знаний
👍3
🤔 Реализация Fibonacci с рекурсией или без?

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


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍2
🤔 Что такое агрегат?

Агрегат – это термин, часто используемый в области баз данных и программирования, который обозначает способ группировки данных для выполнения различных операций, таких как суммирование, подсчёт, нахождение среднего значения и другие. В реляционных базах данных агрегаты применяются для выполнения агрегатных функций, таких как SUM(), COUNT(), AVG(), MAX(), MIN() и других.

🚩Зачем нужны?

🟠Анализ данных:
Агрегаты позволяют получить сводные данные, которые помогают анализировать и понимать большие наборы данных. Например, можно узнать общее количество продаж, среднюю стоимость заказа, максимальную и минимальную зарплату сотрудников и т.д.

🟠Оптимизация запросов:
Использование агрегатных функций позволяет выполнять сложные вычисления на сервере базы данных, что экономит время и ресурсы по сравнению с выполнением этих операций на клиентской стороне.

🚩Примеры использования агрегатных функций:

Суммирование (SUM):
-- Получение общей суммы всех заказов
SELECT SUM(total_amount) AS total_sales
FROM orders;


Подсчёт (COUNT):
-- Подсчёт общего количества заказов
SELECT COUNT(*) AS total_orders
FROM orders;


Среднее значение (AVG):
-- Нахождение средней суммы заказа
SELECT AVG(total_amount) AS average_order_value
FROM orders;


Максимальное значение (MAX):
-- Нахождение максимальной суммы заказа
SELECT MAX(total_amount) AS max_order_value
FROM orders;


Минимальное значение (MIN):
-- Нахождение минимальной суммы заказа
SELECT MIN(total_amount) AS min_order_value
FROM orders;


🚩 Группировка данных с использованием GROUP BY:

Для более сложных запросов можно использовать агрегатные функции вместе с оператором GROUP BY, чтобы группировать данные по определённому критерию. В этом запросе результаты будут сгруппированы по customer_id, и для каждого клиента будет рассчитана общая сумма заказов.
-- Получение общей суммы заказов для каждого клиента
SELECT customer_id, SUM(total_amount) AS total_sales_per_customer
FROM orders
GROUP BY customer_id;


Ставь 👍 и забирай 📚 Базу знаний
👍2