Присоединяйтесь к открытому уроку, узнайте, как динамически выражать и обрабатывать данные в Spring-приложениях.
🗓 21 мая в 19:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Разработчик на Spring Framework».
О чём поговорим:
Кому будет интересно:
Spring-разработчикам, Java-бэкенд-инженерам, архитекторам ПО, IT-специалистам и студентам, заинтересованным в технологиях Spring.
В результате урока:
Узнаете, для чего нужен SpEL и где его можно применять.
🔗 Ссылка на регистрацию: https://clck.ru/3M5vWa
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
➡️ Использование Optional для работы с потенциально null значениями
Использование Optional позволяет более безопасно работать с потенциально null значениями в Java.
🗣️ Этот подход помогает предотвратить распространенные ошибки, такие как NullPointerException, и делает код более читаемым и надежным.
👩💻
@javaquiz
Использование Optional позволяет более безопасно работать с потенциально null значениями в Java.
🗣️ Этот подход помогает предотвратить распространенные ошибки, такие как NullPointerException, и делает код более читаемым и надежным.
👩💻
@javaquiz
➡️ Фабричный метод коллекции
✔️ Коллекции — наиболее часто используемая функция в нашем ежедневном программировании. Они используются в качестве контейнера, в котором мы храним объекты и передаем их дальше.
Коллекции также используются для сортировки, поиска и перебора объектов, что упрощает жизнь программиста. Он предоставляет несколько базовых интерфейсов, таких как List, Set, Map и т. д., а также множество реализаций.
Традиционный способ создания коллекций и карт может показаться многим разработчикам многословным.
👀 Вот почему в Java 9 появилось несколько очень кратких фабричных методов.
👩💻
@javaquiz
✔️ Коллекции — наиболее часто используемая функция в нашем ежедневном программировании. Они используются в качестве контейнера, в котором мы храним объекты и передаем их дальше.
Коллекции также используются для сортировки, поиска и перебора объектов, что упрощает жизнь программиста. Он предоставляет несколько базовых интерфейсов, таких как List, Set, Map и т. д., а также множество реализаций.
Традиционный способ создания коллекций и карт может показаться многим разработчикам многословным.
👀 Вот почему в Java 9 появилось несколько очень кратких фабричных методов.
👩💻
@javaquiz
⏳ Использование LocalDate и DateTimeFormatter для работы с датами
LocalDate и DateTimeFormatter предоставляют удобные и безопасные методы для работы с датами в Java.
🗣️ Этот подход упрощает задачи форматирования и парсинга дат, что делает код более читаемым и менее подверженным ошибкам.
👩💻
@javaquiz
LocalDate и DateTimeFormatter предоставляют удобные и безопасные методы для работы с датами в Java.
🗣️ Этот подход упрощает задачи форматирования и парсинга дат, что делает код более читаемым и менее подверженным ошибкам.
👩💻
@javaquiz
➡️ Как объединить два списка в Java?
Этот код демонстрирует, как объединить два списка list1 и list2 в Java, создав новый список mergedList, который содержит все элементы из обоих исходных списков. В результате выполнения кода будет напечатан объединенный список.
🗣️ Этот подход часто используется на практике при работе с коллекциями в Java.
👩💻
@javaquiz
Этот код демонстрирует, как объединить два списка list1 и list2 в Java, создав новый список mergedList, который содержит все элементы из обоих исходных списков. В результате выполнения кода будет напечатан объединенный список.
🗣️ Этот подход часто используется на практике при работе с коллекциями в Java.
👩💻
@javaquiz
Как получить карьерный буст и MacBook за подписку
В интернете полно курсов по самопиару и карьерному развитию в IT, но все они не сравнятся с реальными кейсами от действующих практиков.
Не нужно покупать дорогие консультации, чтобы перенять чужой опыт — достаточно подписаться на папку, где собралось более 30 лучших экспертов из IT и digital
Это люди, которые не только построили успешную карьеру с нуля, но и основали собственные компании.
Они собрались, чтобы прокачать тебя в маркетинге и дизайне, а ещё провести розыгрыш.
Подпишись на них и получи один из 3 призов:
🥇 Главный приз — MacBook Air (M2)
🥈 2 место: Яндекс Станция Лайт 2
🥉 3 место: Наушники HUAWEI Freebuds 5i
Участвуешь?
1. Подпишись на папку
2. Подтверди участие в боте
19 июня в прямом эфире опубликуем итоги розыгрыша!
В интернете полно курсов по самопиару и карьерному развитию в IT, но все они не сравнятся с реальными кейсами от действующих практиков.
Не нужно покупать дорогие консультации, чтобы перенять чужой опыт — достаточно подписаться на папку, где собралось более 30 лучших экспертов из IT и digital
Это люди, которые не только построили успешную карьеру с нуля, но и основали собственные компании.
Они собрались, чтобы прокачать тебя в маркетинге и дизайне, а ещё провести розыгрыш.
Подпишись на них и получи один из 3 призов:
Участвуешь?
1. Подпишись на папку
2. Подтверди участие в боте
19 июня в прямом эфире опубликуем итоги розыгрыша!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥Java и производительность — новая тема от онлайн-конференции Podlodka Java Crew
С 26 по 30 мая вас ждет тематическая неделя, посвящённая продвинутым практикам оптимизации Java-приложений.
В программе:
— Доклад Владимира Плизги (Tibbo System) о подходах к профилированию и инструментах, которые действительно работают;
— Воркшоп по JMH от Григория Кошелева (Контур) — научитесь писать микробенчмарки правильно;
— Круглый стол с Антоном Курако (Т-Банк) и Михаилом Поливахой (Spring АйО) — сравнение Spring, Micronaut, Quarkus и Kora через призму производительности;
— Опыт команды НСПК по нагрузочному тестированию в бою — расскажет Павел Митин.
А ещё — JFR, корутины, Kubernetes и десятки инсайтов из продакшена.
🎯 Неделя для тех, кто держит перформанс под контролем.
🔗 Подключайся: podlodka.io/javacrew
С 26 по 30 мая вас ждет тематическая неделя, посвящённая продвинутым практикам оптимизации Java-приложений.
В программе:
— Доклад Владимира Плизги (Tibbo System) о подходах к профилированию и инструментах, которые действительно работают;
— Воркшоп по JMH от Григория Кошелева (Контур) — научитесь писать микробенчмарки правильно;
— Круглый стол с Антоном Курако (Т-Банк) и Михаилом Поливахой (Spring АйО) — сравнение Spring, Micronaut, Quarkus и Kora через призму производительности;
— Опыт команды НСПК по нагрузочному тестированию в бою — расскажет Павел Митин.
А ещё — JFR, корутины, Kubernetes и десятки инсайтов из продакшена.
🎯 Неделя для тех, кто держит перформанс под контролем.
🔗 Подключайся: podlodka.io/javacrew
❓ Парадокс Comparator’а
Если вам нужно написать Comparator для сортировки объектов по возрастанию, обычно он выглядит так:
public class ByScoreComparator implements Comparator {
@Override
public int compare(User u1, User u2) {
return (int) signum(u2.getAge() - u1.getAge());
}
}
➡️ Главная проблема — понять, от чего отнимать, чтобы порядок был правильным. Правильный ответ с первого раза получается редко, и часто мы замечаем ошибку уже после запуска кода.
Теперь это не нужно. Можно использовать ссылки на методы:
Comparator comparator = Comparator
.comparingDouble(User::getAge)
.thenComparing(User::getName);
List hList = ...;
hList.sort(comparator);
🗣️ Такой подход упрощает создание компараторов.
👩💻
@javaquiz
Если вам нужно написать Comparator для сортировки объектов по возрастанию, обычно он выглядит так:
public class ByScoreComparator implements Comparator {
@Override
public int compare(User u1, User u2) {
return (int) signum(u2.getAge() - u1.getAge());
}
}
➡️ Главная проблема — понять, от чего отнимать, чтобы порядок был правильным. Правильный ответ с первого раза получается редко, и часто мы замечаем ошибку уже после запуска кода.
Теперь это не нужно. Можно использовать ссылки на методы:
Comparator comparator = Comparator
.comparingDouble(User::getAge)
.thenComparing(User::getName);
List hList = ...;
hList.sort(comparator);
🗣️ Такой подход упрощает создание компараторов.
👩💻
@javaquiz
Присоединяйтесь к открытому уроку «SpELые приложения на Spring» и узнайте, как динамически выражать и обрабатывать данные в Spring-приложениях.
SpEL (Spring Expression Language) — это мощный инструмент для внедрения динамических выражений, который широко применяется в проектировании приложений на Spring.
🗓 21 мая в 19:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Разработчик на Spring Framework».
Что вас ждёт:
Урок для Spring-разработчиков, Java-бэкенд-инженеров и архитекторов ПО.
🔗 Ссылка на регистрацию: https://clck.ru/3MAgGF
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ Оптимизация сборщика мусора с помощью -XX:+UseG1GC
Java предоставляет множество возможностей для оптимизации производительности приложений.
✔️ Одной из таких возможностей является использование современного сборщика мусора G1 (Garbage First), который улучшает работу приложений с большим объемом данных и снижает задержки.
➡️ Чтобы включить использование G1GC, необходимо добавить флаг -XX:+UseG1GC при запуске Java-приложения:
java -XX:+UseG1GC G1GCExample
👩💻
@javaquiz
Java предоставляет множество возможностей для оптимизации производительности приложений.
✔️ Одной из таких возможностей является использование современного сборщика мусора G1 (Garbage First), который улучшает работу приложений с большим объемом данных и снижает задержки.
➡️ Чтобы включить использование G1GC, необходимо добавить флаг -XX:+UseG1GC при запуске Java-приложения:
java -XX:+UseG1GC G1GCExample
👩💻
@javaquiz
На открытом уроке мы разберем потокобезопасные очереди JDK, которые являются обязательной частью многопоточных приложений. Вы узнаете, как они устроены, какие внутренние механизмы лежат в их основе и как правильно их использовать в своих проектах.
🗓 26 мая в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Java Developer. Professional».
Освоив принципы работы потокобезопасных очередей, вы сможете создать более производительные и стабильные многопоточные приложения. Эти знания откроют новые возможности для вашего профессионального роста в Java-разработке.
🔗 Ссылка на регистрацию: https://clck.ru/3MBpgJ
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
👀 Случайные целочисленные числа
Теперь более трудное задание. Не читайте решение. Посмотрите сможете ли вы найти
ответ самостоятельно. Когда я запущу следующую программу:
for (int i = 0; i < 10; i++) {
System.out.println((Integer) i);
}
Иногда я получаю следующий вывод:
92
221
45
48
236
183
39
193
33
84
➡️ Но как такое вообще возможно? Ответ в кроется в переопределении JDK кеша Integer через рефлексию, и затем в использовании auto-boxing и auto-unboxing.
👩💻
@javaquiz
Теперь более трудное задание. Не читайте решение. Посмотрите сможете ли вы найти
ответ самостоятельно. Когда я запущу следующую программу:
for (int i = 0; i < 10; i++) {
System.out.println((Integer) i);
}
Иногда я получаю следующий вывод:
92
221
45
48
236
183
39
193
33
84
➡️ Но как такое вообще возможно? Ответ в кроется в переопределении JDK кеша Integer через рефлексию, и затем в использовании auto-boxing и auto-unboxing.
👩💻
@javaquiz
Ищете эффективные инструменты для создания DSL?
Узнайте, как Kotlin может упростить разработку с помощью JsonBuilder!
Приглашаем на открытый урок.
🗓 22 мая в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Kotlin Backend Developer. Professional».
На открытом уроке вы разберете, как Kotlin позволяет создавать DSL (Domain-Specific Languages), оптимизируя процесс разработки. Мы покажем теорию и практику создания DSL на примере JsonBuilder.
Вы не только научитесь создавать собственные DSL, но и освоите замыкания и extension-методы Kotlin, которые дадут вам дополнительные преимущества при написании чистого и гибкого кода.
🎁 Всем участникам вебинара дарим промокод, который дает скидку на обучение - Kotlin5
👉 Регистрация на вебинар: https://clck.ru/3MCXbf
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Узнайте, как Kotlin может упростить разработку с помощью JsonBuilder!
Приглашаем на открытый урок.
🗓 22 мая в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Kotlin Backend Developer. Professional».
На открытом уроке вы разберете, как Kotlin позволяет создавать DSL (Domain-Specific Languages), оптимизируя процесс разработки. Мы покажем теорию и практику создания DSL на примере JsonBuilder.
Вы не только научитесь создавать собственные DSL, но и освоите замыкания и extension-методы Kotlin, которые дадут вам дополнительные преимущества при написании чистого и гибкого кода.
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
👀 Datafaker
Datafaker создает фиктивные данные для ваших программ JVM за считанные минуты, используя широкий спектр из более чем 100 поставщиков данных.
🗣️ Это может быть очень полезно при генерации тестовых данных для заполнения базы данных, генерации данных для стресс‑теста или анонимизации данных из производственных сервисов. Давайте включим его в наши зависимости.
🔗 Ссылочка на доку (https://www.datafaker.net/documentation/getting-started/)
👩💻
@javaquiz
Datafaker создает фиктивные данные для ваших программ JVM за считанные минуты, используя широкий спектр из более чем 100 поставщиков данных.
🗣️ Это может быть очень полезно при генерации тестовых данных для заполнения базы данных, генерации данных для стресс‑теста или анонимизации данных из производственных сервисов. Давайте включим его в наши зависимости.
🔗 Ссылочка на доку (https://www.datafaker.net/documentation/getting-started/)
👩💻
@javaquiz
➡️ Обработка CloneNotSupportedException и возврат экземпляра подкласса
Несмотря на критику функции клонирования объектов в Java, если вам нужно реализовать метод clone(), вот несколько лучших практик для упрощения задачи:
public Course clone() {
Course c = null;
try {
c = (Course)super.clone();
} catch (CloneNotSupportedException e) {} // Не произойдет
return c;
}
🗣️ Этот код использует тот факт, что метод clone() не вызовет CloneNotSupportedException, если класс реализует интерфейс Cloneable. Возврат подкласса называется ковариантным переопределением методов и доступен с Java 5, что позволяет избежать приведения типа на стороне клиента:
Course javaBeginners = new Course("Java", 100, 10);
Course clone = javaBeginners.clone();
Ранее, например, с классом Date, нужно было явно приводить результат метода clone():
Date d = new Date();
Date clone = (Date) d.clone();
👩💻
@javaquiz
Несмотря на критику функции клонирования объектов в Java, если вам нужно реализовать метод clone(), вот несколько лучших практик для упрощения задачи:
public Course clone() {
Course c = null;
try {
c = (Course)super.clone();
} catch (CloneNotSupportedException e) {} // Не произойдет
return c;
}
🗣️ Этот код использует тот факт, что метод clone() не вызовет CloneNotSupportedException, если класс реализует интерфейс Cloneable. Возврат подкласса называется ковариантным переопределением методов и доступен с Java 5, что позволяет избежать приведения типа на стороне клиента:
Course javaBeginners = new Course("Java", 100, 10);
Course clone = javaBeginners.clone();
Ранее, например, с классом Date, нужно было явно приводить результат метода clone():
Date d = new Date();
Date clone = (Date) d.clone();
👩💻
@javaquiz
⚡️Узнайте, как проектировать бизнес-ориентированные приложения с помощью Domain-Driven Design!
🔥27 мая в 20:00 мск приглашаем на бесплатный вебинар «Практикум проектирования приложения с помощью DDD», где вы на практике разберёте:
– что такое Domain-Driven Design и когда он действительно работает;
– как выделять Bounded Context'ы и формировать Ubiquitous Language;
– как строить архитектуру вокруг предметной области;
– как проектировать API и интерфейсы, опираясь на модель;
– и какие ошибки чаще всего допускают при внедрении DDD в командах.
🛠 В реальном времени спроектируем приложение по DDD на живом кейсе — от концепции до архитектурных решений.
👉Регистрация: https://clck.ru/3MDZvL
Занятие приурочено к старту курса «Архитектура и шаблоны проектирования», где вы глубже освоите DDD, CQRS, Event Storming и другие архитектурные практики.
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
🔥27 мая в 20:00 мск приглашаем на бесплатный вебинар «Практикум проектирования приложения с помощью DDD», где вы на практике разберёте:
– что такое Domain-Driven Design и когда он действительно работает;
– как выделять Bounded Context'ы и формировать Ubiquitous Language;
– как строить архитектуру вокруг предметной области;
– как проектировать API и интерфейсы, опираясь на модель;
– и какие ошибки чаще всего допускают при внедрении DDD в командах.
🛠 В реальном времени спроектируем приложение по DDD на живом кейсе — от концепции до архитектурных решений.
👉Регистрация: https://clck.ru/3MDZvL
Занятие приурочено к старту курса «Архитектура и шаблоны проектирования», где вы глубже освоите DDD, CQRS, Event Storming и другие архитектурные практики.
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Изучите различные модели взаимодействия между микросервисами и выберите оптимальный подход для вашего проекта
Приглашаем на открытый урок.
🗓 28 мая в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Software Architect».
На вебинаре вы узнаете:
Вебинар будет полезен:
- Разработчикам, работающим с микросервисной архитектурой.
- Архитекторам ПО, стремящимся оптимизировать межсервисное взаимодействие.
- Backend и Fullstack разработчикам, заинтересованным в улучшении взаимодействия между сервисами.
- DevOps-инженерам, отвечающим за развертывание и управление микросервисами.
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
➡️ Использование Iterator для перебора List
В Java есть несколько способов перебрать список: цикл for с индексом, расширенный for и Iterator. Раньше я использовал цикл for с методом get(), как показано ниже:
for (int i = 0; i < list.size(); i++) {
String name = list.get(i);
}
🗣️ Этот метод работает для ArrayList, но если список — это LinkedList или другая реализация без поддержки случайного доступа, время выполнения увеличится до O(N^2), потому что get() для LinkedList имеет O(n) сложность.
Кроме того, при использовании циклов может возникнуть ошибка в многопоточном режиме, например, при работе с CopyOnWriteArrayList, когда один поток изменяет список, а другой пытается получить доступ к элементам, что может привести к IndexOutOfBoundsException.
✔️ Лучше использовать Iterator, который является стандартным способом перебора списка:
Iterator itr = list.iterator();
while (itr.hasNext()) {
String name = itr.next();
}
Это безопаснее и предотвращает непредсказуемое поведение.
👩💻
@javaquiz
В Java есть несколько способов перебрать список: цикл for с индексом, расширенный for и Iterator. Раньше я использовал цикл for с методом get(), как показано ниже:
for (int i = 0; i < list.size(); i++) {
String name = list.get(i);
}
🗣️ Этот метод работает для ArrayList, но если список — это LinkedList или другая реализация без поддержки случайного доступа, время выполнения увеличится до O(N^2), потому что get() для LinkedList имеет O(n) сложность.
Кроме того, при использовании циклов может возникнуть ошибка в многопоточном режиме, например, при работе с CopyOnWriteArrayList, когда один поток изменяет список, а другой пытается получить доступ к элементам, что может привести к IndexOutOfBoundsException.
✔️ Лучше использовать Iterator, который является стандартным способом перебора списка:
Iterator itr = list.iterator();
while (itr.hasNext()) {
String name = itr.next();
}
Это безопаснее и предотвращает непредсказуемое поведение.
👩💻
@javaquiz
➡️ Maven
Maven — один из трёх самых популярных инструментов для сборки проектов на Java. Он отвечает за компиляцию, создание jar-файлов (Java-архивов), создание дистрибутива программы, генерацию документации.
🗣️ Maven — просто отличная штука, хоть поначалу и не очень понятная. Если вы никогда не использовали Maven раньше, вы многое потеряли.
🔗 Ссылочка на доку (https://maven.apache.org/guides/index.html)
👩💻
@javaquiz
Maven — один из трёх самых популярных инструментов для сборки проектов на Java. Он отвечает за компиляцию, создание jar-файлов (Java-архивов), создание дистрибутива программы, генерацию документации.
🗣️ Maven — просто отличная штука, хоть поначалу и не очень понятная. Если вы никогда не использовали Maven раньше, вы многое потеряли.
🔗 Ссылочка на доку (https://maven.apache.org/guides/index.html)
👩💻
@javaquiz