PHP | Вопросы собесов
Ir al canal en Telegram
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv
Mostrar más2 344
Suscriptores
-224 horas
-57 días
-2430 días
Archivo de publicaciones
🤔 Что такое 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?
📌 В чем преимущество 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 дней бесплатно.
Кинопоиск и Яндекс Книги тоже в подписке.
Попробуйте сейчас❤️
Попробовать
#реклама 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 вопрос и получите в подарок доступ к Кинопоиску, Музыке и Книгам на 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
Платформа для бизнес-аналитики. Позволяет визуализировать показатели, определять тренды и находить зависимости, создавать прогнозы на основе ваших данных.
Включено в Единый реестр российского ПО.
Перейти на сайт
#реклама 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: Синхронизация времени
Ставь 👍 и забирай 📚 Базу знаний
¡Ya disponible! Investigación de Telegram 2025 — los principales insights del año 
