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

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

رفتن به کانال در Telegram

Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv

نمایش بیشتر
2 343
مشترکین
-224 ساعت
-57 روز
-2430 روز
آرشیو پست ها
🤔 Как в Doctrine реализовать отношение "Has Many Through"? В Doctrine отношение "Has Many Through" (многие ко многим через промежуточную таблицу) реализуется через связь ManyToMany с дополнительной моделью. Это полезно, когда нужно хранить дополнительные данные о связи между объектами. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Repost from easyoffer
💡 В EasyOffer 2.0 появится фильтрация вопросов по грейдам и типам интервью! 📊 Например, вот вероятности ТОП-30 вопросов, которые задают на HR-скрининге Python-разработчику уровня Middle/Senior. Данные основаны на 53 реальных интервью. 97% Какие у тебя зарплатные ожидания 73% Какие у тебя есть вопросы 44% Какие критерии при выборе будущей работы 41% Расскажи о себе 38% Почему ищешь работу 35% Расскажи про свой опыт 35% Расскажи про проект на предыдущей работе 32% Почему уволился с предыдущей работы 29% Где территориально сейчас живешь/находишься 23% Есть ли другие предложения по работе 17% Есть ли военный билет 17% Почему хочешь сменить работу 17% Как проводишь свободное время 17% Расскажи про задачи на предыдущей работе 17% Сколько коммерческого опыта работы с Python 17% С какими БД работал 14% Находишься ли в активном поиске работы 14% С каким стеком работаешь 14% Почему решил откликнуться на нашу вакансию 14% Какой текущий статус поиска работы 11% Почему решил стать программистом 11% С какими фреймворками работал 11% Какую зарплату получал на предыдущей работе 11% Работаешь ли в настоящий момент 11% На какой грейд себя оцениваешь 11% Как быстро можешь приступить к работе после получения офера 11% Расскажи про свои pet-проекты 8% Какие знаешь типы данных в Python 8% Что такое декоратор в Python 8% Что ищешь на новой работе 🚀 Скоро стартует краудфандинговая кампания, которая поможет ускорить разработку EasyOffer 2.0. Первые спонсоры получат уникальные лимитированные награды! 📢 Если вам это интересно, подписывайтесь на канал 👉 этот телеграм канал

🤔 Что известно о MVC? Это паттерн проектирования, широко используемый для создания структурированных и масштабируемых приложений. Он разделяет приложение на три основных компонента: Модель (Model), Представление (View) и Контроллер (Controller). 🚩Основные компоненты 🟠Модель (Model) Модель отвечает за данные и бизнес-логику приложения. Она управляет доступом к данным, логикой их обработки и взаимодействием с базой данных. В приложении электронной коммерции модель будет содержать классы, представляющие продукты, пользователей и заказы, а также методы для работы с этими данными (например, добавление нового продукта, обработка заказа и т.д.). 🟠Представление (View) Представление отвечает за отображение данных пользователю. Оно формирует пользовательский интерфейс на основе данных, предоставляемых моделью. Веб-страницы, отображающие список продуктов, форму регистрации или страницу заказа, являются примерами представлений. 🟠Контроллер (Controller) Контроллер действует как посредник между моделью и представлением. Он обрабатывает входные данные от пользователя, взаимодействует с моделью для выполнения необходимых операций и выбирает соответствующее представление для отображения результата. Контроллер может обрабатывать запрос на добавление нового продукта, получать данные от модели и затем отображать обновленный список продуктов через представление. 🚩Примеры Model
// app/Models/Product.php
namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Product extends Model {
    protected $fillable = ['name', 'price', 'description'];
}
Controller
// app/Http/Controllers/ProductController.php
namespace App\Http\Controllers;

use App\Models\Product;
use Illuminate\Http\Request;

class ProductController extends Controller {
    public function index() {
        $products = Product::all();
        return view('products.index', compact('products'));
    }

    public function store(Request $request) {
        Product::create($request->all());
        return redirect()->route('products.index');
    }
}
View
<!-- resources/views/products/index.blade.php -->
<!DOCTYPE html>
<html>
<head>
    <title>Products</title>
</head>
<body>
    <h1>Products</h1>
    <ul>
        @foreach($products as $product)
            <li>{{ $product->name }} - ${{ $product->price }}</li>
        @endforeach
    </ul>
    <form action="{{ route('products.store') }}" method="POST">
        @csrf
        <input type="text" name="name" placeholder="Product Name">
        <input type="text" name="price" placeholder="Product Price">
        <textarea name="description" placeholder="Product Description"></textarea>
        <button type="submit">Add Product</button>
    </form>
</body>
</html>
🚩ПлюсыРазделение обязанностей Разделяет приложение на три компонента, каждый из которых отвечает за свою задачу. Это упрощает поддержку и масштабирование кода. ➕Улучшенная тестируемость Разделение логики позволяет легко тестировать каждую часть приложения отдельно. ➕Гибкость и переиспользование Компоненты MVC могут быть легко изменены или переиспользованы в других частях приложения или в других проектах. ➕Чистота и упорядоченность кода Способствует созданию чистого и упорядоченного кода, что упрощает работу в команде и ускоряет разработку. Ставь 👍 и забирай 📚 Базу знаний

Как масштабировать команду? — Нанять аутсорс А как проще всего работать с аутсорсерами? — В Битрикс24 Коллабах. Это платформа
Как масштабировать команду? — Нанять аутсорс А как проще всего работать с аутсорсерами? — В Битрикс24 Коллабах. Это платформа для работы с внешними специалистами внутри вашего Битрикс24. Выглядит как чат, только удобнее. Встроены задачи, встречи, файлы. Для коротких и долгосрочных проектов. Особенно удобно для взаимодействия команд, где обсуждается несколько параллельных задач. Узнать больше #реклама 16+ collabs.bitrix24.ru О рекламодателе

🤔 Чем аутентификация отличается от авторизации? - Аутентификация – процесс проверки личности пользователя (например, ввод логина и пароля). - Авторизация – проверка прав пользователя на доступ к определенному ресурсу (например, доступ к админ-панели). Аутентификация идет первой, затем система проверяет, какие ресурсы доступны пользователю. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Где мы делаем фильтрацию данных? Фильтрацию данных в PHP можно делать в нескольких местах в зависимости от контекста. Основные области фильтрации: 🚩Фильтрация входных данных Когда мы получаем данные от пользователя ($_GET, $_POST, $_REQUEST), важно очищать их от нежелательных значений.
$name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING);
$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
Фильтрация массива $_POST через filter_var_array()
$filters = [
    'name'  => FILTER_SANITIZE_STRING,
    'email' => FILTER_VALIDATE_EMAIL,
    'age'   => FILTER_VALIDATE_INT
];
$filteredData = filter_var_array($_POST, $filters);
🚩Фильтрация перед сохранением в базу данных Перед вставкой в SQL важно удалять потенциально опасные символы, чтобы избежать SQL-инъекций.
$db = new PDO("mysql:host=localhost;dbname=test", "root", "password");
$stmt = $db->prepare("INSERT INTO users (name, email) VALUES (:name, :email)");
$stmt->execute([
    ':name'  => htmlspecialchars($_POST['name']),
    ':email' => $_POST['email']
]);
🚩Фильтрация данных внутри кода Если данные поступают из разных источников, мы можем использовать фильтрующие функции PHP: Очистка строки от HTML
$cleanText = strip_tags("<h1>Hello</h1>"); // "Hello"
Удаление пробелов
$trimmed = trim("   example   "); // "example"
Приведение к числу
$number = filter_var("42abc", FILTER_SANITIZE_NUMBER_INT); // 42
🚩Фильтрация перед выводом (защита от XSS) Перед выводом в браузер очищаем данные от HTML/JS-кода, чтобы злоумышленник не внедрил скрипты.
echo htmlspecialchars("<script>alert('Hacked!')</script>"); 
// Выведет: &lt;script&gt;alert('Hacked!')&lt;/script&gt;
Ставь 👍 и забирай 📚 Базу знаний

Онлайн-интенсив для ИТ-специалистов в Открытых школах Т1 Уже есть опыт работы в ИТ, но хочешь прокачать скилы и продвинуться в карьере? Тогда скорее залетай на бесплатный ИТ-интенсив в Открытых школах Т1. Открытые школы — это возможность усилить свои навыки и получить оффер в ИТ-холдинг Т1. И все это за месяц, онлайн и в удобное вечернее время. Что ты получишь? ✅ бесплатное обучение в гибком формате: по вечерам, онлайн, из любого города РФ и РБ. ✅ материалы от HR для прокачки резюме и подготовки к интервью в Т1. ✅ много практики и уникальный рыночный опыт. ✅ поддержку опытных преподавателей и карьерный фаст-трек до мидла в Т1 для лучших выпускников. ✅ реальный шанс получить оффер в Т1. Более 1000 специалистов уже прошли этот путь — теперь твоя очередь! Регистрация до 14 марта! Подать заявку #реклама 16+ t1.ru О рекламодателе

🤔 Какие уровни ошибок есть в PHP? Имеет разные уровни ошибок, которые можно контролировать с помощью error_reporting(). Основные уровни: - E_ERROR – критические ошибки (скрипт завершится). - E_WARNING – предупреждения (скрипт продолжит выполнение). - E_NOTICE – замечания (например, использование неинициализированной переменной). - E_DEPRECATED – устаревшие функции, которые могут исчезнуть в будущих версиях PHP. - E_PARSE – синтаксические ошибки (ошибки парсинга). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Расскажи про функциональное программирование? Функциональное программирование (FP) – это парадигма программирования, в которой основное внимание уделяется использованию функций как первичных элементов кода. Код строится из чистых функций, без изменения состояний и без побочных эффектов. 🚩Зачем нужно функциональное программирование? 🟠Меньше багов чистые функции всегда дают один и тот же результат для одних и тех же входных данных. 🟠Легко тестировать код предсказуем и изолирован. 🟠Меньше зависимостей нет глобальных переменных и скрытых состояний. 🟠Легко писать параллельные программы нет изменяемых данных, значит, нет конфликтов в многопоточности. 🚩Принципы функционального программирования Чистые функции (Pure Functions) Иммутабельность (Immutable Data) Функции высшего порядка (Higher-Order Functions) Функциональные композиции Отсутствие побочных эффектов 🟠Чистые функции Это функция, которая: Возвращает один и тот же результат для одинаковых аргументов. Не изменяет внешние переменные и не имеет побочных эффектов.
$total = 0;
function addToTotal($num) {
    global $total;
    $total += $num;
    return $total;
}
Пример чистой функции
function add($a, $b) {
    return $a + $b;
}
echo add(3, 4); // 7
🟠Иммутабельность В FP данные не изменяются – вместо изменения переменных создаются новые.
$arr = [1, 2, 3];
$arr[] = 4; // Изменяет массив
Пример иммутабельности
$arr = [1, 2, 3];
$newArr = array_merge($arr, [4]); // Создает новый массив
🟠Функции высшего порядка Это функции, которые: Принимают другие функции в качестве аргументов. Возвращают другие функции.
function applyFunction($func, $value) {
    return $func($value);
}

$square = function ($x) {
    return $x * $x;
};

echo applyFunction($square, 5); // 25
🟠Функциональные композиции Вместо длинных процедур можно сочетать функции.
function double($x) {
    return $x * 2;
}

function increment($x) {
    return $x + 1;
}

function compose($f, $g) {
    return function ($x) use ($f, $g) {
        return $f($g($x));
    };
}

$doubleThenIncrement = compose('increment', 'double');

echo $doubleThenIncrement(3); // (3 * 2) + 1 = 7
🟠Отсутствие побочных эффектов Функции не должны изменять внешние данные (например, глобальные переменные, файлы, БД).
function logMessage($message) {
    file_put_contents("log.txt", $message, FILE_APPEND);
}
Функция без побочных эффектов:
function formatMessage($message) {
    return strtoupper($message);
}
echo formatMessage("hello"); // HELLO
🚩Функциональное программирование в PHP PHP – это не чисто функциональный язык, но поддерживает FP-стиль: array_map() – применяет функцию ко всем элементам массива. array_filter() – фильтрует массив по функции. array_reduce() – сворачивает массив в одно значение.
$numbers = [1, 2, 3, 4, 5];

// Умножаем каждый элемент на 2
$doubled = array_map(fn($x) => $x * 2, $numbers);
print_r($doubled); // [2, 4, 6, 8, 10]

// Фильтруем только четные числа
$evens = array_filter($numbers, fn($x) => $x % 2 === 0);
print_r($evens); // [2, 4]

// Суммируем все числа
$sum = array_reduce($numbers, fn($carry, $x) => $carry + $x, 0);
echo $sum; // 15
Ставь 👍 и забирай 📚 Базу знаний

Квартиры в ЖК SOKOLNIKI! Рассрочка до 2,5 лет, ПВ от 10% Видовые квартиры бизнес+ класса возле парка от 28 м² от 400 000 руб.
Квартиры в ЖК SOKOLNIKI! Рассрочка до 2,5 лет, ПВ от 10% Видовые квартиры бизнес+ класса возле парка от 28 м² от 400 000 руб./м² Первый взнос от 10% Гибкие программы рассрочки до 2,5х лет с переходом в ипотеку Квартиры от 28м² до 135м² От студий до семейных фоматов с большими гостиными Колясочные на этаже Все для удобства родителей Дизайнерские лобби Стильные входные группы Подземный паркинг Системы хранения велосипедов и самокатов Детский сад Закрытая территория Девелопер STONE 18 лет на рынке недвижимости. 27 проектов м. "Сокольники", 12 мин. от парка Перейти на сайт Проектная декларация на сайте https://наш.дом.рф/. Застройщик: ООО СЗ «КВАРТАЛ СОКОЛЬНИКИ». Финансовые услуги оказывает: ПАО "Совкомбанк". #реклама stone-sokolniki.ru О рекламодателе

🤔 Что означает понятие "жаность"? Вероятно, опечатка или редкий термин. В программировании может означать: - Структурность и формальность кода. - Приверженность принципам (SOLID, DRY, KISS). - Жесткость архитектуры – сложность изменения системы без слома логики. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Расскажи про полиморфизм Полиморфизм — это одна из ключевых концепций ООП (объектно-ориентированного программирования), которая позволяет объектам разного типа использовать один и тот же интерфейс. Это значит, что один метод может работать с разными типами данных, но при этом давать корректный результат. 🚩Зачем нужен полиморфизм? 🟠Гибкость кода можно легко заменять одни классы другими, не меняя общий код. 🟠Упрощение поддержки код становится понятнее и легче для расширения. 🟠Сокращение дублирования один общий интерфейс может использоваться разными классами. 🚩Виды полиморфизма Полиморфизм через наследование (override, переопределение методов) Полиморфизм через интерфейсы (реализация одного интерфейса разными классами) 🚩Полиморфизм через наследование Допустим, у нас есть базовый класс Animal, у которого есть метод makeSound(). Разные животные будут издавать разные звуки, но все они будут использовать этот метод.
class Animal {
    public function makeSound() {
        return "Some sound";
    }
}

class Dog extends Animal {
    public function makeSound() {
        return "Woof!";
    }
}

class Cat extends Animal {
    public function makeSound() {
        return "Meow!";
    }
}

