PHP Backend | YeaHub
228 subscribers
132 photos
7 videos
234 links
Теория, подготовка к интервью и курсы для PHP разработчиков

YeaHub — это платформа для IT-специалистов, объединяющая обучение, карьерный рост, развитие и сообщество единомышленников.

Платформа: https://yeahub.ru

Для связи: @ruslan_kuyanets
Download Telegram
#Собес
🤔 В чем разница между методами GET и POST?

Метод GET используется для получения данных, а POST - для их отправки на сервер. Данные GET
передаются через URL, a POST - в теле запроса. GET запросы кэшируются и могут быть сохранены в
истории браузера, тогда как POST запросы более защищены для передачи данных.

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какую функцию использовать для сортировки массива с помощью пользовательской функции сравнения?
Anonymous Quiz
58%
usort()
6%
uksort()
6%
uasort()
29%
array_multisort()
#ЛитКод
Задача: 642. Design Search Autocomplete System

Разработайте свою реализацию круговой двусторонней очереди (deque). Реализуйте класс MyCircularDeque: MyCircularDeque(int k) Инициализирует deque с максимальным размером k. boolean insertFront() Добавляет элемент в переднюю часть Deque. Возвращает true, если операция прошла успешно, или false в противном случае. boolean insertLast() Добавляет элемент в заднюю часть Deque. Возвращает true, если операция выполнена успешно, или false в противном случае. boolean deleteFront() Удаляет элемент из передней части Deque. Возвращает true, если операция прошла успешно, или false в противном случае. boolean deleteLast() Удаляет элемент из задней части Deque. Возвращает true, если операция прошла успешно, или false в противном случае. int getFront() Возвращает передний элемент из Deque. Возвращает -1, если Deque пуст. int getRear() Возвращает последний элемент из Deque. Возвращает -1, если Deque пуст. boolean isEmpty() Возвращает true, если Deque пуст, или false в противном случае. boolean isFull() Возвращает true, если Deque полон, или false в противном случае.

Пример:
Input
["MyCircularDeque", "insertLast", "insertLast", "insertFront", "insertFront", "getRear", "isFull", "deleteLast", "insertFront", "getFront"]
[[3], [1], [2], [3], [4], [], [], [], [4], []]
Output
[null, true, true, true, false, 2, true, true, true, 4]


👨‍💻 Алгоритм:

1⃣Инициализация и проверка состояний
Реализуйте конструктор для инициализации кольцевой двусторонней очереди заданного размера и методы для проверки пустоты и полноты очереди.

2⃣Операции вставки
Реализуйте методы вставки элементов в переднюю и заднюю части очереди с учетом кольцевой структуры.

3⃣Операции удаления
Реализуйте методы удаления элементов из передней и задней частей очереди с учетом кольцевой структуры и методы для получения переднего и заднего элементов очереди.

😎 Решение:
class TrieNode {
public $children;
public $count;

public function __construct() {
$this->children = [];
$this->count = [];
}
}

class AutocompleteSystem {
private $root;
private $prefix;

function __construct($sentences, $times) {
$this->root = new TrieNode();
$this->prefix = "";
for ($i = 0; $i < count($sentences); $i++) {
$this->add($sentences[$i], $times[$i]);
}
}

private function add($sentence, $count) {
$node = $this->root;
for ($i = 0; $i < strlen($sentence); $i++) {
$char = $sentence[$i];
if (!isset($node->children[$char])) {
$node->children[$char] = new TrieNode();
}
$node = $node->children[$char];
if (!isset($node->count[$sentence])) {
$node->count[$sentence] = 0;
}
$node->count[$sentence] += $count;
}
}

function input($c) {
if ($c == '#') {
$this->add($this->prefix, 1);
$this->prefix = "";
return [];
}

$this->prefix .= $c;
$node = $this->root;
for ($i = 0; $i < strlen($this->prefix); $i++) {
$char = $this->prefix[$i];
if (!isset($node->children[$char])) {
return [];
}
$node = $node->children[$char];
}

$pq = [];
foreach ($node->count as $sentence => $count) {
$pq[] = [$sentence, $count];
}

usort($pq, function($a, $b) {
if ($a[1] == $b[1]) {
return strcmp($a[0], $b[0]);
}
return $b[1] - $a[1];
});

$result = [];
for ($i = 0; $i < min(3, count($pq)); $i++) {
$result[] = $pq[$i][0];
}

return $result;
}
}


👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какую функцию использовать для чтения значения куки с указанием всех параметров куки (например, путь, домен, срок действия)?
Anonymous Quiz
52%
get_cookie_params()
24%
read_cookie_params()
24%
session_get_cookie_params()
0%
fetch_cookie_params()
#Собес
🤔 Как предотвратить SQL-иньекции в РНР-приложениях?

SQL-иньекций можно избежать, используя подготовленные запросы с PDO или MySQLi, которые отделяют данные от SQL-кода. Также важно валидировать и фильтровать пользовательский ввод, ограничивать права доступа к базе данных, использовать современные инструменты для работы с базой и обновлять программное обеспечение.

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😊 Карточка состояния базы данных для Laravel Pulse

Разработчик Джейми Схоутен создал изящную карту Laravel Pulse для мониторинга состояния вашей базы данных, предоставляя ключевые показатели, такие как активные потоки, соединения и многое другое

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

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#вакансии
👨‍💻 PHP/ Go Developer

