cookie

نحن نستخدم ملفات تعريف الارتباط لتحسين تجربة التصفح الخاصة بك. بالنقر على "قبول الكل"، أنت توافق على استخدام ملفات تعريف الارتباط.

avatar

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

مشاركات الإعلانات
1 679
المشتركون
+10624 ساعات
+1437 أيام
+73630 أيام

جاري تحميل البيانات...

معدل نمو المشترك

جاري تحميل البيانات...

Какой принцип из SOLID позволяет соблюдать добавочные преобразования в работе ? Спросят с вероятностью 20% Принцип подстановки Барбары Лисков (Liskov Substitution Principle, LSP), который является одной из пяти основных концепций SOLID — набора принципов объектно-ориентированного дизайна, предназначенных для создания более понятного, гибкого и поддерживаемого программного обеспечения. Принцип подстановки Барбары Лисков (LSP) Утверждает, что объекты класса-наследника должны быть способны заменить объекты класса-предка, не нарушая корректность работы программы. Этот принцип расширяет идею подтипов, предполагая, что подклассы должны быть взаимозаменяемы с их базовыми классами. Основные аспекты: ✅Взаимозаменяемость: объекты подкласса можно использовать вместо объектов их суперкласса без изменения желаемого результата работы программы. ✅Сохранение поведения: подклассы не должны изменять поведение, заданное их базовыми классами, особенно те аспекты, которые клиенты класса ожидают. Допустим, у нас есть базовый класс Vehicle и производные от него классы Car и Bicycle. Если в базовом классе определен метод accelerate, который увеличивает скорость транспортного средства, то подклассы должны реализовать этот метод так, чтобы он не противоречил логике и ожиданиям от работы метода базового класса:
class Vehicle {
    protected $speed = 0;

    public function accelerate($increase) {
        $this->speed += $increase;
        return $this->speed;
    }
}

class Car extends Vehicle {
    public function accelerate($increase) {
        $this->speed += $increase * 2; // Ускоряемся быстрее, но логика сохраняется
        return $this->speed;
    }
}

class Bicycle extends Vehicle {
    public function accelerate($increase) {
        $this->speed += $increase / 2; // Ускоряемся медленнее, но логика сохраняется
        return $this->speed;
    }
}
В этом примере, несмотря на различные реализации метода accelerate в классах Car и Bicycle, они все еще соблюдают ожидания и логику, заданную в базовом классе Vehicle. Соблюдение LSP позволяет упростить модификацию и расширение программ, так как можно быть уверенным, что замена объектов базового класса на объекты подкласса не нарушит работу программы. Это делает архитектуру ПО более надежной и понятной. 👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 385 вопросов на PHP разработчика. Ставь 👍 если нравится контент 🔐 База собесов | 🔐 База тестовых
إظهار الكل...
Что такое модификатор видимости ? Спросят с вероятностью 13% Модификаторы видимости в ООП определяют уровень доступа к свойствам и методам класса. Они помогают контролировать, какие части программы могут взаимодействовать с этими свойствами и методами, что способствует инкапсуляции и защите данных. Основные модификаторы видимости 1️⃣public: ✅Свойства и методы, объявленные с модификатором public, доступны из любой точки программы. Это означает, что к ним можно обращаться как изнутри класса, так и из внешнего кода, и из подклассов. 2️⃣protected: ✅Свойства и методы, объявленные с модификатором protected, доступны только внутри самого класса и его подклассов. Внешний код не имеет доступа к protected-элементам класса. 3️⃣private: ✅Свойства и методы, объявленные с модификатором private, доступны только внутри самого класса. Подклассы и внешний код не могут получить к ним доступ. Пример класса с разными модификаторами видимости:
class Example {
    public $publicProperty = "I am public";
    protected $protectedProperty = "I am protected";
    private $privateProperty = "I am private";

    public function publicMethod() {
        echo "This is a public method\n";
    }

    protected function protectedMethod() {
        echo "This is a protected method\n";
    }

    private function privateMethod() {
        echo "This is a private method\n";
    }

    public function testVisibility() {
        // Внутри класса доступны все методы и свойства
        echo $this->publicProperty . "\n";     // Доступно
        echo $this->protectedProperty . "\n";  // Доступно
        echo $this->privateProperty . "\n";    // Доступно

        $this->publicMethod();    // Доступно
        $this->protectedMethod(); // Доступно
        $this->privateMethod();   // Доступно
    }
}

$example = new Example();
$example->publicMethod(); // Доступно
// $example->protectedMethod(); // Ошибка
// $example->privateMethod(); // Ошибка

echo $example->publicProperty . "\n"; // Доступно
// echo $example->protectedProperty . "\n"; // Ошибка
// echo $example->privateProperty . "\n"; // Ошибка

$example->testVisibility();
Пример наследования и видимости:
class ParentClass {
    public $publicProperty = "I am public";
    protected $protectedProperty = "I am protected";
    private $privateProperty = "I am private";

    public function publicMethod() {
        echo "This is a public method\n";
    }

    protected function protectedMethod() {
        echo "This is a protected method\n";
    }

    private function privateMethod() {
        echo "This is a private method\n";
    }
}

class ChildClass extends ParentClass {
    public function testChildVisibility() {
        echo $this->publicProperty . "\n";     // Доступно
        echo $this->protectedProperty . "\n";  // Доступно
        // echo $this->privateProperty . "\n"; // Ошибка

        $this->publicMethod();    // Доступно
        $this->protectedMethod(); // Доступно
        // $this->privateMethod(); // Ошибка
    }
}

$child = new ChildClass();
$child->testChildVisibility();
1️⃣public: Доступен отовсюду. 2️⃣protected: Доступен внутри класса и его подклассов. 3️⃣private: Доступен только внутри класса. Модификаторы видимости определяют, кто может получить доступ к свойствам и методам класса. public доступен отовсюду, protected доступен только внутри класса и его наследников, private доступен только внутри самого класса. 👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 385 вопросов на PHP разработчика. Ставь 👍 если нравится контент 🔐 База собесов | 🔐 База тестовых
إظهار الكل...
👍 2
Какие паттерны есть ? Спросят с вероятностью 20% Паттерны проектирования — это проверенные решения для общих проблем, с которыми сталкиваются разработчики при проектировании и разработке ПО. Они представляют собой не конкретные реализации кода, а общие подходы к решению типичных задач проектирования. Помогают сделать архитектуру приложения более чистой, понятной и масштабируемой. Паттерны проектирования обычно делятся на три основные категории: 1️⃣Порождающие паттерны (Creational Patterns) Эти паттерны обеспечивают различные механизмы создания объектов, позволяя создавать объекты удобным и безопасным способом. Основная цель — упростить создание объектов, особенно в сложных структурах. ✅Singleton (Одиночка): Гарантирует, что класс имеет только один экземпляр, и предоставляет глобальную точку доступа к этому экземпляру. ✅Factory Method (Фабричный метод): Определяет интерфейс для создания объекта, но оставляет подклассам решение о том, какой класс инстанцировать. ✅Abstract Factory (Абстрактная фабрика): Создает семейство связанных или зависимых объектов без указания их конкретных классов. ✅Builder (Строитель): Позволяет создавать сложные объекты пошагово. ✅Prototype (Прототип): Позволяет копировать объекты, не вдаваясь в подробности их реализации. 2️⃣Структурные паттерны (Structural Patterns) Эти паттерны описывают способы сборки объектов и классов в более крупные структуры, при этом сохраняя гибкость и эффективность структур. ✅Adapter (Адаптер): Позволяет объектам с несовместимыми интерфейсами работать вместе. ✅Composite (Компоновщик): Компонует объекты в древовидные структуры для представления иерархий часть-целое. ✅Proxy (Прокси): Предоставляет заместителя или местозаменителя для другого объекта, чтобы контролировать доступ к нему. ✅Facade (Фасад): Предоставляет упрощенный интерфейс к сложной системе подсистем. ✅Bridge (Мост): Разделяет абстракцию и реализацию так, чтобы они могли изменяться независимо. 3️⃣Поведенческие паттерны (Behavioral Patterns) Эти паттерны описывают алгоритмы и распределение обязанностей между объектами. Они не только определяют связи, но и пути коммуникации между объектами. ✅Observer (Наблюдатель): Позволяет объектам получать уведомления об изменении состояния других объектов. ✅Strategy (Стратегия): Позволяет определять семейство алгоритмов, инкапсулировать каждый из них и обеспечивать их взаимозаменяемость. ✅Command (Команда): Превращает запросы в объекты, позволяя передавать их как аргументы при вызове методов, ставить запросы в очередь, логировать их, а также поддерживать отмену операций. ✅State (Состояние): Позволяет объекту изменять свое поведение при изменении внутреннего состояния. ✅Mediator (Посредник): Уменьшает связанность множества классов за счет перемещения этих классов в один класс-посредник. Каждый из этих паттернов имеет своё применение и может использоваться для решения типичных задач проектирования ПО, улучшения архитектуры приложения и упрощения процесса разработки. 👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 385 вопросов на PHP разработчика. Ставь 👍 если нравится контент 🔐 База собесов | 🔐 База тестовых
إظهار الكل...
👍 3
Какие типы объединений есть в таблицах ? Спросят с вероятностью 20% Объединение таблиц является ключевой операцией, позволяющей объединять данные из двух или более таблиц на основе общих столбцов. Существует несколько типов объединений (JOINs), каждый из которых имеет свои особенности и используется в зависимости от того, какие данные нужно извлечь. 1️⃣INNER JOIN Возвращает строки, когда существует хотя бы одно совпадение в обеих таблицах. Это наиболее часто используемый тип объединения, который обеспечивает выборку только тех записей, которые имеют соответствия в обеих таблицах
SELECT columns
FROM table1
INNER JOIN table2
ON table1.common_field = table2.common_field;
2️⃣LEFT JOIN (или LEFT OUTER JOIN) Возвращает все строки из левой таблицы (table1), и соответствующие строки из правой таблицы (table2). Если нет совпадения, результат будет содержать NULL в столбцах правой таблицы.
SELECT columns
FROM table1
LEFT JOIN table2
ON table1.common_field = table2.common_field;
3️⃣RIGHT JOIN (или RIGHT OUTER JOIN) Работает аналогично LEFT JOIN, но возвращает все строки из правой таблицы, и соответствующие строки из левой таблицы. Если совпадений с левой таблицей нет, в результате будут NULL значения в столбцах левой таблицы.
SELECT columns
FROM table1
RIGHT JOIN table2
ON table1.common_field = table2.common_field;
4️⃣FULL JOIN (или FULL OUTER JOIN) Возвращает строки, когда существует совпадение в одной из таблиц. Возвращает все строки из обеих таблиц, заполняя NULL там, где нет совпадений. Этот тип объединения может привести к очень большому количеству строк, если в обеих таблицах много несовпадающих данных.
SELECT columns
FROM table1
FULL JOIN table2
ON table1.common_field = table2.common_field;
5️⃣CROSS JOIN Возвращает декартово произведение двух таблиц, то есть каждая строка одной таблицы соединяется с каждой строкой другой таблицы. Этот тип объединения не требует условия ON, потому что каждая комбинация записей будет возвращена.
SELECT columns
FROM table1
CROSS JOIN table2;
6️⃣SELF JOIN Используется для объединения таблицы с самой собой, как будто это две разные таблицы. Это полезно для задач, где нужно сравнить строки внутри одной таблицы.
SELECT a.columns, b.columns
FROM table1 a, table1 b
WHERE condition;
Каждый тип объединения имеет свои применения в зависимости от того, какие данные нужно получить из одной или нескольких таблиц. Понимание различий между этими типами объединений помогает эффективно манипулировать данными и получать необходимые результаты из баз данных 👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 385 вопросов на PHP разработчика. Ставь 👍 если нравится контент 🔐 База собесов | 🔐 База тестовых
إظهار الكل...

👍 5
Что такое полиморфизм ? Спросят с вероятностью 20% Полиморфизм — это концепция в ООП, которая позволяет объектам использовать методы с одинаковым именем, но с разной реализацией в зависимости от типа объекта. Это одна из основных идей объектно-ориентированного дизайна, рядом с инкапсуляцией и наследованием. Он улучшает гибкость и возможность повторного использования кода, делая систему более модульной и легко расширяемой. Типы 1️⃣Ад хок полиморфизм: Также известный как перегрузка функций или операторов. Он позволяет использовать одно имя функции для выполнения различных функций в зависимости от контекста вызова или аргументов. 2️⃣Параметрический полиморфизм: Это когда код написан таким образом, что он может обрабатывать данные независимо от их типа. Во многих языках это реализуется с помощью обобщений (generics). 3️⃣Подтиповый полиморфизм (или включающий полиморфизм): Это когда методы подкласса, которые заменяют методы суперкласса, могут быть вызваны через ссылку на суперкласс. Это основная форма полиморфизма, обсуждаемая в контексте ООП. Рассмотрим пример, где различные классы производных объектов используют один и тот же метод, определенный в базовом классе, но каждый подкласс переопределяет этот метод по-своему.
<?php
// Базовый класс с методом speak
class Animal {
    public function speak() {
        return "Я какое-то животное и издаю звук.";
    }
}

