Java | Вопросы собесов
前往频道在 Telegram
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @sendme_ads
显示更多📈 Telegram 频道 Java | Вопросы собесов 的分析概览
频道 Java | Вопросы собесов (@easy_java_ru) 俄语 语言赛道中的 是活跃参与者。目前社区聚集了 11 290 名订阅者,在 技术与应用 类别中位列第 10 935,并在 俄罗斯 地区排名第 56 548 位。
📊 受众指标与增长动态
自 невідомо 创建以来,项目保持高速增长,吸引了 11 290 名订阅者。
根据 04 十一月, 2026 的最新数据,频道保持稳定运转。过去 30 天订阅人数变化为 -44,过去 24 小时变化为 -2,整体触达仍然可观。
- 认证状态: 未认证
- 互动率 (ER): 平均受众互动率为 9.56%。内容发布后 24 小时内通常能获得 5.73% 的反应,占订阅者总量。
- 帖子覆盖: 每篇帖子平均可获得 1 079 次浏览,首日通常累积 647 次浏览。
- 互动与反馈: 受众积极参与,单帖平均反应数为 6。
- 主题关注点: 内容集中在 ставь, void, string, строка, static 等核心主题上。
📝 描述与内容策略
作者将该频道定位为表达主观观点的平台:
“Сайт: https://easyoffer.ru/
Все каналы: t.me/+xGeAw6ckJ4liYzQy
Контакт для рекламы: @sendme_ads”
凭借高频更新(最新数据采集于 05 十一月, 2026),频道始终保持新鲜度与高覆盖。分析显示受众积极互动,使其成为 技术与应用 类别中的关键影响点。
11 290
订阅者
-224 小时
-187 天
-4430 天
帖子存档
11 292
Почему нельзя сравнивать объекты через «==» ?
Спросят с вероятностью 12%
Сравнение объектов с использованием оператора
== проверяет, ссылаются ли две ссылки на один и тот же объект в памяти, а не сравнивает их содержимое. То есть, если две переменные ссылаются на разные объекты, даже если содержимое этих объектов одинаково, он вернёт false.
Пример
String str1 = new String("Java");
String str2 = new String("Java");
System.out.println(str1 == str2); // Выведет "false", потому что str1 и str2 указывают на разные объекты в памяти
В этом примере, несмотря на то что текстовое содержимое str1 и str2 одинаково ("Java"), оператор == вернет false, потому что str1 и str2 — это разные объекты в памяти.
Правильное сравнение объектов
Следует использовать метод .equals(), который предназначен для сравнения содержимого объектов. Большинство классов в стандартной библиотеке и пользовательские классы должны переопределять метод .equals() для обеспечения корректного сравнения значений объектов.
String str1 = new String("Java");
String str2 = new String("Java");
System.out.println(str1.equals(str2)); // Выведет "true", потому что содержимое объектов одинаково
В этом случае метод .equals() сравнивает значения строк, а не их ссылки, и возвращает true, потому что текстовое содержимое str1 и str2 действительно одинаково.
Использование == для сравнения объектов не является корректным подходом, когда необходимо сравнить их содержимое, поскольку он сравнивает только ссылки на объекты. Для сравнения содержимого объектов следует использовать метод .equals(), который должен быть корректно переопределен в классе объектов, которые предполагается сравнивать.
👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1715 вопроса на Java разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых11 292
Рекомендуем канал Java | Фишки и трюки!
⌨️ Ответы на вопросы с собеседований
⌨️ Разбор полезных классов и методов
⌨️ Заковыристые тесты на знание Java
⌨️ Полезные Java либы и фреймворки
И многое другое!
👉 Присоединиться
11 292
🤔 Какой интерфейс не используется для работы с коллекциями в Java?
11 292
Переверни игру за день в офисе Финтеха и Фантеха Яндекса 🙃
Зовём бэкенд-разработчиков на вечеринку JavaKotDay, чтобы поменяться ролями и почувствовать себя яндексоидом ещё до того, как примешь оффер.
Приходи к нам в гости 14 июля, чтобы порулить на встречах по планированию, поважничать в переговорке и приложить руку к сервисам, которыми пользуются миллионы!
А между делом вкусно поедим, посплетничаем у кулера и обсудим планы с нашими CTO. Кто мы? 😜 Фантех — это Кинопоиск, Плюс, Музыка, Афиша и Букмейт. 🤑 Финтех — Пэй, Сплит, Сейвы, ID.
Хочешь на JavaKotDay? Подтверди свои скиллы и реши задачку на сайте →
11 292
Что такое партиционирование ?
Спросят с вероятностью 12%
Партиционирование в контексте баз данных и систем хранения данных — это процесс разделения таблиц, индексов или других структур данных на более мелкие, управляемые части, называемые партициями. Цель — улучшить производительность и облегчить управление данными за счёт сокращения объёма данных, обрабатываемых в одном запросе, и оптимизации хранения данных.
Типы:
1️⃣ Партиционирование по диапазону (Range Partitioning): Данные разделяются на партиции в соответствии с диапазонами значений определённого столбца или столбцов. Например, таблицу заказов можно разделить на партиции по месяцам или годам.
2️⃣ Партиционирование по списку (List Partitioning): Данные разделяются на основе заранее определённого списка значений. Например, таблицу пользователей можно разделить на партиции по странам, где каждая партиция соответствует конкретной стране.
3️⃣ Партиционирование по хэшу (Hash Partitioning): Данные распределяются по партициям на основе хэш-функции от значения ключа партиционирования. Этот метод позволяет равномерно распределить данные по партициям, даже если распределение ключей не равномерно.
4️⃣ Композитное партиционирование (Composite Partitioning): Комбинация нескольких методов партиционирования. Например, сначала данные могут быть разделены по диапазону дат, а затем каждая партиция по дате может быть дополнительно разделена по хэшу идентификатора пользователя.
Преимущества:
✅ Улучшение производительности: Запросы, обрабатывающие только данные из определённых партиций, могут выполняться быстрее благодаря уменьшению объёма обрабатываемых данных.
✅ Оптимизация обслуживания: Операции обслуживания, такие как резервное копирование и восстановление, могут быть выполнены на уровне отдельных партиций, что сокращает время простоя.
✅ Более эффективное распределение данных: Партиционирование позволяет размещать данные на различных физических устройствах в соответствии с их использованием, что может улучшить производительность и доступность данных.
✅ Управление данными: Партиционирование облегчает управление данными путём архивирования или удаления устаревших данных без воздействия на активную часть базы данных.
Партиционирование является мощным инструментом для управления большими объёмами данных, позволяя улучшить производительность запросов и облегчить процессы обслуживания и управления данными. Однако, для достижения наилучших результатов, необходим тщательный подход к проектированию схемы партиционирования, учитывающий специфику данных и запросов к базе данных.
👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1715 вопроса на Java разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
11 292
В чем взаимосвязь контракта equals и hashCode ?
Спросят с вероятностью 12%
В Java взаимосвязь контракта
equals() и hashCode() имеет ключевое значение для корректной работы коллекций, особенно для тех, которые используют хеширование, таких как HashSet, HashMap, Hashtable и другие. Эти методы определены в классе Object, и их поведение можно переопределить в пользовательских классах для достижения необходимой логики сравнения и хеширования объектов.
Контракт equals()
Определяет, эквивалентны ли два объекта. По умолчанию, он сравнивает ссылки на объекты, то есть проверяет, указывают ли две ссылки на один и тот же объект в памяти. Однако, этот метод часто переопределяется для реализации сравнения по значению, когда два разных объекта считаются равными, если их внутреннее состояние (значения их полей) одинаково.
Контракт hashCode()
Возвращает целочисленное значение, хеш-код объекта, используемый хеш-таблицами для определения местоположения объекта. Хеш-код представляет собой компактное представление информации об объекте и используется для оптимизации поиска объекта в структурах данных, основанных на хешировании.
Взаимосвязь контрактов
Основная взаимосвязь между equals() и hashCode() заключается в следующих правилах:
1️⃣Если два объекта равны по методу equals(Object obj), то их хеш-коды, возвращаемые методом hashCode ?
Сп также должны быть равны. Это необходимо для корректной работы хеш-таблиц, так как обеспечивает, что равные объекты будут находиться в одной и той же "корзине" или иметь одинаковый индекс хеширования.
2️⃣Если хеш-коды двух объектов различны, объекты точно не равны. Это следует из того, что разные хеш-коды указывают на различие объектов. Однако, обратное не всегда верно: два объекта могут иметь одинаковый хеш-код и при этом не быть равными по equals(), что называется коллизией хеш-кодов.
Пример:
В классе, где переопределяется метод equals(), должен быть переопределен и метод hashCode(), чтобы поддерживать описанный контракт:
public class Person {
private String name;
private int age;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age && Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
Правильное соблюдение контрактов equals() и hashCode() обеспечивает эффективное и корректное функционирование хеш-таблиц и других коллекций, использующих хеширование, позволяя избегать несогласованности данных и оптимизировать производительность операций поиска и сравнения объектов.
👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1715 вопроса на Java разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых11 292
⚡️В сети начали находить курсы и книги известных онлайн школ в открытом доступе
Вот отсортированная база с тонной материала(постепенно пополняется):
🔗 БАЗА (3385 видео):
(343 видео, 87 книги) — Java
(176 видео, 32 книги) — Git
(293 видео, 63 книги) — C#
(352 видео, 89 книги) — С++
(167 видео, 53 книги) — PHP
(227 видео, 83 книги) — SQL
(163 видео, 29 книги) — Linux
(363 видео, 122 книги) — Python
(415 видео, 168 книги) — Frontend
(143 видео, 33 книги) — Flask
(167 видео, 43 книги) — Django
(197 видео, 49 книги) — Разработка ботов
(137 видео, 93 книги) — Data Science
(113 видео, 82 книги) — GameDev
(129 видео, 73 книги) — QA
Скачивать ничего не нужно — все выложили в Telegram и на YouTube с доступом по ссылке
11 292
🤔 Какой метод не является частью класса `java.lang.Object`?
11 292
Какие есть уровни изоляции транзакций ?
Спросят с вероятностью 12%
Уровни изоляции транзакций определяют, в какой степени транзакция должна быть изолирована от изменений данных, производимых другими транзакциями. Он влияет на возможность возникновения таких проблем параллелизма, как грязное чтение, неповторяющееся чтение и фантомное чтение. Определены четыре уровня изоляции:
1️⃣ READ UNCOMMITTED (Чтение незафиксированных данных)
На этом уровне транзакции могут читать данные, которые ещё не были зафиксированы (commit) другими транзакциями. Это означает, что возможно "грязное чтение", когда одна транзакция видит промежуточные результаты работы другой незавершённой транзакции, которые могут быть впоследствии откачены (rollback).
2️⃣ READ COMMITTED (Чтение зафиксированных данных)
Транзакция на этом уровне изоляции видит только данные, зафиксированные к моменту начала операции чтения. Это предотвращает грязное чтение, но всё ещё допускает "неповторяющееся чтение", когда во время выполнения транзакции другие транзакции могут изменять данные, и повторный запрос к базе данных вернёт другой результат.
3️⃣ REPEATABLE READ (Повторяемое чтение)
На этом уровне изоляции транзакция видит только данные, зафиксированные до её начала, и предотвращается изменение данных, которые она уже прочитала, другими транзакциями. Это устраняет проблему неповторяющегося чтения. Однако на этом уровне всё ещё возможно "фантомное чтение", когда в результате выполнения других транзакций изменяется набор строк, соответствующих условию запроса.
4️⃣ SERIALIZABLE (Сериализуемость)
Самый строгий уровень изоляции, который полностью изолирует транзакцию от всех других. При таком уровне изоляции СУБД гарантирует, что параллельно выполняемые транзакции будут работать так, как если бы они выполнялись последовательно. Это устраняет все вышеупомянутые проблемы параллелизма, включая фантомное чтение, но может привести к снижению производительности и увеличению количества блокировок.
Выбор уровня изоляции транзакции зависит от требований к консистентности данных и допустимого уровня параллелизма. Более высокий уровень изоляции увеличивает надёжность и консистентность данных, но может снижать производительность и масштабируемость системы из-за увеличения числа блокировок и ожидания.
👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1715 вопроса на Java разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
11 292
👩💻 Интеграционные тесты с контекстом. Тестирование слоя репозиториев и сервисов.
Ждём вас на втором занятии серии открытых практических уроков по тестированию Spring-приложений от OTUS: https://otus.pw/ylg7/
На вебинаре мы:
- обсудим особенности тестирования компонентов Spring-приложения с подъемом тестового контекста;- рассмотрим, как можно протестировать слой репозиториев на базе JDBC и JPA, а также работу с транзакциями на сервисном слое;- ответим на все возникающие вопросы.
Спикер — Senior Software Engineer и опытный преподаватель.
Встречаемся 1 июля в 20:00 мск в преддверии старта курса «Разработчик на Spring Framework». Все участники вебинара получат специальную цену на обучение!
➡️ Регистрируйтесь прямо сейчас, чтобы не пропустить бесплатный урок и получить запись предыдущего вебинара серии.
11 292
В чём различия String Builder и String Buffer ?
Спросят с вероятностью 12%
StringBuilder и StringBuffer предназначены для работы со строками в ситуациях, когда требуется изменять содержимое строки или динамически создавать строку через конкатенацию. Оба класса предоставляют похожий набор методов для манипулирования строками, но ключевое различие между ними заключается в синхронизации и производительности.
StringBuffer
Является потокобезопасным благодаря синхронизации всех своих методов. Это означает, что данный объект можно безопасно использовать в многопоточных средах, где один и тот же объект может быть изменен разными потоками одновременно. Однако потокобезопасность достигается за счет накладных расходов на синхронизацию, что может снижать производительность при использовании в однопоточных приложениях.
StringBuilder
Представляет собой не потокобезопасную альтернативу
StringBuffer. Отсутствие синхронизации делает его более предпочтительным выбором в ситуациях, когда гарантировано, что объект будет использоваться только в одном потоке, поскольку это обеспечивает лучшую производительность по сравнению с StringBuffer.
Сравнение производительности
Из-за отсутствия синхронизации StringBuilder обычно работает быстрее StringBuffer в однопоточных приложениях. В многопоточных средах, где требуется потокобезопасность, использование StringBuffer обеспечивает безопасность за счет некоторого снижения производительности.
Когда использовать что?
✅StringBuilder: когда работа с объектом происходит в рамках одного потока и требуется высокая производительность.
✅StringBuffer: когда объектом необходимо управлять из разных потоков и требуется гарантия потокобезопасности.
Использование StringBuilder
StringBuilder sb = new StringBuilder("Hello");
sb.append(" World");
System.out.println(sb.toString()); // Выводит "Hello World"
Использование StringBuffer
StringBuffer sb = new StringBuffer("Hello");
sb.append(" World");
System.out.println(sb.toString()); // Выводит "Hello World"
Оба примера показывают схожесть в использовании StringBuilder и StringBuffer, но выбор между ними должен основываться на требованиях к потокобезопасности и производительности в вашем конкретном случае.
👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1715 вопроса на Java разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых11 292
Как разработчику увеличить доход минимум в два раза?
Освоить навыки по Kubernetes – самому востребованному направлению в 2024 году.
Что это за зверь такой, с чем его едят и как быстро его понять, рассказывает SRE Lead в MTS Digital и преподаватель курсов Слёрма Кирилл Борисов в своём канале.
Переходите и узнайте, как «кубы» могут пригодиться в работе, какие возможности открывают и прокачайте текущие скиллы.
Для всех новых подписчиков подготовили гайд «Как работает etcd с Kubernetes и без него»
Подписывайтесь, забирайте, изучайте и применяйте. Потом спасибо скажете 👉 @Kubernetes_Borisov
Реклама. ИП Аердинов Никита Вадимович ИНН 638103515932 erid: LjN8K7zVy
11 292
🤔 Какой метод `java.util.List` добавляет элемент по индексу?
11 292
У топовых айтишников есть секрет, они работают не 8 часов, а головой!
Понимают, что без английского в айти делать нечего. Поэтому в начале карьеры изучают технический английский, а потом смело прибавляют +40% к рыночной зарплате.
Знают где в телеграме брать современные идеи и материалы для работы. Например, для web-разработчиков – это Сайтодел.
Становись Senior-разработчиком. Всё просто, два клика:
→ Английский для программистов
→ Сайтодел
🎁 Бесплатно: Поиск разработчика для сайта и первый созвон по обучению английскому. Не упускай такую возможность!
11 292
Что такое транзакция ?
Спросят с вероятностью 12%
Транзакция в контексте баз данных — это последовательность операций с данными, которая представляет собой единую логическую единицу работы. Они используются для обеспечения целостности данных и соблюдения принципов ACID (Atomicity, Consistency, Isolation, Durability), которые являются ключевыми для надёжной работы систем управления базами данных (СУБД).
Основные свойства:
1️⃣ Атомарность (Atomicity): Должна быть выполнена полностью или не выполнена вовсе. Если какая-либо часть транзакции не может быть завершена, все изменения, сделанные в рамках транзакции, откатываются (отменяются), чтобы база данных оставалась в начальном состоянии.
2️⃣ Согласованность (Consistency): Переводит базу данных из одного согласованного состояния в другое согласованное состояние, гарантируя соблюдение всех ограничений целостности данных.
3️⃣ Изоляция (Isolation): Изменения, производимые одной транзакцией, изолированы от других транзакций до тех пор, пока она не будет завершена. Это предотвращает возникновение проблем, связанных с параллельным выполнением транзакций, таких как потерянные обновления, грязное чтение и фантомное чтение.
4️⃣ Долговечность (Durability): После завершения транзакции (коммита) результаты её выполнения сохраняются в базе данных и не могут быть потеряны даже в случае сбоя системы.
Пример:
Рассмотрим простой пример транзакции в банковской системе, где требуется перевести деньги с одного счёта на другой:
1️⃣ Снятие определённой суммы денег со счёта отправителя.
2️⃣ Зачисление этой суммы на счёт получателя.
Эти две операции должны быть выполнены вместе как единая транзакция. Если по какой-то причине зачисление на счёт получателя не может быть выполнено (например, из-за сбоя системы после выполнения первой операции), то снятие денег со счёта отправителя также должно быть отменено, чтобы гарантировать атомарность транзакции и сохранить целостность данных.
Управление транзакциями
В большинстве современных СУБД для управления транзакциями используются следующие операции:
✅ BEGIN TRANSACTION (или аналогичная команда) для начала транзакции.
✅ COMMIT для завершения транзакции и сохранения всех изменений.
✅ ROLLBACK для отмены всех изменений, выполненных в рамках транзакции.
Транзакции играют ключевую роль в обеспечении надёжности и целостности данных в приложениях, работающих с базами данных, позволяя уверенно выполнять сложные операции с данными.
👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1715 вопроса на Java разработчика. Ставь 👍 если нравится контент
🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
11 292
Может ли примитивный тип данных попасть в Hip ?
Спросят с вероятностью 12%
Примитивные типы данных обычно хранятся на стеке (Stack), когда они определены как локальные переменные внутри методов или как часть вызова метода. Однако, примитивные типы могут "попасть" в кучу (Heap), когда они используются как часть объекта или обёрнуты в обёрточные классы (
Integer, Long, Double и т.д.), которые являются объектами и хранятся в куче.
Обёртки примитивных типов
Предоставляет обёрточные классы для каждого примитивного типа, позволяя использовать примитивные значения как объекты. Например, int можно обернуть в Integer, double в Double и так далее. Когда примитивный тип данных обёрнут в такой класс, он может храниться в куче как часть объекта.
Примитивные типы как часть объектов
Когда он используется как поле объекта, само значение примитива будет храниться в куче вместе с остальной частью объекта. Например, если у вас есть класс Person с полем int age, то значение age будет храниться в куче вместе с объектом Person.
Пример:
public class Person {
int age; // Примитивный тип данных внутри объекта, хранящегося в куче
}
public class Main {
public static void main(String[] args) {
Integer number = 5; // Обёрнутый примитивный тип, хранящийся в куче
Person person = new Person(); // Объект, хранящийся в куче, с примитивным полем
person.age = 25; // Примитивное значение age хранится в куче вместе с объектом person
}
}
В этом примере number (обёрнутый int) и person (объект с примитивным полем age) хранятся в куче.
Хотя примитивные типы данных обычно ассоциируются с хранением на стеке, они могут храниться в куче, если являются частью объекта или обёрнуты в соответствующие обёрточные классы. Это позволяет примитивным типам участвовать в динамическом управлении памятью и объектно-ориентированных структурах данных, сохраняя при этом эффективность работы с данными.
👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1715 вопроса на Java разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых11 292
Бесплатный однодневный интенсив по искусственному интеллекту!
За 1 день научим тебя писать нейронные сети. Напишешь 9 нейронок с нуля, без опыта программирования!
На интенсиве ты создашь:
- 3 нейронки из области компьютерного зрения
- 3 нейронки по распознаванию и обработке текста
- 3 нейронки по сегментации, временным рядам и аудио
Регистрируйся прямо сейчас, исследуй футуристичный мир нейросетей с нами!
Реклама. ООО "ТЕРРА ЭЙАЙ". ИНН 9728019395. erid: LjN8KHVYR
11 292
Что такое SpringScope ?
Спросят с вероятностью 12%
"Scope" (область видимости) относится к жизненному циклу и видимости бинов (объектов, управляемых Spring IoC контейнером). Область видимости бина определяет, как и когда создаются и уничтожаются экземпляры бинов, а также как они разделяются между другими объектами и компонентами приложения.
Spring предоставляет несколько встроенных областей видимости:
1️⃣ Singleton (Одиночка)
Это область видимости по умолчанию. Для бина, объявленного с областью видимости Singleton, Spring IoC контейнер создает и хранит ровно один экземпляр бина на каждый контейнер. Этот единственный экземпляр предоставляется всем, кто запрашивает бин с таким именем.
2️⃣ Prototype (Прототип)
Для бина с областью видимости Prototype, Spring IoC контейнер создает новый экземпляр бина каждый раз, когда он запрашивается. Это полезно, когда вам нужны независимые экземпляры объекта для каждого использования.
3️⃣ Request
Эта область видимости используется в веб-приложениях. Для бина, объявленного с областью видимости Request, новый экземпляр создается для каждого HTTP запроса.
4️⃣ Session
Также используется в веб-приложениях. Бин с областью видимости Session создает один экземпляр бина на каждую HTTP сессию.
5️⃣ Application
В этой области видимости бин создается на уровне ServletContext, что означает, что бин существует в единственном экземпляре на весь жизненный цикл веб-приложения, аналогично Singleton, но в области видимости всего приложения, а не Spring IoC контейнера.
6️⃣ WebSocket
Эта область видимости применяется к бинам, которые должны быть привязаны к жизненному циклу WebSocket сессии.
Пример:
@Component
@Scope("prototype")
public class MyPrototypeBean {
// Класс с областью видимости Prototype
}
Понимание и правильное использование областей видимости позволяет тонко управлять жизненным циклом компонентов приложения, оптимизируя использование ресурсов и поддерживая необходимую степень изоляции и независимости между компонентами. Это способствует созданию чистой, модульной и легко тестируемой архитектуры приложения.
👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1715 вопроса на Java разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых