Java Гениев
87 subscribers
204 photos
77 videos
180 links
Download Telegram
👩‍💻 Тест по Java от OTUS

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

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

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

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

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Какие отличия между @⁠Component, @⁠Service, @⁠Repository и @⁠Controller?

– простой способ сделать объявление класса объявлением Spring-бина. Из всех компонентов, которые попали в сканирование (о которых знает ), будут созданы бин-дефинишны.

Остальные аннотации – это алиасы аннотации . Сами по себе они не добавляют поведения, и технически в рамках ядра Spring Framework работают так же.

Эти аннотации называют «Stereotype annotations». Их главное отличие – семантика, логическая роль компонентов:
@⁠Service – реализация бизнес-логики;
@⁠Repository – хранилище данных: «репозиторий» из Domain-Driven Design или классический DAO;
@⁠Controller – обработка веб-запросов (методы )

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

👉
Как использовать ReadWriteLock?

Стандартный интерфейс ReadWriteLock предоставляет потокобезопасный разделенный доступ на чтение и на запись. Для этих целей в нём объявлены два метода: readLock() и writeLock(). Они возвращают объекты под интерфейсом Lock.

Оба типа блокировок одного экземпляра ReadWriteLock связаны. Пока какой-то поток не заберет блокировку на запись, сколько угодно потоков могут читать не мешая друг другу. Блокировкой readLock закрывается часть кода с семантикой «только чтения» некоторого условного «ресурса». В критической секции кода writeLock осуществляется модификация ресурса.

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

Интерфейс реализуется классом ReentrantReadWriteLock, который во многом похож на обычный ReentrantLock.

👉
🎯 Исключения в разработке — что это и как с ними работать?

Узнайте на открытом практическом уроке «Исключения. От Java до Spring, от шестнадцати и старше» от OTUS.

На вебинаре опытный эксперт разберет:

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

И, конечно, мы не забудем про Spring!

Спикер — Senior Software Engineer.

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

👉 Пройдите короткий тест прямо сейчас, чтобы посетить бесплатный урок: https://vk.cc/cwFN3f

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

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

Кроме непосредственно Java-приложений (команда java), этот параметр применим и для других утилит JDK, таких как javac, javadoc и другие.

Есть два основных способа установки classpath: в переменной окружения ОС CLASSPATH, и в аргументе командной строки -cp (синоним -classpath). Второй способ предпочтительнее, потому что позволяет устанавливать разные значения для разных приложений. Значение по умолчанию – текущая директория.

В параметре передаются пути к jar-файлам и корневым директориям с пакетами. Пути разделяют символом : в параметре командной строки, или же ; в переменной окружения. Чтобы включить все файлы директории, разрешается использовать в конце пути символ *.

Если приложение запускается из jar-файла (java -jar), classpath должен быть указан в его манифесте.

👉
Подборка 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 лайфхак📌
Совет по Spring 💡

Вы можете преобразовать String RequestParams непосредственно в LocalDate на уровне запроса с помощью . Вам необходимо указать шаблон. Это может быть ваш собственный шаблон или шаблон ISO. Нет необходимости преобразовывать его «вручную».

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/format/annotation/DateTimeFormat.html

👉
👩‍💻 Как и зачем Java-разработчику сочетать DTO, MapStruct и Spring?

Расскажем на открытом практическом уроке от OTUS.
Спикер занятия — Senior Software Engineer.

На вебинаре мы:

- разберем паттерн DTO (Data Transfer Object);
- обсудим проблемы, которые решает паттерн и его основные сценарии использования на примере небольшого приложения на Spring Boot;
- изучим инструмент MapStruct, чтобы сделать данное сочетание удобным и сократить количество boilerplate кода.

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

➡️ Регистрация на урок: https://vk.cc/cwP72X

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

Вы думаете о замене 🍃`RestTemplate` на новый Spring RestClient? Конфигурация SSL очень проста благодаря поддержке 🔐`SslBundles` через интерфейс RestClientSsl 👆

👉
Совет по Spring Boot 💡

Если вы используете DTO в Spring Data/JPA, вы можете автоматизировать отображение между сущностями и DTO с помощью библиотеки Blaze Persistence (https://persistence.blazebit.com). Тогда вы сможете воспользоваться преимуществами, например, паттерна Spring repository.

👉
AnyLogic — почему это ПО используют современные компании и зачем вам его осваивать?

Узнайте на открытом практическом уроке от OTUS, где мы разберем:

- что может AnyLogic, что не могут решатели дифференциальных уравнений, Excel и здравый смысл;
- основные возможности AnyLogic;
- основные логические блоки;
- начальную настройку любой модели;
- начальную настройку исходных чертежей.

Спикер — опытный разработчик, веб-дизайнер и преподаватель.

Встречаемся 23 мая в 20:00 мск в преддверии старта курса «Имитационное моделирование на базе AnyLogic». Все участники вебинара получат специальную цену на обучение и консультацию от менеджеров OTUS!

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

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

Используйте SpringApplicationBuilder для настройки запуска, свойств и профилей приложения.

https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/builder/SpringApplicationBuilder.html

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

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

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

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

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

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

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

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

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

Языковая конструкция static import обязана располагаться там же, где и обычные импорты – обязательно между package и объявлением основного класса файла.

👉
This media is not supported in your browser
VIEW IN TELEGRAM
Мечтаешь об успешной карьере в Java-разработке, но не знаешь, с чего начать
Прокачайся бесплатно в ИТ-лагере T1.Дебют!

🌟 Приглашаем студентов и выпускников всей страны в ИТ-лагерь — это новый образовательный интенсив для Java-разработчиков от Холдинга Т1 — крупнейшей ИКТ-компании в России по версии RAEX 2023.

ИТ-лагерь проходит в два этапа: 1 месяц онлайн-обучения и неделя летнего атмосферного офлайн-буткемпа! ☀️

Гибкий формат позволяет совмещать обучение в ИТ-лагере со сдачей сессии или работой.

Финалисты получат сертификат на оплачиваемую стажировку, а лучших выпускников с опытом сразу пригласят в команду Т1.

🗓 Подай заявку до 31 мая

Реклама. ООО "Т1". ИНН 7720484492.
new Integer(128) == 128?

Для всех классов-оберток над примитивами кроме Float и Double работает механизм кэширования. Некоторые значения создаются на этапе инициализации класса, и переиспользуются когда объект создается не оператором new (например с помощью valueOf).

Кэшируемые значения – оба возможных Boolean, Character до '\u007f' (127) и все целые числа от -128 до 127 включительно. С Java 7 верхнюю границу для Integer можно увеличить параметром java.lang.Integer.IntegerCache.high.

Значения кэшируются и во многих других встроенных классах: BigDecimal, Currency, пустые коллекции. Детали можно узнавать из исходников и документаций, так как эти кэши реализованы не на уровне JVM а в коде классов.

В конкретно этом примере скрыт еще один подвох: объект класса-обертки сравнивается с примитивом. Это приводит к анбоксингу и сравнению значений. И ответ на вопрос – да.

👉
Почему интерактивная разработка на Clojure — это круто?

В Clojure ты можешь запустить программу всего один раз и взаимодействовать с ней на протяжении всего процесса разработки в реальном времени. Хочешь разобраться? Тогда ждем тебя на открытом практическом уроке от OTUS, где мы разберем:

▫️как добавлять новые функции или менять состояние программы;
▫️как «прощупывать» любые данные и пошагово отлаживать код;
▫️как запускать тесты и подключаться к внешним системам.

И всё это не выходя из интерактивной среды разработки REPL!

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

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

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Как инициализировать переменную функционального интерфейса?

Функциональный интерфейс – всё ещё интерфейс, поэтому остаются доступными стандартные способы. Интерфейс можно реализовать обычным классом, и затем создать его экземпляр оператором new. Можно совместить эти два действия, и создать экземпляр анонимного класса.

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

1. Лямбда-выражение: (x, y) -> x * y
2. Ссылка на метод: Math::sqrt

На эти способы накладывается небольшое ограничение: тип функционального параметра/переменной должен быть указан явно. Это значит, что лямбдой или метод-референсом нельзя инициализировать переменную, объявленную ключевым словом var. Также, чтобы передать лямбду или референс в параметр generic-типа, этот тип должен быть ограничен функциональным интерфейсом (должен стираться в него).

👉
Совет по Java 💡☕️

Чтобы получить все дни месяца, вы можете начать с объекта YearMonth, получить его первый день, а затем использовать функцию datesUntil(), которая возвращает Stream всех дней до указанной даты.

👉