This media is not supported in your browser
VIEW IN TELEGRAM
🧠 Если у вас есть конфликты при мерже, не волнуйтесь!
Воспользуйтесь волшебной палочкой, чтобы разрешить простые конфликты. Убрав их, вы сможете сосредоточиться на разрешении остальных. #IntelliJIDEATips
👉@BookJava
Воспользуйтесь волшебной палочкой, чтобы разрешить простые конфликты. Убрав их, вы сможете сосредоточиться на разрешении остальных. #IntelliJIDEATips
👉@BookJava
Добавьте в свое портфолио кейс по решению задачи с микросервисной архитектурой бесплатно и всего за пару часов
На практическом уроке «Масштабируемая архитектура для систем обработки платежей».
На вебинаре:
- рассмотрим решение задачи по построению масштабируемой отказоустойчивой системы обработки платежей;
- обсудим применения шардирования, паттерна Saga, двухфазного коммита и выбор уровня изоляции транзакций;
- получим описание верхнеуровневой архитектуры.
Занятие пройдёт 24 апреля в 20:00 мск в рамках курса «Microservice Architecture». Доступна рассрочка на обучение!
Чтобы посетить открытый урок, зарегистрируйтесь: https://vk.cc/cwdNPs
На практическом уроке «Масштабируемая архитектура для систем обработки платежей».
На вебинаре:
- рассмотрим решение задачи по построению масштабируемой отказоустойчивой системы обработки платежей;
- обсудим применения шардирования, паттерна Saga, двухфазного коммита и выбор уровня изоляции транзакций;
- получим описание верхнеуровневой архитектуры.
Занятие пройдёт 24 апреля в 20:00 мск в рамках курса «Microservice Architecture». Доступна рассрочка на обучение!
Чтобы посетить открытый урок, зарегистрируйтесь: https://vk.cc/cwdNPs
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Когда используется StampedLock?
Во-первых, если блокировка
В
Не смотря на похожесть,
Итого, блокировка на штампах решает те же задачи, что
👉@BookJava
StampedLock
– примитив синхронизации, добавленный в Java с версии 8. Общий принцип его работы точно такой же, как у ReadWriteLock: захват неэксклюзивной блокировки (на чтение), и эксклюзивной (на запись). Но есть у этих классов ряд различий в деталях.Во-первых, если блокировка
ReadWriteLock
возвращает объекты типа Lock, то StampedLock
возвращает числа типа long
, которые и называется «штампами». Штамп служит идентификатором лока, он передается параметром в методы по работе с ранее захваченной блокировкой чтения или записи. Специальный штамп 0 означает неудавшийся захват.StampedLock
в отличие от ReentrantReadWriteLock – не реентрант. Это накладывает бóльшую ответственность на программиста: можно устроить дедлок на одном потоке.В
StampedLock
расширена функциональность. Новые методы с префиксом try* не висят в ожидании. Методы tryOptimistic* реализуют оптимистичную блокировку. Методы tryConvert* дают возможность изменять «уровень» заблокированности: можно попытаться превратить readLock во writeLock, и наоборот.Не смотря на похожесть,
StampedLock
не наследуется от ReadWriteLock
. Но для совместимости в нём предусмотрены методы-адаптеры asReadWriteLock
, asReadLock
и asWriteLock
.Итого, блокировка на штампах решает те же задачи, что
ReadWriteLock
, но дает больше возможностей и лучшую производительность.👉@BookJava
This media is not supported in your browser
VIEW IN TELEGRAM
🔥 Пройди тест по Java и проверь свои знания.
Ответишь — пройдешь на продвинутый курс «Java Developer. Professional» от OTUS по специальной цене + получишь доступ к записям открытых уроков курса курса
🔝 Обновленная, расширенная программа
👉 ПРОЙТИ ТЕСТ: https://otus.pw/gvG3/?erid=LjN8KJAW3
Ответишь — пройдешь на продвинутый курс «Java Developer. Professional» от OTUS по специальной цене + получишь доступ к записям открытых уроков курса курса
🔝 Обновленная, расширенная программа
👉 ПРОЙТИ ТЕСТ: https://otus.pw/gvG3/?erid=LjN8KJAW3
Еще раз о перформансе стримов в Java
Время от времени я наблюдаю или даже бываю втянутым в спор о перформансе стримов в джаве. Общеизвестно, что стримы это компромисс между перформансом и удобством. Однако я не нашел вменяемого набора бенчмарков, которые бы показали, насколько именно медленны (или быстры) стримы. Поэтому я решил написать эти бенчмарки сам.
https://medium.com/@daniel.las/speed-of-java-stream-1cc3a94b44c2
👉@BookJava
Время от времени я наблюдаю или даже бываю втянутым в спор о перформансе стримов в джаве. Общеизвестно, что стримы это компромисс между перформансом и удобством. Однако я не нашел вменяемого набора бенчмарков, которые бы показали, насколько именно медленны (или быстры) стримы. Поэтому я решил написать эти бенчмарки сам.
https://medium.com/@daniel.las/speed-of-java-stream-1cc3a94b44c2
👉@BookJava
Чего следует избегать при написании Java-кода
Небольшая статья, в которой перечислены ошибки, допускаемые разработчиками при разработке на Java. Мы хотим, чтобы наш код был эффективным и совместимым.
Использование Enum.values
Передача параметров Optional в качестве параметра метода
Использование StringBuilder
https://medium.com/@b.stoilov/things-to-avoid-while-writing-java-cd078e5aa61c
👉@BookJava
Небольшая статья, в которой перечислены ошибки, допускаемые разработчиками при разработке на 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 рекомендательную систему музыки и разберем, какие из наивных решений могут не сработать в реальных системах. На примере технологий Одноклассников спикер рассказывает, как решаются ML-задачи в гетерогенных продакшенах, где необходимо использовать вместе Java и Python.
Мастер-класс будет интересен разработчикам, которым интересна тема машинного обучения, но они либо еще не погружались в нее, либо сделали самые первые шаги.
источник
👉@BookJava
🧙♂️Что может помочь, чтобы продвинуться в Java-разработке: магия или практика?
Расскажем на курсе "Разработчик на Spring Framework" от OTUS.
🤣 Принимаем в свой орден до конца мая
⚡️ Пройди тест по Java от OTUS и проверь, готов ли ты к обучению на нашем курсе?
Ответишь — пройдешь курс по специальной цене.
👉 ПРОЙТИ ТЕСТ: https://vk.cc/cwgM5b
🎫 Курс можно приобрести в рассрочку
Расскажем на курсе "Разработчик на Spring Framework" от OTUS.
Ответишь — пройдешь курс по специальной цене.
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Please open Telegram to view this post
VIEW IN TELEGRAM
Как в Java используются final, finally и finalize
В этой статье вы узнаете, где, когда и зачем используется ключевое слово
https://telegra.ph/Kak-v-Java-ispolzuyutsya-final-finally-i-finalize-04-17
👉@BookJava
В этой статье вы узнаете, где, когда и зачем используется ключевое слово
Finalize
, и стоит ли его вообще применять в Java. Также вы узнаете о различиях между final
, finally
и finalize
.https://telegra.ph/Kak-v-Java-ispolzuyutsya-final-finally-i-finalize-04-17
👉@BookJava
Telegraph
Как в Java используются final, finally и finalize
В этой статье вы узнаете, где, когда и зачем используется ключевое слово Finalize, и стоит ли его вообще применять в Java. Также вы узнаете о различиях между final, finally и finalize. Где используется блок finally? Блок finally в Java используется для размещения…
Как не допустить сериализацию?
Чтобы не допустить автоматическую сериализацию можно переопределить private методы для создания исключительной ситуации NotSerializableException.
👉@BookJava
Чтобы не допустить автоматическую сериализацию можно переопределить 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
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
Разберем основные понятия докера и запустим 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
Как работают фильтры сервлетов?
Filter Chain – типичный пример реализации паттерна Chain of responsibility. Каждый фильтр может модифицировать запрос/ответ, и либо отправить на обработку следующему фильтру, либо заворачивать обратно. В фильтрах удобно выполнять некий общий код обработки запросов: отклонение неавторизованных обращений, логгирование, обогащение запроса/ответа данными из контекста.
Фильтр состоит из трех методов:
👉@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
Настроим 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 со скидкой!
Реклама. ООО «Отус онлайн-образование», ОГРН 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
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
Это проект, который упрощает работу с системами доступа к данным: реляционными и нереляционными базами данных, 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
Архитектор ПО — одна из самых востребованных позиций на современном рынке IT.
Узнайте, что нужно, чтобы претендовать на эту должность, на бесплатном практическом уроке от OTUS. Спикер — опытный эксперт из крупной компании. На вебинаре разберём:
- какую роль выполняет архитектор и зачем он нужен;
- какие бывают архитекторы;
- чем отличается архитектура от проектирования.
Встречаемся 20 мая в 19:00 мск в рамках курса «Software Architect». Все участники вебинара получат специальную цену на обучение и персональную консультацию от менеджеров OTUS!
Ссылка для регистрации: https://vk.cc/cwphbp
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Совет по Java 💡☕️
Как легко просуммировать все числа в Java-списке? Для этого мы можем использовать метод Java Stream
👉@BookJava
Как легко просуммировать все числа в Java-списке? Для этого мы можем использовать метод Java Stream
reduce
👉@BookJava
Что происходит внутри TreeMap.put()?
Подобно нодам в хэш-таблице, внутренняя структура дерева строится из объектов внутреннего класса узла – Entry. В каждом узле хранится информация о данных (пара key-value), и о положении в структуре (ссылки на родительский узел, левую и правую ветви).
Сама структура представляет из себя красно-чёрное дерево относительно ключей. Не будем здесь углубляться в детали его реализации. О нем важно знать два факта:
1. Это бинарное дерево поиска. Значит, каждый новый элемент начинает искать свое место в дереве, сравниваясь с узлами начиная с корневого. Меньшие элементы движутся влево, большие – вправо. Для этого и требуется наличие метода
2. Это самобалансирующееся дерево. Если какая-то ветка начинает становиться слишком длинной (а её эффективность вырождаться в эффективность связного списка), происходит балансировка. В результате этой операции правило из пунтка 1 остается в силе, но нагрузка на ветки перераспределяется. Самое длинное поддерево становится выше самого короткого максимум на один элемент.
👉@BookJava
TreeMap
требует либо задать порядок ключей вручную (передать в конструктор Comparator
), либо чтобы они имели собственный естественный порядок (были Comparable
).Подобно нодам в хэш-таблице, внутренняя структура дерева строится из объектов внутреннего класса узла – Entry. В каждом узле хранится информация о данных (пара key-value), и о положении в структуре (ссылки на родительский узел, левую и правую ветви).
Сама структура представляет из себя красно-чёрное дерево относительно ключей. Не будем здесь углубляться в детали его реализации. О нем важно знать два факта:
1. Это бинарное дерево поиска. Значит, каждый новый элемент начинает искать свое место в дереве, сравниваясь с узлами начиная с корневого. Меньшие элементы движутся влево, большие – вправо. Для этого и требуется наличие метода
compare
. Дойдя до конца, пара ключ-значение «повисает» новым узлом.2. Это самобалансирующееся дерево. Если какая-то ветка начинает становиться слишком длинной (а её эффективность вырождаться в эффективность связного списка), происходит балансировка. В результате этой операции правило из пунтка 1 остается в силе, но нагрузка на ветки перераспределяется. Самое длинное поддерево становится выше самого короткого максимум на один элемент.
👉@BookJava