Java Гениев
87 subscribers
204 photos
77 videos
180 links
Download Telegram
Media is too big
VIEW IN TELEGRAM
Обновление Java с 17 на 21: через тернии к звездам

Меня зовут Денис, я тимлид команды R&D в Naumen Service Management Platform.

Как большие почитатели языка Java, мы, Naumen Service Management Platform, стараемся мигрировать на свежие версии языка. Причин множество: это и улучшенная безопасность, и появление крутых языковых фич, и буст перформанса. Но путь не всегда оказывается простым.

В докладе я расскажу, с какими проблемами и препятствиями мы столкнулись при обновлении продукта Naumen SMP на новую LTS версию Java. Также поделюсь мыслями, а зачем вообще стоит обновляться.

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

https://habr.com/ru/companies/naumen/articles/822639/

👉
🧑‍💻 Виды тестов. Основные инструменты и их использование

Ждём вас на первом занятии серии открытых практических уроков по тестированию Spring-приложений от OTUS, где мы:

- сделаем фокус на теории и основных инструментах тестирования Java-приложений;
- обсудим, как сделать наше приложение тестируемым, какие тесты бывают и как для их написания использовать такие фреймворки и библиотеки как JUnit5, Mockito, AssertJ с учетом некоторых их особенностей и возможностей;
- ответим на все возникающие вопросы.

Спикер — Senior Software Engineer и опытный преподаватель.

Встречаемся 24 июня в 20:00 мск в преддверии старта курса «Разработчик на Spring Framework».
Все участники вебинара получат специальную цену на обучение!

8️⃣9️⃣🔟Регистрируйтесь прямо сейчас, чтобы не пропустить бесплатный урок: https://vk.cc/cxOdSX

🎁 Только до 23 июня скидка на курс 10%, подробности у наших менеджеров - просто оставь заявку.

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Как Spring Framework реализует паттерн Dependency Injection?

Инверсия контроля (inversion of control, IoC) – принцип проектирования, по которому контроль над потоком управления передается фреймворку. Управляющий и прикладной код разделяются. При разработке модуля этот подход избавляет от необходимости знать о других модулях программы и деталях их взаимодействия. Такой код становится более переипользуемым и модульным, уменьшает связность.

Внедрение зависимостей (Dependency Injection, DI) – одна из реализаций IoC. При взаимодействии с другими модулями, программа оперирует высокоуровневыми абстракциями, тогда как конкретная её реализация поставляется фреймворком.

Стандартная реализация DI – фреймворк инстанциирует все сервисы, и складывает их в IoC-контейнер. При этом специальная сущность, Service Locator, занимается поиском соответствия реализаций абстракциям и их внедрением.

Spring – большой набор различных библиотек. DI реализуется одной из основных библиотек – Spring IoC.

Сущности бизнес-логики в Spring, как и в JavaEE называются beans. Бины объявляются различными способами, корни большинства из них лежат в понятии Configuration. В качестве контейнера бинов выступает ApplicationContext. Чтобы передать инициализацию зависимости контексту, она помечается аннотацией .

👉
Готовы освоить любимый язык опытных разработчиков и сделать свой стек непобедимым?

Ждём вас на открытом практическом уроке «Знакомство с Clojure, идеология, синтаксис и основные особенности» от OTUS, где мы:

- поговорим о том, что из себя представляет язык Clojure;
- обсудим предысторию его появления и основную идеологию;
- продемонстрируем выполнение кода в REPL и взаимодействие с ним из IDE;
- ответим на все возникающие вопросы.

🔔Встречаемся 25 июня в 19:00 мск в рамках курса «Clojure Developer». Все участники вебинара получат специальную цену на обучение!

Регистрируйтесь прямо сейчас, чтобы не пропустить бесплатный урок.
Реализация авторизации на основе ролей в Spring Boot с помощью Keycloak

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

В предыдущей статье мы узнали, как защитить Spring Boot REST API с помощью Keycloak, используя протокол аутентификации OpenID Connect.

В этой статье мы добавим авторизацию на основе ролей.

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

https://gauthier-cassany.com/posts/spring-boot-keycloak-roles

👉
Spring Boot 3.2: замените свой RestTemplate на RestClient

В мире Spring Boot отправка HTTP запросов к внешним сервисам является весьма распространенной задачей. Традиционно при достижении этой цели разработчики полагались на RestTemplate. Однако, по мере развития Spring Framework, на свет появился новый и более мощный способ обработки HTTP запросов: так называемый WebClient. Spring Boot 3.2 представил нам новый API для REST запросов: RestClient, использующий те же принципы fluent api, что и WebClient.

RestClient предлагает нам более современные и интуитивно понятные способы взаимодействия с RESTful сервисами.

https://habr.com/ru/companies/spring_aio/articles/822529/

👉
👨‍🎓 Java Developer Professional: Что говорят студенты о курсе?

Сегодня один из выпускников курса Java Developer Professional от Отус, Алексей Андреев, расскажет о своем опыте.

Смотреть видео отзыв: https://vk.cc/cxSnkL

Студенты Java Developer Professional выделяют следующие преимущества курса:

✔️ Обилие практических заданий.
✔️ Высокая экспертиза преподавателей.
✔️ Интересный контент, особенно для тех, кто уже знаком с языком Java.

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

Группа стартует уже 27 июня! Успейте присоединится.

Чтобы оценить свой уровень знаний для обучения на курсе, пройдите вступительный тест.

👉 ПРОЙТИ ТЕСТ: https://vk.cc/cxSni4

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Что такое StringJoiner?

⚫️ObjDoubleConsumer<T> - операция, которая принимает два аргумента классов T и Double, производит с ними некоторое действие и ничего не возвращает;
⚫️ObjLongConsumer<T> - операция, которая принимает два аргумента классов T и Long, производит с ними некоторое действие и ничего не возвращает;
⚫️ObjIntConsumer<T> - операция, которая принимает два аргумента классов T и Integer, производит с ними некоторое действие и ничего не возвращает.

👉
Совет по Spring Boot💡

Когда вам нужно настроить bean, предоставляемый Spring Boot, проверьте наличие интерфейсов *Customizer - велика вероятность, что вы сможете настроить bean, не отказываясь от автоконфигурации.

👉
👩‍💻 Как стать востребованным Java-разработчиком с нуля?

Получить все необходимые навыки до уровня Middle на комплексном онлайн-курсе «Специализация Java-разработчик» от OTUS.

После обучения вы сможете:

➡️ Создавать приложения на Java
➡️ Работать с реляционными базами данных
➡️ Разрабатывать серверные веб-приложения
➡️ Претендовать на позиции Middle Java Developer

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

➡️ Оставьте заявку прямо сейчас и получите спеццену на курс: https://vk.cc/cxY5lG

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Совет по Spring Boot💡

После аннотации bean с , вы можете использовать параметры метода валидации с аннотациями валидации bean, такими как , и т.д.

👉
Чем отличается ReentrantLock от обычного Lock?

Lock – это интерфейс, ReentrantLock – его реализация. «Reentrant» говорит о том, что один и тот же поток может перезахватывать уже захваченный лок. Интерфейс не требует этого свойства. Обычный блок synchronized тоже является reentrant – вложенная синхронизация на том же мониторе отработает без проблем.

Примеры не-reentrant локов из стандартной библиотеки – представления класса StampedLock, возвращаемые его методами asReadLock() и asWriteLock().

👉
«Код Ход Шоу» от Т-Банка для тех, кто работает на Java или только вкатывается:

— Необычный формат крестиков-ноликов. Участникам задают вопросы на знание Java, и если они отвечают правильно — могут поставить знак.
— Команды разработчиков из бигтеха (Т-Банк, Яндекс, Вертикаль, X5 Tech, Сбер, Samokat. tech и другие).
— Победитель проходит дальше, а в финале встретятся две лучшие команды.

Смотрите ютуб-шоу и подписывайтесь на телеграм-канал с анонсами новых выпусков и другими полезными материалами по Java.

erid:2VtzqvCp6uD
Реклама. АО "Тинькофф Банк", ИНН 7710140679, лицензия ЦБ РФ № 2673
Что выбрать, Stack или Queue?

Queue – один из основных интерфейсов Java Collections Framework. В общем случае (но не обязательно) представляет FIFO-коллекцию – элементы можно добавлять в хвост, брать или удалять из головы. Его наследник, интерфейс Deque (double ended queue, двусторонняя очередь), позволяет манипулировать элементами на обеих сторонах.

StackLIFO коллекция. То есть добавлять и удалять элементы можно только с одного конца. Кроме того, стек наследуется от Vector, и тоже является пересинхронизированным и устаревшим. Его документация явно рекомендует предпочесть использовать Deque.

👉
Подборка Telegram каналов для программистов

Системное администрирование 📌
Типичный Сисадмин (фото железа, было/стало)
Книги для админов, полезные материалы
Все для системного администратора
Библиотека Системного Администратора
Чат системных администраторов
DevOps: Пишем о Docker, Kubernetes и др.
Новости Линукс Linux


Новости высоких технологий, науки и техники💡
Мир технологий (Technology World)

Полезный контент по программированию на Rust
Библиотека Go (Golang) разработчика

Программисты, дизайнеры, новости из мира IT.
Обучающие видео, книги по Физике и Математике

Библиотека PHP программиста 👨🏼‍💻👩‍💻
Подборки по Node js и все что с ним связано
Библиотека Ruby программиста

1C разработка 📌
Cтатьи, курсы, советы, шаблоны кода 1С

Программирование C++📌
Библиотека C/C++ разработчика
Книги для программистов C/C++
Учим C/C++ на примерах

Программирование Python 📌
Python академия. Учи Python быстро и легко🐍
Библиотека Python разработчика
Python подборки на русском и английском
Книги по Python Rus

Java разработка 📌
Библиотека Java разработчика
Книги по Java Rus
Учим Java на примерах

GitHub Сообщество 📌
Интересное из GitHub

Базы данных (Data Base) 📌
Все про базы данных

Мобильная разработка: iOS, Android 📌
Мобильная разработка
Подборки полезного материала по Kotlin

Фронтенд разработка 📌
Подборки для frontend разработчиков
Frontend советы, примеры и практика!
Подборки по React js и все что с ним связано

Разработка игр 📌
Все о разработке игр

Вакансии 📌
Системный Администратор
Вакансии в IT

Чат программистов📌


Библиотеки 📌
Книги для программистов Rus
Книги по программированию
Библиотека программиста
Книги для программистов
Книги для программистов

БигДата, машинное обучение 📌
Data Science, Big Data, Machine Learning, Deep Learning

Программирование 📌
Лекции, видеоуроки, доклады с IT конференций
Полезные советы по программированию

QA, тестирование 📌
Библиотека тестировщика

Шутки программистов 📌
Шутки программистов

Защита, взлом, безопасность 📌
Канал о кибербезопасности
Статьи из "Хакера"

Книги, статьи для дизайнеров 📌
Статьи, книги для дизайнеров

Английский 📌
Английский с нуля

Математика 📌
Канал по математике

Excel лайфхак📌
Чем отличается Servlet Container от Application Server?

JavaEE – это стандарт, набор соглашений. Разделяется на множество отдельных самостоятельных спецификаций технологий. В JDK поставляется в виде только интерфейсов и документации, но не их реализации.

Application Server – это полная реализация всех спецификаций стандарта JavaEE: распределенные транзакции, EJB, пуллинг соединений к БД и т.д.. Используется для хостинга полноценных enterprise-приложений (.ear). Примеры – JBoss, TomEE, Glassfish, WebSphere.

Servlet Container (web server) – это реализация минимальной необходимой части JavaEE – Servlet API и JSP. Умеет хостить статический контент, jsp-страницы и выполнять Java код сервлетов. Остальные спецификации JavaEE при необходимости добавляются сторонними библиотеками-реализациями. Примеры – Tomcat, Jetty.

Каждый сервер приложений содержит в себе контейнер сервлетов. Spring Framework – альтернатива JEE, поэтому для запуска приложения на основе Spring обычно достаточно веб-контейнера. Если же приложение использует всю мощь JEE, необходим сервер приложений.


👉
🎲 Школа эксплуатации Kubernetes. Бесплатно!

Привет! Мы — команда Слёрма, учебный центр для айти-специалистов middle+ и фанаты k8s😎

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

Теперь, вместе с Кириллом Борисовым, SRE Lead в MTS Digital и спикером наших курсов, мы запускаем новый бесплатный проект — «Школу эксплуатации Kubernetes». В прямых эфирах школы будем решать реальные кейсы и разбираться с трудностями, которые можно встретить при переходе от теории к практике работы с k8s.

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

🔗 ШКОЛА ЭКСПЛУАТАЦИИ KUBERNETES

Реклама ООО «Слёрм» ИНН 3652901451 erid: 2Vtzqw6Q8Ti
Как получить текущий метод


В общем виде задача сводится к получению текущего стек-трейса, и взятию его верхнего элемента. Гарантированного способа не существует, потому что JVM имеет право «терять» фреймы стека (то есть методы цепочки вызовов) при оптимизации.

1. new Exception().printStackTrace(printStream)
Печатает стек-трейс в текстовом виде в поток. Первой строкой выводится toString() объекта Exception, далее стек вызовов до места создания исключения. Соответственно, из потока нужно будет достать и распарсить вторую строку. В зависимости от JVM формат вывода может отличаться.

2. Thread.currentThread().getStackTrace()

3. new Exception().getStackTrace()
Более красивые способы. Возвращают уже массив готовых объектов-фреймов, нужно только взять первый элемент. Эти вызовы дорогие, они всегда загружают весь стек, даже если нужен первый фрейм. От класса-владельца метода в возвращаемом StackTraceElement доступна только строка имени, для доступа через Reflection придется загружать его вручную.

4. StackWalker.getInstance(options, depth).walk(s -> ...)
Самый продвинутый способ, доступный с Java 9 – специально предназначенный для этого класс. Параметрами метода getInstance() можно ограничивать необходимую глубину и детализацию стека. Результаты – экземпляры StackFrame – содержат готовый для рефлекшна Class<?> вызывающего объекта.

👉
10 лучших практик производительности Spring Boot

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

В этой статье мы сначала обсудим, что такое производительность в целом, а затем рассмотрим 10 лучших практик производительности Spring Boot, чтобы сделать наш Spring Boot быстрым и ресурсоэффективным.


https://digma.ai/10-spring-boot-performance-best-practices/

👉
👩‍💻 Тест по Java от OTUS

Проверь насколько хорошо ты знаешь Java и готов освоить Spring!

Ответишь — пройдешь на продвинутый курс "Разработчик на Spring Framework" от OTUS по специальной цене.

➡️ ПРОЙТИ ТЕСТ: https://vk.cc/cy8cfC

🎫 Курс можно приобрести в рассрочку

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru