Backend
3.95K subscribers
36 photos
711 links
Комьюнити Backend программистов.
Python, Java, Golang, PHP, C#, C/C++, DevOps

Сайт easyoffer.ru
Реклама @easyoffer_adv
ВП @easyoffer_vp
Download Telegram
🤔 Какой из перечисленных HTTP методов используется для частичного обновления ресурса?
Anonymous Quiz
2%
GET
91%
PATCH
7%
POST
0%
DELETE
📌 Как "под капотом" работает аннотация transactional ?

💬 Спрашивают в 12% собеседований

🤔 Аннотация `@Transactional` в Spring работает следующим образом:

1️⃣ Создание прокси:

Spring обнаруживает @Transactional и создает прокси для класса или метода.

2️⃣ Перехват вызова:

Прокси перехватывает вызов метода, аннотированного @Transactional.

3️⃣ Начало транзакции:

Прокси делегирует управление TransactionInterceptor, который начинает транзакцию через PlatformTransactionManager.

4️⃣ Выполнение метода:

Исходный метод выполняется.

5️⃣ Фиксация или откат транзакции:

Если метод завершился успешно, транзакция фиксируется (commit). Если метод выбросил исключение, транзакция откатывается (rollback).

🤔 Ключевые компоненты:

Прокси: Перехватывает вызовы методов.

TransactionInterceptor: Управляет началом и завершением транзакций.

PlatformTransactionManager: Обеспечивает управление транзакциями.

Эта автоматизация позволяет легко управлять транзакциями, обеспечивая целостность данных.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
1
🤔 Какой из перечисленных инструментов используется для мониторинга серверов?
Anonymous Quiz
2%
Git
15%
Ansible
80%
Prometheus
3%
Maven
📌 Расскажи про уровни изоляции ?

💬 Спрашивают в 12% собеседований

🤔 Уровни изоляции транзакций в SQL определяют, как взаимодействуют параллельные транзакции и какие аномалии данных они предотвращают. Основные уровни изоляции:

1️⃣ Read Uncommitted:

Видит изменения, даже если они не зафиксированы.

Аномалии: грязное чтение.

2️⃣ Read Committed:

Видит только зафиксированные изменения.

Аномалии: неповторяющееся чтение.

3️⃣ Repeatable Read:

Сохраняет консистентность чтения данных в пределах одной транзакции.

Аномалии: фантомные чтения.

4️⃣ Serializable:

Полная изоляция транзакций, как если бы они выполнялись последовательно.

Аномалии: никаких.

🤔 Применение:

Read Uncommitted: Минимальная изоляция, максимальная производительность.

Read Committed: Баланс между изоляцией и производительностью.

Repeatable Read: Повышенная изоляция, подходит для большинства сценариев.

Serializable: Максимальная изоляция, используется для критически важных операций.

Каждый уровень обеспечивает разный баланс между изоляцией и производительностью.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
3
🤔 Какой тип базы данных использует ключи и значения для хранения данных?
Anonymous Quiz
25%
Реляционная база данных
7%
Документная база данных
3%
Графовая база данных
65%
Ключ-значение база данных
😁7
📌 Как ты можешь описать абстракцию ?

💬 Спрашивают в 12% собеседований

🤔 Абстракция — это концепция в объектно-ориентированном программировании, которая позволяет выделять и использовать только значимые характеристики и поведение объекта, скрывая при этом его сложные детали реализации. Это упрощает взаимодействие с объектами, предоставляя простой интерфейс и минимизируя сложность.

🤔 Пример:

В автомобиле вы управляете рулем, педалями и переключателями передач, не думая о том, как работают двигатель или тормозная система. Это и есть абстракция: вы взаимодействуете с простым интерфейсом, не вникая в сложные внутренние механизмы.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какой из перечисленных протоколов используется для передачи сообщений между клиентом и сервером в режиме реального времени?
Anonymous Quiz
23%
HTTP
2%
FTP
72%
WebSocket
3%
SMTP
🔥1
📌 Что такое столп "наследование" ?

💬 Спрашивают в 12% собеседований

🤔 Наследование — это ключевой принцип объектно-ориентированного программирования, позволяющий создавать новый класс (наследник), который заимствует свойства и методы существующего класса (родителя). Это способствует:

1️⃣ Повторному использованию кода: Общие функции и данные определяются один раз в родительском классе и могут быть использованы во всех классах-наследниках.
2️⃣ Упрощению расширения функциональности: Наследники могут добавлять новые свойства и методы или изменять существующие, не затрагивая код родительского класса.
3️⃣ Созданию иерархий классов: Помогает структурировать и организовать код в виде дерева классов, отражающего реальные отношения иерархии.

🤔 Пример:
class Animal {
void eat() {
System.out.println("This animal eats.");
}
}

class Dog extends Animal {
void bark() {
System.out.println("The dog barks.");
}
}

public class Main {
public static void main(String[] args) {
Dog dog = new Dog();
dog.eat(); // Наследованный метод
dog.bark(); // Метод класса Dog
}
}


В этом примере Dog наследует метод eat от Animal, что демонстрирует наследование в действии.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какой инструмент используется для контейнеризации приложений?
Anonymous Quiz
96%
Docker
1%
Git
2%
Jenkins
1%
Nginx
📌 Какие виды тестирования ты знаешь ?

💬 Спрашивают в 12% собеседований

🤔 Я знаю множество видов тестирования программного обеспечения, которые можно классифицировать по разным критериям. Вот основные из них:

🤔 По уровню тестирования:

1️⃣ Модульное тестирование (Unit Testing):

Проверяет отдельные модули или компоненты приложения на корректность работы.

2️⃣ Интеграционное тестирование (Integration Testing):

Проверяет взаимодействие между различными модулями или компонентами.

3️⃣ Системное тестирование (System Testing):

Тестирует всю систему в целом на соответствие требованиям.

4️⃣ Приёмочное тестирование (Acceptance Testing):

Проверяет систему на соответствие бизнес-требованиям и готовность к выпуску.

🤔 По методу тестирования:

1️⃣ Белое (прозрачное) тестирование (White-box Testing):

Тестирует внутреннюю структуру или работу приложения.

2️⃣ Чёрное (закрытое) тестирование (Black-box Testing):

Тестирует функциональность системы без знания внутренней структуры.

3️⃣ Серое тестирование (Gray-box Testing):

Комбинация белого и черного тестирования.

🤔 По цели тестирования:

1️⃣ Функциональное тестирование (Functional Testing):

Проверяет функциональность системы на соответствие требованиям.

2️⃣ Нефункциональное тестирование (Non-functional Testing):

Проверяет аспекты системы, такие как производительность, безопасность, удобство использования и др.

🤔 По типу тестирования:

1️⃣ Регрессионное тестирование (Regression Testing):

Проверяет, что изменения в коде не вызвали новых ошибок.

2️⃣ Ретестирование (Re-testing):

Повторное тестирование после исправления дефектов.

3️⃣ Тестирование производительности (Performance Testing):

Включает нагрузочное (Load Testing), стрессовое (Stress Testing) и тестирование стабильности (Stability Testing).

4️⃣ Тестирование безопасности (Security Testing):

Проверяет систему на наличие уязвимостей и защищённость данных.

5️⃣ Тестирование удобства использования (Usability Testing):

Проверяет, насколько система удобна и понятна для пользователя.

6️⃣ Альфа-тестирование (Alpha Testing):

Проводится внутри организации разработчика.

7️⃣ Бета-тестирование (Beta Testing):

Проводится внешними пользователями в реальных условиях.

🤔 По степени автоматизации:

1️⃣ Ручное тестирование (Manual Testing):

Тестирование, выполняемое вручную тестировщиками.

2️⃣ Автоматизированное тестирование (Automated Testing):

Тестирование с использованием специальных инструментов и скриптов.

🤔 По специфике тестирования:

1️⃣ Тестирование совместимости (Compatibility Testing):

Проверяет систему на совместимость с различными устройствами, браузерами, операционными системами и т.д.

2️⃣ Тестирование локализации (Localization Testing):

Проверяет корректность адаптации приложения к различным языкам и регионам.

3️⃣ Тестирование установки (Installation Testing):

Проверяет процесс установки и настройки системы.

4️⃣ Тестирование восстановления (Recovery Testing):

Проверяет способность системы восстанавливаться после сбоев.

🤔 Заключение:

Эти виды тестирования помогают обеспечивать качество программного обеспечения, проверяя его на разных уровнях и аспектах, от отдельных модулей до всей системы в целом, от функциональности до производительности и безопасности.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
🤔 Какой из перечисленных методов аутентификации основан на использовании токенов?
Anonymous Quiz
11%
Basic Auth
59%
OAuth
22%
API Key
8%
Session
👍1
📌 Что такое SOAP ?

💬 Спрашивают в 10% собеседований

🤔 SOAP (Simple Object Access Protocol) — это протокол для обмена структурированными сообщениями в распределённых вычислительных средах. Он основан на XML и используется для передачи данных между различными приложениями через сеть, часто по протоколу HTTP или SMTP.

🤔 Основные характеристики SOAP:

1️⃣ Протокол на основе XML:

SOAP сообщения формируются в формате XML, что обеспечивает независимость от платформы и языка программирования.

2️⃣ Стандартизованное сообщение:

SOAP сообщение состоит из обязательных и необязательных элементов:

Envelope: Определяет начало и конец сообщения.

Header: Опциональный элемент, содержащий метаинформацию о сообщении.

Body: Основное содержимое сообщения, включающее данные и команды.

Fault: Опциональный элемент для обработки ошибок.

3️⃣ Транспортные протоколы:

Чаще всего используется с HTTP/HTTPS, но может работать и с другими протоколами, такими как SMTP.

4️⃣ Расширяемость:

SOAP легко расширяется, позволяя добавлять дополнительные функциональные возможности через заголовки и другие элементы.

5️⃣ Независимость от платформы и языка:

SOAP может быть использован в любой среде и на любом языке программирования, что обеспечивает высокую совместимость между различными системами.

🤔 Пример SOAP-сообщения:
<soapenv:Envelope xmlns:soapenv="https://schemas.xmlsoap.org/soap/envelope/" xmlns:example="https://example.com/">
<soapenv:Header/>
<soapenv:Body>
<example:getExampleRequest>
<example:parameter1>Value1</example:parameter1>
<example:parameter2>Value2</example:parameter2>
</example:getExampleRequest>
</soapenv:Body>
</soapenv:Envelope>


🤔 Преимущества SOAP:

1️⃣ Независимость от платформы и языка:

SOAP может взаимодействовать с любыми системами, поддерживающими XML и HTTP/SMTP.

2️⃣ Строгое соблюдение стандартов:

SOAP основывается на строгих стандартах, что обеспечивает надежность и предсказуемость взаимодействия.

3️⃣ Расширяемость:

Легко адаптируется для специфических потребностей через расширения и заголовки.

4️⃣ Встроенная обработка ошибок:

Использует элемент Fault для детальной обработки и передачи ошибок.

5️⃣ Поддержка сложных операций:

Подходит для сложных операций и распределённых транзакций.

🤔 Недостатки SOAP:

1️⃣ Сложность:

SOAP-сообщения могут быть сложными и громоздкими из-за использования XML.

2️⃣ Производительность:

Использование XML увеличивает объем передаваемых данных, что может снизить производительность.

3️⃣ Оверхед:

Требует дополнительных ресурсов для обработки и передачи XML-сообщений.

🤔 Заключение:

SOAP является мощным и гибким протоколом для обмена сообщениями в распределённых системах, обеспечивая высокий уровень совместимости и расширяемости. Однако его сложность и накладные расходы делают его менее предпочтительным для простых веб-сервисов, где часто используется более легковесный REST.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🤔 Какой из перечисленных фреймворков является фреймворком для разработки backend на Java?
Anonymous Quiz
86%
Spring
5%
Flask
3%
Ruby on Rails
6%
Express.js
📌 Какие join бывают?

💬 Спрашивают в 8% собеседований

В реляционных базах данных, операции объединения (JOIN) позволяют объединить строки из двух или более таблиц на основе связанных между собой столбцов. Существует несколько типов JOIN, каждый из которых имеет свои особенности и применим для разных ситуаций. Рассмотрим основные типы JOIN:

1️⃣ INNER JOIN

Описание: Объединяет строки из обеих таблиц, если они удовлетворяют условию объединения.
Применение: Когда необходимо выбрать только те строки, которые имеют соответствующие значения в обеих таблицах.
SELECT *
FROM таблица1
INNER JOIN таблица2
ON таблица1.ключ = таблица2.ключ;


2️⃣ LEFT JOIN (или LEFT OUTER JOIN)

Описание: Возвращает все строки из левой таблицы и соответствующие строки из правой таблицы. Если соответствующей строки в правой таблице нет, в результирующем наборе данных для столбцов правой таблицы будут значения NULL.
Применение: Когда необходимо выбрать все строки из одной таблицы и соответствующие данные из другой таблицы, если они существуют.
SELECT *
FROM таблица1
LEFT JOIN таблица2
ON таблица1.ключ = таблица2.ключ;


3️⃣ RIGHT JOIN (или RIGHT OUTER JOIN)

Описание: Возвращает все строки из правой таблицы и соответствующие строки из левой таблицы. Если соответствующей строки в левой таблице нет, в результирующем наборе данных для столбцов левой таблицы будут значения NULL.
Применение: Когда необходимо выбрать все строки из одной таблицы (правой) и соответствующие данные из другой таблицы (левой), если они существуют.
SELECT *
FROM таблица1
RIGHT JOIN таблица2
ON таблица1.ключ = таблица2.ключ;


4️⃣ FULL JOIN (или FULL OUTER JOIN)

Описание: Возвращает все строки, когда есть совпадения либо в левой, либо в правой таблице. Если строки не соответствуют в одной из таблиц, для этой таблицы будут значения NULL.
Применение: Когда необходимо выбрать все строки из обеих таблиц, независимо от того, есть ли соответствующие строки в другой таблице.
SELECT *
FROM таблица1
FULL JOIN таблица2
ON таблица1.ключ = таблица2.ключ;


5️⃣ CROSS JOIN

Описание: Возвращает декартово произведение двух таблиц, то есть все возможные комбинации строк из обеих таблиц.
Применение: Когда необходимо создать комбинации всех строк из обеих таблиц. Используется редко и с осторожностью, так как может привести к очень большому количеству строк.
SELECT *
FROM таблица1
CROSS JOIN таблица2;


6️⃣ SELF JOIN

Описание: Применяется для объединения таблицы самой с собой. Обычно используется для сравнения строк внутри одной и той же таблицы.
Применение: Когда необходимо сопоставить строки одной таблицы друг с другом, например, для анализа иерархий или поиска парных записей.
SELECT A.*
FROM таблица A, таблица B
WHERE A.ключ = B.ключ;


8️⃣ NATURAL JOIN

Описание: Автоматически объединяет таблицы по всем столбцам с одинаковыми именами и типами данных.
Применение: Когда у таблиц есть столбцы с одинаковыми именами, и нужно объединить их без явного указания условий объединения.
SELECT *
FROM таблица1
NATURAL JOIN таблица2;


🤔 Заключение

JOIN-операции являются мощным инструментом для объединения данных из нескольких таблиц в реляционных базах данных. Правильный выбор типа JOIN зависит от конкретных требований запроса и структуры данных. Понимание различий между INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN, CROSS JOIN, SELF JOIN и NATURAL JOIN позволяет эффективно работать с реляционными данными.

🤔 Краткий ответ:

Основные типы JOIN: INNER JOIN (объединяет только совпадающие строки), LEFT JOIN (все строки из левой таблицы и совпадающие строки из правой), RIGHT JOIN (все строки из правой таблицы и совпадающие строки из левой), FULL JOIN (все строки из обеих таблиц), CROSS JOIN (декартово произведение всех строк), SELF JOIN (объединение таблицы самой с собой), NATURAL JOIN (автоматическое объединение по одинаковым столбцам).

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🤔 Какой из перечисленных инструментов используется для оркестрации контейнеров?
Anonymous Quiz
2%
GitLab
3%
Terraform
91%
Kubernetes
4%
Nginx
📌 Что такое виртуальное окружение?

💬 Спрашивают в 7% собеседований

Виртуальное окружение: Что это такое и зачем оно нужно

🤔 Определение

Виртуальное окружение (virtual environment) — это изолированная среда для выполнения программного кода, которая позволяет создавать независимые друг от друга пространства для различных проектов. В каждом таком окружении могут быть установлены специфические для проекта зависимости (библиотеки, пакеты), которые не будут пересекаться с зависимостями других проектов.

