Подчеркивания в числовых литералах (Java SE 7+):
Улучшите читаемость с помощью подчеркиваний в числах.
long largeNumber = 123_456_789L;
System.out.println(largeNumber); // Output: 123456789
⁉️Хотите повысить свою квалификацию в Java-разработке?
👩💻 Инвестируйте в успех своей карьеры прямо сейчас! На курсе «Java Developer. Professional» вы получите:
✔️ знание актуального стека технологий;
✔️ 96 часов практической работы с детальным разбором технологий изнутри;
✔️ понимание основ функционирования JVM (сборка мусора, byteCode);
✔️ освоение приемов применения многопоточности;
✔️ практику решения сложных задач с подробным код-ревью от экспертных Java-разработчиков;
✔️ расширение возможностей использования языка Java;
- умение использовать современные фреймворки: Spring WebFlux, Kafka, реактивный Postgres, Kubernetes.
Вы получите инструменты и знания, которые помогут вам писать код быстрее и чище. Все практические навыки вы сможете незамедлительно применять в своей работе.
Готовы прокачать свою востребованность?
➡️ Пройдите короткий тест прямо сейчас, чтобы получить специальную цену на обучение: https://vk.cc/cD6pWH
🎁 А еще приятный бонус: до конца октября действует скидка 10% на обучение.Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Манипуляции со строками с помощью StringBuilder
Используйте StringBuilder для частых изменений, чтобы избежать создания новых объектов String.
StringBuilder message = new StringBuilder(“Hello”);
message.append(“ World!”);
System.out.println(message); // Output: Hello World!
Улучшенный цикл for
Этот цикл кратко выполняет итерацию по коллекциям.
int[] numbers = {1, 2, 3, 4, 5};
for (int number : numbers) {
System.out.println(number);
}
😑 Нельзя просто взять и развернуть отказоустойчивый кластер
Или можно?
Говорят, что выпускники курса «Kubernetes Мега» от учебного центра Слёрм даже не задаются этим вопросом. Они точно знают, как:
👉 перенести свой продукт на платформу k8s
👉 ускорить траблшутинг
👉 обновить систему без простоя
👉 автоматизировать развертывание кластеров
👉 повысить отказоустойчивость своего продукта
А еще умеют развертывать и обслуживать кластеры с автоматической ротацией сертификатов, автодеплоем, резервным копированием и правильным хранением секретов.
⭐️ Новый поток стартует 28 октября.
До 24 октября при покупке места на курсе можно получить в подарок запись интенсива по Service Mesh и сэкономить 50 000 ₽.
🚀 Советы по Java 🚀
Компактный конструктор в записях (Records)
Компактная форма помогает разработчикам сосредоточиться на проверке и нормализации параметров, без утомительной работы по присваиванию параметров полям. 🔥
👉@BookJava
🧠 Если у вас есть конфликты при мерже, не волнуйтесь!
Воспользуйтесь волшебной палочкой, чтобы разрешить простые конфликты. Убрав их, вы сможете сосредоточиться на разрешении остальных. #IntelliJIDEATips
👉@BookJava
Запуск однофайловых программ с исходным кодом
В JDK 11 Java представила возможность запускать программу из одного файла исходного кода с помощью команды java
, без необходимости сначала явно компилировать исходный код. Это работает за счёт того, что команда java
автоматически вызывает компилятор и сохраняет скомпилированный код в памяти. Это может быть отличным способом изучать Java или исследовать новые возможности в API Java, не проходя через процесс компиляции и последующего выполнения кода. Существует несколько способов использования этой функции, а также некоторые ограничения, которые нужно иметь в виду.
https://dev.java/learn/single-file-program/
👉@BookJava
♨️ Анализировать множество показателей и не перегружать приложение?
С Java Flight Recorder – это легко.
Приглашаем вас на открытый урок «Обзор инструмента Java Flight Recorder».
🗓 22 октября в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Java Developer. Advanced» от OTUS.
JFR:
- Регистрирует множество событий внутри виртуальной машины Java
- Не ухудшает производительность
- Помогает детально разобраться в причинах сбоев и ошибок
Хотите освоить? - приходите на вебинар!
Спикер – Александр Царёв, техлид в Сбере.
🔗 Ссылка на регистрацию: https://vk.cc/cCJ0huРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Совет по Java Time
Обратите внимание на equals() и isEqual() в классах работы с датой и временем! ZonedDateTime, OffsetDateTime и OffsetTime ведут себя по-разному:
- equals(): Сравнивает все поля (включая зону/смещение)
- isEqual(): Сравнивает только момент времени (игнорируя зону/смещение)
Один и тот же момент времени может дать разные результаты.
👉@BookJava
Точки соприкосновения: Java & GC
Дмитрий Силин
Разберемся, как вместе уживаются Java-приложение и garbage collector (GC). Какие механизмы позволяют организовать Stop-the-World (STW) режим. Рассмотрим, что такое safepoint и checkpoint. Какие потоки останавливаются, а какие могут продолжить работу. Как GC находит объекты, и как поток приложения обнаруживает изменения, сделанные сборщиком мусора.
Далее перейдем к базовому механизму concurrent режима — барьерам. Что это такое, какие бывают. Рассмотрим, как они попадают в код, на примере интерпретатора. Разберем 2 примера барьеров — read и pre-write, на которых построен concurrent marking в реальных сборщиках мусора. Изучим опыт разработчиков JVM по оптимизации барьеров — colored pointers, self-healing. В заключение сравним STW и concurrent подходы.
источник
👉@BookJava
Хотите научиться разрабатывать парсеры pdf-файлов и создавать полезные приложения?
Приглашаем на открытый урок «Разработка парсера pdf-файла».
🗓 24 октября в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Java Developer. Professional»
На вебинаре разберем:
- как разработать парсер для выписки ВТБ банка в формате pdf;
- весь путь от идеи до практического применения;
- ответы на все возникающие вопросы.
⬇️ В результате урока вы получите практически полезное приложение с подробностями реализации.
Спикер Сергей Петрелевич — опытный Java/Kotlin-разработчик и преподаватель.
Все участники вебинара получат специальную цену на обучение!
🔗 Ссылка на регистрацию: https://vk.cc/cCF7BPРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
14 советов по высокопроизводительной персистентности в Java
В этой статье я расскажу вам о различных советах по оптимизации высокопроизводительной Java Persistence, которые помогут вам получить максимальную отдачу от уровня доступа к данным.
Для создания высокопроизводительного уровня доступа к данным требуется много знаний о внутреннем устройстве баз данных, JDBC, JPA, Hibernate, и в этой статье обобщены некоторые из наиболее важных приемов, которые можно использовать для оптимизации корпоративного приложения.
https://vladmihalcea.com/14-high-performance-java-persistence-tips/
👉@BookJava
Как работает вывод типов?
Для начала разберемся, что такое вывод типов. Type inference – это способность компилятора догадаться, какой тип нужно подставить, и сделать это за вас. На обычном интервью никто не спросит детали алгоритма вывода типов, достаточно будет сказать, что вывод происходит статически, только на основании типов аргументов и ожидаемого типа результата. По сути, вопрос заключается не в «как работает?», а «что это и когда возникает?».
Первое, что многим приходит в голову при фразе «вывод типов» – diamond operator <>. Он появился в Java с версии 7. Его применяют к конструкторам дженерик классов, чтобы отличать требование автоматического вывода типа от raw type.
С Java 9 diamond operator заработал и для анонимных классов.
Для дженерик методов можно указывать параметр явно, но diamond синтаксически недопустим – вывод и так сработает по умолчанию.
В Java 10 для вывода типа локальной переменной добавлено ключевое слово var. Работает это так же, как в большинстве современных языков – ключевое слово ставится вместо типа при объявлении.
Типы выводимых параметров лямбда-выражения также можно не указывать. С Java 11 вместо типа указывается ключевое слово var. Такой синтаксис дает возможность добавлять параметру модификаторы и аннотации.
👉@BookJava
Проверка на null с помощью OptionalOptional
помогает избежать NullPointerExceptions.
String name = "Alice";
Optional<String> maybeName = Optional.ofNullable(name);
System.out.println(maybeName.orElse("Nobody")); // Output: Alice
Как жить без IntelliJ IDEA? Часть №1. Собери сам
На российском рынке сложилась сложная ситуация с IDE для Java-разработчиков. Новости, связанные с ограничением скачивания IntelliJ IDEA Ultimate, недоступностью JetBrains маркетплейса и блокировкой лицензий, которые использовались на территории РФ порождают огромное количество вопросов, на которые не у всех есть ответы.
Команда Spring АйО подготовила цикл статей, в которых постарается ответить на все вопросы, связанные с уходом IntelliJ IDEA из России.
https://habr.com/ru/companies/spring_aio/articles/852526/
👉@BookJava
🦾 Ты крутой джавист? Всегда есть куда расти.
Приходи повышать грейд на хардовый курс «Разработчик на Spring Framework» от OTUS.
👩💻 Авторская программа, с ней ты освоишь владение фреймворками Spring и технологиями вспомогательных проектов (Spring MVC, Spring Security, Spring Boot, Spring Reactive Stack, Spring 5). Получишь умение быстро проходить путь от идеи до production-grade.
🗓 6 ноября в 20:00 мск., пройдет бесплатный открытый урок курса, тема «Spring - разбор (не)стандартных вопросов интервью»
🔗 Ссылка на регистрацию: https://vk.cc/cD2Ahj
Будет интересно!Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Виртуальные потоки: революционное решение для параллелизма
Несмотря на то, что платформе Java почти 30 лет, она стабильно остаётся одной из трёх самых популярных языков программирования. Эта продолжающаяся популярность обусловлена виртуальной машиной Java (JVM), которая абстрагирует такие сложности, как управление памятью, и компилирует код во время выполнения, обеспечивая непревзойдённую масштабируемость на уровне интернета.
Долговременная актуальность Java также объясняется быстрым развитием языка, его библиотек и JVM. Виртуальные потоки Java, представленные в проекте Loom, инициативе сообщества OpenJDK, знаменуют собой революционное изменение в том, как Java справляется с параллелизмом.
Запускает 10 000 platform threads
public class PlatformThreadCreationTimeAnalyzer {
private static class Task implements Runnable {
@Override
public void run() {
System.out.println("Hello! I am a Platform Thread");
}
}
public static void main(String[] args) throws Exception {
long startTime = System.currentTimeMillis();
for (int counter = 0; counter < 10_000; ++counter) {
new Thread(new Task()).start();
}
System.out.print("Platform Thread Creation Time: " + (System.currentTimeMillis() - startTime));
}
}
Полнотекстовый поиск в java приложениях с помощью Elasticsearch
Рассмотрим, как использовать Elasticsearch в качестве поискового движка в приложениях на Spring Boot. Поговорим о стратегии реализации полнотекстового поиска, эффективной индексации сущностей JPA и их связей. Уделим внимание использованию аннотаций полей, настройке релевантности с помощью весовых коэффициентов и реализации нечёткого поиска для обработки вариаций запросов. Также обсудим методы
настройки синонимических связей, многоуровневых фильтров и ранжирования результатов по релевантности для повышения качества поиска.
https://habr.com/ru/companies/rostelecom/articles/851658/
👉@BookJava
Бесплатное IT-образование в 2024
Отобрали для вас полезные телеграм-каналы, которые помогут освоить программирование и другие IT-направления
Выбирайте нужное и подписывайтесь:
👩💻 Java: @Java_Iibrary
👩💻 Моб. разработка: @MobDev
👩💻 Frontend: @FrontendPortal
⚙️ Backend: @BackendPortal
📱 GitHub: @git_developer
🤓 Книги айти: @portalToIT
👩💻 Python: @PythonPortal
👩💻 C#: @KodBlog
👩💻 С/С++: @Cpportal
🖥 Базы Данных & SQL: @SQL
👩💻 Golang: @juniorGolang
👩💻 PHP: @PHPortal
👩💻 Разработка игр: @GameDevgx
👩💻 DevOps: @loose_code
🖥 Data Science: @DataSciencegx
🤔 Хакинг & ИБ: @cybersecinform
🐞 Тестирование: @QAPortal
📱 Маркетинг: @MarketingPortal
🖥 Дизайн: @PortalToDesign
➡️ Сохраняйте себе, чтобы не потерять
Yandex Cloud запустил сервис для ускорения разработки продуктов в облаке Yandex Serverless Integrations
Теперь разработчики смогут при минимальном написании кода автоматизировать различные процессы, например обработку онлайн-заказов и мониторинг систем безопасности.
Сделать это можно благодаря инструменту Yandex Workflows — он позволяет описать последовательность операций с помощью декларативного языка YAML. Сервис автоматически запустит эти процессы и проконтролирует их выполнение.
Помимо этого, Yandex Serverless Integrations включает в себя инструменты EventRouter для передачи событий между сервисами и API Gateway для создания шлюзов между внешними и облачными сервисами по спецификации OpenAPI 3.0.
Читайте подробнее в статье
👩💻 Хотите стать экспертом в разработке на Spring Framework?
Обучение на курсе «Разработчик на Spring Framework» от OTUS — это практический подход к освоению самого востребованного фреймворка для Java-разработчиков.
Узнайте, как создавать веб-приложения на микросервисной архитектуре, автоматизировать задачи с Spring Boot и реализовывать высокоуровневые решения!
В конце курса у вас будет портфолио из готовых приложений и глубокое понимание работы со Spring. Пройдите вебинар-собеседование, чтобы быть готовым к реальным интервью.
➡️ Пройдите вступительный тест для записи на курс и перейдите на новый профессиональный уровень с дипломом, признанным крупными компаниями: https://vk.cc/cCMlGqРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Как работает механизм CyclicBarrier и когда его следует использовать?
CyclicBarrier — это синхронизирующий механизм из библиотеки java.util.concurrent
в Java, который позволяет нескольким потокам остановиться в определенной точке выполнения до тех пор, пока все потоки не достигнут этой точки. После того, как все потоки достигают барьера, они могут продолжить выполнение. Этот механизм часто используется, когда нужно координировать действия группы потоков, чтобы они начинали выполнение следующего этапа одновременно.
Основные характеристики и работа:
1. Количество потоков: CyclicBarrier
создается с числом потоков (или "участников"), которые должны достичь барьера. Пока не все участники достигнут барьера, они будут ожидать.
2. Метод `await()`: Каждый поток вызывает метод await()
на объекте CyclicBarrier
. Это указывает, что данный поток достиг барьера и должен ждать остальных. Как только все потоки вызовут этот метод, барьер "открывается", и все потоки продолжают выполнение.
3. Повторное использование (цикличность): После того, как все потоки проходят через барьер, он может быть использован повторно, поэтому и называется "циклическим". Это удобно для сценариев, где есть многократные синхронизации потоков на разных этапах выполнения программы.
4. Фаза действия: CyclicBarrier
может быть настроен так, чтобы выполнять определенное действие (заданный `Runnable`) один раз, когда все потоки достигают барьера. Это полезно для выполнения дополнительной работы после завершения синхронизации.
Пример использования:
import java.util.concurrent.CyclicBarrier;
public class CyclicBarrierExample {
public static void main(String[] args) {
int numThreads = 3;
CyclicBarrier barrier = new CyclicBarrier(numThreads, new Runnable() {
@Override
public void run() {
System.out.println("Все потоки достигли барьера. Выполняем действие.");
}
});
for (int i = 0; i < numThreads; i++) {
new Thread(new Task(barrier)).start();
}
}
}
class Task implements Runnable {
private CyclicBarrier barrier;
public Task(CyclicBarrier barrier) {
this.barrier = barrier;
}
@Override
public void run() {
try {
System.out.println(Thread.currentThread().getName() + " выполняет работу.");
Thread.sleep(1000); // Симуляция работы
System.out.println(Thread.currentThread().getName() + " достиг барьера.");
barrier.await(); // Ожидание остальных потоков
System.out.println(Thread.currentThread().getName() + " продолжает выполнение.");
} catch (Exception e) {
e.printStackTrace();
}
}
}
CyclicBarrier
:CountDownLatch
:CyclicBarrier
можно использовать многократно, в то время как CountDownLatch
работает один раз.CyclicBarrier
ожидает определенного числа потоков, тогда как CountDownLatch
уменьшается каждый раз при вызове countDown()
, независимо от того, каким потоком это было вызвано.Знали ли вы, что вы можете перетащить класс или запись #Java в @vaadin Copilot
, чтобы автоматически сгенерировать для него форму? Теперь вы знаете ✨
👉@BookJava
Научитесь использовать ключевую особенность Clojure на открытом уроке для опытных разработчиков.
Запускайте программу всего один раз и работайте с ней в реальном времени весь процесс разработки.
Приходите на вебинар «Интерактивная разработка на языке Clojure»!Записаться на событие: https://vk.cc/cCIZmx
Вы узнаете:
- Как добавлять новые функции и изменять состояние программы
- Как «прощупывать» любые данные и пошагово отлаживать код.
- Как запускать тесты и подключаться к внешним системам.
Занятие пройдёт 24 октября в 20:00 МСК и приурочено к старту курса «Clojure Developer». После урока вы сможете продолжить обучение по специальной цене и даже в рассрочку!
Для бесплатного участия и получения записи регистрируйтесь прямо сейчас: https://vk.cc/cCIZmxРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Java. Проблема с null. Null safety
В этом видео я рассказываю о проблеме с null в языке программирования Java, из-за которой возникает печально известное NullPointerExeption. Даю некоторые рекомендации по организации кода для борьбы с этой проблемой и повышения надежности работы программ.
источник
👉@BookJava
Как легко перейти с Java на Rust: Особенности и советы
После работы над двумя коммерческими проектами на Rust я получил хороший практический опыт в этом языке. Это были backend сервисы для веб-приложений, где Rust использовался для основной бизнес-логики и работы с базами данных.
Кроме того, я создал три open source библиотеки на Rust, которые публиковал на GitHub. Это позволило мне лучше изучить идиоматичный Rust, работу с асинхронностью и т. д.
В целом, после работы над этими проектами у меня как Java-разработчика накопился интересный опыт, которым хотелось бы поделиться для тех, кто только начинает изучать Rust, приходя из мира Java. Далее я привожу несколько полезных советов, которые помогут в переходе на Rust.
https://habr.com/ru/articles/756984/
👉@BookJava
Как эффективно разделять приложения на микросервисы?
Расскажет Евгений Непомнящий — разработчик в IT Sense. Встречаемся на бесплатном практическом уроке от OTUS, где вы вместе с опытным экспертом:
- рассмотрите принципы функциональной декомпозиции;
- научитесь выделять отдельные компоненты приложения;
- погрузитесь в методику EventStorming;
- изучите подход API First Design;
- узнаете, как разрабатывать API.
Встречаемся 28 октября в 20:00 мск в рамках курса «Software Architect». Доступна рассрочка на обучение!
Ссылка для регистрации: https://vk.cc/cCxnDxРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Подборка Telegram каналов для программистов
Системное администрирование 📌
/channel/sysadmin_girl Девочка Сисадмин
/channel/srv_admin_linux Админские угодья
/channel/linux_srv Типичный Сисадмин
/channel/devops_star DevOps Star (Звезда Девопса)
/channel/i_linux Системный администратор
/channel/linuxchmod Linux
/channel/sys_adminos Системный Администратор
/channel/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
/channel/sysadminof Книги для админов, полезные материалы
/channel/i_odmin Все для системного администратора
/channel/i_odmin_book Библиотека Системного Администратора
/channel/i_odmin_chat Чат системных администраторов
/channel/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
/channel/sysadminoff Новости Линукс Linux
1C разработка 📌
/channel/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
Программирование C++📌
/channel/cpp_lib Библиотека C/C++ разработчика
/channel/cpp_knigi Книги для программистов C/C++
/channel/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
/channel/pythonofff Python академия. Учи Python быстро и легко🐍
/channel/BookPython Библиотека Python разработчика
/channel/python_real Python подборки на русском и английском
/channel/python_360 Книги по Python Rus
Java разработка 📌
/channel/BookJava Библиотека Java разработчика
/channel/java_360 Книги по Java Rus
/channel/java_geek Учим Java на примерах
GitHub Сообщество 📌
/channel/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
/channel/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
/channel/developer_mobila Мобильная разработка
/channel/kotlin_lib Подборки полезного материала по Kotlin
Фронтенд разработка 📌
/channel/frontend_1 Подборки для frontend разработчиков
/channel/frontend_sovet Frontend советы, примеры и практика!
/channel/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
/channel/game_devv Все о разработке игр
Библиотеки 📌
/channel/book_for_dev Книги для программистов Rus
/channel/programmist_of Книги по программированию
/channel/proglb Библиотека программиста
/channel/bfbook Книги для программистов
/channel/books_reserv Книги для программистов
БигДата, машинное обучение 📌
/channel/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning
Программирование 📌
/channel/bookflow Лекции, видеоуроки, доклады с IT конференций
/channel/coddy_academy Полезные советы по программированию
/channel/rust_lib Полезный контент по программированию на Rust
/channel/golang_lib Библиотека Go (Golang) разработчика
/channel/itmozg Программисты, дизайнеры, новости из мира IT
/channel/php_lib Библиотека PHP программиста 👨🏼💻👩💻
/channel/nodejs_lib Подборки по Node js и все что с ним связано
/channel/ruby_lib Библиотека Ruby программиста
QA, тестирование 📌
/channel/testlab_qa Библиотека тестировщика
Шутки программистов 📌
/channel/itumor Шутки программистов
Защита, взлом, безопасность 📌
/channel/thehaking Канал о кибербезопасности
/channel/xakep_1 Статьи из "Хакера"
Книги, статьи для дизайнеров 📌
/channel/ux_web Статьи, книги для дизайнеров
Английский 📌
/channel/UchuEnglish Английский с нуля
Математика 📌
/channel/Pomatematike Канал по математике
/channel/phis_mat Обучающие видео, книги по Физике и Математике
Excel лайфхак📌
/channel/Excel_lifehack
/channel/tikon_1 Новости высоких технологий, науки и техники💡
/channel/mir_teh Мир технологий (Technology World)
Вакансии 📌
/channel/sysadmin_rabota Системный Администратор
/channel/progjob Вакансии в IT