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

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

رفتن به کانال در Telegram

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

نمایش بیشتر
2 343
مشترکین
-324 ساعت
-77 روز
-2830 روز
آرشیو پست ها
Бесплатный онлайн-курс по дизайну от студии "Логомашина" Попробуй 2 самые востребованные профессии в дизайне и осваивай ту, ч
Бесплатный онлайн-курс по дизайну от студии "Логомашина" Попробуй 2 самые востребованные профессии в дизайне и осваивай ту, что по душе! Получи пошаговый план развития, сделай кейс в портфолио и узнай, как получать заказы Спикеры — практикующие дизайнеры с многолетним опытом Записывайся, количество мест ограничено! Зарегистрироваться #реклама 16+ study.logomachine.ru О рекламодателе

🤔 Что такое транзакции? Это последовательности операций с базой данных, которые рассматриваются как единое целое. Они обеспечивают целостность данных, гарантируя, что либо все операции в транзакции выполнены успешно, либо никакие изменения не будут применены, если произошла ошибка. 🟠Atomicity (Атомарность) Гарантирует, что все операции в рамках транзакции будут выполнены полностью или не будут выполнены вовсе. Если любая из операций внутри транзакции не удалась, все изменения откатываются.
BEGIN TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;
COMMIT;    
🟠Consistency (Согласованность) Обеспечивает перевод базы данных из одного согласованного состояния в другое. Транзакции должны оставлять базу данных в корректном состоянии, удовлетворяющем всем правилам и ограничениям. 🟠Isolation (Изолированность) Обеспечивает изолированность транзакций друг от друга. Это означает, что результаты промежуточных операций одной транзакции невидимы для других транзакций до завершения первой транзакции. 🟠Durability (Долговечность) Гарантирует, что изменения, внесённые успешно завершённой транзакцией, будут сохранены в базе данных даже в случае сбоя системы. 🚩Использования транзакций 🟠Перевод денег между счетами Необходимо убедиться, что обе операции (списание и зачисление) выполнены успешно, чтобы избежать ситуации, когда деньги списаны, но не зачислены.
BEGIN TRANSACTION;

UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;

COMMIT; -- Если обе операции прошли успешно
-- ROLLBACK; -- Если произошла ошибка    
🟠Создание заказа в интернет-магазине Важно убедиться, что все связанные операции (добавление записи о заказе, обновление статуса товаров, запись данных о платеже) выполнены успешно.
BEGIN TRANSACTION;

INSERT INTO orders (user_id, order_date) VALUES (1, NOW());
UPDATE products SET stock = stock - 1 WHERE product_id = 101;
INSERT INTO payments (order_id, amount) VALUES (LAST_INSERT_ID(), 99.99);

COMMIT; -- Если все операции прошли успешно
-- ROLLBACK; -- Если произошла ошибка
Ставь 👍 и забирай 📚 Базу знаний

Современное образование в Moscow Business School Moscow Business School — это учебный центр, в котором каждый может повысить профессиональные навыки. С 2007 года мы обучаем по авторским курсам и программам МВА, создаем тренинги и проводим тимбилдинги ⚡ О НАС:⚡ --> Ведущая бизнес-школа России с более чем 15-летним опытом --> Источник новых знаний, смыслов и компетенций --> 800+ образовательных программ обучения --> Современные онлайн и оффлайн курсы --> Команда из 700+ управленцев, менеджеров, тренеров и практиков --> 40+ программ MBA и Executive MBA с уникальной российской экспертизой --> ТОПовые направления повышения квалификации --> 20 000 слушателей ежегодно Узнать больше #реклама mbschool.ru О рекламодателе

🤔 Почему Symfony, а не Yii или Laravel? Symfony выбирают, когда важны: - Гибкость и масштабируемость — компонентная архитектура, можно использовать частями. - Стандарты и зрелость — строгий подход, хорош для enterprise-проектов. - Расширяемость — легко писать свои бандлы, сервисы, внедрение зависимостей по PSR. - Инфраструктура — используется во многих крупных фреймворках (в том числе в Laravel, Drupal). Yii быстрее в старте, Laravel проще для новичков, но Symfony более настроен на долгосрочные, стабильные проекты. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Чем отличается stop от мока? В ООП и, в частности, в тестировании, существуют разные методы и инструменты для создания поддельных объектов, которые используются для замены реальных зависимостей в тестах. Два из таких методов — это stubs (стабы) и mocks (моки). Они имеют разные цели и используются по-разному. 🚩Stubs (Стабы) Это простые поддельные объекты, которые возвращают заранее заданные данные, когда их методы вызываются. Они не проверяют, как они были вызваны, а лишь предоставляют фиксированные ответы, необходимые для теста. Цель: Возврат фиксированных значений. Использование: Подставляют зависимости, чтобы изолировать тестируемый код от внешних влияний. Проверка: Не проверяют взаимодействия с тестируемым кодом.
class User {
    private $database;

