PHP | Вопросы собесов
رفتن به کانال در Telegram
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv
نمایش بیشتر2 341
مشترکین
-224 ساعت
-57 روز
-2330 روز
آرشیو پست ها
🤔 Какие микросервисные паттерны знаешь?
Микросервисные паттерны представляют собой различные архитектурные подходы и методики, используемые для проектирования и реализации микросервисных систем.
🟠Паттерны разбиения на микросервисы
Decomposition by Business Capability (Декомпозиция по бизнес-возможностям). Разбиение системы на микросервисы на основе ключевых бизнес-функций, таких как выставление счетов, управление заказами и т.д. В интернет-магазине можно выделить микросервисы для управления продуктами, обработки заказов и управления пользователями.
Decomposition by Subdomain (Декомпозиция по субдоменам). Использование методологии Domain-Driven Design (DDD) для разделения на микросервисы по субдоменам. В банковской системе могут быть субдомены для обработки платежей, управления счетами и управления кредитами.
🟠Паттерны взаимодействия и координации
API Gateway (Шлюз API). Шлюз API действует как единая точка входа для всех клиентов, перенаправляя запросы к соответствующим микросервисам. Шлюз API может управлять аутентификацией, маршрутизацией запросов и агрегацией данных из нескольких микросервисов.
Service Mesh (Сервисная сетка). Инфраструктурный слой для управления сетевыми взаимодействиями между микросервисами, предоставляющий такие функции, как балансировка нагрузки, наблюдаемость и безопасность. Использование Istio или Linkerd для управления сетевыми взаимодействиями между микросервисами.
🟠Паттерны управления данными
Database per Service (База данных на микросервис). Каждый микросервис имеет свою собственную базу данных, что позволяет избежать проблем с общей базой данных. В системе электронной коммерции, микросервис для управления товарами может использовать MongoDB, а микросервис для обработки заказов — PostgreSQL.
Event Sourcing (Источники событий). Сохранение состояния системы в виде последовательности событий, что позволяет легко восстанавливать состояние системы. В системе управления заказами, каждое изменение статуса заказа может сохраняться как отдельное событие.
CQRS (Command Query Responsibility Segregation). Разделение модели данных на операции чтения и записи, что позволяет оптимизировать производительность и масштабируемость. Использование одной модели для обработки команд (записей) и другой модели для выполнения запросов (чтения).
🟠Паттерны устойчивости и отказоустойчивости
Circuit Breaker (Схема размыкания цепи). Предотвращение избыточных попыток связи с неработающими микросервисами путем размыкания цепи после определенного числа неудач. В микросервисе обработки платежей использование схемы размыкания цепи для предотвращения перегрузки системы при сбоях в обработке платежей.
Bulkhead (Переборка). Разделение ресурсов на изолированные группы для предотвращения каскадных сбоев. В системе управления заказами ограничение числа одновременных запросов к каждому микросервису для предотвращения перегрузки.
🟠Паттерны мониторинга и управления
Health Check (Проверка состояния). Регулярная проверка состояния микросервисов для обеспечения их доступности и работоспособности. Реализация эндпоинта /health для каждого микросервиса, который возвращает статус его состояния.
Centralized Logging (Централизованный логирование). Сбор и анализ логов из всех микросервисов в одном месте для упрощения мониторинга и отладки. Использование Elasticsearch, Logstash и Kibana (ELK Stack) для централизованного сбора и анализа логов.
Ставь 👍 и забирай 📚 Базу знаний
🤔 Как работает PHP?
PHP — это интерпретируемый язык серверной стороны, обрабатывающий запросы и возвращающий динамический HTML-контент клиенту. Сервер передает PHP-скрипты интерпретатору, который выполняет код и формирует ответ. PHP широко используется для разработки веб-приложений и интеграции с базами данных.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Узнайте подробнее о «Золотой визе» Греции!
«Золотая виза» Греции остаётся самой выгодной в Европе:
✅Минимальный порог инвестиций 250 000 евро
✅Без проживания
✅Инвестиции с высокой доходностью
✅Поможем разблокировать счета в Европе
Узнайте актуальную информацию о программе, получите консультацию экспертов
Запись вебинара доступна на сайте!
Смотреть
#реклама 16+
webinar.tranio.ru
О рекламодателе
🤔 Может ли абстрактный класс содержать в себе частный метод и почему?
Да, абстрактный класс в PHP может содержать частный (private) метод. Это возможно и иногда даже полезно по нескольким причинам.
🚩Почему это возможно и полезно
🟠Инкапсуляция
Частные методы помогают скрыть внутреннюю реализацию абстрактного класса, позволяя использовать эти методы только внутри самого абстрактного класса. Это полезно для организации и упрощения кода, когда некоторые вспомогательные методы не должны быть доступны вне класса или его потомков.
🟠Повторное использование кода
Частные методы могут использоваться для разбиения кода на логические блоки, что облегчает его повторное использование внутри класса. Это особенно полезно в больших абстрактных классах, где могут быть несколько сложных операций.
abstract class AbstractClass {
// Абстрактный метод, который должен быть реализован в подклассах
abstract protected function doSomething();
// Пример частного метода
private function helperMethod() {
// Внутренняя логика, недоступная подклассам
return "Helper method result";
}
// Публичный метод, использующий частный метод
public function performTask() {
echo $this->helperMethod();
$this->doSomething();
}
}
class ConcreteClass extends AbstractClass {
protected function doSomething() {
echo " Doing something in ConcreteClass";
}
}
$instance = new ConcreteClass();
$instance->performTask(); // Выведет: Helper method result Doing something in ConcreteClass
🚩Основные моменты
🟠Частные методы в абстрактных классах
Доступны только внутри самого абстрактного класса и не могут быть вызваны или переопределены в подклассах.
🟠Инкапсуляция и организация кода
Частные методы помогают скрыть детали реализации и улучшить структуру кода.
🟠Повторное использование
Вспомогательные методы могут быть использованы для выполнения повторяющихся задач внутри класса.
Ставь 👍 и забирай 📚 Базу знаний🤔 Как происходит процесс раскатки (разворачивания) деплоя?
Процесс раскатки включает сборку приложения, загрузку на сервер и настройку среды выполнения. Используются инструменты автоматизации, такие как Ansible, Jenkins или Docker, чтобы минимизировать ручной труд. Также применяются проверки на каждом этапе для предотвращения ошибок.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Попробуйте себя в мобильной разработке и аналитике
Студенты, готовы прокачивать навыки программирования вместе с опытными преподавателями Т-Банка? Узнайте, как создавать приложения, анализировать данные и автоматизировать рутинные задачи, на одном из онлайн-курсов Т-Образования. Для учебы нужно 2—3 часа в неделю.
Подайте заявку сейчас.
Подать заявку
#реклама 16+
education.tbank.ru
О рекламодателе
🤔 Зачем придумали анонимные классы?
Анонимные классы в 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
Ставь 👍 и забирай 📚 Базу знаний🤔 Что такое анонимные функции?
Анонимные функции — это функции, не имеющие имени, которые часто используются для коротких операций. Они объявляются в момент вызова и передаются как аргументы другим функциям. Например, в Python используются lambda, а в JavaScript — стрелочные функции.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Курс по frontend-разработке с junior до middle
Стань специалистом по frontend-разработке с помощью менторов. Оставь заявку!
Узнать больше
#реклама 16+
ykul.ru
О рекламодателе
🤔 Как реализована структура в python в сравнении с другими языками?
Структура данных может быть реализована несколькими способами, что делает язык гибким и мощным. Для сравнения с другими языками, такими как C++, Java, и PHP, рассмотрим основные способы создания структур данных.
🚩Python
Структуры данных обычно реализуются с использованием классов. Класс позволяет объединить данные и методы, которые работают с этими данными, в одну логическую единицу. Пример простой структуры данных с использованием класса:
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
point = Point(2, 3)
print(point.x, point.y) # Выведет: 2 3
🚩Namedtuple
Python также предоставляет специализированную структуру данных namedtuple из модуля collections, которая позволяет создавать неизменяемые объекты с именованными полями.
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
point = Point(2, 3)
print(point.x, point.y) # Выведет: 2 3
🚩С++
Структуры данных могут быть реализованы с использованием struct или классов. struct в C++ аналогичен классу, но по умолчанию имеет публичные члены.
struct Point {
int x;
int y;
};
Point point = {2, 3};
std::cout << point.x << " " << point.y; // Выведет: 2 3
🚩Java
Структуры данных реализуются исключительно с использованием классов, поскольку Java не имеет понятия структур как отдельной сущности.
public class Point {
public int x;
public int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public static void main(String[] args) {
Point point = new Point(2, 3);
System.out.println(point.x + " " + point.y); // Выведет: 2 3
}
}
🚩PHP
Структуры данных также реализуются с помощью классов. PHP 7 добавил поддержку типизированных свойств, что улучшает типизацию данных внутри классов.
class Point {
public int $x;
public int $y;
public function __construct(int $x, int $y) {
$this->x = $x;
$this->y = $y;
}
}
$point = new Point(2, 3);
echo $point->x . " " . $point->y; // Выведет: 2 3
🚩Основные различия
🟠Python
Использует классы и namedtuple для создания структур данных. Динамическая типизация и простота создания классов.
🟠C++
struct и классы, причем struct по умолчанию имеет публичные члены. Статическая типизация и высокая производительность.
🟠Java
Только классы для создания структур данных. Статическая типизация и строгая объектно-ориентированная модель.
🟠PHP
Использует классы для создания структур данных. Динамическая типизация с поддержкой типизированных свойств начиная с PHP 7.
Ставь 👍 и забирай 📚 Базу знаний🤔 Что такое агрегатные функции?
Агрегатные функции — это функции SQL, применяемые к набору данных для вычисления общего результата, например, SUM, AVG, MAX, MIN, COUNT. Они часто используются с группировкой данных с помощью оператора GROUP BY. Эти функции помогают анализировать данные, обобщая их характеристики.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
+9
Помощь в трудоустройстве в IT-сфере!
В России из-за дефицита айтишников запустили бесплатную программу по обучению IT-специалистов. Теперь любой желающий может попробовать себя в IT с полного нуля и начать обучение бесплатно!
Узнайте про дальнейшее трудоустройство в ведущие IT-компании для восполнения кадрового дефицита.
Для этого нужно:
- Перейти по ссылке
- Заполнить анкету и ответить на вопросы (занимает менее 3 минут)
- На основании ваших ответов вы сразу узнаете, подходит ли вам сфера IT и сможете ли вы в ней работать
Перейти на сайт
#реклама 16+
urban-university.ru
О рекламодателе
🤔 Какие магические методы у класса знаешь?
Есть множество магических методов (также известных как специальные методы или dunder-методы), которые позволяют классу иметь особое поведение. Эти методы начинаются и заканчиваются двумя подчеркиваниями (например,
__init__).
🚩Конструкторы и деструкторы
🟠`__init__(self, ...)`
Инициализатор объекта. Вызывается при создании нового экземпляра класса.
🟠`__del__(self)`
Деструктор. Вызывается перед уничтожением объекта.
class MyClass:
def __init__(self, value):
self.value = value
print(f"Object created with value: {self.value}")
def __del__(self):
print(f"Object with value {self.value} is being destroyed")
🚩Представление объекта
🟠`__str__(self)`
Возвращает строковое представление объекта для пользователей.
🟠`__repr__(self)`
Возвращает строковое представление объекта для разработчиков (более подробное).
class MyClass:
def __str__(self):
return "This is a user-friendly string"
def __repr__(self):
return "MyClass()"
🚩Арифметические операторы
🟠`__add__(self, other)`
Для оператора +.
`__sub__(self, other)`
Для оператора -.
`__mul__(self, other)`
Для оператора *.
`__truediv__(self, other)`
Для оператора /.
`__floordiv__(self, other)`
Для оператора //.
`__mod__(self, other)`
Для оператора %.
`__pow__(self, other)`
Для оператора **.
class MyNumber:
def __init__(self, value):
self.value = value
def __add__(self, other):
return MyNumber(self.value + other.value)
def __str__(self):
return str(self.value)
🚩Сравнительные операторы
__eq__(self, other)
Для оператора ==.
__ne__(self, other)
Для оператора !=.
__lt__(self, other)
Для оператора <.
__le__(self, other)
Для оператора <=.
__gt__(self, other)
Для оператора >.
__ge__(self, other)
Для оператора >=.
class MyNumber:
def __init__(self, value):
self.value = value
def __eq__(self, other):
return self.value == other.value
Ставь 👍 и забирай 📚 Базу знаний🤔 Чем HTTP первой версии отличается от второй?
HTTP/2 отличается поддержкой мультиплексирования, позволяющего одновременно передавать несколько запросов через одно соединение. Также введены сжатие заголовков и бинарный формат данных вместо текстового, что ускоряет обмен данными. Эти улучшения делают HTTP/2 более производительным по сравнению с HTTP/1.1.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
😎 База IT собеседований – твоё секретное оружие для успешного прохождения этапов отбора! Собеседования от реальных компаний: Сбер, Яндекс, ВТБ, Тинькофф, Озон, Wildberries и многие другие! 🏢 Мы собрали 230 собесов, чтобы ты мог подготовиться к интервью с уверенностью и успехом.
🎯 Присоединяйся к базе и прокачай свои шансы на успешное трудоустройство!
Гайд «Как собственнику управлять отделом маркетинга?»
Собственник бизнеса — это не тот, кто занимается всем, от стратегических решений до маркетинга. Это человек, который создает систему, где каждый элемент работает как одно целое. Маркетолог — это специалист, который погружён в данные, анализ, тестирование гипотез и построение стратегии. Считаете, что можно совмещать это с управлением компанией? Ошибка. Собственник должен направлять бизнес, а не тратить время на то, что могут сделать другие, лучше и эффективнее.
Наш гайд — инструкция, как выстроить отдел маркетинга, который будет работать автономно, результативно, а главное, без участия собственника. Это шаг к построению бизнеса, который работает слаженно, как система, а не как набор отдельных задач. Забирайте!
Скачать
#реклама 16+
cmonster.io
О рекламодателе
🤔 Чем отличается left join от right join?
Это типы соединений в SQL, которые используются для объединения строк из двух таблиц на основе условия соединения. Основное различие между ними заключается в том, какая таблица считается "основной" и будет возвращать все свои строки, даже если нет соответствующих строк в другой таблице.
🚩LEFT JOIN
Возвращает все строки из левой таблицы и соответствующие строки из правой таблицы. Если в правой таблице нет соответствующих строк, возвращаются NULL для всех столбцов из правой таблицы.
SELECT столбцы
FROM левая_таблица
LEFT JOIN правая_таблица
ON левая_таблица.столбец = правая_таблица.столбец;
Предположим, у нас есть две таблицы: employees (сотрудники) и departments (отделы).
SELECT employees.name, departments.department_name
FROM employees
LEFT JOIN departments
ON employees.department_id = departments.id;
🚩RIGHT JOIN
Возвращает все строки из правой таблицы и соответствующие строки из левой таблицы. Если в левой таблице нет соответствующих строк, возвращаются NULL для всех столбцов из левой таблицы.
SELECT столбцы
FROM левая_таблица
RIGHT JOIN правая_таблица
ON левая_таблица.столбец = правая_таблица.столбец;
Используя те же таблицы employees и departments:
SELECT employees.name, departments.department_name
FROM employees
RIGHT JOIN departments
ON employees.department_id = departments.id;
🚩Ключевые различия
🟠Фокусировка на таблице
Фокусируется на всех строках левой таблицы.
Фокусируется на всех строках правой таблицы.
🟠Отличие в результатах
Возвращает все строки из левой таблицы, даже если в правой таблице нет соответствующих строк.
Возвращает все строки из правой таблицы, даже если в левой таблице нет соответствующих строк.
🚩Визуальное представление
🟠LEFT JOIN
Включает все элементы из левой таблицы и только те элементы из правой таблицы, которые соответствуют условию соединения.
🟠RIGHT JOIN
Включает все элементы из правой таблицы и только те элементы из левой таблицы, которые соответствуют условию соединения.
Ставь 👍 и забирай 📚 Базу знаний🤔 Что такое рекурсия?
Рекурсия — это метод программирования, при котором функция вызывает саму себя для решения задачи. Каждый рекурсивный вызов работает с меньшей подзадачей, пока не достигает базового условия, после чего процесс возвращается обратно. Рекурсия удобна для задач, таких как обход деревьев или вычисление факториала.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Как выгодно инвестировать в недвижимость Грузии?
Хотите узнать? Ответьте на 4 вопроса, и получите бесплатный обзор рынка недвижимости Грузии на 2024-2025 годы.
Мы — независимое инвестиционное агентство с 7-летним опытом работы. Помогаем клиентам безопасно и прибыльно инвестировать, защищая их от рисков и обмана. 400+ клиентов уже заработали свыще $200 млн. с нашей помощью!
Предоставляем полный анализ любого объекта в Батуми.
Сопровождаем сделку на всех этапах.
Проверяем юридическую чистоту документов.
Узнайте, какие возможности вас ждут, начав с нашего бесплатного обзора рынка!
Получить предложение
#реклама
quiz.internationalinvestment.biz
О рекламодателе
🤔 Чем отличается команда composer install от composer update?
Команды
composer install и composer update в Composer выполняют разные задачи при управлении зависимостями проекта в PHP.
🚩`composer install`
🟠Установка зависимостей
composer install используется для установки всех зависимостей, перечисленных в файле composer.lock. Если файла composer.lock нет, он создается на основе composer.json и затем устанавливаются зависимости.
🟠Гарантия версий
Команда composer install гарантирует, что будут установлены точно те версии библиотек, которые указаны в composer.lock. Это особенно важно для воспроизводимости среды, например, в командной разработке или при деплое на сервер.
🟠Работа с новым проектом
Обычно используется, когда вы клонируете проект и хотите установить те же зависимости, что и у других разработчиков проекта.
composer install
🚩`composer update`
🟠Обновление зависимостей
composer update обновляет все зависимости до их последних версий, соответствующих ограничениям версий, указанным в composer.json. Обновляет файл composer.lock новыми версиями зависимостей.
🟠Рискованность
Использование composer update может привести к несовместимости или новым багам, так как могут быть установлены новые версии библиотек, которые могут не проходить ваши тесты или не быть совместимыми с вашим кодом.
🟠Управление конкретными зависимостями
Вы можете использовать composer update для обновления конкретных библиотек. Например, чтобы обновить только одну библиотеку: composer update vendor/package.
composer update
🚩Пример использования
🟠Когда использовать `composer install`
Когда новый разработчик присоединяется к проекту. При деплое приложения на сервер, чтобы обеспечить стабильность.
🟠Когда использовать `composer update`
Когда вам нужно обновить зависимости до последних версий для получения новых функций или исправлений. После изменения файла composer.json для добавления новых зависимостей или изменения версий существующих.
Ставь 👍 и забирай 📚 Базу знаний