🤔 Зачем нужно

Виртуальные окружения решают несколько важных задач:

1️⃣ Изоляция зависимостей: В разных проектах могут использоваться различные версии одних и тех же библиотек. Виртуальные окружения позволяют избежать конфликтов версий, создавая изолированные пространства для каждого проекта.

2️⃣ Упрощение управления зависимостями: Легко установить, обновить или удалить зависимости без риска повлиять на другие проекты. Это особенно полезно при работе над проектами с долгим жизненным циклом, где могут возникать проблемы совместимости.

3️⃣ Повышение безопасности: Изоляция окружения помогает ограничить доступ к критически важным системным ресурсам и защищает основную систему от потенциально вредоносного кода.

4️⃣ Удобство разработки и тестирования: Виртуальные окружения позволяют разработчикам легко переключаться между проектами и их зависимостями, что упрощает процесс тестирования и отладки.

5️⃣ Совместимость и переносимость: Проекты с виртуальными окружениями легче перенести на другие системы или передать другим разработчикам. Достаточно скопировать окружение вместе с проектом, чтобы получить полностью функционирующую копию.

🤔 Как используется

Для создания и управления виртуальными окружениями существуют различные инструменты. В Python, например, наиболее распространенными являются:

venv: Встроенный модуль в Python, позволяющий создавать легковесные виртуальные окружения.

virtualenv: Более функциональный инструмент, особенно полезный для старых версий Python.

conda: Инструмент, который управляет как пакетами, так и виртуальными окружениями, поддерживающий не только Python, но и другие языки программирования.

Процесс использования виртуальных окружений обычно включает следующие шаги:

1️⃣ Создание окружения: Команда для создания нового окружения (например, python -m venv env для venv).

2️⃣ Активация окружения: Команда для активации окружения (например, source env/bin/activate на Unix-подобных системах или .\env\Scripts\activate на Windows).

3️⃣ Установка зависимостей: Использование менеджера пакетов (например, pip) для установки необходимых библиотек.

4️⃣ Деактивация окружения: Команда для выхода из окружения (например, deactivate).

🤔 Краткий ответ

Виртуальное окружение — это изолированная среда для выполнения программного кода, позволяющая устанавливать и управлять зависимостями отдельно для каждого проекта, избегая конфликтов версий и упрощая разработку, тестирование и переносимость проектов.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какой формат данных обычно используется для обмена данными между клиентом и сервером в веб-приложениях?
Anonymous Quiz
7%
XML
1%
CSV
91%
JSON
0%
YAML
📌 Как работает хеш таблица?

💬 Спрашивают в 7% собеседований

Хеш-таблица: Что это такое и как она работает

🤔 Определение

Хеш-таблица (hash table) — это структура данных, которая позволяет эффективно хранить и извлекать пары "ключ-значение". Она использует хеш-функцию для преобразования ключа в индекс массива, где хранится соответствующее значение.

🤔 Основные концепции

1️⃣ Хеш-функция: Это функция, которая принимает ключ и возвращает индекс массива, где должно храниться значение. Хорошая хеш-функция должна равномерно распределять ключи по всему пространству индексов, чтобы минимизировать количество коллизий.

2️⃣ Коллизии: Это ситуации, когда два разных ключа хешируются в один и тот же индекс. Существуют различные методы разрешения коллизий:

Метод цепочек (chaining): В каждой ячейке массива хранится список (или другая структура данных), содержащий все значения, соответствующие этому индексу.

Открытая адресация (open addressing): При коллизии ищется другая свободная ячейка по определённому алгоритму (например, линейное пробирование, квадратичное пробирование или двойное хеширование).

3️⃣ Размер хеш-таблицы: Количество ячеек (бакетов) в массиве. Оптимальный размер зависит от количества ключей и используемой хеш-функции. Обычно размер выбирается простым числом для уменьшения вероятности коллизий.

🤔 Как работает хеш-таблица

1️⃣ Вставка элемента:

Хеш-функция вычисляет индекс для ключа.

Если ячейка пуста, значение записывается в неё.

Если ячейка занята (коллизия), применяется выбранный метод разрешения коллизий.

2️⃣ Поиск элемента:

Хеш-функция вычисляет индекс для ключа.

Проверяется ячейка по этому индексу.

Если ключи совпадают, возвращается значение.

Если ключи не совпадают (коллизия), применяется метод разрешения коллизий до нахождения нужного ключа или пустой ячейки (что означает отсутствие ключа).

3️⃣ Удаление элемента:

Хеш-функция вычисляет индекс для ключа.

Элемент удаляется, после чего может потребоваться перемещение других элементов для предотвращения разрыва цепочек или нарушения последовательности в открытой адресации.

🤔 Преимущества и недостатки

🤔 Преимущества:

Быстродействие: Хеш-таблицы обеспечивают амортизированное время выполнения операций вставки, удаления и поиска в среднем за O(1).

Простота использования: Они интуитивно понятны и легко реализуются.

🤔 Недостатки:

Коллизии: Хотя хорошие хеш-функции минимизируют их количество, они всё же могут возникать, снижая производительность.

Память: Хеш-таблицы требуют значительных объёмов памяти для хранения данных, особенно при малой заполненности.

🤔 Применение

Хеш-таблицы широко используются в:

Реализации словарей и ассоциативных массивов.

Кэшировании данных для быстрого доступа.

Реализации множества.

Хранении и управлении сессиями и идентификаторами в веб-приложениях.

🤔 Краткий ответ

Хеш-таблица — это структура данных, использующая хеш-функцию для быстрого преобразования ключей в индексы массива, что позволяет эффективно выполнять операции вставки, поиска и удаления элементов. Она использует методы разрешения коллизий для обеспечения корректной работы при возникновении конфликтов индексов.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🤔 Какой из перечисленных методов используется для удаления ресурса в REST API?
Anonymous Quiz
1%
GET
1%
POST
2%
PUT
96%
DELETE
🤔 Что знаешь о хеш функции?

Хеш-функция — это функция, которая принимает входные данные (ключ) и возвращает фиксированное число, называемое хешем (или хеш-значением). Основная цель хеш-функции — преобразовать произвольные данные в числовое значение определенного диапазона.

🚩Основные свойства хеш-функции:

🟠 Детерминированность: Хеш-функция всегда должна возвращать одно и то же хеш-значение для одного и того же входного значения.
🟠Равномерное распределение: Хорошая хеш-функция должна равномерно распределять хеш-значения по всему диапазону, чтобы минимизировать количество коллизий.
🟠Быстрота вычисления: Хеш-функция должна быть достаточно быстрой, чтобы не замедлять общую производительность алгоритмов, которые её используют.
🟠Минимизация коллизий: Коллизия возникает, когда два разных входных значения дают одно и то же хеш-значение. Хорошая хеш-функция должна минимизировать вероятность таких случаев.

🚩Применение хеш-функций:

🟠Хеш-таблицы: Используются для вычисления индекса массива, где будет храниться значение, связанное с ключом. Это позволяет быстро выполнять операции вставки, удаления и поиска.
🟠Криптография: Криптографические хеш-функции (например, SHA-256, MD5) используются для обеспечения целостности данных, создания цифровых подписей и безопасного хранения паролей.
🟠Контроль целостности данных: Хеш-функции применяются для проверки целостности данных при передаче или хранении, позволяя выявлять ошибки или изменения в данных.
🟠Генерация уникальных идентификаторов: Хеш-функции используются для генерации уникальных идентификаторов (например, UUID), основываясь на входных данных.

🚩Примеры хеш-функций

🟠Простая хеш-функция: Эта функция возвращает остаток от деления длины ключа на размер таблицы. Она проста, но не обеспечивает равномерное распределение.
def simple_hash(key, table_size):
return len(key) % table_size


🟠Хеш-функция для строк (например, DJB2):
def djb2_hash(key):
hash_value = 5381
for char in key:
hash_value = ((hash_value << 5) + hash_value) + ord(char) # hash_value * 33 + ord(char)
return hash_value


🚩Методы разрешения коллизий

🟠Метод цепочек (chaining): В каждой ячейке массива хранится список значений, которые хешируются в один и тот же индекс.
🟠Открытая адресация (open addressing): При коллизии ищется другая свободная ячейка по определённому алгоритму (например, линейное пробирование, квадратичное пробирование или двойное хеширование).

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3