    public function __construct(Database $database) {
        $this->database = $database;
    }

    public function getUserName($userId) {
        return $this->database->fetchUserName($userId);
    }
}

class DatabaseStub {
    public function fetchUserName($userId) {
        return 'John Doe';
    }
}

$databaseStub = new DatabaseStub();
$user = new User($databaseStub);
echo $user->getUserName(1); // Выведет "John Doe"
🚩Mocks (Моки) Это поддельные объекты, которые не только возвращают фиксированные данные, но и проверяют, как они были вызваны. Моки позволяют задавать ожидания относительно вызовов их методов и проверяют, что эти ожидания выполнены во время выполнения теста. Цель: Проверка взаимодействий и поведения. Использование: Подменяют зависимости и проверяют, как тестируемый код взаимодействует с ними. Проверка: Проверяют вызовы методов, аргументы вызовов и количество вызовов.
use PHPUnit\Framework\TestCase;

class UserTest extends TestCase {
    public function testGetUserName() {
        // Создаем мок объекта Database
        $databaseMock = $this->createMock(Database::class);

        // Задаем ожидания: метод fetchUserName должен быть вызван с аргументом 1 и вернуть 'John Doe'
        $databaseMock->expects($this->once())
                     ->method('fetchUserName')
                     ->with($this->equalTo(1))
                     ->willReturn('John Doe');

        $user = new User($databaseMock);
        $this->assertEquals('John Doe', $user->getUserName(1));
    }
}
🚩Основные отличия 🟠Назначение Стабы: Возвращают заранее заданные данные, изолируя тестируемый код от реальных зависимостей. Моки: Проверяют взаимодействия и поведение тестируемого кода с его зависимостями. 🟠Фокус Стабы: Сфокусированы на данных, которые возвращаются. Моки: Сфокусированы на том, как методы были вызваны, с какими аргументами и сколько раз. 🟠Простота Стабы: Просты в реализации и не проверяют взаимодействия. Моки: Более сложные, так как включают проверки взаимодействий и поведения. Ставь 👍 и забирай 📚 Базу знаний

Повышаем надежность управления кластерами Apache Ignite 10 июня в 11:00 приглашаем на вебинар «Повышаем надежность управления
Повышаем надежность управления кластерами Apache Ignite 10 июня в 11:00 приглашаем на вебинар «Повышаем надежность управления кластерами Apache Ignite и Platform V DataGrid с помощью Grid Center». Platform V Grid Center — инструмент для администрирования IMDG кластеров Apache Ignite и Platform V DataGrid — резидентных СУБД для работы с данными в режиме реального времени. Недавно получил крупные новые доработки, о них владелец продукта расскажет на встрече. Кому полезно? Всем, кто использует кластеры Apache Ignite или Platform V DataGrid, а также тем, кто только присматривается к ним. Регистрация по ссылке Ждем встречи с вами! Зарегистрироваться #реклама 16+ platformv.sbertech.ru О рекламодателе

🤔 Какая разница между self и this? self в PHP используется для обращения к текущему классу, включая статические методы и свойства, тогда как this ссылается на конкретный экземпляр класса. self подходит для работы с общими (статическими) членами класса, а this — для доступа к данным объекта. self не может использоваться для динамических данных объекта, в отличие от this. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Крупнейший университет искусственного интеллекта Учим использовать ChatGPT в профессиональных целях, создавать нейро-сотрудни
Крупнейший университет искусственного интеллекта Учим использовать ChatGPT в профессиональных целях, создавать нейро-сотрудников и зарабатывать на искусственном интеллекте. ✨ 8 000+ студентов со всего мира ✨ 600+ AI-проектов, созданных студентами ✨ Сборная Университета — победители крупнейших AI-хакатонов России ✨ Стажировки в крупнейших компаниях России (РЖД, Ростелеком, РУДН, Совкомбанк, Самолет и другие) ✨ Трудоустраиваем выпускников в крупнейшие компании (Яндекс, ВТБ, Сбербанк, Роскосмос и другие) Будем рады видеть тебя в наших рядах! Узнать больше #реклама 16+ neural-university.ru О рекламодателе

🤔 Что такое Rest? Это архитектурный стиль для создания веб-сервисов, который был предложен Роем Филдингом в его докторской диссертации в 2000 году. В его основе лежит принцип использования стандартных HTTP методов (GET, POST, PUT, DELETE и др.) для взаимодействия с ресурсами, представленными в виде URL. 🚩Основные принципы 🟠Адресуемость (Addressability) Каждому ресурсу (например, пользователю, товару) соответствует уникальный URL. 🟠Использование стандартных методов HTTP Использует методы HTTP для выполнения операций с ресурсами. GET: Получение данных. POST: Создание нового ресурса. PUT: Обновление существующего ресурса. DELETE: Удаление ресурса. 🟠Статусность (Statelessness) Каждый запрос к серверу должен содержать всю необходимую информацию для его обработки. Сервер не хранит информацию о состоянии клиента между запросами. 🟠Кэширование (Caching) Ответы от сервера могут кэшироваться, чтобы улучшить производительность и снизить нагрузку на сервер. 🟠Единообразие интерфейса (Uniform Interface) Все взаимодействия между клиентом и сервером стандартизированы, что упрощает интеграцию и взаимодействие между системами. 🚩Примеры 🟠Получение списка пользователей (GET) Запрос
GET /users
Ответ
[
  {"id": 1, "name": "Alice"},
  {"id": 2, "name": "Bob"}
]
🟠Получение информации о конкретном пользователе (GET) Запрос
GET /users/1
Ответ
{
  "id": 1,
  "name": "Alice"
}
🟠Создание нового пользователя (POST) Запрос
POST /users
Content-Type: application/json

{
  "name": "Charlie"
}
Ответ (Успешное создание)
{
  "id": 3,
  "name": "Charlie"
}
🟠Обновление информации о пользователе (PUT) Запрос
PUT /users/1
Content-Type: application/json

{
  "name": "Alice Updated"
}
Ответ
{
  "id": 1,
  "name": "Alice Updated"
}
🟠Удаление пользователя (DELETE) Запрос
DELETE /users/1
Ответ (Успешное удаление)
{
  "message": "User deleted"
}
Ставь 👍 и забирай 📚 Базу знаний

Получи грант на обучение в Центральном университете Прояви себя, получи грант до 2,8 млн на обучение ИТ и бизнесу в вузе. Для школьников 10-х и 11-х классов, СПО. Подать заявку #реклама apply.centraluniversity.ru О рекламодателе

🤔 Что такое подготовка запросов? Это запросы, которые компилируются сервером перед выполнением. 1. Они защищают от SQL-инъекций, так как параметры передаются отдельно от запроса. 2. Улучшают производительность, так как один запрос можно выполнить несколько раз с разными данными. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Получи грант до 1,2 млн руб. на обучение в магистратуре 4 офлайн программы, онлайн-магистратура по ML. Гранты до 1,2 млн руб.
Получи грант до 1,2 млн руб. на обучение в магистратуре 4 офлайн программы, онлайн-магистратура по ML. Гранты до 1,2 млн руб. Стажировки, диплом гос. образца и фокус на твоей карьере в ЦУ Подать заявку #реклама 16+ apply.centraluniversity.ru О рекламодателе

🤔 Как работает зацепление? Зацепление (coupling) — это степень зависимости одного модуля от другого. В PHP (и вообще в разработке) мы стремимся уменьшить зацепление, чтобы код был гибким, удобным для тестирования и сопровождения. 🚩Виды зацепления 🟠Слабое зацепление (Loose Coupling) – Хорошо - Модули мало зависят друг от друга. - Можно заменять части системы без изменений в других частях. - Используется интерфейсы, DI (Dependency Injection), события.
interface Logger {
    public function log($message);
}

class FileLogger implements Logger {
    public function log($message) {
        echo "Запись в файл: $message\n";
    }
}

class DatabaseLogger implements Logger {
    public function log($message) {
        echo "Запись в базу: $message\n";
    }
}

class User {
    private $logger;

    public function __construct(Logger $logger) {
        $this->logger = $logger;
    }

    public function register($name) {
        echo "Регистрация пользователя: $name\n";
        $this->logger->log("Пользователь $name зарегистрирован.");
    }
}

// Можно легко менять логгер без изменения класса User
$user = new User(new FileLogger());
$user->register("Иван");

$user = new User(new DatabaseLogger());
$user->register("Петр");
🟠Жёсткое зацепление (Tight Coupling) – Плохо - Модули сильно связаны, нельзя поменять один без изменения другого. - Код трудно тестировать и расширять. - Используется жёсткая привязка классов внутри других классов.
class FileLogger {
    public function log($message) {
        echo "Запись в файл: $message\n";
    }
}

class User {
    private $logger;

    public function __construct() {
        $this->logger = new FileLogger(); // Жесткая зависимость!
    }

    public function register($name) {
        echo "Регистрация пользователя: $name\n";
        $this->logger->log("Пользователь $name зарегистрирован.");
    }
}

// User всегда использует FileLogger, его нельзя легко заменить
$user = new User();
$user->register("Иван");
Ставь 👍 и забирай 📚 Базу знаний

Почему вы не используете Битрикс24 CRM с AI? 1- не знал 2- забыл Рассказываем и напоминаем! ✅Битрикс24 CRM с AI помогает увел
+5
Почему вы не используете Битрикс24 CRM с AI? 1- не знал 2- забыл Рассказываем и напоминаем! ✅Битрикс24 CRM с AI помогает увеличивать продажи, работать с постоянными клиентами и сохранять все важные данные. AI-помощник CoPilot внутри сервиса расшифрует телефонные разговоры и автоматически заполнит карточки клиента в CRM. Битрикс24 можно использовать бесплатно для всех команд, независимо от их размера. ⚡Не тратьте время на рутину. Узнать больше #реклама 16+ bitrix24.ru О рекламодателе

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

Профессия «Аналитик данных». Рассрочка 0% Освойте высокооплачиваемую IT-профессию с нуля за 6 месяцев. Выдаём диплом, помогае
Профессия «Аналитик данных». Рассрочка 0% Освойте высокооплачиваемую IT-профессию с нуля за 6 месяцев. Выдаём диплом, помогаем с трудоустройством. Excel, SQL, PowerBI, Python. Преимущества обучения в Академии Eduson: 🎓 официальный государственный диплом 🎓если после курса не найдёте работу — мы возвращаем деньги и это зафиксировано в договоре 🎓 рассрочка 0% на 24 мес., то есть без переплаты 🎓 бессрочный доступ к лекциям и материалам, которые продолжают обновляться 🎓 личный куратор с Вами на связи Начните обучаться онлайн и получать стабильный доход уже во время обучения! Узнать больше Финансовые услуги оказывает: ПАО "Сбербанк", АО "Тинькофф Банк" и др.. #реклама 16+ eduson.academy О рекламодателе

🤔 Что такое DRY и KISS? Они помогают писать чистый, понятный и эффективный код. 🟠DRY (Don't Repeat Yourself – Не повторяйся) Смысл: Избегайте дублирования кода, выносите повторяющуюся логику в функции, классы или модули. Улучшает читаемость кода. Упрощает поддержку: изменили код в одном месте – обновилось везде. Исключает ошибки при дублировании кода. Плохо (нарушение DRY)
// Дублирование кода для расчёта скидки
$price1 = 100;
$discount1 = $price1 * 0.1;

$price2 = 200;
$discount2 = $price2 * 0.1;

$price3 = 300;
$discount3 = $price3 * 0.1;
Хорошо (принцип DRY)
function calculateDiscount($price) {
    return $price * 0.1;
}

$discount1 = calculateDiscount(100);
$discount2 = calculateDiscount(200);
$discount3 = calculateDiscount(300);
🟠KISS (Keep It Simple, Stupid – Делай проще) Смысл: Не усложняйте код, он должен быть простым и понятным. Код легче понимать и исправлять. Простота = меньше ошибок. Улучшает производительность (сложные конструкции могут замедлять код). Плохо (нарушение KISS)
function isEven($num) {
    if ($num % 2 == 0) {
        return true;
    } else {
        return false;
    }
}
Хорошо (KISS)
function isEven($num) {
    return $num % 2 == 0;
}
Ставь 👍 и забирай 📚 Базу знаний

Открытые онлайн-уроки в Центральном университете 🎓 Тебя ждут лекции от ведущих преподавателей Центрального университета, а т
Открытые онлайн-уроки в Центральном университете 🎓 Тебя ждут лекции от ведущих преподавателей Центрального университета, а также возможность попасть на буткемп, сертификат о прохождении и тиражный мерч. 💻 Последняя лекция 9 июля — можно подключиться в любой момент Не упусти шанс — регистрируйся уже сейчас! Записаться онлайн #реклама 16+ event.centraluniversity.ru О рекламодателе

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

Срочно требуются Веб-Дизайнеры в Figma. Обучим с нуля. Онлайн-программа с наставником и чатом. Осторожно! 80% практики. По результату обучения у вас будет портфолио из нескольких работ. Сертификат о прохождении курса. Возможность пройти полное обучение и получить гарантированное трудоустройство! Учитесь дизайну у профессионалов. Переходи по кнопки: "Узнать больше" и начинай свое обучение. Доступ 0 руб. Узнать больше #реклама 16+ yudaevschool24.online О рекламодателе