TGViewer
Channel Public Channel
PHP | Вопросы собесов

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

@easy_php_ru

Сайт: https://easyoffer.ru/
Все каналы: t.me/+xGeAw6ckJ4liYzQy

Контакт для рекламы: @sendme_ads
Subscribers
2.3K
Photos
36
Videos
0
Links
1.5K

Showing posts older than #2039 · Back to latest

Older Posts 20 shown
Post #2038 468
🤔 В чем отличие между двойным и тройным равно?

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

Сравнение чисел и строк
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)


Ставь 👍 и забирай 📚 Базу знаний
  • 👍 3
Post #2037 465
🤔 Как устроен типичный тест на opening point?

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


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Post #2036 465
🤔 Как типы связи реализуются в Larevel?

В Laravel связи между моделями реализуются через Eloquent ORM. Eloquent предоставляет удобные методы для работы с отношениями (relations) между таблицами в базе данных.

🚩Один к одному (`One to One`)
Каждая модель User имеет один Profile.
class User extends Model
{
public function profile()
{
return $this->hasOne(Profile::class);
}
}


В модели Profile
class Profile extends Model
{
public function user()
{
return $this->belongsTo(User::class);
}
}


Теперь можно получить профиль пользователя так
$user = User::find(1);
$profile = $user->profile; // Получаем профиль пользователя


🟠Один ко многим (`One to Many`)
Каждый Post может иметь много Comment.
В модели Post
class Post extends Model
{
public function comments()
{
return $this->hasMany(Comment::class);
}
}


В модели Comment
class Comment extends Model
{
public function post()
{
return $this->belongsTo(Post::class);
}
}


Теперь можно получить все комментарии к посту:
$post = Post::find(1);
$comments = $post->comments; // Коллекция комментариев


🟠Многие ко многим (`Many to Many`)
Каждый User может подписаться на несколько Role, и наоборот.
В Laravel для связи многие ко многим нужна промежуточная таблица role_user (название должно быть singular_singular в алфавитном порядке).
В модели User
class User extends Model
{
public function roles()
{
return $this->belongsToMany(Role::class);
}
}


В модели Role
class Role extends Model
{
public function users()
{
return $this->belongsToMany(User::class);
}
}


Теперь можно получить роли пользователя:
$user = User::find(1);
$roles = $user->roles;


Добавить роль:
$user->roles()->attach($roleId);


Удалить роль
$user->roles()->detach($roleId);


Синхронизировать (удалить старые и добавить новые):
$user->roles()->sync([1, 2, 3]);


🟠Связь через другую таблицу (`Has One / Has Many Through`)
Например, у нас есть Country, User, Post. Мы хотим получить все посты в стране.
class Country extends Model
{
public function posts()
{
return $this->hasManyThrough(Post::class, User::class);
}
}


Теперь можно получить все посты страны
$country = Country::find(1);
$posts = $country->posts;


🟠Полиморфные связи (`Polymorphic Relations`)
Позволяет разным моделям использовать одну таблицу для хранения данных.

Пример: у нас есть Post и Video, к которым могут быть Comment
В модели Comment
class Comment extends Model
{
public function commentable()
{
return $this->morphTo();
}
}


В модели Post
class Post extends Model
{
public function comments()
{
return $this->morphMany(Comment::class, 'commentable');
}
}


В модели Video
class Video extends Model
{
public function comments()
{
return $this->morphMany(Comment::class, 'commentable');
}
}


Использование
$post = Post::find(1);
$post->comments()->create(['content' => 'Отличный пост!']);

$video = Video::find(1);
$video->comments()->create(['content' => 'Крутое видео!']);


Ставь 👍 и забирай 📚 Базу знаний
  • 🔥 2
Post #2035 441
🤔 Что известно про наследование?

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


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Post #2034 799
🤔 Какие уровни изоляции ты знаешь?

Уровни изоляции в системах управления базами данных (СУБД) определяют, как операции транзакций видят и взаимодействуют с изменениями, внесенными другими параллельно выполняющимися транзакциями. Эти уровни изоляции помогают контролировать различные виды аномалий, таких как грязное чтение, неповторяющееся чтение и фантомные чтения. В стандарте SQL существует четыре основных уровня изоляции:

🚩Read Uncommitted (чтение незафиксированных данных)

Этот уровень изоляции позволяет транзакциям видеть изменения других транзакций, даже если эти изменения еще не зафиксированы. Наименее строгий уровень изоляции, с наибольшей вероятностью возникновения аномалий.
Аномалии: Грязное чтение (Dirty Read): Транзакция может прочитать данные, которые были изменены другой транзакцией, но еще не зафиксированы.

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;


🚩Read Committed (чтение зафиксированных данных)

Транзакция может видеть только те изменения, которые были зафиксированы другими транзакциями. Средний уровень изоляции, который предотвращает грязные чтения, но допускает другие аномалии.
Аномалии: Неповторяющееся чтение (Non-repeatable Read): Транзакция может дважды прочитать одно и то же значение и получить разные результаты, если другая транзакция изменила данные и зафиксировала изменения между двумя чтениями.

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;


🚩Repeatable Read (повторяемое чтение)

Транзакция гарантирует, что если она читает данные, они останутся неизменными до завершения транзакции. Более строгий уровень изоляции, который предотвращает грязные и неповторяющиеся чтения, но не предотвращает фантомные чтения.
Аномалии: Фантомное чтение (Phantom Read): Транзакция может получить разные результаты при выполнении одного и того же запроса, если другая транзакция добавляет или удаляет строки, которые соответствуют условиям запроса.

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;


🚩Serializable (сериабельность)

Самый строгий уровень изоляции, который эмулирует последовательное выполнение транзакций. Полностью предотвращает грязные чтения, неповторяющиеся чтения и фантомные чтения.
Аномалии: Никаких аномалий. Все транзакции выполняются так, как если бы они были выполнены последовательно.

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;


Ставь 👍 и забирай 📚 Базу знаний
  • 👍 1
Post #2033 432
🤔 Что такое traits?

Traits — это механизм PHP, который позволяет использовать повторно код в разных классах, без необходимости наследования. Traits содержат методы, которые можно внедрить в классы, что позволяет избегать дублирования кода. Они особенно полезны для разделения функциональности между классами, которые не могут наследоваться напрямую.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
  • 👍 2
Post #2032 473
🤔 В чем преимущество фасада?

Фасад (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);


Ставь 👍 и забирай 📚 Базу знаний
Post #2031 455
🤔 Имеет ли значение регистр заголовка?

Нет, не имеет.
В HTTP заголовки регистронезависимы.
Например, Content-Type, content-type, CONTENT-TYPE — это одно и то же.
Но значения заголовков могут быть чувствительны к регистру — зависит от конкретного поля.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Post #2030 529
🤔 Какие есть виды 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;


Ставь 👍 и забирай 📚 Базу знаний
  • 👍 1
Post #2029 458
🤔 Что такое Entity?

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

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
  • 👍 1
Post #2028 525
🤔 Что такое списочный тип?

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

🚩Особенности

🟠Упорядоченность
Элементы в списке хранятся в определенном порядке, и этот порядок сохраняется. Каждый элемент имеет индекс, по которому к нему можно обратиться.

🟠Изменяемость
Списки обычно являются изменяемыми структурами данных, что означает, что вы можете добавлять, удалять или изменять элементы после создания списка.

🟠Гетерогенность
В списке могут храниться элементы различных типов данных (например, числа, строки, объекты).

🚩Примеры списочных типов в различных языках программирования

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)


🚩Плюсы

➕Гибкость
Списки позволяют легко добавлять, удалять и изменять элементы.
➕Удобство использования
Простейшие операции над списками, такие как добавление или удаление элементов, обычно реализуются стандартными методами или функциями.
➕Поддержка индексов
Доступ к элементам по индексу позволяет эффективно манипулировать данными.

Ставь 👍 и забирай 📚 Базу знаний
  • 💊 3
  • 👍 2
Post #2027 457
🤔 Что такое ООП?

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

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
  • 👍 1
Post #2026 460
🤔 Что такое агрегат?

Агрегат – это термин, часто используемый в области баз данных и программирования, который обозначает способ группировки данных для выполнения различных операций, таких как суммирование, подсчёт, нахождение среднего значения и другие. В реляционных базах данных агрегаты применяются для выполнения агрегатных функций, таких как SUM(), COUNT(), AVG(), MAX(), MIN() и других.

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

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

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

🚩Примеры использования агрегатных функций:

Суммирование (SUM):
-- Получение общей суммы всех заказов
SELECT SUM(total_amount) AS total_sales
FROM orders;


Подсчёт (COUNT):
-- Подсчёт общего количества заказов
SELECT COUNT(*) AS total_orders
FROM orders;


Среднее значение (AVG):
-- Нахождение средней суммы заказа
SELECT AVG(total_amount) AS average_order_value
FROM orders;


Максимальное значение (MAX):
-- Нахождение максимальной суммы заказа
SELECT MAX(total_amount) AS max_order_value
FROM orders;


Минимальное значение (MIN):
-- Нахождение минимальной суммы заказа
SELECT MIN(total_amount) AS min_order_value
FROM orders;


🚩 Группировка данных с использованием GROUP BY:

Для более сложных запросов можно использовать агрегатные функции вместе с оператором GROUP BY, чтобы группировать данные по определённому критерию. В этом запросе результаты будут сгруппированы по customer_id, и для каждого клиента будет рассчитана общая сумма заказов.
-- Получение общей суммы заказов для каждого клиента
SELECT customer_id, SUM(total_amount) AS total_sales_per_customer
FROM orders
GROUP BY customer_id;


Ставь 👍 и забирай 📚 Базу знаний
  • 👍 2
Post #2024 455
🤔 Реализация Fibonacci с рекурсией или без?

1. С рекурсией: проще написать, но требует больше памяти из-за вложенных вызовов.
2. Без рекурсии: итеративный метод или использование динамического программирования, эффективнее с точки зрения производительности.
3. Выбор зависит от задачи: рекурсия подходит для демонстрации, итерация — для практических целей.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
  • 👍 2
Post #2023 513
🤔 Что есть кроме микросервисной и монолитной архитектуры?

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

🚩Service-Oriented Architecture (SOA) – Сервисно-ориентированная архитектура

- Это переходный вариант между монолитом и микросервисами.
- В SOA приложение делится на крупные сервисы (например, "Платежи", "Пользователи", "Заказы").
- Все сервисы взаимодействуют через ESB (Enterprise Service Bus) – специальный слой для связи между сервисами.
Для крупных корпоративных систем, где много интеграций.
Когда нужна централизованная логика взаимодействия сервисов.

🚩Serverless (Бессерверная архитектура)

- Код выполняется в облаке, а не на собственных серверах.
- Программист пишет функции (FaaS – Function as a Service), которые выполняются по запросу.
- Серверы управляются автоматически (AWS Lambda, Google Cloud Functions).
Когда нужно автоматическое масштабирование (например, обработка миллионов событий).
Для маленьких ивентовых задач (обработка файлов, уведомления, API-эндпоинты).

🚩Event-Driven Architecture (EDA) – Событийно-ориентированная архитектура

- Компоненты системы не вызывают друг друга напрямую, а общаются через события.
- Используется*message broker (Kafka, RabbitMQ, Redis Pub/Sub) для передачи данных.
В нагруженных системах, где много событий (банковские системы, биржи).
Когда нужна гибкость и асинхронность.

Ставь 👍 и забирай 📚 Базу знаний
  • 👍 3
Post #2022 465
🤔 Какую проблему решают фабрика и фабричный метод?

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

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Post #2020 511
🤔 Зачем использовать 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 чаще используется в корпоративных системах (банки, госструктуры), но хуже подходит для современных веб-приложений.

Ставь 👍 и забирай 📚 Базу знаний
  • 👍 2
Post #2019 446
🤔 Какие типы объединений есть в таблицах?

Типы объединений: INNER JOIN (только совпадающие строки), LEFT JOIN (все строки из левой таблицы), RIGHT JOIN (все строки из правой таблицы), FULL JOIN (объединение всех строк обеих таблиц), CROSS JOIN (декартово произведение), SELF JOIN (объединение таблицы с самой собой).


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Post #2018 490
Завтра последний день!

Успей купить пожизненный easyoffer PRO - по цене 1 года

Покупаешь один раз — пользуешься всю жизнь.

👉 Акция до 31 марта: https://easyoffer.ru/pro
Post #2017 442
🤔 Какие протоколы ты знаешь?

Протоколы в сетевых системах обеспечивают правила передачи данных. Они работают на разных уровнях модели OSI и TCP/IP. Вот основные виды протоколов:

🚩Основные виды протоколов

🟠Физический и канальный уровни
Ethernet: Передача данных по проводным сетям.
Wi-Fi (IEEE 802.11): Беспроводная передача данных.
PPP (Point-to-Point Protocol): Соединение между двумя узлами.
HDLC (High-Level Data Link Control): Передача данных на канальном уровне.

🟠Сетевой уровень
IP (Internet Protocol): Основной протокол для передачи данных в интернете (IPv4 и IPv6).
ICMP (Internet Control Message Protocol): Передача сообщений об ошибках и контроля.

🟠Транспортный уровень
TCP (Transmission Control Protocol): Надежная передача данных.
UDP (User Datagram Protocol): Быстрая, но ненадежная передача данных.

🟠Сеансовый и представительный уровни
SSL/TLS (Secure Sockets Layer / Transport Layer Security): Обеспечение безопасности передачи данных.
NetBIOS: Работа сетевых приложений в локальных сетях.

🟠Прикладной уровень
HTTP/HTTPS (HyperText Transfer Protocol / Secure): Передача веб-страниц.
FTP (File Transfer Protocol): Передача файлов.
SMTP (Simple Mail Transfer Protocol): Передача электронной почты.
POP3/IMAP: Получение электронной почты.
DNS (Domain Name System): Преобразование доменных имен в IP-адреса.
SSH (Secure Shell): Безопасное удаленное управление серверами.
SNMP (Simple Network Management Protocol): Управление сетевыми устройствами.
LDAP (Lightweight Directory Access Protocol): Доступ и управление каталогами.
DHCP (Dynamic Host Configuration Protocol): Динамическое назначение IP-адресов.

🟠Специализированные протоколы
VoIP (Voice over IP): Передача голосовых данных (SIP, RTP).
MQTT (Message Queuing Telemetry Transport): Обмен сообщениями в IoT.
CoAP (Constrained Application Protocol): Работа с ограниченными устройствами в IoT.

Ставь 👍 и забирай 📚 Базу знаний
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →