PHP | Вопросы собесов
رفتن به کانال در Telegram
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv
نمایش بیشتر2 343
مشترکین
-224 ساعت
-57 روز
-2430 روز
آرشیو پست ها
Битрикс24
💻Один онлайн-сервис для совместной работы.
📱10+ инструментов.
✅0 денег.
Счастливые сотрудники. Прибыльный бизнес.
Регистрируйтесь и забирайте себе
Зарегистрироваться
#реклама 16+
office-online.bitrix24.ru
О рекламодателе
🤔 Какие виды запросов есть?
В контексте веб-разработки и работы с API, "виды запросов" обычно относятся к HTTP-методам. HTTP-методы — это стандартизированные типы запросов, которые определяют действие, требуемое от веб-сервера. Каждый метод указывает на определённый тип операции над ресурсами. Вот основные методы (виды запросов), используемые в веб-разработке:
🟠GET
Назначение: Запрос содержимого указанного ресурса. GET-запросы должны быть идемпотентными, что означает, что их многократное выполнение приводит к одному и тому же результату и не изменяет состояние сервера.
Пример использования: Запрос веб-страницы или изображения.
🟠POST
Назначение: Отправка данных на сервер для создания нового ресурса. Данные отправляются в теле запроса. POST-запросы не идемпотентны, то есть многократное выполнение может приводить к разным результатам.
Пример использования: Отправка формы на веб-сайте.
🟠PUT
Назначение: Обновление существующего ресурса или создание нового ресурса по указанному URI. В отличие от POST, PUT идемпотентен.
Пример использования: Обновление деталей пользователя.
🟠DELETE
Назначение: Удаление указанного ресурса.
Пример использования: Удаление записи из базы данных.
🟠PATCH
Назначение: Частичное обновление существующего ресурса. PATCH может быть не идемпотентным, в зависимости от того, как он реализован на сервере.
Пример использования: Обновление части данных пользователя, например, смена пароля.
🟠HEAD
Назначение: Аналогичен GET, но сервер возвращает только заголовки ответа без тела. Используется для извлечения метаданных.
Пример использования: Проверка существования ресурса или его последнего обновления.
🟠OPTIONS
Назначение: Определение возможностей веб-сервера или параметров подключения для конкретного ресурса.
Пример использования: Определение поддерживаемых методов HTTP для URL.
🟠TRACE
Назначение: Эхо-запрос. Возвращает в теле ответа полученный запрос. Это может использоваться для диагностики. Из-за соображений безопасности его поддержка на серверах часто отключена.
Пример использования: Отладка веб-запросов.
Ставь 👍 и забирай 📚 Базу знаний
Партнёрская программа рекрутинга в Яндекс Еду
Станьте партнёром Яндекс Еды по привлечению курьеров и получите кучу преимуществ:
💰Платим до 47 000 ₽ за успешного кандидата
📞Поддержка на всех этапах
📅Свободное расписание
📊Удобные инструменты для работы
Приводите новых курьеров и получайте в среднем 250 000 ₽ в месяц!
Зарегистрироваться
#реклама
eda.yandex.ru
О рекламодателе
Реклама на Яндексе
🤔 Что такое REST?
Это архитектурный стиль взаимодействия между клиентом и сервером через HTTP.
Принципы REST:
1. Клиент-серверная архитектура – разделение клиентской и серверной логики.
2. Отсутствие состояния (Stateless) – каждый запрос содержит всю необходимую информацию.
3. Кэширование – позволяет уменьшить нагрузку на сервер.
4. Единообразие интерфейса – использование стандартных методов HTTP (GET, POST, PUT, DELETE).
5. Многоуровневая система (Layered System) – клиент не знает о внутренней реализации сервера.
6. Код по запросу (Code on Demand) – возможность загрузки кода для исполнения на клиенте (редко используется).
REST API используют JSON или XML для передачи данных.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Что такое абстрагирование?
Это принцип программирования и проектирования, который позволяет выделить важные характеристики объекта или системы и скрыть их сложные детали. Основная цель абстрагирования – упростить сложные системы, делая их более понятными и управляемыми, сосредоточив внимание на их основных аспектах и поведении.
🚩Зачем нужно абстрагирование
🟠Снижение сложности
Сокращает количество деталей, с которыми нужно работать, что облегчает понимание и работу с системой.
🟠Повышение читаемости кода
Упрощает код, делая его более читаемым и легким для поддержки.
🟠Повторное использование кода
Создаёт возможность повторного использования общих функций и логики.
🟠Инкапсуляция
Позволяет скрывать реализацию и представлять только необходимые интерфейсы для взаимодействия.
🟠Гибкость и расширяемость
Облегчает добавление новых функциональностей без изменения существующего кода.
🚩Как используется абстрагирование
Абстрагирование в программировании часто реализуется через классы и интерфейсы. Ниже приведены примеры абстракции в объектно-ориентированном программировании (ООП).
🚩Пример абстракции с использованием классов и интерфейсов
🟠Интерфейс
Определяет набор методов, которые должны быть реализованы, не указывая, как именно они должны быть реализованы.
interface Shape {
public function draw();
}
🟠Классы, реализующие интерфейс
Реализуют методы, определённые в интерфейсе.
class Circle implements Shape {
public function draw() {
echo "Drawing a circle";
}
}
class Square implements Shape {
public function draw() {
echo "Drawing a square";
}
}
Использование абстракции
function renderShape(Shape $shape) {
$shape->draw();
}
$circle = new Circle();
$square = new Square();
renderShape($circle); // Вывод: Drawing a circle
renderShape($square); // Вывод: Drawing a square
🚩Плюсы и минусы
➕Снижение сложности
Абстракция скрывает сложные детали реализации, облегчая работу с системой.
➕Улучшение читаемости
Код становится более понятным и структурированным.
➕Гибкость и расширяемость
Облегчает добавление новых функций и изменений.
➕Повторное использование
Позволяет использовать общий код в разных частях программы.
➖Избыточность
Иногда может приводить к избыточной сложности, если абстракции слишком сложные или используются неправильно.
➖Накладные расходы
Может потребоваться больше времени и усилий на создание абстракций и их поддержку.
Ставь 👍 и забирай 📚 Базу знанийЗапустите рекламу в телеграм-каналах с Яндекс Директом
Перфоманс-реклама теперь в телеграм-каналах ⚡
Яндекс Директ знает, как привлечь целевую аудиторию 💰👌
Попробовать
#реклама
yandex.ru
О рекламодателе
🤔 Как использовать регуляторы?
Регуляторы (регулярные выражения, RegEx) используются для поиска, фильтрации и замены строк.
Используются в:
- Поиске текста (preg_match) – находит совпадения в строке.
- Замене (preg_replace) – заменяет части строки по шаблону.
- Разбиении строки (preg_split) – разбивает строку по шаблону.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Какие виды уязвимости знаешь?
В веб-разработке существует множество уязвимостей, но самые распространенные
SQL-инъекции (SQL Injection)
Межсайтовый скриптинг (XSS – Cross-Site Scripting)
Межсайтовая подделка запросов (CSRF – Cross-Site Request Forgery)
Ошибки аутентификации и управления сессиями
Необработанные пользовательские данные
Доступ к файлам и директориям (LFI/RFI – Local/Remote File Inclusion)
Ошибки конфигурации сервера и утечки данных
🟠SQL-инъекции (SQL Injection)
Атака, при которой злоумышленник вставляет вредоносный SQL-код в запрос, получая доступ к БД.
Чтение / изменение данных
Удаление таблиц
Получение паролей пользователей
Используем подготовленные запросы (Prepared Statements)
$db = new PDO("mysql:host=localhost;dbname=test", "root", "password");
$stmt = $db->prepare("SELECT * FROM users WHERE email = :email");
$stmt->execute([':email' => $_POST['email']]);
$user = $stmt->fetch();
🟠Межсайтовый скриптинг (XSS – Cross-Site Scripting)
Атака, при которой злоумышленник вставляет вредоносный JavaScript в веб-страницу.
Кража cookies и сеансов
Изменение содержимого страницы
Фишинг
Очистка данных перед выводом
echo htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8');
🟠Межсайтовая подделка запросов (CSRF – Cross-Site Request Forgery)
Злоумышленник заставляет пользователя выполнить нежелательный запрос от его имени (например, перевести деньги).
Изменение данных без ведома пользователя
Подмена учетных записей
Используем CSRF-токены
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
При отправке формы проверяем
if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) {
die("CSRF атака!");
}
🟠Ошибки аутентификации и управления сессиями
Если пароли хранятся неправильно или сессии уязвимы, злоумышленник может перехватить учетную запись пользователя.
Кража пароля
Перехват сессии
Храним пароли с password_hash(), а не в открытом виде:
$hash = password_hash("mypassword", PASSWORD_BCRYPT);
🟠Необработанные пользовательские данные
Приложение принимает и использует входные данные без проверки.
Возможность загрузки вредоносных файлов
Выполнение вредоносного кода
Проверяем загружаемые файлы (MIME-тип, расширение)
Используем валидацию данных:
$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);
🟠Доступ к файлам и директориям (LFI/RFI)
Злоумышленник может загружать и выполнять опасные файлы через параметры в URL.
Выполнение кода на сервере
Чтение конфиденциальных файлов
Запрещаем прямую загрузку файлов:
$whitelist = ['jpg', 'png', 'gif'];
$ext = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);
if (!in_array($ext, $whitelist)) {
die("Недопустимый файл!");
}
🟠Ошибки конфигурации сервера и утечки данных
Если сервер настроен неправильно, можно случайно раскрыть важные данные.
Вывод ошибок PHP в браузере
Доступ к файлам .env, config.php
Отключаем display_errors в php.ini:
display_errors = Off
Защищаем файлы .env через .htaccess
<Files .env>
Order allow,deny
Deny from all
</Files>
Ставь 👍 и забирай 📚 Базу знанийДарим подписку на Яндекс Музыку
Ответьте на 1 вопрос и Яндекс Музыка для вас и 3-х ваших близких 30 дней бесплатно.
Кинопоиск и Яндекс Книги тоже в подписке.
Попробуйте сейчас❤️
Попробовать
#реклама 18+
music.yandex.ru
О рекламодателе
Реклама на Яндексе
🤔 Влияет ли на что-то Foreign Key?
Да, Foreign Key (внешний ключ) гарантирует целостность данных, предотвращая удаление или изменение связанных записей.
Влияние Foreign Key:
- Ограничивает удаление (ON DELETE RESTRICT) – нельзя удалить запись, на которую есть ссылки.
- Каскадное удаление (ON DELETE CASCADE) – при удалении одной записи удаляются все связанные.
- Обновление (ON UPDATE CASCADE) – если изменяется ключ в родительской таблице, он меняется и в дочерней.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Что такое CQRS?
CQRS (Command Query Responsibility Segregation) – это архитектурный паттерн, который разделяет операции чтения (Query) и записи (Command) в приложении. Вместо одной модели данных используется две:
Модель для чтения – оптимизирована для запросов.
Модель для записи – отвечает за изменение данных.
🚩Зачем нужен CQRS?
🟠Производительность
запросы можно кэшировать, а запись может происходить в другой базе.
🟠Гибкость
можно использовать разные структуры данных для чтения и записи.
🟠Масштабируемость
можно масштабировать чтение и запись отдельно.
🟠Безопасность
можно ограничить доступ к записи.
🚩Как это работает?
В классическом приложении чтение и запись используют одну модель данных
class User {
public $id;
public $name;
public $email;
public function updateEmail($newEmail) {
$this->email = $newEmail;
}
}
Команда (Command) – запись
class UpdateUserEmailCommand {
public int $userId;
public string $newEmail;
public function __construct($userId, $newEmail) {
$this->userId = $userId;
$this->newEmail = $newEmail;
}
}
class UserCommandHandler {
public function handle(UpdateUserEmailCommand $command) {
// Логика обновления в БД
$db = new PDO("mysql:host=localhost;dbname=test", "root", "password");
$stmt = $db->prepare("UPDATE users SET email = :email WHERE id = :id");
$stmt->execute([
':email' => $command->newEmail,
':id' => $command->userId
]);
}
}
Запрос (Query) – чтение
class UserQueryHandler {
public function getUserById($userId) {
$db = new PDO("mysql:host=localhost;dbname=test", "root", "password");
$stmt = $db->prepare("SELECT id, name, email FROM users WHERE id = :id");
$stmt->execute([':id' => $userId]);
return $stmt->fetch(PDO::FETCH_ASSOC);
}
}
🚩CQRS + Event Sourcing
Часто CQRS используется вместе с Event Sourcing – вместо изменения данных мы создаем события.
class UserEmailUpdatedEvent {
public int $userId;
public string $newEmail;
public function __construct($userId, $newEmail) {
$this->userId = $userId;
$this->newEmail = $newEmail;
}
}
Ставь 👍 и забирай 📚 Базу знанийРазработаем лендинг, который привлекает клиентов!
Привлекать клиентов легко, если у вас правильный лендинг и эффективная реклама. Мы создаем конверсионные посадочные страницы, а затем обеспечиваем их трафиком, чтобы вы начали получать заявки как можно быстрее.
Как это работает:
Разрабатываем лендинг – быстрый, удобный, с продающими элементами
Настраиваем аналитику и CRM – учет всех заявок, контроль эффективности
Запускаем рекламу – контекст, таргетированная реклама, мессенджеры
Оптимизируем кампании – тестируем разные подходы, снижаем стоимость привлечения клиента
Анализируем и масштабируем – делаем так, чтобы поток клиентов был стабильным
Мы создаем лендинг и сразу приводим клиентов. Оставьте заявку, и мы поможем вашему бизнесу расти!
Узнать больше
#реклама
lidov.ru
О рекламодателе
🤔 На что накладывает условие WHERE?
Условие WHERE в SQL фильтрует строки, которые должны попасть в выборку. Оно применяется:
- К SELECT – выбирает только те строки, которые удовлетворяют условию.
- К UPDATE – изменяет только определенные строки.
- К DELETE – удаляет только строки, соответствующие условию.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 В чем принцип работы HashTable?
Хеш-таблица – это структура данных, которая хранит пары "ключ → значение" и использует хеш-функцию для быстрого поиска, добавления и удаления данных.
🚩Основная идея
Ключ обрабатывается хеш-функцией → превращается в числовой индекс.
По индексу данные хранятся в массиве.
Быстрое обращение к данным по ключу:
O(1) в среднем.
🚩Как это работает?
🟠Хеширование ключа
Представим, что у нас есть ключ "apple", и мы храним для него значение 100.
Применяем хеш-функцию к "apple"
$hash = hash('md5', 'apple');
echo $hash; // 1f3870be274f6c49b3e31a0c6728957f
Это хеш – длинное число, но нам нужно индексировать данные, поэтому мы берем его остаток от деления на размер массива (mod):
$index = hexdec(substr($hash, 0, 8)) % 10;
echo $index; // Например, 3
🟠Поиск элемента
Когда мы ищем apple, алгоритм:
Применяет ту же хеш-функцию, получает индекс 3
Ищет значение в ячейке 3
Таким образом, поиск данных по ключу происходит мгновенно – O(1).
Коллизия – это когда разные ключи дают один и тот же индекс.
Пример: "apple" и "banana" могут попасть в одну ячейку!
Решения:
Метод цепочек – внутри каждой ячейки храним список значений (например, массив или связанный список).
Открытая адресация – если ячейка занята, ищем следующую свободную.
🚩Хеш-таблица в PHP
В PHP массивы (array) работают как хеш-таблицы!
$hashTable = [];
$hashTable['apple'] = 100;
$hashTable['banana'] = 200;
echo $hashTable['apple']; // 100
Ставь 👍 и забирай 📚 Базу знанийУйди от рутины с ChatGPT, займись стратегией! Мы поможем
Курс по нейросетям для руководителей высшего и среднего звена. Только реальные бизнес-кейсы, разбор ваших вопросов с эекспертами. Всё обучение со спикером живьём, никаких видеозаписей! Приходи!
Записаться онлайн
#реклама 16+
gptmasters.ru
О рекламодателе
🤔 Что такое WHERE AVG?
Оператор AVG() вычисляет среднее значение по столбцу.
WHERE AVG() сам по себе не используется, но можно фильтровать данные через подзапрос.
Этот запрос вернет все заказы, чья цена выше среднего.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Какие есть виды 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;
Ставь 👍 и забирай 📚 Базу знанийВебинар про UserGate SIEM
⚡ Отечественные компании каждый день сталкиваются с различными рисками и угрозами, часть из которых помогает закрыть отказоустойчивость.
📊Спикеры:
- Дмитрий Чеботарев, менеджер по развитию UserGate SIEM;
- Дмитрий Богданов, ведущий инженер UserGate.
✅ Расскажут об отказоустойчивости и кластеризации и о том, для чего они нужны;
✅ Покажут кейсы использования.
Зарегистрироваться
#реклама 16+
webinar.usergate.com
О рекламодателе
🤔 Как в Doctrine реализовать отношение "Has Many Through"?
В Doctrine отношение "Has Many Through" (многие ко многим через промежуточную таблицу) реализуется через связь ManyToMany с дополнительной моделью. Это полезно, когда нужно хранить дополнительные данные о связи между объектами.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Repost from easyoffer
💡 В EasyOffer 2.0 появится фильтрация вопросов по грейдам и типам интервью!
📊 Например, вот вероятности ТОП-30 вопросов, которые задают на HR-скрининге Python-разработчику уровня Middle/Senior. Данные основаны на 53 реальных интервью.
97% Какие у тебя зарплатные ожидания
73% Какие у тебя есть вопросы
44% Какие критерии при выборе будущей работы
41% Расскажи о себе
38% Почему ищешь работу
35% Расскажи про свой опыт
35% Расскажи про проект на предыдущей работе
32% Почему уволился с предыдущей работы
29% Где территориально сейчас живешь/находишься
23% Есть ли другие предложения по работе
17% Есть ли военный билет
17% Почему хочешь сменить работу
17% Как проводишь свободное время
17% Расскажи про задачи на предыдущей работе
17% Сколько коммерческого опыта работы с Python
17% С какими БД работал
14% Находишься ли в активном поиске работы
14% С каким стеком работаешь
14% Почему решил откликнуться на нашу вакансию
14% Какой текущий статус поиска работы
11% Почему решил стать программистом
11% С какими фреймворками работал
11% Какую зарплату получал на предыдущей работе
11% Работаешь ли в настоящий момент
11% На какой грейд себя оцениваешь
11% Как быстро можешь приступить к работе после получения офера
11% Расскажи про свои pet-проекты
8% Какие знаешь типы данных в Python
8% Что такое декоратор в Python
8% Что ищешь на новой работе
🚀 Скоро стартует краудфандинговая кампания, которая поможет ускорить разработку EasyOffer 2.0.
Первые спонсоры получат уникальные лимитированные награды!
📢 Если вам это интересно, подписывайтесь на канал 👉 этот телеграм канал
اکنون در دسترس! پژوهش تلگرام ۲۰۲۵ — مهمترین بینشهای سال 
