Библиотека собеса по PHP | вопросы с собеседований
3.39K subscribers
139 photos
2 videos
69 links
Вопросы с собеседований по PHP и ответы на них.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/9f3affba

Работать у нас: https://job.proglib.io/

Наши каналы: https://yangx.top/proglibrary/9197
加入频道
Какие строковые функции вы знаете?

echo() — Выводит одну или несколько строк
explode() — Разбить строку на массив
ltrim() — Удаляет лишние символы или пробелы с левой стороны строки.
parse_str() — Разбирает строку запроса на переменные
str_replace() — Заменяет указанные символы строки
str_split() — Разбивает строку на массив символов
str_word_count() — Количество слов в строке
strlen() — Вычисляет длину строки
strncmp() — Сравнивает первые несколько символов строки

Остальные функции можно посмотреть в документации.
Что такое PEAR в PHP?

PEAR (PHP Extension and Application Repository) в PHP — это структурированный репозиторий, который предоставляет библиотеки и расширения для языка программирования PHP. PEAR упрощает установку, использование и распространение таких библиотек и расширений.

Основные компоненты PEAR включают в себя:

Пакеты (Packages): Это представляет собой библиотеки или расширения, которые могут быть установлены и использованы в PHP-приложениях.

Метаданные (Metadata): Информация о каждом пакете, такая как его зависимости, версии и описание.

Командный интерфейс (Command-Line Interface): Инструменты командной строки для управления пакетами, установки и обновления.

Репозиторий (Repository): Это хранилище, в котором хранятся все пакеты и метаданные, доступные для установки.

Следует отметить, что в последнее время PEAR утратил свою популярность в сообществе PHP в связи с появлением современных инструментов управления зависимостями, таких как Composer. Composer стал более распространенным выбором для управления зависимостями в PHP-проектах.
Самые полезные каналы для программистов в одной подборке!

Сохраняйте себе, чтобы не потерять 💾

🔥Для всех

Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы
Азбука айтишника — здесь мы познаем азы из мира программирования

🤖Про нейросети
Библиотека робототехники и беспилотников | Роботы, ИИ, интернет вещей
Библиотека нейрозвука | Транскрибация, синтез речи, ИИ-музыка
Библиотека нейротекста | ChatGPT, Gemini, Bing
Библиотека нейровидео | Sora AI, Runway ML, дипфейки
Библиотека нейрокартинок | Midjourney, DALL-E, Stable Diffusion

#️⃣C#

Книги для шарпистов | C#, .NET, F#
Библиотека шарписта — полезные статьи, новости и обучающие материалы по C#
Библиотека задач по C# — код, квизы и тесты
Библиотека собеса по C# — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel

☁️DevOps

Библиотека devops’а — полезные статьи, новости и обучающие материалы по DevOps
Вакансии по DevOps & SRE
Библиотека задач по DevOps — код, квизы и тесты
Библиотека собеса по DevOps — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования

🐘PHP

Библиотека пхпшника — полезные статьи, новости и обучающие материалы по PHP
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты

🐍Python

Библиотека питониста — полезные статьи, новости и обучающие материалы по Python
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты

Java

Книги для джавистов | Java
Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков

👾Data Science

Книги для дата сайентистов | Data Science
Библиотека Data Science — полезные статьи, новости и обучающие материалы по Data Science
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту

🦫Go

Книги для Go разработчиков
Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go

🧠C++

Книги для C/C++ разработчиков
Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++

💻Другие каналы

Библиотека фронтендера
Библиотека мобильного разработчика
Библиотека хакера
Библиотека тестировщика
Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности
Библиотека разработчика игр | Gamedev, Unity, Unreal Engine

📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈

Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT

Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *

* Организация Meta запрещена на территории РФ
Какая разница между реляционными и нереляционными СУБД?

Реляционные и нереляционные (NoSQL) базы данных отличаются в нескольких аспектах.

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

2. Масштабируемость: Реляционные СУБД обычно масштабируются вертикально, то есть путем увеличения производительности и объема ресурсов на одной физической машине. Нереляционные СУБД часто масштабируются горизонтально, позволяя добавлять новые узлы кластера для увеличения производительности и объема данных.

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

4. Скорость и производительность: Реляционные СУБД хорошо подходят для сложных запросов, которые требуют обработки связанных данных и использования операторов соединения. Нереляционные СУБД обеспечивают высокую производительность при относительно простых запросах к данным, поскольку они использованием предварительно индексированных структур данных и горизонтального масштабирования.

Использование реляционных или нереляционных СУБД зависит от конкретных требований проекта. Реляционные СУБД обычно используются для сложных и связанных данных, требующих точной структуры и строгих правил целостности. Нереляционные СУБД, с другой стороны, полезны для гибкости, масштабируемости и производительности в случаях, когда данные могут быть неструктурированными или номадными.
Для чего используется функция header()?

Функция header() в PHP используется для отправки HTTP-заголовков из сервера в браузер.

Основные случаи использования функции header() в PHP включают:

1. Установка статуса и заголовков ответа сервера:
В этом примере функция header() устанавливает статус ответа на «200 OK» и тип содержимого на «application/json».

2. Управление кешированием:
В этом примере функция header() устанавливает заголовки, которые предотвращают кеширование страницы в браузере.

3. Перенаправление пользователя на другую страницу:
В этом примере функция header() выполняет перенаправление пользователя на указанный URL.

4. Установка cookie:
В этом примере функция header() устанавливает cookie с именем «name» и значением «value», а также указывает срок и путь доступа к cookie.

Важно отметить, что функция header() должна быть вызвана до вывода любого другого содержимого на страницу, включая пробелы и переносы строк, чтобы гарантировать успешное отправление заголовков.
Можете ли вы объяснить процесс создания и использования пакетов Laravel?

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

Вот как можно создать и использовать пакеты в Laravel:

Шаг 1: Создание пакета

1.1 Создание структуры пакета

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

1.2 composer.json для пакета

Файл composer.json для пакета важен, потому что через него пакет регистрируется и управляется зависимостями. Этот файл содержит информацию о пакете, включая пространство имен (psr-4), тип пакета (чаще всего library), и зависимости.

1.3 Автозагрузка классов пакета

Laravel использует стандарт PSR-4 для автозагрузки классов. В файле composer.json указывается, что все классы, которые находятся в директории src, будут автоматически загружены с использованием пространства имен VendorName\PackageName.

1.4 Регистрация сервис-провайдера
Если пакет предоставляет определенную функциональность, его нужно зарегистрировать в Laravel через сервис-провайдер.

В register() обычно регистрируются зависимости пакета (сервисы, репозитории и т. д.), а в boot() — выполнение действий, необходимых после загрузки всех сервисов (маршруты, миграции и т. д.).

Шаг 2: Подключение пакета в проект Laravel

2.1 Установка пакета


После того, как пакет создан, его можно подключить к проекту Laravel через composer. Если вы публикуете пакет в общедоступное хранилище, например, на Packagist, то можно просто выполнить команду:
composer require vendor_name/package_name


Если же пакет находится локально, можно добавить его в файл composer.json проекта.

После этого выполняется команда composer update, которая подтянет ваш локальный пакет в проект.

2.2 Регистрация сервис-провайдера

Если в пакете есть сервис-провайдер, Laravel автоматически его зарегистрирует через автодискавер. Однако, если по каким-то причинам автодискавер не используется, сервис-провайдер можно зарегистрировать вручную в файле config/app.php.

2.3 Публикация ресурсов пакета

Многие пакеты содержат ресурсы, которые нужно публиковать, например, конфигурационные файлы, миграции, переводы. Это делается с помощью команды Artisan
php artisan vendor:publish --provider="VendorName\PackageName\PackageServiceProvider"

Эта команда скопирует ресурсы пакета в соответствующие директории вашего приложения.

Шаг 3: Использование функциональности пакета

После того, как пакет установлен и зарегистрирован, его функционал становится доступным в проекте Laravel. Например, если пакет содержит маршруты, они автоматически подключатся, или если пакет предоставляет определенные классы и сервисы, вы можете использовать их в своем коде.
Что такое конструктор и деструктор в PHP?

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

Garbage Collector (GC) — это механизм в PHP, который автоматически освобождает память, занятую объектами, которые больше не используются в программе. Он следит за объектами в памяти и удаляет те, на которые нет ссылок или которые больше не доступны из текущего контекста программы.

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

При вызове GC есть несколько моментов, которые могут быть полезны:

1. Когда вы закончили использовать большой объем памяти, который является временным. Например, если вы обрабатываете большие файлы или создаете множество объектов в цикле, вызов GC после завершения таких операций поможет освободить память.

2. Когда у вас есть длительное время выполнения скрипта и вы опасаетесь, что память может исчерпаться. Хотя GC автоматически выполняет свою работу, вызов GC в явном виде может помочь освободить память раньше, чем это произойдет автоматически.

3. Когда вы создаете циклическую ссылку между объектами и планируете разорвать эти ссылки. В этом случае вызов GC может помочь устранить утечку памяти, освободив объекты с циклическими ссылками.

Важно отметить, что вызов GC не всегда является оптимальным решением и может повлиять на производительность. Поэтому обычно рекомендуется позволить GC работать автоматически и вызывать его только в особых случаях, когда это необходимо.
Можете ли вы объяснить, как реализовать управление доступом на основе ролей в приложении Laravel?

Управление доступом на основе ролей (RBAC, Role-Based Access Control) — это широко используемый подход для ограничения доступа пользователей к различным функциям приложения в зависимости от их ролей. В Laravel RBAC можно реализовать с помощью встроенных механизмов авторизации и прав доступа. Для реализации управления доступом на основе ролей (RBAC) в Laravel нужно выполнить следующие шаги:

Создание моделей и таблиц для ролей и прав:

Создайте модели и миграции для ролей и прав. Пользователь может иметь несколько ролей, а роли — несколько прав.

🔸Настройка отношений:

Установите связи между пользователями, ролями и правами (отношения «многие ко многим»). Это позволит каждому пользователю иметь одну или несколько ролей, а ролям — содержать разные права.

🔸Проверка ролей и прав:

В модели пользователя добавьте методы для проверки, есть ли у него определённая роль или право. Это позволит гибко управлять доступом в коде приложения.

🔸Использование Middleware:

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

🔸Опционально: использование пакетов:

Можно использовать готовые решения, например, пакет [Spatie Laravel Permission], который упрощает работу с ролями и правами.

В результате вы сможете ограничивать доступ к различным частям приложения в зависимости от роли пользователя или его прав.
Вакансии «Библиотеки программиста» — ждем вас в команде!

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

Подробности тут

Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴

Ждем ваших откликов 👾
Сравните исключения компиляции и рантайма. Как они называются?

Проверенное исключение — это исключение, возникающее во время компиляции. Поскольку игнорировать этот тип исключения невозможно, с ним необходимо обращаться осторожно. С другой стороны, непроверяемое исключение — это то, которое возникает во время выполнения. Если проверенное исключение не обрабатывается, оно становится непроверенным исключением.
Что такое Memcache и Memcached? Можно ли использовать один экземпляр Memcache между несколькими проектами PHP?

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

Memcache — это пространство для хранения данных, и Memcache можно запускать на одном или нескольких серверах. Следовательно, можно использовать один экземпляр Memcache в нескольких проектах.

Можно настроить клиент для взаимодействия с отдельным набором экземпляров. Таким образом, также допускается запуск двух разных процессов Memcache на одном хосте. Несмотря на то, что оба таких процесса выполняются на одном и том же хосте, они остаются независимыми, если только нет раздела данных.
Что такое Path Traversal?

Path Traversal (также известный как Directory Traversal или файловая трансверсия) в PHP — это уязвимость безопасности, при которой злоумышленник может попытаться получить доступ к файлам или директориям за пределами предназначенной области. Это может произойти, если приложение неправильно обрабатывает пользовательский ввод в пути файлов.

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

В приведенном выше коде, если параметр file передается через URL, злоумышленник может использовать символы «../» для перехода на уровень выше и получения доступа к файлам за пределами заданной директории.

Для предотвращения атак Path Traversal важно правильно обрабатывать и валидировать пользовательский ввод, особенно при работе с файловой системой. Рекомендуется использовать абсолютные пути и проверять, что запрошенные ресурсы находятся в пределах ожидаемой области файловой структуры. Также полезно ограничивать права доступа к файлам и директориям на сервере.
Как управлять транзакциями базы данных в Laravel и почему они важны?

В Laravel управление транзакциями баз данных является важным механизмом, который позволяет гарантировать целостность данных при выполнении нескольких связанных SQL-запросов. Это особенно актуально в случаях, когда необходимо выполнить несколько операций, и все они должны либо успешно завершиться, либо ни одна не должна быть выполнена (если что-то пошло не так).

Основные понятия и причины важности транзакций:

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

Целостность данных: Транзакции защищают данные от некорректных состояний, если в ходе выполнения запросов возникают ошибки, например, сбои в работе приложения или отказ базы данных.

Консистентность: Важным аспектом является поддержание данных в согласованном состоянии, даже если приложение работает в многопользовательском режиме, где множество пользователей могут одновременно изменять данные.

Изолированность операций: Laravel использует уровни изоляции транзакций, которые помогают предотвращать гонки данных и другие проблемы параллелизма.

Как управлять транзакциями в Laravel:

1. Использование метода DB::transaction()
Laravel предоставляет удобный способ управлять транзакциями с помощью метода DB::transaction(). Этот метод принимает замыкание (closure), внутри которого можно выполнять несколько запросов к базе данных. Если одна из операций завершится неудачно, все изменения откатятся.

