Java Portal | Программирование
12K subscribers
939 photos
69 videos
32 files
749 links
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика

Связь: @devmangx

РКН: https://clck.ru/3H4WUg
加入频道
Как инициализируется класс в Java?

Когда JVM загружает класс, его инициализация происходит в строгом порядке:

🍩 сначала инициализируются все static переменные.
🍩 затем выполняются статические блоки static { ... }.
🍩 после этого инициализируются обычные переменные объекта.
🍩 в конце выполняются конструкторы класса.

Этот порядок важен, так как попытка использовать переменную до её инициализации может привести к ошибке.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
14👍5🔥5
Архитектура Struts MVC

Struts — это Java-фреймворк, основанный на MVC, который разделяет приложение на модель, представление и контроллер, обеспечивая лучшую поддерживаемость и масштабируемость.

Всё просто:

Пользователь отправляет запрос → ActionServlet принимает и направляет запрос в соответствующий Action-класс → Action-класс обрабатывает запрос и передает его Model (бизнес-логике, DAO, сервисам) → Model получает данные из БД (через Hibernate, JDBC или EJB) → Model передает обработанные данные обратно в Action-класс → Action-класс передает данные View (JSP, Tiles) → View отображает данные пользователю.

В целом, его поток данных соответствует классической MVC-модели, но с улучшениями

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥31
Бруно Соуса про Java

"Netflix полностью работает на Java. Всё, что мы создаем, построено на Java."
™️

Java не идеальна — да и никакой язык не идеален.

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

Она не яркая, не «крутая» новинка, но работает. А в мире технологий вещи, которые работают, часто остаются на долгие годы.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍294🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
👩‍💻 Совет по IntelliJIDEA

Оставайтесь сосредоточенными на кодинге и оптимизируйте свой рабочий процесс в IntelliJIDEA с помощью Run Anything!

Быстро запускайте конфигурации выполнения/отладки, приложения, скрипты, команды и задачи или даже открывайте недавние проекты – из любого места в IDE

Нажмите ⌃⌃ | Ctrl+Ctrl, чтобы открыть всплывающее окно Run Anything

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
8👍5🔥4
Основной поток Kafka:

1. Продюсер отправляет сообщение

Приложение (продюсер) создаёт сообщение с данными.
Продюсер подключается к брокеру Kafka и выбирает тему.
Kafka определяет, в какой раздел темы отправить сообщение, распределяя нагрузку.
Сообщение записывается в лидирующую реплику раздела.

2. Хранение и репликация

Лидер добавляет сообщение в лог и присваивает ему уникальный офсет.
Сообщение копируется на резервные реплики для отказоустойчивости.

3. Консьюмер получает сообщения

Приложение (консьюмер) подключается к группе потребителей.
Консьюмеры координируют обработку, считывая сообщения из своих разделов.
Они получают сообщения партиями, начиная с последнего зафиксированного офсета.

4. Подтверждение обработки

После обработки консьюмер фиксирует новый офсет.
Kafka отслеживает, какие сообщения успешно потреблены.

5. Цикл продолжается

Продюсеры продолжают отправлять, консьюмеры — читать и обрабатывать.
Kafka обеспечивает надёжную и упорядоченную доставку даже при сбоях.

⚠️ Помните:

Поток сообщений в Kafka асинхронный. Продюсеры не ждут, пока консьюмеры обработают сообщения.

Консьюмеры могут отставать от продюсеров, если обработка идёт медленно.

Kafka предлагает механизмы для обработки сбоев и обеспечения семантики доставки at-least-once или exactly-once.

Topics => Partitions => Log Segments
(Данные фактически хранятся в лог-сегментах).

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥1
💡 Совет: @TransactionalEventListener — это специализированный @EventListener, который слушает событие и ожидает завершения текущей транзакции перед его обработкой. Ожидание консистентного состояния базы данных позволяет гораздо безопаснее реагировать на изменения, внесенные в БД.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍132🔥2
Сравнение Comparator и Comparable в Java 👆

Comparable — для встроенной сортировки. Допустим string, Integer
Comparator — для гибкой сортировки. К примеру, сортировка списка по разным полям

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥42🌭1
Как в Java упаковываются и разворачиваются приложения

JAR – это обычная Java-программа, WAR – веб-приложение, EAR – крупный корпоративный проект, а JMOD – новый формат для модулей Java.

Процесс сборки и деплоя:

Compile – компиляция исходного кода в байт-код (файлы .class).

Package – упаковка файлов в один из архивов (JAR, WAR, EAR, JMOD).

Deploy – развёртывание на сервере или в среде выполнения.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍175🔥2
Модель памяти Java

Модель памяти Java (JMM) определяет, как потоки взаимодействуют через память, обеспечивая согласованность и синхронизацию. Она регулирует работу с volatile переменными, атомарными операциями и отношением happens-before, предотвращая проблемы конкурентного выполнения.

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

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

Если запись идет в основную память (Main Memory), данные становятся видимыми для других потоков, предотвращая проблемы.
Happens-Before Relationship обеспечивает порядок выполнения операций, гарантируя корректную работу программы.

⚠️ Без синхронизации возможны гонки данных и некорректное поведение. Используйте volatile, synchronized или Lock для безопасной работы с потоками.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥1🌭1
Каковы различия между StringBuilder и StringBuffer в Java?

StringBuffer:

Каждый метод синхронизирован.

Объект StringBuffer потокобезопасен, так как к нему может обращаться только один поток за раз.

Относительно низкая производительность.

Введён в версии 1.0.

StringBuilder:

Методы не синхронизированы.

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

Относительно высокая производительность по сравнению с StringBuffer.

Введён в версии 1.5.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥21
This media is not supported in your browser
VIEW IN TELEGRAM
Недавно наткнулся на плагин, который сразу заставил IntelliJ IDEA смотреться как миллион баксов — Atom Material Icons. 💵

Если ты тоже хочешь, чтобы интерфейс был не только удобным, но и приятнее — пользуйся

Навигация по проекту становится в 10 раз быстрее — всё благодаря иконкам

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔16👍84🔥1👀1
Media is too big
VIEW IN TELEGRAM
Опа, а вот и ещё одна годная штука

DZone Java — это такой хаб для джавистов, где собираются статьи, гайды, туториалы, обзоры и инсайды из мира Java. Причём не абы какие, а от разработчиков, архитекторов и просто задр... знатоков своего дела 😎

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

Лайк — если давно знаешь

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍4😁3🔥2
Общие вопросы для собеседования на Java Spring Boot с ответами

1. Каково назначение аннотации @EnableAutoConfiguration?

@EnableAutoConfiguration включает механизм автоконфигурации Spring Boot,
который автоматически настраивает Spring-приложение на основе зависимостей, присутствующих в classpath.

2. Каково назначение аннотации @SpringBootTest?

@SpringBootTest используется для интеграционного тестирования, загружая полный контекст приложения
и позволяя тестировать приложение целиком.

3. Как развернуть Spring Boot-приложение?

Вы можете развернуть Spring Boot-приложение как автономный JAR, WAR или используя платформы оркестрации контейнеров,
такие как Kubernetes и Docker.

4. Каково назначение аннотации @ConfigurationProperties?

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

5. Как вы обрабатываете логирование в Spring Boot?

Spring Boot использует SLF4J как фасад логирования и поддерживает различные фреймворки логирования, такие как Logback, Log4j2 и Java Util Logging. Вы можете настроить логирование в application.properties

6. Каково назначение аннотации @Conditional ?

@Conditional используется для условного включения или отключения бинов на основе определённых условий,
таких как наличие класса или свойства.

7. Как создать RESTful веб-сервис с использованием Spring Boot?

Вы можете создать RESTful веб-сервис, определив класс с аннотацией @RestController, отображая HTTP-запросы на методы обработчиков с использованием аннотаций @RequestMapping или других аннотаций сопоставления запросов.

8. Каково назначение аннотации @Value?

@Value используется для внедрения значений из файлов свойств, переменных среды или других
источников в Spring-бины.

9. Как настроить пользовательский баннер в Spring Boot?

Вы можете настроить пользовательский баннер, разместив файл banner.txt в каталоге src/main/resources,
или установив свойство spring.banner.location

10. Каково назначение аннотации @Profile?

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

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥32
Что такое циклическая зависимость и как её следует решать?

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

Циклическая зависимость может возникать и между более чем двумя бинами, например: 👇

beanA => beanB => beanC => beanD => beanA

Spring создаёт бины в том порядке, в котором они требуются. Если бин имеет зависимость, то сначала создаётся зависимость, а затем она внедряется для завершения создания бина.

В случае циклической зависимости Spring не может определить, какой бин создать первым.

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

Таким образом, можно избежать проблемы циклической зависимости. ☺️

При использовании конструкторной инъекции можно применить аннотацию @Lazy. Это сообщает Spring, что при инициализации бина нужно внедрить прокси. Сам бин будет полностью создан только тогда, когда он действительно понадобится.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥21
Пирамида тестирования Java

1. Unit-тесты (JUnit, Mockito) — проверяют отдельные методы и классы.

Самые быстрые
Легко писать
Ловят баги на старте

Пиши как можно больше

2. Integration-тесты (Testcontainers) — тестируют взаимодействие между модулями (например, сервис <-> база).

Работают с реальными зависимостями
Помогают избежать сюрпризов на проде

3. API-тесты (Postman, RestAssured) — проверяют REST-эндпоинты.

Тесты бизнес-логики
Можно автоматизировать или делать вручную

5. UI-тесты (Selenium) — имитируют действия пользователя.

⚠️ Медленные
⚠️ Ломаются чаще

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

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍103🔥2
Средства мониторинга производительности JVM

1. jconsole — простенький GUI, показывает метрики памяти, CPU, потоки, MBeans. Быстро подключиться и посмотреть.

2. jvisualvm — визуальный профайлер. Анализ CPU, heap, GC, лики, дампы. Идеален для локальной отладки.

3. Java Mission Control + JFR — мощный инструмент с минимальной нагрузкой. Можно писать flight recording даже в проде без ощутимых тормозов.

4. jstack — thread dump, ищем deadlock’и и зависания. Один из самых надёжных способов понять, на чём подвисли потоки

5. jmap — снимает heap dump, показывает гистограмму объектов. Полезно при утечках памяти.

6. jstat — real-time метрики по GC, perm/metaspace, загрузке классов. Можно воткнуть в watch и следить.

7. jcmd — самый универсальный. Делает всё: heap dump, thread dump, управление JFR, GC, diagnostics.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍155🔥2
Графовые алгоритмы — шпаргалка для Java Developer

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

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥21🌭1
5 лучших задач на бинарные деревья для практики:

1. Обход в постфиксе (PostOrder) – https://bit.ly/3SdwWUd
2. Обход в префиксе (PreOrder) – https://bit.ly/3SbR4WL
3. Обход в инфиксе (InOrder) – https://bit.ly/3xUEsMf
4. Вывод всех листьев (Print leaf) – https://bit.ly/3BnrJCE
5. Уровень с максимальной суммой (Max sum level) – https://bit.ly/3qNv8FS

Отличная тренировка для собесов и укрепления понимания структур данных! 🚘

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥3🌚1
Что такое монолитная архитектура?

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

- Единый разворачиваемый модуль (обычно WAR или JAR файл)
- Общая память, база данных и кодовая база
- Проще в разработке и тестировании на ранних этапах
- Со временем может стать сложной и жёстко связанной

Плюсы
- Удобна для небольших команд
- Меньше накладных расходов при разработке и деплое
- Прямая и понятная отладка

Минусы
- Сложнее масштабировать отдельные компоненты
- Длительное время развёртывания (для крупных проектов)
- Трудно управлять при работе больших команд

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥2😁1🤣1🏆1
Особенности и ограничения Java Records

Особенности Java Records:

Снижение шаблонного кода — Нет необходимости вручную писать конструкторы,
геттеры, equals(), hashCode() и toString()

Неизменяемы по умолчанию — все поля являются final

Эффективны по памяти — JVM оптимизирует выделение памяти.

Без дополнительных зависимостей — являются частью Java с версии 14

Инкапсуляция — данные хорошо структурированы и неизменяемы.

Ограничения Java Records:

Нет сеттеров — поля final и не могут быть изменены

Нельзя расширять классы — Records неявно являются final и не могут наследоваться от других классов.

Ограниченная настройка — не поддерживают аннотации вроде @JsonIgnore для полей

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍63🔥2
💡 Подсказка: при использовании проекций на основе интерфейсов (interface-based projections) вы можете получить доступ к вложенным объектам, указав путь (path) в названии геттера. Посмотрите, как метод getDepartmentDeptName() получает deptName из связанной сущности Department

👉 Java Portal | #tips
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥4