Библиотека Java разработчика
11.3K subscribers
830 photos
388 videos
302 files
1.2K links
Библиотека Java разработчика. Java, Spring, Maven, Hibernate


По всем вопросам @evgenycarter
Download Telegram
Чего следует избегать при написании Java-кода

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

Использование Enum.values

public enum Fruits {
APPLE, PEAR, ORANGE, BANANA;

public static void main(String[] args) {
System.out.println(Fruits.values());
System.out.println(Fruits.values());
}
}
// output
// [Lcom.test.Fruits;@7ad041f3
// [Lcom.test.Fruits;@251a69d7


Передача параметров Optional в качестве параметра метода

LocalDateTime getCurrentTime(Optional<ZoneId> zoneId) {
return zoneId.stream()
.map(LocalDateTime::now)
.findFirst()
.orElse(LocalDateTime.now(ZoneId.systemDefault()));
}

Использование StringBuilder

String longString = "";
longString +="start";
longString +="middle";
longString +="middle";
longString +="middle";
longString +="end";



https://medium.com/@b.stoilov/things-to-avoid-while-writing-java-cd078e5aa61c

👉@BookJava
Media is too big
VIEW IN TELEGRAM
Пишем рекомендательную систему музыки на Java
Андрей Кузнецов — Мастер-класс

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

Используя открытый датасет, мы пишем с нуля на Java рекомендательную систему музыки и разберем, какие из наивных решений могут не сработать в реальных системах. На примере технологий Одноклассников спикер рассказывает, как решаются ML-задачи в гетерогенных продакшенах, где необходимо использовать вместе Java и Python.

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

источник

👉@BookJava
🧙‍♂️Что может помочь, чтобы продвинуться в Java-разработке: магия или практика?

Расскажем на курсе "Разработчик на Spring Framework" от OTUS.

🤣 Принимаем в свой орден до конца мая

⚡️ Пройди тест по Java от OTUS и проверь, готов ли ты к обучению на нашем курсе?

Ответишь — пройдешь курс по специальной цене.

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

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

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Please open Telegram to view this post
VIEW IN TELEGRAM
Как не допустить сериализацию?

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

private void writeObject(ObjectOutputStream out) throws IOException {
throw new NotSerializableException();
}

private void readObject(ObjectInputStream in) throws IOException {
throw new NotSerializableException();
}

👉@BookJava
Media is too big
VIEW IN TELEGRAM
Всё, что нужно знать про СВЯЗАННЫЙ СПИСОК в программировании

источник

👉@BookJava
Media is too big
VIEW IN TELEGRAM
Docker и Spring Boot микросервис (Быстрый старт)

Разберем основные понятия докера и запустим spring boot микросервис в докере

00:00 Intro
00:58 Установить докер
02:05 Развитие виртуализации
09:30 Компоненты Docker
11:25 Docker Daemon
11:50 Dockerfile
12:42 Docker Image
13:12 Docker Registry
13:45 Docker Container
14:00 Dockerhub
14:57 Практика. Пишем микросервис
17:30 Практика. Пишем dockerfile
23:25 Практика. Создаем docker образ
25:48 Практика. Запускам docke контейнер
27:19 Практика. Основные команды
30:00 Best practice. Как еще можно написать dockerfile
33:14 Best practice. Рекомендации
35:01 Итог

источник

👉@BookJava
Как работают фильтры сервлетов?

Servlet содержит саму бизнес-логику обработки запросов. Реализации интерфейса javax.servlet.Filter выстраиваются в цепочку, через которую проходит запрос по пути в сервлет, и ответ на него по пути обратно к пользователю.

Filter Chain – типичный пример реализации паттерна Chain of responsibility. Каждый фильтр может модифицировать запрос/ответ, и либо отправить на обработку следующему фильтру, либо заворачивать обратно. В фильтрах удобно выполнять некий общий код обработки запросов: отклонение неавторизованных обращений, логгирование, обогащение запроса/ответа данными из контекста.

Фильтр состоит из трех методов: init, doFilter и destroy. doFilter – основная реализация фильтрации, он вызывается для каждого запроса. Инициализация и уничтожение вызываются строго по одному разу. Кроме того, сервлет-контейнер гарантирует, что их вызовы не будут пересекаться: doFilter не начнет работать до конца выполнения init, и закончит до начала destroy.

👉@BookJava
Media is too big
VIEW IN TELEGRAM
Kafka Cluster в Docker

Настроим docker-compose.yml для кафка кластера и запустим наше приложение с кафкой из докера

00:00 Intro
00:30 Конфигурация одного сервера
10:23 Запуск и проверка работы
15:15 Конфигурация кластера
18:05 Запуск кластера и проверка работы
19:30 environment.env
21:30 environment.env
22:56 Итог

источник

👉@BookJava
♨️ Хочешь выйти на новый профессиональный уровень джавист?
- Осваивай Spring!


Тест на знание языка Java

— Ответь на 21 вопрос
и проверь, насколько хорошо nы знаешь язык Java и готовы освоить Spring. Сможешь сдать — пройдёшь на продвинутый онлайн-курс "Разработчик на Spring" Framework со скидкой!