function printSound(Animal $animal) {
    echo $animal->makeSound() . PHP_EOL;
}

printSound(new Dog()); // Выведет "Woof!"
printSound(new Cat()); // Выведет "Meow!"
🚩Полиморфизм через интерфейсы Иногда классы не связаны через наследование, но должны поддерживать общий метод. Для этого используется интерфейс:
interface Shape {
    public function getArea(): float;
}

class Circle implements Shape {
    private $radius;
    
    public function __construct($radius) {
        $this->radius = $radius;
    }

    public function getArea(): float {
        return pi() * $this->radius * $this->radius;
    }
}

class Rectangle implements Shape {
    private $width, $height;
    
    public function __construct($width, $height) {
        $this->width = $width;
        $this->height = $height;
    }

    public function getArea(): float {
        return $this->width * $this->height;
    }
}

function printArea(Shape $shape) {
    echo "Площадь: " . $shape->getArea() . PHP_EOL;
}

printArea(new Circle(5));       // Выведет площадь круга
printArea(new Rectangle(4, 6)); // Выведет площадь прямоугольника
Ставь 👍 и забирай 📚 Базу знаний

Устроиться аналитиком в Яндекс за выходные 1–2 марта проводим Weekend Offer Analytics. До 24 февраля оставьте заявку на участие, 1 марта пройдите технические собеседования, а 2 марта познакомьтесь с командами и получите офер. В мероприятии участвует 11 команд: Большие данные, Алиса, Ecom-сценарии Поиска, Автономный транспорт, Поиск с Нейро, Карты, Рекламные технологии, Коммерческий департамент, Международные проекты Поиска в Турции и Казахстане, Crowd, Приложение «Яндекс с Алисой». Вы сможете пообщаться с менеджерами и выбрать проект, который покажется самым интересным. Зарегистрироваться #реклама 16+ yandex.ru О рекламодателе

🤔 О чем шаблон Bridge? Шаблон Bridge разделяет абстракцию и реализацию, позволяя изменять их независимо. Применяется, когда: - Нужно избежать жесткой привязки между абстракцией и реализацией. - Требуется разделение логики и деталей реализации (например, разные устройства вывода). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Расскажи о Unit tests Unit-тесты (или модульные тесты) — это тесты, которые проверяют работу отдельных модулей (функций, классов, методов) в коде. Они позволяют убедиться, что каждый компонент программы работает правильно в изоляции от других частей системы. 🚩Зачем нужны Unit-тесты? 🟠Раннее выявление ошибок тесты помогают обнаружить баги сразу после написания кода. 🟠Упрощение рефакторинга при изменении кода можно быстро проверить, не сломалось ли что-то. 🟠Уверенность в качестве кода тесты показывают, что функции работают так, как задумано. 🟠Автоматизация тестирования можно запускать тесты автоматически перед каждым релизом. 🟠Документирование кода тесты помогают понять, как должна работать функция. 🚩Как писать Unit-тесты в PHP? В PHP для написания тестов чаще всего используют PHPUnit – это популярный фреймворк для модульного тестирования. Устанавливаем через Composer:
composer require --dev phpunit/phpunit
🚩Пример Unit-теста Допустим, у нас есть функция в классе Calculator, которая складывает два числа
class Calculator {
    public function add($a, $b) {
        return $a + $b;
    }
}
Теперь создадим тест для проверки работы метода add
use PHPUnit\Framework\TestCase;

class CalculatorTest extends TestCase {
    public function testAdd() {
        $calc = new Calculator();
        $result = $calc->add(2, 3);
        $this->assertEquals(5, $result);
    }
}
🚩Запуск тестов Чтобы запустить тест, используем команду
vendor/bin/phpunit tests
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое понятие кардинальности? Это количество уникальных значений в столбце базы данных. - Высокая кардинальность – много уникальных значений (например, id, email). - Низкая кардинальность – мало уникальных значений (например, gender, status). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Как типы связи реализуются в Larevel? В Laravel связи между моделями реализуются через Eloquent ORM. Eloquent предоставляет удобные методы для работы с отношениями (relations) между таблицами в базе данных. 🚩Один к одному (`One to One`) Каждая модель User имеет один Profile.
class User extends Model
{
    public function profile()
    {
        return $this->hasOne(Profile::class);
    }
}
В модели Profile
class Profile extends Model
{
    public function user()
    {
        return $this->belongsTo(User::class);
    }
}
Теперь можно получить профиль пользователя так
$user = User::find(1);
$profile = $user->profile; // Получаем профиль пользователя
🟠Один ко многим (`One to Many`) Каждый Post может иметь много Comment. В модели Post
class Post extends Model
{
    public function comments()
    {
        return $this->hasMany(Comment::class);
    }
}
В модели Comment
class Comment extends Model
{
    public function post()
    {
        return $this->belongsTo(Post::class);
    }
}
Теперь можно получить все комментарии к посту:
$post = Post::find(1);
$comments = $post->comments; // Коллекция комментариев
🟠Многие ко многим (`Many to Many`) Каждый User может подписаться на несколько Role, и наоборот. В Laravel для связи многие ко многим нужна промежуточная таблица role_user (название должно быть singular_singular в алфавитном порядке). В модели User
class User extends Model
{
    public function roles()
    {
        return $this->belongsToMany(Role::class);
    }
}
В модели Role
class Role extends Model
{
    public function users()
    {
        return $this->belongsToMany(User::class);
    }
}
Теперь можно получить роли пользователя:
$user = User::find(1);
$roles = $user->roles;
Добавить роль:
$user->roles()->attach($roleId);
Удалить роль
$user->roles()->detach($roleId);
Синхронизировать (удалить старые и добавить новые):
$user->roles()->sync([1, 2, 3]);
🟠Связь через другую таблицу (`Has One / Has Many Through`) Например, у нас есть Country, User, Post. Мы хотим получить все посты в стране.
class Country extends Model
{
    public function posts()
    {
        return $this->hasManyThrough(Post::class, User::class);
    }
}
Теперь можно получить все посты страны
$country = Country::find(1);
$posts = $country->posts;
🟠Полиморфные связи (`Polymorphic Relations`) Позволяет разным моделям использовать одну таблицу для хранения данных. Пример: у нас есть Post и Video, к которым могут быть Comment В модели Comment
class Comment extends Model
{
    public function commentable()
    {
        return $this->morphTo();
    }
}
В модели Post
class Post extends Model
{
    public function comments()
    {
        return $this->morphMany(Comment::class, 'commentable');
    }
}
В модели Video
class Video extends Model
{
    public function comments()
    {
        return $this->morphMany(Comment::class, 'commentable');
    }
}
Использование
$post = Post::find(1);
$post->comments()->create(['content' => 'Отличный пост!']);

$video = Video::find(1);
$video->comments()->create(['content' => 'Крутое видео!']);
Ставь 👍 и забирай 📚 Базу знаний

🤔 Почему AVG() считает среднее? Функция AVG() складывает все значения в столбце и делит на их количество. Она учитывает только ненулевые значения, но игнорирует NULL. Если NULL есть в данных, то результат может отличаться от ожидаемого среднего. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Repost from easyoffer
– Помощь с pet-проектом – Составление roadmap – Общая консультация – Проведение код-ревью и mock-собеседования – Помощь с тру
– Помощь с pet-проектом – Составление roadmap – Общая консультация – Проведение код-ревью и mock-собеседования – Помощь с трудоустройством Все это и многое другое может Ментор. Он обеспечит вам необходимый boost, ускорит и упростит вход в IT. 🔥 Узнай список топовых менторов ✴ Многие из них предлагают бесплатную первую консультацию

🤔 Какое отличие у протоколов 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: Синхронизация времени
Ставь 👍 и забирай 📚 Базу знаний