PHP | Вопросы собесов
Сайт: https://easyoffer.ru Написать: @easyoffer_adv
إظهار المزيد1 679
المشتركون
+10624 ساعات
+1437 أيام
+73630 أيام
- المشتركون
- التغطية البريدية
- ER - نسبة المشاركة
جاري تحميل البيانات...
معدل نمو المشترك
جاري تحميل البيانات...
Какой принцип из 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
Какой синтаксис у заголовков ?
Спросят с вероятностью 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 и лучше сразу напишите какие языки программирования учите/знаете