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

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

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

Для связи: @ruslan_kuyanets
Download Telegram
Channel created
Please open Telegram to view this post
VIEW IN TELEGRAM
#вакансии
👨🏻‍💻 Senior PHP developer (Telecom)

REDSMS — компания, разрабатывающая сервис отправки сообщений через разные каналы, приглашает PHP разработчика

Что и как?

▪️ От 450 000 ₽
▪️ График 5/2
▪️ Опыт от 3 до 6 лет
▪️ Удалёнка (РФ) / Гибрид (Москва)

📩 Изучить вакансию
#ЧеКак
🤔 Какой командой можно отменить kmid?

Команда kmid (Kinematic Motion In-Dispenser) не является общепринятой командой или термином в большинстве систем. В зависимости от контекста, возможно, речь идёт о специфической команде или понятии, используемом в рамках определённой системы или программного обеспечения.
Если у вас есть более точное определение или контекст, связанный с kmid, это поможет дать более точный ответ.


🚩Прерывание команд в Unix-подобных системах

🟠Прерывание текущего процесса
Ctrl + C: Останавливает выполнение текущей команды в терминале.

🟠Управление процессами
kill: Завершает процесс по его идентификатору (PID).
kill <PID>        


killall: Завершает все процессы с указанным именем.
killall <process_name>        


🟠Отмена последней команды
В оболочке bash сочетание клавиш Ctrl + Z приостанавливает текущий процесс и переводит его в фоновый режим. Если потребуется, можно использовать команду kill для завершения этого процесса.

🚩Пример использования команд в Unix-подобных системах

Чтобы узнать PID процесса, можно использовать команду ps или pgrep
pgrep process_name
ps aux | grep process_name


После нахождения PID процесса, его можно завершить
kill 1234    


Чтобы завершить все процессы с именем example_process
killall example_process


👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#ЧеКак
🤔 Что такое инкапсуляция?

Это принцип ООП, при котором детали реализации скрыты от внешнего мира, предоставляя доступ к данным через методы. В PHP это реализуется с помощью модификаторов доступа (private, protected, public). Она обеспечивает безопасность данных и облегчает поддержку кода.

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

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

🚩Основные аспекты рекурсии

🟠Базовый случай (условие выхода)
Каждый рекурсивный алгоритм должен иметь базовый случай, который останавливает рекурсивные вызовы. Это условие, при котором дальнейшие рекурсивные вызовы не нужны.

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

def factorial(n):
if n == 0:
return 1 # Базовый случай
else:
return n * factorial(n-1) # Рекурсивный случай

print(factorial(5)) # Выведет 120


🚩Плюсы

Простота и ясность
Рекурсивные решения могут быть проще и понятнее, чем их итеративные аналоги, особенно для задач, которые естественно определяются рекурсивно (например, обход деревьев, вычисление факториалов, задачи, связанные с последовательностями).Элегантность
Код может быть более элегантным и легко читаемым.

🚩Минусы

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

🚩Оптимизация рекурсии

🟠Мемоизация
Это техника оптимизации, при которой результаты дорогостоящих вызовов функций запоминаются и повторно используются при последующих вызовах с теми же аргументами. Пример:
def fibonacci(n, memo={}):
if n in memo:
return memo[n]
if n <= 1:
return n
memo[n] = fibonacci(n-1, memo) + fibonacci(n-2, memo)
return memo[n]

print(fibonacci(10)) # Выведет 55


🟠Хвостовая рекурсия
Это особый вид рекурсии, при котором рекурсивный вызов является последней операцией в функции. Многие компиляторы и интерпретаторы могут оптимизировать хвостовую рекурсию, избегая увеличения стека вызовов. Пример:
def factorial_tail_recursive(n, accumulator=1):
if n == 0:
return accumulator
else:
return factorial_tail_recursive(n-1, n * accumulator)

print(factorial_tail_recursive(5)) # Выведет 120


👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#ЧеКак
🤓 Разница между pull и fetch?

git pull выполняет fetch (загружает изменения из удалённого репозитория) и автоматически сливает их с локальной веткой. git fetch только загружает изменения, не изменяя локальные файлы, что позволяет вручную контролировать слияние.

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#Вакансии
👨‍💻 Middle/senior symfony developer (PHP)

Компании Интелико Системс, разрабатывающей интернет-ориентированное программное обеспечение, требуется PHP разработчик

Что и как?

▪️ Middle / Senior
▪️ От 2000 $ net
▪️ Офис (Минск)

📩 Изучить вакансию
Please open Telegram to view this post
VIEW IN TELEGRAM
🤓 Какой метод используется для проверки, установлена ли переменная и не равна ли она null?
Anonymous Quiz
14%
var_exists()
64%
isset()
14%
exists()
7%
check_var()
#ЧеКак
🤔 Что такое инкремент и декремент?

Инкремент — это увеличение значения переменной на единицу, а декремент — уменьшение на единицу. В программировании они часто реализуются с помощью операторов ++ и --. Эти операции упрощают работу с циклами и счетчиками.

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
🤓 Какой метод используется для удаления
cookie в PHP?
Anonymous Quiz
11%
delete_cookie()
33%
unset_cookie()
11%
remove_cookie()
44%
setcookie() с параметром с истекшим сроком действия
#ЛитКод
🤔 Задача: 605. Can Place Flowers

У вас есть длинная клумба, на которой некоторые участки засажены, а некоторые нет. Однако цветы нельзя сажать на соседних участках.

Дан целочисленный массив flowerbed, содержащий 0 и 1, где 0 означает пустой участок, а 1 — занятый участок, и целое число n. Верните true, если n новых цветов можно посадить на клумбе, не нарушая правила о соседних цветах, и false в противном случае.

Пример:
Input: flowerbed = [1,0,0,0,1], n = 1
Output: true


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

1⃣Решение очень простое. Мы можем определить максимальное количество дополнительных цветов, count, которые можно посадить для данного расположения клумбы. Для этого мы проходим по всем элементам массива flowerbed и находим те элементы, которые равны 0 (означает пустую позицию).

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

3⃣Если полученное количество count больше или равно n, требуемому количеству цветов для посадки, мы можем посадить n цветов на пустые места, иначе - нет.

😊 Решение:
class Solution {
function canPlaceFlowers($flowerbed, $n) {
$count = 0;
for ($i = 0; $i < count($flowerbed); $i++) {
if ($flowerbed[$i] == 0) {
$emptyLeft = $i == 0 || $flowerbed[$i - 1] == 0;
$emptyRight = $i == count($flowerbed) - 1 || $flowerbed[$i + 1] == 0;
if ($emptyLeft && $emptyRight) {
$flowerbed[$i] = 1;
$count++;
}
}
}
return $count >= $n;
}
}


👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#ЧеКак
🤔 Зачем придумали анонимные классы?

Анонимные классы (anonymous classes) были введены и предназначены для создания одноразовых объектов без необходимости явно именовать класс. Они обеспечивают более удобный и компактный способ определения классов, которые используются один или несколько раз.

🚩Основные плюсы

Упрощение кода и повышение читаемости
Позволяют создавать и использовать классы на месте, что уменьшает количество кода и делает его более читаемым, особенно в случае одноразового использования.
      $obj = new class {
public function sayHello() {
return "Hello, World!";
}
};

echo $obj->sayHello(); // Выведет "Hello, World!"


Инкапсуляция и локализация кода
Помогают инкапсулировать функциональность в пределах небольших участков кода, что делает их более локализованными и уменьшает риск конфликтов имен.
      function getLogger() {
return new class {
public function log($msg) {
echo $msg;
}
};
}

$logger = getLogger();
$logger->log("Logging message"); // Выведет "Logging message"


Быстрое создание прокси-объектов и заглушек
Могут использоваться для создания временных объектов, таких как прокси, заглушки для тестирования или объекты, реализующие интерфейсы для конкретного случая.
      interface Logger {
public function log($msg);
}

function getCustomLogger() {
return new class implements Logger {
public function log($msg) {
echo $msg;
}
};
}

$logger = getCustomLogger();
$logger->log("Custom log message"); // Выведет "Custom log message"


Облегчение тестирования
Упрощают создание тестовых экземпляров, особенно когда требуется создать объект для одного теста.
      $testObject = new class {
public function testMethod() {
return true;
}
};

// Использование testObject в тесте
assert($testObject->testMethod() === true);


🚩Практические примеры

🟠Замена одноразовых классов
Когда вам нужен класс, который используется только в одном месте, использование анонимного класса может быть более целесообразным, чем объявление именованного класса.
      $processor = new class {
public function process($data) {
return array_map('strtoupper', $data);
}
};

$data = ['apple', 'banana', 'cherry'];
$processedData = $processor->process($data);
print_r($processedData); // Выведет ['APPLE', 'BANANA', 'CHERRY']


🟠Создание адаптеров и декораторов на лету
Анонимные классы удобны для создания адаптеров и декораторов, которые изменяют или расширяют поведение объектов на месте.
      class SomeService {
public function execute() {
return "Executing service";
}
}

$service = new SomeService();

$decoratedService = new class($service) {
private $service;

public function __construct($service) {
$this->service = $service;
}

public function execute() {
return $this->service->execute() . " with added functionality";
}
};

echo $decoratedService->execute(); // Выведет "Executing service with added functionality"


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

Локация: Удалённо
Компания: NovaSpin
ЗП: от 3 000 до 4 500 $
Занятость: Полная

NovaSpin - инновационная компания, занимающаяся разработкой онлайн-казино! Мы с гордостью предлагаем возможность присоединиться к нашей команде, которая работает в самом сердце игровой индустрии.

🚩Задачи
▪️Разработка и поддержка веб-приложения с использованием фреймворка Laravel.
Интеграция и работа с Centrifugo для организации WebSocket соединений.
▪️Проектирование и оптимизация баз данных на PostgreSQL
▪️Настройка и управление очередями сообщений с помощью RabbitMQ.
▪️Оптимизация производительности приложений с использованием Laravel Octane.
▪️Участие в архитектурном планировании и ревью кода.

🚩Ожидания от кандидата
▪️Глубокие знания и опыт работы с PHP (5+ лет).
▪️Опыт работы с Laravel (3+ лет).
▪️Опыт работы в igaming сфере.
▪️Знание и опыт работы с вебсокетами.
▪️Уверенные знания PostgreSQL, умение писать и оптимизировать SQL-запросы.
▪️Опыт работы с Redis и RabbitMQ.
▪️Знание и опыт использования Laravel Octane.
▪️Опыт работы с системами контроля версий (Git).
▪️Понимание принципов ООП, шаблонов проектирования и лучших практик разработки.
▪️Опыт работы с Docker.
▪️Навыки отладки и профилирования приложений.
▪️Хорошие коммуникативные навыки и умение работать в команде.
▪️Желание расти, развивать продукт и делать новые качественные фичи!

🚩Преимущества
▪️Опыт работы с высоконагруженными системами и оптимизации производительности.
▪️Опыт работы с CI/CD и DevOps практиками.

🚩Что мы предлагаем
▪️Конкурентоспособная зарплата с выплатами два раза в месяц в USDT.
▪️Удаленная работа с гибким графиком.
▪️Сотрудничество и поддержка в рабочей среде.
▪️Возможности для непрерывного обучения и профессионального развития.

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

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какой метод используется для получения MIME-типа файла в PHP?
Anonymous Quiz
50%
mime_type()
10%
get_file_mime()
10%
filetype()
30%
get_mime_type()
#ЧеКак
🤔 Что такое списочный тип?

Это структура данных, представляющая упорядоченный набор элементов, где каждый элемент связан с предыдущим и следующим.
🟠Пример — связанный список (linked list), где каждый узел содержит значение и ссылку на следующий узел.
🟠Такие типы обеспечивают удобное добавление и удаление элементов, но имеют медленный доступ по индексу (O(n)).

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#ЧеКак
🤔 Что такое heap object?

Это объект, размещённый в куче, где память выделяется динамически. Такие объекты хранятся до тех пор, пока на них есть ссылки, и освобождаются автоматически, когда ссылки удаляются (через сборщик мусора или ARC).

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