PHP | Вопросы собесов
رفتن به کانال در Telegram
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv
نمایش بیشتر2 343
مشترکین
-324 ساعت
-77 روز
-2830 روز
آرشیو پست ها
Бесплатный онлайн-курс по дизайну от студии "Логомашина"
Попробуй 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 и 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 в профессиональных целях, создавать нейро-сотрудников и зарабатывать на искусственном интеллекте.
✨ 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 млн руб. Стажировки, диплом гос. образца и фокус на твоей карьере в ЦУ
Подать заявку
#реклама 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("Иван");
Ставь 👍 и забирай 📚 Базу знаний+5
Почему вы не используете Битрикс24 CRM с AI?
1- не знал
2- забыл
Рассказываем и напоминаем!
✅Битрикс24 CRM с AI помогает увеличивать продажи, работать с постоянными клиентами и сохранять все важные данные. AI-помощник CoPilot внутри сервиса расшифрует телефонные разговоры и автоматически заполнит карточки клиента в CRM.
Битрикс24 можно использовать бесплатно для всех команд, независимо от их размера.
⚡Не тратьте время на рутину.
Узнать больше
#реклама 16+
bitrix24.ru
О рекламодателе
🤔 Что такое горизонтальное шардирование?
Горизонтальное шардирование разделяет данные на отдельные шарды по строкам, распределяя их между несколькими серверами. Это позволяет увеличивать масштаб за счёт добавления новых серверов.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Профессия «Аналитик данных». Рассрочка 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
О рекламодателе
اکنون در دسترس! پژوهش تلگرام ۲۰۲۵ — مهمترین بینشهای سال 
