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

Связь: @devmangx

РКН: https://clck.ru/3H4WUg
Download Telegram
Вопросы для собеседования по микросервисам с ответами

1. Каковы ключевые характеристики микросервисов?

Ответ:

> Децентрализованное управление данными
> Сервисы развёртываются независимо друг от друга
> Проектирование на основе предметной области (DDD)
> Лёгкое взаимодействие (например, REST, gRPC)
> Изоляция сбоев
> Удобны для непрерывной доставки

2. Чем микросервисы отличаются от монолитной архитектуры?

Ответ:

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

3. Каковы основные преимущества использования микросервисов?

Ответ:

> Лучшая масштабируемость
> Более быстрое выведение продукта на рынок
> Независимые развёртывания
> Лучшая устойчивость к сбоям
> Возможность использовать разные языки и технологии

4. Какие есть сложности при работе с микросервисами?

Ответ:

> Сложность управления распределёнными системами
> Задержки в сети и накладные расходы на коммуникацию
> Согласованность данных
> Отладка и мониторинг
> Развёртывание и оркестрация

5. Как микросервисы обмениваются данными?

Ответ:

> Синхронно: через REST, gRPC
> Асинхронно: через очереди сообщений (RabbitMQ, Kafka)

6. Что такое service discovery в микросервисах?

Ответ:

> Это механизм, с помощью которого сервисы находят друг друга в сети.
> Применяются инструменты вроде Consul, Eureka, DNS Kubernetes.

7. Что такое API Gateway и зачем он нужен?

Ответ:

> API Gateway — это единая точка входа в систему. Он отвечает за маршрутизацию, безопасность, ограничение частоты запросов и агрегацию ответов от разных сервисов.
> Примеры: Kong, Zuul, NGINX, Spring Cloud Gateway.

8. Как в микросервисах управляют данными?

Ответ:

> Каждый сервис использует свою отдельную базу данных (подход “одна база на сервис”).
> Для согласованности применяются событийная архитектура или паттерн саги.

9. Что такое паттерн Saga?

Ответ:

> Saga — это последовательность локальных транзакций.
> Если одна из них завершается с ошибкой, запускаются компенсирующие действия для отката изменений.

10. Какие инструменты используют для разработки микросервисов?

Ответ:

> Языки: Java (Spring Boot), Node.js, Go, Python
> Сборка: Maven, Gradle
> Контейнеризация: Docker
> Оркестрация: Kubernetes


👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15
Используйте DTO для запросов и ответов

Никогда не передавайте сущности напрямую — всегда преобразовывайте их в DTO и обратно

🤍 база

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍243
Отличное руководство по безопасности Java-приложений

🔜 Читать: клик

👉 Java Portal | #cтатья
Please open Telegram to view this post
VIEW IN TELEGRAM
👍61
JDK 22 представил класс java.text.ListFormat. Используйте его, когда нужно отформатировать список строк в удобочитаемый вид. Например, вот такая программа:

final List<String> days = List.of("Mon", "Wed", "Fri");

void main() {
print(Type.STANDARD);
print(Type.OR);
print(Type.UNIT);
}

private void print(Type type) {
print(type, Style.FULL);
print(type, Style.SHORT);
print(type, Style.NARROW);
}

private void print(Type type, Style style) {
var format = ListFormat.getInstance(Locale.US, type, style);
var result = format.format(days);
System.out.printf("%-8s + %-7s: %s%n", type, style, result);
}


Вывод:

STANDARD + FULL   : Mon, Wed, and Fri
STANDARD + SHORT : Mon, Wed, & Fri
STANDARD + NARROW : Mon, Wed, Fri
OR + FULL : Mon, Wed, or Fri
OR + SHORT : Mon, Wed, or Fri
OR + NARROW : Mon, Wed, or Fri
UNIT + FULL : Mon, Wed, Fri
UNIT + SHORT : Mon, Wed, Fri
UNIT + NARROW : Mon Wed Fri


Также можно использовать ListFormat для разбора отформатированной строки обратно в список

Ставь лайк если полезно 🪑

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍112🔥1
Способы сравнения строк в Java

1. == → Сравнивает адреса в памяти
2. .equals() → Сравнивает содержимое строк
3. .compareTo() → Лексикографическое сравнение
4. .equalsIgnoreCase() Сравнивает без учёта регистра

> Подробнее тут 😊

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥2
В Java можно ставить метку на выражение, которое уже промечено другой меткой. И так хоть до бесконечности.

Полезно? Вряд ли.
Стоит ли использовать? Точно нет.

Но как факт — это работает

Пример:

String question;
to: be: or: not: that: is: the: question = "What?";

out.println(question);


> Код компилируется
> Метки (to:, be:, or: и т.д.) игнорируются, если не используются в break или continue

Вывод:

What?


Иногда Java действительно говорит с нами стихами 🫢

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍83
В чём разница между throw и throws в Java?

throw

> Используется для явного выбрасывания исключения.
> Синтаксис: throw new ExceptionType("сообщение");
> Применяется внутри метода или блока.

throws

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

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
Этот Dockerfile для Spring Boot создаёт образ, который потребляет на 33% меньше памяти по сравнению с образом, собранным с помощью Buildpacks (рекомендуемый Spring способ сборки Docker-образов) 💪

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥118
Упростите свой бизнес-код на Java с помощью Flow DSL

🔜 Читать: клик

👉 Java Portal | #cтатья
Please open Telegram to view this post
VIEW IN TELEGRAM
👍53🔥2
Хочешь чистые REST API на Java?

Используй:

> @RestController

> @RequestBody

> @PathVariable

> @ResponseStatus

Spring REST помогает писать код просто и понятно 🧑‍💻

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥1
Что такое LinkedList (двусвязный список) в Java?

> Состоит из узлов, где каждый узел содержит данные и ссылки на следующий и предыдущий узлы
> Быстрые вставки и удаления — O(1), если есть ссылка на нужный узел
> Медленный доступ по индексу — O(n), т.к. нужно проходить список последовательно

🔧 Когда использовать:

> Частые вставки и удаления — особенно в начале или в середине списка
> Реализация очередей и деков — удобно добавлять в конец и забирать из начала
> Работа с большими объёмами данных, где перераспределение памяти (как в ArrayList) может быть дорогим. LinkedList не требует непрерывной памяти
> Undo/Redo-механизмы — например, в текстовых редакторах, где нужно быстро добавлять и удалять действия из истории

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍123
Метод FileSystems.newFileSystem(Path) появился ещё в JDK 13 (2019), но многие до сих пор о нём не знают

Он позволяет обращаться к содержимому файла, например ZIP-архива, как к файловой системе.

Пример Java-программы:

void main() {
Path src = Path.of("/opt/jdk-24/lib/src.zip");

try (FileSystem fs = FileSystems.newFileSystem(src)) {
for (Path root : fs.getRootDirectories()) {
try (Stream<Path> walk = Files.walk(root, 1)) {
walk.sorted().forEach(IO::println);
}
}
}
}


Результат выполнения:

/
/java.base
/java.compiler
/java.datatransfer
/java.desktop
/java.instrument
/java.logging
...
/jdk.unsupported
/jdk.unsupported.desktop
/jdk.xml.dom
/jdk.zipfs


До появления этого метода нужно было использовать более сложный код с URI и явно указывать схему:

URI src = URI.create("jar:file:///opt/jdk-24/lib/src.zip");

try (FileSystem fs = FileSystems.newFileSystem(src, Map.of())) {
...
}


👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥1
Как создавать многомодульные проекты в Spring Boot

🔜 Читать: клик

👉 Java Portal | #cтатья
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍5
Java с JMH для бенчмарков

Создай класс-бенчмарк, чтобы замерить производительность нужного кода 😈

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍2
Утечки памяти из-за загрузчика классов в Java

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

Такое часто происходит при повторном деплое на серверах вроде Tomcat — и приводит к скрытым, трудноуловимым утечкам памяти 🍔

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🤔5🔥1
Внутренности Java switch

Как компилятор выбирает, какую инструкцию использовать?

Первое, что нужно знать: любой switch в Java компилируется в одну из двух JVM-инструкций:

> tableswitch

> lookupswitch

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

Следующий код сгенерирует tableswitch:

public String tableSwitch() {
return switch (value) {
case 1 -> "one";
case 2 -> "two";
case 4 -> "four";
default -> "other";
};
}


А вот этот код сгенерирует lookupswitch:

public String lookupSwitch() {
return switch (value) {
case 1 -> "one";
case 10 -> "ten";
case 100 -> "one hundred";
default -> "other";
};
}


Видишь разницу?

👍да. вижу
🔥 нужно разбирать

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥77👍122
Держите шикарный разбор, как работает switch в Java на уровне JVM

Что из них выберет компилятор — зависит от распределения case-ов

Автор показал, как это работает на байткоде > дизассемблирует, сравнивает варианты и объясняет, почему структура switch влияет на производительность

Очень наглядно и технически. Удачи 🙈

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥63👍2
Spring WebFlux с Server-Sent Events

Улучшай real-time приложения с помощью Spring WebFlux и Server-Sent Events 🔥

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥62
Java-разработчики, готовы контейнеризировать свои приложения как профи?

Вот универсальный гайд по основным командам Docker — специально для вас

От сборки до деплоя — всё в одном сниппете

❤️

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍3
Совет для IntelliJ — свой значок проекта 👩‍💻

Можно задать кастомную иконку для проекта в IntelliJ — она будет отображаться на экране приветствия

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍63🔥2