Forwarded from Java Guru 🤓
Где потенциальная проблема в коде?
Anonymous Quiz
27%
@Autowired на UserService
13%
@PathVariable Long id нужно заменить на @RequestParam
43%
Если userService.getUserById(id) вернет null -> NPE
3%
Лучше @Controller вместо @RestController
14%
ResponseEntity.ok(user) не нужен, нужно просто вернуть User
👍4❤3🔥2⚡1
🔥 От разработчика до архитектора высоконагруженных систем! 🚀
Высоконагруженные системы — необходимость для крупных проектов. Пройдите тест, проверьте свои знания и получите скидку на курс «Highload Architect» от OTUS.
Вы научитесь:
✅ Проектировать масштабируемые системы, способные обрабатывать миллионы запросов
✅ Оптимизировать производительность и работать с отказоустойчивыми архитектурами
✅ Использовать современные инструменты и технологии для создания высоконагруженных решений
✅ Применять лучшие практики в проектировании и разработке серверных приложений
📌 Пройдите тест и получите скидку на курс! Подробности уточняйте у менеджера
👉 Пройти тест https://vk.cc/cPyxDo
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Высоконагруженные системы — необходимость для крупных проектов. Пройдите тест, проверьте свои знания и получите скидку на курс «Highload Architect» от OTUS.
Вы научитесь:
✅ Проектировать масштабируемые системы, способные обрабатывать миллионы запросов
✅ Оптимизировать производительность и работать с отказоустойчивыми архитектурами
✅ Использовать современные инструменты и технологии для создания высоконагруженных решений
✅ Применять лучшие практики в проектировании и разработке серверных приложений
📌 Пройдите тест и получите скидку на курс! Подробности уточняйте у менеджера
👉 Пройти тест https://vk.cc/cPyxDo
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
❤4👍2🔥2
Задачи с собеседований: Поиск первого уникального символа в строке (jun+)
— Как найти первый уникальный символ в строке?
🔘 Ключевые моменты:
- Используйте доп. структуру данных для хранения количества вхождений каждого символа
- Предложите в комментарии другие варианты решения.
Реализация через Map на картинке👆
✅ Java библиотека #java
— Как найти первый уникальный символ в строке?
- Используйте доп. структуру данных для хранения количества вхождений каждого символа
- Предложите в комментарии другие варианты решения.
Реализация через Map на картинке
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥5❤4
17 сентября(уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика.
Как это будет:
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_sh_bot
Реклама.
О рекламодателе.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤3🔥2
Вышла Java 25
Вышла общедоступная версия Java 25. В этот релиз попало около 2600 закрытых задач и 18 JEP'ов.
Java 25 является LTS-релизом, а значит у него будут выходить обновления как минимум 5 лет с момента выхода (до сентября 2030 года).
Читать статью
Вышла общедоступная версия Java 25. В этот релиз попало около 2600 закрытых задач и 18 JEP'ов.
Java 25 является LTS-релизом, а значит у него будут выходить обновления как минимум 5 лет с момента выхода (до сентября 2030 года).
Читать статью
VK
Вышла Java 25
Вышла общедоступная версия Java 25. В этот релиз попало около 2600 закрытых задач и 18 JEP'ов. Release Notes можно посмотреть здесь. Полн..
🔥30🎉7🍾6❤2
Java библиотека pinned «Вышла Java 25 Вышла общедоступная версия Java 25. В этот релиз попало около 2600 закрытых задач и 18 JEP'ов. Java 25 является LTS-релизом, а значит у него будут выходить обновления как минимум 5 лет с момента выхода (до сентября 2030 года). Читать статью»
@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍4❤3
📌Приглашаем вас на два бесплатных вебинара курса «Elastic/OpenSearch Advanced»
💎Вебинар №1: «Мощный функционал OpenSearch, доступный бесплатно»
⏰ 18 сентября в 20:00 мск
🔹На вебинаре:
- Обсудим функции, которые в Elastic доступны только в платной подписке, а в OpenSearch — бесплатно - Разберём практические сценарии использования и ограничения каждой функции - Покажем примеры настройки и интеграции в реальных задачах
💎Вебинар №2: «Что нового появилось в ElasticSearch за 4 года после появления OpenSearch»
⏰ 24 сентября в 20:00 мск
🔹На вебинаре:
- Обзор ключевых нововведений в ElasticSearch за последние 4 года - Разбор назначений, архитектуры и практических сценариев использования каждой функции - Сравнение с аналогичными возможностями в OpenSearch и обсуждение ограничений
Регистрация на вебинары ➡️ https://vk.cc/cPAy9h
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
💎Вебинар №1: «Мощный функционал OpenSearch, доступный бесплатно»
⏰ 18 сентября в 20:00 мск
🔹На вебинаре:
- Обсудим функции, которые в Elastic доступны только в платной подписке, а в OpenSearch — бесплатно - Разберём практические сценарии использования и ограничения каждой функции - Покажем примеры настройки и интеграции в реальных задачах
💎Вебинар №2: «Что нового появилось в ElasticSearch за 4 года после появления OpenSearch»
⏰ 24 сентября в 20:00 мск
🔹На вебинаре:
- Обзор ключевых нововведений в ElasticSearch за последние 4 года - Разбор назначений, архитектуры и практических сценариев использования каждой функции - Сравнение с аналогичными возможностями в OpenSearch и обсуждение ограничений
Регистрация на вебинары ➡️ https://vk.cc/cPAy9h
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
❤3👍3🔥2
С помощью
sealed можно чётко ограничить набор допустимых типов, а record делает код компактным и иммутабельным. Пример 👇
sealed interface Payment permits CardPayment, CashPayment, CryptoPayment {}
record CardPayment(String cardNumber, double amount) implements Payment {}
record CashPayment(double amount) implements Payment {}
record CryptoPayment(String wallet, double amount) implements Payment {}
Теперь можно использовать switch с исчерпывающей проверкой:
static String process(Payment p) {
return switch (p) {
case CardPayment c -> "Оплата картой: " + c.amount();
case CashPayment c -> "Оплата наличными: " + c.amount();
case CryptoPayment c -> "Крипта из кошелька: " + c.wallet();
};
}
✅ Преимущества:
- меньше if/instanceof;
- компилятор гарантирует, что рассмотрены все варианты;
- код становится выразительным и легко расширяемым.
🔥 Такой подход отлично подходит для бизнес-логики: платежи, статусы заказов, события системы.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16❤13🔥4☃2
В JUnit 5 появилась интересная аннотация @ClassTemplate. Она полезна, когда один и тот же набор тестов нужно выполнить в разных контекстах. Например: проверить класс с разными локалями, флагами или окружениями.
Обычно в таких случаях мы либо дублируем тестовые классы, либо городим параметризованные тесты. Но @ClassTemplate позволяет описать тест один раз, а запускать его несколько раз — каждый раз в новом окружении.
— Помечаем тестовый класс @ClassTemplate.
— Регистрируем ClassTemplateInvocationContextProvider, который возвращает список «контекстов» (например, en/it).
— JUnit прогоняет один и тот же класс для каждого контекста.
— Есть Greeter, который должен возвращать приветствие по-английски и по-русски.
— Мы пишем один тест → JUnit запускает его дважды: для en и для ru.
— В отчёте два результата, код теста при этом один.
— Работает начиная с JUnit 5.13.
— Для читаемых логов удобнее запускать через JUnit Console Launcher.
— Отличается от @TestTemplate тем, что переиспользует весь класс, а не отдельные методы.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17❤7🔥3
🏗 Курс “Software Architect” от OTUS — набор заканчивается. Успейте пройти вступительный тест и занять место в группе!
Почему стоит присоединиться прямо сейчас:
• 100% практики на реальных проектах
• Проектирование гибких архитектур
• Микросервисы, интеграции, Big Data
• Современные паттерны: CQRS, Event Sourcing и др.
💡 Кому подойдёт:
• Разработчикам, готовым выйти на новый уровень
• Архитекторам, углубляющим экспертизу
• Тимлидам и менеджерам
✅ После курса вы сможете:
• Проектировать масштабируемые архитектуры
• Оптимизировать взаимодействие сервисов
• Повышать качество и устойчивость систем
Места в группе ограничены — пройдите вступительное тестирование сегодня, чтобы успеть!
https://vk.cc/cPCgpi
Почему стоит присоединиться прямо сейчас:
• 100% практики на реальных проектах
• Проектирование гибких архитектур
• Микросервисы, интеграции, Big Data
• Современные паттерны: CQRS, Event Sourcing и др.
💡 Кому подойдёт:
• Разработчикам, готовым выйти на новый уровень
• Архитекторам, углубляющим экспертизу
• Тимлидам и менеджерам
✅ После курса вы сможете:
• Проектировать масштабируемые архитектуры
• Оптимизировать взаимодействие сервисов
• Повышать качество и устойчивость систем
Места в группе ограничены — пройдите вступительное тестирование сегодня, чтобы успеть!
https://vk.cc/cPCgpi
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576❤4👍2🔥2
Forwarded from Java Guru 🤓
Что будет результатом кода?
Anonymous Quiz
14%
Статус заказа изменится на PROCESSING
6%
Произойдет LazyInitializationException
63%
Транзакция откатится полностью, и статус заказа не изменится
11%
Метод завершится с ошибкой, но заказ останется в статусе COMPLETED
6%
Ошибка компиляции
👍11🔥3❤🔥1
— Statement используется для
— PreparedStatement
Поэтому в реальных проектах почти всегда используют
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥14👍6❤5🎄1
⚡️Тест по мониторингу архитектуры
Ответьте на 15 вопросов и проверьте, насколько вы готовы к обучению на курсе — "Observability: мониторинг, логирование, трейсинг" от Отус.
Научитесь строить эффективные системы мониторинга и логирования. Курс идеально подойдет администраторам Linux, DevOps-инженерам и разработчикам, которые хотят повысить квалификацию и увеличить доход.
➡️ ПРОЙТИ ТЕСТ: https://vk.cc/cPFPO8
🤝 Бонусом за успешно пройденный тест, получишь доступ к записям лучших вебинаров курса.
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Ответьте на 15 вопросов и проверьте, насколько вы готовы к обучению на курсе — "Observability: мониторинг, логирование, трейсинг" от Отус.
Научитесь строить эффективные системы мониторинга и логирования. Курс идеально подойдет администраторам Linux, DevOps-инженерам и разработчикам, которые хотят повысить квалификацию и увеличить доход.
➡️ ПРОЙТИ ТЕСТ: https://vk.cc/cPFPO8
🤝 Бонусом за успешно пройденный тест, получишь доступ к записям лучших вебинаров курса.
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
👍4❤3🔥2
Чёткая схема API помогает наладить диалог между провайдером и клиентом, а единый формат ошибок — избавить потребителей от хаоса в коде и лишних поводов для «боли».
{
"timestamp": "2021-15-08T14:32:17.947+0000",
"status": 500,
"error": "Internal Server Error",
"path": "/test"
}
Такая форма ответа не всегда содержит тип ошибки для обработки на клиенте, а также предоставляет мало контекста для формирования пользовательских сообщений.
{
"error": {
"type": "USER_NOT_FOUND",
"message": "User with ID 12345 not found.",
"status": 500,
"path": "/integration/apps",
"timestamp": "2021-15-08T14:32:17.947+0000",
"data": {
"userId": "12345"
}
}
}
public final class AppException extends RuntimeException {
private final ErrorType type;
private Map<String, Object> data;
// конструктор и геттеры...
}
public enum ErrorType {
USER_NOT_FOUND(404), AUTHENTICATION_FAILED(401), …;
private final int status;
// геттеры...
}
Используем @ControllerAdvice с @ExceptionHandler(AppException.class) для перехвата ошибок и возвращения QErrorResponse, содержащего нужную структуру
Создаём свой ErrorController, заменяющий BasicErrorController, и возвращаем данные в таком же формате QErrorResponse:
@RestController
@RequestMapping("${server.error.path:${error.path:/error}}")
public class RestErrorController extends AbstractErrorController {
// логика формирования QErrorResponse…
}
Это гарантирует, что любые ошибки возвращаются в одинаковом формате .
— Унификация ответа облегчает обработку ошибок на клиенте.
— Контекст в data позволяет выдавать более понятные сообщения пользователю.
— Расширяемость дает возможность добавлять новые типы ошибок при сохранении консистентности.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13🔥13👍8
❓Java Guru - вопросы и задачи с собеседований. Канал с помощью которого ты точно получишь оффер!
👩💻 Android Developer - канал для андроид разработчиков! Статьи, вопросы и задачи с собеседований, лайфхаки.
👩💻 Kotlin Developer - самый топовый канал для котлин разработчика!
📕 Книги для Java программиста - канал с книгами по Java. Постоянно выходят новинки как на русском так и на английском языке!
📰 Java News - канал с последними новостями из мира Java!
📕 Книги для Java программиста - канал с книгами по Java. Постоянно выходят новинки как на русском так и на английском языке!
📰 Java News - канал с последними новостями из мира Java!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍2🔥2
Media is too big
VIEW IN TELEGRAM
TCP Log-appender на java (NIO)
В предыдущем видео TCP Log-сервер на java (NIO) был разработан TCP Log-сервер.
Сейчас для него сделаем appender для отправки логов.
🌐 🗣 СМОТРЕТЬ VKVIDEO
📺 🗣 СМОТРЕТЬ RUTUBE
✅ Java библиотека #java
В предыдущем видео TCP Log-сервер на java (NIO) был разработан TCP Log-сервер.
Сейчас для него сделаем appender для отправки логов.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🔥3👍2
Задача с собеса: Потокобезопасный LRU-кэш с TTL (middle)
Интересная задачка с реального собеседования:
🔘 Условия
1. put(k, v) кладёт значение с TTL (единый для экземпляра).
2. get(k) возвращает значение или null, если пары нет или истёк TTL.
3. При переполнении удаляется «наименее недавно использованный» элемент.
4. Решение должно быть неблокирующим по чтению или, как минимум, с короткими критическими секциями.
5. Допустимо ленивое удаление устаревших записей (на чтении/записи).
💡 Ключевые моменты:
— Выбор структуры: LinkedHashMap с accessOrder=true даёт LRU «из коробки».
— TTL: храните expireAt на элемент; чистите лениво и/или периодически.
— Потоки: короткие секции под ReentrantReadWriteLock (или один ReentrantLock) вокруг критичных операций.
— Амортизация O(1): не делайте полных проходов по карте на каждом вызове.
❓ Возможная реализация в комментариях. Пишите также ваши реализация и способы оптимизации.
✅ Java библиотека #java
Интересная задачка с реального собеседования:
Компания хочет снизить нагрузку на БД и внешние API. Реализуйте in-memory кэш, который:
— хранит не более N элементов (LRU-политика вытеснения)
— истекает срок действия записей по TTL
— потокобезопасен и работает за O(1) на get/put
1. put(k, v) кладёт значение с TTL (единый для экземпляра).
2. get(k) возвращает значение или null, если пары нет или истёк TTL.
3. При переполнении удаляется «наименее недавно использованный» элемент.
4. Решение должно быть неблокирующим по чтению или, как минимум, с короткими критическими секциями.
5. Допустимо ленивое удаление устаревших записей (на чтении/записи).
— Выбор структуры: LinkedHashMap с accessOrder=true даёт LRU «из коробки».
— TTL: храните expireAt на элемент; чистите лениво и/или периодически.
— Потоки: короткие секции под ReentrantReadWriteLock (или один ReentrantLock) вокруг критичных операций.
— Амортизация O(1): не делайте полных проходов по карте на каждом вызове.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥5❤4😁1
🔥 25 сентября в 20:00 мск — открытый вебинар в OTUS!
О чём?
В мире высоконагруженных систем с сотнями сервисов управление конфигурацией, сервис-дискавери и координация компонентов — это настоящий вызов. Apache ZooKeeper — проверенное решение для создания надёжных и управляемых распределённых систем.
Что разберём:
- ZooKeeper: что это и зачем он нужен в распределённых системах.
- Архитектура: ZNode, лидер-выборы, механизмы согласованности.
- Применение: сервис-дискавери, управление конфигурацией, координация задач.
- Ограничения: сравнение ZooKeeper с Etcd и Consul.
- Практика: реальные кейсы использования в highload-системах.
🎓 После вебинара вы:
- Поймёте, как ZooKeeper решает задачи координации и конфигурации.
- Узнаете, когда использовать ZooKeeper, а когда выбрать Etcd или Consul.
🔧 Присоединяйтесь, чтобы освоить мощный инструмент для построения масштабируемых и отказоустойчивых систем!
👉 Зарегистрироваться https://vk.cc/cPItpe
Бесплатное занятие приурочено к старту курса Highload Architect, обучение на котором позволит освоить решения, которые выдерживают большое количество запросов в секунду и правильно оптимизировать работоспособность серверов
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
О чём?
В мире высоконагруженных систем с сотнями сервисов управление конфигурацией, сервис-дискавери и координация компонентов — это настоящий вызов. Apache ZooKeeper — проверенное решение для создания надёжных и управляемых распределённых систем.
Что разберём:
- ZooKeeper: что это и зачем он нужен в распределённых системах.
- Архитектура: ZNode, лидер-выборы, механизмы согласованности.
- Применение: сервис-дискавери, управление конфигурацией, координация задач.
- Ограничения: сравнение ZooKeeper с Etcd и Consul.
- Практика: реальные кейсы использования в highload-системах.
🎓 После вебинара вы:
- Поймёте, как ZooKeeper решает задачи координации и конфигурации.
- Узнаете, когда использовать ZooKeeper, а когда выбрать Etcd или Consul.
🔧 Присоединяйтесь, чтобы освоить мощный инструмент для построения масштабируемых и отказоустойчивых систем!
👉 Зарегистрироваться https://vk.cc/cPItpe
Бесплатное занятие приурочено к старту курса Highload Architect, обучение на котором позволит освоить решения, которые выдерживают большое количество запросов в секунду и правильно оптимизировать работоспособность серверов
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
❤4👍3🔥2