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

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

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

Для обратной связи: @proglibrary_feeedback_bot
加入频道
Как PHP обрабатывает арифметические операции со строками, содержащими нецифровые символы, например, «15%» и «$25»?

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

⚠️ Предупреждения в новых версиях PHP
Начиная с PHP 7.1, при попытке выполнить арифметическую операцию с нечисловой строкой PHP генерирует предупреждение:

Warning: A non-numeric value encountered in script.php on line X

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

Рекомендации
Явное приведение типов: Используйте (int) или (float) для явного приведения строки к числовому типу.

Функции intval() и floatval(): Эти функции также выполняют приведение строки к числовому типу.

Обработка ошибок: Используйте is_numeric() для проверки, является ли строка числом перед выполнением арифметических операций.
🫣 Устали от HR-сказок про «дружный коллектив» и «печеньки в офисе»?

Давайте честно поговорим о том, что действительно происходит на IT-рынке. Не в розовых презентациях, а в реальной жизни разработчиков, тестировщиков, аналитиков и всех, кто живет кодом.

🧐 Мы проводим исследование, чтобы выяснить:

— Как часто мы прыгаем между компаниями (и почему)
— Какие красные флаги заставляют бежать без оглядки
— Где реально находят работу
— Что бесит в HR больше всего
— Сколько кругов собеседований — это уже перебор

Результаты покажут реальную картину рынка. Без приукрашиваний. Может, компании поймут, что нужно менять, а специалисты — куда двигаться дальше.

😈 Опрос займет 5 минут, но результаты будут работать на всех нас → https://clc.to/9aaXVg
Какие существуют типы данных в PHP?

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

1. Скалярные типы

✔️Integer (Целое число): Представляет целые числа без десятичной точки. Примеры: 42, -7.
✔️Float (Число с плавающей точкой, также Double): Представляет числа с десятичной точкой. Примеры: 3.14, -0.99.
✔️String (Строка): Представляет последовательность символов. Примеры: «Hello, World!», 'PHP'.
✔️Boolean (Булево значение): Представляет два возможных значения: true или false.

2. Составные типы
Array (Массив): Представляет собой коллекцию значений. Массивы могут быть индексированными (числовыми) или ассоциативными (пары ключ-значение).

Object (Объект): Представляет собой экземпляры классов. Объекты позволяют хранить данные и функции вместе в одном элементе.

3. Специальные типы
🔸NULL: Представляет переменную без значения. Это единственное значение типа NULL.

🔸Resource (Ресурс): Представляет ссылку на внешний ресурс, например, соединение с базой данных, файловый дескриптор и т.д. Ресурсы — это специальные переменные, которые содержат ссылки на внешние ресурсы, а не данные.

4. Псевдотипы (Не настоящие типы данных, но используются в документации PHP)
🔸Mixed (Смешанный): Указывает, что параметр или возвращаемое значение могут быть нескольких типов.

🔸Number (Число): Указывает на значение, которое может быть либо целым числом, либо числом с плавающей точкой.

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

🔸Iterable (Итерируемый): Представляет любое значение, которое можно перебрать с помощью foreach, включая массивы и объекты, реализующие интерфейс Traversable.
Класс содержит свойство, которое, в свою очередь, является объектом. Что будет содержать это свойство в клонированном объекте: ссылка на тот же дочерний объект или копию дочернего объекта? Что нужно сделать, чтобы это изменить?

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

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

Пример реализации на фото
🥴 Средний разработчик меняет работу каждые 1,5 года

И это не потому, что мы такие непостоянные. Просто рынок показывает свое истинное лицо быстрее, чем успевают напечатать визитки.

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

😳 О чем говорим откровенно:
— Job-hopping и что за этим стоит
— Red flags, которые мгновенно убивают мотивацию
— Реальные источники вакансий (не те, что рекламируют)
— Боль от общения с рекрутерами
— Сколько этапов отбора — норма, а сколько — издевательство

Когда мы объединим опыт сотен IT-специалистов, получится настоящая карта того, как устроена индустрия. Не по версии HR-отделов, а по версии тех, кто пишет код, тестирует продукты и двигает технологии вперед.

🚀 Участвовать в исследовании → https://clc.to/9aaXVg
Расскажите про функции defined и get_defined_constants

defined():
Функция defined() используется для проверки существования константы с заданным именем. Она возвращает true, если константа существует, и false, если нет.

get_defined_constants():
Функция get_defined_constants() возвращает ассоциативный массив, содержащий все определенные константы в текущем скрипте. Этот массив имеет два уровня: глобальные константы и локальные (если они определены внутри функции).
Вакансии «Библиотеки программиста»

Привет! Мы ищем контент-менеджеров, которые будут вести наши телеграм-каналы о разработке.

👾 Требования:
— знать принципы залетающего контента
— разбираться в темах, связанных с разработкой

Большим плюсом будет навык программирования на каких-либо языках.

Условия:
— удаленка
— частичная занятость
— сдельная оплата в зависимости от количества задач

🔥 Оставляйте отклик, и мы свяжемся с вами: https://forms.gle/o4BZnsQ526JoqsCq9
Что такое контракт в Laravel и как он используется?

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

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

🔧 Как работает автозагрузка в PHP

Регистрация автозагрузчика: Для включения автозагрузки необходимо зарегистрировать функцию, которая будет отвечать за поиск и подключение файлов с классами. Это делается с помощью функции spl_autoload_register().
spl_autoload_register(function ($class_name) { include $class_name . '.php';});


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

Стандарты автозагрузки: Для упрощения организации кода и обеспечения совместимости между различными библиотеками и фреймворками, был разработан стандарт PSR-4. Этот стандарт определяет правила, по которым пространство имён класса должно соответствовать структуре каталогов файловой системы.

Использование с Composer: Composer — это менеджер зависимостей для PHP, который также предоставляет механизм автозагрузки. После настройки автозагрузки в composer.json, необходимо выполнить команду:

composer dumpautoload

Эта команда создаст файл vendor/autoload.php, который автоматически подключит все необходимые файлы классов при подключении его в вашем проекте.

Преимущества автозагрузки

Упрощение кода: Отсутствие необходимости вручную подключать файлы классов делает код чище и легче для понимания.

Управление зависимостями: Composer позволяет легко управлять внешними библиотеками и их зависимостями, обеспечивая их автоматическую загрузку.

Соблюдение стандартов: Использование стандартов, таких как PSR-4, способствует лучшей организации кода и совместимости между различными компонентами.
😡 А вас тоже бесят облачные сервисы?

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

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

Что мы хотим узнать:
— Для чего вы реально используете облако?
— Чего катастрофически не хватает прямо сейчас?
— Что бесит больше всего? (можно материться)
— Как выбираете провайдера — по цене или по любви?
— и тому подобное

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

️Время на опрос: меньше, чем на кофе-брейк. Жмите → https://clc.to/nboYDA
Следует ли использовать в методах значение по умолчанию null. Если нет, то почему?

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

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

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

В то же время, использование значений по умолчанию может создавать сложности при отладке и поддержке кода, особенно если вы работаете с большим проектом или командой разработчиков. Вы должны тщательно обдумать, как использование значений по умолчанию влияет на читаемость, понятность и надежность вашего кода.
Какие есть NoSQL СУБД?

Вот самые популярные NoSQL СУБД:

1. MongoDB — документоориентированная СУБД, которая хранит данные в формате BSON (бинарное представление JSON). Она обеспечивает гибкую схему данных и поддерживает горизонтальное масштабирование.

2. Redis — ключ-значение СУБД, которая использует оперативную память для хранения данных. Она предоставляет высокую скорость доступа к данным и поддерживает различные типы данных, включая строки, списки и множества.

3. Cassandra — распределенная СУБД, разработанная для обработки больших объемов данных и обеспечения высокой доступности. Она использует модель колоночного семейства и ориентирована на горизонтальное масштабирование.

4. CouchDB — документоориентированная СУБД, которая хранит данные в формате JSON. Она обеспечивает репликацию и синхронизацию данных между узлами и поддерживает реализацию полнотекстовых запросов.

5. Neo4j — графовая СУБД, которая использует графовую модель для хранения и обработки данных. Она обеспечивает эффективные операции с графовыми структурами и предоставляет возможность выполнения сложных запросов.
Какой подход следует применить во время тестирования кода, который имеет внешние зависимости?

Один из подходов, который может быть применен во время тестирования кода с внешними зависимостями, — это использование моков или заглушек (mocks или stubs).

Использование моков и заглушек позволяет изолировать код от внешних зависимостей и создавать контролируемые ситуации для тестирования. Это значительно упрощает написание тестовых сценариев и позволяет проверить правильность работы кода без необходимости подключения к реальным сервисам или захвата ресурсов. Они также позволяют создавать тестовые сценарии, которые воспроизводят различные сценарии, которые могут быть сложными или невозможными в реальной системе.
Как вы используете трансляцию(broadcasting) в Laravel?

Laravel обеспечивает трансляцию событий в реальном времени с помощью каналов и слушателей. Вот как использовать трансляцию в Laravel:

Шаг 1: Создайте событие

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

php artisan make:event OrderShipped

Эта команда создаст новое событие класса OrderShipped.

Шаг 2: Зарегистрируйте событие в EventServiceProvider

Добавьте событие OrderShipped в свойство $listen в EventServiceProvider. Это позволит транслировать событие на указанный канал(ы).
protected $listen = [
'App\Events\OrderShipped' => [
'App\Listeners\SendShipmentNotification'
],
];

Шаг 3: Создайте канал

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

php artisan make:channel OrderChannel

Эта команда создаст новый канал класса OrderChannel.

Шаг 4: Трансляция события

Транслируйте событие OrderShipped на нужный канал (каналы) с помощью метода broadcast.
use App\Events\OrderShipped;

broadcast(new OrderShipped($order))->toOthers();


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

Прослушивание транслируемых событий

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

Шаг 1: Создание слушателя

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


php artisan make:listener SendShipmentNotification

Эта команда создаст новый класс слушателя SendShipmentNotification.

Шаг 2: Реализация метода Handle

Реализуйте метод handle, чтобы определить, что должно быть сделано при передаче события.

public function handle(OrderShipped $event)
{
// Отправляем уведомление об отгрузке покупателю
}


Шаг 3: Регистрация слушателя

Зарегистрируйте слушатель SendShipmentNotification в свойстве $listen в EventServiceProvider.

protected $listen = [
'App\Events\OrderShipped' => [
'App\Listeners\SendShipmentNotification'
],
];

Трансляция с помощью Socket.IO

Laravel предоставляет драйвер вещания Socket.IO из коробки. Чтобы использовать этот драйвер, необходимо установить пакеты socket.io-client и laravel-echo.


npm install --save socket.io-client laravel-echo

После установки пакетов необходимо создать новый экземпляр объекта Echo и сконфигурировать его с деталями трансляции в файле resources/js/bootstrap.js.

import Echo from 'laravel-echo'

window.Echo = new Echo({
broadcaster: 'socket.io',
host: window.location.hostname + ':6001',
});


Теперь вы можете использовать объект Echo для прослушивания транслируемых событий.

window.Echo.channel('orders')
.listen('.order.shipped', function(data) {
console.log('Заказ отправлен', data);
});

Это позволит прослушать событие order.shipped на канале orders и вывести данные в консоль при получении события.

После установки пакетов необходимо создать новый экземпляр объекта Echo и сконфигурировать его с деталями трансляции в файле resources/js/bootstrap.js.
😱 Завтра цена на курс «AI-агенты для DS» вырастет

Пока вы думаете — другие уже покупают. Что вы теряете, откладывая решение? Как минимум — 10 000 рублей, именно столько вы переплатите завтра. Как максимум — шанс войти в топ-1% дата-сайентистов, которые умеют строить AI-агенты.

🎓 Чему вы научитесь на курсе:
— адаптировать LLM под разные предметные области и данные
— собирать свою RAG-систему: от ретривера и реранкера до генератора и оценки качества
— строить AI-агентов с нуля — на основе сценариев, функций и взаимодействия с внешней средой

Решение за вами.

👉 Купить курс по старой цене
Что такое нормализация?

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

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

Выделяют различные уровни нормализации (нормальные формы), такие как:

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

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

3. Третья нормальная форма (3NF): Устраняет транзитивные зависимости между колонками, вынося их в отдельные таблицы.

Существуют также более высокие уровни нормализации, такие как четвертая нормальная форма (4NF), пятая нормальная форма (5NF) и другие. Эти нормальные формы помогают сделать базу данных более гибкой, масштабируемой, эффективной и согласованной.

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