// Первый производный класс
class Dog extends Animal {
    public function speak() {
        return "Гав!";
    }
}

// Второй производный класс
class Cat extends Animal {
    public function speak() {
        return "Мяу!";
    }
}

// Функция для демонстрации полиморфизма
function makeAnimalSpeak($animal) {
    echo $animal->speak() . "\n";
}

// Создание объектов
$animal = new Animal();
$dog = new Dog();
$cat = new Cat();

// Вызов той же функции с разными объектами
makeAnimalSpeak($animal);  // Выводит: Я какое-то животное и издаю звук.
makeAnimalSpeak($dog);     // Выводит: Гав!
makeAnimalSpeak($cat);     // Выводит: Мяу!
?>
В этом примере каждый класс наследует от класса Animal и переопределяет метод speak(). Функция makeAnimalSpeak принимает объект класса Animal и вызывает его метод speak(). Благодаря полиморфизму, несмотря на то, что каждый объект может быть экземпляром разного класса, функция корректно вызывает соответствующую реализацию метода speak для каждого объекта. Полиморфизм делает программы более гибкими и легкими в обслуживании. Он позволяет программистам использовать один и тот же код для обработки объектов разных типов, что упрощает расширение программ без изменения существующего кода. 👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 385 вопросов на PHP разработчика. Ставь 👍 если нравится контент 🔐 База собесов | 🔐 База тестовых
إظهار الكل...
👍 6
Photo unavailableShow in Telegram
🔥Тесты для подготовки к собеседованию🔥 Выбери своё направление: 1. Frontend 2. Python 3. Java 4. Тестировщик QA 5. Data Science 6. DevOps 7. C# 8. С/C++ 9. Golang 10. PHP 11. Kotlin 12. Swift
إظهار الكل...
👍 1
Какой синтаксис у заголовков ? Спросят с вероятностью 7% Заголовки в языках и разметки часто используются для указания ключевой информации, на которую стоит обратить внимание, и они различаются в зависимости от конкретного контекста и языка. Ниже приведены примеры синтаксиса заголовков в различных контекстах: Заголовки в HTML Поддерживает шесть уровней заголовков, от <h1> до <h6>, где <h1> представляет самый важный заголовок, а <h6> — наименее важный.
<h1>Заголовок уровня 1</h1>
<h2>Заголовок уровня 2</h2>
<h3>Заголовок уровня 3</h3>
<h4>Заголовок уровня 4</h4>
<h5>Заголовок уровня 5</h5>
<h6>Заголовок уровня 6</h6>
Заголовки в Markdown Это язык разметки, который упрощает форматирование текста, особенно для написания документации. Заголовки создаются с помощью символа # перед текстом заголовка. Количество символов # определяет уровень заголовка.
# Заголовок уровня 1
## Заголовок уровня 2
### Заголовок уровня 3
#### Заголовок уровня 4
##### Заголовок уровня 5
###### Заголовок уровня 6
Заголовки в LaTeX Это система подготовки документов, широко используемая для научных и технических документов. В LaTeX заголовки создаются с помощью команд \section, \subsection, \subsubsection и так далее.
\section{Заголовок уровня 1}
\subsection{Заголовок уровня 2}
\subsubsection{Заголовок уровня 3}
\paragraph{Заголовок уровня 4}
\subparagraph{Заголовок уровня 5}
Заголовки в Языке разметки Wiki Многие вики-движки (например, MediaWiki) используют свои синтаксисы для создания заголовков. В MediaWiki заголовки создаются с помощью равно (=) вокруг текста заголовка.
= Заголовок уровня 1 =
== Заголовок уровня 2 ==
=== Заголовок уровня 3 ===
==== Заголовок уровня 4 ====
===== Заголовок уровня 5 =====
====== Заголовок уровня 6 ======
Заголовки в языках Часто не используются так же, как в разметке, но комментарии могут выполнять схожую роль для организации и документирования кода. Примеры синтаксиса для комментариев-заголовков: Python
# Заголовок уровня 1
## Заголовок уровня 2
### Заголовок уровня 3
JavaScript
// Заголовок уровня 1
// =================
// Заголовок уровня 2
// -----------------
// Заголовок уровня 3
// ~~~~~~~~~~~~~~~~~
Синтаксис заголовков варьируется в зависимости от используемого языка или системы разметки. В HTML и Markdown существуют чёткие уровни заголовков от 1 до 6, а в LaTeX и вики-движках используются соответствующие команды и символы. В языках программирования заголовки не являются частью синтаксиса, но комментарии могут использоваться для создания подобной структуры. 👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти к списку 385 вопросов на PHP разработчика. Ставь 👍 если нравится контент 🔐 База собесов | 🔐 База тестовых
إظهار الكل...
🤔 4👍 1
Photo unavailableShow in Telegram
Привет! Ты сейчас ищешь работу? Если да, то у меня для тебя классные новости. Мы с Максом решили провести вебинар на тему поиска работы и того, как быстрее получить оффер. Зачем? Да потому что найти работу просто откликаясь на вакансии теперь практически нереально. На Junior вакансии откликаются по 1500 кандидатов. 1500 человек, Карл... Вопрос: Как искать работу в таких условиях? Ответ: Нужно менять подходы, и использовать новые способы поиска работы. А вот какие способы, и как искать работу в 2024 году, расскажет мой товарищ - Макс, который помогает разработчикам с трудоустройством. Он расскажет тебе как ПРАВИЛЬНО откликаться на вакансии, на что смотрят рекрутеры, и как ты должен быть упакован, чтобы получить работу в это непростое время. 🗓 Когда? Во вторник – 18 июня, в 19:00 по мск. 🎁 После регистрации он также обещал прислать: 1) Анализ рынка труда. 2) Разбор кейсов тех, кто сейчас находит работу. 3) Пошаговый план, что нужно делать, чтобы прийти к оферу. 👉 Записаться на вебинар по поиску работы.
إظهار الكل...
🤔 1
Что такое динамическая типизация ? Спросят с вероятностью 20% Динамическая типизация означает, что типы данных переменных определяются во время выполнения программы, и одна и та же переменная может последовательно принимать значения разных типов. Это добавляет гибкости при разработке, но также требует внимательности, чтобы избежать типовых ошибок. Вот пример, демонстрирующий, как переменная может менять свой тип в зависимости от контекста использования:
<?php
$x = 42;        // Сначала $x — целое число
echo gettype($x);  // выводит: integer

$x = "Hello, world!";  // Теперь $x — строка
echo gettype($x);  // выводит: string

$x = 42.5;       // Теперь $x — число с плавающей точкой
echo gettype($x);  // выводит: double

$x = true;       // Теперь $x — булев тип
echo gettype($x);  // выводит: boolean
?>
В этом коде переменная $x последовательно принимает значения различных типов: целое число, строка, число с плавающей точкой и булев тип. Функция gettype() используется для вывода текущего типа переменной $x. Динамическая типизация также позволяет производить различные операции с переменными разных типов без явного преобразования типов:
<?php
$x = "10";           // $x — строка
$y = 20;             // $y — целое число

$sum = $x + $y;      // Прибавление строки к числу
echo $sum;           // Выводит: 30

$concatenation = $x . $y;  // Конкатенация строки и числа
echo $concatenation;  // Выводит: 1020
?>
В этом примере переменная $x является строкой, а $y — целым числом. При сложении $x + $y PHP автоматически приводит строку к числу, и результатом является числовая сумма. При конкатенации же ($x . $y) числовое значение $y преобразуется в строку, и результатом является строковая конкатенация. Динамическая типизация упрощает многие аспекты разработки за счет автоматического приведения типов и возможности использовать переменные в различных контекстах. Однако это также может привести к ошибкам, если не обращать внимание на текущий тип переменной и не предусматривать проверки типов там, где это необходимо. 👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 385 вопросов на PHP разработчика. Ставь 👍 если нравится контент 🔐 База собесов | 🔐 База тестовых
إظهار الكل...
Привет, мне нужно несколько контент-менеджеров для новых телеграм каналов в тематике программирования. Если вам интересна такая работа напиши мне @kivaiko и лучше сразу напишите какие языки программирования учите/знаете
إظهار الكل...