ru
Feedback
PHP | Вопросы собесов

PHP | Вопросы собесов

Открыть в Telegram
2 344
Подписчики
-224 часа
-57 дней
-2430 день
Архив постов
🤔 Как работает зацепление? 1. Сильное зацепление: - Компоненты имеют множество зависимостей и напрямую обращаются друг к другу. Например, один компонент полагается на внутреннюю реализацию другого. 2. Слабое зацепление: - Компоненты взаимодействуют через интерфейсы или абстракции, минимизируя зависимость от конкретной реализации. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 В чем заключается обработка ошибок и исключений? Обработка ошибок в PHP – это механизм, который помогает находить, интерпретировать и корректно реагировать на ошибки во время выполнения программы. Для этого в PHP используются два подхода: Традиционные ошибки (error_reporting, set_error_handler) *Исключения (try-catch, throw) 🟠Традиционная обработка ошибок PHP изначально использовал механизм ошибок, которые делятся на несколько типов: E_ERROR – фатальная ошибка, завершает выполнение скрипта. E_WARNING – предупреждение, но скрипт продолжает выполняться. E_NOTICE – уведомление о потенциальной проблеме.
echo $undefined_var; // E_NOTICE: Undefined variable
🚩Способы обработки ошибок 🟠error_reporting() – управление уровнем ошибок Функция error_reporting() позволяет включать или выключать определённые типы ошибок.
error_reporting(E_ALL & ~E_NOTICE); // Показывать все ошибки, кроме E_NOTICE
🟠set_error_handler() – создание пользовательского обработчика ошибок Можно задать свою функцию, которая будет реагировать на ошибки.
function myErrorHandler($errno, $errstr, $errfile, $errline) {
    echo "Ошибка [$errno]: $errstr в файле $errfile на строке $errline";
}
set_error_handler("myErrorHandler");

// Вызовем ошибку
echo 10 / 0; // Division by zero (E_WARNING)
🟠error_log() – запись ошибок в файл Ошибки можно не выводить на экран, а записывать в файл.
error_log("Ошибка: что-то пошло не так!", 3, "errors.log");
🚩Исключения (`try-catch`) С версии PHP 5 появился механизм исключений, который более удобен и структурирован. Исключения позволяют: Перехватывать ошибки и управлять их обработкой. Использовать вложенные блоки try-catch для детальной обработки. Создавать собственные классы исключений.
try {
    if (!file_exists("somefile.txt")) {
        throw new Exception("Файл не найден");
    }
} catch (Exception $e) {
    echo "Ошибка: " . $e->getMessage();
}
🟠Классы исключений PHP позволяет использовать предопределённый класс Exception, а также создавать свои.
class MyException extends Exception {}

try {
    throw new MyException("Это моя ошибка");
} catch (MyException $e) {
    echo "Поймано исключение: " . $e->getMessage();
}
🟠Блок `finally` Используется для выполнения кода в любом случае – независимо от того, было исключение или нет.
try {
    echo "Попытка выполнить код\n";
} catch (Exception $e) {
    echo "Ошибка поймана\n";
} finally {
    echo "Этот код выполнится в любом случае\n";
}
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое зацепление? Это мера зависимости между компонентами системы. Чем сильнее компоненты зависят друг от друга, тем выше зацепление. Высокое зацепление усложняет изменение или повторное использование компонентов, снижая гибкость системы. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое списочный тип? Списочный тип данных, также известный как список, представляет собой структуру данных, которая хранит упорядоченные коллекции элементов. Списки позволяют хранить наборы элементов, доступ к которым можно получить по индексу. Они широко используются в программировании благодаря своей гибкости и удобству. 🚩Особенности 🟠Упорядоченность Элементы в списке хранятся в определенном порядке, и этот порядок сохраняется. Каждый элемент имеет индекс, по которому к нему можно обратиться. 🟠Изменяемость Списки обычно являются изменяемыми структурами данных, что означает, что вы можете добавлять, удалять или изменять элементы после создания списка. 🟠Гетерогенность В списке могут храниться элементы различных типов данных (например, числа, строки, объекты). 🚩Примеры списочных типов в различных языках программирования Python
  my_list = [1, 2, 3, 'a', 'b', 'c']
  my_list.append(4)  # Добавление элемента
  print(my_list[2])  # Доступ к элементу по индексу (вывод: 3)
  
Java
  import java.util.ArrayList;
  
  ArrayList<Object> myList = new ArrayList<>();
  myList.add(1);
  myList.add("hello");
  System.out.println(myList.get(1));  // Доступ к элементу по индексу (вывод: hello)
  
PHP
  $myList = array(1, 2, 3, 'a', 'b', 'c');
  array_push($myList, 4);  // Добавление элемента
  echo $myList[2];  // Доступ к элементу по индексу (вывод: 3)
  
🚩ПлюсыГибкость Списки позволяют легко добавлять, удалять и изменять элементы. ➕Удобство использования Простейшие операции над списками, такие как добавление или удаление элементов, обычно реализуются стандартными методами или функциями. ➕Поддержка индексов Доступ к элементам по индексу позволяет эффективно манипулировать данными. Ставь 👍 и забирай 📚 Базу знаний

⚡ Генерируем API-клиент без помощи ChatGPT! 📅 Когда: 13 февраля в 20:00 мск Сегодня сложно кого-то удивить генерацией кода.
⚡ Генерируем API-клиент без помощи ChatGPT! 📅 Когда: 13 февраля в 20:00 мск Сегодня сложно кого-то удивить генерацией кода. А что, если в этом процессе не будут участвовать LLM?  🔍 На открытом вебинаре, мы:: — Применим генератор кода к спецификации API мини-приложения на Symfony — Интегрируем сгенерированный код в другое Symfony-приложение. — Рассмотрим решения часто встречающихся проблем. 🎯 В результате вы научитесь: - Генерировать API-клиент на базе спецификации Open API  \n - Использовать его в своих приложениях 🎓 Урок пройдет в преддверии старта курса «Symfony Framework».  Все участники получат скидку на большое обучение! Регистрируйтесь прямо сейчас: 👉 ссылка Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

🤔 Какую проблему решает адаптер? Это структурный паттерн, который обеспечивает совместимость интерфейсов, не совместимых напрямую. Он выступает в роли посредника, позволяя одному классу использовать интерфейс другого без изменений в их коде. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое абстрактный класс? Абстрактный класс — это класс в ООП, который не может быть инстанциирован напрямую, то есть нельзя создать объект абстрактного класса используя оператор new. Они предназначены для того, чтобы служить базой для других классов, которые должны реализовать определенные методы, заданные в нем. Обеспечение общего определения класса, которое может быть использовано в качестве основы для создания производных классов. Производные классы должны реализовать все абстрактные методы абстрактного родительского класса, но при этом они могут также иметь дополнительные методы и свойства или переопределять существующие.
abstract class Животное {
    public function ест() {
        echo "Это животное ест";
    }

    abstract public function издаетЗвук();
}

class Собака extends Животное {
    public function издаетЗвук() {
        echo "Гав";
    }
}

// $животное = new Животное(); // Ошибка: нельзя инстанциировать абстрактный класс
$собака = new Собака();
$собака->ест(); // Вывод: Это животное ест
$собака->издаетЗвук(); // Вывод: Гав
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое Stateful? Это подход, при котором сервер сохраняет состояние между запросами клиента. Например, в сеансах пользователя информация сохраняется на сервере, что позволяет отслеживать действия между запросами. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Какие бывают области видимости? Область видимости (или видимость) определяет, где в коде можно получить доступ к переменным, функциям и другим объектам. В PHP есть несколько видов областей видимости, которые контролируют доступность этих элементов в разных частях программы. 🚩Основные области видимости 🟠Локальная область видимости Переменные, объявленные внутри функции, имеют локальную область видимости и доступны только внутри этой функции.
<?php
function test() {
    $localVar = "I'm local";
    echo $localVar; // Выведет "I'm local"
}
test();
echo $localVar; // Ошибка: переменная не найдена
?>
🟠Глобальная область видимости Переменные, объявленные вне функций и классов, имеют глобальную область видимости и доступны везде в скрипте, кроме внутренних областей видимости (например, внутри функций), если не использовать ключевое слово global.
<?php
$globalVar = "I'm global";

function test() {
    global $globalVar;
    echo $globalVar; // Выведет "I'm global"
}

test();
?>
🟠Область видимости функций и методов Переменные, объявленные внутри функции или метода класса, имеют свою локальную область видимости и не видны за её пределами.
<?php
class Test {
    public function method() {
        $localVar = "I'm local in method";
        echo $localVar; // Выведет "I'm local in method"
    }
}

$test = new Test();
$test->method();
echo $localVar; // Ошибка: переменная не найдена
?>
🟠Область видимости классов Публичная (public) Публичные свойства и методы доступны отовсюду: как внутри класса, так и вне его.
<?php
class Test {
    public $publicVar = "I'm public";

    public function publicMethod() {
        echo $this->publicVar;
    }
}

$test = new Test();
echo $test->publicVar; // Доступно и выведет "I'm public"
$test->publicMethod(); // Доступно и выведет "I'm public"
?>
🟠Защищённая (protected) Защищённые свойства и методы доступны только внутри класса и его наследников.
<?php
class Base {
    protected $protectedVar = "I'm protected";

    protected function protectedMethod() {
        echo $this->protectedVar;
    }
}

class Derived extends Base {
    public function accessProtected() {
        echo $this->protectedVar; // Доступно
        $this->protectedMethod(); // Доступно
    }
}

$derived = new Derived();
$derived->accessProtected(); // Выведет "I'm protected"
// echo $derived->protectedVar; // Ошибка: доступ запрещен
// $derived->protectedMethod(); // Ошибка: доступ запрещен
?>
🟠Приватная (private) Приватные свойства и методы доступны только внутри класса, в котором они объявлены, и недоступны в наследниках.
<?php
class Test {
    private $privateVar = "I'm private";

    private function privateMethod() {
        echo $this->privateVar;
    }

    public function accessPrivate() {
        $this->privateMethod(); // Доступно
    }
}

$test = new Test();
$test->accessPrivate(); // Выведет "I'm private"
// echo $test->privateVar; // Ошибка: доступ запрещен
// $test->privateMethod(); // Ошибка: доступ запрещен
?>
🟠Локальная область видимости Переменные доступны только внутри функции или метода, где они объявлены. 🟠Глобальная область видимости Переменные доступны везде в скрипте, кроме внутренних областей видимости, если не используется global. 🟠Публичная область видимости Свойства и методы доступны отовсюду. 🟠Защищённая область видимости Свойства и методы доступны только внутри класса и его наследников. 🟠Приватная область видимости Свойства и методы доступны только внутри класса, в котором они объявлены. Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое NGINX? Это высокопроизводительный веб-сервер и обратный прокси-сервер. Он используется для балансировки нагрузки, обработки HTTP/HTTPS-запросов, управления статическим контентом и интеграции с приложениями. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Чем отличается Require от Includ'а? В PHP есть две схожие конструкции для подключения файлов: require и include. Однако между ними есть важные различия. 🟠Основное различие: Ошибки при отсутствии файла require вызывает фатальную ошибку (Fatal Error), если указанный файл не найден или содержит ошибку. Это приведёт к немедленному завершению выполнения скрипта. include вызывает предупреждение (Warning), но код продолжит выполняться дальше.
require 'somefile.php'; // Если файла нет, скрипт завершится с ошибкой
echo "Этот код не выполнится";
Результат (если файла somefile.php нет):
Fatal error: require(): Failed opening 'somefile.php'...
Пример с include
include 'somefile.php'; // Если файла нет, скрипт выдаст предупреждение, но продолжит выполняться
echo "Этот код выполнится";
Результат (если файла somefile.php нет):
Warning: include(somefile.php): failed to open stream...
Этот код выполнится
🟠Использование и рекомендации require используют, когда файл обязателен для работы скрипта (например, файл с настройками или важными функциями). include используют, когда файл необязателен, и его отсутствие не должно прерывать выполнение (например, дополнительный шаблон страницы). 🟠`require_once` и `include_once` Дополнительно существуют require_once и include_once, которые работают аналогично, но не подключают файл повторно, если он уже был подключён.
require_once 'config.php'; // Подключится только один раз, даже если вызвано несколько раз
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое SQL? Это язык запросов для работы с реляционными базами данных. Он позволяет создавать, модифицировать, удалять данные, а также управлять структурами базы и выполнять сложные аналитические запросы. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое типизация? Типизация в программировании — это механизм, который определяет, как значения различных типов (например, целые числа, строки, объекты и т.д.) обрабатываются и взаимодействуют в языке программирования. Типизация помогает предотвратить ошибки, связанные с некорректным использованием данных, и улучшает читаемость и поддержку кода. 🚩Виды типизации 🟠Статическая типизация: Типы переменных известны и проверяются на этапе компиляции. Примеры языков: Java, C++, TypeScript. 🟠Динамическая типизация: Типы переменных определяются и проверяются во время выполнения программы. Примеры языков: Python, JavaScript, PHP. 🟠Сильная типизация: Язык строго следит за типами, не позволяя неявные преобразования между ними. Примеры языков: Haskell, Java. 🟠Слабая типизация: Язык допускает неявные преобразования между типами. Примеры языков: PHP, JavaScript. PHP — язык с динамической и слабой типизацией, но с версией 7.0 и выше появилась возможность использовать строгую типизацию.
$number = 10;
$number = "ten"; // PHP позволяет это, так как тип переменной может изменяться
С PHP 7.0 можно использовать строгую типизацию для функций и методов. Это позволяет явно указывать, какого типа аргументы и возвращаемое значение должны быть.
declare(strict_types=1); // Включает строгую типизацию

