PHP | Вопросы собесов
Открыть в Telegram
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv
Больше2 345
Подписчики
Нет данных24 часа
-37 дней
-2430 день
Архив постов
🤔 Чем полезно пространство имен?
Оно помогает организовывать код, делает его более читаемым и управляемым. Также снижает вероятность конфликта имен при работе с библиотеками или крупными проектами.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Какие могут быть проблемы от 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>");
// Выведет: <script>alert('Hacked!')</script>
Ставь 👍 и забирай 📚 Базу знанийКак получить оффер, а не проходить 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. Это усложняет поддержку, тестирование и расширение кода.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Уже доступно! Исследование Telegram 2025 — ключевые инсайты года 
