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

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

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

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

Наши каналы: https://yangx.top/proglibrary/9197
加入频道
[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 <имя_файла>

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

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

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

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

Пример использования позднего статического связывания в PHP на фото.
Стоит ли возвращать null из методов. Если нет, то почему и как писать код в таких случаях?

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

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

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

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

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

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

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

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

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

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

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

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

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

Добавляйте 👉 тык сюда
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое 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 снимает с разработчика множество рутинных задач по настройке сервера и развертыванию приложений, позволяя ему сосредоточиться на создании функционала и улучшении самого приложения.
Какова цель расширения «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 не выполняет никаких действий и не вызывает ошибок при отсутствии файла или других ресурсов, которые могут быть связаны с реальным логгером.
7 способов сортировки массивов на примере С++ с иллюстрациями

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

Статья

Зачем учить алгоритмы сортировки, если есть уже готовые методы сортировки?
Чтобы знать плюсы и минусы каждого алгоритма, понимать, как действительно он работает (а не просто копипастить) и какой алгоритм выбрать для конкретной задачи. Плюс изучение алгоритмов развивает мышление и профессиональный кругозор.

Как мне оперативно научиться применять алгоритмы?

Начни с бесплатного демо доступа к курсу «Алгоритмы и структуры данных», на котором junior и middle+ программисты смогут потренировать навыки применения алгоритмов и сгенерировать идеальные решения сложных задач в сообществе других разработчиков.
Самые полезные каналы для программистов в одной подборке!

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

🔥Для всех

Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
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 запрещена на территории РФ