Java Backend | YeaHub – Telegram
Java Backend | YeaHub
904 subscribers
236 photos
28 videos
3 files
411 links
Теория, подготовка к интервью и курсы для Java разработчиков

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

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

Для связи: @ruslan_kuyanets
Download Telegram
#podcast #всё
📚 Подкасты Y_LAB

Здесь вы найдете разнообразный IT-контент: от глубоких технических обсуждений до увлекательных и расслабляющих бесед. Наши эпизоды охватывают широкий спектр тем, связанных с разработкой и новейшими технологиями, чтобы каждый разработчик нашел что-то для себя. Присоединяйтесь к нам, чтобы углубить свои знания, оставаться в тренде и вдохновляться новыми идеями!

Перейти к материалу

👉 База вопросов 👉 Новости
#Собес #factory #builder #pattern
🤔 В чём разница между фабричным методом и билдером?

💬 Кратко:

- Фабричный метод: Создаёт объекты одного типа через подклассы.
- Билдер: Пошагово конструирует сложные объекты (например, с множеством полей).

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

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Optional: как правильно бороться с NPE? 🛡️

Привет, коллеги! 👋

Сегодня разбираем Optional — современный способ борьбы с NullPointerException.

Зачем нужен Optional?

Раньше:
public String getUserName(User user) {
if (user != null) {
return user.getName();
}
return null; // Риск NPE
}


Сейчас:
public Optional<String> getUserName(User user) {
return Optional.ofNullable(user)
.map(User::getName);
}


Создание Optional

// Пустой Optional
Optional<String> empty = Optional.empty();

// Optional с гарантированно не-null значением
Optional<String> nonNull = Optional.of("hello");

// Optional с возможным null
Optional<String> nullable = Optional.ofNullable(getName());


Основные методы

Проверка наличия значения:
Optional<String> opt = Optional.of("hello");

if (opt.isPresent()) { // Проверка
String value = opt.get(); // Получение (опасно!)
}

opt.ifPresent(value -> { // Безопасное выполнение
System.out.println(value);
});


Извлечение значений:
Optional<String> opt = Optional.ofNullable(getName());

// Значение по умолчанию
String result1 = opt.orElse("default");

// Вычисляемое значение по умолчанию
String result2 = opt.orElseGet(() -> generateDefault());

// Исключение, если значения нет
String result3 = opt.orElseThrow(() -> new RuntimeException("Not found"));


Цепочки вызовов с map() и flatMap()

class User {
private Address address;
// getters
}

class Address {
private String street;
// getters
}

// Без Optional (ужас вложенных проверок)
public String getStreet(User user) {
if (user != null) {
Address address = user.getAddress();
if (address != null) {
return address.getStreet();
}
}
return null;
}

// С Optional (элегантно!)
public String getStreet(User user) {
return Optional.ofNullable(user)
.map(User::getAddress)
.map(Address::getStreet)
.orElse("Unknown street");
}


Фильтрация и преобразование

Optional<User> userOpt = findUserById(1);

// Фильтрация
Optional<User> adultUser = userOpt
.filter(user -> user.getAge() >= 18);

// Преобразование
Optional<String> userName = userOpt
.map(User::getName)
.filter(name -> name.length() > 3);


Правила использования

Правильно:
// Как возвращаемое значение
public Optional<User> findUser(int id) {
return Optional.ofNullable(userRepository.findById(id));
}

// Для безопасной обработки цепочек
public void processUser(int id) {
findUser(id)
.map(User::getName)
.ifPresent(System.out::println);
}


Неправильно:
// Не используйте Optional в полях класса
private Optional<String> name; //

// Не передавайте Optional как параметр
public void process(Optional<String> data) { //

// Не используйте get() без проверки
String name = optional.get(); //


Практические примеры

// Валидация данных
public boolean isValidUser(User user) {
return Optional.ofNullable(user)
.map(User::getEmail)
.filter(email -> email.contains("@"))
.isPresent();
}

// Работа с коллекциями
public List<String> getActiveUserNames(List<User> users) {
return users.stream()
.map(user -> Optional.ofNullable(user)
.filter(User::isActive)
.map(User::getName)
.orElse("Unknown"))
.collect(Collectors.toList());
}


Частые вопросы на собеседованиях

1. В чем разница между map() и flatMap()?
2. Когда использовать orElse() vs orElseGet()?
3. Почему нельзя использовать Optional в полях класса?
4. Как обработать цепочку вызовов с Optional?
5. Какие есть альтернативы Optional?

Производительность

- orElse() — вычисляется всегда, даже если значение есть
- orElseGet() — вычисляется только при отсутствии значения
- orElseThrow() — современная замена проверкам с исключениями
👍31🔥1🤔1
#Собес #retry #rabbitmq #index

🤔 Middle Java Backend в компанию ТБанк

Техническое собеседование. Лето 2024. Вилка: 250к+. Опыт в резюме: 4 года. Было много технических вопросов, код ревью.

💬 Вопросы:

- Соберёт ли сборщик мусора два объекта с циклической ссылкой при потере внешних ссылок?

- Какой сборщик по умолчанию в Java 11? (G1)

- Какие сборщики мусора знаете? (G1, Serial)

- Как повысить надёжность интеграции с ненадёжным бухгалтерским сервисом?

- Как избежать передеплоя при изменении захардкоженного списка наград? (конфигурация через application.properties vs. внешний сервис).

👉 Все вопросы из этого собеседования (26)

📣 Хочешь больше собесов?
Подпишись на наш главный канал
1
#Собес #git_push #git_pull
🤔 Что делают команды git push и git pull?

💬 Кратко:

Команда git push отправляет ваши локальные изменения в удаленный репозиторий. Команда git pull скачивает изменения из удаленного репозитория и объединяет их с вашей локальной версией.

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

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
2
#course #ооп #case
📚 Практический анализ ПО с моделированием на UML

Целью курса является обучение слушателей теоретическим основам объектно-ориентированного подхода, практическим методам визуального проектирования и технологии разработки программного обеспечения с использованием компьютеризированных систем разработки (CASE

Перейти к материалу

👉 База вопросов 👉 Новости
🔥1
Многопоточность в Java: synchronized, volatile и Lock 🛡️ (Часть 2)

Привет, коллеги! 👋

Вторая часть про многопоточность. Сегодня разбираем механизмы синхронизации.

synchronized методы

class SafeCounter {
private int count = 0;

public synchronized void increment() {
count++; // Теперь безопасно
}

public synchronized int getCount() {
return count;
}
}


synchronized блоки

class Resource {
private final Object lock = new Object();

public void doWork() {
synchronized(lock) {
// критическая секция
}
}
}


volatile переменные

class TaskProcessor {
private volatile boolean running = true;

public void stop() {
running = false; // Видимость между потоками
}

public void process() {
while (running) {
// работа
}
}
}


ReentrantLock

class LockedCounter {
private final ReentrantLock lock = new ReentrantLock();
private int count = 0;

public void increment() {
lock.lock();
try {
count++;
} finally {
lock.unlock();
}
}
}


Сравнение подходов

synchronized:
- Простота использования
- Автоматическое управление
- Встроено в язык

ReentrantLock:
- Гибкость (tryLock, fair lock)
- Явное управление
- Требует аккуратности

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

Какие механизмы синхронизации используете вы? 👇

#java #interview #multithreading #synchronized
1🔥1
#Собес #java #collections #multithreading

🤔 Middle+ Java Backend разработчик в компанию Госуслуги

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

💬 Вопросы:

- Как логировать время выполнения методов в бинах Spring унифицированно?

- Как централизованно обрабатывать исключения в REST-контроллерах?

- Как работает @Transactional и что происходит, если метод без аннотации вызывает метод с аннотацией?

- Как спроектировать доступ к балансам пользователей из разных потоков, чтобы операции были консистентны?

- Какие механизмы синхронизации можно использовать, кроме synchronized и Atomic?

👉 Все вопросы из этого собеседования (17)

📣 Хочешь больше собесов?
Подпишись на наш главный канал
1
#Собес #code_coverage #testing #quality_assurance
🤔 Что такое code coverage?

💬 Кратко:

Code coverage (покрытие кода тестами) — это показатель, показывающий, какая часть кода протестирована автоматическими тестами. Выражается в процентах: чем выше показатель, тем меньше риск появления багов.

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

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
#book #сбои #отладка
📚 JAVA: устранение проблемv, Спилкэ Лауренциу

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

Перейти к материалу

👉 База вопросов 👉 Новости
🔥2
Forwarded from YeaHub
[Версия 1.3.0] - Обновление платформы

Мы продолжаем развивать YeaHub, чтобы сделать обучение ещё удобнее, эффективнее и интереснее. В этом обновлении — важные и давно ожидаемые улучшения 👇

🔹 Навыки и ключевые слова из вакансий HH
Мы запустили сервис, который помогает прокачать резюме с помощью популярных навыков и ключевых слов, встречающихся в вакансиях. Это поможет вам выше ранжироваться в поиске среди кандидатов и увеличит конверсию откликов.
https://yeahub.ru/hh-analytics?page=1&mode=skills&specialization=11

🔹 Исправления и улучшения
Мы учли вашу обратную связь: исправили баги, улучшили интерфейс и сделали работу с платформой ещё комфортнее 🧠

🔥 Скоро
1. Сервис Лайвкодинга с реальными задачами с собеседований

👉 Обучайтесь, общайтесь, растите вместе с https://yeahub.ru

#release #news #update #yeahub
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥1🤝1
#Собес #treemap #hashmap #sorting
🤔 Чем TreeMap отличается от HashMap? Как управлять порядком элементов в TreeMap?

💬 Кратко:

Основные отличия:

- HashMap - неупорядоченная, TreeMap - сортированная по ключам
- HashMap - O(1) доступ, TreeMap - O(log n)
- TreeMap использует Comparator или естественный порядок

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

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
👍21
Spring Boot: автоконфигурация и REST API (Часть 2)

Привет, коллеги! 👋

Вторая часть про Spring. Сегодня — Spring Boot и создание REST API.

Что такое Spring Boot?

Spring Boot упрощает настройку Spring-приложений:
- Автоконфигурация
- Встроенные серверы (Tomcat, Jetty)
- Starter-зависимости
- Готовые production-фичи

Создание приложения

Структура проекта:
src/main/java/
└── com/example/demo/
├── DemoApplication.java
├── controller/
├── service/
└── repository/


Основной класс:
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}


Создание REST контроллера

@RestController
@RequestMapping("/api/users")
public class UserController {

private final UserService userService;

public UserController(UserService userService) {
this.userService = userService;
}

@GetMapping
public List<User> getAllUsers() {
return userService.findAll();
}

@GetMapping("/{id}")
public User getUserById(@PathVariable Long id) {
return userService.findById(id);
}

@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public User createUser(@RequestBody User user) {
return userService.create(user);
}
}


Spring Boot Starters

<!-- В pom.xml -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>


Конфигурация через application.yml

# application.yml
server:
port: 8081

spring:
datasource:
url: jdbc:postgresql://localhost:5432/mydb
username: user
password: pass

jpa:
hibernate:
ddl-auto: update
show-sql: true


Spring Boot Actuator

# Мониторинг приложения
management:
endpoints:
web:
exposure:
include: health,info,metrics


В третьей части разберем Spring Data JPA, транзакции и тестирование!

Какой ваш любимый Spring Boot starter? 👇

#springboot #restapi #java #spring
2🔥1🤝1
#Собес #java #microservices #monolith

🤔 Middle Java Backend-разработчик в компанию IT-smart.

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

💬 Вопросы:

- Разница между Spring и Spring Boot

- Что такое Bean?

- Что такое распределённый кэш?

- Когда использовать локальный кэш, а когда распределённый?

- Когда нужно использовать кэширование?

👉 Все вопросы из этого собеседования (23)

📣 Хочешь больше собесов?
Подпишись на наш главный канал
#Собес #row_locking #concurrency #transaction
🤔 Что такое SELECT FOR UPDATE и как он помогает в решении проблем параллельного доступа?

💬 Кратко:

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

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

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
#course #openway #computerscience #лекториум
📚 Алексей Владыкин

Алексей Владыкин, в качестве исключения, не имеет канала на Youtube, но ведёт очень содержательные лекции на проекте "Лекториум". Его лекции отлично подойдут программистам, которые желают познакомиться с языком Java, но уже имеют какой-то опыт программирования. Лекции крайне содержательны, но в силу того, что выходили они достаточно давно, Алексей не попал в топ-3.

Перейти к материалу

👉 База вопросов 👉 Новости
#Собес #class #object #interface
🤔 Что такое класс, объект, интерфейс?

💬 Кратко:

- Класс — это шаблон или "чертеж" для создания объектов, определяющий их свойства и поведение.
- Объект — это конкретный экземпляр класса с определенными значениями свойств.
- Интерфейс — это контракт, который определяет набор методов, которые должен реализовать класс.

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

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
❤‍🔥11
#Собес #java #acid #transaction

🤔 Middle Java Backend developer в компанию Сбер

Техническое собеседование. Лето 2025. Вилка: 240к+. Опыт в резюме: 3.9 года. Проект: разработка высоконагруженных систем для Сбербанк Онлайн

💬 Вопросы:

- Какой жизненный цикл Spring Beans?

- Для чего используются BeanPostProcessor и BeanFactoryPostProcessor?

- Как достать бин из ApplicationContext?

- Стандартные способы управления потоками (ExecutorService, Future)

- Зачем нужен volatile? Как он обеспечивает видимость изменений?

👉 Все вопросы из этого собеседования (25)

📣 Хочешь больше собесов?
Подпишись на наш главный канал
#Собес #git_rebase
🤔 Как объединить последние N коммитов в один коммит?

💬 Кратко:

Для объединения последних N коммитов в один используется команда git rebase -i HEAD~N, которая позволяет интерактивно редактировать коммиты. В процессе вы можете выбрать, какие коммиты объединить с помощью команды squash или fixup.

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

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
#course #степик #sql
📚 Тренажер по SQL

Вам дается теория, примеры выполнения запросов, а дальше вы решаете разные задачи по теме (пример структуры на скрине)

Перейти к материалу

👉 База вопросов 👉 Новости