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

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

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

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
Что такое Docker? Каков принцип его работы?

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

Принцип работы Docker
Docker использует технологии изоляции, предоставляемые ядром Linux, такие как cgroups и namespaces, для создания легковесных и изолированных контейнеров. Контейнеры используют общее ядро хостовой операционной системы, что позволяет запускать их с минимальными накладными расходами по сравнению с традиционными виртуальными машинами.
Основные компоненты Docker:

Docker Daemon (dockerd): Служба, управляющая контейнерами и образами.
Docker Client (docker): Интерфейс командной строки для взаимодействия с Docker Daemon.
Docker Images: Шаблоны, содержащие все необходимые компоненты для запуска приложений.
Docker Containers: Запущенные экземпляры Docker Images, изолированные друг от друга.
Docker Registry: Репозиторий для хранения и распространения Docker Images.

Преимущества использования Docker:
Портативность: Контейнеры можно запускать на любой системе с установленным Docker, обеспечивая консистентность окружений.
Изоляция: Каждое приложение работает в своем контейнере, что предотвращает конфликты между зависимостями.
Масштабируемость: Docker облегчает масштабирование приложений путем запуска нескольких экземпляров контейнеров.
Быстрота развертывания: Контейнеры запускаются быстрее, чем традиционные виртуальные машины, что ускоряет процессы разработки и тестирования.

Как Docker используется в разработке PHP-приложений:
Для PHP-разработчиков Docker предоставляет возможность создавать контейнеры с необходимыми версиями PHP, веб-серверами (например, Nginx или Apache) и базами данных (например, MySQL или PostgreSQL). Это позволяет разработчикам создавать локальные окружения, идентичные продакшн-средам, что минимизирует проблемы, связанные с различиями в конфигурациях. Инструмент Docker Compose позволяет описывать многоконтейнерные приложения, что упрощает настройку и управление такими окружениями.
3
[Git] Какой командой можно сделать ресет изменений, не потеряв их?

Чтобы отменить изменения и при этом не потерять их в Git, можно использовать команду git reset с флагом --soft или --mixed, или команду git restore. Вот основные варианты:

1. git reset --soft
Эта команда откатит последний коммит, но все изменения останутся в области подготовленных изменений (staging area), так что их можно будет заново закоммитить:

git reset --soft HEAD^

Здесь HEAD^ указывает на последний коммит, от которого нужно сделать откат. Если хотите откатить несколько коммитов, можно использовать HEAD~N, где N — количество коммитов для отката.

2. git reset --mixed
Эта команда откатит последний коммит и вернет изменения в рабочую директорию, но они будут убраны из staging area. То есть файлы останутся изменёнными, но их придётся снова добавлять командой git add перед коммитом:

git reset --mixed HEAD^

Флаг --mixed также используется по умолчанию, поэтому его можно опустить.

3. git restore для работы с отдельными файлами
Если вы хотите снять изменения только с определённых файлов, не трогая весь коммит, используйте команду git restore:

🔸Перенос файла из staging area в рабочую директорию (убрать из подготовленных изменений):

git restore --staged <имя_файла>

🔸Отмена всех изменений в файле (возврат к состоянию из коммита):

git restore <имя_файла>

Эти команды удобны, если нужно отменить изменения по отдельным файлам или управлять состоянием рабочей директории без потерь.
👍1
Что такое позднее статическое связывание?

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

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

Для его использования в PHP можно воспользоваться ключевыми словами static или self. Ключевое слово static ссылается на класс, в котором был вызван метод, а self используется для обращения к методам текущего класса, игнорируя изменения методов в дочерних классах.

Пример использования позднего статического связывания в PHP на фото.
2🌚1
Переворачиваем календарь — а там скидки, которые уже закончились.

Но мы их вернули на последний день 🤔

До 00:00 третьего сентября (цены как до 1 сентября):

▪️ Математика для Data Science — 35.199 ₽ вместо 44.900 ₽
▪️ Алгоритмы и структуры данных — 31.669 ₽ вместо 39.900 ₽
▪️ Основы IT — 14.994 ₽ вместо 19.900 ₽
▪️ Архитектуры и шаблоны — 24.890 ₽ вместо 32.900 ₽
▪️ Python — 24.990 ₽ вместо 32.900 ₽
▪️ ML для Data Science — 34.000 ₽ вместо 44. 000 ₽
▪️ AI-агенты — 49.000 ₽ вместо 59.000 ₽

👉 Хватаем скидки из прошлого

P.S. Машину времени одолжили у дяди Миши
Стоит ли возвращать null из методов. Если нет, то почему и как писать код в таких случаях?

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

Если метод не может вернуть ожидаемый результат или найти запрошенное значение, то лучше выбросить исключение, чтобы проинформировать о такой ситуации и позволить соответствующей обработке ошибок или выполнению альтернативных действий. Если метод не может найти результат, который можно обозначить специальным значением, можно вернуть значение-заглушку, которое явно указывает на отсутствие результата или ошибку. Это может быть пустой массив, пустой объект, пустая строка или целое число, имеющее конкретное значение, которое в вашем контексте обозначает отсутствие результата.
🤔3🌚3😢1
Что может содержать интерфейс?

В PHP интерфейс является объявлением, которое определяет список методов, которые должны быть реализованы классами, которые реализуют этот интерфейс. Интерфейс не содержит реализации методов, он просто указывает, какие методы должны быть доступны в классе.

Интерфейс может содержать следующие элементы:

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

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

Наследование интерфейсов: Интерфейсы могут наследовать другие интерфейсы, что позволяет создавать иерархии интерфейсов.

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

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

Голосуйте, какой у вас уровень разработчика:

😁 — 5-12 баллов (стажер)
👍 — 13-25 баллов (джуниор)
⚡️ — 26-40 баллов (джуниор+)
👏 — 41-60 баллов (миддл)
🔥 — 61-80 баллов (миддл+)
🎉 — 81-100 баллов (сеньор)
🤩 — 100+ баллов (тимлид)

Но вот в чем прикол — опытный разработчик набирает баллы не случайными косяками, а осознанными решениями.

👉 Научим, как быстро прокачаться от стажера до сеньора
🥱1
Что такое рекурсия?

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

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

Это может быть полезно, например, при обходе древовидных структур данных, алгоритмах перебора и т.д.
🎮 КВЕСТОВАЯ ЛИНИЯ: «Путь Data Scientist'а»

⮕ Твой стартовый набор искателя данных:
Python — твое легендарное оружие (урон по багам +∞)
Математика — твой базовый интеллект (влияет на понимание алгоритмов)
Машинное обучение — твое дерево навыков (открывает новые способности)


⚡️ АКТИВЕН ВРЕМЕННЫЙ БАФФ: «Щедрость наставника»

Эффект: –30% к цене полного набора ДСника
Было: 121.800 ₽ → Стало: 84.900 ₽

☞ Что ждет тебя в этом квесте

— Получение артефактов: портфолио проектов и сертификаты— Прокачка от новичка до Senior Data Scientist— Босс-файты с реальными задачами из индустрии— Доступ к гильдии единомышленников


📎 Забрать бафф
Рассрочки: 3 мес | 6 мес | 12 мес
Что такое Laravel Forge и как он помогает в развертывании приложений Laravel?

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

Основные функции и возможности Laravel Forge:

✔️Автоматическое управление серверами: Laravel Forge позволяет автоматически создавать и настраивать серверы в облачных сервисах, таких как DigitalOcean, Linode, AWS, Vultr, Hetzner и других. После настройки Forge берет на себя администрирование сервера и обеспечивает его безопасную работу.

✔️Развертывание приложений: Forge позволяет развертывать Laravel-приложения напрямую из репозиториев, например GitHub, GitLab или Bitbucket. Это автоматизирует процесс развертывания кода, включая миграции базы данных и другие настройки, требуемые приложением.

✔️Управление конфигурацией сервера: Forge автоматически настраивает на сервере стек веб-технологий, включая Nginx, PHP, MySQL или PostgreSQL и Redis. Это позволяет разработчику сосредоточиться на приложении, не углубляясь в системное администрирование.

✔️SSL-сертификаты: Forge поддерживает автоматическую установку SSL-сертификатов от Let's Encrypt. Это позволяет обеспечить безопасное соединение через HTTPS для всех сайтов, развернутых на сервере, и выполняется буквально за несколько кликов.

✔️Мониторинг и автоматизация задач: Laravel Forge интегрируется с New Relic и Papertrail для мониторинга производительности и логов. Также можно настраивать cron-задачи и выполнять различные автоматизированные задачи, что очень удобно для регулярного обслуживания приложений (например, для отправки email-рассылок или чистки кэша).

✔️Бэкапы баз данных: Forge позволяет автоматизировать резервное копирование баз данных с возможностью хранения этих данных в облачных хранилищах, например в Amazon S3.

✔️Firewall и безопасность: Forge автоматически настраивает брандмауэр на сервере, ограничивая доступ к важным портам и повышая уровень безопасности сервера.

Преимущества использования Laravel Forge

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

Пример процесса развертывания с помощью Laravel Forge

🔸Создание сервера через Forge (например, на DigitalOcean).
🔸Автоматическая установка необходимого ПО (Nginx, PHP, MySQL и т.д.).
🔸Подключение репозитория и развертывание приложения.
🔸Настройка домена и установка SSL-сертификата.
🔸Конфигурация cron-задач и других автоматизаций.

Таким образом, Laravel Forge снимает с разработчика множество рутинных задач по настройке сервера и развертыванию приложений, позволяя ему сосредоточиться на создании функционала и улучшении самого приложения.
👍5🥱2
⚡️ Будь как этот гений с картинки — предлагай свои условия работодателю, а не наоборот!

Кто нужен?
Senior ML-Engineer с опытом работы более 6 месяцев в FAANG компаниях. Требование: разработать кросс-платформенное приложение-трекер зарплат с AI-распознаванием вакансий по резюме.


Но если вы пока джун — я бы предложил:

- Full-time контракт: 180к/мес после курса + опцион на карьеру в топ-компаниях
- Либо фикс за проект: стань ML-инженером за 39к вместо 44к с промокодом LASTCALL

🔗 Старт 9 сентября
Какова цель расширения «PHP Data Objects» (PDO), и как его использовать?

Расширение PHP Data Objects (PDO) предназначено для абстрагирования доступа к базам данных в PHP. Основная цель PDO — предоставить единый интерфейс для работы с различными типами баз данных в PHP, включая MySQL, PostgreSQL, SQLite и другие, без необходимости писать специфичный код для каждой базы данных. PDO помогает улучшить безопасность, предоставляя подготовленные запросы и параметризованные запросы для предотвращения атак SQL-инъекций.

Вот базовый обзор того, как использовать PDO:

1️⃣Подключение к базе данных: Сначала нужно установить соединение с сервером базы данных, используя конструктор класса PDO и передавая параметры соединения, такие как драйвер базы данных, хост, имя базы данных, и, опционально, имя пользователя и пароль.

2️⃣Выполнение запросов: После установки соединения можно выполнять SQL-запросы с помощью метода query() или подготовленных запросов для параметризованных запросов.

3️⃣Получение результатов: Результаты запроса можно получить различными способами, такими как получение всех строк, получение одной строки или получение определенных столбцов.

4️⃣Обработка ошибок: Важно грамотно обрабатывать ошибки. PDO выбрасывает исключения для ошибок базы данных, поэтому можно использовать блоки try-catch для их обработки.

Используя PDO, можно писать более переносимый и безопасный код для работы с базами данных в PHP, поскольку оно предоставляет единый интерфейс независимо от используемой базы данных.
Как вы понимаете Special Case / Null Object и где его следует применять?

Special Case / Null Object — это шаблон проектирования, который используется для обработки специальных случаев или значений отсутствия объекта. Он позволяет разработчику избежать проверок на null и обрабатывать такое отсутствие объекта по-особенному.

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

Null Object можно применять, когда требуется обработать отсутствие объекта без использования проверок на null. Он может быть полезен в таких ситуациях:

1. Вместо проверки на null, можно использовать Null Object, чтобы избежать возникновения исключений или ошибок, связанных с отсутствием объекта и его методов.

2. Null Object может упростить код и избавить от необходимости писать дополнительные условия для обработки null значений.

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

Пример применения Null Object в PHP на фото выше

В этом примере, если использовать NullLogger, то метод log не выполняет никаких действий и не вызывает ошибок при отсутствии файла или других ресурсов, которые могут быть связаны с реальным логгером.
Иногда реально ощущение, что нас держат в Матрице.

Большинство сидит, читает статьи про ML, смотрит ролики «как это работает» — и всё.

Сегодня последний день промокода Lastcall (−5000 ₽).
Уже завтра стартует первый вебинар по Машинному обучению — полный набор для выхода из Матрицы.

Кто готов вырваться из симуляции и ворваться в сезон найма?

👾 — я уже в команде Нео
👍 — хочу красную таблетку
🤔 — пока думаю, но интересно

Забирай полный комплект для ML-разработки: Python + Математика + Машинное обучение.
🔥 Скидка 30% действует только до 9 сентября → забираем себе
В чем разница между «mysqli» и «PDO» в PHP?

Оба расширения PHP, mysqli (MySQL Improved) и PDO (PHP Data Objects), предоставляют интерфейс для взаимодействия с базами данных, особенно с MySQL. Однако между ними есть некоторые различия:

1️⃣Стиль интерфейса:

mysqli предоставляет как процедурный, так и объектно-ориентированный интерфейсы для взаимодействия с MySQL. Оно тесно интегрировано с MySQL и предлагает специфические функции, такие как хранимые процедуры и транзакции.
PDO, с другой стороны, предоставляет единый интерфейс для работы с различными базами данных, а не только с MySQL. Оно использует исключительно объектно-ориентированный подход.

2️⃣Поддержка баз данных:

mysqli специфично для баз данных MySQL. Оно оптимизировано для MySQL и предоставляет функции, специфичные для MySQL.
PDO не привязано к какой-либо конкретной базе данных. Оно поддерживает несколько баз данных, таких как MySQL, PostgreSQL, SQLite и т. д. Это делает PDO более гибким, если вам нужно переключаться между разными базами данных.

3️⃣Подготовленные запросы:

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

4️⃣Обработка ошибок:

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

5️⃣API и функциональность:

mysqli предлагает некоторые специфические для MySQL функции, которых нет в PDO, например, возможность работы с несколькими наборами результатов из хранимых процедур.
PDO предоставляет дополнительные функции, такие как именованные заполнители, которые могут сделать запросы более читаемыми и поддерживаемыми.

6️⃣Переносимость:

PDO обеспечивает лучшую переносимость, потому что оно не привязано к конкретной базе данных. Если вам нужно переключить свое приложение на другую базу данных, вам может потребоваться изменить только настройки подключения, а не переписывать все взаимодействия с базой данных.
mysqli более тесно связан с MySQL, поэтому переход к другой базе данных может потребовать более значительных изменений в коде.
Что такое пространства имен в PHP и как их использовать?

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

Как использовать пространства имен в PHP:

1. Определение пространства имен:

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

2. Использование элементов в пространстве имен:

После определения пространства имен вы можете помещать классы, функции, интерфейсы или константы в это пространство имен.

3. Доступ к элементам в пространстве имен:

Для доступа к элементам внутри пространства имен можно использовать их полностью квалифицированные имена (включая пространство имен) или импортировать пространство имен с использованием ключевого слова use.

4. Использование псевдонимов:

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