Глубокое погружение в Java Memory Model
Я провел в изучении JMM много часов и теперь делюсь с вами знаниями в простой и понятной форме.
В этой статье мы подробно разберем Java Memory Model (JMM) и применим полученные знания на практике. Да, в интернете накопилось достаточно много информации про JMM/happens-before, и, кажется, что очередную статью про такую заезженную тему можно пропускать мимо. Однако я постараюсь дать вам намного большее и глубокое понимание JMM, чем большинство информации в интернете. После прочтения этой статьи вы будете уверенно рассуждать о таких вещах как memory ordering, data race и happens-before. JMM — сложная тема и не стоит верить мне на слово, поэтому большинство моих утверждений подтверждается цитатами из спеки, дизассемблером и jcstress тестами.
Читать статью
Я провел в изучении JMM много часов и теперь делюсь с вами знаниями в простой и понятной форме.
В этой статье мы подробно разберем Java Memory Model (JMM) и применим полученные знания на практике. Да, в интернете накопилось достаточно много информации про JMM/happens-before, и, кажется, что очередную статью про такую заезженную тему можно пропускать мимо. Однако я постараюсь дать вам намного большее и глубокое понимание JMM, чем большинство информации в интернете. После прочтения этой статьи вы будете уверенно рассуждать о таких вещах как memory ordering, data race и happens-before. JMM — сложная тема и не стоит верить мне на слово, поэтому большинство моих утверждений подтверждается цитатами из спеки, дизассемблером и jcstress тестами.
Читать статью
Хабр
Глубокое погружение в Java Memory Model
Я провел в изучении JMM много часов и теперь делюсь с вами знаниями в простой и понятной форме. В этой статье мы подробно разберем Java Memory Model (JMM) и применим полученные знания на практике. Да,...
👍10
Мокирование API
Является ли полезным мокирование API, или оно бесполезно?
Автор предложенной статьи считает, что нужно учитывать определенные нюансы применения мокирования, чтобы делать выводы о полезности техники тестирования. 🤓
Что это за нюансы и какие проблемы встречаются при мокировании - описано в следующей статье.
Приятного чтения!
Читать статью
Является ли полезным мокирование API, или оно бесполезно?
Автор предложенной статьи считает, что нужно учитывать определенные нюансы применения мокирования, чтобы делать выводы о полезности техники тестирования. 🤓
Что это за нюансы и какие проблемы встречаются при мокировании - описано в следующей статье.
Приятного чтения!
Читать статью
DZone
API Mocking: Essential and Redundant
Is API mocking in unit tests important, or does it do nothing? I think the answer is a bit more nuanced, but we do need such tests to reduce daily churn.
👍5😢1
Профилирование, ассемблер и все-все-все
Привет, сегодня будет объёмная и обстоятельная статья о низкоуровневом профилировании и диагностике производительности. Многократно в комментариях к докладам и статьям пользователи высказывали пожелание увидеть не просто перечисление шаблонов "как нужно" и "как не нужно", а целостную историю. Поэтому вот вам статья про конкретный кейс и его историю :). Не удивляйтесь, что начнём мы с JPA, хотя казалось бы где оно и где ассемблер. По ходу дела вы всё поймёте.
Читать статью
Привет, сегодня будет объёмная и обстоятельная статья о низкоуровневом профилировании и диагностике производительности. Многократно в комментариях к докладам и статьям пользователи высказывали пожелание увидеть не просто перечисление шаблонов "как нужно" и "как не нужно", а целостную историю. Поэтому вот вам статья про конкретный кейс и его историю :). Не удивляйтесь, что начнём мы с JPA, хотя казалось бы где оно и где ассемблер. По ходу дела вы всё поймёте.
Читать статью
Teletype
Профилирование, ассемблер и все-все-все
Привет, сегодня будет объёмная и обстоятельная статья о низкоуровневом профилировании и диагностике производительности. Многократно...
👍9
Ещё раз о пропертях или откуда что берётся
Всем привет! В данной статье речь пойдёт о настраиваемых параметрах конфигурации Spring приложений. Когда я только начал изучать Spring, естественно, одним из источников знаний были готовые примеры, проекты-образцы. И меня жутко бесило, что какие-то нужные для работы приложения значения появлялись «ниоткуда». К примеру, автор какого-нибудь туториала предлагал для проверки только что созданного учебного приложения зайти на localhost по порту 8088. Откуда берётся 8088? Почему не 8089? Оказалось, что для таких настраиваемых параметров есть специальные файлы.
Читать статью
Всем привет! В данной статье речь пойдёт о настраиваемых параметрах конфигурации Spring приложений. Когда я только начал изучать Spring, естественно, одним из источников знаний были готовые примеры, проекты-образцы. И меня жутко бесило, что какие-то нужные для работы приложения значения появлялись «ниоткуда». К примеру, автор какого-нибудь туториала предлагал для проверки только что созданного учебного приложения зайти на localhost по порту 8088. Откуда берётся 8088? Почему не 8089? Оказалось, что для таких настраиваемых параметров есть специальные файлы.
Читать статью
Teletype
Ещё раз о пропертях или откуда что берётся
Всем привет! В данной статье речь пойдёт о настраиваемых параметрах конфигурации Spring приложений. Когда я только начал изучать Spring...
👍9
Метрики для улучшения архитектуры ПО
Случалось ли так, что вы изменяли одну строчку кода и получали множество ошибок компиляции во всем приложении? Или же баг появлялся там, где вы меньше всего этого ждали? Со мной такое происходило часто.
Вместе с командой мы задались вопросом: как же так получилось? Мы следовали общим рекомендациям, проводили тестирование и внедряли хорошие практики, но все же оказались в положении, когда после изменения одной строки требуется три дня на исправление.
Читать статью
Случалось ли так, что вы изменяли одну строчку кода и получали множество ошибок компиляции во всем приложении? Или же баг появлялся там, где вы меньше всего этого ждали? Со мной такое происходило часто.
Вместе с командой мы задались вопросом: как же так получилось? Мы следовали общим рекомендациям, проводили тестирование и внедряли хорошие практики, но все же оказались в положении, когда после изменения одной строки требуется три дня на исправление.
Читать статью
Telegraph
Метрики для улучшения архитектуры ПО
Случалось ли так, что вы изменяли одну строчку кода и получали множество ошибок компиляции во всем приложении? Или же баг появлялся там, где вы меньше всего этого ждали? Со мной такое происходило часто. Вместе с командой мы задались вопросом: как же так получилось?…
👍6
Создаем умные типы данных при помощи records и enums
Друзья, предложенную сегодня статью написал Брюс Эккель, автор книги "Философия Java".
Основываясь на функциональном подходе конструирования типов Java, используя "записи" (records) и перечисляемые типы (enums), Брюс научит вас получать объекты с корректными значениями. 🤔
Приятного чтения!
Читать статью
Друзья, предложенную сегодня статью написал Брюс Эккель, автор книги "Философия Java".
Основываясь на функциональном подходе конструирования типов Java, используя "записи" (records) и перечисляемые типы (enums), Брюс научит вас получать объекты с корректными значениями. 🤔
Приятного чтения!
Читать статью
👍8
ТОП 30+ вопросов по ООП с примерами
Друзья, давно не освежали в памяти базовые понятия ООП. 😃
В предложенной сегодня статье представлены ТОП 30 вопросов по ООП с примерами.
Хорошей подготовки!
Читать статью
Друзья, давно не освежали в памяти базовые понятия ООП. 😃
В предложенной сегодня статье представлены ТОП 30 вопросов по ООП с примерами.
Хорошей подготовки!
Читать статью
👍6
Настройка и мониторинг Java приложений
За годы работы у нас сформировался определенный опыт диагностики и решения проблем, связанные с производительностью наших Java-приложений. В этой статье я опишу причины торможения, с которыми приходилось столкнуться, и возможные пути их исправления. Также опишу основные настройки, которые мы делаем, и ресурсы сервера, которые использует приложение.
Речь пойдет о бизнес-приложениях с одним сервером Java-приложения и одним сервером базы данных PostgreSQL, в каждом из которых одновременно работают от 500 до 2000 сотрудников компании. Приложения разработаны на базе открытой и бесплатной платформы lsFusion, но все описанные проблемы и настройки не являются специфическими именно для нее.
Читать статью
За годы работы у нас сформировался определенный опыт диагностики и решения проблем, связанные с производительностью наших Java-приложений. В этой статье я опишу причины торможения, с которыми приходилось столкнуться, и возможные пути их исправления. Также опишу основные настройки, которые мы делаем, и ресурсы сервера, которые использует приложение.
Речь пойдет о бизнес-приложениях с одним сервером Java-приложения и одним сервером базы данных PostgreSQL, в каждом из которых одновременно работают от 500 до 2000 сотрудников компании. Приложения разработаны на базе открытой и бесплатной платформы lsFusion, но все описанные проблемы и настройки не являются специфическими именно для нее.
Читать статью
Teletype
Настройка и мониторинг Java приложений
За годы работы у нас сформировался определенный опыт диагностики и решения проблем, связанные с производительностью наших...
👍6
Что такое внедрение зависимости и инверсия управления
Внедрение зависимости и инверсия управления - два понятия, понимание которых открывает перед нами двери фреймворков, типа Spring, Guice, Dagger и т.д. 😃
Что это, как это используется и где - в предложенной сегодня статье.
Приятного чтения!
Читать статью
Внедрение зависимости и инверсия управления - два понятия, понимание которых открывает перед нами двери фреймворков, типа Spring, Guice, Dagger и т.д. 😃
Что это, как это используется и где - в предложенной сегодня статье.
Приятного чтения!
Читать статью
👍7
Запросы к MongoDB из Java с помощью билдера фильтров
В этой статье разберемся, как использовать класс Filters для запросов к MongoDB.
Класс Filters представляет собой билдер для удобного написания фильтров запросов. Фильтры — это некоторые условные операции, которые MongoDB использует для ограничения результатов.
Читать статью
В этой статье разберемся, как использовать класс Filters для запросов к MongoDB.
Класс Filters представляет собой билдер для удобного написания фильтров запросов. Фильтры — это некоторые условные операции, которые MongoDB использует для ограничения результатов.
Читать статью
Telegraph
Запросы к MongoDB из Java с помощью билдера фильтров
1. Обзор В этой статье разберемся, как использовать класс Filters для запросов к MongoDB. Класс Filters представляет собой билдер для удобного написания фильтров запросов. Фильтры — это некоторые условные операции, которые MongoDB использует для ограничения…
👍5
Пишем Java код используя проект Lombok
Можно долго спорить о необходимости и полезности проекта Lombok, но факт есть факт: количество кода для написания программы значительно сокращается. 😳
Предложенная сегодня статья расскажет о следующем:
✔️ Как работает Lombok
✔️ Формирование методов класса Object
✔️ Настройка аннотаций
✔️ Иммутабельные структуры данных
✔️ Delombok
и др.
Приятного чтения!
Читать статью
Можно долго спорить о необходимости и полезности проекта Lombok, но факт есть факт: количество кода для написания программы значительно сокращается. 😳
Предложенная сегодня статья расскажет о следующем:
✔️ Как работает Lombok
✔️ Формирование методов класса Object
✔️ Настройка аннотаций
✔️ Иммутабельные структуры данных
✔️ Delombok
и др.
Приятного чтения!
Читать статью
👍10
Как ускорить прогон тестов в многомодульном проекте Maven
Большое количество модулей Maven замедляет сборку проекта и время прогона тестов. Для того, чтобы сохранить многомодульную структуру проекта и быстро прогонять тесты, мы в Wrike написали новый инструмент — Maven Modules Merger, который сократил время некоторых сборок с 50 до 12 минут. В статье подробно расскажу о том, с какими проблемами нам помог справиться Maven Modules Merger и поделюсь подробностями его создания.
Читать статью
Большое количество модулей Maven замедляет сборку проекта и время прогона тестов. Для того, чтобы сохранить многомодульную структуру проекта и быстро прогонять тесты, мы в Wrike написали новый инструмент — Maven Modules Merger, который сократил время некоторых сборок с 50 до 12 минут. В статье подробно расскажу о том, с какими проблемами нам помог справиться Maven Modules Merger и поделюсь подробностями его создания.
Читать статью
Telegraph
Как ускорить прогон тестов в многомодульном проекте Maven
Большое количество модулей Maven замедляет сборку проекта и время прогона тестов. Для того, чтобы сохранить многомодульную структуру проекта и быстро прогонять тесты, мы в Wrike написали новый инструмент — Maven Modules Merger, который сократил время некоторых…
👍4
RabbitMQ + Spring boot + Docker. Отправляем и получаем сообщения через Producer и Consumer. Пошаговое руководство
Меня зовут Андрей Вербицкий и я столкнулся с тем, что мое знакомство с RabbitMQ, а в частности его запуск на локальной машине и отправка сообщений в очередь с помощью приложения на Spring Boot, вылилась в несколько дней поисков информации о том, как это вообще работает, какие есть сущности и как в итоге переслать это сообщение. Я решил собрать все это в одном месте и сделать из этого практическое руководство, которое поможет из ничего получить рабочий прототип и понять как это работает. Эта статья ориентированная на новичков, которые только хотят познакомиться с RabbitMQ. Целью я поставил максимально простыми словами и по шагам рассказать, как быстро и легко поднять все окружение локально, отправить и получить сообщения через очередь.
Читать статью
Меня зовут Андрей Вербицкий и я столкнулся с тем, что мое знакомство с RabbitMQ, а в частности его запуск на локальной машине и отправка сообщений в очередь с помощью приложения на Spring Boot, вылилась в несколько дней поисков информации о том, как это вообще работает, какие есть сущности и как в итоге переслать это сообщение. Я решил собрать все это в одном месте и сделать из этого практическое руководство, которое поможет из ничего получить рабочий прототип и понять как это работает. Эта статья ориентированная на новичков, которые только хотят познакомиться с RabbitMQ. Целью я поставил максимально простыми словами и по шагам рассказать, как быстро и легко поднять все окружение локально, отправить и получить сообщения через очередь.
Читать статью
Telegraph
RabbitMQ + Spring boot + Docker. Отправляем и получаем сообщения через Producer и Consumer. Пошаговое руководство
Всем привет. Поскольку не смог найти полноценной статьи о том, как с нуля написать свой spring boot сервис с подключением к нему rabbitMQ, с конфигурацией всего это чуда через графический интерфейс и успешной отправкой и получением сообщения из очереди, то…
👍16
Может ли Java-приложение использовать больше памяти, чем размер кучи
Возможно, вы замечали, что Java-приложение может превышать лимит памяти, указанный в параметре -Xmx (максимальный размер кучи). Дело в том, что JVM помимо кучи использует и другие области памяти.
Читать статью
Возможно, вы замечали, что Java-приложение может превышать лимит памяти, указанный в параметре -Xmx (максимальный размер кучи). Дело в том, что JVM помимо кучи использует и другие области памяти.
Читать статью
Telegraph
Может ли Java-приложение использовать больше памяти, чем размер кучи
1. Введение Возможно, вы замечали, что Java-приложение может превышать лимит памяти, указанный в параметре -Xmx (максимальный размер кучи). Дело в том, что JVM помимо кучи использует и другие области памяти. Давайте начнем со структуры памяти Java-приложения…
👍8
JDK Flight Recorder (JFR) - это регистратор событий, встроенный в виртуальную машину Java. 🤓
В предложенном сегодня видео мы на практическом примере углубимся в JFR и рассмотрим события, настройки, типы контента, а также, научимся запускать и останавливать записи, читать файлы записей и д.р.
Опыт, приди!
В предложенном сегодня видео мы на практическом примере углубимся в JFR и рассмотрим события, настройки, типы контента, а также, научимся запускать и останавливать записи, читать файлы записей и д.р.
Опыт, приди!
YouTube
Programmer's Guide to JDK Flight Recorder (Old, see denoscription)
For a more recent video on this subject, see here: https://youtu.be/AgFOJEkBVjg
JDK Flight Recorder (JFR) is a low-overhead profiling and troubleshooting framework built into the JVM. It comes with a powerful programming API that allows you to create application…
JDK Flight Recorder (JFR) is a low-overhead profiling and troubleshooting framework built into the JVM. It comes with a powerful programming API that allows you to create application…
👍8🔥1
Декомпозиция систем по ограниченным контекстам DDD — глубокое погружение
"Отдайте этот функционал в другую системы - он относится к ним" - ворчал мой собеседник. Ему с пылом отвечали: "Так быть не должно. Мы сами должны его сделать!" Спор грозил затянуться до вечера. Ни одна из сторон не могла привести ни одного настоящего аргумента, почему новый функционал нужно поместить в ту или иную автоматизированную систему.
Проблема была в том, что никто не понимал как правильно делить системы на части и по каким признакам включать в них новые модули. У собеседников не было никакой единой простой методики.
Но методика на самом деле есть, и весьма неплохая. Называется она Предметно Ориентированным Дизайном (Domain Driven Design, DDD). С помощью DDD деление большой системы на (микро)сервисы становится простым и понятным.
Читать статью
"Отдайте этот функционал в другую системы - он относится к ним" - ворчал мой собеседник. Ему с пылом отвечали: "Так быть не должно. Мы сами должны его сделать!" Спор грозил затянуться до вечера. Ни одна из сторон не могла привести ни одного настоящего аргумента, почему новый функционал нужно поместить в ту или иную автоматизированную систему.
Проблема была в том, что никто не понимал как правильно делить системы на части и по каким признакам включать в них новые модули. У собеседников не было никакой единой простой методики.
Но методика на самом деле есть, и весьма неплохая. Называется она Предметно Ориентированным Дизайном (Domain Driven Design, DDD). С помощью DDD деление большой системы на (микро)сервисы становится простым и понятным.
Читать статью
Telegraph
Декомпозиция систем по ограниченным контекстам DDD — глубокое погружение
"Отдайте этот функционал в другую системы - он относится к ним" - ворчал мой собеседник. Ему с пылом отвечали: "Так быть не должно. Мы сами должны его сделать!" Спор грозил затянуться до вечера. Ни одна из сторон не могла привести ни одного настоящего аргумента…
👍5
Пишем плагин для IntelliJ IDEA. Ускоряем написание тестов на DTO
Когда пишешь тесты на обширную модель (DTO), ловишь себя на мысли, что сосредоточен не на тестовых данных, а на том, как ловчее избавить себя от написания boilerplate-кода.
Как это сделать? Поискать готовое решение (плагин).
А если его нет? Тогда – написать плагин.
А если не умеешь? Стоит хотя бы начать :)
Читать статью
Когда пишешь тесты на обширную модель (DTO), ловишь себя на мысли, что сосредоточен не на тестовых данных, а на том, как ловчее избавить себя от написания boilerplate-кода.
Как это сделать? Поискать готовое решение (плагин).
А если его нет? Тогда – написать плагин.
А если не умеешь? Стоит хотя бы начать :)
Читать статью
👍6
Новые фичи в IDEA 2023.2 EAP 7
Быстро приближается релиз IntelliJ IDEA 2023.2, а значит, текущему EAP-у осталось жить недолго. Вы все еще можете успеть попробовать новые фичи, и попросить исправить их до релиза, когда исправлять будет уже поздно.
JetBrains ушел из России, но его IDE всё ещё является основным средством разработки на Java. Как у бывшего product marketing manager в JetBrains, у меня есть некоторый опыт в написании и переводе таких статей. Изначально, принести эту новость сподвигло то, что в ней есть важное обновление плагина Big Data Tools, над которым когда-то работала моя команда. Кроме того, JB разродились официальной поддержкой LSP, что наверняка, стоило им титанических моральных усилий. PMM-ов бывших не бывает, им просто перестают за это платить.
Читать статью
Быстро приближается релиз IntelliJ IDEA 2023.2, а значит, текущему EAP-у осталось жить недолго. Вы все еще можете успеть попробовать новые фичи, и попросить исправить их до релиза, когда исправлять будет уже поздно.
JetBrains ушел из России, но его IDE всё ещё является основным средством разработки на Java. Как у бывшего product marketing manager в JetBrains, у меня есть некоторый опыт в написании и переводе таких статей. Изначально, принести эту новость сподвигло то, что в ней есть важное обновление плагина Big Data Tools, над которым когда-то работала моя команда. Кроме того, JB разродились официальной поддержкой LSP, что наверняка, стоило им титанических моральных усилий. PMM-ов бывших не бывает, им просто перестают за это платить.
Читать статью
Teletype
Новые фичи в IDEA 2023.2 EAP 7
Быстро приближается релиз IntelliJ IDEA 2023.2, а значит, текущему EAP-у осталось жить недолго. Вы все еще можете успеть попробовать...
👍8😢1
Также у нас есть группа Вконтакте https://vk.com/javatutorial в ней мы выкладываем видео, статьи, вакансии и книги. Не забудь подписаться 😉
👍5
Семь принципов хорошей разработки
Принципы разработки программного обеспечения играют решающую роль при создании высококачественных, удобных в сопровождении и эффективных программных систем. К этим принципам относятся: DRY. KISS, YAGNI, SLAP, SOLID. О них и пойдет речь в данной статье.
Читать статью
Принципы разработки программного обеспечения играют решающую роль при создании высококачественных, удобных в сопровождении и эффективных программных систем. К этим принципам относятся: DRY. KISS, YAGNI, SLAP, SOLID. О них и пойдет речь в данной статье.
Читать статью
👍12
Состоялся релиз Eclipse 2023-06, с новыми фичами которого можно познакомиться из представленного видео.
YouTube
Eclipse 2023-06 Java IDE Improvements
Website: https://eclipse.org/eclipseide/2023-06
Twitter: https://twitter.com/EclipseJavaIDE
0:00 - Intro
0:17 - Java 20
1:12 - Mylyn (task-focused UI)
3:03 - Java
5:34 - Maven and Gradle
6:06 - Web
7:42 - General/Platform (Security)
9:40 - Outro
Sample…
Twitter: https://twitter.com/EclipseJavaIDE
0:00 - Intro
0:17 - Java 20
1:12 - Mylyn (task-focused UI)
3:03 - Java
5:34 - Maven and Gradle
6:06 - Web
7:42 - General/Platform (Security)
9:40 - Outro
Sample…
👍5