Пример:
use Illuminate\Support\Facades\DB;

DB::transaction(function () {
DB::table('users')->update(['balance' => 1000]);
DB::table('orders')->insert([
'user_id' => 1,
'amount' => 1000
]);
});


В этом примере Laravel автоматически начнёт транзакцию перед выполнением запросов и либо зафиксирует (commit) её в конце, либо откатит (rollback), если будет выброшено исключение.

2. Откат транзакции вручную
Иногда может потребоваться вручную откатить транзакцию, если необходимо обработать специфические условия ошибки:
use Illuminate\Support\Facades\DB;

DB::transaction(function () {
DB::table('users')->update(['balance' => 1000]);

// Если что-то пошло не так, откатываем транзакцию
if (someConditionFails()) {
DB::rollBack();
}

DB::table('orders')->insert([
'user_id' => 1,
'amount' => 1000
]);
});


3. Использование явного начала и завершения транзакции
Если нужно более гибкое управление транзакциями, можно использовать методы DB::beginTransaction(), DB::commit() и DB::rollBack() для явного начала и завершения транзакции:
use Illuminate\Support\Facades\DB;

try {
DB::beginTransaction();

DB::table('users')->update(['balance' => 1000]);
DB::table('orders')->insert([
'user_id' => 1,
'amount' => 1000
]);

DB::commit(); // Подтверждаем изменения
} catch (\Exception $e) {
DB::rollBack(); // Откатываем изменения, если произошла ошибка
throw $e;
}


4. Использование транзакций в асинхронных операциях
Транзакции также поддерживаются в асинхронных заданиях (jobs) и событиях, где необходимо гарантировать выполнение всех операций без ошибок.

Преимущества использования транзакций:

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

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

Простота использования: Laravel предоставляет очень удобный синтаксис для работы с транзакциями, что снижает вероятность ошибок и упрощает код.
Объясните разницу между запросами GET и POST.

В веб-разработке с использованием PHP, запросы GET и POST представляют собой два основных метода передачи данных между клиентом (браузером) и сервером. Они различаются по способу передачи данных и некоторым другим аспектам. Вот основные различия между ними:

Параметры в URL:

GET: Параметры передаются в URL. Например: example.com/page.php?name=John&age=25.
POST: Параметры передаются в теле запроса и не видны в URL.

Безопасность:

GET: Менее безопасен, потому что параметры видны в URL, и они могут быть сохранены в истории браузера или логах сервера. Не следует использовать для передачи чувствительных данных.
POST: Более безопасен, так как данные передаются в теле запроса и не отображаются в URL.

Ограничение размера данных:

GET: Ограничен по размеру URL, и многие браузеры имеют ограничения на длину URL.
POST: Не имеет таких ограничений, и большие объемы данных могут быть переданы через этот метод.

Кэширование:

GET: Результаты запроса могут быть закэшированы браузером.
POST: Не кэшируется, и каждый запрос считается уникальным.

Использование:

GET: Обычно используется для получения данных от сервера. Параметры могут быть видны в URL.
POST: Часто используется для отправки данных на сервер, например, при отправке форм.
В чем разница между операторами DISTINCT и GROUP BY?

Операторы DISTINCT и GROUP BY в SQL используются для обработки уникальных значений, но они выполняют разные функции.

DISTINCT применяется к столбцам в операторе SELECT и возвращает уникальные значения в этом столбце.
Он удаляет дубликаты из результирующего набора.

GROUP BY также применяется к столбцам в операторе SELECT, но он используется для группировки строк по значениям в указанных столбцах.
Он позволяет применять агрегатные функции, такие как COUNT, SUM, AVG, и т.д., к каждой группе.

Таким образом, основное различие заключается в том, что DISTINCT просто возвращает уникальные значения из столбца, в то время как GROUP BY используется для группировки строк на основе значений столбца и применения агрегатных функций к этим группам.

Пример:
Допустим, у нас есть таблица «orders» с колонками «customer_id» и «total_price». Если мы хотим узнать общую сумму покупок для каждого клиента, мы бы использовали GROUP BY. Если же мы хотим получить уникальные идентификаторы клиентов, мы бы использовали DISTINCT
Как вы интегрируете сторонние сервисы с Laravel, и можете ли вы привести пример?

Интеграция сторонних сервисов с Laravel обычно включает в себя использование API, библиотек или SDK. Один из распространенных примеров — интеграция с сервисом отправки электронных писем, таким как Mailgun.

Пример интеграции Mailgun с Laravel

Установка пакета: Для начала можно установить библиотеку для работы с Mailgun через Composer:

composer require mailgun/mailgun-php


Конфигурация: Затем нужно добавить ключи API и домен Mailgun в файл .env:

MAILGUN_DOMAIN=your-domain.com
MAILGUN_SECRET=your-mailgun-key


Настройка почтовой конфигурации: В файле config/mail.php нужно установить драйвер для отправки писем:
'default' => env('MAIL_DRIVER', 'mailgun'),


Отправка письма: Теперь можно использовать встроенные функции Laravel для отправки письма. Например:

use Illuminate\Support\Facades\Mail;

Mail::raw('Hello, this is a test email!', function ($message) {
$message->to('[email protected]')
->subject('Test Email');
});


Обработка ошибок

Также важно обрабатывать возможные ошибки, которые могут возникнуть при отправке, например, неправильные ключи API или недоступность сервиса.
Что такое хэш-функция и где она используется?

Хэш-функция в PHP — это алгоритм, который принимает входные данные (например, строку или файл) и возвращает фиксированный набор символов, который обычно представляет собой строку фиксированной длины. Результат, полученный от хэш-функции, обычно называют хэшем или хэш-значением.

Основные характеристики хэш-функций:

Фиксированная длина вывода: Хэш-функции возвращают хэш с постоянной длиной, независимо от размера входных данных.

Эффективность: Для любых входных данных вычисление хэш-функции должно быть быстрым.

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

В PHP существует множество хэш-функций, таких как MD5, SHA-1, SHA-256, SHA-512 и др. Они широко используются в различных областях программирования:

1️⃣Хранение паролей: Хэш-функции часто используются для хранения паролей пользователей в базах данных. Вместо хранения самих паролей, системы хранят их хэши. При проверке пароля введенного пользователем, система хэширует введенный пароль и сравнивает его с сохраненным хэшем.

2️⃣Цифровые подписи и проверка целостности данных: Хэш-функции используются для создания цифровых подписей и проверки целостности данных. Например, в криптографических протоколах, таких как HMAC (Hash-based Message Authentication Code).

3️⃣Контроль целостности файлов: Хэш-функции позволяют проверить, не были ли изменены файлы. Путем сохранения хэшей файлов и их сравнения в последующем, можно обнаружить любые изменения.

4️⃣Хэширование данных в хранилищах и поисковых индексах: Хэш-функции используются для быстрого поиска и сравнения данных, таких как в хэш-таблицах.

Важно отметить, что для хэширования паролей в PHP рекомендуется использовать функцию password_hash(), которая обеспечивает дополнительные меры безопасности. Избегайте использования устаревших хэш-функций, таких как MD5 и SHA-1, в критических сценариях, так как они считаются небезопасными.
💻🔍💼 Кризис IT-рынка: как джуны и кадровый голод меняют правила игры

В условиях нехватки опытных специалистов и наплыва джунов, IT-компании вынуждены искать нестандартные подходы к найму. Рассмотрим основные тренды и стратегии адаптации рынка.

Читать статью

#почитать
Что делает «@» в PHP?

В PHP символ «@» используется как оператор управления ошибками. Если «@» предшествует выражению или оператору, он подавляет любые сообщения об ошибках или предупреждения, которые обычно генерируются этим выражением. Его часто называют «оператором тишины».

Например, рассмотрим следующий код:

$result = @file_get_contents('nonexistentfile.txt');

В данном случае, если файл nonexistentfile.txt не существует, функция file_get_contents обычно вызвала бы предупреждение. Однако, предварив его символом «@», предупреждение подавляется. Переменная $result будет содержать false, и сообщение об ошибке не будет отображено.

Хотя оператор управления ошибками может быть удобен в определенных ситуациях, его использование следует осуществлять с осторожностью. Подавление ошибок может затруднить диагностику и устранение проблем в коде, так как вы не получите обратную связь о возможных проблемах. Общепринятым подходом является явная обработка ошибок с использованием блоков try-catch или других соответствующих механизмов обработки ошибок, а не полагаться на «@» для подавления ошибок.
Опишите три основных типа ошибок в PHP

В PHP ошибки делятся на три основных типа:

Уведомления (Notices):

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

Предупреждения (Warnings):

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

Фатальные ошибки (Fatal Errors):

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

Обработка ошибок:
Для обработки ошибок в PHP разработчики могут использовать функции обработки ошибок, такие как set_error_handler() для определения пользовательской обработки ошибок, error_reporting() для установки уровня отчетности об ошибках, а также блоки try, catch и finally для обработки исключений в PHP 7 и более поздних версиях.