PHP | Вопросы собесов
رفتن به کانال در Telegram
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv
نمایش بیشتر2 342
مشترکین
-224 ساعت
-67 روز
-2530 روز
آرشیو پست ها
🤔 Что такое списочный тип?
Списочный тип данных, также известный как список, представляет собой структуру данных, которая хранит упорядоченные коллекции элементов. Списки позволяют хранить наборы элементов, доступ к которым можно получить по индексу. Они широко используются в программировании благодаря своей гибкости и удобству.
🚩Особенности
🟠Упорядоченность
Элементы в списке хранятся в определенном порядке, и этот порядок сохраняется. Каждый элемент имеет индекс, по которому к нему можно обратиться.
🟠Изменяемость
Списки обычно являются изменяемыми структурами данных, что означает, что вы можете добавлять, удалять или изменять элементы после создания списка.
🟠Гетерогенность
В списке могут храниться элементы различных типов данных (например, числа, строки, объекты).
🚩Примеры списочных типов в различных языках программирования
Python
my_list = [1, 2, 3, 'a', 'b', 'c']
my_list.append(4) # Добавление элемента
print(my_list[2]) # Доступ к элементу по индексу (вывод: 3)
Java
import java.util.ArrayList;
ArrayList<Object> myList = new ArrayList<>();
myList.add(1);
myList.add("hello");
System.out.println(myList.get(1)); // Доступ к элементу по индексу (вывод: hello)
PHP
$myList = array(1, 2, 3, 'a', 'b', 'c');
array_push($myList, 4); // Добавление элемента
echo $myList[2]; // Доступ к элементу по индексу (вывод: 3)
🚩Плюсы
➕Гибкость
Списки позволяют легко добавлять, удалять и изменять элементы.
➕Удобство использования
Простейшие операции над списками, такие как добавление или удаление элементов, обычно реализуются стандартными методами или функциями.
➕Поддержка индексов
Доступ к элементам по индексу позволяет эффективно манипулировать данными.
Ставь 👍 и забирай 📚 Базу знанийЗарплата 207.000р у Middle-разработчика в Яндекс
«В день уходит несколько часов на созвоны, в остальное время закрываю задачки из спринта, редко перерабатываю. У компании топовый офис, но с коллективом как-то не заладилось. Радуюсь классному ДМС и стабильной зарплате» - middle разработчик из Яндекса.
Бигтех по-русски - канал с реальными зарплатами и историями IT-специалистов российского БигТеха. Там уже опубликованы рассказы программистов Альфа-банка, Сбера и Тинькофф 🤯
Читайте: @bigtech_russia
Изучите HTML и CSS - бесплатно!
Попробуйте бесплатно — освоите базу HTML & CSS, создадите свою первую веб страницу и поймете, стоит ли погружаться в IT глубже.
Почему стоит попробовать?
- Никакой воды — только практика
- Проверь профессию до того, как вложить в обучение 150+ тыс.
- Убедитесь, что код — это не страшно, даже если раньше не получалось
А чтобы у вас все получилось, мы добавили бонусы:
✅ 8 пошаговых гайдов — от первого кода до первых заработков в IT.
✅ До 1500 монет за задания, которые можно обменять на дальнейшее обучение.
✅ Закрытый чат с наставником — получите ответы на все вопросы.
✅ Полезный IT-канал в Telegram — оставайтесь в теме после курса.
⚡ Главное — вы попробуете профессию разработчика!
Попробовать
#реклама 16+
learn.result-university.com
О рекламодателе
🤔 По какому принципу объединяются и разделяются методы в интерфейсах?
Методы в интерфейсах группируются по роли или контракту, то есть:
- Каждый интерфейс должен описывать конкретное поведение (например, Serializable, Renderable).
- Принцип разделения интерфейса (Interface Segregation Principle, SOLID) — лучше несколько небольших интерфейсов, чем один громоздкий.
- Интерфейс отражает намерение: что объект умеет делать, а не как он это делает.
Это упрощает поддержку, повторное использование и тестирование кода.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Telegram опубликовал список 8 самых быстрорастущих каналов для программистов:
Only Python — Подборки приёмов и фич, о которых не рассказывают в курсах.
Only Tech — Главные тренды и инсайды из мира технологий, маркетинга и интернет-культуры.
Only Hack — Реальные кейсы кибератак, инструменты и методы защиты, которые используют хакеры.
Only GitHub — Репозитории, которые решают реальные задачи.
Скрипты, фреймворки и готовые решения
Only IT — Без мнений и слухов — только факты и важные IT-события.
Only Apple — Новые апдейты, утечки и фишки, которые Apple ещё не показала.
Only GPT — Промпты, хаки и свежие инструменты, о которых молчат даже AI-каналы.
Only Memes — Если ты когда-нибудь деплоил в пятницу вечером — ты поймешь
Подписывайтесь и прокачивайте свои скиллы.
📺 База 1000+ реальных собеседований
На программиста, тестировщика, аналитика, проджекта и другие IT профы.
Есть собесы от ведущих компаний: Сбер, Яндекс, ВТБ, Тинькофф, Озон, Wildberries и т.д.
🎯 Переходи по ссылке и присоединяйся к базе, чтобы прокачать свои шансы на успешное трудоустройство!
🤔 В чём суть абстрактного класса?
Абстрактный класс и в ООП в целом — это специальный тип класса, который не может быть инстанциирован напрямую. Это означает, что вы не можете создать объект абстрактного класса используя оператор
new напрямую. Суть его заключается в том, чтобы служить основой для других классов, от которых будут создаваться объекты.
abstract class ТранспортноеCредство {
protected $скорость;
public function установитьСкорость($скорость) {
$this->скорость = $скорость;
}
abstract public function двигаться();
}
class Автомобиль extends ТранспортноеCредство {
public function двигаться() {
echo "Движется на скорости: " . $this->скорость . " км/ч";
}
}
// $транспорт = new ТранспортноеCредство(); // Ошибка: не может быть инстанциирован
$автомобиль = new Автомобиль();
$автомобиль->установитьСкорость(60);
$автомобиль->двигаться();
Ставь 👍 и забирай 📚 Базу знанийНайти свое место, место у моря
В современном ритме жизни очень легко потерять себя и свой ориентир. Мир диктует нам все новые правила, и за ними мы можем перестать слышать себя. Чего хотите для себя Вы? В чем Ваше предназначение? Где Ваш путь?
Где Ваше место? Вы его выбираете, или место выбирает Вас?
Найти себя вы можете в
ЖК Резиденция Морей - быть на своем месте, месте у моря.
Узнать больше
#реклама
ssk-rezidenciya-morey.ru
О рекламодателе
🤔 Что содержит инкапсуляция кроме сокрытия данных?
1. Контроль доступа: использование модификаторов public, protected, private для ограничения доступа.
2. Инкапсуляция логики: методы класса предоставляют контролируемый интерфейс для работы с данными.
3. Сохранение целостности: защита данных от некорректных изменений извне.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Какие виды уязвимости знаешь?
В веб-разработке существует множество уязвимостей, но самые распространенные
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>
Ставь 👍 и забирай 📚 Базу знаний+4
3 причины открыть ИИС в Финаме уже сегодня
Откройте индивидуальный инвестиционный счет (ИИС) в Финаме и получите расширенные возможности для формирования личного капитала.
Вы получаете сразу 3 преимущества:
✅ до 22% налогового вычета на внесённые средства
✅ дополнительную премию до 102 000 руб. за инвестиции от Финама
✅ 0% комиссия за покупку ценных бумаг на Московской бирже
Счет открывается онлайн за несколько минут. Управлять инвестициями можно самостоятельно через личный кабинет или с помощью готовых продуктов в мобильном приложении FinamTrade.
👍 Используйте все преимущества ИИС — оставьте заявку на открытие счета и начните уверенное движение к финансовым целям!
Подробнее
Финансовые услуги оказывает: АО «Инвестиционная компания «ФИНАМ».
#реклама
broker.finam.ru
О рекламодателе
🤔 Какая разница между self и this?
self в PHP используется для обращения к текущему классу, включая статические методы и свойства, тогда как this ссылается на конкретный экземпляр класса. self подходит для работы с общими (статическими) членами класса, а this — для доступа к данным объекта. self не может использоваться для динамических данных объекта, в отличие от this.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Расскажи о Unit tests
Unit-тесты (или модульные тесты) — это тесты, которые проверяют работу отдельных модулей (функций, классов, методов) в коде. Они позволяют убедиться, что каждый компонент программы работает правильно в изоляции от других частей системы.
🚩Зачем нужны Unit-тесты?
🟠Раннее выявление ошибок
тесты помогают обнаружить баги сразу после написания кода.
🟠Упрощение рефакторинга
при изменении кода можно быстро проверить, не сломалось ли что-то.
🟠Уверенность в качестве кода
тесты показывают, что функции работают так, как задумано.
🟠Автоматизация тестирования
можно запускать тесты автоматически перед каждым релизом.
🟠Документирование кода
тесты помогают понять, как должна работать функция.
🚩Как писать Unit-тесты в PHP?
В PHP для написания тестов чаще всего используют PHPUnit – это популярный фреймворк для модульного тестирования.
Устанавливаем через Composer:
composer require --dev phpunit/phpunit
🚩Пример Unit-теста
Допустим, у нас есть функция в классе Calculator, которая складывает два числа
class Calculator {
public function add($a, $b) {
return $a + $b;
}
}
Теперь создадим тест для проверки работы метода add
use PHPUnit\Framework\TestCase;
class CalculatorTest extends TestCase {
public function testAdd() {
$calc = new Calculator();
$result = $calc->add(2, 3);
$this->assertEquals(5, $result);
}
}
🚩Запуск тестов
Чтобы запустить тест, используем команду
vendor/bin/phpunit tests
Ставь 👍 и забирай 📚 Базу знаний🤔 Что такое инкремент и декремент?
Инкремент (`++`) и декремент (`--`) — это операции в PHP и других языках программирования, которые увеличивают или уменьшают значение переменной на единицу соответственно.?
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
"Ты че, дурак?" – базовая реакция сеньора на тех, кто покупает IT курсы
Дело в том, что онлайн школы создают инкубаторных айтишников, которые в реальных условиях попросту зависнут.
Трушные ребята учатся на жизненных каналах для айтишников. Вот топ-5 от тимлида из Сбера:
⚙️ Технолоджия – для тех, кто хочет быть в курсе новостей в айти
🧠 Ai-чница – способы превратить нейросети в заработок $$$
💻 ИИ тебя заменит! – тенденции айти рынка в связке с нейросетями
4️⃣ Войти в IT – тонны бесплатного обучения для прогеров
😄 IT индус – сборник айти мемов
🤔 Зачем нужен шаблон Builder?
Builder — это порождающий шаблон проектирования, который разделяет процесс создания сложного объекта от его представления. Он позволяет создавать объекты пошагово и конфигурировать их гибко без необходимости передавать длинные списки параметров в конструктор.
🚩Зачем нужен Builder?
🟠Упрощает создание сложных объектов
Когда объект имеет много параметров, особенно опциональных (например, дом с разными опциями — бассейном, гаражом, садом).
🟠Избегает перегруженных конструкторов
Вместо того чтобы передавать кучу аргументов в конструктор (
new Car("red", 4, true, "diesel")), мы можем строить объект постепенно.
🟠Делает код читаемым и удобным
Позволяет явно видеть, какие параметры устанавливаются и какие можно добавить.
🚩Пример использования в PHP
Допустим, мы строим объект Car (Машина).
Проблема без Builder'а (длинный конструктор)
class Car {
public string $color;
public int $wheels;
public bool $sunroof;
public string $engine;
public function __construct(string $color, int $wheels, bool $sunroof, string $engine) {
$this->color = $color;
$this->wheels = $wheels;
$this->sunroof = $sunroof;
$this->engine = $engine;
}
}
$car = new Car("red", 4, true, "diesel"); // Что значат true и 4? Непонятно.
Решение с использованием Builder
class Car {
public string $color;
public int $wheels;
public bool $sunroof;
public string $engine;
private function __construct() {} // Закрываем прямой доступ к конструктору
public static function builder(): CarBuilder {
return new CarBuilder();
}
}
class CarBuilder {
private Car $car;
public function __construct() {
$this->car = new Car();
}
public function setColor(string $color): self {
$this->car->color = $color;
return $this;
}
public function setWheels(int $wheels): self {
$this->car->wheels = $wheels;
return $this;
}
public function setSunroof(bool $sunroof): self {
$this->car->sunroof = $sunroof;
return $this;
}
public function setEngine(string $engine): self {
$this->car->engine = $engine;
return $this;
}
public function build(): Car {
return $this->car;
}
}
// Использование
$car = Car::builder()
->setColor("red")
->setWheels(4)
->setSunroof(true)
->setEngine("diesel")
->build();
var_dump($car);
Ставь 👍 и забирай 📚 Базу знанийАйтишники, это вам — в телеграм есть комьюнити по каждому направлению в IT
Там есть буквально всё: чаты для общения, тонны материала(книги, курсы, ресурсы и гайды), свежие новости и конечно же мемы
Выбирайте своё направление:
💩 Frontend 🐍 Python
🐧 Linux 👩💻 С/С++
👩💻 C# 🤔 Хакинг & ИБ
📱 GitHub 🖥 SQL
👩💻 Сисадмин 🤟 DevOps
⚙️ Backend 🖥 Data Science
🧑💻 Java 🐞 Тестирование
🖥 PM / PdM 👩💻 GameDev
🧑💻 Golang 🤵♂️ IT-Митапы
🧑💻 PHP 💻 WebDev
🖥 Моб. Dev 🖥Анали.(SA&BA)
👩💻 Дизайн 🖥 Нейросети
💛 1C 🤓 Книги IT
➡️ Сохраняйте в закладки
🤔 Как посчитать функцию, если внутри неё много различных действий?
Алгоритм анализируется путём определения сложности каждого действия и их комбинирования. Итоговая сложность определяется доминирующим элементом.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Скан паспорта или фото бывшего? Выбирайте и выигрывайте
Сыграйте в игру, где нужно делать выбор между важными фото и получите шанс выиграть 300 000 ₽ на путешествие и ещё много сертификатов на шопинг
Подробнее
#реклама 16+
cloud.mail.ru
О рекламодателе
🤔 В чем отличие адаптера от декоратора?
Это структурные паттерны проектирования, которые используются в объектно-ориентированном программировании для решения различных задач по структурированию классов и объектов. Несмотря на то, что оба паттерна оборачивают другие объекты, их цели и способы применения различаются.
🚩Адаптер (Adapter)
Преобразовать интерфейс одного класса в интерфейс другого класса, который ожидают клиенты. Адаптер позволяет классам с несовместимыми интерфейсами работать вместе.
Адаптер реализует интерфейс, который должен быть представлен клиенту, и перенаправляет вызовы клиента к объекту с другим интерфейсом. Важно, что адаптер изменяет интерфейс взаимодействия, но не добавляет новую функциональность.
Вы разрабатываете приложение, которое должно использовать существующую библиотеку классов, интерфейсы которой не совместимы с остальной частью вашего приложения. Создав адаптер для этих классов, вы можете интегрировать библиотеку без изменения её кода или кода приложения.
🚩Декоратор (Decorator)
Динамически добавить новую функциональность объекту. В отличие от наследования, декораторы предоставляют гибкий способ расширения функциональности объекта во время выполнения.
Декоратор оборачивает исходный объект, предоставляя дополнительное поведение. Он имеет тот же базовый интерфейс, что и оборачиваемый объект, что позволяет использовать декораторы взаимозаменяемо с исходными объектами.
Вы разрабатываете систему уведомлений и хотите добавить возможность логирования или шифрования сообщений. Создав декораторы для базового класса отправки сообщений, вы можете легко добавить новую функциональность, обернув базовый объект отправки в один или несколько декораторов.
🚩Отличия
🟠Цель применения
Адаптер используется для обеспечения совместимости между различными интерфейсами, позволяя объектам с несовместимыми интерфейсами работать вместе. Декоратор добавляет новую функциональность объектам, не изменяя их интерфейсы.
🟠Изменение интерфейса
Адаптер изменяет интерфейс объекта для совместимости с другим интерфейсом. Декоратор не изменяет интерфейс, но добавляет новое поведение, сохраняя при этом оригинальный интерфейс объекта.
🟠Добавление функциональности
Декораторы предназначены для добавления новой функциональности объектам. Адаптеры не добавляют новую функциональность; их основная задача — обеспечить работу существующей функциональности через другой интерфейс.
Ставь 👍 и забирай 📚 Базу знаний
اکنون در دسترس! پژوهش تلگرام ۲۰۲۵ — مهمترین بینشهای سال 