👉 ПРОЙТИ ТЕСТ ОНЛАЙН-КУРСА "Разработчик на Spring Framework": https://vk.cc/cwnPi5

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

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Please open Telegram to view this post
VIEW IN TELEGRAM
JRE – Java Runtime Environment, Java-окружение времени выполнения. Это набор всего необходимого чтобы запустить скомпилированную Java-программу. Окружение состоит из виртуальной машины Java (JVM), библиотеки классов (Java Class Library), консольной команды java и прочей инфраструктуры. Тем не менее, JRE не достаточно чтобы создавать новые программы.

JDK – Java Development Kit, набор Java-разработчика. Это полнофункциональный SDK для Java. JDK включает в себя JRE, но кроме того содержит компилятор (javac) и другие инструменты разработки, такие как javadoc и jdb. С помощью JDK можно создавать и компилировать программы.

В большинстве случаев, если вам нужно только запускать Java программы, вы устанавливаете только JRE, если же вы планируете программировать на Java, вместо этого вам необходим JDK.

https://stackoverflow.com/questions/1906445/what-is-the-difference-between-jdk-and-jre/1906455#1906455

👉@BookJava
Какие задачи решает Spring Data?

Это проект, который упрощает работу с системами доступа к данным: реляционными и нереляционными базами данных, map-reduce фреймворками и облачными хранилищами. Центральная концепция проекта – репозитории из предметно-ориентированного дизайна (Domain-driven design, DDD).

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

Spring Data JPA – адаптер для реализаций Java Persistence API, таких как Hibernate.
Spring Data JDBC – более простой и ограниченный чем JPA адаптер для JDBC-драйверов.
Spring Data REST – создание готовых hypermedia-driven RESTful сервисов на основе репозиториев.
Spring Data KeyValue – работа с хранилищами типа ключ-значение.
• Библиотеки поддержки конкретных реализаций хранилищ: MongoDB, Redis, Cassandra, LDAP, и других.

👉@BookJava
Кто такой архитектор ПО и как им стать?

Архитектор ПО — одна из самых востребованных позиций на современном рынке IT.

Узнайте, что нужно, чтобы претендовать на эту должность, на бесплатном практическом уроке от OTUS. Спикер — опытный эксперт из крупной компании. На вебинаре разберём:

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

Встречаемся 20 мая в 19:00 мск в рамках курса «Software Architect». Все участники вебинара получат специальную цену на обучение и персональную консультацию от менеджеров OTUS!

Ссылка для регистрации: https://vk.cc/cwphbp

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

Как легко просуммировать все числа в Java-списке? Для этого мы можем использовать метод Java Stream
reduce


👉@BookJava
Что происходит внутри TreeMap.put()?

TreeMap требует либо задать порядок ключей вручную (передать в конструктор Comparator), либо чтобы они имели собственный естественный порядок (были Comparable).

Подобно нодам в хэш-таблице, внутренняя структура дерева строится из объектов внутреннего класса узла – Entry. В каждом узле хранится информация о данных (пара key-value), и о положении в структуре (ссылки на родительский узел, левую и правую ветви).

Сама структура представляет из себя красно-чёрное дерево относительно ключей. Не будем здесь углубляться в детали его реализации. О нем важно знать два факта:

1. Это бинарное дерево поиска. Значит, каждый новый элемент начинает искать свое место в дереве, сравниваясь с узлами начиная с корневого. Меньшие элементы движутся влево, большие – вправо. Для этого и требуется наличие метода compare. Дойдя до конца, пара ключ-значение «повисает» новым узлом.

2. Это самобалансирующееся дерево. Если какая-то ветка начинает становиться слишком длинной (а её эффективность вырождаться в эффективность связного списка), происходит балансировка. В результате этой операции правило из пунтка 1 остается в силе, но нагрузка на ветки перераспределяется. Самое длинное поддерево становится выше самого короткого максимум на один элемент.

👉@BookJava
Основы языка Java

Сериализация в Java
Отладка программ на Java в Intellij Idea
Сериализация в Java. Часть 2.

источник

👉@BookJava
Перечислите стандартные функциональные интерфейсы

Стандартная библиотека содержит пакет java.util.function, в котором хранятся функциональные интерфейсы для большинства случаев жизни. Их можно разделить на 5 групп:

Функции
Обычная обобщенная функция – интерфейс Function<T, R>. Принимает параметр и возвращает значение другого типа. Для примитивов есть не-generic специализации – семейство интерфейсов XtoYFunction. (Здесь и далее вместо X и Y подставляются названия примитивов).

Бинарные функции – функции с двумя параметрами и возвращаемым значением. BiFunction<T, U, R>, ToXBiFunction<T, U>.

Поставщики (Suppliers)
Интерфейсы Supplier<T>, XSupplier – не принимают ничего, возвращают (поставляют) значение.

Потребители (Consumers)
Consumer<T>, XConsumer – принимают (потребляют) значение, ничего не возвращают.
Бинарный вариант, BiConsumer<T, U> и XYConsumer, потребляет два параметра.

Предикаты
Predicate<T>, XPredicate – принимают параметр, возвращают boolean. Кроме самой функции содержат дефолтные реализации логических операций.

Операторы
Унарный (UnaryOperator<T>) и бинарный (BinaryOperator<T>) – просто функция и би-функция с одинаковым типом параметров и результата. Специализации для примитивов XUnaryOperator и XBinaryOperator вдобавок содержат дефолтные реализации методов для композиции операторов.


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

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

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

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

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

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

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

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

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

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

👉@BookJava