function add(int $a, int $b): int {
    return $a + $b;
}

echo add(2, 3); // Работает
// echo add(2, "3"); // Ошибка, так как второй аргумент не является целым числом
🚩ПлюсыПредотвращение ошибок: Типизация помогает обнаруживать ошибки на ранних этапах разработки, таких как попытка выполнения некорректных операций с данными. ➕Улучшение читаемости и поддержки кода: Явное указание типов делает код более понятным и предсказуемым, что облегчает его поддержку и развитие. ➕Оптимизация выполнения: Статически типизированные языки позволяют компиляторам оптимизировать выполнение кода, так как типы известны на этапе компиляции. ➕Документирование кода: Типизация служит дополнительной документацией, помогая разработчикам понять, какие данные ожидаются и возвращаются функциями и методами. Ставь 👍 и забирай 📚 Базу знаний

Нужен человек, для сбора вопросов из собеседований на должность PHP разработчик. Что надо делать: 1. Смотреть записи собеседований (список будет дан) 2. Выписывать вопросы, которые задают кандидату Ставка: 450 руб. / час Примерная ЗП: 54 000 руб. / месяц (4 часа в день) Если интересно и можешь уделять работе от 4 часов / день, то отправь сообщение https://t.me/niniafd и сразу напиши какие языки программирования знаешь и какие лучше всего?

🤔 Что такое strict mode? Это строгий режим в JavaScript, который вводит более жёсткие правила написания кода. Он предотвращает использование неявных глобальных переменных, запрещает дублирование параметров функций и использование некоторых устаревших функций. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое абстрагирование? Это принцип программирования и проектирования, который позволяет выделить важные характеристики объекта или системы и скрыть их сложные детали. Основная цель абстрагирования – упростить сложные системы, делая их более понятными и управляемыми, сосредоточив внимание на их основных аспектах и поведении. 🚩Зачем нужно абстрагирование 🟠Снижение сложности Сокращает количество деталей, с которыми нужно работать, что облегчает понимание и работу с системой. 🟠Повышение читаемости кода Упрощает код, делая его более читаемым и легким для поддержки. 🟠Повторное использование кода Создаёт возможность повторного использования общих функций и логики. 🟠Инкапсуляция Позволяет скрывать реализацию и представлять только необходимые интерфейсы для взаимодействия. 🟠Гибкость и расширяемость Облегчает добавление новых функциональностей без изменения существующего кода. 🚩Как используется абстрагирование Абстрагирование в программировании часто реализуется через классы и интерфейсы. Ниже приведены примеры абстракции в объектно-ориентированном программировании (ООП). 🚩Пример абстракции с использованием классов и интерфейсов 🟠Интерфейс Определяет набор методов, которые должны быть реализованы, не указывая, как именно они должны быть реализованы.
interface Shape {
    public function draw();
}
🟠Классы, реализующие интерфейс Реализуют методы, определённые в интерфейсе.
class Circle implements Shape {
    public function draw() {
        echo "Drawing a circle";
    }
}

class Square implements Shape {
    public function draw() {
        echo "Drawing a square";
    }
}
Использование абстракции
function renderShape(Shape $shape) {
    $shape->draw();
}

$circle = new Circle();
$square = new Square();

renderShape($circle); // Вывод: Drawing a circle
renderShape($square); // Вывод: Drawing a square
🚩Плюсы и минусы Снижение сложности Абстракция скрывает сложные детали реализации, облегчая работу с системой. ➕Улучшение читаемости Код становится более понятным и структурированным. ➕Гибкость и расширяемость Облегчает добавление новых функций и изменений. ➕Повторное использование Позволяет использовать общий код в разных частях программы. ➖Избыточность Иногда может приводить к избыточной сложности, если абстракции слишком сложные или используются неправильно. ➖Накладные расходы Может потребоваться больше времени и усилий на создание абстракций и их поддержку. Ставь 👍 и забирай 📚 Базу знаний

🤔 Какой метод распознает палиндромы? Метод для распознавания палиндрома проверяет, совпадает ли строка с её обратной версией. Для этого можно использовать реверс строки и сравнение, например, через str == str[::-1]. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Кибербезопасность в России в 2025 году. Вебинар 06.02.25 Российский кибербез стремительно меняется. Как именно — разберем на ежегодном вебинаре «Солара», опираясь на аналитику от Центра противодействия кибератакам Solar JSOC. Обсудим ключевые вызовы 2025 года, рассмотрим практические кейсы, в том числе внутренний пентест Solar JSOС, и поделимся ценными советами по защите от киберугроз. Не пропустите. Зарегистрироваться #реклама 16+ rt-solar.ru О рекламодателе

🤔 Какие есть минусы у монолитов и микросервисов? 🚩Минусы монолитной архитектуры 🟠Сложность изменений и развертывания: Любое изменение в коде требует пересборки и развертывания всего приложения, что увеличивает риск и время на внедрение новых функций и исправление ошибок. 🟠Трудности масштабирования: Масштабировать монолитные приложения сложно, так как зачастую приходится масштабировать все компоненты приложения одновременно, даже если нагрузка возрастает только на одну часть системы. 🟠Зависимости и тестирование: Из-за тесной взаимосвязанности модулей любое изменение может повлиять на всю систему, что усложняет тестирование и обнаружение ошибок. 🟠Трудности в поддержке и разработке: По мере роста кода и команды разработчиков становится трудно управлять кодовой базой и разделять ответственность между различными командами. 🚩Минусы микросервисов Ложность управления: Микросервисная архитектура требует управления множеством отдельных сервисов, что увеличивает сложность настройки, развертывания и мониторинга. ➖Межсервисные взаимодействия: Сервисы должны общаться друг с другом, часто через сети, что добавляет задержки и увеличивает вероятность сбоев и проблем с синхронизацией данных. ➖Разделение данных: Управление согласованностью данных между разными сервисами становится сложнее, особенно когда данные распределены по различным хранилищам. ➖Сложность разработки: Разработка и отладка распределенных систем сложнее из-за необходимости учета межсервисных взаимодействий, а также обеспечения согласованности и целостности данных. ➖Инфраструктурные затраты: Поддержка множества сервисов требует большей инфраструктуры и ресурсов, включая оркестрацию контейнеров, балансировку нагрузки и управление сервисами. Ставь 👍 и забирай 📚 Базу знаний

🤔 Чем отличается POST от PUT? - POST: используется для создания ресурса на сервере. Запросы обычно не идемпотентны, так как каждый запрос может создавать новый ресурс. - PUT: используется для создания или обновления ресурса с известным идентификатором. Запросы идемпотентны — повторное выполнение запроса приводит к одному и тому же результату. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний