Архитектура JVM
У Java Virtual Machine (JVM) есть 3 основных компонента:
⏩ Загрузчик классов (Classloader)
⏩ Область данных (Data Area)
⏩ Исполняющий механизм (Execution Engine)
Процесс загрузки классов включает 3 этапа:
🍩 Загрузка (Loading)
🍩 Связывание (Linking)
🍩 Инициализация (Initialization)
В области данных, создаваемой JVM, есть 5 компонентов:
🟡 Область методов (Method Area)
🟡 Куча (Heap Area)
🟡 Стек (Stack Area)
🟡 Регистр счётчика команд (PC Register)
🟡 Стек нативных методов (Native Method Stack)
👉 Java Portal
У Java Virtual Machine (JVM) есть 3 основных компонента:
Процесс загрузки классов включает 3 этапа:
В области данных, создаваемой JVM, есть 5 компонентов:
Please open Telegram to view this post
VIEW IN TELEGRAM
Паттерн Singleton — это такой паттерн, который заставляет класс иметь только один экземпляр и предоставляет доступ к нему для всего приложения.
Когда его использовать?
⏩ Когда нужно, чтобы по всему приложению был один и тот же объект (например, конфиг или логгер).
⏩ Если создание объекта сильно грузит систему, и лишние экземпляры будут только мешать.
Как работает?
⏩ В классе с этим паттерном создается всего один экземпляр.
⏩ Экземпляр можно получить через специальный метод, который проверяет, существует ли уже объект. Если нет — создает его.
Плюсы:
☑ Экономит память, создавая только один объект.
☑ Легко внедряется, если нужно иметь один объект для всех.
Минусы:
❌ Сложнее тестировать, потому что жесткая зависимость от единственного объекта.
❌ Могут быть проблемы при многозадачности, если не учесть блокировки.
Когда тебе нужен один и тот же объект для всего приложения — это то, что надо
👉 Java Portal
Когда его использовать?
Как работает?
Плюсы:
Минусы:
Когда тебе нужен один и тот же объект для всего приложения — это то, что надо
Please open Telegram to view this post
VIEW IN TELEGRAM
Зачем мы используем дженерики в Java? 🤔
⏩ Типовая безопасность: Предотвращает возникновение ошибки ClassCastException во время выполнения.
⏩ Повторное использование кода: Позволяет писать универсальные алгоритмы, которые работают с различными типами.
⏩ Проверка на этапе компиляции: Обнаруживает ошибки на этапе компиляции, а не во время выполнения.
👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Параллелизм в Java
Параллельность (Concurrency) включает в себя управление несколькими потоками для одновременного выполнения задач, что критически важно для высокопроизводительных приложений
Как это работает?🤔
🍩 Инициализируем потоки.
🍩 Проверяем, готовы ли они.
🍩 Запускаем задачи одновременно.
🍩 Дожидаемся завершения и закрываем потоки
👉 Java Portal
Параллельность (Concurrency) включает в себя управление несколькими потоками для одновременного выполнения задач, что критически важно для высокопроизводительных приложений
Как это работает?
Please open Telegram to view this post
VIEW IN TELEGRAM
Общие вопросы для собеседования на Java Spring Boot с ответами
🍩 Какие типы внедрения зависимостей бывают?
⏩ Field Injection
⏩ Setter Injection
⏩ Constructor Injection
🍩 Разница между
🍩 Чем отличаются
🍩 Что такое Spring Bean?
Spring Bean – это обычный Java-объект, созданный Spring-контейнером.
🍩 Разница между
🍩 Разница между
🍩 Зачем нужен
Используется для конфигурации приложения: настройки БД, логирование и т. д.
Сохрани себе, чтобы не забыть!
👉 Java Portal
BeanFactory
и ApplicationContext
BeanFactory
использует ленивую инициализацию (создает бины при вызове getBean()).ApplicationContext
использует раннюю инициализацию (бины создаются при старте приложения).@Component, @Repository, @Service
и @Controller
?@Component
– общий стереотип для любого Spring-управляемого компонента.@Repository
– используется для DAO-слоя (работа с БД).@Service
– для сервисного слоя.@Controller
– для MVC-контроллеров.Spring Bean – это обычный Java-объект, созданный Spring-контейнером.
Singleton
и Prototype Bean
Singleton
– создается один экземпляр на все приложение.Prototype
– новый экземпляр создается при каждом запросе. @Component
и @Bean
@Component
– аннотация на уровне класса.@Bean
– аннотация на уровне метода, название метода = имя бина.application.properties
?Используется для конфигурации приложения: настройки БД, логирование и т. д.
Сохрани себе, чтобы не забыть!
Please open Telegram to view this post
VIEW IN TELEGRAM
GIT Workflow
Хотите разобраться, как работает Git? Тогда держите наглядный гайд!
🍩
🍩
🍩 Создание нового файла – добавляем что-то новое в проект
🍩
🍩
🍩
👉 Java Portal
Хотите разобраться, как работает Git? Тогда держите наглядный гайд!
Initial State
– начальное состояние проектаgit clone
– клонируем удаленный репозиторийgit add
. – отправляем изменения в staging areagit commit
– фиксируем изменения локальноgit push
– отправляем изменения на удаленный серверPlease open Telegram to view this post
VIEW IN TELEGRAM
Что такое
Это мощная функция, представленная в Java 8 (в пакете
Она предоставляет гибкий способ написания неблокирующего, асинхронного кода с использованием функциональных конструкций.
⏩ задачи выполняются независимо, не блокируя основной поток.
⏩ поддерживает метод chaining через
⏩ объединяет несколько CompletableFuture с помощью .thenCompose(), .thenCombine().
⏩ встроенные механизмы обработки ошибок через .exceptionally() и .handle().
⏩ поддерживает выполнение нескольких задач параллельно с
👉 Java Portal
CompletableFuture
в Java?Это мощная функция, представленная в Java 8 (в пакете
java.util.concurrent
), которая представляет собой будущий результат асинхронного вычисления.Она предоставляет гибкий способ написания неблокирующего, асинхронного кода с использованием функциональных конструкций.
.thenApply(), .thenAccept()
и другие. .allOf()
и .anyOf().
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Большая актуальная базу бесплатных API, которая обновляется ежедневно
Тут собрано аж 363 бесплатных API на все случаи жизни: от игр и погоды до финансов и здоровья.
Алгоритмы присваивают рейтинг каждому API на основе надежности, частоты ошибок и времени отклика
Если API перестает работать или становится платным, он теряет рейтинг и удаляется с сайта
Переходите и смотрите сами: https://www.freepublicapis.com/
👉 Java Portal
Тут собрано аж 363 бесплатных API на все случаи жизни: от игр и погоды до финансов и здоровья.
Алгоритмы присваивают рейтинг каждому API на основе надежности, частоты ошибок и времени отклика
Если API перестает работать или становится платным, он теряет рейтинг и удаляется с сайта
Переходите и смотрите сами: https://www.freepublicapis.com/
Please open Telegram to view this post
VIEW IN TELEGRAM
Есть один отличный фреймворк — Javalin
Если нужно быстро запустить сервер или сделать небольшое приложение — самое то
Он позволяет настроить сервер легко и без лишних зависимостей. Все, что нужно для REST API или WebSocket — уже встроено.
ℹ️ Идеально для пет-проектов, микросервисов и прототипов
👉 Java Portal
Если нужно быстро запустить сервер или сделать небольшое приложение — самое то
Он позволяет настроить сервер легко и без лишних зависимостей. Все, что нужно для REST API или WebSocket — уже встроено.
Please open Telegram to view this post
VIEW IN TELEGRAM
Разница между агрегацией, ассоциацией и композицией в Java
Ассоциация
Общая связь между двумя классами, где объекты одного класса связаны с объектами другого, но нет владения или строгой зависимости.
Пример:
⏩ Студент и Курс.
⏩ Студент может записаться на курс, но оба могут существовать независимо друг от друга.
Агрегация
Частный случай ассоциации, представляющий отношение "имеет-а" с концепцией "целое-часть", но части могут существовать независимо от целого.
Пример:
⏩ Автомобиль и его Колесо.
⏩ Автомобиль имеет колеса, но если автомобиль уничтожен, колеса могут существовать отдельно или быть использованы где-то еще.
Композиция
Более сильная форма агрегации, где "часть" полностью принадлежит "целому" и не может существовать без него.
Пример:
⏩ Дом и его Комната.
⏩ Если дом будет снесен, комнаты перестанут существовать.
👉 Java Portal
Ассоциация
Общая связь между двумя классами, где объекты одного класса связаны с объектами другого, но нет владения или строгой зависимости.
Пример:
Агрегация
Частный случай ассоциации, представляющий отношение "имеет-а" с концепцией "целое-часть", но части могут существовать независимо от целого.
Пример:
Композиция
Более сильная форма агрегации, где "часть" полностью принадлежит "целому" и не может существовать без него.
Пример:
Please open Telegram to view this post
VIEW IN TELEGRAM
Как работает Java? Понимание архитектуры языка
Когда мы пишем код на Java, он проходит несколько ключевых этапов перед тем, как стать работающей программой. Вот как это происходит:
🍩 Написав программу, мы получаем исходный код в файле
🍩 Этот код компилируется с помощью компилятора javac, который преобразует его в байт-код (.class). Это промежуточный формат, который понимает только JVM.
🍩 JVM берет этот байт-код и запускает его, выполняя программу.
Внутри JVM происходит:
- Загрузка классов с помощью
- Управление памятью: разделение на Stack, Heap и Method Area.
- Оптимизация с помощью JIT-компилятора, который превращает байт-код в машинный код для ускорения работы программы.
👉 Java Portal
Когда мы пишем код на Java, он проходит несколько ключевых этапов перед тем, как стать работающей программой. Вот как это происходит:
.java
.Внутри JVM происходит:
- Загрузка классов с помощью
ClassLoader
.- Управление памятью: разделение на Stack, Heap и Method Area.
- Оптимизация с помощью JIT-компилятора, который превращает байт-код в машинный код для ускорения работы программы.
Please open Telegram to view this post
VIEW IN TELEGRAM
1. Проверка версии Docker
2. Работа с образами
3. Запуск Java-приложения в контейнере
4. Сборка и запуск контейнера с Java Spring Boot
5. Управление контейнерами
6. Сетевое взаимодействие в Docker
7. Docker Compose (Java + MySQL)
8. Docker Volumes (персистентные данные)
9. Очистка Docker
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое грациозное завершение работы Spring Boot-приложения?
🟡 Приложение перестаёт принимать новые входящие запросы.
🟡 Запросы, которые уже обрабатываются, получают возможность завершиться. Для других внутренних задач, таких как запланированные задания или обработка сообщений из очереди (MQ), приложение обеспечивает завершение текущих операций и предотвращает запуск новых.
🟡 Перед завершением работы приложение сигнализирует другим сервисам о предстоящем отключении, обеспечивая бесперебойность работы всей системы.
👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Как инициализируется класс в Java?
Когда JVM загружает класс, его инициализация происходит в строгом порядке:
🍩 сначала инициализируются все
🍩 затем выполняются статические блоки
🍩 после этого инициализируются обычные переменные объекта.
🍩 в конце выполняются конструкторы класса.
Этот порядок важен, так как попытка использовать переменную до её инициализации может привести к ошибке.
👉 Java Portal
Когда JVM загружает класс, его инициализация происходит в строгом порядке:
static
переменные. static { ... }
.Этот порядок важен, так как попытка использовать переменную до её инициализации может привести к ошибке.
Please open Telegram to view this post
VIEW IN TELEGRAM
Архитектура Struts MVC
Struts — это Java-фреймворк, основанный на MVC, который разделяет приложение на модель, представление и контроллер, обеспечивая лучшую поддерживаемость и масштабируемость.
Всё просто:
Пользователь отправляет запрос → ActionServlet принимает и направляет запрос в соответствующий Action-класс → Action-класс обрабатывает запрос и передает его Model (бизнес-логике, DAO, сервисам) → Model получает данные из БД (через Hibernate, JDBC или EJB) → Model передает обработанные данные обратно в Action-класс → Action-класс передает данные View (JSP, Tiles) → View отображает данные пользователю.
В целом, его поток данных соответствует классической MVC-модели, но с улучшениями
👉 Java Portal
Struts — это Java-фреймворк, основанный на MVC, который разделяет приложение на модель, представление и контроллер, обеспечивая лучшую поддерживаемость и масштабируемость.
Всё просто:
Пользователь отправляет запрос → ActionServlet принимает и направляет запрос в соответствующий Action-класс → Action-класс обрабатывает запрос и передает его Model (бизнес-логике, DAO, сервисам) → Model получает данные из БД (через Hibernate, JDBC или EJB) → Model передает обработанные данные обратно в Action-класс → Action-класс передает данные View (JSP, Tiles) → View отображает данные пользователю.
В целом, его поток данных соответствует классической MVC-модели, но с улучшениями
Please open Telegram to view this post
VIEW IN TELEGRAM
Бруно Соуса про Java
"Netflix полностью работает на Java. Всё, что мы создаем, построено на Java."™️
Java не идеальна — да и никакой язык не идеален.
Но она существует уже десятилетия и используется в самых разных сферах, от банковских систем до корпоративных приложений, которые действительно поддерживают работу всего мира.
Она не яркая, не «крутая» новинка, но работает. А в мире технологий вещи, которые работают, часто остаются на долгие годы.
👉 Java Portal
"Netflix полностью работает на Java. Всё, что мы создаем, построено на Java."
Java не идеальна — да и никакой язык не идеален.
Но она существует уже десятилетия и используется в самых разных сферах, от банковских систем до корпоративных приложений, которые действительно поддерживают работу всего мира.
Она не яркая, не «крутая» новинка, но работает. А в мире технологий вещи, которые работают, часто остаются на долгие годы.
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Оставайтесь сосредоточенными на кодинге и оптимизируйте свой рабочий процесс в IntelliJIDEA с помощью Run Anything!
Быстро запускайте конфигурации выполнения/отладки, приложения, скрипты, команды и задачи или даже открывайте недавние проекты – из любого места в IDE
Нажмите
⌃⌃
| Ctrl+Ctrl
, чтобы открыть всплывающее окно Run AnythingPlease open Telegram to view this post
VIEW IN TELEGRAM
Основной поток Kafka:
1. Продюсер отправляет сообщение
⏩ Приложение (продюсер) создаёт сообщение с данными.
⏩ Продюсер подключается к брокеру Kafka и выбирает тему.
⏩ Kafka определяет, в какой раздел темы отправить сообщение, распределяя нагрузку.
⏩ Сообщение записывается в лидирующую реплику раздела.
2. Хранение и репликация
⏩ Лидер добавляет сообщение в лог и присваивает ему уникальный офсет.
⏩ Сообщение копируется на резервные реплики для отказоустойчивости.
3. Консьюмер получает сообщения
⏩ Приложение (консьюмер) подключается к группе потребителей.
⏩ Консьюмеры координируют обработку, считывая сообщения из своих разделов.
⏩ Они получают сообщения партиями, начиная с последнего зафиксированного офсета.
4. Подтверждение обработки
⏩ После обработки консьюмер фиксирует новый офсет.
⏩ Kafka отслеживает, какие сообщения успешно потреблены.
5. Цикл продолжается
⏩ Продюсеры продолжают отправлять, консьюмеры — читать и обрабатывать.
⏩ Kafka обеспечивает надёжную и упорядоченную доставку даже при сбоях.
⚠️ Помните:
Поток сообщений в Kafka асинхронный. Продюсеры не ждут, пока консьюмеры обработают сообщения.
Консьюмеры могут отставать от продюсеров, если обработка идёт медленно.
Kafka предлагает механизмы для обработки сбоев и обеспечения семантики доставки at-least-once или exactly-once.
Topics => Partitions => Log Segments
(Данные фактически хранятся в лог-сегментах).
👉 Java Portal
1. Продюсер отправляет сообщение
2. Хранение и репликация
3. Консьюмер получает сообщения
4. Подтверждение обработки
5. Цикл продолжается
Поток сообщений в Kafka асинхронный. Продюсеры не ждут, пока консьюмеры обработают сообщения.
Консьюмеры могут отставать от продюсеров, если обработка идёт медленно.
Kafka предлагает механизмы для обработки сбоев и обеспечения семантики доставки at-least-once или exactly-once.
Topics => Partitions => Log Segments
(Данные фактически хранятся в лог-сегментах).
Please open Telegram to view this post
VIEW IN TELEGRAM
@TransactionalEventListener
— это специализированный @EventListener
, который слушает событие и ожидает завершения текущей транзакции перед его обработкой. Ожидание консистентного состояния базы данных позволяет гораздо безопаснее реагировать на изменения, внесенные в БД.Please open Telegram to view this post
VIEW IN TELEGRAM
Сравнение Comparator и Comparable в Java 👆
Comparable — для встроенной сортировки. Допустим
Comparator — для гибкой сортировки. К примеру, сортировка списка по разным полям
👉 Java Portal
Comparable — для встроенной сортировки. Допустим
string, Integer
Comparator — для гибкой сортировки. К примеру, сортировка списка по разным полям
Please open Telegram to view this post
VIEW IN TELEGRAM
Как в Java упаковываются и разворачиваются приложения
JAR – это обычная Java-программа, WAR – веб-приложение, EAR – крупный корпоративный проект, а JMOD – новый формат для модулей Java.
Процесс сборки и деплоя:
⏩ Compile – компиляция исходного кода в байт-код (файлы .class).
⏩ Package – упаковка файлов в один из архивов (JAR, WAR, EAR, JMOD).
⏩ Deploy – развёртывание на сервере или в среде выполнения.
👉 Java Portal
JAR – это обычная Java-программа, WAR – веб-приложение, EAR – крупный корпоративный проект, а JMOD – новый формат для модулей Java.
Процесс сборки и деплоя:
Please open Telegram to view this post
VIEW IN TELEGRAM