TGViewer
Channel Public Channel
Java Portal | Программирование

Java Portal | Программирование

@java_iibrary

Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика

Связь: @devmangx

РКН: https://clck.ru/3H4WUg
Subscribers
11.6K
Photos
1.6K
Videos
118
Links
1.6K

Showing posts older than #1287 · Back to latest

Older Posts 20 shown
Post #1286 2.87K
Пирамида тестирования Java

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

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

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

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

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

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

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

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

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

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

👉 Java Portal
  • 👍 10
  • ❤ 3
  • 🔥 2
Post #1285 2.77K
Что такое циклическая зависимость и как её следует решать?

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

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

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

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

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

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

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

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

👉 Java Portal
  • 👍 8
  • 🔥 2
  • ❤ 1
Post #1284 2.81K
Общие вопросы для собеседования на 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
  • 👍 14
  • 🔥 3
  • ❤ 2
Post #1283 2.82K
Опа, а вот и ещё одна годная штука

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

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

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

👉 Java Portal
  • ❤ 12
  • 👍 4
  • 😁 3
  • 🔥 2
Post #1282 2.96K
Недавно наткнулся на плагин, который сразу заставил IntelliJ IDEA смотреться как миллион баксов — Atom Material Icons. 💵

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

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

👉 Java Portal
  • 🤔 16
  • 👍 8
  • ❤ 4
  • 🔥 1
  • 👀 1
Post #1281 2.88K
Каковы различия между StringBuilder и StringBuffer в Java?

StringBuffer:

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

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

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

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

StringBuilder:

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

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

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

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

👉 Java Portal
  • 👍 8
  • 🔥 2
  • ❤ 1
Post #1279 2.93K
Модель памяти Java

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

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

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

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

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

👉 Java Portal
  • 👍 12
  • ❤ 1
  • 🔥 1
  • 🌭 1
Post #1278 2.9K
Как в Java упаковываются и разворачиваются приложения

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

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

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

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

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

👉 Java Portal
  • 👍 17
  • ❤ 6
  • 🔥 2
Post #1275 2.94K
Сравнение Comparator и Comparable в Java 👆

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

👉 Java Portal
  • 👍 16
  • 🔥 4
  • ❤ 2
  • 🌭 1
Post #1274 2.77K
💡 Совет: @TransactionalEventListener — это специализированный @EventListener, который слушает событие и ожидает завершения текущей транзакции перед его обработкой. Ожидание консистентного состояния базы данных позволяет гораздо безопаснее реагировать на изменения, внесенные в БД.

👉 Java Portal
  • 👍 15
  • ❤ 2
  • 🔥 2
Post #1272 2.81K
Основной поток Kafka:

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

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

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

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

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

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

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

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

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

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

⚠️ Помните:

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

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

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

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

👉 Java Portal
  • 👍 10
  • 🔥 2
  • ❤ 1
Post #1271 3.02K
👩‍💻 Совет по IntelliJIDEA

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

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

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

👉 Java Portal
  • ❤ 8
  • 👍 5
  • 🔥 4
Post #1270 2.95K
Бруно Соуса про Java

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

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

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

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

👉 Java Portal
  • 👍 29
  • ❤ 4
  • 🔥 2
Post #1269 2.87K
Архитектура Struts MVC

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

Всё просто:

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

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

👉 Java Portal
  • 👍 6
  • 🔥 3
  • ❤ 1
Post #1268 2.96K
Как инициализируется класс в Java?

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

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

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

👉 Java Portal
  • ❤ 14
  • 👍 5
  • 🔥 5
Post #1267 2.69K
Что такое грациозное завершение работы Spring Boot-приложения?

🟡Приложение перестаёт принимать новые входящие запросы.

🟡Запросы, которые уже обрабатываются, получают возможность завершиться. Для других внутренних задач, таких как запланированные задания или обработка сообщений из очереди (MQ), приложение обеспечивает завершение текущих операций и предотвращает запуск новых.

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

👉 Java Portal
  • 👍 11
  • ❤ 3
  • 🔥 3
Post #1266 2.98K
ℹ️ Команды Docker для Java-разработчика

1. Проверка версии Docker
2. Работа с образами
3. Запуск Java-приложения в контейнере
4. Сборка и запуск контейнера с Java Spring Boot
5. Управление контейнерами
6. Сетевое взаимодействие в Docker
7. Docker Compose (Java + MySQL)
8. Docker Volumes (персистентные данные)
9. Очистка Docker

👉 Java Portal
  • 👍 17
  • ❤ 2
  • 🔥 1
  • 💊 1
Post #1265 2.97K
Как работает Java? Понимание архитектуры языка

Когда мы пишем код на Java, он проходит несколько ключевых этапов перед тем, как стать работающей программой. Вот как это происходит:

🍩Написав программу, мы получаем исходный код в файле .java.

🍩Этот код компилируется с помощью компилятора javac, который преобразует его в байт-код (.class). Это промежуточный формат, который понимает только JVM.

🍩JVM берет этот байт-код и запускает его, выполняя программу.

Внутри JVM происходит:

- Загрузка классов с помощью ClassLoader.
- Управление памятью: разделение на Stack, Heap и Method Area.
- Оптимизация с помощью JIT-компилятора, который превращает байт-код в машинный код для ускорения работы программы.

👉 Java Portal
  • 👍 19
  • ❤ 3
  • 🌭 1
  • 💊 1
Post #1264 2.89K
Разница между агрегацией, ассоциацией и композицией в Java

Ассоциация
Общая связь между двумя классами, где объекты одного класса связаны с объектами другого, но нет владения или строгой зависимости.

Пример:
⏩ Студент и Курс.
⏩ Студент может записаться на курс, но оба могут существовать независимо друг от друга.

Агрегация
Частный случай ассоциации, представляющий отношение "имеет-а" с концепцией "целое-часть", но части могут существовать независимо от целого.

Пример:
⏩ Автомобиль и его Колесо.
⏩ Автомобиль имеет колеса, но если автомобиль уничтожен, колеса могут существовать отдельно или быть использованы где-то еще.

Композиция
Более сильная форма агрегации, где "часть" полностью принадлежит "целому" и не может существовать без него.

Пример:
⏩ Дом и его Комната.
⏩ Если дом будет снесен, комнаты перестанут существовать.

👉 Java Portal
  • 👍 21
  • ❤ 2
  • 🔥 1
Post #1263 2.97K
Есть один отличный фреймворк — Javalin

Если нужно быстро запустить сервер или сделать небольшое приложение — самое то

Он позволяет настроить сервер легко и без лишних зависимостей. Все, что нужно для REST API или WebSocket — уже встроено.

ℹ️ Идеально для пет-проектов, микросервисов и прототипов

👉 Java Portal
  • 🔥 11
  • ❤ 3
  • 👍 3
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →