Библиотека собеса по PHP | вопросы с собеседований
3.18K subscribers
177 photos
5 videos
118 links
Вопросы с собеседований по PHP и ответы на них.

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

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

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
Что такое инкремент и декремент, в чем разница между префиксным и постфиксным инкрементом и декрементом?

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

В PHP инкремент выполняется с помощью операторов ++, а декремент — с помощью операторов --.

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

Префиксный инкремент и декремент: Оператор ++ или — ставится перед переменной (++$x, --$x). При этом сначала происходит изменение значения переменной, а затем возвращается новое значение.

Постфиксный инкремент и декремент: Оператор ++ или — ставится после переменной ($x++, $x--). При этом сначала возвращается текущее значение переменной, а затем происходит изменение значения переменной.
Назовите 3-4 нормальные формы реляционных БД.

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

Первая нормальная форма (1NF): В этой форме все атрибуты в таблице являются атомарными, то есть каждая ячейка содержит только одно значение.

Вторая нормальная форма (2NF): Вторая нормальная форма требует, чтобы каждый неключевой атрибут полностью зависел от ключа, то есть не должно быть частичной зависимости.

Третья нормальная форма (3NF): В этой нормальной форме устраняются транзитивные зависимости. Это означает, что если A зависит от B, а B зависит от C, то A не должно зависеть от C.

Бойса-Кодда нормальная форма (BCNF): Это расширение третьей нормальной формы, которое гарантирует, что каждое неключевое поле зависит только от ключа целиком, а не от его части.

Эти нормальные формы представляют собой последовательные шаги в процессе нормализации, который помогает в проектировании эффективных и надежных реляционных баз данных.
Что такое Cohesion и Coupling?

Cohesion и Coupling — это два ключевых понятия в проектировании программного обеспечения.

Cohesion (качественная связанность) обозначает меру того, насколько хорошо связаны между собой элементы системы. Чем выше уровень cohesion, тем лучше организована система, и тем проще ее понимать и поддерживать. Высокий уровень cohesion достигается, когда компоненты в системе обладают сильной функциональной связью, а каждый компонент выполняет свои задачи наилучшим образом.

Coupling (связность) обозначает меру зависимости между элементами системы. Чем выше уровень coupling, тем сложнее поддерживать систему, т. к. любые изменения в одной ее части приведут к изменениям в других частях. Высокий уровень coupling может привести к тому, что система станет очень сложной и нестабильной. Низкий уровень coupling достигается, когда компоненты системы не зависят друг от друга и могут быть изменены без повлияния на другие компоненты.

В целом, проектирование системы должно стремиться к высокой cohesion и низкому coupling. Для этого можно использовать различные подходы и паттерны проектирования, такие как SOLID, DRY, YAGNI, TDD и другие. Важно учитывать каждый элемент системы и продумывать его связи с другими элементами.
Напишите программу для валидации адреса электронной почты

Вы можете использовать встроенную функцию filter_var() с фильтром FILTER_VALIDATE_EMAIL

Эта программа будет выводить либо «$email является действительным адресом электронной почты.», либо «$email не является действительным адресом электронной почты.», в зависимости от того, является ли предоставленный адрес электронной почты действительным.

Вы можете заменить «example@example.com» на любой адрес электронной почты, который вы хотите проверить.
Как передаются переменные (по значению или по ссылке)?

В PHP переменные могут передаваться как по значению, так и по ссылке.

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

Однако, PHP также предоставляет возможность передавать переменные по ссылке, используя символ '&' перед переменной при ее передаче в функцию или присваивании другой переменной. Когда переменная передается по ссылке, функция или другая переменная работают с тем же экземпляром переменной, и изменения внутри функции или на другой переменной отражаются на оригинальной переменной.
Время прокачать алгоритмы с 40-процентной скидкой до конца октября

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

🔹 В курсе ты научишься:

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

🤔 Решаешь задачи только в тг каналах? Пройди курс и отправляйся на реальные собеседования!

🔗 Подробнее о курсе
Что такое простая фабрика?

Простая фабрика (Simple Factory) — это порождающий шаблон проектирования, который предоставляет интерфейс для создания объектов в зависимости от переданного типа или параметра. В контексте PHP, простая фабрика может быть использована для создания экземпляров классов без явного указания конкретного класса в коде.

Простая фабрика обычно содержит метод, который принимает параметр (например, строку или число), определяющий тип создаваемого объекта, и затем возвращает экземпляр соответствующего класса. Это упрощает процесс создания объектов и позволяет легко изменять создаваемый тип объекта без изменения кода, где объект используется.
👍2🥱1
Как вы понимаете REST?

REST (Representational State Transfer) — это архитектурный стиль, используемый для проектирования распределенных систем, в основе которого лежат принципы работы с ресурсами через стандартные операции HTTP.

В контексте PHP, REST используется для создания веб-сервисов или API (интерфейсов программирования приложений), которые обрабатывают запросы от клиентов и предоставляют данные в формате, который может быть легко интерпретирован и использован другими приложениями или сервисами.

В PHP реализация REST API часто основана на использовании фреймворков, таких как Laravel, Symfony или Slim Framework. Эти фреймворки предоставляют инструменты для обработки маршрутов, запросов HTTP и ответов, а также для работы с базами данных и другими источниками данных.

Основные принципы REST включают в себя следующее:

Ресурсы (Resources): Каждый компонент API представляет собой ресурс, например, пользователя, товар или комментарий.

Методы HTTP (HTTP Methods): Операции, которые можно выполнять над ресурсами, соответствуют стандартным методам HTTP, таким как GET (получение данных), POST (создание нового ресурса), PUT (обновление существующего ресурса) и DELETE (удаление ресурса).

Представление (Representation): Ресурсы представлены в формате, который может быть интерпретирован клиентом, обычно в виде JSON или XML.

Состояние (Stateless): Каждый запрос к серверу должен содержать всю необходимую информацию для его выполнения. Сервер не должен сохранять состояние между запросами от одного и того же клиента.

Однородный интерфейс (Uniform Interface): Единый интерфейс для взаимодействия с ресурсами, что делает API более гибким и расширяемым.

Набор гипермедиа (Hypermedia as the Engine of Application State, HATEOAS): Предоставление клиенту ссылок на доступные действия и ресурсы, что позволяет клиенту динамически взаимодействовать с API без необходимости знания всех возможных конечных точек заранее.
🥱1
Можно ли компоновать traits в trait?

В PHP, с версии 5.4 и выше, поддерживаются трейты (traits), которые позволяют компоновать поведение в классах без необходимости наследования. Трейты могут использоваться для компоновки поведения внутри других трейтов, что может быть полезным для структурирования и организации кода.

В приведенном примере трейт TraitC использует (use) два других трейта (TraitA и TraitB) и предоставляет дополнительный метод methodC. Класс Example затем использует трейт TraitC, что позволяет ему наследовать все методы из TraitA, TraitB и TraitC.

Таким образом, в PHP можно компоновать трейты внутри других трейтов для организации и переиспользования кода.
👍2🌚1
[Git] Зачем команда git bundle?

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

Основные случаи использования git bundle:

1. Передача репозитория офлайн:

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

2.Обновление репозитория офлайн:

Если нужно синхронизировать изменения между двумя репозиториями без доступа к сети, можно упаковать изменения в bundle и передать его.

3. Создание резервной копии:

git bundle может использоваться для создания архива репозитория с сохранением всей истории.

4. Доставка изменений:

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

Примеры использования:
Создание полного архива репозитория:

git bundle create my-repo.bundle --all

Здесь флаг --all указывает, что нужно упаковать все ветки и историю.

Упаковка определённой ветки:

git bundle create my-feature.bundle main

Это создаст архив с содержимым только ветки main.

Проверка содержимого bundle:

git bundle verify my-repo.bundle

Проверяет, что файл корректен и пригоден для использования.

Клонирование из bundle:

git clone my-repo.bundle my-new-repo
👍2
Что такое вариативная функция или spread-оператор?

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

Например, вариативная функция может быть объявлена следующим образом(фото 1)

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

Например, spread-оператор можно использовать следующим образом(фото 2)

В этом примере массив $numbers распаковывается с помощью spread-оператора и его элементы передаются в вариативную функцию sum в качестве отдельных аргументов.
2
💡 Задача с собесеседования

Недавно в одном известном всем банке кандидату была предложена задача:

Есть клиент, который за месяц делает 1000 транзакций.
Нужно посчитать вероятность того, что среди них окажется хотя бы одна дублирующаяся сумма, если каждая сумма округляется до 2 знаков после запятой.


Вероятности, распределения, матожидание, градиенты — всё это может всплыть на интервью, и даже в продовых задачах.

🎓 Proglib запускает экспресс-курс «Математика для Data Science» — для тех, кто хочет закрыть эти пробелы и понять математику быстро, качественно и без боли.

🔍 На курсе вас ждет:

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

📅 Старт: 6 ноября
Формат: 10 вебинаров и 3 практических проекта
💬 Поддержка: менторы + Telegram-чат
💰 Стоимость: 37 000 ₽ (есть рассрочка)

🔗 Узнать больше и записаться
🥱2
Какова цель функции «array_map» в PHP и как её использовать?

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

В этом примере функция square() применяется к каждому элементу массива $numbers с использованием array_map(), что приводит к созданию нового массива $squaredNumbers, где каждый элемент является квадратом соответствующего элемента исходного массива.
😵‍💫 Устал от бесконечной подготовки к собесам?

Тогда залетай к нам, есть задачка попроще.

Пройди в нашем боте мини-тест по математике и узнай, готов ли ты к Data Science или стоит что-то подтянуть.

📱 Перейти в бота
Концепция окружений в Symfony

В Symfony окружения (environments) — это контексты, в которых работает приложение, позволяя адаптировать его под разные задачи, такие как разработка, тестирование или продакшн.

Типы окружений: Основные — dev (разработка), prod (продакшн), test (тестирование). Можно создавать свои.
Конфигурации: Каждая среда может иметь определенные конфигурационные файлы в каталоге config/, например:
config/packages/dev/ для среды dev.
config/packages/prod/ для среды prod.
config/packages/test/ для тестовой среды.
Эти файлы переопределяют конфигурацию по умолчанию в config/packages/ или config/services.yaml.
Переменные окружения: Переменная APP_ENV указывает, какое окружение используется (dev, prod, test).
Логи и кэш: Для каждого окружения свои директории логов и кэша.
Режим отладки: В dev включены отладка и инструменты разработчика. В prod — отключены для повышения безопасности и производительности.
Зачем нужно: Окружения обеспечивают разделение задач, безопасность и оптимизацию приложения под разные цели.
👍1
🔥 Новый курс «Математика для Data Science»

Записывайтесь до 19.10 и получите бонус-курс «Школьная математика» для быстрого освежения знаний! 🚀

🧠 Эксперты-спикеры на курсе:

▫️ Диана Миронидис — преподаватель ВШЭ, автор Яндекс Практикума;

▫️ Ксения Кондаурова — преподаватель Центрального Университета (Т-Банк);

▫️ Маргарита Бурова — академический руководитель программ Wildberries & Russ.

👉🏻 Не упустите шанс улучшить свои навыки
🌚1👾1
В чем разница между криптографическими функциями md5(), crc32() и sha1() в PHP?

В PHP md5(), crc32() и sha1() — это все криптографические хеш-функции, но они имеют различия в размере вывода, стойкости к коллизиям и алгоритмах.

md5():

md5() создает хеш-значение размером 128 бит (16 байт).
Широко используется для контрольных сумм и криптографических хеш-функций.
Однако из-за обнаруженных уязвимостей, его больше не рекомендуется использовать для криптографических целей, где требуется надежная защита от коллизий.

crc32():

crc32() генерирует 32-битное (4 байта) контрольное значение циклической избыточности (CRC).
Обычно используется для проверки ошибок в передаче данных.
Не подходит для криптографических целей из-за отсутствия криптографической надежности и высокой вероятности коллизий, особенно для коротких входных данных.

sha1():

sha1() создает хеш-значение размером 160 бит (20 байт).
Более безопасен, чем md5() и crc32(), но также подвержен атакам на коллизии.
В некоторых приложениях все еще используется, но обычно считается менее безопасным, чем более современные алгоритмы хеширования, такие как SHA-256 или SHA-512.
💥 Математика, которая не «для галочки»

Разработали курс «Математика для Data Science» специально для вас — чтобы закрыть все пробелы в математике и уверенно пройти любое собеседование на позицию Data Scientist.

🧠 За 2 месяца ты разберёшь:

➡️ линейную алгебру — работа с векторами и матрицами, их разложения, собственные значения и обратные матрицы;

➡️ мат. анализ — пределы, производные, экстремумы, применение градиентного спуска;

➡️ теорию вероятностей и статистику — случайные величины, распределения, статистические гипотезы, A/B-тесты;

➡️ математику в ML и аналитике — как использовать всё это в алгоритмах, логистической регрессии, методах ближайших соседей, байесовских подходах.

📚 Формат: 10 вебинаров, 3 практических проекта, тесты и чат с менторами.

🔥 При оплате до 19 октября получите курс по базовой математике в подарок.

🔗 Записаться на курс
Для чего используется переменная $_REQUEST?

Переменная $_REQUEST является суперглобальным массивом, который используется для сбора данных из HTML-форм или URL-адресов. Это комбинация массивов $_GET, $_POST и $_COOKIE. Собранные данные могут быть параметрами, переданными через методы HTTP GET или POST.

Вот разбор того, что представляет собой каждый из этих методов:

$_GET: Данные, отправленные через строку запроса URL. Они видны всем и имеют ограничение на объем передаваемых данных.

$_POST: Данные, отправленные через HTTP POST-запрос, обычно из HTML-формы с использованием метода POST. Эти данные не видны в URL-адресе и могут передавать больший объем данных по сравнению с $_GET.

$_COOKIE: Данные, хранящиеся в файлах cookie браузера пользователя.

$_REQUEST позволяет получать доступ к данным независимо от того, как они были отправлены, будь то запрос GET (параметры URL), запрос POST (отправка формы) или cookie. Однако полагаться исключительно на $_REQUEST иногда может привести к проблемам с безопасностью, поскольку он объединяет различные источники пользовательского ввода. Обычно рекомендуется использовать явно $_GET, $_POST или $_COOKIE в зависимости от предполагаемого использования и источника данных, поскольку это обеспечивает большую ясность и безопасность.