Локация: Удалённо в РФ
Компания: Туту.ру
ЗП: обсуждается на собеседовании
Занятость: Полная

🚩Задачи
🔵Поддержка существующей инфраструктуры и разработка новых продуктовых задач
🔵Оптимизация производительности создаваемых решений в соответствии с внутренними требованиями
🔵Интеграции с внутренними и внешними партнёрами
🔵Покрытие кода тестами (юнит, интеграционные, e2e) в соответствии с внутренними требованиями
🔵Активное участие в решении проблем работы сервиса, реакция на инциденты.

Обязательные требования
🔵Коммерческая разработка на PHP от 3 лет
🔵Go от 1,5 лет
🔵Работа c реляционными базами данных
🔵Опыт разбиения монолита на микросервисы
🔵Покрытие кода тестами.

💬 Резюме отправлять: @fr_rec

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какой функцией в PHP можно заменить символы в строке?
Anonymous Quiz
81%
str_replace()
4%
replace()
12%
substr_replace()
4%
str_modify()
#Собес
🤔 Какие существуют типы ошибок в РНР?

PHP выделяет следующие основные типы ошибок: фатальные (Fatal Errors), предупреждения
(Warnings), уведомления (Notices), ошибки синтаксиса (Parse Errors), устаревшие (Deprecated
Errors) и строгие (Strict Errors). Каждый из них сигнализирует о разных проблемах в коде, от
критических до менее значительных.

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какой глобальный массив в PHP содержит информацию о заголовках, путях и местоположении скрипта?
Anonymous Quiz
57%
$_SERVER
18%
$_ENV
7%
$_SESSION
18%
$_GLOBAL
#ЛитКод
Задача: 643. Maximum Average Subarray I

Вам дан целочисленный массив nums, состоящий из n элементов, и целое число k. Найдите смежный подмассив, длина которого равна k и который имеет максимальное среднее значение, и верните это значение. Принимается любой ответ с погрешностью вычислений менее 10-5.

Пример:
Input: nums = [1,12,-5,-6,50,3], k = 4
Output: 12.75000


👨‍💻 Алгоритм:

1⃣Инициализация скользящего окна
Вычислите сумму первых k элементов массива nums. Это будет начальное значение максимальной суммы.

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

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

😎 Решение:
function findMaxAverage($nums, $k) {
$currentSum = array_sum(array_slice($nums, 0, $k));
$maxSum = $currentSum;

for ($i = $k; $i < count($nums); $i++) {
$currentSum += $nums[$i] - $nums[$i - $k];
$maxSum = max($maxSum, $currentSum);
}

return $maxSum / $k;
}


👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какой метод в PHP используется для установки пользовательского обработчика исключений?
Anonymous Quiz
50%
set_exception_handler()
19%
set_error_handler()
8%
custom_exception_handler()
23%
exception_handler()
#Собес
🤔 Как отлаживать РНР-приложение?

Для отладки можно использовать встроенные функции РНР, такие как var_dump() и
error_reporting() , а также более сложные инструменты вроде Xdebug для работы с точками
останова и трассировками. Логирование ошибок и профилирование кода также играют ключевую
роль.

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😊 DeepSeek PHP API-клиент

Этот пакет упрощает работу с API для PHP-разработчиков, обеспечивая удобную поддержку запросов, моделей и потоковой передачи данных
Гитхаб

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😊 Асинхронный бег или драматическое ускорение с RoadRunner

Очень много в последнее время слышно замечаний в адрес PHP — мол, медленный, тяжелый, неповоротливый, все давно микросервисы на Go/Java/(нужное подставить) пишут. В этой статье расписаны плюсы, минусы и результаты попытки ускорить проект на PHP с использованием RoadRunner.
Смотреть статью

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какое ключевое слово используется для наследования класса в PHP?
Anonymous Quiz
87%
extends
13%
implements
0%
inherits
0%
derive
#Собес
🤔 Что такое пространства имён (namespaces) в PHP?

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

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
вот как то так
🤔 Какую аннотацию в PHPUnit использовать для указания, что тест должен быть выполнен в изолированном контексте?
Anonymous Quiz
57%
@isolated
14%
@separate
21%
@single
7%
@independent
#вакансии
👨‍💻 Backend-разработчик (PHP)

Локация: Удалённо в РФ
Компания: CODEX
ЗП: от 150 000 до 250 000 р. на руки
Занятость: Полная

Грейд: Middle/ Senior

🚩Основные задачи
🔵 Разработка высоконагруженных сервисов
🔵 Участие в принятии технических решений и планировании процесса разработки;
🔵 Взаимодействие с фронтэнд и мобильными разработчиками для обсуждения интерфейса бекэнда.

Требования
🔵 php 8.3+
🔵 symfony 6+
🔵 mysql 8
🔵 docker/k8s
🔵 git/github/jira
🔵 azure
🔵 rabbitmq/amqp

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

💬 Резюме отправлять: @nikita_recr

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес
🤔 Как работает автозагрузка в РНР?

Автозагрузка в РНР позволяет автоматически загружать классы по мере их необходимости, без использования include или require. Основной механизм - это функция spl_ autoload_register() , которая регистрирует функцию для автозагрузки. Кроме того, стандарт PSR-4, поддерживаемый Composer, организует автозагрузку классов, следуя определённой структуре каталогов и именования.

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM