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

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

Открыть в Telegram
2 344
Подписчики
-224 часа
-57 дней
-2430 день
Архив постов
🤔 Что такое ACID? Это набор свойств транзакций в базах данных, обеспечивающий их надёжность: 1.  Атомарность (Atomicity): транзакция выполняется полностью или не выполняется вовсе. 2.  Согласованность (Consistency): после транзакции база данных остаётся в корректном состоянии. 3.  Изолированность (Isolation): параллельные транзакции не влияют друг на друга. 4.  Долговечность (Durability): изменения, сделанные успешной транзакцией, сохраняются даже при сбоях. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое списочный тип? Списочный тип данных, также известный как список, представляет собой структуру данных, которая хранит упорядоченные коллекции элементов. Списки позволяют хранить наборы элементов, доступ к которым можно получить по индексу. Они широко используются в программировании благодаря своей гибкости и удобству. 🚩Особенности 🟠Упорядоченность Элементы в списке хранятся в определенном порядке, и этот порядок сохраняется. Каждый элемент имеет индекс, по которому к нему можно обратиться. 🟠Изменяемость Списки обычно являются изменяемыми структурами данных, что означает, что вы можете добавлять, удалять или изменять элементы после создания списка. 🟠Гетерогенность В списке могут храниться элементы различных типов данных (например, числа, строки, объекты). 🚩Примеры списочных типов в различных языках программирования 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)
  
🚩ПлюсыГибкость Списки позволяют легко добавлять, удалять и изменять элементы. ➕Удобство использования Простейшие операции над списками, такие как добавление или удаление элементов, обычно реализуются стандартными методами или функциями. ➕Поддержка индексов Доступ к элементам по индексу позволяет эффективно манипулировать данными. Ставь 👍 и забирай 📚 Базу знаний

🤔 Какой метод используется для подключения к базе данных MySQL в PHP?
Anonymous voting

📌 В чем преимущество hash индекс и btree индекс? 💬 Спрашивают в 7 % собеседований Hash-индексы и B-Tree-индексы являются двумя типами индексов, используемыми для ускорения операций поиска в базах данных. Оба типа имеют свои преимущества и недостатки в зависимости от конкретных сценариев использования. 🤔 Hash-индексы Преимущества: 1️⃣ Быстрый доступ по точному совпадению: Hash-индексы обеспечивают очень быстрый доступ к данным при выполнении точных поисков (например, SELECT * FROM table WHERE column = 'value'). Время поиска практически константное (O(1)), что делает такие запросы очень эффективными. 2️⃣ Простота реализации: Hash-индексы просты в реализации и не требуют сложных структур данных для управления. Недостатки: 1️⃣ Отсутствие поддержки диапазонных запросов: Hash-индексы не поддерживают операции поиска по диапазону (например, BETWEEN, >, <). Они эффективны только для точных совпадений. 2️⃣ Проблемы с коллизиями: При коллизиях (когда разные ключи хэшируются в одно и то же значение) производительность может снижаться, так как требуется разрешение коллизий. 3️⃣ Фиксированный размер: Hash-индексы могут требовать перераспределения при значительном увеличении данных, что может временно снижать производительность. 🤔 B-Tree-индексы Преимущества: 1️⃣ Поддержка диапазонных запросов: B-Tree-индексы поддерживают операции поиска по диапазону и сортировку (например, BETWEEN, >, <, ORDER BY). Данные в B-Tree отсортированы, что делает такие запросы возможными и эффективными. 2️⃣ Сбалансированность: B-Tree автоматически поддерживает балансировку, что обеспечивает стабильную производительность для всех операций (поиск, вставка, удаление). 3️⃣ Универсальность: B-Tree-индексы поддерживают широкий спектр операций и типов данных, включая текстовые данные, даты и числа. Недостатки: 1️⃣ Сравнительно медленный доступ: Поиск в B-Tree имеет логарифмическое время доступа (O(log n)), что может быть медленнее по сравнению с константным временем доступа Hash-индекса при точных поисках. 2️⃣ Сложность вставки и удаления: Операции вставки и удаления в B-Tree могут быть более ресурсоемкими, так как могут требовать перестройки и ребалансировки дерева. 🤔 Примеры использования Hash-индекс: Подходит для сценариев, где часто выполняются точные запросы равенства, например, поиск пользователя по уникальному идентификатору или email.
CREATE INDEX idx_email_hash ON users USING HASH (email);
SELECT * FROM users WHERE email = 'example@example.com';
B-Tree-индекс: Подходит для сценариев, где часто выполняются диапазонные запросы, сортировка или комбинированные условия.
CREATE INDEX idx_name_btree ON users (name);
SELECT * FROM users WHERE name BETWEEN 'A' AND 'M';
🤔 РезюмеHash-индексы: Очень быстрый доступ для точных совпадений, но не поддерживают диапазонные запросы. Идеальны для уникальных ключей и точных поисков. ➕ B-Tree-индексы: Поддерживают диапазонные запросы и сортировку, обеспечивают сбалансированную производительность для всех типов операций. Универсальны и подходят для широкого спектра запросов. Выбор типа индекса зависит от характера запросов и требований к производительности базы данных. 🔥 ТОП ВОПРОСОВ С СОБЕСОВ 🔒 База собесов | 🔒 База тестовых

🤔 В чем отличие адаптера от декоратора Адаптер и декоратор — это структурные паттерны проектирования, но они решают разные задачи. Адаптер используется для преобразования интерфейса одного класса в интерфейс, который ожидает клиент, чтобы классы с несовместимыми интерфейсами могли работать вместе. Декоратор, наоборот, добавляет новую функциональность к объекту, не изменяя его структуру, позволяя динамически изменять поведение объекта. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое абстрагирование? Это принцип программирования и проектирования, который позволяет выделить важные характеристики объекта или системы и скрыть их сложные детали. Основная цель абстрагирования – упростить сложные системы, делая их более понятными и управляемыми, сосредоточив внимание на их основных аспектах и поведении. 🚩Зачем нужно абстрагирование 🟠Снижение сложности Сокращает количество деталей, с которыми нужно работать, что облегчает понимание и работу с системой. 🟠Повышение читаемости кода Упрощает код, делая его более читаемым и легким для поддержки. 🟠Повторное использование кода Создаёт возможность повторного использования общих функций и логики. 🟠Инкапсуляция Позволяет скрывать реализацию и представлять только необходимые интерфейсы для взаимодействия. 🟠Гибкость и расширяемость Облегчает добавление новых функциональностей без изменения существующего кода. 🚩Как используется абстрагирование Абстрагирование в программировании часто реализуется через классы и интерфейсы. Ниже приведены примеры абстракции в объектно-ориентированном программировании (ООП). 🚩Пример абстракции с использованием классов и интерфейсов 🟠Интерфейс Определяет набор методов, которые должны быть реализованы, не указывая, как именно они должны быть реализованы.
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
🚩Плюсы и минусы Снижение сложности Абстракция скрывает сложные детали реализации, облегчая работу с системой. ➕Улучшение читаемости Код становится более понятным и структурированным. ➕Гибкость и расширяемость Облегчает добавление новых функций и изменений. ➕Повторное использование Позволяет использовать общий код в разных частях программы. ➖Избыточность Иногда может приводить к избыточной сложности, если абстракции слишком сложные или используются неправильно. ➖Накладные расходы Может потребоваться больше времени и усилий на создание абстракций и их поддержку. Ставь 👍 и забирай 📚 Базу знаний

🤔 Как браузер понимает, что ему нужно перейти куда-то? Браузер анализирует ввод пользователя, определяя, является ли это запросом на переход к новому URL. Если это так, он отправляет HTTP-запрос к указанному серверу и отображает полученный ответ (обычно HTML). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое low coupling high cohesion? Это два важных принципа проектирования программного обеспечения, которые направлены на создание легко поддерживаемого, расширяемого и устойчивого к изменениям кода. Эти принципы помогают создавать системы, в которых компоненты независимы друг от друга и выполняют строго определенные задачи. 🚩Низкая связность (Low Coupling) Низкая связность означает минимизацию зависимости одного модуля или компонента от других. Чем меньше один компонент знает о внутренних деталях других компонентов, тем лучше. 🟠Упрощение модификаций Изменения в одном компоненте минимально влияют на другие. 🟠Повышение повторного использования Компоненты можно легко повторно использовать в других частях приложения или в других проектах. 🟠Облегчение тестирования Компоненты можно тестировать независимо друг от друга. Как это достигается Использование интерфейсов и абстракций вместо конкретных классов. Внедрение зависимостей (Dependency Injection). Сокрытие деталей реализации (инкапсуляция).
interface NotificationService {
    public function send($message);
}

class EmailNotificationService implements NotificationService {
    public function send($message) {
        // Логика отправки email
        echo "Email sent: $message";
    }
}

class User {
    private $notificationService;

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

    public function notify($message) {
        $this->notificationService.send($message);
    }
}
🚩Высокая когезия (High Cohesion) Высокая когезия означает, что все элементы внутри модуля или компонента тесно связаны и выполняют единую задачу. Каждый компонент отвечает за свою конкретную функцию. 🟠Повышение читаемости и поддерживаемости Код становится проще понимать и поддерживать, так как каждый компонент имеет чётко определённые обязанности. 🟠Облегчение тестирования Компоненты проще тестировать, так как они выполняют ограниченные и чётко определённые задачи. 🟠Повышение надежности Меньшее количество связанных задач внутри одного компонента снижает вероятность ошибок. Как это достигается Следование принципу единственной ответственности (SRP - Single Responsibility Principle). Разделение кода на модули с чётко определёнными задачами.
class User {
    private $name;
    private $email;

    public function __construct($name, $email) {
        $this->name = $name;
        $this->email = $email;
    }

    public function getName() {
        return $this->name;
    }

    public function getEmail() {
        return $this->email;
    }
}

class UserService {
    public function registerUser($name, $email) {
        // Логика регистрации пользователя
        $user = new User($name, $email);
        // Сохранение пользователя в базе данных и другие действия
        echo "User registered: " . $user->getName();
    }
}
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое Rest REST (Representational State Transfer) — это архитектурный стиль для разработки веб-сервисов. Он основывается на стандартах HTTP и включает использование простых методов (GET, POST, PUT, DELETE) для взаимодействия с ресурсами, представленных в виде URL. RESTful API являются безсессионными, и каждый запрос от клиента к серверу должен содержать всю необходимую информацию для выполнения операции. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

📺 Уникальная база записей IT собеседований 300+ записей реальных собеседований на программиста, тестировщика, аналитика и прочие IT профы. Записи собесов от ведущих компаний: Сбер, Яндекс, ВТБ, Тинькофф, Озон, Wildberries и т.д. 🎯 Переходи по ссылке и присоединяйся к базе, чтобы прокачать свои шансы на успешное трудоустройство! У тебя есть запись собеседования? Мы готовы ее купить и заплатим до 3000 руб. за каждую

Дарим подписку на Яндекс Музыку Ответьте на 1 вопрос и Яндекс Музыка для вас и 3-х ваших близких 60 дней бесплатно. Кинопоиск
Дарим подписку на Яндекс Музыку Ответьте на 1 вопрос и Яндекс Музыка для вас и 3-х ваших близких 60 дней бесплатно. Кинопоиск и Яндекс Книги тоже в подписке. Попробуйте сейчас❤️ Попробовать #реклама 18+ music.yandex.ru О рекламодателе Реклама на Яндексе

🤔 Что такое di container? Это специальный инструмент или объект в программировании, который управляет созданием и внедрением зависимостей в объекты. Этот контейнер автоматически решает, какие зависимости требуются объекту, и предоставляет их при создании объекта, тем самым упрощая управление зависимостями в приложении. 🚩Зачем нужен DI-контейнер 🟠Автоматизация управления зависимостями DI-контейнер автоматически создает и внедряет зависимости, избавляя от необходимости вручную передавать их в объекты. 🟠Гибкость и модульность: Позволяет легко заменять реализации зависимостей, не изменяя код, который их использует. 🟠Упрощение тестирования Обеспечивает легкую замену зависимостей на моки или заглушки для тестирования. 🟠Улучшение структуры кода Разделяет создание объектов и их использование, способствуя более чистой архитектуре. 🚩Как используется DI-контейнер DI-контейнеры предоставляют различные методы для регистрации зависимостей и их последующего получения. Ниже приведен пример реализации простого DI-контейнера. 1⃣Создание интерфейсов и реализаций зависимостей
interface Logger {
    public function log($message);
}

class FileLogger implements Logger {
    public function log($message) {
        echo "Logging message to a file: $message";
    }
}

interface PaymentProcessor {
    public function processPayment($amount);
}

class StripePaymentProcessor implements PaymentProcessor {
    public function processPayment($amount) {
        echo "Processing payment of $amount through Stripe";
    }
}
2⃣Реализация DI-контейнера
class DIContainer {
    private $bindings = [];

    public function bind($abstract, $concrete) {
        $this->bindings[$abstract] = $concrete;
    }

    public function resolve($abstract) {
        if (!isset($this->bindings[$abstract])) {
            throw new Exception("No binding found for $abstract");
        }

        $concrete = $this->bindings[$abstract];

        // Если $concrete является замыканием, вызываем его
        if ($concrete instanceof Closure) {
            return $concrete($this);
        }

        // Создаем новый объект конкретного класса
        return new $concrete;
    }
}
3⃣Регистрация зависимостей и их использование
$container = new DIContainer();

// Регистрация зависимостей
$container->bind(Logger::class, FileLogger::class);
$container->bind(PaymentProcessor::class, function($container) {
    return new StripePaymentProcessor();
});

// Получение зависимостей
$logger = $container->resolve(Logger::class);
$logger->log("This is a log message."); // Вывод: Logging message to a file: This is a log message.

$paymentProcessor = $container->resolve(PaymentProcessor::class);
$paymentProcessor->processPayment(100); // Вывод: Processing payment of 100 through Stripe
🚩Плюсы и минусыАвтоматизация Снижает необходимость ручного создания и передачи зависимостей. ➕Гибкость Легко изменять конкретные реализации зависимостей. ➕Тестируемость Упрощает замену зависимостей на моки для тестирования. ➕Чистота кода Упрощает код, делая его более модульным и читаемым. ➖Сложность настройки Могут потребоваться значительные усилия для первоначальной настройки DI-контейнера. ➖Производительность В некоторых случаях может снижать производительность из-за необходимости разрешения зависимостей. Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое namespaces Namespaces в PHP — это способ организации кода для предотвращения конфликтов имен между классами, функциями и константами. Использование пространства имен позволяет создать уникальные идентификаторы, чтобы избежать пересечений между именами в крупных проектах или при использовании сторонних библиотек. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Откройте подписку на Кинопоиск и Музыку за 1₽ Ответьте на 1 вопрос и получите в подарок доступ к Кинопоиску, Музыке и Книгам
Откройте подписку на Кинопоиск и Музыку за 1₽ Ответьте на 1 вопрос и получите в подарок доступ к Кинопоиску, Музыке и Книгам на 60 дней за 1 рубль. ✨ Сервисы будут доступны не только для Вас, но и для трёх ваших близких Попробовать #реклама 18+ kinopoisk.ru О рекламодателе Реклама на Яндексе

🤔 Что такое сервис локатор? Это паттерн проектирования, который используется для абстрагирования процесса поиска и предоставления зависимостей объектам. Вместо того чтобы объекты сами создавали свои зависимости или получали их через конструкторы, они запрашивают их у специального объекта – локатора сервисов. 🚩Зачем нужен 🟠Упрощение управления зависимостями Все зависимости находятся в одном месте, что упрощает их управление и замену. 🟠Гибкость Легко менять конкретные реализации зависимостей без изменения клиентского кода. 🟠Централизация Все зависимости зарегистрированы и управляются в одном месте. 🟠Улучшение тестирования Легко подменять зависимости на моки для проведения тестов. 🚩Как используется Паттерн Service Locator может быть реализован через создание централизованного реестра, который хранит информацию о различных сервисах и предоставляет их по запросу. 1⃣Создание интерфейсов сервисов
interface Logger {
    public function log($message);
}

interface PaymentProcessor {
    public function processPayment($amount);
}
2⃣Реализация сервисов
class FileLogger implements Logger {
    public function log($message) {
        echo "Logging message to a file: $message";
    }
}

class StripePaymentProcessor implements PaymentProcessor {
    public function processPayment($amount) {
        echo "Processing payment of $amount through Stripe";
    }
}
3⃣Реализация Service Locator
class ServiceLocator {
    private $services = [];

    public function register($serviceName, $service) {
        $this->services[$serviceName] = $service;
    }

    public function get($serviceName) {
        if (!isset($this->services[$serviceName])) {
            throw new Exception("Service not found: " . $serviceName);
        }
        return $this->services[$serviceName];
    }
}
4⃣Регистрация и использование сервисов
$serviceLocator = new ServiceLocator();

// Регистрация сервисов
$serviceLocator->register('logger', new FileLogger());
$serviceLocator->register('paymentProcessor', new StripePaymentProcessor());

// Использование сервисов
$logger = $serviceLocator->get('logger');
$logger->log("This is a log message."); // Вывод: Logging message to a file: This is a log message.

$paymentProcessor = $serviceLocator->get('paymentProcessor');
$paymentProcessor->processPayment(100); // Вывод: Processing payment of 100 through Stripe
🚩Плюсы и минусыЦентрализация Все зависимости хранятся и управляются в одном месте. ➕Гибкость Легко изменять зависимости без изменения кода, который их использует. ➕Удобство тестирования Легко подменять реальные зависимости на моки для тестирования. ➖Скрытые зависимости Зависимости не видны явно в коде, что может усложнить понимание. ➖Сложность Может привести к более сложной архитектуре, особенно в больших приложениях. Ставь 👍 и забирай 📚 Базу знаний

Миграция в облако? Это легко! Собственная инфраструктура устарела или не справляется с нагрузками? Используйте облачные ресур
Миграция в облако? Это легко! Собственная инфраструктура устарела или не справляется с нагрузками? Используйте облачные ресурсы! Эксперты Yandex Cloud помогут перейти в облако быстро, легко и безопасно. ✅ Мы полностью сопровождаем процесс. ✅ От вас — только инженер с доступом к инфраструктуре. ✅ Архитектура под ваши задачи, миграция и поддержка на каждом шагу — всё включено. ⚡Переходите в Yandex Cloud и забудьте о старом железе. А если успеете подать заявку до 31 декабря, мы покроем расходы на инженеров и тестовую инфраструктуру. Подать заявку #реклама 16+ yandex.cloud О рекламодателе Реклама на Яндексе

🤔 Что такое factory? Это паттерн проектирования, который используется для создания объектов без указания конкретного класса объекта. Это достигается путем предоставления общего интерфейса для создания объектов в суперклассе, позволяя подклассам изменять тип создаваемых объектов. 🚩Зачем нужен 🟠Упрощение кода Паттерн фабрика упрощает создание объектов и делает код более читаемым и поддерживаемым. 🟠Гибкость Позволяет легко изменять создаваемые объекты без необходимости модификации существующего кода 🟠Инкапсуляция Скрывает логику создания объектов, предоставляя клиенту только интерфейс для их создания. 🟠Расширяемость Легко добавлять новые типы объектов, не изменяя существующий код. 🚩Пример простого фабричного метода Предположим, у нас есть интерфейс Car и несколько классов, которые его реализуют
interface Car {
    public function drive();
}

class Sedan implements Car {
    public function drive() {
        echo "Driving a sedan";
    }
}

class SUV implements Car {
    public function drive() {
        echo "Driving an SUV";
    }
}
Теперь создадим фабрику для создания этих автомобилей
class CarFactory {
    public static function createCar($type) {
        switch ($type) {
            case 'sedan':
                return new Sedan();
            case 'suv':
                return new SUV();
            default:
                throw new Exception("Invalid car type");
        }
    }
}
Использование фабрики
$sedan = CarFactory::createCar('sedan');
$sedan->drive(); // Вывод: Driving a sedan

$suv = CarFactory::createCar('suv');
$suv->drive(); // Вывод: Driving an SUV
🚩Пример абстрактной фабрики Абстрактная фабрика предоставляет интерфейс для создания семейств взаимосвязанных или взаимозависимых объектов без указания их конкретных классов.
interface Car {
    public function drive();
}

interface CarFactory {
    public function createSedan();
    public function createSUV();
}

class Sedan implements Car {
    public function drive() {
        echo "Driving a sedan";
    }
}

class SUV implements Car {
    public function drive() {
        echo "Driving an SUV";
    }
}

class ConcreteCarFactory implements CarFactory {
    public function createSedan() {
        return new Sedan();
    }
    
    public function createSUV() {
        return new SUV();
    }
}

// Использование абстрактной фабрики
$factory = new ConcreteCarFactory();

$sedan = $factory->createSedan();
$sedan->drive(); // Вывод: Driving a sedan

$suv = $factory->createSUV();
$suv->drive(); // Вывод: Driving an SUV
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое инкапсуляция? Инкапсуляция — это принцип ООП, при котором детали реализации скрыты от внешнего мира, предоставляя доступ к данным через методы. В PHP это реализуется с помощью модификаторов доступа (private, protected, public). Она обеспечивает безопасность данных и облегчает поддержку кода. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Российский сервис BI-аналитики – Modus BI Платформа для бизнес-аналитики. Позволяет визуализировать показатели, определять тр
Российский сервис BI-аналитики – Modus BI Платформа для бизнес-аналитики. Позволяет визуализировать показатели, определять тренды и находить зависимости, создавать прогнозы на основе ваших данных. Включено в Единый реестр российского ПО. Перейти на сайт #реклама 16+ modusbi.ru О рекламодателе

🤔 Какое отличие у протоколов tcp и udp? Это два основных транспортных протокола в интернете. Они имеют разные характеристики и используются для различных целей. 🚩Основные отличия 🟠Надежность TCP: Обеспечивает надежную передачу данных. Он использует механизмы установления соединения, подтверждение получения (ACK), контроль потерь пакетов, повторную передачу потерянных пакетов и контроль потока. Это гарантирует, что данные будут доставлены корректно и в правильном порядке. UDP: Не обеспечивает надежную передачу данных. Нет подтверждений получения, нет повторной передачи потерянных пакетов и нет контроля потока. Это делает передачу менее надежной, но более быстрой и с меньшими накладными расходами. 🟠Установление соединения TCP: Перед началом передачи данных устанавливается соединение с помощью процедуры "трехстороннего рукопожатия" (three-way handshake). Это означает, что обе стороны сначала обмениваются сигналами SYN и ACK для установления соединения. UDP: Не требует установления соединения. Пакеты (датаграммы) просто отправляются к получателю без предварительного установления соединения. 🟠Порядок доставки TCP: Обеспечивает доставку данных в правильном порядке. Если пакеты приходят в неправильном порядке, TCP собирает их в правильном порядке перед передачей приложению. UDP: Не гарантирует порядок доставки. Пакеты могут приходить в произвольном порядке, и приложение должно обрабатывать их соответствующим образом, если это необходимо. 🟠Пропускная способность и задержки TCP: Из-за механизмов контроля потока и подтверждений имеет большие накладные расходы и, следовательно, может быть медленнее. Это особенно заметно на сетях с высокой задержкой или потерей пакетов. UDP: Из-за отсутствия контроля потока и подтверждений имеет меньшие накладные расходы, что может привести к меньшим задержкам и большей пропускной способности. Подходит для приложений, где важна скорость, а не надежность. 🟠Применение TCP: Используется для приложений, где важна надежность и порядок передачи данных, таких как веб-браузеры (HTTP/HTTPS), электронная почта (SMTP, IMAP, POP3), файловые передачи (FTP), удаленный доступ (SSH). UDP: Используется для приложений, где важна скорость и где потеря некоторых пакетов не критична, таких как потоковое видео и аудио (VoIP, IPTV), онлайн-игры, службы доменных имен (DNS). 🚩Примеры использования TCP
HTTP/HTTPS: Веб-серфинг
SMTP: Отправка электронной почты
IMAP/POP3: Получение электронной почты
FTP: Передача файлов
SSH: Безопасный удаленный доступ
UDP
DNS: Запросы доменных имен
VoIP: Передача голоса через IP
IPTV: Потоковое видео
Онлайн-игры: Быстрая передача данных игровой логики
NTP: Синхронизация времени
Ставь 👍 и забирай 📚 Базу знаний