PHP | Вопросы собесов
前往频道在 Telegram
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv
显示更多2 344
订阅者
+124 小时
无数据7 天
-2330 天
帖子存档
Как браузер понимает, что заголовки закончились ?
Спросят с вероятностью 7%
Заголовки (headers) передаются в запросах и ответах для передачи метаданных о самом запросе или ответе. Браузер, как и другие HTTP-клиенты и серверы, понимает, что заголовки закончились, благодаря определённым правилам протокола HTTP.
Как браузер понимает, что заголовки закончились
1️⃣Разделение заголовков и тела сообщения:
✅Заголовки HTTP отделяются от тела сообщения пустой строкой. В HTTP-протоколе пустая строка (двойной перенос строки, или CRLF CRLF) сигнализирует о завершении заголовков.
2️⃣Формат заголовков:
✅Каждый заголовок начинается с имени заголовка, за которым следует двоеточие и значение заголовка. Например:
Content-Type: text/html
Content-Length: 1234
✅Заголовки передаются в виде строки, где каждый заголовок заканчивается CRLF (\r\n).
GET /index.html HTTP/1.1
Host: www.example.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
<тело сообщения при необходимости>
В этом примере пустая строка после заголовков говорит браузеру, что заголовки закончились и начинается тело сообщения (если оно есть).
HTTP/1.1 200 OK
Date: Mon, 27 May 2024 12:28:53 GMT
Server: Apache/2.4.1 (Unix)
Last-Modified: Tue, 15 Nov 2022 12:45:26 GMT
Content-Length: 88
Content-Type: text/html
Connection: Closed
<тело сообщения>
Опять же, пустая строка (CRLF CRLF) отделяет заголовки от тела ответа.
Браузер понимает, что HTTP-заголовки закончились, благодаря присутствию пустой строки, которая отделяет заголовки от тела сообщения. Это ключевое правило протокола HTTP, позволяющее корректно интерпретировать данные запроса и ответа.
👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти к списку 385 вопросов на PHP разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых⚡️В сети начали находить курсы и книги известных онлайн школ в открытом доступе
Вот отсортированная база с тонной материала(постепенно пополняется):
🔗 БАЗА (3385 видео):
(343 видео, 87 книги) — Java
(176 видео, 32 книги) — Git
(293 видео, 63 книги) — C#
(352 видео, 89 книги) — С++
(167 видео, 53 книги) — PHP
(227 видео, 83 книги) — SQL
(163 видео, 29 книги) — Linux
(363 видео, 122 книги) — Python
(415 видео, 168 книги) — Frontend
(143 видео, 33 книги) — Flask
(167 видео, 43 книги) — Django
(197 видео, 49 книги) — Разработка ботов
(137 видео, 93 книги) — Data Science
(113 видео, 82 книги) — GameDev
(129 видео, 73 книги) — QA
Скачивать ничего не нужно — все выложили в Telegram и на YouTube с доступом по ссылке
В чем разница между merge и rebase ?
Спросят с вероятностью 20%
merge и rebase являются двумя различными способами интеграции изменений из одной ветки в другую. Оба метода используются для слияния изменений, но они делают это по-разному и имеют различные последствия для истории коммитов.
merge
Используется для объединения изменений из одной ветки в другую.
Merge создаёт новый коммит, который автоматически имеет двух родителей: один указывает на последний коммит текущей ветки (на которую вы сейчас нацелены), а другой — на коммит из сливаемой ветки.
Особенности:
✅Не изменяет историю. История сохраняется такой, какая она есть, что может быть полезно для сохранения полной истории проекта и контекста изменений.
✅Создаёт "merge commit". Этот коммит объединяет истории двух веток, что иногда может привести к загромождению истории, особенно в больших проектах с множеством веток.
git merge feature-branch
Эта команда объединит изменения из feature-branch в текущую ветку.
Rebase
Это другой способ интеграции изменений, который фактически переносит ветку на новую базу. При его использовании коммиты из одной ветки переносятся и применяются поверх другой ветки.
Особенности:
✅Изменяет историю. Переписывает историю коммитов, что делает её более чистой и линейной.
✅Избегает лишних merge commits. История коммитов выглядит как последовательный поток, что может облегчить понимание истории изменений.
✅Может быть рискованным. Изменение истории веток, которые уже были опубликованы и используются другими разработчиками, может привести к конфликтам и потребует от всех участников проекта пересинхронизировать свои репозитории.
git rebase master
Эта команда перенесёт текущую ветку на вершину ветки master.
Когда их использовать
✅Используйте merge, если вам важно сохранить точную историю изменений и когда работаете в команде, где изменения регулярно синхронизируются между множеством веток.
✅Используйте rebase, если вы хотите поддерживать чистую и линейную историю изменений, особенно перед вливанием локальной ветки в основную. Однако важно сначала получить последние изменения из основной ветки и только после этого выполнять rebase.
Выбор между merge и rebase может зависеть от конкретной ситуации и от того, какие приоритеты и политики установлены в вашем проекте относительно управления версиями.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 385 вопросов на PHP разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовыхПривет, ребят, хочу сделать так, чтобы для каждого вопроса было поясняющее видео в reels/shorts формате.
Ищу человека который с этим поможет, работу оплачу. Вопросы есть, нужен простой монтаж и озвучка. Все видосы делаются по шаблону.
Если интересует такая подработка напишите мне @kivaiko
Что такое протокол ?
Спросят с вероятностью 7%
Протокол — это набор правил и стандартов, которые определяют, как данные должны передаваться между различными устройствами в сети. Протоколы обеспечивают согласованность и упорядоченность в обмене данными, позволяя различным системам и устройствам взаимодействовать друг с другом.
Типы
Можно классифицировать по различным уровням сетевой модели OSI (Open Systems Interconnection) и TCP/IP модели.
Протоколы прикладного уровня (Application Layer)
1️⃣HTTP (Hypertext Transfer Protocol):
✅Протокол для передачи гипертекста, используемый в интернете для просмотра веб-страниц.
✅Работает по принципу запрос-ответ между клиентом (например, браузером) и сервером.
2️⃣FTP (File Transfer Protocol):
✅Протокол для передачи файлов между клиентом и сервером.
✅Поддерживает функции загрузки и скачивания файлов.
3️⃣SMTP (Simple Mail Transfer Protocol):
✅Протокол для передачи электронной почты.
✅Используется для отправки сообщений от клиента к серверу и между серверами.
Протоколы транспортного уровня (Transport Layer)
1️⃣TCP (Transmission Control Protocol):
✅Обеспечивает надежную, управляемую передачу данных.
✅Гарантирует доставку данных в правильном порядке и без потерь.
2️⃣UDP (User Datagram Protocol):
✅Обеспечивает быструю, но ненадежную передачу данных.
✅Не гарантирует доставку и порядок получения данных, но менее затратен по ресурсам.
Протоколы сетевого уровня (Network Layer)
1️⃣IP (Internet Protocol):
✅Основной протокол для передачи данных по сети.
✅Использует IP-адреса для маршрутизации пакетов данных от отправителя к получателю.
2️⃣ICMP (Internet Control Message Protocol):
✅Протокол для передачи сообщений об ошибках и диагностической информации.
✅Используется, например, для команды
ping.
Протоколы канального уровня (Data Link Layer)
1️⃣Ethernet:
✅Протокол для локальных сетей (LAN), определяющий физические и канальные аспекты передачи данных.
✅Использует MAC-адреса для идентификации устройств в сети.
2️⃣PPP (Point-to-Point Protocol):
✅Протокол для прямого соединения двух точек.
✅Часто используется для соединений через телефонные линии.
Когда вы вводите URL в браузере, происходит следующий процесс:
1️⃣Запрос HTTP: Браузер отправляет HTTP-запрос к серверу, запрашивая нужную веб-страницу.
2️⃣Ответ HTTP: Сервер отправляет обратно HTTP-ответ, содержащий код состояния (например, 200 OK) и содержимое страницы.
3️⃣Отображение: Браузер отображает полученную страницу на экране пользователя.
Протоколы являются критически важными для обеспечения связи и взаимодействия между различными устройствами и системами в сети. Они определяют правила и стандарты передачи данных, обеспечивая надежность, согласованность и безопасность обмена информацией.
👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти к списку 385 вопросов на PHP разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовыхПривет, PHP бандиты 🔪
У нас супер новость, которая заставит ваше сердце биться быстрее! Мы нашли способ, как сэкономить время и деньги 💸, тестируя свои проекты.
Cloud․ru — лидер в облачных и AI-технологиях, запустил free tier, и это именно то, что нужно. Вот что они предлагают бесплатно:
🟢Виртуальная машина: 2vCPU/4 ГБ ОЗУ с 30 ГБ дискового пространства. Это идеальная платформа для разработки и тестирования ваших PHP приложений или даже для создания собственного VPN-шлюза.
🟢Объектное хранилище S3: 5 ГБ хранилища и бесплатные операции для загрузки данных.
Чтобы получить доступ к этим возможностям, вам понадобится публичный IP, который стоит всего 146 рублей. Или еще лучше — используйте бонус в 4000 рублей, который вы получите, зарегистрировавшись с привязкой карты или по Сбер ID.
Начать легко как 1-2-3: зайти на сайт, пройти регистрацию и выбрать нужный сервис в рамках free tier ✈️
Что такое статическое связывание ?
Спросят с вероятностью 20%
Статическое связывание также играет важную роль, особенно когда дело доходит до разрешения вызовов методов в контексте наследования классов. Использует позднее статическое связывание для предоставления контекста вызова в статических методах, что позволяет переопределять статические методы в дочерних классах. Рассмотрим это на примере.
class BaseClass {
public static function who() {
echo "Я BaseClass\n";
}
public static function test() {
self::who(); // Здесь используется статическое связывание
}
}
class ChildClass extends BaseClass {
public static function who() {
echo "Я ChildClass\n";
}
}
BaseClass::test(); // Вывод: Я BaseClass
ChildClass::test(); // Вывод: Я BaseClass
В этом примере, вызов ChildClass::test() приводит к выводу "Я BaseClass", поскольку метод test() в базовом классе привязан статически к методу who() базового класса через self::, который не учитывает контекст вызывающего класса.
Предоставляет ключевое слово static::, которое позволяет переопределять статические методы в контексте наследования, используя так называемое "позднее статическое связывание".
class BaseClass {
public static function who() {
echo "Я BaseClass\n";
}
public static function test() {
static::who(); // Используется позднее статическое связывание
}
}
class ChildClass extends BaseClass {
public static function who() {
echo "Я ChildClass\n";
}
}
BaseClass::test(); // Вывод: Я BaseClass
ChildClass::test(); // Вывод: Я ChildClass
Здесь, когда вызывается ChildClass::test(), static::who() корректно определяет, что должен быть вызван переопределённый метод who() в ChildClass, и поэтому выводится "Я ChildClass". Это поведение особенно полезно в шаблонах проектирования, где поведение базового класса должно быть расширено или модифицировано в производных классах.
Gозднее статическое связывание позволяет обеспечить более гибкое поведение статических методов в иерархии классов, что делает его мощным инструментом для ООП.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 385 вопросов на PHP разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовыхКакую проблему решают фабрика и фабричный метод ?
Спросят с вероятностью 20%
Паттерны проектирования "Фабрика" (Factory) и "Фабричный метод" (Factory Method) помогают решать общую проблему в программировании — создание объектов без указания конкретных классов продуктов. Оба паттерна предлагают способ делегирования процесса инстанциации объектов в специальные классы или методы, что упрощает управление зависимостями и делает систему более модульной и легко расширяемой.
Фабричный метод (Factory Method)
Этот паттерн определяет интерфейс для создания объекта, но позволяет подклассам изменять тип создаваемых объектов. Таким образом, классы могут делегировать создание экземпляров другим классам.
Проблемы, которые он решает:
1️⃣Гибкость: Позволяет классам оставаться независимыми от конкретных классов продуктов, которые они должны создавать.
2️⃣Расширяемость: Упрощает добавление новых продуктов или изменение существующих без изменения существующего кода, который их создает.
3️⃣Декаплинг: Изолирует конкретные классы, упрощая замену, расширение и управление зависимостями.
interface Product {
public function operation(): string;
}
class ConcreteProductA implements Product {
public function operation(): string {
return "Результат работы продукта A";
}
}
class ConcreteProductB implements Product {
public function operation(): string {
return "Результат работы продукта B";
}
}
abstract class Creator {
abstract public function factoryMethod(): Product;
public function someOperation(): string {
$product = $this->factoryMethod();
return "Creator: тот же самый код работает с " . $product->operation();
}
}
class ConcreteCreatorA extends Creator {
public function factoryMethod(): Product {
return new ConcreteProductA();
}
}
class ConcreteCreatorB extends Creator {
public function factoryMethod(): Product {
return new ConcreteProductB();
}
}
function clientCode(Creator $creator) {
echo $creator->someOperation();
}
clientCode(new ConcreteCreatorA());
clientCode(new ConcreteCreatorB());
Фабрика (Factory)
Представляет собой другой способ создания объектов — специальный класс или метод, который создает и возвращает экземпляры объектов. Этот паттерн обычно используется, когда нужно создать несколько различных, но похожих типов объектов.
Проблемы, которые она решает:
1️⃣Централизация логики создания: Хранение всей логики создания объектов в одном месте упрощает обслуживание и изменения.
2️⃣Отделение кода: Изоляция кода создания объектов от их использования.
3️⃣Управление комплексными процессами создания: Фабрика может обрабатывать сложные процессы создания, включая инициализацию различных членов объекта.
class CarFactory {
public static function createCar($type) {
if ($type === 'sedan') {
return new Sedan();
} elseif ($type === 'suv') {
return new SUV();
} else {
throw new Exception("Тип автомобиля не поддерживается.");
}
}
}
class Sedan {
public function describe() {
return "Я седан";
}
}
class SUV {
public function describe() {
return "Я внедорожник";
}
}
$car = CarFactory::createCar('sedan');
echo $car->describe();
Оба паттерна — Фабрика и Фабричный метод — помогают упростить создание объектов, делая систему более гибкой и поддерживаемой. Они позволяют изменять и добавлять новые типы объектов без внесения изменений в код, который эти объекты использует, обеспечивая тем самым лучшую организацию кода и его масштабируемость.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 385 вопросов на PHP разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовыхДля чего нужен middleware ?
Спросят с вероятностью 20%
Middleware — это ПО, которое располагается между веб-сервером и приложением. Оно обрабатывает входящие запросы до того, как они достигнут вашего приложения, или обрабатывает исходящие ответы после того, как приложение их сгенерировало.
Зачем он нужен
1️⃣Управление запросами: Может изменять или проверять запросы перед передачей их в приложение. Например, оно может проверять наличие валидных токенов доступа для аутентификации или осуществлять проверку прав доступа.
2️⃣Перехват ответов: Также может изменять ответы перед тем, как они будут отправлены пользователю, например, добавлять нужные заголовки HTTP или сжимать данные.
3️⃣Логирование и мониторинг: Оно может записывать информацию о запросах и ответах для анализа трафика или обнаружения ошибок.
4️⃣Обработка ошибок: Часто используется для централизованной обработки ошибок, позволяя разработчикам управлять ошибками элегантно и единообразно.
В PHP-фреймворке, таком как Laravel, middleware часто используется для аутентификации, логирования, обработки сессий и т.д. Ниже пример middleware, который проверяет, залогинен ли пользователь в Laravel:
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
class CheckAuthenticated
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (!Auth::check()) {
return redirect('/login');
}
return $next($request);
}
}
В этом примере, CheckAuthenticated проверяет, аутентифицирован ли пользователь. Если нет, перенаправляет его на страницу входа.
Middleware — это слой между сервером и приложением, который помогает управлять запросами и ответами, обеспечивает безопасность, и поддерживает чистоту и модульность кода. Это посредник, который позволяет вам централизованно управлять общими задачами, связанными с запросами и ответами.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 385 вопросов на PHP разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовыхПривет, я Леха. Вопросы собеседований берутся с моего сайта easyoffer.ru. Его я делал как пет-проект, чтобы устроиться на работу, но сейчас проект уже перерастает в стартап и я пишу об этом в своем TG блоге Идущий к IT и на YouTube.
"Как считается вероятность вопросов?"Об этом писал в статье на Habr ➖Если нашли ошибку в посте пишите @aurumsunset ➖Если хотите купить рекламу на канале пишите @easyoffer_adv ➖Чтобы получить доступ к приватной группе, где мы выкладываем реальные записи собеседований переходите в бота ➖Аналогично для тестовых заданий вот этот бот
Какие типы БД бывают ?
Спросят с вероятностью 27%
Базы данных (БД) являются основой для хранения, управления и извлечения данных в различных приложениях и системах. Существует несколько типов, каждый из которых предназначен для решения определенных задач и проблем. Основные типы включают:
1️⃣Реляционные базы данных (RDBMS)
Это наиболее традиционный и широко используемый тип баз данных. Данные в реляционных базах данных организованы в таблицы, где каждая таблица состоит из рядов и колонок. Реляционные базы данных используют SQL (Structured Query Language) для управления данными и манипуляций с ними. Примеры включают MySQL, PostgreSQL, Oracle Database и Microsoft SQL Server.
2️⃣Нереляционные базы данных (NoSQL)
Разработаны как альтернатива традиционным реляционным системам, чтобы лучше справляться с большими объемами распределенных данных и разнообразными структурами данных. Они не требуют фиксированной схемы, не обязательно следуют ACID свойствам и часто оптимизированы для специфических типов данных. Примеры NoSQL баз включают:
✅Документо-ориентированные: MongoDB, CouchDB (данные хранятся в виде JSON-подобных документов).
✅Ключ-значение: Redis, DynamoDB (простая модель данных, где каждому ключу соответствует значение).
✅Широкие столбцы: Cassandra, HBase (оптимизированы для чтения и записи больших объемов данных).
✅Графовые: Neo4j, ArangoDB (используются для представления и хранения информации в виде графов).
3️⃣Объектно-ориентированные базы данных (OODBMS)
Хранят данные в виде объектов, как в объектно-ориентированном программировании. Эти базы данных напрямую поддерживают объекты, классы и наследование в своих языках запросов. Примеры включают db4o и ObjectDB.
4️⃣Иерархические базы данных
Данные организованы в форме дерева, где связи между данными имеют вид родитель-ребенок. Иерархические базы данных были одними из первых типов баз данных и используются преимущественно в старых, больших системах. Примеры включают IBM Information Management System (IMS).
5️⃣Сетевые базы данных
Схожи с иерархическими, но позволяют каждой записи иметь несколько родителей, образуя сеть. Этот тип менее распространен, но используется в некоторых приложениях, требующих сложных связей между данными. Примеры включают Raima Database Manager.
6️⃣Облачные базы данных
Размещены в облачной инфраструктуре, предоставляя преимущества масштабируемости, доступности и управляемости без необходимости локального обслуживания оборудования. Примеры: Amazon Web Services предлагает Amazon RDS, Google Cloud предлагает Cloud SQL, Microsoft Azure предлагает Azure SQL Database.
7️⃣Базы данных временных рядов
Специализированы на хранении и управлении временными рядами (данными, которые изменяются со временем). Используются в финансах, мониторинге, IoT и других областях. Примеры включают InfluxDB и TimescaleDB.
Каждый из этих типов баз данных предназначен для удовлетворения определенных требований и может быть выбран в зависимости от специфических нужд проекта или приложения.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 385 вопросов на PHP разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
Какая разница между self и this ?
Спросят с вероятностью 27%
self и this используются для ссылки на текущий класс и его экземпляр соответственно, но каждый из них имеет свои особенности и область применения.
this
Используется для обращения к текущему объекту класса. Он позволяет получить доступ к нестатическим свойствам и методам объекта. Является ссылкой на вызываемый объект и используется внутри методов объекта для обращения к его свойствам и методам.
class Car {
public $color = 'red';
public function getColor() {
return $this->color; // Используется $this для доступа к свойству текущего объекта
}
}
$myCar = new Car();
echo $myCar->getColor(); // Выведет 'red'
Здесь $this->color обращается к свойству color текущего экземпляра класса Car.
self
Используется для обращения к текущему классу и применяется в основном для доступа к статическим свойствам и методам класса. Ссылается на класс, в котором она была вызвана, и не требует создания экземпляра объекта для доступа к содержимому.
class Car {
public static $count = 0;
public function __construct() {
self::$count++; // Используется self для доступа к статическому свойству
}
public static function getTotalCars() {
return self::$count; // Обращение к статическому методу или свойству
}
}
$newCar1 = new Car();
$newCar2 = new Car();
echo Car::getTotalCars(); // Выведет '2'
В этом примере self::$count используется для управления статическим свойством, которое отслеживает количество созданных автомобилей.
Основные различия
✅Контекст использования: $this используется для доступа к свойствам и методам текущего объекта экземпляра, тогда как self используется для доступа к статическим свойствам и методам класса.
✅Статический vs Нестатический: $this нельзя использовать в статических методах, потому что статические методы могут быть вызваны без создания объекта класса. self, напротив, предназначена для использования в статическом контексте.
✅Привязка: self привязана к классу, в котором она написана, а $this — к объекту, через который вызывается метод.
Эти различия определяют, когда и как использовать каждый из этих ключевых слов в коде для правильного управления доступом к данным и функционалу класса и его экземпляров.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 385 вопросов на PHP разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовыхВ чем различие между where и having ?
Спросят с вероятностью 27%
WHERE и HAVING являются двумя различными предложениями, которые используются для фильтрации записей, но они применяются в разных контекстах и имеют разные цели.
1️⃣WHERE
Используется для фильтрации строк перед тем, как они будут обработаны в любых группировках оператором
GROUP BY или перед тем, как будут отображены в итоговом результате. WHERE эффективно ограничивает, какие строки будут включены в следующий этап обработки запроса.
SELECT * FROM employees
WHERE department = 'Sales';
Здесь WHERE фильтрует записи так, чтобы в результат вошли только те, где значение столбца department равно 'Sales'.
2️⃣HAVING
Применяется после группировки данных с помощью GROUP BY, когда необходимо фильтровать группы по определённым критериям, основанным на агрегатных функциях, таких как COUNT(), SUM(), AVG() и т.д. HAVING можно считать аналогом WHERE, который специально предназначен для работы с группами, а не с отдельными записями.
SELECT department, COUNT(*) as num_employees
FROM employees
GROUP BY department
HAVING num_employees > 10;
Здесь HAVING фильтрует результаты запроса, оставляя только те группы, в которых количество сотрудников (num_employees) превышает 10. Предварительно данные группируются по департаменту.
Основные различия
✅Этап применения: WHERE фильтрует строки до группировки (перед GROUP BY), а HAVING — после группировки.
✅Типы условий: WHERE не может использовать агрегатные функции, потому что эти функции ещё не применены на этапе фильтрации WHERE. HAVING предназначен для фильтрации, используя агрегатные функции.
✅Использование без GROUP BY: WHERE может использоваться без GROUP BY, в то время как HAVING обычно используется с GROUP BY (хотя и может быть использован и без него в некоторых СУБД для фильтрации агрегатов по значениям).
Эти два предложения служат разным целям и используются в различных сценариях запросов для обеспечения точности и эффективности выборки данных в SQL.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 385 вопросов на PHP разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовыхLinux как секс!
Если зубрить его по книжкам, то кроме теории и деградации, ты ничему не научишься.
В канале BashDays ты найдешь лучшие Linux и Bash практики. Действующий девопс-инженер, самобытно и с долей юмора, травит темы:
- Рекавери файлов через grep
- Почему коты гадят в макбуки
- Как отключить логирование
- Неочевидные трюки на Bash
- Сниффер SSH на strace
И это только цветочки. А если заскучал, поиграй с друзьями в piu-piu и надери им бэкенд. Рекомендую!
В BashDays даже джуны становятся сеньорами.
Подписывайся, это самый простой способ прокачать свои хард-скиллы: — @bashdays
Что из себя представляет http-запрос ?
Спросят с вероятностью 27%
HTTP-запрос — это основа данных, которую клиент (обычно веб-браузер) отправляет на сервер для выполнения определенных действий на веб-странице или веб-сервисе. Является протоколом передачи данных в интернете, и запросы по этому протоколу задают параметры и содержимое обмена информацией между клиентом и сервером.
Структура HTTP-запроса:
1️⃣Стартовая строка (Start Line): Включает в себя метод запроса, URI (Uniform Resource Identifier) ресурса и версию HTTP. Примеры методов запроса:
✅GET — запрос на получение данных.
✅POST — запрос на отправку данных для обработки.
✅PUT — запрос на обновление данных.
✅DELETE — запрос на удаление данных.
✅и другие.
2️⃣Заголовки (Headers): Служат для передачи дополнительной информации между клиентом и сервером. Заголовки могут содержать данные о типе контента, методах аутентификации, кэшировании и многом другом.
3️⃣Пустая строка: Разделяет заголовки и тело запроса. Это просто перевод строки.
4️⃣Тело запроса (Body) (необязательно): Непосредственные данные, отправляемые серверу. Например, при отправке формы методом POST данные формы будут находиться в теле запроса. Тело запроса может отсутствовать, например, в методах GET или HEAD.
Допустим, клиент отправляет HTTP-запрос на сервер с целью получения информации о пользователе. Запрос может выглядеть так:
GET /users/12345 HTTP/1.1 Host: example.com Accept: application/json Authorization: Bearer your_access_tokenЗдесь:
✅GET — метод запроса.
✅/users/12345 — URI запрашиваемого ресурса.
✅HTTP/1.1 — версия HTTP.
✅Host, Accept, Authorization — заголовки запроса, описывающие сервер, формат ответа, который клиент ожидает получить, и метод аутентификации соответственно.
HTTP-запросы являются фундаментальной частью веб-коммуникаций, позволяя пользователям взаимодействовать с веб-ресурсами. Они используются для загрузки веб-страниц, отправки форм, взаимодействия с API и многое другое, обеспечивая динамичное взаимодействие на платформе всемирной паутины.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 385 вопросов на PHP разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовыхЧто такое ООП ?
Спросят с вероятностью 27%
Объектно-ориентированное программирование (ООП) — это парадигма программирования, которая использует "объекты" и "классы" для организации кода. Оно фокусируется на создании модулей, которые могут быть повторно использованы в различных частях программы, что упрощает разработку и поддержку сложных программных систем.
Основные концепции ООП:
1️⃣Классы и объекты: Это шаблон или чертёж, который определяет характеристики и поведения, связанные с объектом. Объект — это экземпляр класса, содержащий реальные данные и способный выполнять функции, определённые в классе.
2️⃣Инкапсуляция: Это принцип упаковки данных (переменных) и методов, работающих с этими данными (функций), в один объект. Инкапсуляция также скрывает внутреннее состояние объекта от прямого доступа извне, что упрощает управление изменениями и повышает безопасность данных.
3️⃣Наследование: Позволяет новому классу перенимать свойства и методы существующего класса. Оно поддерживает иерархическую классификацию и уменьшает повторное использование кода.
4️⃣Полиморфизм: Описывает концепцию, по которой разные объекты могут быть доступны через один и тот же интерфейс. Он позволяет одной и той же функции работать с разными типами объектов и вызывать соответствующие методы, необходимые для каждого типа объекта.
Возьмем простой пример, демонстрирующий ООП:
<?php
// Определение класса
class Animal {
public $name;
public $voice;
public function __construct($name, $voice) {
$this->name = $name;
$this->voice = $voice;
}
public function speak() {
echo $this->name . " говорит " . $this->voice . "<br>";
}
}
// Наследование и полиморфизм
class Cat extends Animal {
public function speak() {
echo $this->name . " мяукает " . $this->voice . "<br>";
}
}
// Создание объектов
$animal = new Animal("Животное", "звуки");
$cat = new Cat("Кот", "мяу");
// Вызов метода
$animal->speak();
$cat->speak();
?>
В этом примере класс Animal является базовым, а класс Cat наследует его свойства и методы, модифицируя поведение метода speak для демонстрации полиморфизма.
ООП является мощным инструментом для создания модульных, масштабируемых и легко поддерживаемых программных систем. Оно способствует созданию более чистого, понятного и организованного кода, что делает его идеальным для как крупных, так и малых проектов
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 385 вопросов на PHP разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовыхЧто такое индекс ?
Спросят с вероятностью 20%
индекс — это структура данных, которая улучшает скорость операций выборки данных из таблицы базы данных. Они строятся на основе одного или нескольких столбцов таблицы и позволяют быстро находить строки без необходимости сканировать всю таблицу.
Зачем они нужны?
1️⃣Ускорение поиска: Позволяют базе данных быстрее находить и извлекать данные. Без индексов СУБД приходится выполнять полный поиск по всей таблице (full table scan), что может быть очень неэффективно для больших объемов данных.
2️⃣Эффективность запросов: Особенно важны для улучшения производительности запросов, содержащих условия
WHERE, ORDER BY, GROUP BY и JOIN.
3️⃣Уникальность: Можно использовать для обеспечения уникальности данных в столбце, предотвращая дублирование записей.
Как они работают?
Обычно реализуются с использованием структур данных, таких как B-деревья или хеш-таблицы. Каждый индекс содержит указатели на строки основной таблицы, что позволяет СУБД быстро переходить к нужным данным без полного перебора таблицы.
✅B-дерево: Наиболее часто используемая структура для индексов, которая поддерживает порядок и быстрый поиск, вставку, удаление и обход элементов. Она эффективно работает с операциями поиска на основе диапазонов.
✅Хеш-таблица: Лучше подходит для операций с точечным поиском, где используются условия эквивалентности.
Типы:
1️⃣Основной индекс (Primary index): созданный на первичном ключе таблицы.
2️⃣Вторичный индекс (Secondary index): на одном или нескольких столбцах, которые не являются первичным ключом.
3️⃣Уникальный индекс: Гарантирует, что все значения в индексе уникальны.
4️⃣Составной индекс: Включает несколько столбцов.
Создание индекса для столбца email в таблице users для ускорения поиска по электронной почте:
CREATE INDEX idx_email ON users(email);
Этот индекс позволит СУБД быстрее находить записи, осуществляя поиск по столбцу email, благодаря предварительно построенной структуре индекса.
Хотя индексы значительно ускоряют чтение данных, они также добавляют накладные расходы на операции записи, такие как вставка, обновление и удаление записей, так как при каждой такой операции необходимо также обновлять индекс. Кроме того, индексы занимают дополнительное место в памяти или на диске. Поэтому важно тщательно планировать, какие индексы создавать и как их поддерживать.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 385 вопросов на PHP разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовыхНу все! Теперь не нужно тратить деньги на топовые курсы и книги по программированию — их выложили в Telegram бесплатно
Все найденные курсы собирают тут — @portalToIT
По этим курсам выучить любой язык за 7 дней вообще не проблема, находка для начинающих программистов.
Зачем нужен абстрактный класс ?
Спросят с вероятностью 27%
Абстрактный класс в ООП служит шаблоном для других классов, определяя общий интерфейс и поведение, которые могут быть унаследованы дочерними классами. Он не предназначен для создания экземпляров напрямую, но предоставляет базовую структуру, на которой могут строиться другие классы.
Основные цели использования:
1️⃣Определение общего интерфейса: Позволяет определить методы, которые должны быть реализованы во всех дочерних классах, обеспечивая тем самым согласованность интерфейса.
2️⃣Избежание дублирования кода: Позволяют разработчикам поместить общий код для нескольких классов в одном месте, уменьшая тем самым дублирование и упрощая поддержку кода.
3️⃣Контроль реализации: Они предоставляют стандартизированный способ заставить разработчиков следовать определенной архитектуре или методологии при создании новых классов.
4️⃣Поддержка множественного наследования через интерфейсы: В языках, где классы могут реализовывать несколько интерфейсов, абстрактные классы могут служить для реализации методов этих интерфейсов, предоставляя при этом возможность наследования реализации кода, что не поддерживается интерфейсами напрямую.
Рассмотрим пример с абстрактным классом
Vehicle и несколькими его наследниками:
abstract class Vehicle {
protected $speed = 0;
abstract public function increaseSpeed($increment);
public function setSpeed($speed) {
$this->speed = $speed;
}
public function getSpeed() {
return $this->speed;
}
}
class Car extends Vehicle {
public function increaseSpeed($increment) {
$this->speed += $increment;
echo "Скорость автомобиля увеличена до " . $this->speed . " км/ч.\n";
}
}
class Bicycle extends Vehicle {
public function increaseSpeed($increment) {
$this->speed += $increment;
echo "Скорость велосипеда увеличена до " . $this->speed . " км/ч.\n";
}
}
$car = new Car();
$car->setSpeed(50);
$car->increaseSpeed(20);
$bicycle = new Bicycle();
$bicycle->setSpeed(15);
$bicycle->increaseSpeed(5);
В этом примере Vehicle является абстрактным классом, который определяет базовые методы и свойства для Car и Bicycle. Метод increaseSpeed является абстрактным, и его реализация должна быть предоставлена каждым конкретным классом, наследующим Vehicle.
Использование абстрактных классов упрощает разработку программного обеспечения, гарантируя, что все производные классы следуют определенному контракту, а также способствует повторному использованию кода. Они играют важную роль в проектировании архитектуры приложений, обеспечивая структурированное и легко расширяемое решение.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 385 вопросов на PHP разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовыхКакие бывают индексы ?
Спросят с вероятностью 27%
Чтобы продемонстрировать, как можно использовать индексы, прежде всего нужно рассмотреть процесс создания индексов в базе данных и последующее выполнение SQL запросов с использованием PHP. Возьмем MySQL в качестве примера базы данных и использование PDO (PHP Data Objects) для взаимодействия с базой данных из PHP.
Шаг 1: Создание индексов в MySQL
Допустим, у вас есть таблица
users с полями id, email, name, и age. Вы хотите оптимизировать поиск по email, который часто используется для входа в систему или других операций. Вы можете создать уникальный индекс для столбца email:
CREATE UNIQUE INDEX idx_email ON users (email);
Если вы также часто выполняете запросы, которые фильтруют пользователей по возрасту, вы можете создать простой индекс для столбца age:
CREATE INDEX idx_age ON users (age);
Шаг 2: Использование индексов
Теперь, когда у вас есть индексы, давайте посмотрим, как вы можете использовать PHP для выполнения запросов, которые могут извлекать выгоду из этих индексов. Мы будем использовать PDO для создания безопасных запросов с использованием подготовленных выражений.
<?php
$dsn = 'mysql:host=localhost;dbname=testdb';
$username = 'root';
$password = '';
try {
$pdo = new PDO($dsn, $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Запрос с использованием индекса по email
$email = 'user@example.com';
$stmt = $pdo->prepare("SELECT * FROM users WHERE email = :email");
$stmt->execute(['email' => $email]);
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo "Имя: " . $row['name'] . ", Email: " . $row['email'] . ", Возраст: " . $row['age'] . "<br/>";
}
// Запрос с использованием индекса по возрасту
$age = 25;
$stmt = $pdo->prepare("SELECT * FROM users WHERE age >= :age");
$stmt->execute(['age' => $age]);
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo "Имя: " . $row['name'] . ", Email: " . $row['email'] . ", Возраст: " . $row['age'] . "<br/>";
}
} catch (PDOException $e) {
die("Ошибка подключения: " . $e->getMessage());
}
?>
Пояснения к коду
1️⃣PDO Connection: Создание соединения с базой данных через PDO.
2️⃣Подготовленные Запросы: Использование подготовленных запросов для избежания SQL-инъекций.
3️⃣Использование Индексов: Запросы автоматически извлекают выгоду из созданных индексов, что ускоряет их выполнение.
Этот пример демонстрирует, как создание и использование индексов может улучшить производительность запросов. Создание индексов снижает время, необходимое для поиска данных, особенно в больших таблицах, и является важной частью оптимизации баз данных.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 385 вопросов на PHP разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых