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

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

Kanalga Telegram’da o‘tish

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

Ko'proq ko'rsatish
2 345
Obunachilar
Ma'lumot yo'q24 soatlar
-37 kunlar
-2430 kunlar
Postlar arxiv
🤔 Чем полезно пространство имен? Оно помогает организовывать код, делает его более читаемым и управляемым. Также снижает вероятность конфликта имен при работе с библиотеками или крупными проектами. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Какие могут быть проблемы от Join'а? Использование JOIN в SQL может привести к нескольким проблемам, особенно при работе с большими таблицами. Рассмотрим основные из них. 🟠Производительность (нагрузка на БД) Чем больше данных соединяется, тем больше ресурсов требуется. Проблема: JOIN создаёт временную таблицу в памяти, что замедляет запрос. Если нет индексов, соединение идёт через полный перебор (Nested Loop Join), что очень медленно. Решение: Добавить индексы на поля, по которым идёт соединение. Использовать EXPLAIN для анализа запроса.
EXPLAIN SELECT * FROM users JOIN orders ON users.id = orders.user_id;
🟠Дублирование строк (Картезианское произведение) Если используется JOIN, но нет условия соединения (ON), запрос создаст все возможные комбинации строк. Проблема:
SELECT * FROM users, orders;
Решение Всегда указывать ON или USING:
SELECT * FROM users JOIN orders ON users.id = orders.user_id;
🟠Потеря данных при `INNER JOIN` INNER JOIN возвращает только совпадающие строки, из-за чего можно потерять данные. Проблема
SELECT users.id, users.name, orders.id AS order_id  
FROM users  
INNER JOIN orders ON users.id = orders.user_id;
Решение: Использовать LEFT JOIN, если нужны все пользователи, даже без заказов:
SELECT users.id, users.name, orders.id AS order_id  
FROM users  
LEFT JOIN orders ON users.id = orders.user_id;
🟠Медленный `JOIN` на `TEXT` или `VARCHAR` JOIN по строковым полям (VARCHAR, TEXT) работает медленнее, чем по числовым (INT). Проблема
SELECT * FROM users JOIN orders ON users.email = orders.email;
🟠Несовместимость типов данных Если соединяются таблицы с разными типами данных (INT vs VARCHAR), может быть скрытое приведение типов, которое замедляет запрос. Проблема
SELECT * FROM users  
JOIN orders ON users.id = orders.user_id;  
Решение - Убедиться, что типы данных совпадают (INT = INT). - Привести к нужному типу:
SELECT * FROM users  
JOIN orders ON users.id = CAST(orders.user_id AS INT);
Ставь 👍 и забирай 📚 Базу знаний

🤔 В чём преимущество hash-индекса и btree-индекса? 1. Hash-индекс: • Быстрый доступ для равенств (=) и точных запросов. • Не подходит для диапазонных запросов. 2. B-Tree индекс: • Оптимален для диапазонных запросов и сортировки. • Поддерживает равенства и сравнения (<, >). • Медленнее hash-индекса для точного поиска. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Дизайн в FIGMA с нуля. Бесплатный курс + портфолио Онлайн-программа с наставником и чатом. Дизайн от профессионалов. Доступ 0 руб. Узнать больше #реклама 16+ yudaevschool24.online О рекламодателе

🤔 Расскажи про букву D в SOLID и ее связь с интерфейсами? Принцип Dependency Inversion (DIP) гласит: Модули верхнего уровня не должны зависеть от модулей нижнего уровня. Оба должны зависеть от абстракций (интерфейсов). Код не должен зависеть от конкретных классов, а должен работать через интерфейсы или абстракции. Это делает код гибче и меньше зависящим от деталей реализации. 🚩Как DIP связан с интерфейсами? Плохой код (без инверсии зависимостей)
class MySQLDatabase {
    public function connect() {
        return "Подключение к MySQL";
    }
}

class UserRepository {
    private MySQLDatabase $db; // Жёсткая зависимость!

    public function __construct() {
        $this->db = new MySQLDatabase();
    }
}
Хороший код (через интерфейс, следуя DIP)
interface DatabaseInterface {
    public function connect();
}

class MySQLDatabase implements DatabaseInterface {
    public function connect() {
        return "Подключение к MySQL";
    }
}

class PostgreSQLDatabase implements DatabaseInterface {
    public function connect() {
        return "Подключение к PostgreSQL";
    }
}

class UserRepository {
    private DatabaseInterface $db;

    public function __construct(DatabaseInterface $db) {
        $this->db = $db;
    }
}

// Теперь можно подставить любую базу данных!
$mysqlRepo = new UserRepository(new MySQLDatabase());
$pgRepo = new UserRepository(new PostgreSQLDatabase());
Ставь 👍 и забирай 📚 Базу знаний

Когда проекты растут, а требований становится больше, скорость разработки начинает упираться не в язык или фреймворки, а в пр
Когда проекты растут, а требований становится больше, скорость разработки начинает упираться не в язык или фреймворки, а в процессы, инструменты и организацию работы. С 1 по 5 декабря конференция Podlodka PHP Crew собирает сезон о том, как разгонять PHP-разработку без стресса и перегрузов. 📌 В программу вошли новые доклады: 🧩 Тесты для ускорения — Александр Макаров (Twindo): о роли тестирования в скорости разработки, какие виды тестов действительно дают ускорение, и как распределить ответственность между разработчиками, QA и LLM. 📄 Контракты пишем — код генерим — Александр Забанов (Вебпрактик): contract-first подход, который снижает количество ошибок и делает интеграции предсказуемыми. 🧱 Платформа как LEGO — Антон Комарев (BelkaCar): как собрать внутреннюю платформу для разработчиков из готовых «кубиков» и убрать хаос внутренних тулов. 🎛 Фича-флаги — Сергей Волошин (Вебпрактик): как перейти от «деплой = релиз» к гибкому управлению функциональностью и выпускать код хоть каждый час. 💡Все темы прикладные, с упором на ускорение команд и уменьшение рутины. 🔗 Программа и билеты: https://podlodka.io/phpcrew

Когда проекты растут, а требований становится больше, скорость разработки начинает упираться не в язык или фреймворки, а в пр
Когда проекты растут, а требований становится больше, скорость разработки начинает упираться не в язык или фреймворки, а в процессы, инструменты и организацию работы. С 1 по 5 декабря конференция Podlodka PHP Crew собирает сезон о том, как разгонять PHP-разработку без стресса и перегрузов. 📌 В программу вошли новые доклады: 🧩 Тесты для ускорения — Александр Макаров (Twindo): о роли тестирования в скорости разработки, какие виды тестов действительно дают ускорение, и как распределить ответственность между разработчиками, QA и LLM. 📄 Контракты пишем — код генерим — Александр Забанов (Вебпрактик): contract-first подход, который снижает количество ошибок и делает интеграции предсказуемыми. 🧱 Платформа как LEGO — Антон Комарев (BelkaCar): как собрать внутреннюю платформу для разработчиков из готовых «кубиков» и убрать хаос внутренних тулов. 🎛 Фича-флаги — Сергей Волошин (Вебпрактик): как перейти от «деплой = релиз» к гибкому управлению функциональностью и выпускать код хоть каждый час. 💡Все темы прикладные, с упором на ускорение команд и уменьшение рутины. 🔗 Программа и билеты: https://podlodka.io/phpcrew

Станьте представителем Т-Банка даже без опыта Всему научим, выдадим смартфон и оплатим связь. Посмотрите остальные условия Пе
Станьте представителем Т-Банка даже без опыта Всему научим, выдадим смартфон и оплатим связь. Посмотрите остальные условия Перейти на сайт #реклама tbank.ru О рекламодателе

🤔 Что такое полнотекстовый индекс? Это структура данных, оптимизирующая поиск текстовой информации в базе данных. 1. Используется для эффективного поиска по словам или фразам в текстовых полях. 2. Применяется в MySQL, PostgreSQL, ElasticSearch и других системах. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Расскажи про функциональное программирование? Функциональное программирование (FP) – это парадигма программирования, в которой основное внимание уделяется использованию функций как первичных элементов кода. Код строится из чистых функций, без изменения состояний и без побочных эффектов. 🚩Зачем нужно функциональное программирование? 🟠Меньше багов чистые функции всегда дают один и тот же результат для одних и тех же входных данных. 🟠Легко тестировать код предсказуем и изолирован. 🟠Меньше зависимостей нет глобальных переменных и скрытых состояний. 🟠Легко писать параллельные программы нет изменяемых данных, значит, нет конфликтов в многопоточности. 🚩Принципы функционального программирования Чистые функции (Pure Functions) Иммутабельность (Immutable Data) Функции высшего порядка (Higher-Order Functions) Функциональные композиции Отсутствие побочных эффектов 🟠Чистые функции Это функция, которая: Возвращает один и тот же результат для одинаковых аргументов. Не изменяет внешние переменные и не имеет побочных эффектов.
$total = 0;
function addToTotal($num) {
    global $total;
    $total += $num;
    return $total;
}
Пример чистой функции
function add($a, $b) {
    return $a + $b;
}
echo add(3, 4); // 7
🟠Иммутабельность В FP данные не изменяются – вместо изменения переменных создаются новые.
$arr = [1, 2, 3];
$arr[] = 4; // Изменяет массив
Пример иммутабельности
$arr = [1, 2, 3];
$newArr = array_merge($arr, [4]); // Создает новый массив
🟠Функции высшего порядка Это функции, которые: Принимают другие функции в качестве аргументов. Возвращают другие функции.
function applyFunction($func, $value) {
    return $func($value);
}

$square = function ($x) {
    return $x * $x;
};

echo applyFunction($square, 5); // 25
🟠Функциональные композиции Вместо длинных процедур можно сочетать функции.
function double($x) {
    return $x * 2;
}

function increment($x) {
    return $x + 1;
}

function compose($f, $g) {
    return function ($x) use ($f, $g) {
        return $f($g($x));
    };
}

$doubleThenIncrement = compose('increment', 'double');

echo $doubleThenIncrement(3); // (3 * 2) + 1 = 7
🟠Отсутствие побочных эффектов Функции не должны изменять внешние данные (например, глобальные переменные, файлы, БД).
function logMessage($message) {
    file_put_contents("log.txt", $message, FILE_APPEND);
}
Функция без побочных эффектов:
function formatMessage($message) {
    return strtoupper($message);
}
echo formatMessage("hello"); // HELLO
🚩Функциональное программирование в PHP PHP – это не чисто функциональный язык, но поддерживает FP-стиль: array_map() – применяет функцию ко всем элементам массива. array_filter() – фильтрует массив по функции. array_reduce() – сворачивает массив в одно значение.
$numbers = [1, 2, 3, 4, 5];

// Умножаем каждый элемент на 2
$doubled = array_map(fn($x) => $x * 2, $numbers);
print_r($doubled); // [2, 4, 6, 8, 10]

// Фильтруем только четные числа
$evens = array_filter($numbers, fn($x) => $x % 2 === 0);
print_r($evens); // [2, 4]

// Суммируем все числа
$sum = array_reduce($numbers, fn($carry, $x) => $carry + $x, 0);
echo $sum; // 15
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что делает бэкслеш перед глобальными функциями? Бэкслеш (\) используется для обращения к глобальным функциям или классам, чтобы избежать их переопределения в текущем пространстве имён. Например, \strlen() вызовет глобальную функцию strlen, а не её версию из текущего namespace. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Какие есть виды join? JOIN – это операция в SQL, которая позволяет объединять данные из двух или более таблиц на основе общего поля. В SQL есть 5 основных видов JOIN 🟠`INNER JOIN` пересечение двух таблиц (только совпадающие записи). 🟠`LEFT JOIN` все записи из левой таблицы + совпадения из правой. 🟠`RIGHT JOIN` все записи из правой таблицы + совпадения из левой. 🟠`FULL JOIN` объединяет все записи из обеих таблиц. 🟠`CROSS JOIN` декартово произведение (каждая строка первой таблицы соединяется с каждой строкой второй). 🚩`INNER JOIN` – только совпадения Возвращает только те строки, у которых есть совпадения в обеих таблицах.
SELECT users.id, users.name, orders.amount
FROM users
INNER JOIN orders ON users.id = orders.user_id;
🚩`LEFT JOIN` – все из левой таблицы + совпадения Возвращает все записи из левой таблицы, а если в правой нет совпадения – подставляет NULL.
SELECT users.id, users.name, orders.amount
FROM users
LEFT JOIN orders ON users.id = orders.user_id;
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое ACID? ACID — это акроним, обозначающий четыре ключевых свойства транзакций в базах данных: Atomicity (атомарность), Consistency (согласованность), Isolation (изоляция), Durability (устойчивость). Эти свойства гарантируют надежное выполнение транзакций.? Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Для чего нужно пространство имен в PHP? Пространства имён (namespace) в PHP используются для разделения кода и предотвращения конфликтов имён классов, функций и констант. 🚩Почему нужны `namespace`? Избегают конфликтов имён (если два разных файла объявляют одинаковые классы). Упрощают организацию кода (структура похожа на файловую систему). Работают с автозагрузкой (PSR-4) – Composer использует namespace для загрузки файлов. 🚩Пример использования `namespace` Без пространства имён – конфликт классов
// Файл: models/User.php
class User {
    public function getRole() {
        return "Пользователь";
    }
}

// Файл: controllers/User.php
class User {
    public function getRole() {
        return "Администратор";
    }
}

// Ошибка! PHP не знает, какой User использовать.
$user = new User();
С namespace – классы разделены
// Файл: models/User.php
namespace App\Models;

class User {
    public function getRole() {
        return "Пользователь";
    }
}

// Файл: controllers/User.php
namespace App\Controllers;

class User {
    public function getRole() {
        return "Администратор";
    }
}

// Используем классы с указанием namespace
$modelUser = new App\Models\User();
echo $modelUser->getRole(); // ✅ "Пользователь"

$controllerUser = new App\Controllers\User();
echo $controllerUser->getRole(); // ✅ "Администратор"
🟠Импорт (`use`) – сокращает длинные пути Вместо длинных App\Models\User, можно импортировать
use App\Models\User;

$user = new User(); // PHP понимает, что это App\Models\User
🟠Работа с функциями и константами Пространства имён работают не только с классами, но и с функциями и константами.
namespace Utils;

function hello() {
    return "Привет!";
}

echo hello(); // ✅ "Привет!"
echo \Utils\hello(); // ✅ "Привет!" (полный путь)
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое Low Coupling и High Cohesion? • Low Coupling (низкая связанность): уменьшение зависимости между модулями, чтобы изменения в одном модуле минимально затрагивали другие. • High Cohesion (высокая связность): логически связанные функции и данные группируются в одном модуле, делая его функционально независимым. Совмещение этих принципов упрощает сопровождение и тестирование кода. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Где мы делаем фильтрацию данных? Фильтрацию данных в PHP можно делать в нескольких местах в зависимости от контекста. Основные области фильтрации: 🚩Фильтрация входных данных Когда мы получаем данные от пользователя ($_GET, $_POST, $_REQUEST), важно очищать их от нежелательных значений.
$name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING);
$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
Фильтрация массива $_POST через filter_var_array()
$filters = [
    'name'  => FILTER_SANITIZE_STRING,
    'email' => FILTER_VALIDATE_EMAIL,
    'age'   => FILTER_VALIDATE_INT
];
$filteredData = filter_var_array($_POST, $filters);
🚩Фильтрация перед сохранением в базу данных Перед вставкой в SQL важно удалять потенциально опасные символы, чтобы избежать SQL-инъекций.
$db = new PDO("mysql:host=localhost;dbname=test", "root", "password");
$stmt = $db->prepare("INSERT INTO users (name, email) VALUES (:name, :email)");
$stmt->execute([
    ':name'  => htmlspecialchars($_POST['name']),
    ':email' => $_POST['email']
]);
🚩Фильтрация данных внутри кода Если данные поступают из разных источников, мы можем использовать фильтрующие функции PHP: Очистка строки от HTML
$cleanText = strip_tags("<h1>Hello</h1>"); // "Hello"
Удаление пробелов
$trimmed = trim("   example   "); // "example"
Приведение к числу
$number = filter_var("42abc", FILTER_SANITIZE_NUMBER_INT); // 42
🚩Фильтрация перед выводом (защита от XSS) Перед выводом в браузер очищаем данные от HTML/JS-кода, чтобы злоумышленник не внедрил скрипты.
echo htmlspecialchars("<script>alert('Hacked!')</script>"); 
// Выведет: &lt;script&gt;alert('Hacked!')&lt;/script&gt;
Ставь 👍 и забирай 📚 Базу знаний

Как получить оффер, а не проходить 100500 собеседований впустую? HR Яндекса ответила на самые острые вопросы 🌶️ Почему сейча
Как получить оффер, а не проходить 100500 собеседований впустую? HR Яндекса ответила на самые острые вопросы 🌶️ Почему сейчас так сложно найти работу (и что с этим делать) Секретная фишка перед оффером: как УЗНАТЬ всё и УСИЛИТЬ свою позицию Что писать в резюме, чтобы тебе не занизили зарлату Сохраняй ключ к офферу мечты 👇 https://t.me/myshortnote

🤔 Какие известны распространенные способы кодирования в разработке? 1. Base64: для передачи бинарных данных в текстовом формате. 2. URL Encoding: преобразование специальных символов в безопасный формат для URL. 3. ASCII и Unicode: для кодировки символов. 4. JSON и XML: для структурирования данных. 5. UTF-8: стандарт кодировки текста. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

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

🤔 Какой принцип нарушает Active Record? Active Record нарушает принцип единственной ответственности (SRP) из SOLID. 1. В Active Record бизнес-логика и операции работы с базой данных объединены в одном классе. 2. Это усложняет поддержку, тестирование и расширение кода. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний