Максим Добрынин | Как стать востребованным Java разработчиком | ex. Jetbulb @jetbulb Channel on Telegram

Максим Добрынин | Как стать востребованным Java разработчиком | ex. Jetbulb

@jetbulb


IT community с полезными материалами о программировании, технических собеседованих и рабочих буднях в IT.

Авторский контент от @maksymdobrynin

Получи реальный опыт решения коммерческих задач в Agile команде
до 6 человек⬇️

https://iprody.com/

Jetbulb | Как стать востребованным Java разработчиком (Russian)

Присоединяйтесь к IT сообществу Jetbulb, которое предлагает полезные материалы о программировании, технических собеседованиях и рабочих буднях в сфере IT. Этот канал является идеальным ресурсом для тех, кто стремится стать востребованным Java разработчиком. Авторский контент от @maksymdobrynin обеспечивает актуальную информацию и советы, которые помогут вам развиваться в данной области. Получите реальный опыт решения коммерческих задач в Agile команде до 6 человек прямо сейчас, присоединяйтесь к нашему каналу Jetbulb. Посетите наш сайт https://iprody.com/ для дополнительной информации и обучающих материалов. Не упустите возможность расширить свои знания и навыки в сфере разработки ПО с Jetbulb!

Максим Добрынин | Как стать востребованным Java разработчиком | ex. Jetbulb

22 Feb, 07:02


Многопоточность. Виртуальные потоки в Java

Виртуальные потоки (JEP 444: Virtual Threads) в Java представляют собой значительное усовершенствование модели многопоточности, предоставляя разработчикам возможность создавать легковесные потоки, управляемые непосредственно виртуальной машиной Java (JVM). Это позволяет значительно увеличить количество одновременно выполняемых потоков без существенных затрат системных ресурсов.

▶️ Основные особенности виртуальных потоков

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

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

- Эффективное использование ресурсов. Благодаря управлению виртуальными потоками на уровне JVM, достигается более эффективное распределение и использование системных ресурсов.

▶️ Практическое применение
Для включения виртуальных потоков в приложении на основе Spring Boot 3.2 и Java 21 достаточно добавить в файл application.properties следующую настройку:

spring.threads.virtual.enabled=true

Это позволит использовать виртуальные потоки как с встроенным сервером Tomcat, так и с Jetty. Подробная статья о использовании Виртуальный потоков в Spring Framework и официальная документация Spring Framework о применении виртуальных потоков.

▶️ Рекомендации по использованию

- Совместимость с существующим кодом. Виртуальные потоки спроектированы таким образом, чтобы быть совместимыми с текущими библиотеками и фреймворками, что облегчает их интеграцию в существующие проекты.

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

⬇️ Уже пробовал виртуальные потоки в Java? Пиши в комментариях
👍 Понравился этот пост? Подписывайся, ставь лайк и поделись постом в коллегой

___________________
Курс по Java | Стажировка в тренинг-центре | Задать вопрос менеджеру

Максим Добрынин | Как стать востребованным Java разработчиком | ex. Jetbulb

21 Feb, 12:26


⚡️Осталась всего пара мест на стажировке уровня Middle, которая стартует уже 3го марта

Успейте занять свое место в команде, чтобы повысить свой грейд и сделать скачок в карьере.

В течение 3х месяцев вы с коллегами реализуете полноценный проект на современном стеке, а так же:

— Освоите современный набор навыков и технологий, которые необходимы для перехода на более высокооплачиваемый проект;
— Получите недостающий опыт работы;
— Разместите готовый проект в портфолио;
— Получите обратную связь и постоянную поддержку от практикующих разработчиков уровня Senior+;

На проекте используются следующий технологии:
- Java (последние версии)
- Spring Boot
- Spring Framework (WebFlux, R2DBC, Security, др.)
- Slf4j, Logback, Distributed Logging
- JUnit, AssertJ, Mockito
- Maven, Gradle
- SQL, JPA, Hibernate
- Docker
- Kafka/RabbitMQ
- Microservices

Нефункциональные требования:
⁃ Покрытие тестами: unit, integration, e2e
⁃ Обработка не менее 250-запросов в секунду (включая fun-out)
⁃ Масштабируемость
⁃ Высокий уровень доступности
⁃ Трассирование запросов

Архитектура: Микросервисная, 5-сервисов

Тип коммуникации: Синхронный и асинхронный

Стажировка на платформе iPrody - это возможность не только прокачать работу с технологиями, но и повысить свои soft-skills работы в команде.

К каждой группе из 6 человек прикрепляется практикующий разработчик уровня Senior+, который является ментором на проекте: распределяет задачи, проводит код-ревью, отвечает на вопросы и помогает каждому участнику.

⏱️ Группа встречается 3 раза в неделю на митинге по 1,5 часа, где происходит обсуждение текущих задач, решение вопросов и постановка новых задач.

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

________________________

Свежие отзывы о прохождении стажировки уровня Middle
- отзыв Дмитрия
- отзыв Акыла

💰Есть гарантия возврата денег в течение первых 14-ти дней с начала старта группы. Если за это время вы поймёте, что материалы или формат вам не подходят, просто напишите менеджеру, и мы вернем вам всю сумму обратно👌🏻

Уже выпустили более 15 групп стажировки на нашей платформе

Чтобы успеть забронировать место на проекте пишите менеджеру

Максим Добрынин | Как стать востребованным Java разработчиком | ex. Jetbulb

20 Feb, 08:57


Многопоточность. Для чего используют методы wait(), notify(), notifyAll() и join()

Методы wait(), notify(), notifyAll() и join() в Java используются для управления потоками и организации их взаимодействия, иначе говорят для синхронизации потоков.


▶️Методы wait(), notify() и notifyAll()
Эти методы предназначены для координации работы потоков через механизм мониторов и используются для реализации межпоточной синхронизации.

- wait(): Этот метод вызывается на объекте внутри синхронизированного блока или метода. При вызове wait() текущий поток освобождает монитор объекта и переходит в состояние ожидания до тех пор, пока другой поток не вызовет notify() или notifyAll() на этом же объекте.

- notify(): Вызывается внутри синхронизированного блока или метода на объекте, чтобы разбудить один случайный поток, ожидающий на этом объекте. Какой именно поток будет разбужен, не определено и зависит от реализации.

- notifyAll(): Также вызывается внутри синхронизированного блока или метода и пробуждает все потоки, ожидающие на данном объекте. После пробуждения все потоки будут пытаться захватить монитор объекта для продолжения выполнения.

Важно помнить, что методы wait(), notify() и notifyAll() должны вызываться только внутри синхронизированных блоков или методов, иначе будет выброшено исключение IllegalMonitorStateException.

▶️ Метод join()
Метод join() используется для того, чтобы один поток ожидал завершения другого. Когда поток t вызывает t.join(), текущий поток приостанавливается до тех пор, пока поток t не завершит свое выполнение. Это полезно, когда необходимо убедиться, что определенный поток завершился перед продолжением работы основного или другого потока.

⬇️ А какие способы синхронизации значишь ты? Пиши в комментариях
👍 Понравился этот пост? Подписывайся, ставь лайк и поделись постом в коллегой


___________________
Курс по Java | Стажировка в тренинг-центре | Задать вопрос менеджеру

Максим Добрынин | Как стать востребованным Java разработчиком | ex. Jetbulb

19 Feb, 07:10


📰 Подборка новостей для разработчиков Java/Kotlin

🔹 Топ Java конференций в 2025
Планируете свой технический календарь на 2025 год? Конференции Java предлагают больше, чем просто технические сессии — это ваш шлюз для общения с активным сообществом профессионалов и страстных поклонников Java, исследования новых городов и поиска нового вдохновения. Читать далее …

🔹 Продуктивная работа с БД через Intellij IDEA

В этой статье рассматривается девять способов экономии времени, которые IntelliJ IDEA может использовать для повышения производительности при разработке приложений Java с базами данных — независимо от того, начинаете ли вы новый проект или погружаетесь в текущий. Читать далее …

🔹 Релизнулся Ktor 3.1.0 Release
Ktor 3.1.0 уже здесь! Это первый небольшой релиз года, приносящий захватывающие новые функции, улучшения производительности и исправления ошибок. Этот релиз включает улучшения для отправленных сервером событий (SSE), улучшения документации, поддержку WebAssembly (Wasm), обновления дизайна внедрения зависимостей и некоторые начальные шаги к интеграции gRPC. Читать далее ...

🔹 Результаты Advent of Code in Kotlin 2024

Advent of Code — это ежегодное мероприятие, представляющее собой набор рождественских задач по программированию, оформленных в виде адвент-календаря. В этой статье оглашаются результаты AoC Kotlin 2024, а также предоставляются ссылки на обучающие ресурсы для желающих принять участие в 2025 году. Читать далее ...

⬇️ А где вы читаете новости? Пишите в комментариях.
👍 Понравилась подборка? Поддержите нас лайком и пошарьте контент!


___________________
Курс по Java | Стажировка в тренинг-центре | Задать вопрос менеджеру

Максим Добрынин | Как стать востребованным Java разработчиком | ex. Jetbulb

18 Feb, 13:32


🚀 Хватит учить теорию — пора кодить как профессионал!
Стажировка для Junior Java — твой билет в реальный мир разработки.

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

Как устроена стажировка на платформе:

1️⃣ Группа за 3 месяца реализует отдельный сервис в рамках целого проекта.

2️⃣ К каждой группе прикрепляется практикующий разработчик уровня Senior, который выступает ментором, распределяет задачи внутри команды, проводит код ревью и конечно же приходит на помощь в случае, когда появляются вопросы.

3️⃣ Общение в группе происходит на постоянной основе, благодаря чему вы прокачаете навыки командной разработки и свои soft skills.

4️⃣ Группа встречается 3 раза в неделю на митинге по часу, где происходит обсуждение текущих задач, код-ревью и решение вопросов.

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

На проекте используются следующий технологии👇🏻
- Java (последние версии)
- Spring Boot
- Spring Framework (WebFlux, R2DBC, Security, др.)
- Slf4j, Logback, Distributed Logging
- JUnit, AssertJ, Mockito
- Maven, Gradle
- SQL, JPA, Hibernate
- Docker
- Kafka/RabbitMQ
- Microservices


83% участников практики на платформе iPrody получают оффер в ближайший месяц, после успешной сдачи проекта.
___________________________

Уже выпустили более 15 групп платной стажировки на нашей платформе

👆🏻Подробное описание стажировки можно посмотреть в видео

Посмотреть отзывы можно тут

👉🏻 Места разлетаются довольно быстро, чтобы успеть занять свое, пишите - нашему менеджеру.

📅 Стартуем уже 5 марта

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

Максим Добрынин | Как стать востребованным Java разработчиком | ex. Jetbulb

18 Feb, 06:04


📚 Микросервисы. ТОП книг о микросервисной архитектуре для каждого разработчика от Макса Добрынина

Привет, всем!
Макс вещает 😼

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

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

▶️ Microservices Patterns: With examples in Java
Автор: Крис Ричардсон.
Эта книга подробно освещает создание и развертывание микросервисов с использованием Java, предлагая практические паттерны и стратегии перехода от монолитных приложений к микросервисной архитектуре.

▶️ Microservices: Up and Running
Авторы: Ронни Митра и Иракли Надареишвили.
Пошаговое руководство по построению эффективной микросервисной архитектуры, охватывающее весь процесс — от проектирования до внедрения и сопровождения.

▶️ Building Microservices: Designing Fine-Grained Systems
Автор: Sam Newman.
Книга предлагает глубокий анализ принципов и практик разработки микросервисов, включая взаимодействие между сервисами, мониторинг и масштабирование систем.

▶️ Monolith to Microservices: Evolutionary Patterns to Transform Your Monolith
Автор: Sam Newman.
Издание фокусируется на стратегиях и паттернах миграции от монолитных систем к микросервисной архитектуре, предоставляя практические советы и рекомендации.

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

Макс Добрынин
Software Engineer

⬇️ А какую книгу рекомендовал бы ты? Пиши в комментариях
👍 Понравился этот пост? Подписывайся, ставь лайк и поделись постом в коллегой


___________________
Курс по Java | Стажировка в тренинг-центре | Задать вопрос менеджеру

Максим Добрынин | Как стать востребованным Java разработчиком | ex. Jetbulb

17 Feb, 07:02


🆚 Виртуальные потоки в Java и корутины в Kotlin

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

▶️ Виртуальные потоки в Java

Виртуальные потоки, представленные в Java 21 (а именно JEP 444: Virtual Threads), являются легковесными потоками, управляемыми виртуальной машиной Java (JVM). Они позволяют значительно увеличить количество одновременно выполняемых потоков без существенных затрат системных ресурсов. В отличие от традиционных потоков, виртуальные потоки не привязаны постоянно к потокам операционной системы, что позволяет эффективно обрабатывать большое количество параллельных задач.

Основная цель внедрения виртуальных потоков — предоставить разработчикам возможность писать асинхронный код в привычном синхронном стиле, избегая сложностей, связанных с обратными вызовами (callback) или реактивным программированием (см. Реактивный манифест и Project Reactor). Это достигается за счет того, что виртуальные потоки освобождают ресурсы операционной системы во время блокирующих операций, таких как ввод-вывод, и возобновляют выполнение после их завершения.

▶️ Корутины в Kotlin

Корутины в Kotlin — это инструмент для написания асинхронного и неблокирующего кода, встроенный непосредственно в язык. Они позволяют выполнять длительные операции, не блокируя основной поток, что особенно полезно при разработке пользовательских интерфейсов и серверных приложений.
Корутин представляет собой функцию, выполнение которой может быть приостановлено и возобновлено без блокировки потока. Это достигается с помощью ключевого слова suspend, обозначающего функции, которые могут быть приостановлены. Для управления корутинами используется библиотека `kotlinx.coroutines`, предоставляющая различные функции и конструкции для создания и управления корутинами.

▶️ Кратное равнение виртуальных потоков и корутин

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

🔹Уровень интеграции: Корутины являются частью языка Kotlin и требуют использования специальных конструкций (suspend функции, корутинные контексты). Виртуальные потоки в Java, напротив, интегрированы на уровне JVM и позволяют использовать привычные синхронные конструкции, такие как synchronized блоки, без изменений в коде.

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

🔹Совместимость: Корутины требуют использования библиотеки kotlinx.coroutines и соответствующих зависимостей. Виртуальные потоки, будучи частью JVM, не требуют дополнительных библиотек и могут использоваться в существующих Java-приложениях без значительных изменений.

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

Если вы хотите увидеть наглядное объяснение виртуальных потоков в Java, рекомендуем посмотреть видео от Jetbrains: Virtual Threads and Structured Concurrency in Java 21 With Loom.

⬇️ Уже пробовал виртуальные потоки в Java? Пиши в комментариях
👍 Понравился этот пост? Подписывайся, ставь лайк и поделись постом в коллегой


___________________
Курс по Java | Стажировка в тренинг-центре | Задать вопрос менеджеру

Максим Добрынин | Как стать востребованным Java разработчиком | ex. Jetbulb

16 Feb, 14:24


🤚 Пять рабочих проектов для твоего портфолио

Скажи, а ты уже создавал что-то сложнее “крестиков-ноликов” и “калькулятора”?
Думаю, такие проекты вряд ли удивят работодателя. Скорее опять скажут “мы вам позвоним”.

Надоело?

Тогда залетай на курс Java Enterprise: от новичка до разработчика

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

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

1. Фреймворк для автоматического тестирования кода
2. Реализация инверторной системы
3. Реализация системы резервирования мест в отеле
4. Автоматическое тестирование веб-приложений
5. Реализация и запуск двух микросервисов с участием Docker


За 6 месяцев пройдешь путь от новичка в программировании, до уверенного Java Junior под чутким руководством наших менторов.
________________________

❗️Количество мест строго ограничено и разлетаются они довольно быстро.

💰Стоимость - всего 600$ за 6 месяцев обучения, с гарантией возврата 100% средств в первые две недели с момента старта курса.

Изучить подробнее и оставить заявку можно на странице - iprody.com/courses
Если у вас остались вопросы или вы хотите уточнить информацию - смело пишите нашему менеджеру

Максим Добрынин | Как стать востребованным Java разработчиком | ex. Jetbulb

16 Feb, 07:10


💡Вопрос про микросервисы с собеседования. Что такое API Gateway и какие проблемы он решает?

Какие вопросы про микросервисы вы хотели бы разобрать?
👇🏻 Пишите в комментариях

Максим Добрынин | Как стать востребованным Java разработчиком | ex. Jetbulb

15 Feb, 07:16


📰 Подборка новостей для разработчиков Java/Kotlin

🔹Dropwizard vs. Micronaut: Unpacking the Best Framework for Microservices.
Статья сравнивает два популярных фреймворка для микросервисов, обсуждая их преимущества и недостатки. Читать далее …

🔹Популярные блоги о Java
Подборка лучших Java-блогов за 2024 год для получения актуальной информации и улучшения навыков программирования. Читать далее …

🔹Популярные java-блогеры
Кураторская подборка персональных блогов от ведущих Java-экспертов, предлагающая глубокие инсайты и передовой опыт. Читать далее …

🔹Топ 12 подкастов о Java
Список лучших подкастов для Java-разработчиков, охватывающий широкий спектр тем от технических обсуждений до отраслевых трендов. Читать далее …

⬇️ А где ты читаешь новости? Пиши в комментариях
👍 Поставь лайк этому посту, если тебе зашла подборка

___________________
Курс по Java | Стажировка в тренинг-центре | Задать вопрос менеджеру

Максим Добрынин | Как стать востребованным Java разработчиком | ex. Jetbulb

14 Feb, 09:03


🧑🏻‍💻Сортируем коллекции в Java 21 и Kotlin 2

Сортировка коллекций в Java 21 и Kotlin 2 предоставляет разработчикам мощные инструменты для упорядочивания данных. Рассмотрим основные способы сортировки в обоих языках.

▶️ Сортировка в Java 21
В Java 21 для сортировки коллекций, таких как List, используется метод Collections.sort(). Этот метод принимает список и сортирует его элементы в естественном порядке, если элементы реализуют интерфейс Comparable, или по заданному компаратору, если он предоставлен.

Пример сортировки списка строк по алфавиту:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Banana");
list.add("Apple");
list.add("Cherry");
Collections.sort(list);
System.out.println(list); // Вывод: [Apple, Banana, Cherry]
}
}


Если требуется сортировка по пользовательскому критерию, можно использовать компаратор:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Banana");
list.add("Apple");
list.add("Cherry");
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o2.compareTo(o1); // Сортировка по убыванию
}
});
System.out.println(list); // Вывод: [Cherry, Banana, Apple]
}
}


Начиная с Java 8, можно использовать лямбда-выражения для более компактного кода:
Collections.sort(list, (o1, o2) -> o2.compareTo(o1)); // Сортировка по убыванию


В Java 21 также были введены интерфейсы SequencedCollection и SequencedSet, которые предоставляют методы для работы с коллекциями, элементы которых имеют определённый порядок обхода.

▶️ Сортировка в Kotlin 2
В Kotlin 2 для сортировки коллекций используются функции sorted(), sortedBy(), sortedWith() и другие. Функция sorted() возвращает новый список, отсортированный в естественном порядке элементов.

Пример сортировки списка строк по алфавиту:
fun main() {
val list = listOf("Banana", "Apple", "Cherry")
val sortedList = list.sorted()
println(sortedList) // Вывод: [Apple, Banana, Cherry]
}


Для сортировки по пользовательскому критерию используется функция sortedBy(), принимающая лямбда-выражение, которое определяет ключ сортировки:
fun main() {
val list = listOf("Banana", "Apple", "Cherry")
val sortedList = list.sortedBy { it.length }
println(sortedList) // Вывод: [Apple, Banana, Cherry]
}


Если требуется сортировка по нескольким критериям, можно использовать функцию sortedWith() с компаратором:
fun main() {
val list = listOf("Banana", "Apple", "Cherry")
val sortedList = list.sortedWith(compareBy({ it.length }, { it }))
println(sortedList) // Вывод: [Apple, Banana, Cherry]
}


Для сортировки в обратном порядке можно использовать функцию sortedDescending():
fun main() {
val list = listOf("Banana", "Apple", "Cherry")
val sortedList = list.sortedDescending()
println(sortedList) // Вывод: [Cherry, Banana, Apple]
}


В Kotlin 2 также доступны функции sortedByDescending() и sortedWithDescending(), которые позволяют сортировать коллекции в убывающем порядке.

⬇️ Когда перейдешь на Котлин? Пиши в комментариях
👍 Понравился этот пост? Подписывайся, ставь лайк и поделись постом в коллегой


___________________
Курс по Java | Стажировка в тренинг-центре | Задать вопрос менеджеру

Максим Добрынин | Как стать востребованным Java разработчиком | ex. Jetbulb

13 Feb, 15:02


🤚 Как проходит обучение на курсе Java Enterprise?

Это самый популярный вопрос от будущих учеников. Отвечаем на него!

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

1. Посещаете онлайн-занятие
2 раза в неделю по 1,5 часа. Преподаватель объясняет материал, отвечает на вопросы и дает обратную связь каждому. Занятие всегда можно пересмотреть в записи.

2. Выполняете домашнее задание
В удобное для вас время и сдаете задание на платформе

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

👉🏻 Все это в мини-группе с сильным преподавателем, который донесет до вас простым языком даже самые сложные темы из мира Java.

До конца месяца для тебя действует сниженная стоимость, всего 100$ за месяц обучения, а также гарантия возврата 100% средств в случае, если вас что-либо не устроит.

Готов присоединиться уже сейчас?

👉🏻 Изучить подробнее и оставить заявку можно на странице - iprody.com/courses

Остались вопросы или хочешь уточнить информацию - смело пиши нашему менеджеру

Максим Добрынин | Как стать востребованным Java разработчиком | ex. Jetbulb

12 Feb, 15:08


⚡️Старт новой группы стажировки для Middle разработчиков уже 3го марта

Успейте занять свое место в команде, чтобы повысить свой грейд и сделать скачок в карьере.

В течение 3х месяцев вы с коллегами реализуете полноценный проект на современном стеке, а так же:

— Освоите современный набор навыков и технологий, которые необходимы для перехода на более высокооплачиваемый проект;
— Получите недостающий опыт работы;
— Разместите готовый проект в портфолио;
— Получите обратную связь и постоянную поддержку от практикующих разработчиков уровня Senior+;

На проекте используются следующий технологии:
- Java (последние версии)
- Spring Boot
- Spring Framework (WebFlux, R2DBC, Security, др.)
- Slf4j, Logback, Distributed Logging
- JUnit, AssertJ, Mockito
- Maven, Gradle
- SQL, JPA, Hibernate
- Docker
- Kafka/RabbitMQ
- Microservices

Нефункциональные требования:
⁃ Покрытие тестами: unit, integration, e2e
⁃ Обработка не менее 250-запросов в секунду (включая fun-out)
⁃ Масштабируемость
⁃ Высокий уровень доступности
⁃ Трассирование запросов

Архитектура: Микросервисная, 5-сервисов

Тип коммуникации: Синхронный и асинхронный

Стажировка на платформе iPrody - это возможность не только прокачать работу с технологиями, но и повысить свои soft-skills работы в команде.

К каждой группе из 6 человек прикрепляется практикующий разработчик уровня Senior+, который является ментором на проекте: распределяет задачи, проводит код-ревью, отвечает на вопросы и помогает каждому участнику.

⏱️ Группа встречается 3 раза в неделю на митинге по 1,5 часа, где происходит обсуждение текущих задач, решение вопросов и постановка новых задач.

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

________________________

Свежие отзывы о прохождении стажировки уровня Middle
- отзыв Дмитрия
- отзыв Акыла

👉🏻 В этом видео можно посмотреть подробнее, как устроена стажировка внутри

💰Есть гарантия возврата денег в течение первых 14-ти дней с начала старта группы. Если за это время вы поймёте, что материалы или формат вам не подходят, просто напишите менеджеру, и мы вернем вам всю сумму обратно👌🏻

Уже выпустили более 15 групп стажировки на нашей платформе

Чтобы успеть забронировать место на проекте пишите менеджеру

Максим Добрынин | Как стать востребованным Java разработчиком | ex. Jetbulb

12 Feb, 08:01


🏗 Микросервисы. Что нужно знать?

Микросервисная архитектура – современный подход к разработке распределённых систем, при котором приложение делится на небольшие, автономные сервисы, каждый из которых реализует отдельную бизнес-функцию.

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

▶️ Основные принципы микросервисной архитектуры

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

Независимое развёртывание
Сервисы могут обновляться независимо друг от друга, что ускоряет цикл разработки и снижает риск сбоев.

Коммуникация через API
Сервисы взаимодействуют между собой посредством хорошо определённых интерфейсов (обычно REST или gRPC), что обеспечивает гибкость интеграции.

— Автономность и изоляция

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

▶️ Преимущества микросервисной архитектуры

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

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

Устойчивость к сбоям

Отказ одного сервиса не приводит к полной остановке приложения, благодаря изоляции компонентов.

Технологическая гибкость
Возможность выбора оптимального стека технологий для каждой конкретной задачи. Например, одни сервисы могут быть написаны на Java с использованием Spring Boot, а другие – на Kotlin.

▶️ Инструменты и технологии
При реализации микросервисной архитектуры популярными решениями являются:

— Spring Boot и Spring Cloud
. Эти фреймворки позволяют быстро создавать и развёртывать микросервисы, обеспечивая при этом встроенные решения для конфигурации, балансировки нагрузки, маршрутизации и безопасности.

— Docker и Kubernetes. Контейнеризация и оркестрация помогают обеспечить стабильное и повторяемое развёртывание сервисов в различных средах.

— Системы мониторинга и логирования. Такие инструменты, как Prometheus, Grafana, ELK Stack, помогают отслеживать состояние системы и оперативно реагировать на сбои.

Для более детального ознакомления с концепцией микросервисов рекомендуем изучить руководство по микросервисной архитектуре от Chris Richardson и документацию Spring Cloud.


⬇️ Какие микросервисы удалось реализовать тебе? Пиши в комментариях
👍 Понравился этот пост? Подписывайся, ставь лайк и поделись постом в коллегой


___________________
Курс по Java | Стажировка в тренинг-центре | Задать вопрос менеджеру

Максим Добрынин | Как стать востребованным Java разработчиком | ex. Jetbulb

10 Feb, 12:03


Техническое собеседование Java Developer | Топ вопросы Java | Подготовка к интервью

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

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

Разберём самые популярные вопросы, которые часто задают на собеседованиях, обсудим нюансы подготовки и как правильно подойти к собеседованию, чтобы начать карьеру в IT и получить высокооплачиваемую работу.

В видео вы узнаете:
• Какие вопросы по Java являются обязательными для любого кандидата.
• Советы и реальные рекомендации, как стать профессионалом в программировании.
• Атмосферу настоящего технического интервью от опытного разработчика, который прошёл этот путь самостоятельно

Если вы хотите повысить свой уровень знаний, подготовиться к собеседованию и сделать первые шаги на пути к успешной карьере Java-разработчика – это видео для вас!

🔥Погнали!

Максим Добрынин | Как стать востребованным Java разработчиком | ex. Jetbulb

10 Feb, 05:02


👇🏻Пример паттерна «Цепочка обязанностей» (Chain of Responsibility) на Java


// Абстрактный обработчик
abstract class Handler {
protected Handler next;
public void setNext(Handler next) {
this.next = next;
}
public abstract void handleRequest(String request);
}
// Конкретный обработчик A
class ConcreteHandlerA extends Handler {
@Override
public void handleRequest(String request) {
if (request.contains("A")) {
System.out.println("Handler A обработал запрос: " + request);
} else if (next != null) {
next.handleRequest(request);
}
}
}
// Конкретный обработчик B
class ConcreteHandlerB extends Handler {
@Override
public void handleRequest(String request) {
if (request.contains("B")) {
System.out.println("Handler B обработал запрос: " + request);
} else if (next != null) {
next.handleRequest(request);
}
}
}
// Клиентский код
public class Client {
public static void main(String[] args) {
Handler handlerA = new ConcreteHandlerA();
Handler handlerB = new ConcreteHandlerB();
handlerA.setNext(handlerB);
// Запрос, который будет обработан одним из обработчиков
handlerA.handleRequest("Запрос содержащий B");
}
}

В данном примере запрос передаётся сначала в ConcreteHandlerA. Если условие обработки не выполняется (например, запрос не содержит символ «A»), то запрос передаётся следующему обработчику – ConcreteHandlerB. Такой подход позволяет легко добавлять новые типы обработчиков, меняя лишь цепочку их связи.
_________________

👇🏻Пример на Kotlin

// Абстрактный обработчик с возможностью передачи запроса дальше
abstract class Handler(private val next: Handler? = null) {
open fun handle(request: String) {
next?.handle(request)
}
}
// Обработчик аутентификации
class AuthHandler(next: Handler? = null) : Handler(next) {
override fun handle(request: String) {
if (request.contains("auth")) {
println("Аутентификация пройдена: $request")
} else {
super.handle(request)
}
}
}
// Обработчик логирования
class LoggingHandler(next: Handler? = null) : Handler(next) {
override fun handle(request: String) {
println("Логирование запроса: $request")
super.handle(request)
}
}
fun main() {
// Строим цепочку: сначала аутентификация, затем логирование
val handler = AuthHandler(LoggingHandler())
handler.handle("auth: запрос на вход в систему")
}

Здесь цепочка строится из двух обработчиков: сначала выполняется проверка аутентификации, а затем (при необходимости) логирование запроса. Такой шаблон широко применяется не только в системах обработки событий, но и, например, в реализации middleware для веб-приложений и микросервисных архитектур.

⬇️ Уже применял этот шаблон проектирования? Пиши в комментариях
👍 Понравился этот пост? Подписывай
ся, оставляй комментарии и делись своими мыслями

_______________
Курс по Java | Стажировка в тренинг-центре | Задать вопрос менеджеру

Максим Добрынин | Как стать востребованным Java разработчиком | ex. Jetbulb

10 Feb, 05:01


🏗 Шаблоны проектирования. Цепочка обязанностей (Chain of Responsibility)

Паттерн «Цепочка обязанностей» (Chain of Responsibility) – поведенческий шаблон проектирования, позволяющий передавать запрос по цепочке обработчиков без жёсткой привязки отправителя к конкретному получателю. То есть отправитель запроса ничего не знает о том, какой объект в итоге займётся его обработкой – он просто передаёт запрос первому обработчику, а тот, в зависимости от своей логики, либо обрабатывает его, либо передаёт дальше по цепочке.

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

▶️ Основные преимущества

Ослабление связанности. Отправитель не знает о структуре и составе цепочки обработчиков.

Гибкость распределения обязанностей. Можно динамически менять порядок и состав обработчиков.

Упрощение расширения. Добавление нового обработчика сводится к реализации общего интерфейса, без модификации существующего кода.

▶️ Недостатки

Неопределённость результата. Если ни один из обработчиков не сможет обработать запрос, он просто «потеряется».

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

▶️ Пример на Java (см. ниже)

▶️ Пример на Kotlin (см. ниже)

📌Полезные ссылки
Идея паттерна «Цепочка обязанностей» впервые была описана в книге «Design Patterns: Elements of Reusable Object-Oriented Software» («Банда четырех»).

Более подробное описание и примеры можно найти на сайте Refactoring.Guru - Цепочка обязанностей.


⬇️ Уже применял этот шаблон проектирования? Пиши в комментариях
👍 Понравился этот пост? Подписывай
ся, оставляй комментарии и делись своими мыслями

_______________
Курс по Java | Стажировка в тренинг-центре | Задать вопрос менеджеру

Максим Добрынин | Как стать востребованным Java разработчиком | ex. Jetbulb

09 Feb, 08:48


💡Продолжаем разбирать микросервисную архитектуру вместе с Максом Добрыниным

👇🏻 Делитесь своим мнением, насколько полезно видео для вас.
И не забывайте оставлять реакции🔥


___________________
Курс по Java | Тренинг-центр | Задать вопрос менеджеру

Максим Добрынин | Как стать востребованным Java разработчиком | ex. Jetbulb

08 Feb, 10:16


🤚 Нужен ли тебе курс Java Enterprise?

Давай пройдем небольшой тест:
1. Ты хочешь освоить востребованный ЯП с высокой оплатой за свой труд
2. Ты новичок в программировании или изучаешь Java самостоятельно
3. Ты - опытный разраб на других языках, но Java для тебя, как эльфийский. Вроде звучит похоже, а смысл не уловить.

Если хотя бы на 2 вопроса ты ответил "да" - тебе точно надо на курс.

6 месяцев, 5 реальных проектов в портфолио и более 72 часов занятий + практика от ментора.


За 6 месяцев ты пройдешь путь от новичка в программировании, до уверенного Java Junior:
— Освоишь все необходимые навыки для старта в профессии;
— Научишься свободно программировать на популярном языке Java;
— Получишь полноценный роудмеп для дальнейшего развития.

Все обучение проходит в мини-группах до 30 человек! Именно такому количеству есть возможность дать развернутую обратную связь.
___________________

Уже выпустили более 12 групп практики на нашей платформе, отзывы ребят можно посмотреть на сайте: https://iprody.com/

💰Стоимость всего 100$ за месяц обучения, а также гарантия возврата 100% средств в случае, если вас что-либо не устроит.

Готов присоединиться уже сейчас?
Изучить подробнее и оставить заявку можно на сайте - iprody.com/courses

Если остались вопросы или хочешь уточнить информацию - смело пиши нашему менеджеру

Максим Добрынин | Как стать востребованным Java разработчиком | ex. Jetbulb

07 Feb, 06:04


Подборка вопросов с технических собеседований на позицию Middle Java Developer

0️⃣ Назовите и охарактеризуйте принципы проектирования приложений на основе ООП

1️⃣ Охарактеризуйте следующие шаблоны проектирования: Strategy, Bridge, Abstract Factory

2️⃣ Как работает ключевое слово volatile? Охарактеризуйте понятия: ordering, visibility

3️⃣ В чем отличие JPA и Hibernate?

4️⃣ Почему так важно полагаться на контракт при разработке библиотек или фреймворков?

5️⃣ Как работают Parallel Stream в Stream API?

6️⃣ Перечислите основные преимущества Spring Boot?

7️⃣ Какие основные преимущества и недостатки микросервисной архитектуры?

8️⃣ Почему так важно применять библиотеку SLF4J?

9️⃣ Как скорость (О-нотация) выполнения операций реализованного интерфейса Queue? (Реализацию можно выбрать на свое усмотрение)


⬇️ А какие вопросы добавил бы ты? Пиши в комментариях
👍 Поставь лайк этому посту, если тебе нравятся наш контент

Максим Добрынин | Как стать востребованным Java разработчиком | ex. Jetbulb

06 Feb, 07:33


⚡️Ищем middle разработчика, который готов повысить свой грейд и сделать скачок в карьере всего за 3 месяца.

В группе middle разработчиков есть 1 свободное место.
Хватит сидеть на проекте со старым стеком, пора врываться в настоящую разработку👇🏻

В результате работы над проектом в течение 3х месяцев вы:

— Освоите современный набор навыков и технологий, которые необходимы для перехода на более высокооплачиваемый проект;
— Получите недостающий опыт работы;
— Разместите готовый проект в портфолио;
— Получите обратную связь и постоянную поддержку от практикующих разработчиков уровня Senior+;

А групповая динамика и коллеги не дадут вам возможности “соскочить” или “забить”.

На проекте используются следующий технологии:
- Java (последние версии)
- Spring Boot
- Spring Framework (WebFlux, R2DBC, Security, др.)
- Slf4j, Logback, Distributed Logging
- JUnit, AssertJ, Mockito
- Maven, Gradle
- SQL, JPA, Hibernate
- Docker
- Kafka/RabbitMQ
- Microservices

Нефункциональные требования:
⁃ Покрытие тестами: unit, integration, e2e
⁃ Обработка не менее 250-запросов в секунду (включая fun-out)
⁃ Масштабируемость
⁃ Высокий уровень доступности
⁃ Трассирование запросов

Архитектура: Микросервисная, 5-сервисов

Тип коммуникации: Синхронный и асинхронный

Как устроена стажировка на платформе:

1️⃣ Группа за 3 месяца реализует отдельный сервис в рамках целого проекта.

2️⃣ К каждой группе прикрепляется практикующий разработчик уровня Senior, который выступает ментором, распределяет задачи внутри команды, проводит код ревью и конечно же приходит на помощь в случае, когда появляются вопросы.

3️⃣ Общение в группе происходит на постоянной основе, благодаря чему вы прокачаете навыки командной разработки и свои soft skills.

4️⃣ Группа встречается 3 раза в неделю на митинге по 1,5 часа, где происходит обсуждение текущих задач, решение вопросов и постановка новых задач.

В результате за 3 месяца вы реализуете в команде полноценный проект, который даст вам возможность двинуться дальше по карьерной лестнице.
________________________

Свежие отзывы о прохождении стажировки уровня Middle
- отзыв Дмитрия
- отзыв Акыла

👉🏻 В этом видео можно посмотреть подробнее, как устроена стажировка внутри

💰Есть гарантия возврата денег в течение первых 14-ти дней с начала старта группы. Если за это время вы поймёте, что материалы или формат вам не подходят, просто напишите менеджеру, и мы вернем вам всю сумму обратно👌🏻

Уже выпустили более 14 групп стажировки на нашей платформе

Чтобы успеть забронировать место на проекте пишите менеджеру

Максим Добрынин | Как стать востребованным Java разработчиком | ex. Jetbulb

05 Feb, 13:08


🔐 Микросервисы. Безопасность при обмене сообщениями через HTTP

Привет, всем!
Макс вещает 😼

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

Вот как раз сегодня и поговорим про JWT, а также каким образом он связан с OAuth. Но главное, проясним что JWT и OAuth далеко не одно и тоже, хотя могут быть одновременно использованы для достижения одной и той же глобальной цели - Безопасность.

JWT (JSON Web Token) - это открытый стандарт (RFC 7519), который определяет компактный способ передачи информации между двумя сторонами. JWT состоит из трех частей:

▶️ Header. Заголовок содержит информацию о типе токена, алгоритме шифрования и алгоритме хэширования
▶️ Claims. Полезная нагрузка содержит данные, такие как имя пользователя, роль и другие атрибуты
▶️ Signature. Подпись используется для проверки подлинности токена

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

OAuth - это открытый стандарт (RFC 6749), который определяет протокол для авторизации пользователей в приложениях. OAuth позволяет пользователям предоставлять доступ к своим учетным данным приложениям без необходимости передавать им свои пароли.

В OAuth есть три роли:
▶️ Client. Сущность (далее пользователь), которая хочет получить доступ к ресурсу
▶️ Resource owner. Сущность или организация (далее владелец), которая владеет ресурсом
▶️ Authorization server. Сервер (далее сервер авторизации), который предоставляет пользователям доступ к ресурсам

Данный стандарт работает следующим образом:
0️⃣ Пользователь обращается к владельцу за доступом к ресурсу
1️⃣ Владелец перенаправляет пользователя на сервер авторизации
2️⃣ Пользователь предоставляет серверу авторизации свои учетные данные
3️⃣ Сервер авторизации проверяет учетные данные пользователя и выдает Access Token
4️⃣ Пользователь возвращается к ресурсному владельцу с Access Token

Вот тут то и проявляется связь JWT с OAuth. Поскольку тот самый Access Token генерируемый OAuth сервером аутентификации может быть представлен в виде JWT.

В сущности я говорю о том, что JWT можно использовать в качестве генерируемого OAuth Bearer Token для переноса всех соответствующих частей данных о пользователе, уровне его доступа и другое, без необходимости хранить это данные в базе данных. Bearer Token представляется стандарт (RFC 6750) и используется для проведения авторизации и аутентификации во время получения доступа к защищенному ресурсу.

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

Макс Добрынин
Software Engineer

⬇️ А какие способы обеспечения безопасности знаешь ты? Пиши в комментариях
👍 Поставь лайк этому посту, если тебе нравятся наш контент

Максим Добрынин | Как стать востребованным Java разработчиком | ex. Jetbulb

04 Feb, 08:25


⚙️ Просто о CI/CD. Как автоматизировать и упростить разработку

Привет, всем!
Макс вещает 😼

Непрерывная интеграция и непрерывная доставка (CI/CD) - это методология разработки программного обеспечения, которая автоматизирует сборку, тестирование и развертывание программного обеспечения. CI/CD становится все более популярной в 2025 году, поскольку она позволяет организациям выпускать программное обеспечение быстрее и с более высоким качеством.

По итогам 2024 года ожидается, что CI/CD будет развиваться в следующих направлениях:

▶️ Более широкое использование: CI/CD становится все более доступной и простой в реализации, что приводит к ее более широкому использованию в различных организациях

▶️ Более глубокая интеграция: CI/CD будет все больше интегрироваться с другими аспектами процесса разработки программного обеспечения, такими как управление изменениями и управление конфигурациями

▶️ Более высокая автоматизация: CI/CD будет все больше полагаться на автоматизацию для повышения эффективности и надежности

А что там на счет перспектив CI/CD?
CI/CD продолжает развиваться и становится все более важной частью процесса разработки программного обеспечения. С каждым днем CI/CD будет играть все более важную роль в обеспечении выпуска программного обеспечения быстрее, с более высоким качеством и с меньшим количеством ошибок.

Какими преимуществами обладает CI/CD?

▶️ Улучшенное качество кода: CI/CD помогает обнаружить и устранить ошибки на ранней стадии, что приводит к повышению качества кода
▶️ Уменьшенное время вывода продукта на рынок: CI/CD помогает сократить время, необходимое для выпуска нового программного обеспечения
▶️ Уменьшенное количество ошибок: CI/CD помогает снизить количество ошибок, связанных с развертыванием
▶️ Повышенная надежность: CI/CD помогает обеспечить более надежную работу программного обеспечения

С чего мне стоит начать реализацию CI/CD?
Реализация CI/CD может быть сложной задачей, но существует множество инструментов и ресурсов, которые могут помочь организациям начать работу. Вот несколько советов по реализации CI/CD:

▶️ Начните с малого: Не пытайтесь реализовать все сразу. Начните с небольшого проекта и постепенно расширяйте свой процесс CI/CD по мере необходимости

▶️ Используйте инструменты автоматизации: Инструменты автоматизации могут помочь вам автоматизировать различные задачи в процессе CI/CD, что может значительно сократить время и усилия, необходимые для реализации

▶️ Получите поддержку: Существует множество ресурсов, которые могут помочь организациям реализовать CI/CD. Получите поддержку от опытных специалистов или присоединитесь к сообществу CI/CD

CI/CD - это мощная методология, которая может помочь организациям выпускать программное обеспечение быстрее и с более высоким качеством. В 2024-2025 годах CI/CD будет продолжать развиваться и становиться все более важной частью процесса разработки программного обеспечения

Макс Добрынин
Software Engineer

⬇️ А ты уже автоматизировал свою разработку и каким образом? Пиши в комментариях
👍 Поставь лайк этому посту, если тебе нравятся наш контент

Максим Добрынин | Как стать востребованным Java разработчиком | ex. Jetbulb

01 Feb, 09:00


🎉 Результаты розыгрыша:

Победитель:
1. Vlad (@v1adn)

Проверить результаты

Максим Добрынин | Как стать востребованным Java разработчиком | ex. Jetbulb

31 Jan, 13:00


💡Микросервисная архитектура. Как осуществляется проверка работоспособности базы данных

👇🏻 Делитесь своим мнением, насколько полезно видео для вас.
И не забывайте оставлять реакции🔥


___________________
Курс по Java | Тренинг-центр | Задать вопрос менеджеру

Максим Добрынин | Как стать востребованным Java разработчиком | ex. Jetbulb

30 Jan, 05:04


🤚 Как насчет того, чтобы изучить Java и стать разработчиком всего за 6 месяцев?

Ведем набор на курс Java Enterprise: от новичка до разработчика.

Вы будете изучать только востребованные на рынке технологии, которые необходимы для успешного трудоустройства👇🏻

- Git
- Java Core
- JUnit
- Maven и Gradle
- SQL
- JPA и Hibernate
- Spring Core
- Spring Data Access
- Spring Web
- Spring Webflux
- Spring Security
- Docker

Посмотреть полную программу и список технологий можно тут

За 6 месяцев вы пройдете путь от новичка в программировании, до уверенного Java Junior:
— Освоите все необходимые навыки для старта в профессии;
— Научитесь свободно программировать на популярном языке Java;
— Получите полноценный роудмеп для дальнейшего развития.

А так же реализуете 5 полноценных учебных проектов, которые лягут в основу вашего портфолио👇🏻

1. Фреймворк для автоматического тестирования кода
2. Реализация инверторной системы
3. Реализация системы резервирования мест в отеле
4. Автоматическое тестирование веб-приложений
5. Реализация и запуск двух микросервисов с участием Docker


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

1. Посещаете онлайн-занятие
2 раза в неделю по 1,5 часа. Преподаватель объясняет материал, отвечает на вопросы и дает обратную связь каждому. Занятие всегда можно пересмотреть в записи.

2. Выполняете домашнее задание
В удобное для вас время и сдаете задание на платформе

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

👉🏻 Все это в мини-группе с сильным преподавателем, который донесет до вас простым языком даже самые сложные темы из мира Java.
_________________

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

💵 Стоимость на данный момент всего 600$ за 6 месяцев.
Есть удобные варианты оплаты и гарантия возврата 100% средств в первые 2 недели с момента старта курса.

❗️Количество мест строго ограничено
Основная информация на сайте - https://iprody.com/courses

Если у вас остались вопросы или вы хотите уточнить информацию - смело пишите нашему менеджеру

Максим Добрынин | Как стать востребованным Java разработчиком | ex. Jetbulb

29 Jan, 13:49


⚡️ Стартуем новый розыгрыш бесплатного технического собеседования с Максом Добрыниным

Условия участия:
1️⃣ быть подписанным на телеграм-канал Jetbulb;
2️⃣ жмакнуть на кнопку "Участвую!" под этим постом;
3️⃣ быть готовым, что собеседование будет выложено на YouTube.

Победитель, которого рандомным образом определит бот, получает возможность пройти полноценное техническое собеседование, на котором вы получите:

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

Формат технического собеседования можно посмотреть тут

Не упустите возможность проверить знания, попробовать свои силы и получить обратную связь от Макса Добрынина.

Итог розыгрыша подведем уже в эту субботу в 12:00.
Удачи🤞🏻

Максим Добрынин | Как стать востребованным Java разработчиком | ex. Jetbulb

29 Jan, 07:09


📕Какие книги читают успешные высокооплачиваемые разработчики

Всем, привет!
Макс вещает 😼

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

Список книг которые я затрону, не связаны с конкретными языками программирования, но нацелены на формирование мышления “Инженера разработки программного обеспечения (Software Engineer)”.

▶️ Clean Code: A Handbook of Agile Software Craftsmanship - Robert Martin
“Чистый код” позволит вам познать основы качественной разработки самых простых элементов вашего кода и в целом всей системы: переменные, методы, классы, возвращаемые типы данных и прочее. Если вы ищите вдохновение и примеры, как сделать ваш код лучше и ввести новые стандарты, то Clean Code от Роберта Мартина это ваш выбор.

▶️ Clean Architecture: A Craftsman's Guide to Software Structure and Design - Robert Martin
“Чистая Архитектура” отличной подойдет начинающим и опытным разработчикам для поиска приемов построения масштабируемых и легко расширяемых систем. В этой книге вы найдете множество отсылок на “некачественную” архитектуру и ошибки совершаемые вами.

▶️ Refactoring: Improving the Design of Existing Code - Martin Fowler
“Рефакторинг” позволяет улучшить дизайн существующего кода и повышает удобство поддержки внедренного программного обеспечения, а также упрощает понимание существующего кода. В этой книге Мартин Фаулер раскрывает способы рефакторинга, поясняет, почему вам следует проводить рефакторинг и как распознать код, требующий рефакторинга. Книга отлично подходит опытным разработчикам стремящимся улучшить качество разработанной системы и особенно при работе с legacy кодом.


Макс Добрынин
Software Engineer

⬇️ А какие книги порекомендуешь ты? Пишите в комментариях!
👍 Если пост был полезен, не забудьте поставить лайк!

Максим Добрынин | Как стать востребованным Java разработчиком | ex. Jetbulb

28 Jan, 06:41


Что выбрать, Apache Kafka или RabbitMQ?

Вчера проходил квиз, который был посвящен асинхронной коммуникации. Вопросы затрагивали популярные решения Apache Kafka и RabbitMQ. Данный пост прольет свет на основные различия между этими двумя решениями👇🏻

▶️ Архитектура и модель работы
- Apache Kafka — распределенный лог сообщений, построенный на модели publish-subscribe. Сообщения записываются в топики (topic) и остаются там до тех пор, пока не истечет время хранения (retention policy). Это делает Kafka идеальным для потоковой обработки данных.
- RabbitMQ — это брокер сообщений с поддержкой моделей point-to-point и publish-subscribe. Сообщения передаются через очереди, а после их доставки потребителю удаляются. RabbitMQ часто используется для сценариев, где важна мгновенная доставка сообщений.

▶️ Хранение сообщений
- В Kafka сообщения хранятся на диске и могут быть потреблены многократно разными клиентами. Это делает Kafka идеальным для аналитики и обработки событий.
- В RabbitMQ сообщения удаляются из очереди после обработки, если не настроено явное сохранение. RabbitMQ лучше подходит для транзакционных систем, где каждое сообщение важно.

▶️ Скорость и масштабируемость
- Kafka оптимизирован для высокой пропускной способности и работы с большими объемами данных. Благодаря партициям (partition) в топиках (topic) достигается горизонтальное масштабирование.
- RabbitMQ поддерживает высокую скорость доставки сообщений, но с ростом нагрузки масштабирование становится сложнее, чем в Kafka.

▶️ Подход к обработке сообщений
- Kafka использует pull-модель: потребители (consumer) сами забирают сообщения из топика (topic). Это дает гибкость в обработке данных, но накладывает ответственность на разработчика.
- RabbitMQ использует push-модель: брокер (broker) отправляет сообщения потребителям. Это упрощает разработку, но может привести к перегрузке потребителей.

▶️ Механизмы подтверждения (ACK, Acknowledge)
- В Kafka подтверждения управляются на уровне смещения (offset), и потребитель сам решает, какие сообщения считать обработанными.
- В RabbitMQ подтверждения происходят автоматически или вручную после обработки каждого сообщения, что более удобно для транзакционных систем.

▶️ Использование в разных кейсах

Kafka:
- Потоковая обработка данных.
- Системы аналитики и событий.
- Логирование и мониторинг.

RabbitMQ:
- Транзакционные системы.
- Реализация задач с высокой частотой доставки.
- Четкая маршрутизация сообщений.

По итогам👇🏻
Если ваш проект требует обработки больших объемов данных, многократного чтения сообщений или их долговременного хранения — выбирайте Apache Kafka. Если вам необходима мгновенная доставка, гибкая маршрутизация или транзакционные возможности, RabbitMQ будет лучшим выбором.

⬇️ А вы работаете с Kafka или RabbitMQ? Напишите, какой инструмент вы предпочитаете и почему!
👍 Не забудьте поставить лайк, если пост был полезен!

Максим Добрынин | Как стать востребованным Java разработчиком | ex. Jetbulb

27 Jan, 11:22


🤚 Как начинающему Java разработчику устроиться на работу?

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

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

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


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

Именно на это заточена стажировка в тренинг-центре iPrody.
За 3 месяца работы в команде из 6 человек вы разработаете реальный проект на современном стеке.

И вот, что отмечают ребята, которые успешно прошли стажировку👇🏻

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

2. Технические собеседования проходят значительно проще. Так как бОльшая часть вопрос строятся вокруг разработанного проекта. А за счет того, что группа встречается 3 раза в неделю и идет постоянный обмен информацией, о проекте получается знать досконально все.

3. Опыт реальной разработки в команде придает уверенности в своих силах, так как есть точное понимание, что будет ждать на реальной работе и вы уже с этим справились.

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

Подробнее о стажировке на сайте - https://iprody.com/training-center

В этом видео можно посмотреть подробнее, как устроена стажировка внутри

👉🏻 Места разлетаются довольно быстро, чтобы успеть занять свое, пишите - нашему менеджеру.

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

Максим Добрынин | Как стать востребованным Java разработчиком | ex. Jetbulb

26 Jan, 09:31


💡Разбираем микросервисы. Как Healthcheck встраивается в облачную инфраструктуру?

👇🏻 Делитесь своим мнением, насколько полезно видео для вас.
И не забывайте оставлять реакции🔥


___________________
Курс по Java | Тренинг-центр | Задать вопрос менеджеру

Максим Добрынин | Как стать востребованным Java разработчиком | ex. Jetbulb

24 Jan, 09:58


Шаблон микросервисной архитектуры: Saga

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

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

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

▶️ Основные виды реализации Saga
🔹 Оркестрация (Orchestration) - управление последовательностью операций происходит через централизованный компонент — оркестратор. Она следит за выполнением транзакций и инициирует компенсирующие операции при сбоях.

Плюсы оркестрации:
- Централизованный контроль над бизнес-логикой.
- Удобно для сложных процессов.

Минусы оркестрации:
- Оркестратор может стать "узким местом" системы.
- Высокая сложность при масштабировании.

🔹 Хореография (Choreography) - здесь отсутствует центральный координатор. Каждый микросервис реагирует на события, выполняет свою часть работы и генерирует новое событие для следующего шага.

Плюсы хореографии:
- Упрощенная архитектура: отсутствует центральный компонент.
- Хорошо масштабируется для простых цепочек.

Минусы хореографии:
- Сложнее отладить и управлять при увеличении числа шагов.
- Необходима четкая документация для событий.

▶️ Ключевые преимущества Saga
🔹Поддержка согласованности данных в распределенных системах.
🔹Масштабируемость, так как транзакции изолированы и выполняются локально.
🔹Гибкость: можно настроить сложные сценарии обработки ошибок.

📌 Когда использовать Saga?
🔹При работе с распределенными системами, где требуется согласованность данных.
🔹Если ваши операции могут быть разделены на независимые шаги.
🔹Когда глобальные транзакции невозможны из-за ограничений системы.

⬇️ А какой подход вам больше по душе: оркестрация или хореография? Делитесь в комментариях!
👍 Лайкните, если этот пост был полезным!

Максим Добрынин | Как стать востребованным Java разработчиком | ex. Jetbulb

23 Jan, 13:28


🤚 "Если бы еще не участвовал на этом проекте, то точно рекомендовал бы это себе"

Именно такими с такими словами нам оставил отзыв Дмитрий Иванов.
Который принял участие в стажировке для Middle разработчиков.

А полноценный отзыв можно посмотреть на скриншоте👆🏻

________________

Стажировка iPrody - это не просто курс и знания, которые вы можете получить из видео на Ютубе. Это в первую очередь полноценное погружение в командную разработку реального проекта на свежем стеке.

Хватит сидеть на проекте со старым стеком, пора врываться в настоящую разработку👇🏻

В результате работы над проектом в группе из 6 человек в течение 3х месяцев вы:

— Освоите современный набор навыков и технологий, которые необходимы для перехода на более высокооплачиваемый проект;
— Получите недостающий опыт работы;
— Разместите готовый проект в портфолио;
— Получите обратную связь и постоянную поддержку от практикующих разработчиков уровня Senior+;

А групповая динамика и коллеги не дадут вам возможности “соскочить” или “забить”.

На февраль осталось всего 2 места в группе Middle.
Задать вопрос и занять месте можно у нашего менеджера

Максим Добрынин | Как стать востребованным Java разработчиком | ex. Jetbulb

22 Jan, 11:41


⚡️Делаем канал понятным для всех

Друзья, мы провели небольшой ребрендинг и сменили название на "Максим Добрынин Как стать востребованным Java разработчиком". Добавляйте канал в закладки и не теряйте😉

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

Уже сейчас готовим новые порции контента на свежие темы, но так же хотим услышать и ваше мнение👇🏻

Поделитесь в комментариях, про что было бы интересно почитать и посмотреть на канале. А мы прибавим вам +100500 к карме🙏🏻

Максим Добрынин | Как стать востребованным Java разработчиком | ex. Jetbulb

22 Jan, 11:40


Channel name was changed to «Максим Добрынин | Как стать востребованным Java разработчиком | ex. Jetbulb»

Максим Добрынин | Как стать востребованным Java разработчиком | ex. Jetbulb

22 Jan, 06:14


🔝Популярные задачи с собеседований: Является ли строка палиндромом

▶️ Кому эта задача подойдет?
Несложная задача проверяющая алгоритмическое мышление, знание структур данных и владение языком программирования используемого при ее реализации, что делает её подходящей для уровня Intern Java Developer и Junior Java Developer.

▶️ Описание
Необходимо реализовать метод, который проверяет, является ли заданная строка палиндромом. Палиндром — это слово, фраза или последовательность символов, которая читается одинаково как слева направо, так и справа налево (игнорируя пробелы, регистр букв и знаки препинания).

▶️ Условия
🔹Игнорировать регистр букв.
🔹Удалить все неалфавитные символы.
🔹Проверить, равна ли строка самой себе, если её прочитать в обратном порядке.

▶️ Чему стоит уделить внимание во время собеседования?
🔹Какова сложность выполнения данного алгоритма?
🔹Как можно улучшить решение, чтобы избежать создания новой строки для сравнения?
🔹Какой подход вы бы использовали, если строка была бы очень длинной?

⬇️ Уже решил эту задачу или есть варианты решения? Пиши в комментариях
👍 Поставь лайк этому посту, если тебе нравятся наш контент

Максим Добрынин | Как стать востребованным Java разработчиком | ex. Jetbulb

21 Jan, 07:10


Шаблон микросервисной архитектуры: Retry

Сегодня поговорим о важном и широко используемом паттерне в микросервисной архитектуре — Retry (повторная попытка). Этот шаблон помогает повысить надежность систем, которые зависят от внешних сервисов и ресурсов.

▶️ Что такое Retry?
Retry — это шаблон, при котором система повторяет выполнение неудачной операции с надеждой на ее успешное завершение. Например, если запрос к внешнему API завершился сбоем из-за временной недоступности, Retry позволяет попробовать выполнить запрос заново.

Пример ситуаций для использования:
- Временные сетевые сбои.
- Перегрузка сервера.
- Временное истощение ресурсов.

▶️ Основные элементы шаблона Retry
🔹Порог количества попыток (Retry Limit):
Ограничивает количество повторных попыток, чтобы избежать бесконечного цикла.
🔹Интервал между попытками (Retry Interval):
Время ожидания перед повторной попыткой.
Например, Fixed Delay (фиксированная задержка) или Exponential Backoff (экспоненциальный рост задержки).
🔹Исключения или ошибки для повторной попытки:
Укажите, какие ошибки должны вызывать повторные попытки, а какие нет (например, сетевые сбои vs. ошибка бизнес-логики).
🔹Контроль завершения:
Система должна уметь завершать попытки, если достигнут предел или если проблема не временная.

▶️ Преимущества Retry
🔹Повышение устойчивости системы к временным сбоям.
🔹Уменьшение количества ошибок из-за нестабильных внешних зависимостей.
🔹Увеличение шансов успешного выполнения операций.

📌 Когда использовать?
🔹При интеграции с внешними API.
🔹Для запросов в распределенных системах, где сбои возможны, но временные.
🔹Для микросервисов, работающих с ненадежными или перегруженными ресурсами.

⬇️ А вы применяли Retry в своих проектах? Поделитесь опытом в комментариях!
👍 Лайкните, если пост был полезен.

Максим Добрынин | Как стать востребованным Java разработчиком | ex. Jetbulb

20 Jan, 16:02


🤚Помогаем начинающим разработчикам стать ближе к офферу своей мечты

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

В результате работы над проектом в течение 3 месяцев, вы:

— Освоите современный набор навыков и технологий, которые необходимы для получения оффера или перехода на более высокооплачиваемый проект;
— Получите недостающий коммерческий опыт разработки;
— Разместите готовый проект в портфолио;
— Получите обратную связь и постоянную поддержку от практикующих разработчиков уровня Senior+;

На проекте используются следующий технологии👇🏻
- Java (последние версии)
- Spring Boot
- Spring Framework (WebFlux, R2DBC, Security, др.)
- Slf4j, Logback, Distributed Logging
- JUnit, AssertJ, Mockito
- Maven, Gradle
- SQL, JPA, Hibernate
- Docker
- Kafka/RabbitMQ
- Microservices


Как устроена стажировка на платформе:

1️⃣ Группа за 3 месяца реализует отдельный сервис в рамках целого проекта.

2️⃣ К каждой группе прикрепляется практикующий разработчик уровня Senior, который выступает ментором, распределяет задачи внутри команды, проводит код ревью и конечно же приходит на помощь в случае, когда появляются вопросы.

3️⃣ Общение в группе происходит на постоянной основе, благодаря чему вы прокачаете навыки командной разработки и свои soft skills.

4️⃣ Группа встречается 3 раза в неделю на митинге по часу, где происходит обсуждение текущих задач, код-ревью и решение вопросов.

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

83% участников практики на платформе iPrody получают оффер в ближайший месяц, после успешной сдачи проекта.

👉🏻 В этом видео можно посмотреть подробнее, как устроена стажировка внутри

💰Есть гарантия возврата денег в течение первых 14-ти дней с начала старта группы. Если за это время вы поймёте, что материалы или формат вам не подходят, просто напишите менеджеру, и мы вернем вам всю сумму обратно👌🏻
_________________________

Уже выпустили более 14 групп практики на нашей платформе

«Проект реально насыщен технологиями и практически каждый митинг ментор рассказывает что-то новое и интересное. А самое главное из всего, это как сказал мой коллега по проекту, что когда ты приходишь на собеседование то ты уже в теме происходящего и чаще всего понимаешь о чем идет речь, а иногда можешь и блеснуть знаниями типо "Вы не используете testcontainers? А когда делаете интеграционные тесты то поднимаете реальную БД вместо моковой через Docker?" И это реально круто для новичка быть в контексте происходящего.

Огромная благодарность за такой опыт и всем с кем я работал эти 3 месяца)»

Игорь
_________________________
«Если кратко подвести итоги:
- курс безусловно добавил мне уверенности
- научил, где то даже через боль😊, искать и находить решение
- правильно работать с критикой
- аргументированно отстаивать свои технические решения

Сразу после курса я прошел первое в своей жизни (в ИТ отрасли, конечно) собеседование. Думаю можно было пройти и получше, но через три дня получил оффер и в ближайшую неделю уже начнется мой долгий путь в разработке ПО!»

Александр

👉🏻 Читать отзывы от других ребят
_________________________
Количество мест строго ограничено, а разлетаются они довольно быстро.


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

Максим Добрынин | Как стать востребованным Java разработчиком | ex. Jetbulb

20 Jan, 07:06


🧑‍💻 Топ горячие клавиши в IntelliJ IDEA

Всем, привет!
Макс вещает 😼


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

▶️ Поиск по всему проекту (Search Everywhere)
- Shift x 2
Позволяет искать классы, файлы, методы и действия.

▶️ Автодополнение кода (Basic Completion)
- Ctrl + Space (Windows/Linux)
- ^Ctrl+ Space (Mac)
Показывает возможные варианты для автодополнения.

▶️ Генерация кода (Code Generation)
- Alt + Insert (Windows/Linux)
- Cmd + N (Mac)
Генерирует геттеры, сеттеры, конструкторы и другие элементы кода.

▶️ Рефакторинг (Refactor This)
- Ctrl + Alt + Shift + T (Windows/Linux)
- ^Ctrl + T (Mac)
Вызов диалога для всех рефакторингов (переименовать, переместить, изменить подпись метода и т.д.).

▶️ Форматирование кода (Reformat Code)
- Ctrl + Alt + L (Windows/Linux)
- Cmd + Option + L (Mac)
Автоматически форматирует код в соответствии с настройками.

▶️ Переход к объявлению тип данных (Go to Declaration or Type)
- Ctrl + B и Ctrl + Shift + В (Windows/Linux)
- Cmd + B и Cmd + Shift+ B (Mac)
Переход к объявлению переменной, метода или класса.

▶️ Запуск и отладка (Run context configuration or Debug context configuration)
- Запуск: Shift + F10 (Windows/Linux), ^Ctrl + R (Mac)
- Отладка: Shift + F9 (Windows/Linux), ^Ctrl + D (Mac)

Эти горячие клавиши — ваше оружие для повышения продуктивности. Используйте их, чтобы работать быстрее и эффективнее! Полный список предопределенных горячих клавиш тут (Win) и тут (MacOS).


Макс Добрынин
Software Engineer

⬇️ А какие комбинации клавиш вы используете чаще всего? Пишите в комментариях!
👍 Если пост был полезен, не забудьте поставить лайк!

Jetbulb | Как стать востребованным Java разработчиком

18 Jan, 16:38


🤚 Как насчет того, чтобы пройти путь от новичка до разработчика всего за 6 месяцев?

И освоить один из самых востребованных языков программирования

Набираем новый поток обучения на курс "Java Enterprise: От новичка до разработчика", который стартует уже в феврале👇🏻

За 6 месяцев вы :
— Освоите все необходимые навыки для старта в профессии;
— Научитесь свободно программировать на популярном языке Java;
— Получите полноценный роудмеп для дальнейшего развития.

Курс подойдет, если вы:
- Новичок в программировании
- Изучаете Java самостоятельно
- Разработчик на другом ЯП

Если у вас есть сомнения, пишите нашему менеджеру, который подскажет насколько для вас актуален курс на данный момент

Часть технологий, которые вы освоите:
- Git
- Java Core
- JUnit
- Maven и Gradle
- SQL
- JPA и Hibernate
- Spring Core
- Spring Data Access
- Spring Web
- Spring Webflux
- Spring Security
- Docker

А так же дополните свое портфолио 5 проектами с использованием микросервисов.

Посмотреть полную программу и список технологий можно 👉🏻 тут

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

Все обучение проходит в мини-группах до 30 человек👇🏻

1. Посещаете онлайн-занятие
2 раза в неделю по 1,5 часа. Преподаватель объясняет материал, отвечает на вопросы и дает обратную связь каждому. Занятие всегда можно пересмотреть в записи.

2. Выполняете домашнее задание
В удобное для вас время и сдаете задание на платформе

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

_________________________

💰Стоимость - всего 600$ за 6 месяцев
Количество мест строго ограничено, успейте занять свое

🌐 Изучить подробнее и оставить заявку можно на странице - iprody.com/courses

Если у вас остались вопросы или вы хотите уточнить информацию - смело пишите нашему менеджеру

Jetbulb | Как стать востребованным Java разработчиком

17 Jan, 07:30


Многопоточное программирование: Atomicity, Visibility, Ordering и Consistency

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

Многопоточные приложения становятся все более распространенными, и разработчики должны быть внимательными к особенностям, связанным с одновременным выполнением нескольких потоков. Java, как и многие другие языки программирования, предоставляет модель памяти, которая регулирует взаимодействие между потоками. В этом посте мы рассмотрим несколько ключевых концепций многопоточного программирования в Java: Atomicity, Visibility, Ordering и Consistency.

▶️ Atomicity (Атомарность)
Атомарность означает, что операции выполняются как единое целое, не разделяясь на более мелкие части. В контексте многопоточного программирования, это означает, что операции выполняются целиком и невозможно видеть промежуточные состояния. В Java, классы из пакета java.util.concurrent.atomic предоставляют примитивы для обеспечения атомарности операций, такие как AtomicInteger и AtomicLong.

▶️ Visibility (Видимость)
Проблемы видимости могут возникнуть, когда один поток вносит изменения в разделяемые данные, и эти изменения не видны другим потокам. Ключевое слово volatile в Java используется для обеспечения видимости изменений переменных между потоками. При использовании volatile, изменения переменной видны всем потокам, что важно для правильной синхронизации.

▶️ Ordering (Упорядоченность)
Упорядоченность определяет порядок выполнения операций в различных потоках. Несоблюдение упорядоченности может привести к непредсказуемому поведению приложения. Синхронизированные блоки и методы в Java гарантируют как атомарность, так и упорядоченность операций.

▶️ Consistency (Согласованность)
Согласованность обеспечивает согласованное состояние разделяемых данных после выполнения операций в различных потоках. Классы из пакета java.util.concurrent предоставляют более высокоуровневые абстракции, такие как Lock и Semaphore, для обеспечения согласованности данных при работе с многопоточностью.

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


⬇️ Как часто тебе приходится сталкиваться с вопросами о многопоточке на собеседованиях? Пиши в комментариях
👍 Поставь лайк этому посту, если тебе нравятся наш контент

Jetbulb | Как стать востребованным Java разработчиком

14 Jan, 15:04


⚡️Осталось 1 свободное место в группе Java Junior

Которая стартует уже в январе

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

Для кого подойдет? 👇🏻

Прошли курсы по Java
Но понимаете, что для получения оффера необходим коммерческий опыт разработки

Изучаете Java самостоятельно
И есть необходимость структурировать свои знания и проверить их на реальном проекте

Находитесь на позиции Java Junior
И хотите брать более сложные и дорогие задачи или претендовать на более высокую позицию

В течении трёх месяцев вы получаете реальный опыт коммерческой разработки и решения поставленных бизнес-задач под внимательным наблюдением и курированием разработчика-практика уровня Senior+.

— Получите недостающий опыт работы;
— Освоите современный набор навыков и технологий, которые требует работодатель;
— Разместите готовый проект в портфолио;
— Получите обратную связь от практикующего разработчика уровня Senior+;

А групповая динамика не дадут вам возможности забить или соскочить😉

Технологии, которые используются на проекте:
- Java (последние версии)
- Spring Boot
- Spring Framework (WebFlux, R2DBC, Security, др.)
- Slf4j, Logback, Distributed Logging
- JUnit, AssertJ, Mockito
- Maven, Gradle
- SQL, JPA, Hibernate
- Docker
- Kafka/RabbitMQ
- Microservices

Уже выпустили 14 команд и 83% ребят, которые успешно проходят стажировку на платформе iPrody - получают оффер в первый же месяц.

Для участия необходимо пройти тест на 15-20 минут, на основании которого мы подскажем насколько вы готовы к прохождению практики.

А в этом видео можно посмотреть подробнее, как устроена стажировка внутри

__________

Чтобы занять место пишите нашему менеджеру

Подробная информация о платформе на официальной странице https://iprody.com/training-center

Jetbulb | Как стать востребованным Java разработчиком

13 Jan, 07:10


🔬 Учимся понимать микросервисы и рассказывать о них

Всем, привет!
Макс вещает 😼

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

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

0️⃣могут независимо разворачиваться
1️⃣слабо связаны между собой
2️⃣организованы вокруг единой бизнес-логики
3️⃣принадлежат небольшой команде


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

Ключевые элементы микросервисной архитектуры:

0️⃣ Автономность
Каждый компонент службы в архитектуре микросервисов можно разрабатывать, развертывать, эксплуатировать и масштабировать, не влияя на функционирование других служб. Сервисам не нужно делиться своим кодом или реализацией с другими сервисами. Любая связь между отдельными компонентами происходит через четко определенные API.

1️⃣ Специализация
Каждый сервис ориентирован на решение конкретной задачи. Если со временем разработчики добавляют в приложение больше кода и сервис становится сложным, его нужно разбить на более мелкие сервисы.

2️⃣ Ловкость
Микросервисы способствуют организации небольших независимых команд, которые берут на себя ответственность за их услуги. Команды действуют в небольшом и хорошо понятном контексте и имеют возможность работать более независимо и быстрее. Это сокращает время цикла разработки.

3️⃣ Устойчивость
Независимость сервисов повышает устойчивость приложения к сбоям. В монолитной архитектуре отказ одного компонента может привести к сбою всего приложения. С помощью микросервисов приложения справляются с полным отключением службы не приводя к падению всего приложения.

Макс Добрынин
Software Engineer

⬇️ А как бы ты рассказывал о микросервисах? Пиши в комментариях.
👍 Ставь лайк этому посту, если тебе нравятся наш контент и находишь его полезным.

Jetbulb | Как стать востребованным Java разработчиком

11 Jan, 11:48


💡Микросервисы и системный дизайн. Что такое Helthcheck API и зачем он нужен?

Разбираем Helthcheck API вместе с Максом Добрыниным

🌐 Смотрите полный выпуск на канале Jetbulb
И не забудь подписаться😉

___________________
Курс по Java | Тренинг-центр | Задать вопрос менеджеру

Jetbulb | Как стать востребованным Java разработчиком

10 Jan, 13:10


🤚 Новый отзыв о прохождении стажировки в группе уровня Middle

"В группе было интересно работать.
Подстегивало то что кто-то закрывает задачи быстрее и хотелось не отставать сильно от общей тенденции.

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

В конце концов группой доволен и получил большой опыт в новых технологиях и заполнил пробелы в знаниях💪🏻
"

Отзыв предоставил - Акыл
_____________________________
Если хочешь получить новый опыт в новых технологиях, то ждем тебя в ближайшей группе👇🏻

Подробная информация о стажировке на официальной странице.
Задать свой вопрос всегда можно напрямую менеджеру.

#отзывы_iPrody

___________________
Курс по Java | Тренинг-центр | Задать вопрос менеджеру

Jetbulb | Как стать востребованным Java разработчиком

09 Jan, 10:01


Подборка популярных вопросов о микросервисах на любой уровень квалификации

Всем, привет!
Макс вещает 😼

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

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

▶️ Что такое микросервисная архитектура и как она отличается от монолитной?
▶️ Какие преимущества и недостатки микросервисной архитектуры?
▶️ Какие основные принципы проектирования микросервисов?
▶️ Какие фреймворки для разработки микросервисов с использованием Java вы знаете?
▶️ Расскажите о Spring Cloud и его роли в разработке микросервисов?
▶️ Что такое API Gateway и зачем он нужен в микросервисной архитектуре?
▶️ Какие стратегии обработки запросов используются для обеспечения связности между микросервисами?
▶️ Как реализовать обработку транзакций в распределенной микросервисной среде?
▶️ Какие шаблоны проектирования часто используются в микросервисах?
▶️ Объясните шаблон Circuit Breaker и как он применяется в микросервисах
▶️ Что такое Event Sourcing и CQRS, и как они могут быть полезными в микросервисной архитектуре?
▶️ Какие инструменты для мониторинга и трассировки вы использовали в микросервисных приложениях?
▶️ Как обеспечить безопасность и отладку микросервисов в продакшн среде?
▶️ Какие виды тестирования важны для микросервисов?
▶️ Как организовать тестирование взаимодействия микросервисов?
▶️ Как обеспечить безопасность данных при тестировании микросервисов?
▶️ Как происходит масштабирование микросервисов?
▶️ Как управлять конфигурацией микросервисов в динамической среде?
▶️ Расскажите о принципах blue-green и canary развертывания в микросервисах


Макс Добрынин
Software Engineer

⬇️ На все ответил? А какие вопросы добавил бы ты? Пиши в комментариях.
👍 Ставь лайк этому посту, если тебе нравятся наш контент и находишь его полезным.

Jetbulb | Как стать востребованным Java разработчиком

07 Jan, 07:10


Изучаем Hibernate: Разбираемся с отложенной загрузкой (Lazy Loading)

Недавно пролетел квиз о JPA и Hibernate. Тема очень важная, поскольку базы данных применяются повсеместно. Однако, очень часто реализованные решения не такие эффективные как бы того хотелось. Еще хуже, когда дело доходит до негативного опыта на стороне конечного пользователя.

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

Ключевые моменты:

▶️ Определение отложенной загрузки - это механизм, который позволяет Hibernate загружать данные из базы данных только в тот момент, когда они действительно нужны. Это поведение оптимизирует производительность приложения, уменьшая количество избыточных запросов к базе данных

▶️ Как это работает? Когда сущность связана с другой сущностью (например, при использовании отношений "один ко многим" или "многие ко многим"), Hibernate может отложить загрузку связанных данных до того момента, когда эти данные реально потребуются приложению. То есть, когда будет непосредственное обращение к этим данных. До тех пор, будет использоваться специальная Proxy имитирующая объект

▶️ Преимущества отложенной загрузки
- Эффективное использование ресурсов. Загружаются только те данные, которые действительно нужны, что приводит к экономии ресурсов и улучшает производительность.
- Более быстрая инициализация объектов. Позволяет быстро загружать объекты без необходимости извлекать связанные с ними данные

▶️ Работа с Lazy Loading в Hibernate
- Настройка в отношениях. Разработчики могут настраивать отложенную загрузку, используя аннотации или XML-конфигурации в зависимости от предпочтений, поколения проекта или условий на этом проекте
- Проактивная загрузка. Иногда требуется принудительно загрузить связанные данные до того, как они будут запрошены. Hibernate предоставляет способы для реализации этого подхода

▶️ Проблема N+1. При неправильном использовании, отложенная загрузка может привести к проблеме N+1, когда для каждого объекта в коллекции выполняется дополнительный запрос к базе данных

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


⬇️ А ты уже сталкивался с проблемой N+1? Пиши в комментариях
👍 Поставь лайк этому посту, если тебе нравятся наш контент

Jetbulb | Как стать востребованным Java разработчиком

04 Jan, 08:11


🧑‍💻 Методы класса String, которые каждый разработчик должен знать

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

▶️ length(). Возвращает длину строки.

2️⃣ charAt(int index). Возвращает символ по указанному индексу.

▶️ substring(int beginIndex, int endIndex). Извлекает подстроку между указанными индексами.

▶️ indexOf(String str) и lastIndexOf(String str). Находят первое и последнее вхождение подстроки.

▶️ equals(Object obj) и equalsIgnoreCase(String str). Сравнивают строки.

▶️ toUpperCase() и toLowerCase(). Преобразуют строку в верхний или нижний регистр.

▶️ trim(). Удаляет пробелы в начале и конце строки.

▶️ split(String regex). Разделяет строку на массив строк по указанному разделителю.

▶️ replace(CharSequence target, CharSequence replacement). Заменяет все вхождения одной подстроки на другую.

▶️ contains(CharSequence s). Проверяет, содержится ли подстрока в строке.

▶️ startsWith(String prefix) и endsWith(String suffix). Проверяют, начинается или заканчивается ли строка с указанной подстроки.

▶️ join(CharSequence delimiter, CharSequence... elements). Объединяет элементы с указанным разделителем.

▶️ isEmpty() и isBlank():
- isEmpty() — проверяет, пустая ли строка.
- isBlank() — проверяет, состоит ли строка только из пробелов.


⬇️ А какие методы String вы используете чаще всего? Напишите в комментариях!
👍 Лайк, если пост был полезным!

Jetbulb | Как стать востребованным Java разработчиком

03 Jan, 06:57


🔝 Популярные вопросы o многопоточности для Junior и Middle

0️⃣ Что такое поток (Thread) в Java?

1️⃣ Как создать поток в Java?

2️⃣ Что такое синхронизация? Почему она важна?

3️⃣ Что такое состояние гонки (Race Condition)?

4️⃣ Чем отличается synchronized от Lock?

5️⃣ Что такое volatile?

6️⃣ Чем отличается wait() от sleep()?

7️⃣ Что такое Callable и чем он отличается от Runnable?

8️⃣ Что такое пул потоков (Thread Pool)?

9️⃣ Что такое ThreadLocal?

Многопоточность — сложная, но очень важная тема в Java-разработке. Даже для Junior важно не просто знать теорию, но и иметь практический опыт.

⬇️ А какие вопросы про многопоточность вас застали врасплох? Делитесь в комментариях!
👍 Лайк, если пост был полезным!

Jetbulb | Как стать востребованным Java разработчиком

02 Jan, 11:05


Как работает Healthcheck API? | Разбираем микросервисы | Шаблоны МСА | Системный дизайн

Новое видео уже на канале

Микросервисы — это сердце современных распределенных систем, и Healthcheck API играет ключевую роль в их надежности.

В этом видео Макс Добрынин, ведущий разработчик и Engineering Lead Payment Systems, подробно расскажет:

- Что такое Healthcheck API и как он обеспечивает стабильность микросервисов.
- Как правильно проектировать Healthcheck API для мониторинга и диагностики.
- Какие шаблоны и лучшие практики МСА помогут создать отказоустойчивую архитектуру.
- Как эти концепции применяются в реальных системах.

Не пропустите возможность прокачать свои навыки в области микросервисов и архитектуры!

Погнали!

Jetbulb | Как стать востребованным Java разработчиком

31 Dec, 13:09


Дорогие друзья и коллеги по коду 👋🏻

От лица Максима Добрынина и всей команды Jetbulb, поздравляем вас с наступающим Новым Годом.

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

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

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

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

🎄🎉 С новым годом, друзья! Пусть ваш стэк технологий всегда будет полон, а стек вызовов — чистым и понятным.

        
*
*o*
*o@o*
*o@*@o*
*o@*@o@o*
*o@*@o@o@o*
*o@*@o@o@o@o*
*o@*@o@o@o@o@o*
*****************
|||
|||

Jetbulb | Как стать востребованным Java разработчиком

30 Dec, 11:57


🎄Специальные условия на участие в курсе Java Enterprise: от новичка до разработчика

В честь новогодних праздников команда iPrody подготовила для вас специальные условия для участия в курсе Java Enterprise.

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

Напоминаем, что такое Java Enterprise👇🏻

Курс Java Enterprise “От новичка до разработчика” стартует уже в январе.
Взяли лучшее от курсов, добавили практики и сделали максимально удобный формат. Вы будете изучать только востребованные на рынке технологии, которые необходимы для успешного трудоустройства👇🏻

За 6 месяцев вы пройдете путь от новичка в программировании, до уверенного Java Junior:
— Освоите все необходимые навыки для старта в профессии;
— Научитесь свободно программировать на популярном языке Java;
— Получите полноценный роудмеп для дальнейшего развития.

Курс подойдет, если вы:
- Новичок в программировании
- Изучаете Java самостоятельно
- Разработчик на другом ЯП

Часть технологий, которые вы освоите:
- Git
- Java Core
- JUnit
- Maven и Gradle
- SQL
- JPA и Hibernate
- Spring Core
- Spring Data Access
- Spring Web
- Spring Webflux
- Spring Security
- Docker

Посмотреть полную программу и список технологий можно тут

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

1. Посещаете онлайн-занятие
2 раза в неделю по 1,5 часа. Преподаватель объясняет материал, отвечает на вопросы и дает обратную связь каждому. Занятие всегда можно пересмотреть в записи.

2. Выполняете домашнее задание
В удобное для вас время и сдаете задание на платформе

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

_______________

Дорога в новую профессию начинается с первого шага 😉

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

Или оставляйте заявку на сайте - https://iprody.com/

Jetbulb | Как стать востребованным Java разработчиком

29 Dec, 07:32


💡JavaScript - самый популярный язык программирования?

Разбираемся с трендами уходящего года вместе с Максом Добрыниным

🌐 Смотри видео на YouTube
И не забудь подписаться😉

👍 Смотрите полный выпуск на канале Jetbulb

___________________
Курс по Java | Тренинг-центр | Задать вопрос менеджеру

Jetbulb | Как стать востребованным Java разработчиком

27 Dec, 14:48


😲Контракт Equals and HashCode в Java

▶️ Что такое контракт Equals and HashCode?
Java требует, чтобы при переопределении методов equals() и hashCode() были соблюдены определенные правила:

🔹Если два объекта равны согласно методу equals(), то их hashCode() также должен быть равным. Это важно для работы коллекций, таких как HashMap и HashSet.

🔹Если два объекта имеют одинаковый hashCode(), это не гарантирует, что они равны по equals(). Но это снижает вероятность коллизий в хэш-таблицах.

🔹Метод equals() должен быть:
- Рефлексивным: x.equals(x) всегда true.
- Симметричным: если x.equals(y)true, то и y.equals(x)true.
- Транзитивным: если x.equals(y) и y.equals(z), то x.equals(z).
- Консистентным: если объекты не меняются, результат вызова x.equals(y) остаётся неизменным.
- Возвращать false, если объект сравнивается с null.

▶️ Почему контракт так важен?
🔹Коллекции HashMap, HashSet, Hashtable. Эти коллекции используют hashCode() для быстрого доступа к объектам. Если вы неправильно переопределите equals() и hashCode(), вы рискуете столкнуться с некорректным поведением, например, объект не найдётся или не добавится.

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

▶️ Пример реализации Equals и HashCode.
Предположим, у нас есть класс Person с полями id и name.
import java.util.Objects;
public class Person {
private int id;
private String name;
public Person(int id, String name) {
this.id = id;
this.name = name;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return id == person.id && Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(id, name);
}
}



Распространённые ошибки
- Переопределили equals(), но забыли про hashCode().
В результате ваш объект может добавляться в коллекцию, но потом не находиться.
- Сравнение не на основе ключевых полей.
Например, сравнивать объекты Person только по имени, игнорируя идентификатор.
- Изменяемые поля в equals() и hashCode().
Если поля, участвующие в вычислении hashCode, изменяются, объект может стать "невидимым" для коллекций.


⬇️ А как вы реализуете equals() и hashCode()? Делитесь примерами и лайфхаками в комментариях!
👍 Лайк, если пост был полезным!

___________________
Курс по Java | Тренинг-центр | Задать вопрос менеджеру

Jetbulb | Как стать востребованным Java разработчиком

27 Dec, 08:56


🎄Возьмем начинающего Java разработчика на стажировку на платформе iPrody на специальных условиях до Нового Года

Друзья, освободилось 1 место в группе Java Junior

В результате работы над проектом в течение 3 месяцев, вы:

— Освоите современный набор навыков и технологий, которые необходимы для получения оффера или перехода на более высокооплачиваемый проект;
— Получите недостающий коммерческий опыт разработки;
— Разместите готовый проект в портфолио;
— Получите обратную связь и постоянную поддержку от практикующих разработчиков уровня Senior+;

На проекте используются следующий технологии:
- Java (последние версии)
- Spring Boot
- Spring Framework (WebFlux, R2DBC, Security, др.)
- Slf4j, Logback, Distributed Logging
- JUnit, AssertJ, Mockito
- Maven, Gradle
- SQL, JPA, Hibernate
- Docker
- Kafka/RabbitMQ
- Microservices


Подробнее в данном посте

А отзывы ребят можно посмотреть тут

Подробная информация о платформе на официальной странице https://iprody.com/.

👉🏻 Места в группе разлетаются довольно быстро, поэтому смело пиши менеджеру и бронируй за собой место

Jetbulb | Как стать востребованным Java разработчиком

26 Dec, 08:03


🔝 Популярные вопросы o Spring Framework для Junior и Middle


0️⃣ Как работает Spring Event Listener?


1️⃣ Как устроен Spring IoC Container?


2️⃣ Какие есть виды Bean Scope в Spring?


3️⃣ Как работает аннотация @Component?


4️⃣ Что такое Spring AOP (Aspect-Oriented Programming)?


5️⃣ Как работает аннотация @Transactional?


6️⃣ Что такое Spring Boot и какие его главные задачи?


7️⃣ Как работает Spring MVC? Опишите DispatcherServlet.


8️⃣ Чем отличается RestTemplate от WebClient?


9️⃣ Что такое BeanPostProcessor и для чего он нужен?



⬇️ А какие вопросы вас застали врасплох на собеседованиях? Делитесь в комментариях!
👍 Лайк, если этот список был полезным!

Jetbulb | Как стать востребованным Java разработчиком

25 Dec, 07:02


Когда и зачем нужно использовать метод `valueOf` у скалярных типов данных в Java?

▶️ Что такое метод valueOf?
Метод valueOf — это статический метод, который позволяет конвертировать строку (или другой входной параметр) в объект соответствующего скалярного типа (например, Integer, Double, Boolean и т.д.).

▶️ Как работает valueOf?
На примере базовых скалярных типов:
Integer intVal = Integer.valueOf("123");
Double doubleVal = Double.valueOf("3.14");
Boolean boolVal = Boolean.valueOf("true");

Метод анализирует входной параметр, создаёт или возвращает значение соответствующего типа.

▶️ Когда нужно использовать valueOf?
🔹Для конвертации строки в объект обёртки.
Например, если вам необходимо преобразовать строку в значение числового или логического типа:
Integer number = Integer.valueOf("456"); // Преобразует строку в Integer
Boolean flag = Boolean.valueOf("true"); // Преобразует строку в Boolean

🔹При использовании кэша классов-обёрток.
Для типов Integer, Long, Short, Byte, Boolean, метод valueOf использует кэширование значений. Это делает его более эффективным, чем использование конструктора.
Например:
Integer a = Integer.valueOf(127);
Integer b = Integer.valueOf(127);
System.out.println(a == b); // true, ссылки одинаковые, значение кэшируется.

🔹Для оптимизации памяти.
Если вы создаёте большое количество однотипных объектов (например, в цикле), valueOf позволяет экономить память за счёт кэша.

▶️ Когда лучше НЕ использовать valueOf?
🔸Для чисел вне диапазона кэша.
Если значение выходит за пределы диапазона кэша (например, Integer от -128 до 127), valueOf создаёт новый объект:
Integer a = Integer.valueOf(128);
Integer b = Integer.valueOf(128);
System.out.println(a == b); // false, т.к. объекты разные

🔸Если требуется примитивный тип.
Если вам нужен примитивный тип, используйте parseXXX, например:
int number = Integer.parseInt("123"); // Возвращает int, а не Integer


📌 Вывод
Метод `valueOf` — это мощный инструмент для работы с обёртками скалярных типов.
Используйте его для кэширование объектов, контроля над строгостью типов, и для конечно же из-за простоты и использования.

⬇️ А вы знали про кэш в методе valueOf? Пишите в комментариях!
👍 Лайк, если пост был полезным!

Jetbulb | Как стать востребованным Java разработчиком

23 Dec, 14:15


⚡️🤚 Осталось всего 2 места в группе Java Middle на январь

Не упустите возможность попасть в команду сильных разработчиков и:

— Освоить современный набор навыков и технологий, которые необходимы для перехода на более высокооплачиваемый проект;
— Получить недостающий опыт работы;
— Разместить готовый проект в портфолио;
— Получить обратную связь и постоянную поддержку от практикующих разработчиков уровня Senior+;

А групповая динамика и коллеги не дадут вам возможности “соскочить” или “забить”.

На проекте используются следующий технологии:
- Java (последние версии)
- Spring Boot
- Spring Framework (WebFlux, R2DBC, Security, др.)
- Slf4j, Logback, Distributed Logging
- JUnit, AssertJ, Mockito
- Maven, Gradle
- SQL, JPA, Hibernate
- Docker
- Kafka/RabbitMQ
- Microservices

Нефункциональные требования:
⁃ Покрытие тестами: unit, integration, e2e
⁃ Обработка не менее 250-запросов в секунду (включая fun-out)
⁃ Масштабируемость
⁃ Высокий уровень доступности
⁃ Трассирование запросов

Архитектура: Микросервисная, 5-сервисов

Тип коммуникации: Синхронный и асинхронный

Как устроена стажировка на платформе:

1️⃣ Группа за 3 месяца реализует отдельный сервис в рамках целого проекта.

2️⃣ К каждой группе прикрепляется практикующий разработчик уровня Senior, который выступает ментором, распределяет задачи внутри команды, проводит код ревью и конечно же приходит на помощь в случае, когда появляются вопросы.

3️⃣ Общение в группе происходит на постоянной основе, благодаря чему вы прокачаете навыки командной разработки и свои soft skills.

4️⃣ Группа встречается 3 раза в неделю на митинге по 1 часe, где происходит обсуждение текущих задач, решение вопросов и постановка новых задач.

В результате за 3 месяца вы реализуете в команде полноценный проект, который даст вам возможность двинуться дальше по карьерной лестнице.
____________________

Все отзывы и ссылки на реальных участников можно найти на сайте https://iprody.com/

Чтобы успеть забронировать место на проекте пишите менеджеру

Jetbulb | Как стать востребованным Java разработчиком

23 Dec, 07:44


Что такое varargs в Java?
Varargs (Variable Arguments) — это синтаксическая возможность в Java (и другхи языков программирования), позволяющая методам принимать переменное количество аргументов. Это особенно удобно, когда мы заранее не знаем, сколько параметров нужно передать в метод. Ключевая особенность: используется специальный синтаксис [тип_данных]... (тип данных и три точки).

▶️ Как работает varargs?
С помощью varargs вы можете объявить метод, который принимает любое количество аргументов одного типа:

▶️ Как это работает под капотом?
- Аргумент int... компилируется как массив int[] numbers.
- При вызове метода Java автоматически собирает переданные аргументы в массив.

▶️ Правила использования
- Varargs должен быть последним параметром метода.
- Можно комбинировать с другими параметрами.
- Может быть лишь один varargs в методе.

▶️ Пример из реальной жизни
Многие методы из стандартной библиотеки Java используют varargs. Например:
- String.format(String format, Object... args)
- Collections.addAll(Collection<? super T> c, T... elements)

Частые ошибки
- Передача null как единственного аргумента. Это приведет к выбросу NPE.
System.out.println(sum(null)); // NullPointerException

- Смешивание типов.
Аргументы должны быть одного типа, иначе компилятор выдаст ошибку.

Varargs — мощный инструмент для создания гибких методов в Java.
Они упрощают код, уменьшают количество перегрузок и делают методы универсальными.

⬇️ А ты уже использовал varargs в своих проектах? Делись опытом в комментариях!
👍 Ставь лайк, если пост был полезным!

Jetbulb | Как стать востребованным Java разработчиком

21 Dec, 16:20


💡ТОП языков программирования за 2024 год

Разбираемся с трендами уходящего года вместе с Максом Добрыниным

🌐 Смотри видео на YouTube
И не забудь подписаться😉

👍 Смотрите полный выпуск на канале Jetbulb

___________________
Курс по Java | Тренинг-центр | Задать вопрос менеджеру

Jetbulb | Как стать востребованным Java разработчиком

20 Dec, 14:09


🤚 Получи реальный опыт решения коммерческих задач на языке Java в Agile команде до 6 человек всего за 3 месяца

Определен старт новых групп стажировки на платформе iPrody на январь 2025.

Планируем набор на 2 уровня: Junior и Middle.

Стажировка подойдет, если вы:

- Хотите получить первый опыт коммерческой разработки для трудоустройства;

- Находитесь на позиции Middle и застряли в рутинных задачах, без возможности изучать новые технологии;

- Хотите получить новые знания и опыт разработки на свежем стеке.

В результате работы над проектом в течение 3 месяцев, вы:

— Освоите современный набор навыков и технологий, которые необходимы для получения оффера или перехода на более высокооплачиваемый проект;
— Получите недостающий коммерческий опыт разработки;
— Разместите готовый проект в портфолио;
— Получите обратную связь и постоянную поддержку от практикующих разработчиков уровня Senior+;

На проекте используются следующий технологии:
- Java (последние версии)
- Spring Boot
- Spring Framework (WebFlux, R2DBC, Security, др.)
- Slf4j, Logback, Distributed Logging
- JUnit, AssertJ, Mockito
- Maven, Gradle
- SQL, JPA, Hibernate
- Docker
- Kafka/RabbitMQ
- Microservices


Как устроена стажировка на платформе:

1️⃣ Группа за 3 месяца реализует отдельный сервис в рамках целого проекта.

2️⃣ К каждой группе прикрепляется практикующий разработчик уровня Senior, который выступает ментором, распределяет задачи внутри команды, проводит код ревью и конечно же приходит на помощь в случае, когда появляются вопросы.

3️⃣ Общение в группе происходит на постоянной основе, благодаря чему вы прокачаете навыки командной разработки и свои soft skills.

4️⃣ Группа встречается 3 раза в неделю на митинге по часу, где происходит обсуждение текущих задач, код-ревью и решение вопросов.

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

83% участников практики на платформе iPrody получают оффер в ближайший месяц, после успешной сдачи проекта

____________________

Отзывы участников стажировки в этом посте

🧾 Для участия необходимо пройти тест на 15-20 минут, на основании которого мы подскажем насколько вы готовы к прохождению практики.

💰Есть гарантия возврата денег в течение первых 14-ти дней с начала старта группы. Если за это время вы поймёте, что материалы или формат вам не подходят, просто напишите менеджеру, и мы вернем вам всю сумму обратно👌🏻

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

Jetbulb | Как стать востребованным Java разработчиком

20 Dec, 09:13


Выбор дополнительных победителей (в количестве 1):

Победитель:
1. Karishowiec (@karishowiec)

Проверить результаты

Jetbulb | Как стать востребованным Java разработчиком

20 Dec, 09:01


🎉 Результаты розыгрыша:

Победитель:
1. Maksym (@maksymdobrynin)

Проверить результаты

Jetbulb | Как стать востребованным Java разработчиком

19 Dec, 09:41


🧑‍💻 Популярная задача на собеседовании: Найти первый неповторяющееся символ в строке

▶️ Условие
Дана строка. Необходимо найти первый символ, который встречается в строке лишь один раз.

▶️ Ожидания от кандидата
- Знание базовых конструкций выбранного языка программирования.
- Эффективное использование структур данных.
- Умение реализовывать и применять эффективные алгоритмы.

📈 Кому бы подошла такая задача?
Интерну и джуниору, оба из которых познают эффективные способы работы с различными
структурами данных.

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

⬇️ Какой сложности выполнения алгоритма удалось добиться тебе? Пиши в комментариях!
👍 Если тебе понравился этот пост, ставь лайк!

Jetbulb | Как стать востребованным Java разработчиком

18 Dec, 12:19


Многопоточность в Java: Различие между Deadlock и Livelock

В многопоточном программировании существует два неприятных явления — Deadlock (взаимная блокировка) и Livelock (живая блокировка). Разберёмся, чем они отличаются, и как можно предотвратить эти ситуации.

▶️ Что такое Deadlock?
Deadlock (взаимная блокировка) — это ситуация, когда два или более потока ожидают доступ ресурсам друг друга и потому не могут продолжить работу.
🔸Когда возникает Deadlock?
- Два потока одновременно захватывают ресурс и ожидают высвобождения противоположного ресурса.
- Несколько потоков блокируют ресурс и ожидают другой ресурс, который уже захвачен другим потоком.
🔹Как избежать Deadlock?
- Всегда захватывайте ресурсы в одном и том же порядке.
- Используйте библиотеки синхронизации.
- Применяйте таймауты при попытке захвата ресурса.

▶️ Что такое Livelock?
Livelock (живая блокировка) — это ситуация, когда потоки не заблокированы, но продолжают менять своё состояние в ответ на действия других потоков. В результате работа потоков не прогрессирует.

🔸Когда возникает Livelock?
- Потоки постоянно реагируют на действия друг друга, но не могут продвинуться вперёд в выполнении своих операций.
- Это похоже на двух человек, которые пытаются пропустить друг друга в дверном проходе, но оба одновременно меняют сторону, и ситуация повторяется бесконечно.

🔹Как избежать Livelock?
- Используйте backoff-стратегии (например, Thread.sleep()), чтобы дать потокам время стабилизироваться.
- Установите случайные приоритеты между потоками, для избежания экслюзивного блокирования ресурса.
- Используйте тайумат во время попытки блокирования ресурсов.


Deadlock — это взаимная блокировка потоков из-за борьбы за ресурсы.
Livelock — это ситуация, когда потоки активно меняют своё состояние реагируя на действия других потоков, но не продвигаются вперёд в выполнении свои собственных операций.

🔗Полезные ссылки
Техническое описание блокировки
Техническое описание Deadlock и Livelock

_______________

Тема многопоточности - многогранна и обязательна к изучению.
Приходи на курс "Java Enterprise: От новичка до разработчика", чтобы разобраться с этим подробнее.

⚡️Старт новой группы уже в январе, количество мест строго ограничено

Курс по Java | Тренинг-центр | Задать вопрос менеджеру

Jetbulb | Как стать востребованным Java разработчиком

17 Dec, 12:30


⚡️ Освободилось 1 место в группе уровня Junior

Отличная возможность занять место на специальных условиях в этом году😉

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

Для кого подойдет? 👇🏻

Прошли курсы по Java
Но понимаете, что для получения оффера необходим коммерческий опыт разработки

Изучаете Java самостоятельно
И есть необходимость структурировать свои знания и проверить их на реальном проекте

Находитесь на позиции Java Junior
И хотите брать более сложные и дорогие задачи или претендовать на более высокую позицию

В течении трёх месяцев вы получаете реальный опыт коммерческой разработки и решения поставленных бизнес-задач под внимательным наблюдением и курированием разработчика-практика уровня Senior+.

— Получите недостающий опыт работы;
— Освоите современный набор навыков и технологий, которые требует работодатель;
— Разместите готовый проект в портфолио;
— Получите обратную связь от практикующего разработчика уровня Senior+;

А групповая динамика не дадут вам возможности забить или соскочить😉

Технологии, которые используются на проекте:
- Java (последние версии)
- Spring Boot
- Spring Framework (WebFlux, R2DBC, Security, др.)
- Slf4j, Logback, Distributed Logging
- JUnit, AssertJ, Mockito
- Maven, Gradle
- SQL, JPA, Hibernate
- Docker
- Kafka/RabbitMQ
- Microservices

Уже выпустили 12 команд и 83% ребят, которые успешно проходят стажировку на платформе iPrody - получают оффер в первый же месяц.

Для участия необходимо пройти тест на 15-20 минут, на основании которого мы подскажем насколько вы готовы к прохождению практики.

А в этом видео можно посмотреть подробнее, как устроена стажировка внутри

______________

Чтобы занять место пишите нашему менеджеру

Подробная информация о платформе на официальной странице https://iprody.com/training-center

Jetbulb | Как стать востребованным Java разработчиком

17 Dec, 08:33


⚡️ Объявляем новый розыгрыш бесплатного технического собеседования с Максом Добрыниным

Условия участия:
1️⃣ быть подписанным на телеграм-канал Jetbulb;
2️⃣ жмакнуть на кнопку "Участвую!" под этим постом;
3️⃣ быть готовым, что собеседование будет выложено на YouTube.

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

Формат технического собеседования можно посмотреть тут

Не упустите возможность проверить знания, попробовать свои силы и получить обратную связь от Макса Добрынина.

Итог розыгрыша подведем уже в эту пятницу (20 декабря).
Удачи🤞🏻

Jetbulb | Как стать востребованным Java разработчиком

16 Dec, 07:11


Работа с памятью в Java. Как возникает OutOfMemoryError

OutOfMemoryError — это ошибка (не исключение), которая происходит, когда JVM не хватает памяти для выделения под новый объект. В отличие от исключений (Exception), это наследник класса Error, и его обработка зачастую требует серьёзных изменений в коде.

▶️ Когда возникает OutOfMemoryError?
Ошибка может возникнуть в нескольких специфических ситуациях, каждая из которых связана с конкретной областью памяти в JVM. Рассмотрим основные причины.

1️⃣ Java Heap Space (Недостаточно памяти в куче)
Причина: Куча (Heap) — это область памяти, где хранятся объекты, созданные через new. Когда в куче не остаётся свободного места, JVM выбрасывает OutOfMemoryError: Java heap space.
🔸Когда это происходит?
- Большое количество больших объектов (например, массивы, коллекции).
- Утечка памяти — объекты больше не нужны, но на них есть ссылки.
- Слишком маленький размер кучи, установленный через -Xmx.
🔹Как исправить?
- Увеличить размер кучи.
- Использовать структуры данных оптимального размера.
- Поиск утечек памяти с помощью инструментов, таких как VisualVM или YourKit.

2️⃣ Metaspace (Метапространство в PermGen)
Причина: Metaspace — это область памяти для хранения метаинформации о классах. С версии Java 8 PermGen был заменён на Metaspace, который выделяется из нативной памяти, а не из Heap.
🔸Когда это происходит?
- Слишком много загруженных классов (например, с помощью ClassLoader).
- Динамическая загрузка классов (например, частая перезагрузка приложений в контейнере).
🔹Как исправить?
- Ограничить размер Metaspace.
- Минимизировать использование кастомных ClassLoader.
- Переработать систему горячей перезагрузки классов в приложении.

3️⃣ GC Overhead Limit Exceeded (Лимит работы GC)
Причина: Garbage Collector (GC) тратит более 98% процессорного времени на сборку мусора, но освобождает менее 2% памяти. JVM понимает, что освобождение памяти становится бесполезным, и идентифицирует GC Overhead Limit Exceeded.
🔸Когда это происходит?
- Циклические ссылки или объекты, которые не могут быть удалены.
- Слишком маленький размер кучи, что заставляет GC работать непрерывно.
🔹Как исправить?
- Увеличить кучу с помощью флага -Xmx.
- Использовать более эффективные коллекции (например, WeakHashMap).
- Анализировать логи GC для поиска проблем.

4️⃣ Direct Buffer Memory (Нехватка прямой памяти)
Причина: Direct Memory — это область памяти вне кучи, выделяемая с помощью NIO ByteBuffer.allocateDirect().
🔸Когда это происходит?
- Слишком много ByteBuffer.allocateDirect().
- Нехватка системной памяти.
🔹Как исправить?
- Ограничить размер Direct Memory с помощью флага -XX:MaxDirectMemorySize=128m.
- Убедиться, что ByteBuffer.clear() вызывается после использования.

5️⃣ Unable to Create New Native Thread
Причина: JVM не может создать новый поток из-за нехватки ресурсов ОС (например, нехватки дескрипторов файлов или ограничения по количеству потоков).
🔸Когда это происходит?
- Приложение создаёт слишком много потоков.
- Нехватка ресурсов операционной системы.
🔹Как исправить?
- Ограничить количество потоков через ExecutorService.
- Проверить лимит потоков в ОС.

⬇️ Какой тип OutOfMemoryError тебе встречался чаще всего? Расскажи о своем в комментариях
👍 Поддержи пост лайком, если было полезно!

___________________
Курс по Java | Тренинг-центр | Задать вопрос менеджеру

Jetbulb | Как стать востребованным Java разработчиком

15 Dec, 06:56


💡Что такое Dirty Write?

Разбираем аномалии в базах данных вместе с Максом Добрыниным

🌐 Смотри видео на YouTube
И не забудь подписаться😉

👍 Смотрите полный выпуск на канале Jetbulb

___________________
Курс по Java | Тренинг-центр | Задать вопрос менеджеру

Jetbulb | Как стать востребованным Java разработчиком

13 Dec, 10:16


Какой язык программирования выбрать в 2025? | Топ языков программирования

Новое видео от Макса Добрынина уже на канале

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

В этом видео Макс Добрынин, ведущий разработчик и Engineering Lead в Payment Systems, делится своим экспертным мнением о том, какие языки будут востребованы в 2025 году.

Вы узнаете:
—  Какие языки программирования будут в топе в 2025 году и почему
—  Какие навыки помогут вам оставаться конкурентоспособным на рынке труда
—  Какой язык лучше выбрать, если вы только начинаете карьеру разработчика

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

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

Погнали!

Jetbulb | Как стать востребованным Java разработчиком

12 Dec, 08:34


🧑‍💻 Преимущества использования Kotlin для backend-проектов

Привет, всем!
Макс вещает 😼

Очень часто меня спрашивают: “Что выбрать для разработки нового back-end проекта Java или Kotlin?”. Ну что же, сегодня разберёмся, почему Kotlin так активно используется для разработки backend-приложений и чем он лучше других языков (в том числе Java).

▶️ Синтаксическая лаконичность
Kotlin позволяет писать меньше кода при той же функциональности. Меньше кода — меньше багов и выше читаемость. В Kotlin попросту меньше шаблонного кода — не нужны геттеры, сеттеры и конструкторы для простых классов.

▶️ Null Safety (Защита от NPE)
В Kotlin есть встроенная защита от NullPointerException, которая обеспечивает надёжность кода. Компилятор Kotlin автоматически контролирует возможные NPE, снижая вероятность ошибок в рантайме.

▶️ Совместимость с Java
Kotlin компилируется в байт-код JVM, поэтому легко интегрируется с Java. Можно вызывать Kotlin-код из Java и наоборот. Вы можете мигрировать с Java на Kotlin поэтапно, не ломая проект.

▶️ Поддержка Coroutines
Коррутины (Coroutines) позволяют выполнять асинхронные операции без блокировки потоков. Коррутины легче и быстрее, чем обычные потоки (threads). Это делает Kotlin подходящим выбором для веб-серверов и микросервисов.

▶️ Поддержка DSL (Domain Specific Language)
Благодаря гибкости синтаксиса, можно создавать собственные мини-языки (DSL) для описания конфигураций и сценариев. Kotlin делает конфигурационные файлы (как build.gradle.kts) более читаемыми и удобными для поддержки.

▶️ Инструменты и экосистема
Kotlin поддерживается всеми основными инструментами разработки:
🔹IntelliJ IDEA — родная IDE для Kotlin.
🔹Gradle — можно использовать build.gradle.kts вместо groovy.
🔹Ktor — фреймворк для создания веб-приложений, разработанный создателями Kotlin (JetBrains).
🔹Spring Boot — полная поддержка Kotlin для микросервисов.

▶️ Поддержка многоплатформенности (Kotlin Multiplatform)
Можно писать один и тот же код для Android, JVM, JavaScript и Native. Один язык — множество платформ. Это делает Kotlin полезным для кросс-платформенной разработки.


По факту Kotlin — это эволюция Java, которая упрощает разработку за счёт лаконичного синтаксиса, защиты от NPE, корутин и поддержки JVM. Kotlin идеально подходит для создания backend-приложений на Spring Boot и Ktor. Он сокращает количество кода, повышает производительность и делает разработку приятной.

🔗Полезные ссылки
Официальная документация Kotlin Coroutines
Официальная документация Kotlin Null Safety
Официальная документация Kotlin Multiplatform
Официальная документация Ktor
Официальная документация Gradle
Официальная документация Spring Boot
Гайд по созданию Kotlin-проекта с Gradle
Гайд по созданию Kotlin-проекта с Spring Boot


Макс Добрынин
Software Engineer

___________________
Курс по Java | Тренинг-центр | Задать вопрос менеджеру

Jetbulb | Как стать востребованным Java разработчиком

11 Dec, 11:40


🤚 Реализуйте 5 полноценных учебных проекта за 6 месяцев и освойте базовые знания одного из самых востребованных языков программирования

Курс Java Enterprise рассчитан на новичков в программировании и начинающих разработчиков. Кроме теории от сильного преподавателя и домашних заданий, вы успеете разработать учебные проекты, которые лягут в основу вашего портфолио разработчика👇🏻

1. Фреймворк для автоматического тестирования кода
2. Реализация инверторной системы
3. Реализация системы резервирования мест в отеле
4. Автоматическое тестирование веб-приложений
5. Реализация и запуск двух микросервисов с участием Docker

Основная цель данного курса - дать практические навыки разработчика, без отрыва от реальности.

За 6 месяцев вы пройдете путь от новичка в программировании, до уверенного Java Junior:
— Освоите все необходимые навыки для старта в профессии;
— Научитесь свободно программировать на популярном языке Java;
— Получите полноценный роудмеп для дальнейшего развития.

Все это проходит в мини-группе с сильным преподавателем.
___________________

⚡️Старт нового потока уже в январе

Уже выпустили более 14 групп практики на нашей платформе, отзывы ребят можно посмотреть на сайте: https://iprody.com/

Сейчас действует сниженная стоимость, всего 100$ за месяц обучения, а так же гарантия возврата 100% средств в случае, если вас что-либо не устроит.

Количество мест строго ограничено и разлетаются они довольно быстро.

🌐 Изучить подробнее и оставить заявку можно на странице - iprody.com/courses

Если у вас остались вопросы или вы хотите уточнить информацию - смело пишите нашему менеджеру

Jetbulb | Как стать востребованным Java разработчиком

10 Dec, 11:46


🚀 Кратко и доступно о неблокирующем алгоритме (Non-Blocking)

Вчера проходил квиз, который был посвящен реактивному программированию в части Spring Framework Webflux используемого для разработки web-приложений. Данный пост прольет свет на основы реализации реактивного подхода.

▶️ Что это вообще такое?
Non-Blocking (неблокирующие) алгоритмы — это такие алгоритмы, при работе которых потоки не блокируются и могут продолжать выполнение других задач, даже если одна из операций ещё не завершена.

В отличие от блокирующих алгоритмов, где поток "замораживается" до получения доступа к ресурсу (например, при использовании synchronized или ReentrantLock), неблокирующие алгоритмы позволяют потоку продолжать выполнение, а доступ к ресурсу регулируется другими способами, чаще всего через спин-блокировки, CAS (Compare-And-Swap) и другие механизмы.

▶️ Ключевые концепции Non-Blocking алгоритмов

🔹CAS (Compare-And-Swap)
- Это атомарная операция процессора. Она сравнивает текущее значение переменной с ожидаемым и, если они равны, заменяет его на новое значение.
- Операция CAS используется, чтобы гарантировать, что изменения переменной произойдут только при отсутствии "гонки данных" (data race).

🔹Спин-блокировки (Spinlocks)
- В отличие от обычных блокировок (synchronized, ReentrantLock), где поток "засыпает", пока ресурс не станет доступен, при спин-блокировке поток активно "крутится" в цикле и проверяет, не освободился ли ресурс.
- Спинлок полезен, если ожидание будет коротким, так как переключение контекста (context switch) занимает больше времени.

🔹Lock-Free и Wait-Free алгоритмы
- Lock-Free алгоритм, в котором по крайней мере один поток всегда завершает свою работу за конечное время, независимо от состояния других потоков.
- Wait-Free более строгая версия Lock-Free, гарантирующая, что каждый поток завершит свою операцию за конечное время.

▶️ Где используются Non-Blocking алгоритмы?
🔹Очереди (Queue) и стеки (Stack)
🔹Счётчики и инкременты
🔹Многопоточные коллекции
🔹Реактивное программирование (Reactive Programming)

▶️ Когда использовать Non-Blocking?
🔹Высоконагруженные системы (например, многопользовательские сервисы, веб-серверы, брокеры сообщений).
🔹Конкурирующие многопоточные приложения (финансовые системы, биржи).
🔹Минимизация переключений контекста (экономия ресурсов процессора).

▶️ Заключение
Non-Blocking алгоритмы позволяют эффективно использовать ресурсы процессора, избегая блокировок и переключений контекста. Основные инструменты — это CAS, Atomic-классы и Lock-Free алгоритмы. Они активно используются в многопоточных коллекциях и реактивных фреймворках.

🔗Полезные ссылки
Официальная документация Spring Framework Webflux
Официальная документация пакета java.util.concurrent от Oracle

⬇️ Используешь ли ты неблокирующие алгоритмы в своих проектах? Делись опытом и задавай вопросы!
👍 Поддержи пост лайком, если было полезно!

Курс по Java | Тренинг-центр | Задать вопрос менеджеру

Jetbulb | Как стать востребованным Java разработчиком

05 Dec, 14:44


💡Зачем нужен Idempotent Consumer?

Разбираем ТОП вопросов про микросервисы вместе с Максом Добрыниным

🌐 Смотри видео на YouTube
И не забудь подписаться😉

👍 Ставь лайк, если хочешь больше контента про микросервисы

Jetbulb | Как стать востребованным Java разработчиком

03 Dec, 11:20


Строки в Java: Класс StringBuilder

▶️ Почему нужен StringBuilder?
В Java строки (String) неизменяемы: при каждой модификации создается новый объект. Это может быть накладно по памяти и времени. StringBuilder — это изменяемая последовательность символов, которая позволяет эффективно изменять строки без создания новых объектов.

▶️ Основные принципы работы
StringBuilder основан на массиве символов (char[]), который динамически расширяется по мере добавления новых данных. Это делает его намного более эффективным при частых изменениях строки.

▶️ Внутреннее устройство
🔹char[] value — массив символов, содержащий текущую строку.
🔹int count — текущее количество символов в массиве.

▶️ Основные методы
🔹append() — добавляет текст в конец.
🔹insert() — вставляет текст в указанную позицию.
🔹delete() — удаляет символы в заданном диапазоне.
🔹reverse() — переворачивает строку.

▶️ Расширение внутреннего массива
Когда объем данных превышает текущую ёмкость массива char[], StringBuilder автоматически расширяет его. Новый массив создается с увеличенной ёмкостью, обычно в 2 раза больше текущего размера.
public StringBuilder append(String str) { 
ensureCapacityInternal(count + str.length());
str.getChars(0, str.length(), value, count);
count += str.length();
return this;
}


▶️ Когда использовать StringBuilder?
🔹Когда требуется частое изменение строки.
🔹Для сложных операций объединения и модификации текста.
🔹В случае, когда важна производительность и потоки не используются.


⬇️ Делитесь своим опытом использования StringBuilder в комментариях!
👍 Поддержи пост, если он был полезен.

Jetbulb | Как стать востребованным Java разработчиком

02 Dec, 08:11


🔝Популярные задачи с собеседований: Найти все пары чисел в массиве, сумма которых равна заданному числу.

▶️ Условия:
🔹Дан массив целочисленный массив и целое число targetSum.
🔹Необходимо найти все уникальные пары чисел, которые в сумме дают targetSum.
🔹Пары чисел должны быть уникальны, то есть [a, b] и [b, a] считаются одной парой.
🔹Сложность выполнения алгоритма не должна превышать O(n).
🔹Минимальный размер массива 100 тыс. элементов.

Пример:
Input: numbers = [2, 4, 3, 7, 1, 5], targetSum = 6  
Output: [[2, 4], [1, 5]]



▶️ Кому бы подошла такая задача?
Эта задача проверяет не только технические знания, но и умение оптимизировать код, правильно управлять памятью и писать чистое решение. Отлично подойдет Middle и Senior разработчикам, которые хотят попрактиковаться в реализации эффективных решений при больших объемах данных.

⬇️ А как бы ты решил эту задачу? Делись мыслями в комментариях!
👍 Поддержи пост, если находишь его полезным.

Jetbulb | Как стать востребованным Java разработчиком

30 Nov, 15:21


🤚 Ищем начинающих разработчиков, которые готовы освоить Java за 6 месяцев

Курс Java Enterprise рассчитан на новичков в программировании и начинающих разработчиков.

Кроме теории от сильного преподавателя и домашних заданий, вы успеете разработать учебные проекты, которые лягут в основу вашего портфолио разработчика👇🏻

1. Фреймворк для автоматического тестирования кода
2. Реализация инверторной системы
3. Реализация системы резервирования мест в отеле
4. Автоматическое тестирование веб-приложений
5. Реализация и запуск двух микросервисов с участием Docker

Основная цель данного курса - дать практические навыки разработчика, без отрыва от реальности.

За 6 месяцев вы пройдете путь от новичка в программировании, до уверенного Java Junior:
— Освоите все необходимые навыки для старта в профессии;
— Научитесь свободно программировать на популярном языке Java;
— Получите полноценный роудмеп для дальнейшего развития.

Все это проходит в мини-группе с сильным преподавателем.
___________________

Уже выпустили более 12 групп практики на нашей платформе, отзывы ребят можно посмотреть на сайте: https://iprody.com/

💰Сейчас действует сниженная стоимость, всего 100$ за месяц обучения, а так же гарантия возврата 100% средств в случае, если вас что-либо не устроит.

Количество мест строго ограничено, а разлетаются они довольно быстро.

👉🏻 Изучить подробнее и оставить заявку можно на странице - iprody.com/courses

Если у вас остались вопросы или вы хотите уточнить информацию - смело пишите нашему менеджеру

Jetbulb | Как стать востребованным Java разработчиком

30 Nov, 10:01


🧑‍💻 Основные различия между Spring JDBC Template и Hibernate (JPA)

Привет, всем!
Макс вещает 😼


Вокруг нас очень большое количество различных фреймворков и библиотек. Не раз мне приходилось видеть негативные результаты неправильного решения, которое приводило к излишним усложнениями системы, долгому анализу причиненных и возникших проблем, а главное бесконечную головную боль и расстройство.
Именно потому, сегодня хочется пролить свет на два популярнейших способа взаимодействия с базами данных в процессе реализации и эксплуатации решений реализованных на Java — Spring JDBC Template и Hibernate.

▶️ Стоит начать с того, что они сильно отличаются по уровню абстракции и функциональности.

Spring JDBC Template работает на низком уровне, предоставляя удобные обертки для работы со стандартным JDBC. Разработчик сам пишет SQL-запросы, а шаблон упрощает управление соединениями и обработку результатов. Например, вы самостоятельно определяете запрос, а затем вручную приводите (mapping) результат выборки в форму объектов Java. Это дает полный контроль над SQL, но требует больше усилий для поддержки и написания кода.

Hibernate, в отличие от Spring JDBC Template, является инструментом ORM (Object-Relational Mapping). Он позволяет работать с базой данных через объекты Java, автоматически генерируя SQL-запросы. Это упрощает работу с данными и снижает количество кода, необходимого для взаимодействия с базой данных. Приведение объектов в форму записи в таблице осуществляется с помощью аннотаций, таких как @Entity и @Table, что минимизирует ручное написание SQL.

▶️ Немаловажным и ключевым отличием является кэширование. Hibernate имеет встроенные механизмы кэширования, которые ускоряют повторные обращения к данным. Spring JDBC Template такого функционал не предоставляет, поэтому для кэширования необходимо использовать сторонние библиотеки.

_________
В плане использования Spring JDBC Template лучше подходит для простых проектов или там, где требуется строгий контроль над SQL-запросами. Hibernate более эффективен в сложных проектах с большим количеством взаимосвязанных сущностей и необходимостью автоматизировать работу с данными.
Таким образом, выбор между этими инструментами зависит от требований проекта: простота и контроль или автоматизация и удобство работы с объектами.

🔗Полезные ссылки
Официальная документация JDBC от Oracle
Официальная документация Spring JDBC Template от Spring Framework
Официальная документация по Hibernate
Официальный справочник пользователя по Hibernate
Техническое описание ORM (Object-relational mapping)

Макс Добрынин
Software Engineer

⬇️ А что бы выбрал ты и главное почему? Пиши о своем опыте в комментариях
👍 Поставь лайк этому посту, если тебе нравятся наш контент

Jetbulb | Как стать востребованным Java разработчиком

29 Nov, 08:12


💡Почему Health Check - это неотъемлемая часть микросервисной архитектуры?

Разбираем ТОП вопросов про микросервисы вместе с Максом Добрыниным

🌐 Смотри видео на YouTube
И не забудь подписаться😉

👍 Ставь лайк, если хочешь больше контента про микросервисы

Jetbulb | Как стать востребованным Java разработчиком

28 Nov, 07:11


⚡️ Последнее место в группе Java Junior на декабрь

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

Для кого подойдет? 👇🏻

Прошли курсы по Java
Но понимаете, что для получения оффера необходим коммерческий опыт разработки

Изучаете Java самостоятельно
И есть необходимость структурировать свои знания и проверить их на реальном проекте

Находитесь на позиции Java Junior
И хотите брать более сложные и дорогие задачи или претендовать на более высокую позицию

В течении трёх месяцев вы получаете реальный опыт коммерческой разработки и решения поставленных бизнес-задач под внимательным наблюдением и курированием разработчика-практика уровня Senior+.

— Получите недостающий опыт работы;
— Освоите современный набор навыков и технологий, которые требует работодатель;
— Разместите готовый проект в портфолио;
— Получите обратную связь от практикующего разработчика уровня Senior+;

А групповая динамика не дадут вам возможности забить или соскочить😉

Технологии, которые используются на проекте:
- Java (последние версии)
- Spring Boot
- Spring Framework (WebFlux, R2DBC, Security, др.)
- Slf4j, Logback, Distributed Logging
- JUnit, AssertJ, Mockito
- Maven, Gradle
- SQL, JPA, Hibernate
- Docker
- Kafka/RabbitMQ
- Microservices

Уже выпустили 12 команд и 83% ребят, которые успешно проходят стажировку на платформе iPrody - получают оффер в первый же месяц.

Для участия необходимо пройти тест на 15-20 минут, на основании которого мы подскажем насколько вы готовы к прохождению практики.

А в этом видео можно посмотреть подробнее, как устроена стажировка внутри

______________

Любой вопрос всегда можно написать нашему менеджеру

Осталось всего 1 место на декабрь, поэтому оставляйте заявку на сайте и бронируйте за собой место👇🏻

Подробная информация о платформе на официальной странице https://iprody.com/training-center

Jetbulb | Как стать востребованным Java разработчиком

27 Nov, 14:12


Основные операции Java Stream API, которые необходимо знать

Java Stream API — это мощный инструмент для работы с коллекциями данных, позволяющий писать лаконичный, читабельный и функциональный код. Основные операции Stream API делятся на промежуточные (intermediate) и терминальные (terminal).

▶️ Промежуточные операции (Intermediate Operations):
🔹filter — фильтрация элементов на основе заданного условия.
🔹map — преобразование каждого элемента.
🔹flatMap — разворачивание вложенных коллекций.
🔹sorted — сортировка элементов.
🔹distinct — удаление дубликатов.
🔹peek — выполнение действия над каждым элементом (например, для отладки).

▶️ Терминальные операции (Terminal Operations):
🔹collect — преобразование потока в коллекцию или другую структуру данных.
🔹forEach — выполнение действия для каждого элемента.
🔹reduce — агрегирование элементов в одно значение.
🔹findFirst / findAny — возвращает первый или любой элемент потока.
🔹anyMatch, allMatch, noneMatch — проверка условий.
🔹count — подсчет количества элементов.
🔹toArray — преобразование потока в массив.

🔗Полезные ссылки
Официальная документация Stream API от Oracle

Jetbulb | Как стать востребованным Java разработчиком

26 Nov, 14:47


⚡️🤚 Осталось 1 место в группе Java Middle

Не упустите возможность попасть в команду сильных разработчиков и:

— Освоить современный набор навыков и технологий, которые необходимы для перехода на более высокооплачиваемый проект;
— Получить недостающий опыт работы;
— Разместить готовый проект в портфолио;
— Получить обратную связь и постоянную поддержку от практикующих разработчиков уровня Senior+;

А групповая динамика и коллеги не дадут вам возможности “соскочить” или “забить”.

На проекте используются следующий технологии:
- Java (последние версии)
- Spring Boot
- Spring Framework (WebFlux, R2DBC, Security, др.)
- Slf4j, Logback, Distributed Logging
- JUnit, AssertJ, Mockito
- Maven, Gradle
- SQL, JPA, Hibernate
- Docker
- Kafka/RabbitMQ
- Microservices

Нефункциональные требования:
⁃ Покрытие тестами: unit, integration, e2e
⁃ Обработка не менее 50-запросов в секунду (включая fun-out)
⁃ Масштабируемость
⁃ Высокий уровень доступности
⁃ Трассирование запросов

Архитектура: Микросервисная, 5-сервисов

Тип коммуникации: Синхронный и асинхронный

Как устроена стажировка на платформе:

1️⃣ Группа за 3 месяца реализует отдельный сервис в рамках целого проекта.

2️⃣ К каждой группе прикрепляется практикующий разработчик уровня Senior, который выступает ментором, распределяет задачи внутри команды, проводит код ревью и конечно же приходит на помощь в случае, когда появляются вопросы.

3️⃣ Общение в группе происходит на постоянной основе, благодаря чему вы прокачаете навыки командной разработки и свои soft skills.

4️⃣ Группа встречается 3 раза в неделю на митинге по 1 часe, где происходит обсуждение текущих задач, решение вопросов и постановка новых задач.

В результате за 3 месяца вы реализуете в команде полноценный проект, который даст вам возможность двинуться дальше по карьерной лестнице.
________________________

Все отзывы и ссылки на реальных участников можно найти на сайте https://iprody.com/

Чтобы успеть забронировать место на проекте пишите менеджеру

Jetbulb | Как стать востребованным Java разработчиком

26 Nov, 11:57


▶️ Пример реализации шаблона проектирования Bridge в Java

🔹Определение интерфейса
public interface Renderer {
void renderCircle(float radius);
void renderSquare(float sideLength);
}


🔹Создание реализаций интерфейса
public class VectorRenderer implements Renderer {
@Override
public void renderCircle(float radius) {
System.out.println("Drawing a circle with radius " + radius + " using Vector rendering.");
}

@Override
public void renderSquare(float sideLength) {
System.out.println("Drawing a square with side length " + sideLength + " using Vector rendering.");
}
}

public class RasterRenderer implements Renderer {
@Override
public void renderCircle(float radius) {
System.out.println("Drawing a circle with radius " + radius + " using Raster rendering.");
}

@Override
public void renderSquare(float sideLength) {
System.out.println("Drawing a square with side length " + sideLength + " using Raster rendering.");
}
}


🔹Создание абстракции
public abstract class Shape {
protected Renderer renderer;

public Shape(Renderer renderer) {
this.renderer = renderer;
}

public abstract void draw();
public abstract void resize(float factor);
}


🔹Создание реализаций абстракции
public class Circle extends Shape {
private float radius;

public Circle(Renderer renderer, float radius) {
super(renderer);
this.radius = radius;
}

@Override
public void draw() {
renderer.renderCircle(radius);
}

@Override
public void resize(float factor) {
radius *= factor;
}
}

public class Square extends Shape {
private float sideLength;

public Square(Renderer renderer, float sideLength) {
super(renderer);
this.sideLength = sideLength;
}

@Override
public void draw() {
renderer.renderSquare(sideLength);
}

@Override
public void resize(float factor) {
sideLength *= factor;
}
}


🔹Использование Bridge
public class Main {
public static void main(String[] args) {
Renderer vectorRenderer = new VectorRenderer();
Renderer rasterRenderer = new RasterRenderer();

Shape circle = new Circle(vectorRenderer, 5);
circle.draw();
circle.resize(2);
circle.draw();

Shape square = new Square(rasterRenderer, 4);
square.draw();
square.resize(3);
square.draw();
}
}


▶️ Вывод программы
Drawing a circle with radius 5.0 using Vector rendering.
Drawing a circle with radius 10.0 using Vector rendering.
Drawing a square with side length 4.0 using Raster rendering.
Drawing a square with side length 12.0 using Raster rendering.

Jetbulb | Как стать востребованным Java разработчиком

26 Nov, 11:57


Шаблон проектирования в Java. Bridge (Мост)

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

▶️ Когда использовать Bridge?
Bridge используется, если:
🔹У вас есть иерархии классов, которые необходимо разделить для упрощения поддержки и масштабирования.
🔹Абстракция и реализация имеют разные причины для изменения.
🔹Вы хотите избежать жесткой связи между абстракцией и её реализацией.
Пример: Нужно создать графический интерфейс с разными формами (круг, квадрат) и их реализациями (2D и 3D). Вместо создания всех возможных комбинаций классов, мы можем отделить формы от их реализации.

▶️Как работает Bridge?
🔹Абстракция (Abstraction). Высокоуровневый интерфейс, который использует объект реализации для выполнения своих задач.
🔹Реализация (Implementation). Низкоуровневый интерфейс, который абстракция использует для выполнения операций.
🔹Конкретные реализации. Конкретные классы, реализующие интерфейс реализации.

▶️Преимущества Bridge
🔹Уменьшение связности. Абстракция и реализация могут изменяться независимо.
🔹Гибкость. Удобно добавлять новые реализации или расширять абстракцию.
🔹Пониженная сложность. Избегается экспоненциальный рост количества классов при комбинациях.

▶️Недостатки Bridge
🔹Увеличение кода. Появляется больше интерфейсов и классов.
🔹Сложность начальной настройки. Требуется больше времени на проектирование.

Шаблон Bridge идеально подходит для случаев, когда вы хотите разделить сложные взаимосвязанные иерархии классов. Это упрощает поддержку, тестирование и масштабирование кода, что особенно актуально в крупных проектах.

⬇️ Постом ниже можно изучить варианты реализации шаблона проектирования Bridge

Jetbulb | Как стать востребованным Java разработчиком

25 Nov, 08:17


Все об аномалиях в базах данных за 12 минут | Параллельные транзакции в БД

Новое видео уже на канале

Макс Добрынин подробно разбирает одну из самых важных тем для разработчиков — аномалии в базах данных и параллельные транзакции. Эти знания не только помогают создавать надежные системы, но и часто являются ключевым пунктом на технических собеседованиях!

В этом видео вы узнаете:
- Что такое аномалии в базах данных и почему их важно понимать;
- При каких условиях аномалии проявляются при параллельных транзакциях;
- Детальный разбор популярных аномалий с иллюстрациями.

Если вы готовитесь к собеседованию на позицию разработчика или просто хотите укрепить свои знания в области работы с базами данных, бегом смотреть новое видео👇🏻

Jetbulb | Как стать востребованным Java разработчиком

23 Nov, 11:04


💡Как API Gateway упрощает взаимодействие с микросервисами?

Разбираем ТОП вопросов про микросервисы вместе с Максом Добрыниным

🌐 Смотри видео на YouTube
И не забудь подписаться😉

👍 Ставь лайк, если хочешь больше контента про микросервисы

Jetbulb | Как стать востребованным Java разработчиком

22 Nov, 09:18


🍃Spring Framework: Bean Scope — различие между Singleton и Prototype

В Spring Framework Bean Scope определяет жизненный цикл и область действия бина. Самые популярные области действия (scopes) — это Singleton и Prototype. Рассмотрим их ключевые различия, особенности и примеры использования.

0️⃣ Singleton Scope
Singleton — это область действия по умолчанию в Spring. Это означает, что для каждого контейнера Spring (ApplicationContext) создается только один экземпляр бина. Этот экземпляр используется повторно при каждом обращении.

▶️ Ключевые особенности
🔹Один экземпляр на контейнер Spring.
🔹Экземпляр создается при запуске контейнера (по умолчанию — eager initialization).
🔹Подходит для статических ресурсов или объектов, не зависящих от состояния.

▶️ Пример конфигурации
@Component
@Scope("singleton")
public class SingletonBean {
public SingletonBean() {
System.out.println("Singleton Bean создан");
}
}


1️⃣ Prototype Scope
Prototype — это область действия, при которой Spring создает новый экземпляр бина при каждом запросе о внедрении.

▶️ Ключевые особенности:
🔹Каждый вызов getBean() возвращает новый экземпляр.
🔹Подходит для объектов, зависящих от состояния или с коротким жизненным циклом.
🔹Контейнер Spring не управляет полным жизненным циклом бина (например, не вызывает destroy()).

▶️ Пример конфигурации:
@Component
@Scope("prototype")
public class PrototypeBean {
public PrototypeBean() {
System.out.println("Prototype Bean создан");
}
}


---

▶️ Особенности использования

0️⃣ Singleton
Используется для объектов, которые могут разделяться несколькими клиентами, например:
🔹Сервисы.
🔹Компоненты с неизменяемыми данными.
🔹Бины, представляющие ресурсы (например, подключение к БД).

1️⃣Prototype
Применяется для объектов с коротким жизненным циклом, например:
🔹Объекты с пользовательским состоянием.
🔹Конфигурации запросов.
🔹Временные данные.

---

▶️Практическая проблема использования Prototype в Singleton

Когда происходит внедрение бина с Prototype Scope в бин с Singleton Scope, Spring Framework создает только один экземпляр PrototypeBean на этапе создания Singleton. Чтобы каждый раз получать новый экземпляр, можно использовать `ObjectProvider` или `@Lookup`.

#### Решение с ObjectProvider:
@Component
public class SingletonWithPrototype {
private final ObjectProvider<PrototypeBean> prototypeBeanProvider;

public SingletonWithPrototype(ObjectProvider<PrototypeBean> prototypeBeanProvider) {
this.prototypeBeanProvider = prototypeBeanProvider;
}

public void usePrototype() {
PrototypeBean prototypeBean = prototypeBeanProvider.getObject();
System.out.println("Используется: " + prototypeBean);
}
}


---

▶️Заключение
🔹Singleton — это область действия по умолчанию, подходящая для объектов, которые разделяются и не зависят от состояния.
🔹Prototype — идеален для объектов с динамическим состоянием или временных компонентов.
При этом важно помнить, что неправильный выбор scope может привести к утечкам памяти (memory leak), состояниям гонки (race condition) или другим ошибкам. Выбор области действия должен соответствовать конкретной задаче приложения.

🔗Полезные ссылки
Официальная документация Bean Scope от Spring Framework
Официальная документация Singleton Scope от Spring Framework
Официальная документация Prototype Scope от Spring Framework


⬇️ Какие Bean Scope тебе приходится использовать чаще всего? Пиши о своем опыте в комментариях
👍 Поставь лайк этому посту, если тебе нравятся наш контент

Jetbulb | Как стать востребованным Java разработчиком

21 Nov, 16:16


🤚 Как насчет того, чтобы пройти путь от новичка до разработчика в Новом году?

И освоить один из самых востребованных языков программирования

Набираем новый поток обучения на курс "Java Enterprise: От новичка до разработчика"👇🏻

За 6 месяцев вы :
— Освоите все необходимые навыки для старта в профессии;
— Научитесь свободно программировать на популярном языке Java;
— Получите полноценный роудмеп для дальнейшего развития.

Курс подойдет, если вы:
- Новичок в программировании
- Изучаете Java самостоятельно
- Разработчик на другом ЯП

Если у вас есть сомнения, пишите нашему менеджеру, который подскажет насколько для вас актуален курс на данный момент

Часть технологий, которые вы освоите:
- Git
- Java Core
- JUnit
- Maven и Gradle
- SQL
- JPA и Hibernate
- Spring Core
- Spring Data Access
- Spring Web
- Spring Webflux
- Spring Security
- Docker

А так же дополните свое портфолио 5 проектами с использованием микросервисов.

Посмотреть полную программу и список технологий можно 👉🏻 тут

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

Все обучение проходит в мини-группах до 30 человек👇🏻

1. Посещаете онлайн-занятие
2 раза в неделю по 1,5 часа. Преподаватель объясняет материал, отвечает на вопросы и дает обратную связь каждому. Занятие всегда можно пересмотреть в записи.

2. Выполняете домашнее задание
В удобное для вас время и сдаете задание на платформе

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

_________________________

💰До нового года можно успеть забронировать место по старой стоимости, всего 100$ в месяц. Количество мест строго ограничено.

🌐 Изучить подробнее и оставить заявку можно на странице - iprody.com/courses

Если у вас остались вопросы или вы хотите уточнить информацию - смело пишите нашему менеджеру

Jetbulb | Как стать востребованным Java разработчиком

20 Nov, 11:02


Шаблон проектирования в Java. Lazy Singleton

Совсем недавно проходил квиз, который был посвящен шаблонам проектирования часто применяемым в Java, а именно популярнейший Singleton (Одиночка). Данный пост прольет свет на способы реализации данного шаблона проектирования, их преимущества и недостатки.

Singleton — шаблон проектирования, который ограничивает создание объектов класса одним экземпляром и предоставляет глобальную точку доступа к этому экземпляру. Lazy Singleton — это разновидность Singleton, в которой объект создается только тогда, когда он действительно нужен (ленивый подход).

▶️Преимущества Lazy Singleton
🔹Экономия ресурсов. Экземпляр создается только тогда, когда он реально необходим.
🔹Отложенная инициализация. Полезно в системах, где создание объекта ресурсоемко.
🔹Контроль над созданием объекта. Легко управлять временем инициализации.

▶️Реализация Lazy Singleton
Ленивая инициализация требует, чтобы объект создавался только при первом запросе. Рассмотрим разные способы реализации.

0️⃣Простейшая реализация (не потокобезопасная)
public class LazySingleton {
private static LazySingleton instance;

private LazySingleton() {
// Закрытый конструктор для предотвращения создания экземпляров
}

public static LazySingleton getInstance() {
if (instance == null) {
instance = new LazySingleton();
}
return instance;
}
}

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

1️⃣Потокобезопасная реализация с синхронизацией
public class LazySingleton {
private static LazySingleton instance;

private LazySingleton() {
// Закрытый конструктор
}

public static synchronized LazySingleton getInstance() {
if (instance == null) {
instance = new LazySingleton();
}
return instance;
}
}

🔹Плюсы. Подходит для многопоточной среды.
🔹Минусы. Низкая производительность из-за синхронизации метода, даже после создания экземпляра.

2️⃣Double-Checked Locking (двойная проверка)
public class LazySingleton {
private static volatile LazySingleton instance;

private LazySingleton() {
// Закрытый конструктор
}

public static LazySingleton getInstance() {
if (instance == null) {
synchronized (LazySingleton.class) {
if (instance == null) {
instance = new LazySingleton();
}
}
}
return instance;
}
}

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

3️⃣Использование вложенного класса (Initialization-on-demand holder idiom)
public class LazySingleton {
private LazySingleton() {
// Закрытый конструктор
}

private static class Holder {
private static final LazySingleton INSTANCE = new LazySingleton();
}

public static LazySingleton getInstance() {
return Holder.INSTANCE;
}
}

🔹Плюсы. Потокобезопасность без синхронизации, и ленивая инициализация за счет особенностей загрузки классов в Java.
🔹Минусы. Требует понимания особенностей работы классов в JVM.

Lazy Singleton отлично подходит для случаев, когда создание объекта требует больших ресурсов и используется нечасто. В случае многопоточной среды, где важно поддерживать данные в консистентной форме и не нарушать общие правилы работы с многопоточностью, рекомендуется применить варианты реализации: Double-Checked Locking или Holder Class. Они обеспечивают безопасность при балансе в производительности. Но как бы там ни был, выбор реализации все зависит от конкретных требований к производительности и архитектуры приложения.

⬇️ Какие шаблоны проектирования чаще всего приходится реализовывать тебе? Пиши о своем опыте в комментариях
👍 Поставь лайк этому посту, если тебе нравятся наш контент

Jetbulb | Как стать востребованным Java разработчиком

16 Nov, 09:00


🧑‍💻 Что такое Elasticsearch и где его применяют в реальной разработке

Привет, всем!
Макс вещает 😼

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

Elasticsearch — это распределенная поисковая и аналитическая система с открытым исходным кодом, разработанная для быстрого и масштабируемого поиска, хранения и анализа данных. Это один из наиболее популярных инструментов для полнотекстового поиска, мониторинга, анализа логов и аналитики. Под капотом Elasticsearch использует технологию Apache Lucene и предназначен для работы с большими объемами данных, обеспечивая быструю индексацию и гибкий поиск по ним.

▶️Основные возможности Elasticsearch
🔹Полнотекстовый поиск. Позволяет искать по текстам и документам, включая возможности для поиска с учетом синонимов, с использованием подсветки, фильтров и автозаполнения.
🔹Анализ данных. Поддерживает сложные запросы для анализа данных в реальном времени, включая агрегации, что позволяет выполнять статистические и аналитические операции.
🔹Гибкость индексации. Elasticsearch позволяет эффективно индексировать документы разных типов и структур, что удобно для работы с разнородными данными.
🔹Масштабируемость. Elasticsearch — это распределенная система, которая может работать на множестве серверов, что позволяет масштабировать как объем хранимых данных, так и производительность.
🔹Поддержка JSON. Данные в Elasticsearch хранятся в формате JSON, что делает его удобным для работы с веб-приложениями и API-интеграции.

▶️Как работает Elasticsearch?
🔹Индексы и документы. Данные в Elasticsearch организуются в индексы (аналогично базам данных в традиционных системах), которые содержат документы — JSON-объекты с информацией. Каждый документ состоит из полей, представляющих структуру данных.
🔹Шарды и реплики. Индексы делятся на шарды для распределения нагрузки между узлами кластера. Для отказоустойчивости создаются реплики (копии) каждого шарда, чтобы данные оставались доступными в случае отказа какого-либо узла.
🔹Запросы и агрегации. Elasticsearch поддерживает сложные запросы и агрегации, которые позволяют анализировать и группировать данные для получения полезных аналитических данных.

▶️Так где же его применяют?
🔹Анализ логов и мониторинг. Вместе с Kibana (инструмент визуализации от Elastic), Elasticsearch часто используется для мониторинга приложений и анализа логов.
🔹Полнотекстовый поиск. Обеспечивает быстрое и релевантное полнотекстовое индексирование и поиск по текстовым данным.
🔹Аналитика и BI. Используется для анализа больших объемов данных в реальном времени с поддержкой сложных аналитических запросов.
🔹Рекомендательные системы. Elasticsearch может быстро обрабатывать запросы для рекомендаций товаров или контента.

▶️Преимущества
🔹Высокая производительность и масштабируемость.
🔹Возможность горизонтального масштабирования.
🔹Поддержка полнотекстового поиска и аналитики.

▶️Ограничения
🔹Сложность в освоении.
🔹Хранение данных в оперативной памяти может потребовать значительных ресурсов.
🔹Elasticsearch может быть сложным для использования в качестве основного хранилища данных.

▶️Заключение
Elasticsearch не является панацеей, но это действительно мощный инструмент для поиска и анализа данных, идеально подходящий для полнотекстового поиска и работы с большими объемами данных в реальном времени. Он широко применяется для мониторинга, поиска по тексту, и аналитики, особенно в системах, требующих быстрой обработки и анализа данных.

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

🔗Полезные ссылки
Официальная документация Elasticsearch
Официальная документация Apache Lucene

Макс Добрынин
Software Engineer

Jetbulb | Как стать востребованным Java разработчиком

14 Nov, 17:19


⚡️Пара свободных мест в группах уровня Junior и Middle

Получите коммерческий опыт разработки на реальном проекте в Agile команде с ментором уровня Senior.

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

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

На проекте используется свежий стек технологий:
- Java (последние версии)
- Spring Boot
- Spring Framework (WebFlux, R2DBC, Security, др.)
- Slf4j, Logback, Distributed Logging
- JUnit, AssertJ, Mockito
- Maven, Gradle
- SQL, JPA, Hibernate
- Docker
- Kafka/RabbitMQ
- Microservices

Уже выпустили 13 команд и 83% ребят, которые успешно проходят стажировку на платформе iPrody - получают оффер в первый же месяц.

👉🏻 В этом видео можно посмотреть подробнее, как устроена стажировка внутри

Есть гарантия возврата денег в течение первых 14-ти дней с начала старта группы. Если за это время вы поймёте, что материалы или формат вам не подходят, просто напишите менеджеру, и мы вернем вам всю сумму обратно👌🏻

__________________

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

Jetbulb | Как стать востребованным Java разработчиком

14 Nov, 10:32


Коллекции в Java: Как устроен WeakHashMap

WeakHashMap — это специальный вид Map в Java, который использует слабые ссылки на ключи, позволяя автоматически удалять пары ключ-значение при сборке мусора, если ключ больше не имеет жестких ссылок в программе. Это делает WeakHashMap полезным для кэширования объектов, которые не должны препятствовать их сборке мусора, когда они больше не используются.

▶️Как работает WeakHashMap?
🔹Ключи со слабой ссылкой. В WeakHashMap ключи хранятся как слабые ссылки (WeakReference). Если объект, используемый в качестве ключа, не имеет других жестких ссылок в приложении, сборщик мусора может освободить память, занятую этим объектом.
🔹Удаление записей. Когда сборщик мусора удаляет объект, используемый в качестве ключа, соответствующая запись автоматически удаляется из карты. Это происходит в фоновом режиме, что помогает предотвращать утечки памяти.

▶️Устройство WeakHashMap
🔹Внутренняя структура. WeakHashMap реализована как хеш-таблица и похожа на HashMap, но отличается тем, что ключи заключены в WeakReference.
🔹Reference Queue. Слабые ссылки на объекты помещаются в очередь ReferenceQueue, когда сборщик мусора очищает объект. WeakHashMap проверяет эту очередь и удаляет записи, ключи которых больше недоступны.

▶️Пример использования WeakHashMap
Допустим, у нас есть задача хранить кэш данных, который должен автоматически очищаться, если ключи больше не используются в других местах программы.
import java.util.Map;
import java.util.WeakHashMap;

public class WeakHashMapExample {
public static void main(String[] args) {
Map<Object, String> map = new WeakHashMap<>();
Object key1 = new Object(); // Создаем ключ
Object key2 = new Object();

map.put(key1, "Value 1");
map.put(key2, "Value 2");

System.out.println("До GC: " + map); // Выводим карту до сборки мусора

// Удаляем сильные ссылки на key1 и key2
key1 = null;
key2 = null;

// Запрашиваем сборку мусора
System.gc();

// Ждем некоторое время, чтобы GC завершил работу
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}

System.out.println("После GC: " + map); // Карта должна быть пустой
}
}


▶️Выводы
🔹Применение. WeakHashMap подходит для кэшей, где объекты должны быть автоматически удалены, если на них больше нет ссылок.
🔹Особенность. Записи удаляются автоматически при следующем обращении к карте или при очередной сборке мусора.
🔹Ограничение. Значения в WeakHashMap не удаляются при потере ссылки на значение, так как только ключи являются WeakReference.

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

🔗Полезные ссылки
Техническое описание Слабой Ссылки (Weak Reference)
Официальная документация Class WeakHashMap от Oracle

⬇️А какую коллекцию для реализаций кэшей выбрал бы ты? Пиши об этом в комментариях
👍 Поставь лайк этому посту, если тебе нравятся наш контент

Jetbulb | Как стать востребованным Java разработчиком

12 Nov, 15:09


💡Сколько зарабатывает Machine Learning Engineer?

Продолжаем разбираться с зарплатами в IT👇🏻

🌐 Смотри видео на YouTube
И не забудь подписаться😉

👍 Ставь лайк, если хочешь больше англоязычного контент

Jetbulb | Как стать востребованным Java разработчиком

11 Nov, 05:08


Многопоточность. Принцип Happens-before

В многопоточных приложениях Java важным аспектом является предсказуемость поведения программы при одновременном доступе нескольких потоков к общим данным. Принцип happens-before — это модель, которая устанавливает порядок выполнения операций и помогает избежать гонок данных.

В Java принцип happens-before обеспечивает последовательность операций между потоками и определяет, когда изменения в памяти, сделанные одним потоком, будут видны другим потокам. Этот принцип особенно важен для гарантии корректности работы многопоточных приложений.

▶️Основные правила happens-before
🔹Транзитивность. Есть события A, B, C. А выполнилось ранее В, В выполнилось ранее С, тогда А выполнилось ранее С. Это означает, что для любых трёх событий A, B, C,если А произошло раньше В и В произошло раньше С, то А неизбежно должно было произойти раньше С.
🔹Иррефлексивность. Событие А не может произойти ранее А. Это означает, что ни одно событие не может произойти раньше самого себя.
🔹Ассиметричность. Есть события A, B. А выполнилось ранее В, то В не может выполниться ранее А. Это означает, что для любых двух событий А и В, если А произошло раньше В, тогда В не могло произойти раньше А.

▶️Пример использования happens-before в коде
Рассмотрим пример демонстрирующий принцип happens-before работает с volatile переменными.
public class HappensBeforeExample {
private static volatile boolean flag = false;
private static int data = 0;

public static void main(String[] args) throws InterruptedException {
Thread writer = new Thread(() -> {
data = 42; // Обновляем данные
flag = true; // Устанавливаем флаг
});

Thread reader = new Thread(() -> {
if (flag) { // Проверяем флаг
System.out.println(data); // Должно напечатать 42
}
});

writer.start();
writer.join(); // Убеждаемся, что writer завершил свою работу
reader.start();
reader.join(); // Убеждаемся, что reader завершил свою работу
}
}


В этом примере:
🔹Поток writer сначала обновляет переменную data, а затем устанавливает flag в true. Поскольку flag помечена как volatile, операция flag = true happens-before операции flag в потоке reader.
🔹Благодаря этому reader увидит изменение в data, и значение 42 будет корректно выведено.

▶️Преимущества happens-before
Использование принципа happens-before позволяет:
🔹Уменьшить вероятность race condition за счет точного определения порядка операций.
🔹Обеспечить предсказуемость и корректность выполнения программы.
🔹Упростить создание многопоточных программ, минимизируя риски ошибок синхронизации.

⬇️Как часто тебе приходится бороться с race condition? Пиши об этом в комментариях
👍 Поставь лайк этому посту, если тебе нравятся наш контент

Jetbulb | Как стать востребованным Java разработчиком

09 Nov, 10:16


Популярные шаблоны микросервисной архитектуры за 20 минут | Паттерны MCA | Microservices

- Какие популярные шаблоны проектирования применяются в микросервисной архитектуре?
- С чего начать изучение микровервисов?
- Что рассказать на собеседовании о микросервисах?
- Какие Шаблоны МСА стоит учить в первую очередь?

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

Погнали!🔥

Jetbulb | Как стать востребованным Java разработчиком

07 Nov, 09:12


Коллекции в Java: Как устроена индексация в HashMap

HashMap — коллекция, которая хранит данные в формате ключ-значение и обеспечивает быструю вставку, поиск и удаление элементов. Основной принцип работы HashMap основан на хэшировании ключей для эффективного доступа к значениям. Индексация в HashMap устроена таким образом, чтобы за O(1) времени выполнять доступ к данным. Давайте рассмотрим, как именно это происходит.

▶️Основные компоненты `HashMap`
🔹Массив бакетов. В основе HashMap лежит массив (table), где каждый элемент — это бакет (bucket). Изначально массив имеет фиксированный размер, который можно задать или оставить по умолчанию.
🔹Бакеты и разрешение коллизий. Если разные ключи попадают в один и тот же бакет, это называется коллизией. Чтобы её разрешить, HashMap использует цепочку связного списка (а начиная с Java 8 — сбалансированное дерево).
🔹Хэш-функция. Для вычисления индекса (положения в массиве) HashMap использует хэш-функцию, которая вычисляет хэш-код для ключа. Хэш-код далее преобразуется в индекс массива для хранения данных.

▶️Процесс индексации в `HashMap`
🔹Вычисление хэш-кода. Когда ключ добавляется в HashMap, сначала вызывается метод hashCode() для вычисления его хэш-кода (целого числа). Этот хэш-код определяет, в какой бакет попадёт элемент.
🔹Распределение по индексу. Хэш-код проходит обработку, чтобы адаптироваться под размер массива бакетов. Обычно это делается побитовой операцией:
int index = (n - 1) & hash;

Здесь n — это длина массива, а hash — хэш-код ключа. Такое распределение позволяет эффективно использовать массив и избежать перерасхода памяти.
🔹Вставка в бакет. Если индекс пуст, ключ и значение сохраняются в соответствующем бакете. Если в бакете уже есть элементы (коллизия), новый элемент добавляется к цепочке, созданной для этого бакета. Начиная с Java 8 и более поздних версий, если количество элементов в бакете превышает порог (8), HashMap преобразует связный список в сбалансированное дерево для увеличения производительности поиска.

▶️Коллизии и производительность
Если два ключа имеют одинаковый хэш-код (коллизия), они попадут в один бакет. В таком случае HashMap сначала просматривает цепочку в бакете, а затем использует метод equals() для поиска конкретного ключа. Начиная с Java 8, при значительном числе коллизий HashMap автоматически преобразует связный список в дерево, что позволяет снизить сложность поиска с O(n) до O(log n).

▶️ Итоги
🔹HashMap использует хэш-функцию для распределения ключей по индексам массива.
🔹Коллизии решаются с помощью цепочек (связного списка или дерева).
🔹Хэширование и деревообразная структура повышают производительность, сводя время доступа к O(1) в большинстве случаев.

🔹HashMap — эффективная структура данных для хранения ассоциативных массивов, обеспечивающая быстрый доступ к данным даже при больших объемах информации.

🔗Полезные ссылки
Официальная документация Class HashMap от Oracle

⬇️А ты можешь пояснить почему методы equals и hashcode так важны при работе с HashMap? Пиши об этом в комментариях
👍 Поставь лайк этому посту, если тебе нравятся наш контент

Jetbulb | Как стать востребованным Java разработчиком

06 Nov, 07:01


Многопоточность в Java: Класс AtomicInteger

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

▶️Коротко о классе AtomicInteger
Класс AtomicInteger из пакета java.util.concurrent.atomic — это специальный класс для работы с целочисленными значениями в многопоточной среде. Он позволяет выполнять атомарные операции, что особенно полезно при конкурентном доступе нескольких потоков к одной переменной. Основная цель AtomicInteger — обеспечить потокобезопасное обновление целочисленных значений без использования блокировок (lock-free).

▶️Основные особенности `AtomicInteger`
🔹Атомарные операции. Обеспечивает атомарные операции, такие как incrementAndGet(), decrementAndGet() и compareAndSet(), которые выполняются без риска появления гонок данных (data races).
🔹Без блокировок. Все операции в AtomicInteger реализованы без использования явных блокировок (synchronized). Это помогает избежать блокировок и контекстных переключений, делая код более производительным.
🔹Безопасность в многопоточности. AtomicInteger особенно полезен в высоконагруженных многопоточных системах, где синхронизация данных является приоритетом.

▶️Основные методы AtomicInteger
🔹int get() — возвращает текущее значение.
🔹int set(int newValue) — задает значение.
🔹int getAndIncrement() — возвращает текущее значение и увеличивает его на единицу.
🔹int incrementAndGet() — увеличивает значение на единицу и возвращает обновленное значение.
🔹int getAndDecrement() — возвращает текущее значение и уменьшает его на единицу.
🔹int decrementAndGet() — уменьшает значение на единицу и возвращает обновленное значение.
🔹boolean compareAndSet(int expect, int update) — если текущее значение равно expect, устанавливает его в update.

▶️Пример использования AtomicInteger
Рассмотрим пример, в котором несколько потоков увеличивают одно и то же значение, используя AtomicInteger для потокобезопасного обновления.

import java.util.concurrent.atomic.AtomicInteger;

public class AtomicIntegerExample {

private static AtomicInteger counter = new AtomicInteger(0);

public static void main(String[] args) {
// Создаем 10 потоков, каждый из которых увеличит значение счетчика на 1000
int numberOfThreads = 10;
Thread[] threads = new Thread[numberOfThreads];

for (int i = 0; i < numberOfThreads; i++) {
threads[i] = new Thread(() -> {
for (int j = 0; j < 1000; j++) {
counter.incrementAndGet();
}
});
threads[i].start();
}

// Ждем завершения всех потоков
for (Thread thread : threads) {
try {
thread.join();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}

System.out.println("Значение счетчика: " + counter.get()); // Ожидается 10000
}
}

Jetbulb | Как стать востребованным Java разработчиком

06 Nov, 07:01


▶️Как работает `compareAndSet`?
Метод compareAndSet использует примитивы CAS (Compare-And-Swap), которые поддерживаются на уровне процессора. Этот метод:
🔹Сравнивает текущее значение с ожидаемым (первым аргументом).
🔹Если текущее значение совпадает с ожидаемым, обновляет его на новое значение.
🔹Если текущее значение отличается от ожидаемого, метод возвращает false, и операция повторяется.

Пример использования compareAndSet:
AtomicInteger atomicInt = new AtomicInteger(10);
boolean result = atomicInt.compareAndSet(10, 20); // Успешно меняет значение на 20
System.out.println(result); // true
System.out.println(atomicInt.get()); // 20


▶️Когда использовать `AtomicInteger`?
🔹Когда требуется потокобезопасное обновление целого числа без блокировок.
🔹В высоконагруженных системах, где блокировки могут снизить производительность.
🔹Для небольших задач, где использование synchronized или Lock может быть излишним.

▶️Ограничения `AtomicInteger`
🔹AtomicInteger подходит для простых атомарных операций, но при сложной логике с зависимостями между переменными лучше использовать другие подходы, например, синхронизированные блоки или Lock.
🔹Atomic-операции работают с отдельно взятыми переменными, и AtomicInteger не подходит для операций с несколькими переменными одновременно.

🔗Полезные ссылки
Официальная документация java.util.concurrent.atomic от Oracle
Официальная документация Class AtomicInteger от Oracle

⬇️Тебе уже приходилось использовать атомарные операции в многопоточке? Пиши о своем опыте в комментариях
👍 Поставь лайк этому посту, если тебе нравятся наш контент

Jetbulb | Как стать востребованным Java разработчиком

05 Nov, 13:07


🤚 Собираем новую группу Middle Java Developer уже в ноябре

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

За 3 месяца работы над проектом вы:

— Освоите современный набор навыков и технологий, которые необходимы для перехода на более высокооплачиваемый проект;
— Получите недостающий коммерческий опыт разработки;
— Разместите готовый проект в портфолио;
— Получите обратную связь и постоянную поддержку от практикующих разработчиков уровня Senior+;

А групповая динамика и коллеги не дадут вам возможности “соскочить” или “забить”.

На проекте используются следующий технологии:
- Java (последние версии)
- Spring Boot
- Spring Framework (WebFlux, R2DBC, Security, др.)
- Slf4j, Logback, Distributed Logging
- JUnit, AssertJ, Mockito
- Maven, Gradle
- SQL, JPA, Hibernate
- Docker
- Kafka/RabbitMQ
- Microservices

Нефункциональные требования к проекту:
⁃ Покрытие тестами: unit, integration, e2e
⁃ Обработка не менее 50-запросов в секунду (включая fun-out)
⁃ Масштабируемость
⁃ Высокий уровень доступности
⁃ Трассирование запросов

Архитектура: Микросервисная, 5-сервисов

Тип коммуникации: Синхронный и асинхронный

Как устроена стажировка на платформе:

1️⃣ Группа за 3 месяца реализует отдельный сервис в рамках целого проекта.

2️⃣ К каждой группе прикрепляется практикующий разработчик уровня Senior, который выступает ментором, распределяет задачи внутри команды, проводит код ревью и конечно же приходит на помощь в случае, когда появляются вопросы.

3️⃣ Общение в группе происходит на постоянной основе, благодаря чему вы прокачаете навыки командной разработки и свои soft skills.

4️⃣ Группа встречается 3 раза в неделю на митинге по часу, где происходит обсуждение текущих задач, код-ревью и решение вопросов.

В результате за 3 месяца вы реализуете в команде полноценный проект, который даст вам возможность двинуться дальше по карьерной лестнице.
____________________

Количество мест строго ограничено, хватит топтаться на месте, пора сделать скачок в своей карьере за 3 месяца👇🏻

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

Jetbulb | Как стать востребованным Java разработчиком

03 Nov, 09:11


🔝Популярные задачи с собеседований: Является ли строка палиндромом

▶️Кому эта задача подойдет?
Это несложная задача проверяющая алгоритмическое мышление, знание структур данных и владение языком программирования используемого при ее реализации, что делает её подходящей для уровня Intern Java Developer и Junior Java Developer.

▶️Описание
Необходимо реализовать метод, который проверяет, является ли заданная строка палиндромом. Палиндром — это слово, фраза или последовательность символов, которая читается одинаково как слева направо, так и справа налево (игнорируя пробелы, регистр букв и знаки препинания).

▶️Условия
🔹Игнорировать регистр букв.
🔹Удалить все неалфавитные символы.
🔹Проверить, равна ли строка самой себе, если её прочитать в обратном порядке.

▶️Чему стоит уделить внимание во время собеседования?
🔹Какова сложность выполнения данного алгоритма?
🔹Как можно улучшить решение, чтобы избежать создания новой строки для сравнения?
🔹Какой подход вы бы использовали, если строка была бы очень длинной?

⬇️ Уже решил эту задачу или есть варианты решения? Пиши в комментариях
👍 Поставь лайк этому посту, если тебе нравятся наш контент

Jetbulb | Как стать востребованным Java разработчиком

02 Nov, 15:02


Делимся новым отзывом о стажировке в группе уровня Middle на платформе iPrody👇🏻

"Во-первых - для меня было важно “вдохнуть свежего воздуха” - 3 года на одном и том же проекте в рамках которого уже давно устоялись и подходы и технологии. За пределы этой колеи выйти непросто, а часто некуда. Здесь все получилось сполна)

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

В-третьих - ментор. Ну мало того что я его давно на ютубе смотрю, тут важнее то, что когда уже кажется знаешь все эти паттерны и технологии но с чем то не сталкивался вообще (как кафка или реактор) - есть от кого услышать качественную критику и обсудить ньюнсы. Совсем другой уровень чем по гуглу выбирать решения и просеивать сомнения.

Ну и пятое - по личным ощущениям прогресс в знаниях и опыте за последние 2 месяца больше чем за весь предшествующий год-полтора - много новой информации в рамках проекта и много приходится изучать самостоятельно в процессе

В целом, процесс весьма похож на запуск реального стартапа с нуля небольшой компанией
"
_____________________

Спасибо Дмитрию за предоставленный отзыв🙏🏻

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

Основную информацию можно найти в этом посте

Дорога к успеху начинается с первого шага - https://iprody.com/

Jetbulb | Как стать востребованным Java разработчиком

31 Oct, 11:00


👷Шаблон проектирования микросервисной архитектуры: Circuit Breaker

Шаблон Circuit Breaker (замыкание цепи) используется в микросервисной архитектуре для повышения устойчивости и отказоустойчивости распределенных систем. Он помогает предотвратить повторные обращения к сервисам, которые временно недоступны или работают с ошибками, тем самым уменьшая нагрузку на систему и улучшая время отклика.

▶️Зачем нужен Circuit Breaker?
В распределенной системе микросервисы часто взаимодействуют друг с другом по сети. Если один из сервисов перестает отвечать или работает с задержками, это может привести к цепочке отказов или значительному снижению производительности других сервисов, которые зависят от него. Шаблон Circuit Breaker позволяет:
🔹Защитить сервисы от истощения ресурсов из-за длительных таймаутов.
🔹Предотвратить дальнейшие запросы к сервису, который уже находится в нерабочем состоянии.
🔹Уменьшить время восстановления, давая сервису возможность восстановиться без дополнительных нагрузок.

▶️Как работает Circuit Breaker?
Circuit Breaker можно представить как автоматический переключатель с тремя состояниями:
🔹Closed (Закрытое состояние). В этом состоянии все запросы к сервису выполняются как обычно. Если количество ошибок начинает превышать установленный порог, переключатель переходит в состояние Open.
🔹Open (Открытое состояние). В этом состоянии все входящие запросы к сервису немедленно блокируются, и возвращается сообщение об ошибке. Это позволяет системе "отдохнуть" и избежать отправки новых запросов к сервису, который заведомо не работает. Через определенное время переключатель переходит в состояние Half-Open.
🔹Half-Open (Полуоткрытое состояние). В этом состоянии небольшое количество запросов отправляется к сервису, чтобы проверить его состояние. Если запросы успешны, переключатель возвращается в состояние Closed. Если ошибки продолжаются, переключатель снова переходит в состояние Open.

▶️Реализация Circuit Breaker в популярных библиотеках
🔹Resilience4j — библиотека, предоставляющая реализацию Circuit Breaker, Retry, Rate Limiter и других шаблонов устойчивости.
🔹Netflix Hystrix (сейчас устаревшая) — была одной из первых библиотек, предложивших реализацию Circuit Breaker.

▶️Заключение
Circuit Breaker — это важный шаблон в микросервисной архитектуре, который помогает улучшить отказоустойчивость и производительность системы. Он предотвращает перегрузку сервисов, которые временно не работают, и позволяет системе быстрее восстанавливаться от сбоев.

🔗Полезные ссылки
Описание шаблона проектирования Circuit Breaker
Описание проблем решаемых Circuit Breaker (microservices.io)
Описание проблем решаемых Circuit Breaker (Microsoft)
Официальная документация Resilience4
Официальная документация Netflix Hystrixj

⬇️ Приходилось применять шаблоны MCA? Пиши о своем опыте в комментариях
👍 Поставь лайк этому посту, если тебе нравятся наш контент

Jetbulb | Как стать востребованным Java разработчиком

30 Oct, 08:30


🍃Аннотация @Transactional в Spring Framework

Аннотация @Transactional — мощный механизм управления транзакциями в Spring Framework, который позволяет разрабатывать приложения с поддержкой транзакций в базах данных, минимизируя количество кода, связанного с их управлением. Она предоставляет способ управления транзакциями на уровне методов или классов, что упрощает реализацию сложных бизнес-процессов, требующих атомарности, целостности и изоляции.

▶️Основные возможности аннотации @Transactional
🔹Управление транзакциями на уровне методов или классов. Можно аннотировать как отдельные методы, так и целые классы, чтобы сделать все методы в классе транзакционными.
🔹Конфигурация уровней изоляции транзакций. Определяет, как транзакции будут взаимодействовать с параллельно выполняющимися операциями.
🔹Управление распространением транзакций (propagation). Определяет, как текущая транзакция должна быть связана с существующими транзакциями.
🔹Настройка времени ожидания и меток "read-only". Позволяет указать, сколько времени транзакция может работать, и является ли она транзакцией только для чтения.
🔹Обработка исключений. Указывает, какие исключения должны приводить к откату транзакции.

▶️Основные параметры аннотации @Transactional
🔹propagation — указывает, как транзакция будет распространяться в методах. Основные режимы:
- REQUIRED (по умолчанию): использует текущую транзакцию или создает новую, если текущей нет.
- REQUIRES_NEW: всегда создаёт новую транзакцию, приостанавливая текущую.
- NESTED: создает вложенную транзакцию, если текущая уже существует.
- MANDATORY: требует наличия активной транзакции, иначе выбрасывает исключение.
- SUPPORTS: выполняет метод в рамках транзакции, если она уже существует, иначе выполняется без транзакции.
- NOT_SUPPORTED: метод выполняется вне транзакции, приостановив текущую.
- NEVER: метод выполняется только если нет активной транзакции, иначе выбрасывается исключение.

🔹isolation — определяет уровень изоляции транзакции:
- DEFAULT: использует уровень изоляции базы данных по умолчанию.
- READ_UNCOMMITTED: допускает чтение неподтвержденных изменений (грязное чтение).
- READ_COMMITTED: предотвращает грязное чтение.
- REPEATABLE_READ: предотвращает неповторяющееся чтение.
- SERIALIZABLE: самый строгий уровень, обеспечивает полную изоляцию.

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

🔹readOnly — устанавливает режим "только чтение", что может быть полезно для оптимизации запросов к базе данных.

🔹rollbackFor и noRollbackFor — указывают, при каких исключениях транзакция должна быть отменена (rollback) или ошибка должна быть оставлена без внимания.

▶️Особенности и ограничения
🔹@Transactional аннотация действует только на вызовы через прокси-объекты. Это означает, что вызов методов одного класса, аннотированного @Transactional, внутри самого класса не будет создавать новую транзакцию.
🔹Транзакции в асинхронных задачах. Если вы используете асинхронные вызовы, такие как @Async, то @Transactional может не работать как ожидается, так как транзакция не будет распространяться на новый поток.

▶️Заключение
Аннотация @Transactional упрощает управление транзакциями в Spring, позволяя легко управлять сложными процессами, требующими атомарности и консистентности данных. Правильное использование её параметров, таких как propagation, isolation и timeout, позволяет гибко настраивать поведение транзакций в приложении.

🔗Полезные ссылки
Официальная документация управления транзакциями в Spring Framework
Официальная документация о аннотации @Transactional

⬇️ Какой уровень изоляции ты бы выбрал и почему? Пиши о своем опыте в комментариях
👍 Поставь лайк этому посту, если тебе нравятся наш контент

Jetbulb | Как стать востребованным Java разработчиком

29 Oct, 11:52


🤚 Преподавателем на курсе Java Enterprise выступит Максим Добрынин

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

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

Напоминаем, что такое Java Enterprise👇🏻

Курс подходит как новичкам в цифровом мире, так и тем, кто уже знаком с основами Java. Длительность программы 6 месяцев.

Вы освоите необходимые технологии для выхода на рынок:
- Git
- Java Core
- JUnit
- Maven и Gradle
- SQL
- JPA и Hibernate
- Spring Core
- Spring Data Access
- Spring Web
- Spring Webflux
- Spring Security
- Docker

Пройдете путь от новичка в программировании до уверенного Java Junior:
— Освоите все необходимые навыки для старта в профессии;
— Научитесь свободно программировать на популярном языке Java;
— Получите полноценный роудмеп для дальнейшего развития.

Ваше портфолио пополниться такими проектами, как:
1. Фреймворк для автоматического тестирования кода
2. Реализация инверторной системы
3. Реализация системы резервирования мест в отеле
4. Автоматическое тестирование веб-приложений
5. Реализация и запуск двух микросервисов с участием Docker

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

1️⃣ Посещаете онлайн-занятие
2 раза в неделю по 1,5 часа. Преподаватель объясняет материал, отвечает на вопросы и дает обратную связь каждому. Занятие всегда можно пересмотреть в записи.

2️⃣ Выполняете домашнее задание
В удобное для вас время и сдаете задание на платформе

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

_________________________

Старт уже 4 ноября, количество мест строго ограничено.
Осталось всего 2 свободных места

👉🏻 Изучить подробнее и оставить заявку можно на странице - iprody.com/courses

Если у вас остались вопросы или вы хотите уточнить информацию - смело пишите нашему менеджеру

Jetbulb | Как стать востребованным Java разработчиком

28 Oct, 06:08


🏗 Шаблон проектирования Prototype

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

▶️Основные идеи и применение

🔹Суть шаблона Prototype заключается в создании нового объекта через копирование существующего прототипа, а не через прямое создание.
🔹Этот шаблон полезен, когда процесс создания объектов является дорогим (например, требует большого количества вычислений) или когда создание объектов должно быть гибким и позволяет конфигурировать их в процессе выполнения.
🔹Он часто используется в тех случаях, когда система должна работать с динамически создаваемыми объектами, чьи конфигурации могут изменяться.

▶️Преимущества использования Prototype
🔹Скорость создания объектов. Копирование объекта может быть быстрее, чем создание его с нуля, особенно если объект имеет сложную инициализацию.
🔹Изоляция клиентов от деталей создания объектов. Клиенты могут создавать новые объекты через клонирование, не зная о том, как они создаются.
🔹Гибкость. Позволяет легко добавлять новые виды объектов в систему. Для этого достаточно добавить новый прототип.

▶️Недостатки
🔹Клонирование может быть сложным: если объект содержит ссылки на другие объекты, необходимо учитывать глубокое и поверхностное клонирование.
🔹Усложнение кода: шаблон добавляет сложность в проект, особенно если необходимо реализовать сложные механизмы клонирования.

▶️Пример реализации в Java
В Java шаблон Prototype можно реализовать с использованием интерфейса Cloneable и метода clone():

// Пример абстрактного прототипа
abstract class Shape implements Cloneable {
private String id;
protected String type;

abstract void draw();

public String getType() {
return type;
}

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

// Метод клонирования
@Override
public Object clone() {
Object clone = null;
try {
clone = super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return clone;
}
}

// Конкретный прототип - Круг
class Circle extends Shape {
public Circle() {
type = "Circle";
}

@Override
public void draw() {
System.out.println("Drawing a Circle");
}
}

// Класс управления прототипами
class ShapeCache {
private static Map<String, Shape> shapeMap = new HashMap<>();

public static Shape getShape(String shapeId) {
Shape cachedShape = shapeMap.get(shapeId);
return (Shape) cachedShape.clone();
}

// Инициализация прототипов
public static void loadCache() {
Circle circle = new Circle();
circle.setId("1");
shapeMap.put(circle.getId(), circle);
}
}

// Тестирование шаблона Prototype
public class PrototypePatternDemo {
public static void main(String[] args) {
ShapeCache.loadCache();

Shape clonedShape1 = ShapeCache.getShape("1");
System.out.println("Shape : " + clonedShape1.getType());
}
}


▶️Пояснение кода
🔹Абстрактный класс Shape реализует метод clone() и предоставляет базовый интерфейс для клонирования объектов.
🔹Класс Circle является конкретной реализацией прототипа, которые можно клонировать.
🔹Класс ShapeCache управляет кэшированием и клонированием объектов. Он хранит уже созданные экземпляры, которые можно использовать в качестве прототипов.
🔹Класс PrototypePatternDemo демонстрирует создание объектов на основе клонирования прототипов.

🔗Полезные ссылки
Техническое описание шаблона проектирования Prototype

⬇️ Какие шаблоны проектирования тебе приходится часто применять? Пиши о своем опыте в комментариях
👍 Поставь лайк этому посту, если тебе нравятся наш контент

Jetbulb | Как стать востребованным Java разработчиком

26 Oct, 10:33


💡Зарплаты Fullstack-разработчиков в разных странах

Сколько платят программистам в разных странах? Разбираемся вместе с Максом Добрыниным👇🏻

🌐 Смотри видео на YouTube
И не забудь подписаться😉

👍 Ставь лайк, если хочешь больше англоязычного контент

Jetbulb | Как стать востребованным Java разработчиком

24 Oct, 16:03


🤚 Ваша возможность получить коммерческий опыт разработки уже в этом месяце

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

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

Но откуда его получить?

Разработать Pet-проект?
Этого не достаточно. Pet-проекты нужны для освоения конкретной технологии и не дают сильных преимуществ на техническом собеседовании.

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

Есть более простой путь👇🏻

Разработать проект в Agile-команде из 6 человек под наблюдением опытного ментора, всего за 3 месяца. В результате вы:

— Получите недостающий опыт работы;
— Освоите современный набор навыков и технологий, которые требует работодатель;
— Разместите готовый проект в портфолио;
— Получите обратную связь от практикующего разработчика уровня Senior+;

А групповая динамика не дадут вам возможности забить или соскочить😉

Технологии, которые используются на проекте:
- Java (последние версии)
- Spring Boot
- Spring Framework (WebFlux, R2DBC, Security, др.)
- Slf4j, Logback, Distributed Logging
- JUnit, AssertJ, Mockito
- Maven, Gradle
- SQL, JPA, Hibernate
- Docker
- Kafka/RabbitMQ
- Microservices

Уже выпустили 12 команд и 83% ребят, которые успешно проходят стажировку на платформе iPrody - получают оффер в первый же месяц.

Для участия необходимо пройти тест на 15-20 минут, на основании которого мы подскажем насколько вы готовы к прохождению практики.

А в этом видео можно посмотреть подробнее, как устроена стажировка внутри
_________________________

Любой вопрос всегда можно написать нашему менеджеру

Места в группе разлетаются довольно быстро, поэтому оставляйте заявку на сайте и бронируйте за собой место👇🏻

Подробная информация о платформе на официальной странице https://iprody.com/training-center

Jetbulb | Как стать востребованным Java разработчиком

24 Oct, 07:09


📊 Параллельные транзакции в БД. Уровни изоляции в PostgreSQL

В PostgreSQL, как и в большинстве современных СУБД, поддерживаются несколько уровней изоляции транзакций. Эти уровни определяют, каким образом транзакции могут видеть изменения, внесенные другими параллельно выполняющимися транзакциями. Уровни изоляции помогают справляться с проблемами конкурентного доступа к данным, такими как "грязное чтение" (Dirty Read), "неповторяющееся чтение" (Non-repeatable read) и "фантомное чтение" (Phantom Read).

▶️ Read uncommitted (Чтение без подтверждения)
🔹 На практике в PostgreSQL этот уровень изоляции работает так же, как и уровень Read Committed. PostgreSQL не поддерживает чтение неподтверждённых данных ("грязных" данных).
🔹 Теоретически, при таком уровне транзакция может видеть изменения, сделанные другими транзакциями, даже если они ещё не были зафиксированы (commit).

▶️ Read committed (Чтение подтвержденных данных)
🔹 Это уровень изоляции по умолчанию в PostgreSQL.
🔹 Транзакция видит только те изменения, которые были зафиксированы другими транзакциями на момент начала выполнения текущего запроса.
🔹 Если другая транзакция изменяет данные после того, как текущая транзакция начала выполнение, эти изменения не будут видны текущему запросу, но будут видны следующим запросам внутри той же транзакции.
🔹 На этом уровне могут возникать проблемы, такие как "неповторяющееся чтение" (один и тот же запрос может вернуть разные результаты в рамках одной транзакции).

▶️ Repeatable read (Повторяющееся чтение)
🔹 Этот уровень изоляции предотвращает "неповторяющееся чтение". Транзакция видит данные такими, какими они были на момент начала ее выполнено, независимо от последующих изменений, внесенных другими транзакциями в ту же самую запись.
🔹 Однако, возможно проявление "фантомного чтения". В таком случае, в результате повторного выполнения запроса могут появится новые записи, добавленные другими параллельными транзакциями.
🔹 При таком уровне изоляции PostgreSQL использует механизм версионирования (MVCC), чтобы добиться повторяемости чтения.

▶️ Serializable (Последовательность)
🔹 Наивысший уровень изоляции, обеспечивающий результат выполнения параллельных транзакций, как если бы они выполнялись последовательно.
🔹 Исключает проблемы "фантомного чтения" и гарантирует целостность данных.
Однако, транзакции на этом уровне могут завершаться с ошибкой сериализации (serialization failure), если система обнаружит потенциальный конфликт между транзакциями. В таком случае, подобную транзакцию необходимо будет повторить.

🔗Полезные ссылки
Официальная документация PostgreSQL
Описание Multiversion concurrency control (MVCC)

⬇️ Расскажи как правильно выбрать подходящий уровень изоляции. Пиши о своем опыте в комментариях
👍 Поставь лайк этому посту, если тебе нравятся наш контент

Jetbulb | Как стать востребованным Java разработчиком

22 Oct, 10:16


Сколько зарабатывают программисты в 2024 году | Обзор зарплат в IT

Сколько зарабатывают программисты в разных странах в 2024 году?
Где разработчикам платят больше?
Какие навыки и технологии наиболее востребованы и как это все влияет на конечный доход?

Ловите полноценный обзор зарплат в индустрии от Макса Добрынина, который уже доступен на YouTube канале.

В этом видео вы узнаете сколько реально зарабатывают программисты и как отличаются зарплаты в IT по разным странам в 2024 году.

Jetbulb | Как стать востребованным Java разработчиком

22 Oct, 07:09


Как Spring Boot Developer Tools упрощает разработку?

Вчера проходил квиз, который был популярному фреймворку для разработки Java приложений Spring Framework. В этот раз вопросы были посвящены модулю для упрощения разработки и тестирования Spring Boot Developer Tools. Данный пост прольет свет на детали этой утилиты и ее преимуществах во время разработки приложений на основе фреймворка Spring.

Spring Boot Developer Tools (aka DevTools) — модуль в Spring Boot, который значительно упрощает процесс разработки и улучшает производительность за счет следующих возможностей:

▶️ Автоматическая перезагрузка (Live Reload)
DevTools позволяет автоматически перезагружать приложение при изменении кода. Это экономит время, так как разработчикам не нужно вручную перезапускать сервер каждый раз, когда они вносят изменения в код или файлы ресурсов.

▶️ Отключение кэширования шаблонов GUI
При использовании движков для генерации шаблонных GUI (например, Thymeleaf или FreeMarker) DevTools отключает кэширование. Это означает, что изменения в шаблонах моментально отображаются в браузере без необходимости перезапуска сервера или ручного сбрасывания кэшей.

▶️ Упрощение конфигурации приложения
DevTools автоматически включает некоторые параметры конфигурации, которые удобны при разработке, но могут быть неактуальны в продакшене.
Например:
🔹 Включение расширенного логирования (добавляется больше отладочной информации).
🔹 Настройка дополнительных профилей для упрощения тестирования различных окружений.

▶️ Автоматическая рестарт (Auto Restart)
DevTools применяет улучшенный механизм перезапуска, который быстрее обычного перезапуска Spring Boot. Он перезапускает только измененные части приложения, благодаря чему время перезагрузки существенно сокращается.

▶️ Заключение
Spring Boot DevTools значительно ускоряет процесс разработки за счет автоматизации рутинных задач и уменьшения времени на перезагрузку приложения. Инструмент особенно полезен при работе над веб-приложениями и интеграцией фронт и бек-приложений

🔗Полезные ссылки
Официальная документация Spring Framework
Официальная документация Spring Boot Developer Tools

⬇️ А ты знал о утилите DevTools? Пиши о своем опыте в комментариях
👍 Поставь лайк этому посту, если тебе нравятся наш контент

Jetbulb | Как стать востребованным Java разработчиком

21 Oct, 14:01


⚡️🤚 Последняя возможность заскочить на курс Java Enterprise в этом году

Освойте базовые знания одного из самых востребованных языков программирования с высокой оплатой труда и станьте востребованным Java-разработчиком за 6 месяцев.

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

Технологии, которые вы освоите:
- Git
- Java Core
- JUnit
- Maven и Gradle
- SQL
- JPA и Hibernate
- Spring Core
- Spring Data Access
- Spring Web
- Spring Webflux
- Spring Security
- Docker

2 занятия в неделю с сильным преподавателем из Люксембурга, который проведет вас по миру Java разработки. Подробную программу можно посмотреть на сайте

К каждому занятию мы разработали домашние задания, которые закрепят ваши знаний на практике. А так же 5 полноценных проектов, которые лягут в ваше портфолио👇🏻

1. Фреймворк для автоматического тестирования кода
2. Реализация инверторной системы
3. Реализация системы резервирования мест в отеле
4. Автоматическое тестирование веб-приложений
5. Реализация и запуск двух микросервисов с участием Docker


Курс подходит как новичкам в цифровом мире, так и тем, кто уже знаком с основами Java.

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

Jetbulb | Как стать востребованным Java разработчиком

19 Oct, 10:12


🔝 Популярные задачи с собеседований: Проверка сбалансированности скобок

▶️Кому эта задача подойдет?
Эта задача проверяет знание алгоритмов и базовых структур данных, что делает её подходящей для любого уровня Junior и Middle Developer.

▶️Описание
Реализуйте функцию, которая проверяет, являются ли скобки в строке сбалансированными. Сбалансированными считаются строки, в которых каждая открывающая скобка соответствует закрывающей скобке того же типа. Скобки могут быть трех типов: (),🔝 Поп🔝 Поп
.

▶️Условия
🔹Реализованный метод должен принимать строку в качества параметра и возвращать true, если скобки сбалансированы, иований: Пв противном случае.
🔹Учесть, что строка может содержать произвольные символы, не являющиеся скобками. Такая строка должна идентифицировать как невалидная. Соответственно, в таком случае метод должен вернуть false.

▶️Чему стоит уделить внимание во время собеседования?
🔹Почему была выбрана конкретная структура данных? 🔹Какая сложность выполнения алгоритма? Возможно ли улучшить? 🔹Что эффективней String API или непосредственная работа с символами? Поясните свой выбор.


⬇️ Уже решил эту задачу или есть варианты решения? Пиши о своем опыте в комментариях
👍 Поставь лайк этому посту, если тебе нравятся наш контент

Jetbulb | Как стать востребованным Java разработчиком

17 Oct, 12:20


⚡️🤚 Освободилось 1 место в группе Java Middle, которая стартует уже 22 октября

Не упустите возможность попасть в команду сильных разработчиков и:

— Освоить современный набор навыков и технологий, которые необходимы для перехода на более высокооплачиваемый проект;
— Получить недостающий опыт работы;
— Разместить готовый проект в портфолио;
— Получить обратную связь и постоянную поддержку от практикующих разработчиков уровня Senior+;

А групповая динамика и коллеги не дадут вам возможности “соскочить” или “забить”.

На проекте используются следующий технологии:
- Java (последние версии)
- Spring Boot
- Spring Framework (WebFlux, R2DBC, Security, др.)
- Slf4j, Logback, Distributed Logging
- JUnit, AssertJ, Mockito
- Maven, Gradle
- SQL, JPA, Hibernate
- Docker
- Kafka/RabbitMQ
- Microservices

Нефункциональные требования:
⁃ Покрытие тестами: unit, integration, e2e
⁃ Обработка не менее 50-запросов в секунду (включая fun-out)
⁃ Масштабируемость
⁃ Высокий уровень доступности
⁃ Трассирование запросов

Архитектура: Микросервисная, 5-сервисов

Тип коммуникации: Синхронный и асинхронный

Как устроена стажировка на платформе:

1️⃣ Группа за 3 месяца реализует отдельный сервис в рамках целого проекта.

2️⃣ К каждой группе прикрепляется практикующий разработчик уровня Senior, который выступает ментором, распределяет задачи внутри команды, проводит код ревью и конечно же приходит на помощь в случае, когда появляются вопросы.

3️⃣ Общение в группе происходит на постоянной основе, благодаря чему вы прокачаете навыки командной разработки и свои soft skills.

4️⃣ Группа встречается 3 раза в неделю на митинге по 1 часe, где происходит обсуждение текущих задач, решение вопросов и постановка новых задач.

В результате за 3 месяца вы реализуете в команде полноценный проект, который даст вам возможность двинуться дальше по карьерной лестнице.
________________________

Все отзывы и ссылки на реальных участников можно найти на сайте https://iprody.com/

Чтобы успеть забронировать место на проекте пишите менеджеру

Jetbulb | Как стать востребованным Java разработчиком

16 Oct, 16:02


📊 Java. Уровни логирования в Logback и их значение

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

▶️ Основные уровни логирования
🔹TRACE — самый низкий уровень логирования, предназначенный для детализированного отслеживания выполнения программы. Используется для подробного анализа выполнения кода, особенно полезен при отладке сложных проблем.
🔹DEBUG — применяется для вывода отладочной информации, которая помогает разработчикам понять внутреннее состояние приложения. Сообщения этого уровня помогают найти ошибки или проверить выполнение бизнес-логики.
🔹INFO — используется для записи общей информации о работе приложения. На этом уровне логируются сообщения об успешном выполнении важных шагов, таких как запуск компонентов системы или выполнение бизнес-операций.

🔹WARN — предназначен для вывода предупреждений, которые могут указывать на потенциальные проблемы. Например, это может быть использование устаревших библиотек или некорректных конфигураций.
🔹ERROR — сигнализирует об ошибках, которые могут нарушить нормальную работу приложения. Такие сообщения важны для мониторинга и отладки, так как могут требовать вмешательства разработчика.

▶️ Как работает фильтрация по уровням логирования?
Logback позволяет фильтровать сообщения, записывая только те, которые соответствуют определенному уровню или выше. Например, если уровень установлен на INFO, то все сообщения уровней INFO, WARN, ERROR будут логироваться, а сообщения уровней DEBUG и TRACE будут проигнорированы.

▶️ Практическое применение уровней логирования
🔹TRACE и DEBUG. Используются на этапе разработки и тестирования для подробного анализа и отладки. В редких случаях, могут быть применены в продакшене для детального анализа комплексной проблемы.
🔹INFO. Логирует важные события, например, старт и остановку приложения, важные события идентифицирующие выполнения бизнес-логики.
🔹WARN и ERROR. Логируются ошибки, которые могут привести сообщают о подозрительном поведении системы. В том числе, ошибки которые уже привели к нежелательному поведению системы.

🔗Полезные ссылки
Официальная документация Logback
Официальная документация о уровнях логирования Logback

⬇️ А у тебя есть гайд по логировании систем или просто логируешь все подряд? Пиши о своем опыте в комментариях
👍 Поставь лайк этому посту, если тебе нравятся наш контент

Jetbulb | Как стать востребованным Java разработчиком

16 Oct, 09:00


🎉 Результаты розыгрыша:

Победитель:
1. Alexey (@stepanenco)

Проверить результаты

Jetbulb | Как стать востребованным Java разработчиком

15 Oct, 14:07


⚡️ Ваш билет в мир Java разработки

Осталось всего пара мест на курс Java Enterprise. Успейте ворваться в мир Java разработки и освоить необходимые навыки для успешного трудоустройства всего за 6 месяцев.

Курс подойдет, если вы:

Новичок в программировании. Узнаете о программировании с нуля, научитесь писать код и писать реальные приложения.

Изучаете Java самостоятельно. Актуализируете свои знания и разложите все по полочкам.

Разработчик на другом ЯП. Расширите свои знания и быстро разберетесь в Java.

Программа рассчитана на начинающих разработчиков и составлена с учетом требований на рынке на текущий момент.

Часть технологий, которые вы освоите:
- Git
- Java Core
- JUnit
- Maven и Gradle
- SQL
- JPA и Hibernate
- Spring Core
- Spring Data Access
- Spring Web
- Spring Webflux
- Spring Security
- Docker

А так же дополните свое портфолио 5 проектами с использованием микросервисов.

Посмотреть полную программу и список технологий можно тут

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

Все обучение проходит в мини-группах до 30 человек👇🏻

1. Посещаете онлайн-занятие
2 раза в неделю по 1,5 часа. Преподаватель объясняет материал, отвечает на вопросы и дает обратную связь каждому. Занятие всегда можно пересмотреть в записи.

2. Выполняете домашнее задание
В удобное для вас время и сдаете задание на платформе

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

_________________________

💰Стоимость курса на данный момент - всего 100$ за месяц.
Количество мест строго ограничено.

👉🏻 Уже выпустили более 12 групп практики на нашей платформе, отзывы ребят можно посмотреть на сайте: https://iprody.com/

🤚 Изучить подробнее и оставить заявку можно на странице - iprody.com/courses

Если у вас остались вопросы или вы хотите уточнить информацию - смело пишите нашему менеджеру

Jetbulb | Как стать востребованным Java разработчиком

15 Oct, 06:02


💡 Java. Управление байтовыми потоками с помощью try-with-resources

Конструкция try-with-resources — это улучшенная конструкция try в Java, предназначенная для автоматического закрытия ресурсов, таких как потоки ввода-вывода, соединения с базой данных и другие ресурсы, которые реализуют интерфейс AutoCloseable. Она появилась в Java 7 и значительно упрощает работу с ресурсами, устраняя необходимость явного закрытия ресурсов в блоке finally.

▶️ Что такое try-with-resources?
Конструкция try-with-resources позволяет автоматически закрывать ресурсы после завершения использования. Это важно для предотвращения утечек памяти и других проблем, связанных с невысвобожденными ресурсами. Если ресурс реализует интерфейс AutoCloseable или его расширение Closeable, то его можно использовать с try-with-resources.

▶️ Пример использования try-with-resources
Рассмотрим пример с чтением файла. Сравним стандартный подход с использованием try-catch-finally и улучшенный вариант с try-with-resources.

🔹Подход с try-catch-finally
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader("example.txt"));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}


Здесь нужно вручную закрывать поток в блоке finally, чтобы избежать утечек. Если произойдет исключение при чтении файла, поток может остаться открытым.

🔹Подход с try-with-resources

try (BufferedReader reader = new BufferedReader(new FileReader("example.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}


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

🔹Подход с использованием нескольких ресурсов

try (
BufferedReader reader = new BufferedReader(new FileReader("example.txt"));
PrintWriter writer = new PrintWriter(new FileWriter("output.txt"))
) {
String line;
while ((line = reader.readLine()) != null) {
writer.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}


Здесь одновременно открываются два ресурса — BufferedReader и PrintWriter, и оба будут закрыты автоматически по завершении блока try.

▶️ Как работает try-with-resources?
Когда блок try заканчивается, конструкция try-with-resources автоматически вызывает метод close() для всех ресурсов, указанных в круглых скобках. Это эквивалентно закрытию ресурса вручную в блоке finally, но с меньшими усилиями со стороны разработчика.

Если в процессе закрытия ресурса возникает исключение, оно подавляется и добавляется в список подавленных исключений, которые можно получить с помощью метода Throwable.getSuppressed().

▶️ Преимущества try-with-resources
🔹Упрощение кода. Не нужно писать блоки finally для явного закрытия ресурсов.
🔹Автоматическое управление ресурсами. Все ресурсы, указанные в try-with-resources, закрываются автоматически.
🔹Безопасность. Минимизируются утечки памяти и другие проблемы, связанные с неправильным управлением ресурсами.
🔹Поддержка нескольких ресурсов. Можно одновременно управлять несколькими ресурсами.

▶️Заключение
Использование try-with-resources позволяет значительно упростить работу с ресурсами в Java, обеспечивая автоматическое управление их жизненным циклом и минимизируя вероятность утечек. Это важная практика, которая делает код более безопасным, читаемым и устойчивым к ошибкам.

🔗Полезные ссылки
Официальная документация о конструкции try-with-resources
Официальная документация о интерфейс AutoCloseable
Официальная документация о интерфейс Closeable

⬇️ Как часто ты забываешь о том, что необходимо закрывать открытые потоки? Пиши о своем опыте в комментариях
👍 Поставь лайк этому посту, если тебе нравятся наш контент

Jetbulb | Как стать востребованным Java разработчиком

14 Oct, 09:01


🧑‍💻 Немного о подготовке к собеседованиям по системному дизайну

Привет, всем!
Макс вещает 😼


Системный дизайн - это очень популярный круг собеседования, который чаще всего встречается для разработчиков уровня Senior и выше. За последние годы эта тема обросла множеством мифов, слухов и легенд. А вот я сегодня вам расскажу о реалиях при подготовке к такому собеседованию и нюансам которые стоит уделять внимание.

▶️ Всегда исходи из того, что ты ничего не знаешь
Странно, да? Как же можно не знать, когда уже что-то знаешь. Тут то и подвох. Собеседование по системному дизайну это всегда реализация задачи в короткое время при очень субъективной оценке. Иначе говоря, задача будет устанавливаться по “щучьему веленью” вас собеседующего и правильное решение знает лишь он. Потому, всегда стоит быстро адаптироваться, брать во внимание текущие обстоятельства и поменьше цепляться за уже реализованные дизайны. Опустоши чашу перед собеседованием!

▶️ Предугадывый задачу наперед
Как же это сделать, если у тебя нет в компании друзей, а интернет молчит? Все просто, достаточно понимать, каким бизнесом занимается текущая компания. Этого достаточно для того, чтобы предугадать “поле боя” и быть готовым к потенциальной задаче. Несколько примеров:
🔹 Если основной продукт компании это Track Management System, то с большой вероятностью ваша задача будет связана с реализацией системы изменения статусов задач, своевременного уведомления подписчиков о измененных данных в этих задачах, при этом соблюдая последовательность внесения изменений в эти данные.
🔹 Если основной продукт компании это Banking Transaction, то вероятно собеседование будет ориентировано на реализацию системы по переводу средств между счетами. В таком случае, вам стоит ожидать решение проблем связанных с большой нагрузкой, параллельными транзакциями в базу данных и соблюдения множество проверок.

▶️ Плохо не означает непригодно
И вот опять вы стоите возле “Камня Недоумения”. Все проще, чем может показаться на первый взгляд. На собеседование выделяется очень мало времени, а при этом многие так и не могу сдвинуться с места в поисках хорошего и в тоже время правильного решения. В процессе любого собеседования по системному дизайну, лучше всегда начать с чего-то простого и наивного. Затем, собеседующий вас начнет навигировать по проблемам вашего дизайна и вы органично на основе своего опыта придете к более осмысленному решению. И так, шаг за шагом появится асинхронная коммуникация, кэши и логирование, и прочее. Не надо умничать, Keep It Simple Stupid.

Было полезно и занимательно? Ставь лайкосик для поста и на наших видео.

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

Макс Добрынин
Software Engineer

⬇️ Какие задачи тебе давали на системному дизайну? Пиши о своем опыте в комментариях
👍 Поставь лайк этому посту, если тебе нравятся наш контент

Jetbulb | Как стать востребованным Java разработчиком

11 Oct, 14:18


🤚 Что можно получить от стажировки на платформе iPrody?

"Вы так прекрасно рассказываете, а что люди получают в реальности?" - недавно нашему менеджеру прилетел такой вопрос.

Давайте посмотрим, что говорят сами ребята после прохождения практики👇🏻
А если вам лень читать, то просто посмотрите видео😉

«Проект реально насыщен технологиями и практически каждый митинг ментор рассказывает что-то новое и интересное. А самое главное из всего, это как сказал мой коллега по проекту, что когда ты приходишь на собеседование то ты уже в теме происходящего и чаще всего понимаешь о чем идет речь, а иногда можешь и блеснуть знаниями типо "Вы не используете testcontainers? А когда делаете интеграционные тесты то поднимаете реальную БД вместо моковой через Docker?" И это реально круто для новичка быть в контексте происходящего.

Огромная благодарность за такой опыт и всем с кем я работал эти 3 месяца)»
Игорь
_______________

Если кратко подвести итоги:
- курс безусловно добавил мне уверенности
- научил, где то даже через боль😊, искать и находить решение
- правильно работать с критикой
- аргументированно отстаивать свои технические решения

Сразу после курса я прошел первое в своей жизни (в ИТ отрасли, конечно) собеседование. Думаю можно было пройти и получше, но через три дня получил оффер и в ближайшую неделю уже начнется мой долгий путь в разработке ПО!»

Александр
_______________

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

Алексей
_______________

«Я пришла, чтобы вспомнить Spring, с которым давно уже не работала. Iprody заинтересовали тем, что в менторах будет человек с опытом и САМОЕ главное ВСТРЕЧИ с ним несколько раз в неделю. Помимо этого в курсе были перечислены технологии, которые очень популярны и часто встречаются в вакансиях (Liquibase, Docker, Agile), и командная работа с маленьким составом.

По итогом курса освоена командная разработка (что важно для освоения Gitflow), работа с баготрекинговой системой как на реальном проекте, подобие дейликов (встречи с ментором). Ну и самое главное разработка CRM/REST API микросервисов с использованием Spring Boot, Liquibase, PostgreSQL, поработала с DevOps CI/CD (Docker, Github actions) по тестам JUnit, Mockito и даже сквозное тестирование при помощи Cucumber (написание сценариев и реализация шагов на Java)+ Open API Swagger (с которым я ранее не имела дела и который есть в коммерческих проектах).

По итогу полученного опыта на курсе/стажировке я прошла успешно три технических собеседования из трëх. И получила оффер в один из крупных банков.»

Аноним
_______________

Благодаря тому, что я уже во время стажировки в iPrody добавил об этом запись в резюме, к завершению проекта у меня было несколько реальных офферов от разных компаний на позицию Java-разработчика. Этому также поспособствовало то, что я сделал pet-проект, в котором я старался писать код по всем тем правилам, которым меня научили.»

Дмитрий
_______________

👉🏻 В этом месяце есть еще пара свободных мест в группах разного уровня.

Подробная информация о стажировке на официальной странице.
Задать свой вопрос всегда можно напрямую менеджеру.

Jetbulb | Как стать востребованным Java разработчиком

11 Oct, 10:45


💡Какими зависимостями обладает Spring Framework?

Разбираем ТОП вопросов про Spring вместе с Максом Добрыниным

🌐 Смотри видео на YouTube
И не забудь подписаться😉

👍 Ставь лайк, если хочешь больше англоязычного контент

Jetbulb | Как стать востребованным Java разработчиком

10 Oct, 10:51


🤚 “Почему я должен учиться у вас?”
- спросите вы.

Отвечаем:
Во-первых, ваше портфолио пополниться такими проектами, как:
1. Фреймворк для автоматического тестирования кода
2. Реализация инверторной системы
3. Реализация системы резервирования мест в отеле
4. Автоматическое тестирование веб-приложений
5. Реализация и запуск двух микросервисов с участием Docker

Во-вторых:
— Освоите все необходимые навыки для старта в профессии;
— Научитесь свободно программировать на популярном языке Java;
— Получите полноценный роудмеп для дальнейшего развития.

И все это под руководством ментора из Люксембурга.
Константин Актыбаев влюбился в Java c первого кода и занимается им ежедневно. И вот уже 8 лет он преподает разработку и программирование. И на этом потоке он будет вести вас!

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

Этого мало?👇🏻

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

Любое техническое собеседование - лёгкая прогулка, которая приведет на работу мечты.

Осталось всего 5 мест. Одно точно ваше!

Изучить подробнее и оставить заявку можно на странице - iprody.com/courses

Если остались вопросы или хочешь уточнить информацию - смело пиши нашему менеджеру

Jetbulb | Как стать востребованным Java разработчиком

09 Oct, 11:37


⚡️ Объявляем новый розыгрыш бесплатного технического собеседования с Максом Добрыниным

Условия участия:
1️⃣ быть подписанным на телеграм-канал Jetbulb;
2️⃣ жмакнуть на кнопку "Участвую!" под этим постом;
3️⃣ быть готовым, что собеседование будет выложено на YouTube.

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

Формат технического собеседования можно посмотреть тут

Итог розыгрыша подведем уже в следующую среду (16 октября).
Удачи🤞🏻

Jetbulb | Как стать востребованным Java разработчиком

08 Oct, 13:07


🤚 Ищем middle разработчика, который готов повысить свой грейд и сделать скачок в карьере всего за 3 месяца.

В группе middle разработчиков осталось 1 место.
Хватит сидеть на проекте со старым стеком, пора врываться в настоящую разработку👇🏻

В результате работы над проектом в течение 3х месяцев вы:

— Освоите современный набор навыков и технологий, которые необходимы для перехода на более высокооплачиваемый проект;
— Получите недостающий опыт работы;
— Разместите готовый проект в портфолио;
— Получите обратную связь и постоянную поддержку от практикующих разработчиков уровня Senior+;

А групповая динамика и коллеги не дадут вам возможности “соскочить” или “забить”.

На проекте используются следующий технологии:
- Java (последние версии)
- Spring Boot
- Spring Framework (WebFlux, R2DBC, Security, др.)
- Slf4j, Logback, Distributed Logging
- JUnit, AssertJ, Mockito
- Maven, Gradle
- SQL, JPA, Hibernate
- Docker
- Kafka/RabbitMQ
- Microservices

Как устроена стажировка на платформе:

1️⃣ Группа за 3 месяца реализует отдельный сервис в рамках целого проекта.

2️⃣ К каждой группе прикрепляется практикующий разработчик уровня Senior, который выступает ментором, распределяет задачи внутри команды, проводит код ревью и конечно же приходит на помощь в случае, когда появляются вопросы.

3️⃣ Общение в группе происходит на постоянной основе, благодаря чему вы прокачаете навыки командной разработки и свои soft skills.

4️⃣ Группа встречается 3 раза в неделю на митинге по 1,5 часа, где происходит обсуждение текущих задач, решение вопросов и постановка новых задач.

В результате за 3 месяца вы реализуете в команде полноценный проект, который даст вам возможность двинуться дальше по карьерной лестнице.
________________________

Все отзывы и ссылки на реальных участников можно найти на сайте https://iprody.com/

Чтобы успеть забронировать место на проекте пишите менеджеру

Jetbulb | Как стать востребованным Java разработчиком

08 Oct, 07:09


Кэширование сборок в Gradle: Увеличиваем производительность разработки

Вчера проходил небольшой квиз, который был посвящен сборщикам проектов в Java. Один из вопросов затрагивал механизм кэширования во время сборки при использовании Gradle. Данный пост прольет свет на детали данного сборщика и его преимущества в производительности по сравнению с другим сборщиком проектов Maven👇🏻

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

▶️ Виды кэширования в Gradle

1️⃣ Локальный Кеш Сборки - это основной механизм, который используется для хранения артефактов и результатов задач, чтобы можно было избежать повторных сборок. Gradle сохраняет результаты выполнения задач и повторно их использует, если входные параметры и окружение остаются неизменными.

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

2️⃣ Удаленный кэш сборки, позволяет нескольким разработчикам или CI/CD средам повторно использовать результаты сборки, которые были сохранены ранее. Этот подход особенно полезен, если ваша команда работает над большим проектом и использование результатов сборки между разработчиками поможет сократить время компиляции.

▶️ Включение кэширования сборки в Gradle

🔹Конфигурация Gradle Build Cache
Включение кеша можно настроить с помощью файла gradle.properties в вашем проекте:
   org.gradle.caching=true

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

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

▶️ Как работает кэширование сборок?

Gradle использует концепцию “Task Inputs-n-Outputs” для управления кэшированием. Если задачи имеют одинаковые входные данные и окружение, то Gradle будет использовать результаты предыдущего выполнения задачи, что позволяет существенно ускорить сборку.

🔹Входные данные задачи (inputs) - это файлы и параметры, от которых зависит выполнение задачи.
🔹Выходные данные задачи (outputs) - это файлы или артефакты, которые генерируются в процессе выполнения задачи.

Gradle сравнивает входные данные задачи, и если они не изменились с прошлого запуска, то повторно использует кэшированные результаты вместо повторного выполнения задачи.

▶️ Советы для повышения эффективности кэширования
🔹Оптимизируйте задачи. Убедитесь, что задачи вашей сборки детерминированы — то есть при одинаковых входных данных они генерируют одинаковые выходные данные.
🔹Используйте современные версии Gradle. Новые версии Gradle имеют более продвинутые алгоритмы кеширования и улучшают производительность сборок.
🔹Минимизируйте зависимости. Чем меньше задач будет затронуто при изменении кода, тем больше вы сможете воспользоваться преимуществами кеширования.
🔹Профилируйте сборку. Используйте команду gradle build --scan, чтобы понять, какие задачи потребляют больше всего времени и почему они не кешируются.

▶️ Заключение
Использование кеширования сборок Gradle — это важная техника, которая позволяет существенно ускорить время сборки проекта. Локальные и удаленные кэши помогают уменьшить повторные сборки, что полезно как при работе над проектом в команде, так и в CI/CD конвейерах. Это особенно важно для крупных проектов, где сборка может занимать много времени. При правильно настроенном кеше, разработчику удастся заметно повысить эффективность разработки.

🔗Полезные ссылки
Официальная документация Gradle
Официальная документация Gradle Cache

Jetbulb | Как стать востребованным Java разработчиком

07 Oct, 15:07


💡Какую задачу решает Spring Boot?

Разбираем ТОП вопросов про Spring вместе с Максом Добрыниным

🌐 Смотри видео на YouTube
И не забудь подписаться😉

👍 Ставь лайк, если хочешь больше англоязычного контент

Jetbulb | Как стать востребованным Java разработчиком

06 Oct, 11:04


🐳 Список команд Docker которые должен знать любой разработчик

▶️docker pull
Команда для скачивания образа из Docker Hub.
Пример:
docker pull ubuntu:latest

Скачивает последнюю версию образа Ubuntu.

▶️docker run
Запускает контейнер на основе образа. Если образа нет локально, он автоматически будет скачан.
Пример:
docker run -d -p 8080:80 nginx

Запускает nginx в контейнере, делает его доступным через порт 8080. Опция -d запускает контейнер в фоновом режиме.

▶️docker ps
Показывает список запущенных контейнеров.
Пример:
docker ps

Показывает информацию обо всех текущих запущенных контейнерах, включая их ID и состояние. Опция -a запускает контейнер в фоновом режиме.

▶️docker stop
Останавливает запущенный контейнер.
Пример:
docker stop <container_id>

Останавливает контейнер по его ID или имени.

▶️docker start
Запускает контейнер, который был ранее остановлен.
Пример:
docker start <container_id>

Запускает контейнер по ID или имени.

▶️ docker rm
Удаляет остановленный контейнер.
Пример:
docker rm <container_id>

Удаляет контейнер по ID. Опция -f принудительно удаляет запущенный контейнер.

▶️docker rmi
Удаляет образ Docker.
Пример:
docker rmi <image_id>

Удаляет образ по ID или имени.

▶️docker images
Показывает список всех скачанных образов Docker.
Пример:
docker images

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

▶️docker exec
Выполняет команду внутри запущенного контейнера.
Пример:
docker exec -it <container_id> /bin/bash

Запускает bash внутри контейнера для интерактивной работы. Опция -it делает сессию интерактивной.

▶️docker build
Создает новый образ из Dockerfile.
Пример:
docker build -t my_image:latest .

Собирает образ из Dockerfile в текущей директории и дает ему имя my_image с тегом latest.

▶️docker logs
Просмотр логов контейнера.
Пример:
docker logs <container_id>

Показывает логи контейнера, что полезно для анализа и отладки.

▶️docker network ls
Показывает список всех сетей Docker.
Пример:
docker network ls

Отображает все сети Docker, которые можно использовать для объединения контейнеров.

▶️docker volume ls
Просмотр всех томов Docker.
Пример:
docker volume ls

Отображает все тома (volumes), которые используются для хранения данных контейнеров вне их жизненного цикла.
_________________________
Изучить Docker можно и на нашем курсе Java Enterprise.
Где у вас будет возможность реализовать и запустить два микросервиса с участием Docker.


⬇️ Поделишься своим списком команд? Пиши в комментариях
👍 Поставь лайк этому посту, если тебе нравятся наш контент

Jetbulb | Как стать востребованным Java разработчиком

04 Oct, 12:23


🤚 Курс Java Enterprise или стажировка Java Junior: куда идти?

Давайте пройдем небольшой тест:
1. Вы новичок в программировании и хотите разобраться в Java с нуля?
2. Изучаете Java самостоятельно уже не первый месяц, но конца и края не видно?
3. Ищете работу на позицию Джуна, но на собеседования не зовут?
4. Уже программируете на других языках, но Java, как эльфийский. Вроде звучит похоже, а смысла не уловить?

Если хотя бы на 2 вопроса вы ответили "да" - welcome на курс.

6 месяцев, 5 проектов в портфолио и более 72 часов занятий + практика от ментора.

Вы будете изучать Java и кодить под руководством Константина Актыбаева. Наш преподаватель проживает в Люксембурге, влюбился в Java c первого раза и вот уже 8 лет в edtech и преподавании.

Он же будет проверять домашки и делиться опытом напрямую.

В отличии от других подобных курсов у нас нет теоретических кураторов, только один ментор с опытом более 8 лет.

За 6 месяцев вы пройдете путь от новичка в программировании, до уверенного Java Junior:
— Освоите все необходимые навыки для старта в профессии;
— Научитесь свободно программировать на популярном языке Java;
— Получите полноценный роудмеп для дальнейшего развития.

Все обучение проходит в мини-группах до 30 человек! Именно такому количеству есть возможность дать максимум внимания и развернутую обратную связь.
___________________

Уже выпустили более 12 групп практики на нашей платформе, отзывы ребят можно посмотреть на сайте: https://iprody.com/

Сейчас действует сниженная стоимость, всего 100$ за месяц обучения, а так же гарантия возврата 100% средств в случае, если вас что-либо не устроит.

Готов присоединиться уже сейчас?

👉🏻 Изучить подробнее и оставить заявку можно на странице - iprody.com/courses

Если остались вопросы или хотите уточнить информацию - смело пишите нашему менеджеру

Jetbulb | Как стать востребованным Java разработчиком

03 Oct, 10:16


ТОП популярных вопросов o Spring Framework за 13 минут с примерами | Java

Какие вопросы чаще всего задают на технических собеседованиях о Spring? А самое важно - как правильно отвечать на эти вопросы и не закапываться?

В этом видео, Макс Добрынин, разработчик с опытом более 8 лет, раскрывает ТОП основных вопросов, которые чаще всего задают на технических собеседованиях на позицию Java Junior и Java Middle касательно Spring Framework.

Разберемся с основными задачами Spring Boot, жизненным циклом бинов и видами их конфигураций, узнаем что такое Spring Context и как правильно отвечать на каверзные вопросы интервьюеров.

Новое видео уже на канале👇🏻