Java Backend | YeaHub – Telegram
Java Backend | YeaHub
908 subscribers
237 photos
28 videos
3 files
413 links
Теория, подготовка к интервью и курсы для Java разработчиков

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

Платформа: https://yeahub.ru

Для связи: @ruslan_kuyanets
Download Telegram
#полезное
😎 Что такое Domain-Driven Design

Domain-Driven Design, или DDD, это подход к разработке ПО, который помогает переводить сложные предметные области в выразительное, живое и эволюционирующее программное обеспечение. Он нужен, когда требования пользователей сложные.

Подход сформулировал Эрик Эванс, автор «Синей книги». Техническая ценность DDD в том, что он помогает писать выразительный, насыщенный и инкапсулированный код, который легко тестировать, масштабировать и сопровождать.

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

Сущности это доменные объекты, для которых важна идентичность. Примеры: User, Job, Vinyl, Post, Comment. Сравнение сущностей идет по уникальному идентификатору, обычно это UUID или первичный ключ.

Объекты-значения не имеют идентичности. Это атрибуты сущностей. Например, Name как объект-значение у User.

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

Модель предметной области в DDD опирается на смыслы терминов domain и model. Домен это детали задачи, которую вы решаете. Это знание о бизнесе, операциях, терминологии, правилах, целях и ограничениях. Понимание этого определяет саму проблему и рамки решения.

Доменные сервисы это место для доменной логики, которая не принадлежит ни одному конкретному объекту.

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

Репозиторий используется для получения доменных объектов из слоя хранения. С опорой на принцип подстановки Лисков и многослойную архитектуру можно спроектировать доступ так, чтобы, например, переключаться на in-memory репозиторий для тестов.

Фабрика нужна, потому что доменные объекты создаются разными способами. Объекты домена можно собирать фабрикой из сырых строк SQL, сырого JSON или из Active Record, который вернул ваш ORM инструмент вроде Sequelize или TypeORM.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес #git
🤔 Как отменить коммит, который уже был отправлен и обнародован?

💬 Кратко:
Для отмены коммита, который был отправлен на сервер, можно использовать команду git revert , которая создаст новый коммит, отменяющий изменения. Важно, что это безопасный метод, так как сохраняется история изменений.

📌 Полный разбор + примеры использования — на платформе:
👉
Перейти к разбору

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Please open Telegram to view this post
VIEW IN TELEGRAM
1
10 принципов проектирования микросервисов, которые стоит изучить Java-разработчикам

🔵 CQRS
🔵 SAGA
🔵 База данных на каждый сервис
🔵 Circuit-breaker
🔵 API Gateway
🔵 Event Sourcing
🔵 Strangler
🔵Внешняя конфигурация

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
2
#полезное
😊 Что такое ETL

ETL расшифровывается как Extract, Transform, Load и означает процесс интеграции данных. Сначала данные извлекаются из разных источников, например из баз данных, файлов или API. Затем они преобразуются в удобный для аналитики или отчетности формат.

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

После этого данные загружаются в целевую систему. Чаще всего это хранилище или витрина данных, где они используются для отчетности, BI и аналитики.

ETL применяют в разных задачах. Он лежит в основе построения хранилищ, помогает при миграции данных между системами, используется для интеграции данных из разных источников, обеспечивает корректность данных для BI и отчетов, а также загружает структурированные и неструктурированные данные в data lake.

Среди распространенных ETL-инструментов можно назвать Microsoft SSIS, Azure Data Factory, Talend, Oracle Data Integrator, Apache NiFi и AWS Glue.

Сегодня также популярен подход ELT, при котором данные сначала извлекаются и загружаются в хранилище или big data-платформу, а все трансформации выполняются уже внутри целевой системы.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1
#полезное
😊 Vert.x — это набор инструментов для создания реактивных приложений на JVM

Ядро Vert.x содержит достаточно низкоуровневую функциональность, включая поддержку HTTP, TCP, доступ к файловой системе и различные другие возможности. Можно использовать Vert.x непосредственно в своих приложениях.

GitHub
Доки

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
#Собес #git
🤔 Что такое git reflog?

💬 Кратко:
git reflog показывает историю всех перемещений HEAD, включая коммиты, слияния и переключения веток. Эта команда полезна для восстановления потерянных коммитов или веток.

📌 Полный разбор + примеры использования — на платформе:
👉
Перейти к разбору

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
👋 А что если Java-приложение могло бы запускаться за миллисекунды и потреблять совсем немного памяти, как программы на Go или C++

GraalVM решает эту задачу. Он компилирует Java и Spring Boot напрямую в нативный исполняемый файл. Это происходит заранее на этапе сборки в отличие от стандартной JVM, которая компилирует код во время выполнения. В результате получается бинарь, который запускается без JVM

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

Есть и минусы, время сборки увеличивается, а итоговый бинарь зависит от платформы. Для Linux и Windows нужны отдельные файлы в отличие от переносимого JAR

По производительности GraalVM нативные образы близки к C++. Старт сопоставим по скорости. При тяжелых вычислительных задачах преимущество может быть у C++ благодаря управлению памятью на низком уровне. Но для большинства сценариев GraalVM выводит Java в ту же лигу, что и C++, сохраняя при этом безопасность и удобство разработки

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
#новости
🤯 Java25 уже на подходе!

В свежем релизе — важные улучшения, о которых стоит знать каждому Java-разработчику:

🟠JEP 502: Stable Values — новый способ работы со значениями, который делает код надёжнее и эффективнее.
🟠JEP 514/515: Project Leyden — фокус на время запуска приложений и оптимизацию старта JVM.
Подробный разбор

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
#полезное
😱 MethodHandles.
lookup().findVirtual()


MethodHandles.lookup().findVirtual() позволяет динамически получать и вызывать методы классов без рефлексии, обеспечивая лучшую производительность и безопасность. Это полезно для метапрограммирования и динамических вызовов.
Документация

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Middle Java Backend Developer в компанию Тбанк

Техническое собеседование. Осень 2024. Вилка: 300-350к. Опыт в резюме: 5 лет. Было код-ревью, обсуждали теорию и оптимизацию БД.

Вопросы:
- Решение проблемы N+1 для связанных сущностей
- Использование DTO вместо сущностей
- Почему внедрение зависимостей через конструктор (@RequiredArgsConstructor) предпочтительнее, чем @Autowired в поле? Какие проблемы решает?
- Как избежать перегрузки внешнего сервиса при синхронных вызовах из
высоконагруженной системы?

Все вопросы можно посмотреть на нашей платформе

#собес #коллекции
Please open Telegram to view this post
VIEW IN TELEGRAM
2
#статьи
😘 Java движется вперёд и готовится к выпуску версии 25

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

Все ключевые изменения и полезные фишки версии 25 — в этой статье

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
2
#статьи
😜 Пять эффективных схем кэширования, которые ускорят ваш микросервис

В современных микросервисных архитектурах кэширование играет ключевую роль в обеспечении высокой скорости работы, масштабируемости и устойчивости систем. Грамотное использование схем кэширования позволяет существенно снизить нагрузку на базы данных, сократить время отклика и повысить общую производительность системы.
Читать habr

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес #git
🤔 Что делает команда git stash?

💬 Кратко:
Команда git stash сохраняет текущие незавершённые изменения в специальное место (стек), чтобы вы могли переключиться на другую ветку или выполнить другие действия. Эти изменения можно позже восстановить с ПОМОЩЬЮ git stash apply или git stash pop .

📌 Полный разбор + примеры использования — на платформе:
👉
Перейти к разбору

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😬 Stateful vs Stateless дизайн

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

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

Stateless-подход стал основой для микросервисов, serverless и REST API. Он ускоряет работу CDN и повышает эффективность сервисов. Но у него есть минусы - - большие размеры запросов, избыточная передача данных и сложности в сценариях, где состояние критично.

На практике чаще выбирают гибрид — сочетание stateful и stateless. Баланс позволяет сделать систему масштабируемой, простой и быстрой, не жертвуя функциональностью

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес #git
🤔 Перечислите команды для удаления ветки git

💬 Кратко:
Для удаления локальной ветки:
git branch -d ‹ branch_name>

Если ветка содержит незавершённые изменения:
git branch -D ‹ branch_name>

Для удаления удалённой ветки:
git push origin --delete ‹branch_name>


📌 Полный разбор + примеры использования — на платформе:
👉
Перейти к разбору

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Please open Telegram to view this post
VIEW IN TELEGRAM
1
This media is not supported in your browser
VIEW IN TELEGRAM
GPU обрабатывают тысячи пикселей параллельно, но что происходит, когда мы записываем всего один пиксель в буфер кадра? Как это реализуется?

Посмотри, как CPU "рисует" каждый пиксель в этом наглядном визуальном симуляторе RISC-V (загрузи пример с bitmap):

https://eseo-tech.github.io/emulsiV/

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
1
Да можно уже заранее на Java 29

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😵‍💫 VarHandle.
compareAndExchange()


VarHandle.compareAndExchange() позволяет атомарно обновлять значения переменной, только если текущее значение соответствует ожидаемому. Это полезно для реализации lock-free структур данных и многопоточной синхронизации.
Документация

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
1😇1
🖥 Middle Java Backend developer в компанию Сбер

Техническое собеседование. Лето 2025. Вилка: 240к+. Опыт в резюме: 3.9 года. Проект: разработка высоконагруженных систем для Сбербанк Онлайн

Вопросы:
- Какой жизненный цикл Spring Beans?
- Для чего используются BeanPostProcessor и BeanFactoryPostProcessor?
- Как достать бин из ApplicationContext?
- Стандартные способы управления потоками (ExecutorService, Future)

Все вопросы можно посмотреть на нашей платформе

#собес #коллекции
Please open Telegram to view this post
VIEW IN TELEGRAM
1
#Собес #java
🤔 Какие типы данных в Java? Чем отличается объект от простых типов данных?

💬 Кратко:
В Java есть 8 примитивных типов данных (byte, short, int, long, float, double, char, boolean ), которые хранят значения в стеке. Объекты же создаются на основе классов, хранятся в куче и обладают методами. Примитивные типы проще, быстрее и используют меньше памяти, в то время как объекты более функциональны, но требуют больше ресурсов.

📌 Полный разбор + примеры использования — на платформе:
👉
Перейти к разбору

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Please open Telegram to view this post
VIEW IN TELEGRAM
1
#полезное
😊 Бесплатный кроссплатформенный обозреватель кода. Это опенсорс-инструмент, который работает автономно без интернета. Поддерживает C, C++, Java и Python. Может быть полезен для изучения чужого кода или анализа своих проектов.

GitHub: Sourcetrail

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM