PHP | Вопросы собесов – Telegram
PHP | Вопросы собесов
2.43K subscribers
31 photos
1.09K links
Download Telegram
🤔 Что делает бэк-слеш перед глобальными функциями?

В PHP бэкслеш (\) перед именем функции или класса указывает, что мы обращаемся к глобальному пространству имён. Это важно, если код находится внутри namespace.

🚩Почему это важно?

🟠Пространства имён могут переопределять глобальные функции
Если внутри namespace есть функция с таким же именем, то PHP будет искать её внутри пространства имён, а не в глобальном пространстве.
namespace App;

function strlen($str) {
return "Фейковая длина строки";
}

echo strlen("Hello!"); // Выведет: "Фейковая длина строки"


🟠Бэкслеш заставляет PHP искать функцию в глобальном пространстве
Пример использования \ для вызова стандартной функции PHP
namespace App;

function strlen($str) {
return "Фейковая длина строки";
}

echo \strlen("Hello!"); // Выведет: 6 (из стандартной библиотеки PHP)


🟠Используется для ускорения работы кода
PHP не будет искать функцию внутри namespace, а сразу возьмёт глобальную версию. Это немного ускоряет выполнение.
namespace App;

$t1 = microtime(true);
for ($i = 0; $i < 1000000; $i++) {
time(); // PHP ищет в namespace, потом в глобальном
}
$t2 = microtime(true);
echo "Обычный вызов: " . ($t2 - $t1) . " секунд\n";

$t1 = microtime(true);
for ($i = 0; $i < 1000000; $i++) {
\time(); // PHP сразу берёт глобальную функцию
}
$t2 = microtime(true);
echo "С бэкслешем: " . ($t2 - $t1) . " секунд\n";


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Что такое индекс?

Индекс в контексте баз данных — это структура данных, которая улучшает скорость операций поиска/выборки данных, но может замедлить добавление, удаление и обновление данных из-за необходимости поддерживать индекс в актуальном состоянии.?

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Что такое вертикальное и масштабирование в БД?

Это два метода повышения производительности и пропускной способности баз данных.

🚩Вертикальное масштабирование (Vertical Scaling)

Вертикальное масштабирование, также известное как масштабирование "вверх" (scale up), предполагает улучшение производительности базы данных за счет увеличения ресурсов на одном сервере. Это может включать: Добавление большего объема оперативной памяти (RAM), Увеличение мощности процессора (CPU), Увеличение объема хранилища (SSD или HDD), Использование более быстрого сетевого оборудования

🟠Плюсы и минусы
Простота реализации
Легко выполнить, поскольку не требует изменения архитектуры приложения.
Единая точка управления
Администрирование базы данных проще, так как все данные находятся на одном сервере.
Ограничения оборудования
Есть пределы, до которых можно увеличивать ресурсы на одном сервере.
Единая точка отказа
Если сервер выходит из строя, вся база данных становится недоступной.

🟠Пример
Допустим, у вас есть сервер с 16 ГБ оперативной памяти и 4-ядерным процессором. Вертикальное масштабирование может включать замену его на сервер с 64 ГБ оперативной памяти и 16-ядерным процессором.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4💊1
🤔 Какие типы данных есть в PHP?

В PHP есть восемь основных типов данных: четыре скалярных (integer, float, string, boolean) и четыре составных (array, object, callable, iterable). Также существуют два специальных типа: `resource` для ссылок на внешние ресурсы и `null` для отсутствия значения. Эти типы данных позволяют гибко работать с различными структурами данных.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3💊1
🤔 В чем отличие между двойным и тройным равно?

🚩Примеры разницы между `==` и `===`

Сравнение чисел и строк
var_dump(5 == "5");  //  true (PHP приводит строку "5" к числу 5)
var_dump(5 === "5"); // false (5 - это int, "5" - это string)


Сравнение true и false
var_dump(0 == false);  //  true  (0 считается как false)
var_dump(0 === false); // false (0 - это int, а false - это bool)


Сравнение null
var_dump(null == false);  //  true  (PHP считает null как false)
var_dump(null === false); // false (null != boolean)


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какое отличие у протоколов TCP и UDP?

- TCP — надёжный, ориентирован на соединение:
- Гарантирует доставку и порядок.
- Используется для HTTP, FTP, SSH и т.п.
- Медленнее из-за проверок, подтверждений, управления потоком.
- UDP — ненадёжный, без соединения:
- Быстрее, но без гарантии доставки и порядка.
- Используется для видео/аудио-стриминга, игр, DNS, VoIP.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 В чем недостатки асинхронного шифрования?

Асинхронное шифрование (или шифрование с открытым ключом, например, RSA, ECC) использует два ключа:
Открытый ключ (Public Key) – для шифрования
Закрытый ключ (Private Key) – для расшифровки

🚩Основные недостатки асинхронного шифрования

🟠Медленнее, чем симметричное шифрование
Шифрование и расшифровка занимают больше времени, потому что алгоритмы (например, RSA) используют сложные математические операции (экспоненцирование и факторизацию).
AES (симметричное) в 100–1000 раз быстрее, чем RSA.

🟠Длина ключа больше → больше ресурсов
Чтобы обеспечить безопасность, RSA требует очень длинных ключей (2048+ бит).
Чем длиннее ключ, тем больше памяти и CPU требуется для вычислений.

🟠Уязвимость к квантовым атакам
Квантовые компьютеры смогут быстро взломать RSA и ECC с помощью алгоритма Шора.
AES-256 останется безопасным, но RSA-2048 можно будет взломать за несколько часов или минут.

🟠Усложнённое управление ключами
Нужно генерировать, хранить и передавать пары ключей.
Закрытый ключ нельзя потерять – иначе данные невозможно расшифровать.
Если злоумышленник завладеет закрытым ключом, он сможет расшифровать всю информацию.

🟠Атаки MITM и проблемы доверия
Открытый ключ может быть подменён злоумышленником (атака "человек посередине" – MITM).
Если хакер подменит публичный ключ, он сможет расшифровать данные.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊1
🤔 Что такое полиморфизм

Полиморфизм — это возможность использовать один и тот же метод или операцию для объектов разных классов, обрабатывая их по-разному. Он бывает двух типов: полиморфизм подтипов (через наследование) и параметрический полиморфизм (через дженерики). Полиморфизм помогает реализовать более универсальные и расширяемые программы, позволяя объектам работать с кодом через интерфейсы и абстрактные классы.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 В чем преимущество фасада?

Фасад (Facade) в PHP — это паттерн проектирования, который упрощает доступ к сложной системе классов, предоставляя единый интерфейс.

🚩Плюсы

Упрощает код
Фасад скрывает сложные детали реализации и предоставляет удобный интерфейс.
$logger = new Logger();
$db = new DatabaseConnection();
$mailer = new Mailer();

$user = new User($db, $logger, $mailer);
$user->register("example@example.com");


С фасадом (всё инкапсулировано в один класс)
$userFacade = new UserFacade();
$userFacade->register("example@example.com");


Ослабляет зависимость кода от реализации
Вы можете изменять внутреннюю структуру классов без влияния на клиентский код.

Улучшает поддержку и масштабируемость
- Если нужно добавить новую функциональность, можно просто изменить фасад, не переписывая весь код.
- Удобно при развитии проекта и подключении новых сервисов.

🚩Пример фасада в PHP

class PaymentGateway {
public function processPayment($amount) {
echo "Оплата на сумму $amount выполнена.\n";
}
}

class NotificationService {
public function sendNotification($message) {
echo "Отправлено уведомление: $message\n";
}
}

class OrderFacade {
private $payment;
private $notification;

public function __construct() {
$this->payment = new PaymentGateway();
$this->notification = new NotificationService();
}

public function placeOrder($amount) {
$this->payment->processPayment($amount);
$this->notification->sendNotification("Заказ оплачен на сумму $amount.");
}
}

// Использование
$order = new OrderFacade();
$order->placeOrder(1000);


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🤔 Какие типы БД бывают?

Базы данных делятся на реляционные (SQL) и нереляционные (NoSQL). Реляционные базы данных (например, MySQL, PostgreSQL) хранят данные в виде таблиц и используют SQL для запросов. Нереляционные базы данных (например, MongoDB) используют разные модели данных (документы, ключ-значение и т.д.), что делает их более гибкими для работы с большими объёмами данных и неструктурированной информацией.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какой принцип нарушает Active Record?

Это популярный шаблон проектирования, который используется для взаимодействия с базой данных. Он сочетает в себе логику бизнес-модели и работу с базой данных в одном объекте. Несмотря на свою популярность и удобство, Active Record нарушает принцип разделения ответственности (Single Responsibility Principle, SRP) из SOLID.

🚩Почему Active Record нарушает SRP?

SRP гласит, что класс должен иметь только одну причину для изменения, то есть заниматься только одной задачей.
🟠Логика бизнес-модели
Класс хранит правила и поведение, связанные с сущностью (например, вычисления, валидации, связи).
🟠Работа с базой данных
Класс отвечает за взаимодействие с базой данных, включая CRUD-операции (создание, чтение, обновление, удаление), построение SQL-запросов и т. д.

Таким образом, Active Record совмещает две разные ответственности: бизнес-логику и взаимодействие с базой данных. Если изменится структура базы данных или логика обработки данных, класс придется менять, что нарушает SRP.
class User extends ActiveRecord {
public function getFullName() {
return $this->first_name . ' ' . $this->last_name;
}

public function saveUser() {
$this->save(); // Метод сохранения в базе данных
}
}


🚩Альтернатива

Чтобы соблюсти SRP, можно разделить бизнес-логику и работу с базой данных на разные уровни:
🟠Data Mapper
Отвечает только за преобразование данных между объектами и базой данных.
🟠Сервисы
Обрабатывают бизнес-логику.

class User {
private $firstName;
private $lastName;

public function __construct($firstName, $lastName) {
$this->firstName = $firstName;
$this->lastName = $lastName;
}

public function getFullName() {
return $this->firstName . ' ' . $this->lastName;
}
}

class UserMapper {
public function save(User $user) {
// SQL-запрос для сохранения данных
}
}


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Есть ли какое-то различие между одинарными и двойными кавычками?

- В большинстве языков программирования разницы нет.
- В PHP двойные кавычки позволяют интерполировать переменные, а одинарные – нет.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🤔 Что такое Cookies в PHP?

Cookies (Куки) – это небольшие файлы, которые браузер сохраняет на компьютере пользователя и отправляет серверу при каждом запросе.

🚩Как работают Cookies?

Установка Cookie в PHP
setcookie("username", "Alice", time() + 3600, "/");


Чтение Cookie в PHP
echo $_COOKIE["username"]; //  Alice


Удаление Cookie
setcookie("username", "", time() - 3600, "/");


🚩Где используются Cookies?

Авторизация (сохранение логина).
Запоминание настроек (тема, язык).
Корзина товаров (если нет сессий).
Отслеживание пользователей (Google Analytics, реклама).

🚩Ограничения и безопасность Cookies

Максимальный размер – 4KB (поэтому для больших данных лучше использовать SESSION).
Можно изменить в браузере (поэтому не храните пароли в куках!).
Уязвимость XSS → если сайт подвержен XSS-атакам, злоумышленник может украсть куки.
Защита Cookies
setcookie("secure_cookie", "value", time() + 3600, "/", "", true, true);


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🤔 Для чего предназначены форматы запросов и ответов приложения?

Форматы запросов и ответов обеспечивают обмен данными между клиентом и сервером.
Популярные форматы:
- JSON – компактный, удобный для API.
- XML – читаемый, часто используется в SOAP.
- YAML – удобен для конфигураций.
- Protobuf – бинарный, эффективный для высоконагруженных систем.
Форматы обеспечивают унифицированное взаимодействие между различными сервисами.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊1
🤔 Что такое namespaces?

Это механизм, позволяющий организовать код в логические группы и избежать конфликтов имен, особенно в больших проектах или при использовании сторонних библиотек.

🚩Зачем они нужны?

🟠Избежание конфликтов имен
В больших проектах могут быть сотни классов, функций и констант. Пространства имен помогают избежать ситуаций, когда разные части кода используют одинаковые имена.

🟠Упрощение организации кода
Они позволяют группировать связанные классы, интерфейсы, функции и константы, что делает код более читаемым и поддерживаемым.

🟠Упрощение автозагрузки
Пространства имен облегчают использование автозагрузчиков, таких как PSR-4, где классы и файлы организованы в соответствии с их пространствами имен.

🚩Как их использовать?

Для использования пространств имен, нужно объявить их в начале файла с помощью ключевого слова namespace.
<?php
namespace MyProject\Models;

class User {
public function getName() {
return "John Doe";
}
}
?>

Теперь класс User находится в пространстве имен MyProject\Models. Чтобы использовать этот класс в другом файле, нужно указать его полное имя:
<?php
require 'User.php';

$user = new \MyProject\Models\User();
echo $user->getName();
?>

Можно также использовать ключевое слово use для упрощения кода:
<?php
require 'User.php';

use MyProject\Models\User;

$user = new User();
echo $user->getName();
?>

Пространства имен могут содержать не только классы, но и функции и константы:
<?php
namespace MyProject\Utils;

const PI = 3.14;

function calculateCircleArea($radius) {
return PI * $radius * $radius;
}
?>

Использование этих элементов будет аналогичным:
<?php
require 'Utils.php';

echo \MyProject\Utils\calculateCircleArea(5);
echo \MyProject\Utils\PI;
?>


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Что такое списочный тип?

Это структура данных, представляющая упорядоченный набор элементов, где каждый элемент связан с предыдущим и следующим.
1. Пример — связанный список (linked list), где каждый узел содержит значение и ссылку на следующий узел.
2. Такие типы обеспечивают удобное добавление и удаление элементов, но имеют медленный доступ по индексу (O(n)).


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from easyoffer
Новая фича на easyoffer Автоотлики

Вы автоматически откликаетесь на подходящие вам вакансии. Попробуйте её бесплатно и начните получать больше предложений о работе.

🚀 Запуск занимаем всего 3 минуты, а экономит очень много времени
🛡 Это безопасно: easyoffer официально одобрен HeadHunter и прошел его модерацию.
🥷🏻 Автоотклик незаметен для рекртера. Автоотклик ничем не отличается от обычного отклика, который вы делаете вручную

Рекрутеры давно используют автоматизацию для поиска кандидатов. Так почему вы должны откликаться вручную?

💡Совет – Добавьте шаблон сопроводительного письма, чтобы откликаться на большее количество вакансий (на некоторые вакансии нельзя откликнуться без сопроводительного)

Попробовать бесплатно → https://easyoffer.ru/autoapply
🤔 Зачем использовать Rest , если есть Soup?

SOAP (Simple Object Access Protocol) и REST (Representational State Transfer) – это два подхода для обмена данными между клиентом и сервером (API).

SOAP появился раньше, но REST стал более популярным, потому что он проще, быстрее и гибче.

🚩Почему REST лучше в большинстве случаев?

🟠REST проще и легче
SOAP использует сложные XML-сообщения с заголовками и схемами, что делает запросы более громоздкими.
REST использует JSON или XML, что делает его быстрее и удобнее.
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<getUser>
<id>123</id>
</getUser>
</soap:Body>
</soap:Envelope>


Пример запроса в REST (короче и проще)
GET /users/123 HTTP/1.1
Host: api.example.com


🟠REST быстрее и легче для веба
SOAP требует больше ресурсов, потому что использует XML + сложные заголовки.
REST работает по HTTP и использует JSON, который легче парсится в браузере и мобильных приложениях.

🟠REST лучше интегрируется с веб-технологиями
SOAP требует специальных библиотек (WSDL, WS-Security).
REST использует обычные HTTP-методы:
- GET – получить данные
- POST – создать
- PUT – обновить
- DELETE – удалить

🟠REST масштабируемый и кроссплатформенный
REST легко работает с JavaScript, мобильными приложениями (iOS, Android), браузерами и фронтендом.
SOAP чаще используется в корпоративных системах (банки, госструктуры), но хуже подходит для современных веб-приложений.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🤔 Как устроен типичный тест на opening point?

Тест на Opening Point проверяет, корректно ли открывается доступ к ресурсу.
Он может включать:
- Авторизацию – доступ пользователя после входа.
- Перенаправления – корректный редирект при попытке входа.
- Доступность URL – проверка HTTP-ответа (например, 200 OK).
- Безопасность – отсутствие утечек при открытии ресурса.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Что такое декремент?

декремент — это операция, используемые для увеличения или уменьшения значения переменной на единицу соответственно.

🚩Декремент

Оператор уменьшает значение переменной на единицу. Он представлен двумя минусами (--). Так же, как и инкремент, декремент бывает двух видов:

🟠Префиксный декремент (`--x`)
Сначала уменьшает значение переменной на единицу, затем возвращает новое значение.
🟠Постфиксный декремент (`x--`)
Возвращает текущее значение переменной, а затем уменьшает его на единицу.

<?php
$x = 10;
$y = 10;

// Пример префиксного инкремента
echo ++$x; // Выводит 11, x теперь равен 11

// Пример постфиксного инкремента
echo $y++; // Выводит 10, y теперь равен 11
echo $y; // Выводит 11

// Пример префиксного декремента
echo --$x; // Выводит 10, x теперь равен 10

// Пример постфиксного декремента
echo $y--; // Выводит 11, y теперь равен 10
echo $y; // Выводит 10
?>


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Что такое CQRS?

Это архитектурный паттерн, который разделяет операции чтения и записи на разные модели данных. Это улучшает производительность, масштабируемость и упрощает поддержку.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1