Java Backend | YeaHub
709 subscribers
171 photos
23 videos
2 files
310 links
Теория, подготовка к интервью и курсы для Java разработчиков

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

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

Для связи: @ruslan_kuyanets
Download Telegram
🖥 Middle Java Backend-разработчик в компанию IT-smart.

Техническое собеседование. Осень 2024. Просил 250к+. Опыт в резюме 3 года. Сначала были вопросы по опыту работы, воркфлоу, гитфлоу

Вопросы:
- Какие аннотации используются для создания бинов и компонентов в Spring?
- Когда создаётся Spring Bean и как Spring определяет необходимость его создания?
- Что делают аннотации @Transactional и @Retryable?
- Что такое брокер сообщений?
- Почему не все компании переходят на микросервисы?
- Когда может потребоваться переход от микросервисов к монолиту?
- Как микросервисы взаимодействуют друг с другом?
- Почему некоторые задачи лучше выполнять асинхронно?
- Что лучше: микросервисы или монолит?
- Когда нужно использовать кэширование?
- Когда использовать локальный кэш, а когда распределённый?
- Что такое распределённый кэш?
- Что такое реляционная база данных?
- Что такое первичный ключ?
- Что означает ACID?
- Что такое PostgreSQL?
- Что такое высокая и низкая селективность?
- Когда использование индексов неэффективно?
- Как работают некластеризованные индексы?
- Индексируется ли первичный ключ?
- Что такое микросервисная архитектура?
- Что такое Bean?
- Разница между Spring и Spring Boot

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

#собес
Please open Telegram to view this post
VIEW IN TELEGRAM
3
#полезное
👨‍💻 Метод createNativeQuery из JPA EntityManager

Если тебе нужно выполнить сложную выборку (например, последнюю запись на дату) — не бойся использовать createNativeQuery. Нативный SQL в JPA — это мощный инструмент, особенно когда JPQL ограничен
Читать подробнее

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21
#полезное
📞 Виртуальные потоки с Project Loom

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

С появлением Project Loom вводится концепция виртуальных потоков т.е. лёгких потоков, управляемых самой JVM, которые упрощают работу с конкурентностью и делают её более эффективной.

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

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
3
#Собес #kubernetes
🤔 Что такое Kubernetes Operator?

Operator - это расширение Kubernetes API, которое автоматизирует управление сложными приложениями, такими как базы данных или кэш- системы, путем внедрения специализированной логики.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#статьи
❤️‍🔥 Как вернуть результат в виде Map из запроса JPA или Hibernate
Читать подробнее

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
1
#Собес #kubernetes
🤔 Что такое Custom Resource Definition (CRD) в Kubernetes?

💬 Кратко:
CRD - это способ добавить в Kubernetes новый тип ресурса, например Database ИЛИ Cache , который будет управляться пользовательским контроллером.

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

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

В Java память по умолчанию выделяется в куче с помощью new.
Это просто, управляется сборщиком мусора и подходит для большинства приложений.

Но если нужны высокая производительность или низкие задержки, можно использовать off-heap память через ByteBuffer.allocateDirect().
Такой подход выделяет память вне кучи, снижает нагрузку на GC и повышает эффективность при работе с большими или долго живущими данными.

Off-heap даёт больше контроля и производительности,
но требует аккуратного управления ресурсами,
так как такая память не очищается автоматически, в отличие от памяти в куче.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
3
#Собес #kubernetes
🤔 Каковы лучшие практики безопасности Kubernetes-кластера?

Для обеспечения безопасности в Kubernetes следует:
- Ограничить доступ с помощью RBAC.
- Использовать NetworkPolicy для контроля сетевого трафика.
- Защитить API-сервер и внутренние компоненты от несанкционированного
доступа.
- Настроить безопасное соединение между узлами.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#ЛитКод
Задача: 638. Shopping Offers

В магазине LeetCode Store есть n предметов для продажи. Каждый товар имеет свою цену. Однако существуют специальные предложения, и специальное предложение состоит из одного или нескольких различных видов товаров с распродажной ценой. Вам дан целочисленный массив price, где price[i] - цена i-го товара, и целочисленный массив needs, где needs[i] - количество штук i-го товара, который вы хотите купить. Вам также дан массив special, где special[i] имеет размер n + 1, где special[i][j] - количество штук j-го товара в i-м предложении, а special[i][n] (т.е., Возвращает наименьшую цену, которую вы можете заплатить за определенный товар из заданных, где вы могли бы оптимально использовать специальные предложения. Вам не разрешается покупать больше товаров, чем вы хотите, даже если это снизит общую цену. Вы можете использовать любое из специальных предложений столько раз, сколько захотите.

Пример:
Input: price = [2,5], special = [[3,0,5],[1,2,10]], needs = [3,2]
Output: 14


👨‍💻 Алгоритм:

1⃣Рекурсивное вычисление стоимости: Определите функцию, которая рекурсивно вычисляет минимальную стоимость для оставшихся нужд, используя динамическое программирование для запоминания уже вычисленных значений.

2⃣Использование специальных предложений: Для каждой комбинации товаров в специальных предложениях, определите, можно ли использовать это предложение без превышения нужд. Если можно, вычислите новую стоимость, учитывая это предложение.

3⃣Выбор минимальной стоимости: Сравните стоимость при использовании специальных предложений и стоимость при покупке товаров по индивидуальным ценам, выбирая минимальную стоимость.

😎 Решение:
import java.util.*;

public class Solution {
public int shoppingOffers(List<Integer> price, List<List<Integer>> special, List<Integer> needs) {
return dfs(price, special, needs, new HashMap<>());
}

private int dfs(List<Integer> price, List<List<Integer>> special, List<Integer> needs, Map<List<Integer>, Integer> memo) {
if (memo.containsKey(needs)) return memo.get(needs);

int minPrice = 0;
for (int i = 0; i < needs.size(); i++) {
minPrice += needs.get(i) * price.get(i);
}

for (List<Integer> offer : special) {
List<Integer> newNeeds = new ArrayList<>();
for (int i = 0; i < needs.size(); i++) {
if (offer.get(i) > needs.get(i)) break;
newNeeds.add(needs.get(i) - offer.get(i));
}
if (newNeeds.size() == needs.size()) {
minPrice = Math.min(minPrice, dfs(price, special, newNeeds, memo) + offer.get(offer.size() - 1));
}
}

memo.put(needs, minPrice);
return minPrice;
}
}


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

Техническое собеседование. Лето 2024. Вилка: 250к+. Проект: обещанный платеж. Опыт в резюме: 3 года.

Вопросы:
- Что лучше: микросервисы или монолит?
- Что такое EXPLAIN в PostgreSQL?
- Какие методы использовали для оптимизации SQL-запросов (индексы, уменьшение JOIN, проверка на NULL)?
- Как осуществляется контейнеризация Java-приложений с помощью Docker?

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

#собес
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1
#Собес #kubernetes
🤔 Каковы лучшие практики развертывания приложений в Kubernetes?

💬 Кратко:
Чтобы правильно развернуть приложение в Kubernetes, следует:
- Использовать декларативный подход (Deployment, Helm).
- Разделять сервисы по разным namespace.
- Настраивать liveness и readiness probe для мониторинга состояния Pod-ов.
- Определять resource limits и requests для оптимального распределения
ресурсов.

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

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1🔥1
#полезное
🥄 Google-json (GSON)

Google-json — библиотека прямиком из Google. Она реализует механизмы работы с форматом JSON, а именно приведение Java-объектов в этот формат и обратно.

Как видно на картинке, перевод объекта проходит с помощью минимального количества легко читаемого кода. Особенно эта библиотека пригодится при работе с RESTful приложениями, которые общаются преимущественно с помощью json.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1
#полезное
🛞 Сохраняем себе: Jimmer

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

🔵Авто-генерация DTO
🔵Без N+1 (batch fetch из коробки)
🔵Умные SQL без лишних JOIN'ов
🔵DSL с type-safety
🔵GraphQL + TypeScript-генерация
🔵Кеширование (включая Redis)
🔵Работает через APT/KSP

https://github.com/babyfish-ct/jimmer

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

💬 Кратко:
Deployment - это объект Kubernetes, который управляет созданием, обновлением и масштабированием Pod-ов. Он позволяет автоматизировать развертывание приложений, обеспечивать отказоустойчивость и откатывать неудачные обновления.

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

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Please open Telegram to view this post
VIEW IN TELEGRAM
Объяснение 8 популярных сетевых протоколов в одной диаграмме.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
🤣 Слышал когда-нибудь про объект, который отказывается умирать?

В Java можно «воскресить» объект во время сборки мусора с помощью метода finalize(). Но это — рискованная практика, и сам метод уже помечен как устаревший.

Этот код демонстрирует поведение метода finalize() в Java — он вызывается только один раз перед удалением объекта сборщиком мусора. В КПпервой попытке объект «воскрешается» внутри finalize, но при повторной попытке finalize уже не вызывается, и объект действительно удаляется.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
🤣 Модель памяти в Java

Java управляет памятью в двух основных областях:

- Stack (стековая память) — хранит фреймы вызова методов и локальные переменные. Работает быстро и автоматически очищается при выходе из метода.

- Heap (куча) — используется для хранения объектов, созданных через new. Управляется сборщиком мусора (Garbage Collector), работает медленнее, но даёт больше гибкости.

Объекты всегда размещаются в куче (heap).
Ссылки на эти объекты (например, локальные переменные) хранятся в стеке (stack).
Неправильное управление созданием объектов или удержание ссылок дольше, чем нужно, может привести к утечкам памяти (memory leaks).

public class MemoryDemo {
public static void main(String[] args) {
int x = 10; // Хранится в стеке
Person p = new Person("Alice"); // 'p' находится в стеке, объект — в куче

p.sayHello(); // Вызов метода создаёт новый стек-фрейм
}
}

class Person {
String name; // Поле хранится в куче вместе с объектом

Person(String name) {
this.name = name;
}

void sayHello() {
System.out.println("Hello, " + name);
}
}


👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Middle+ Java Backend разработчик в компанию Госуслуги

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

Вопросы:
- Как логировать время выполнения методов в бинах Spring унифицированно?
- Как централизованно обрабатывать исключения в REST-контроллерах?
- Как работает @Transactional и что происходит, если метод без аннотации вызывает метод с аннотацией?
- Как спроектировать доступ к балансам пользователей из разных потоков, чтобы операции были консистентны?

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

#собес #коллеции
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21👍1
#Собес #kubernetes
🤔 Что такое CNI (Container Networking Interface) в Kubernetes?

💬 Кратко:
CNI - это спецификация, определяющая стандартный интерфейс для подключения сетевых плагинов в Kubernetes. Она позволяет расширять сетевые возможности кластера, добавляя такие решения, как Calico, Flannel и Cilium.

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

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1🔥1
#статьи
❤️‍🔥 Вредные советы Java

Автор показывает соблазн простого распараллеливания задач на Java через Stream API и .parallel() вместо явных ExecutorService, Future, invokeAll и ручной обработки InterruptedException

Однако такой подход использует common ForkJoinPool, и его поведение не всегда предсказуемо, результаты могут отличаться между запусками, особенно при исключениях в задачах
(callsCounter может сильно варьироваться)

Если в процессе одна из задач выбрасывает Exception, выполнение остальных может продолжаться
даже после возврата ошибки.

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

Блокирующие операции внутри задач могут полностью "забить" common ForkJoinPool, что повлияет и на выполнение CompletableFuture.thenApplyAsync(), если вы не указали свой Executor
Читать подробнее<...>

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